formch
C FORMCH SOURCE CB215821 24/04/12 21:16:01 11897 C C-------------------------------------------------------------------- C C REACTUALISATION DES CARACTERISTIQUES POUR CERTAINES FORMULATIONS C ROUTINE APPELE PAR FOMM C C-------------------------------------------------------------------- C C ENTREES : C --------- C C IPMODL POINTEUR SUR UN MMODEL C IPCHEL POINTEUR SUR UN MCHAML DE CARACTERISTIQUES C IPT POINTEUR SUR UN CHPOINT C C C SORTIE : C -------- C C IRET 1 SI L'OPERATION EST POSSIBLE C 0 SI L'OPERATION EST IMPOSSIBLE C IPCH1 POINTEUR SUR LE CHAMELEM DE CARACTERISTIQUES C C C PASSAGE AUX NOUVEAU CHAMELEM PAR JM CAMPENON LE 20 09 90 C C------------------------------------------------------------------- C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC SMCHAML -INC SMCOORD -INC SMELEME -INC SMMODEL -INC PPARAM -INC CCOPTIO -INC CCHAMP C SEGMENT IWRK ENDSEGMENT C SEGMENT INFO INTEGER INFELL(JG) ENDSEGMENT * SEGMENT NOTYPE CHARACTER*16 TYPE(NBTYPE) ENDSEGMENT C SEGMENT MPTVAL INTEGER IPOS(NS) ,NSOF(NS) INTEGER IVAL(NCOSOU) CHARACTER*16 TYVAL(NCOSOU) ENDSEGMENT C CHARACTER*8 CMATE CHARACTER*(NCONCH) CONM PARAMETER ( NINF=3 ) INTEGER INFOS(NINF) LOGICAL lsupdp C C * lsupdp=.TRUE. C C ON VERIFIE QUE LE MCHAML DE CARACTERISTIQUE EST SUR SON SUPPORT C IF (ISUP.NE.0) THEN IRET=0 RETURN ENDIF C C C ON COPIE LE CHAMELEM DE CARACTERISTIQUES C C C ON CONVERTIT LE CHAMP POINT EN CHAMP PAR ELEMENT C IF (IERR.NE.0) THEN IRET=0 RETURN ENDIF C C ACTIVATION DU MODELE C IRET=1 MMODEL=IPMODL SEGACT MMODEL NSOUS=KMODEL(/1) NSOU1=NSOUS C____________________________________________________________________ C C BOUCLE SUR LES SOUS-ZONES C____________________________________________________________________ C DO 200 ISOUS=1,NSOU1 KERRE=0 IVACAR=0 IVACA1=0 IVADEP=0 C C ON RECUPERE L INFORMATION GENERALE C IMODEL=KMODEL(ISOUS) SEGACT IMODEL IPMAIL=IMAMOD CONM =CONMOD C C TRAITEMENT DU MODELE C MELE=NEFMOD MELEME=IMAMOD C____________________________________________________________________ C C INFORMATION SUR L'ELEMENT FINI C____________________________________________________________________ C IF (IERR.NE.0) THEN SEGDES IMODEL,MMODEL IRET=0 RETURN ENDIF C INFO=IPINF IFORM=INFELL(13) NBG =INFELL(6) C ICARA=INFELL(5) LW =INFELL(7) LRE =INFELL(9) C C ACTIVATION DU MELEME C SEGACT MELEME NBNN =NUM(/1) NBELEM=NUM(/2) C C CREATION DU TABLEAU INFOS C IF (IRTD.EQ.0) THEN NCARA=0 NCARF=0 NDEP=0 MOCARA=0 MODEPL=0 GOTO 9990 ENDIF C C RECHERCHE DES NOMS DE COMPOSANTES C IF(lnomid(1).ne.0) THEN nomid=lnomid(1) segact nomid modepl=nomid ndep=lesobl(/2) nfac=lesfac(/2) lsupdp=.false. ELSE lsupdp=.true. ENDIF C C VERIFICATION DE LEUR PRESENCE C NBTYPE=1 SEGINI NOTYPE MOTYPE=NOTYPE TYPE(1)='REAL*8' SEGSUP NOTYPE IF (IERR.NE.0) THEN NCARA=0 NCARF=0 MOCARA=0 GOTO 9990 ENDIF C____________________________________________________________________ C C TRAITEMENT DES CHAMPS DE CARACTERISTIQUES C____________________________________________________________________ C NBROBL=0 NBRFAC=0 MOCARA=0 NCARA=0 NCARF=0 NCARR=0 IVECT=0 * * CARACTERISTIQUES POUR LES BARRES * IF (IFORM.EQ.27) THEN NBROBL=1 SEGINI NOMID MOCARA=NOMID LESOBL(1)='SECT' * NBTYPE=1 SEGINI NOTYPE MOTYPE=NOTYPE TYPE(1)='REAL*8' * * CARACTERISTIQUES POUR LES POUTRES ET LES TUYAU * ELSE IF ((IFORM.EQ.7.OR.IFORM.EQ.13).AND.(IDIM.EQ.3)) THEN NBRFAC=3 SEGINI NOMID MOCARA=NOMID LESFAC(1)='VX' LESFAC(2)='VY' LESFAC(3)='VZ' IVECT=1 * NBTYPE=3 SEGINI NOTYPE MOTYPE=NOTYPE TYPE(1)='REAL*8' TYPE(2)='REAL*8' TYPE(3)='REAL*8' * * CARACTERISTIQUES POUR LES LINESPRING * ELSE IF (IFORM.EQ.15) THEN NBROBL=3 SEGINI NOMID MOCARA=NOMID LESOBL(1)='VX ' LESOBL(2)='VY ' LESOBL(3)='VZ ' * NBTYPE=1 SEGINI NOTYPE MOTYPE=NOTYPE TYPE(1)='REAL*8' * * CARACTERISTIQUES POUR LES TUFI * ELSE IF (IFORM.EQ.17) THEN NBROBL=6 SEGINI NOMID MOCARA=NOMID LESOBL(1)='VX ' LESOBL(2)='VY ' LESOBL(3)='VZ ' LESOBL(4)='VXF ' LESOBL(5)='VYF ' LESOBL(6)='VZF ' * NBTYPE=1 SEGINI NOTYPE MOTYPE=NOTYPE TYPE(1)='REAL*8' * * (fdp) CARACTERISTIQUES POUR LES JOI1 * ELSE IF (IFORM.EQ.75) THEN IF (IDIM.EQ.2) THEN NBROBL=2 SEGINI NOMID MOCARA=NOMID LESOBL(1)='V1X ' LESOBL(2)='V1Y ' ENDIF IF (IDIM.EQ.3) THEN NBROBL=6 SEGINI NOMID MOCARA=NOMID LESOBL(1)='V1X ' LESOBL(2)='V1Y ' LESOBL(3)='V1Z ' LESOBL(4)='V2X ' LESOBL(5)='V2Y ' LESOBL(6)='V2Z ' ENDIF * NBTYPE=1 SEGINI NOTYPE MOTYPE=NOTYPE TYPE(1)='REAL*8' ENDIF * IF (MOCARA.NE.0) THEN * & INFOS,3,IVACAR) * write (6,*) ' formch apres komcha 1 ivacar ',ivacar IF (IERR.NE.0)THEN SEGSUP NOTYPE GOTO 9990 ENDIF & INFOS,3,IVACA1) SEGSUP NOTYPE IF (IERR.NE.0) GOTO 9990 IF (IVECT.EQ.1) THEN MPTVAL=IVACAR IF (IVAL(NBROBL+NBRFAC).EQ.0) THEN * * MOT CLE VECT EN CAS DE CONVERSION * IVECT=2 NOMID=MOCARA SEGSUP NOMID NBRFAC=0 NBROBL=3 SEGINI NOMID MOCARA=NOMID LESOBL(1)='VX ' LESOBL(2)='VY ' LESOBL(3)='VZ ' * NBTYPE=3 SEGINI NOTYPE MOTYPE=NOTYPE TYPE(1)='REAL*8' TYPE(2)='REAL*8' TYPE(3)='REAL*8' * & INFOS,3,IVACAR) write (6,*) ' formch apres komcha 2 ivacar ',ivacar IF (IERR.NE.0)THEN SEGSUP NOTYPE GOTO 9990 ENDIF & INFOS,3,IVACA1) SEGSUP NOTYPE IF (IERR.NE.0) GOTO 9990 ENDIF ENDIF ENDIF NCARA=NBROBL NCARF=NBRFAC NCARR=NCARA+NCARF IF (MOCARA.NE.0) SEGDES NOMID * * AJUSTEMENT DE LA DIMENSION DES MELVAL * IF ((iform.EQ.7).OR.(iform.EQ.13).OR.(iform.EQ.15).OR. & (iform.EQ.17).OR.(iform.EQ.75)) THEN IF (NCARR.NE.0) THEN MPTVAL=IVACAR MELVAL=IVAL(1) C cas d'une composante scalaire N1PTEL=VELCHE(/1) N1EL =VELCHE(/2) C (fdp) correction : on remplace .LT. par .LE. pour gerer le cas ou il C n'y a qu'un seul element C (sinon plantage dans le cas d'un seul element TUFI) IF((N1EL.LE.NBELEM).OR.(N1PTEL.LE.NBG)) THEN N1EL = MAX(N1EL,NBELEM) N1PTEL= MAX(N1PTEL,NBG) N2EL = 0 N2PTEL= 0 IF (IFORM.EQ.7.OR.IFORM.EQ.13) N1PTEL=1 MPTVAL=IVACA1 DO 128 ID=1,NBROBL+NBRFAC MELVAL=IVAL(ID) ** write(6,*) 'boucle 128 segadj melval',melval IF(MELVAL.NE.0) SEGADJ MELVAL 128 CONTINUE ENDIF ENDIF ENDIF * * * MASSI COQUE COQEP POUT CIST THER TUYA LISP * C (fdp) on prevoit le cas des elements JOI1 (iform = 75) IF(iform.EQ.75) GOTO 66 IF(iform.GT.38) GOTO 30 GOTO (30,22,30,22,30,22,120,22,30,22,22,22,120,22,90,22, * * TUFI RCMA RCCO SULI MEMB UNIA THER INCO PORE * & 70,22,22,22,22,22,22,22,22,22,30,22,22,22,30,22,30,22, * * RACO HOMO * & 30,22,22,22),IFORM C 22 CONTINUE IRET=0 MOTERR(1:8)=NOMFR(IFORM) GOTO 9990 C______________________________________________________________________ C C FORMULATION MASSIVE - RIEN DE SPECIAL A FAIRE C FORMULATION POREUSE - RIEN DE SPECIAL A FAIRE C FORMULATIONS COQUE - ON NE FAIT RIEN C FORMULATIONS UNIAXIALE - ON NE FAIT RIEN C______________________________________________________________________ C 30 CONTINUE GOTO 150 C______________________________________________________________________ C C FORMULATION LINESPRING C______________________________________________________________________ C 90 CONTINUE SEGINI IWRK DO IB=1,NBELEM C C ON CHERCHE LES COORDONNEES DES NOEUDS ET LES DEPLACEMENTS C IE=1 DO IGAU=1,NBNN MPTVAL=IVADEP DO ICOMP=1,NDEP MELVAL=IVAL(ICOMP) IGMN=MIN(IGAU,VELCHE(/1)) IBMN=MIN(IB ,VELCHE(/2)) XDDL(IE)=VELCHE(IGMN,IBMN) IE=IE+1 enddo enddo C DO IC=1,NBG MPTVAL=IVACAR IF(IC.EQ.2) GO TO 948 DO 923 ID=1,3 MELVAL=IVAL(ID) IGMN=MIN(IC,VELCHE(/1)) IBMN=MIN(IB,VELCHE(/2)) 923 CONTINUE ICC=1 IF(IC.GT.1) ICC=2 C IF(KERRE.NE.0) THEN INTERR(1)=ISOUS INTERR(2)=IB GO TO 927 ENDIF C C REMPLISSAGE C 948 CONTINUE MPTVAL=IVACA1 DO ID=1,3 MELVAL=IVAL(ID) * enddo enddo enddo C 927 SEGSUP IWRK GOTO 151 C_______________________________________________________________________ C C FORMULATION TUYAU FISSURE C_______________________________________________________________________ C 70 CONTINUE SEGINI IWRK DO IB=1,NBELEM C C ON CHERCHE LES COORDONNEES DES NOEUDS ET LES DEPLACEMENTS C IE=1 DO IC=1,NBNN MPTVAL=IVADEP DO ID=1,NDEP MELVAL=IVAL(ID) IGMN=MIN(IC,VELCHE(/1)) IBMN=MIN(IB,VELCHE(/2)) XDDL(IE)=VELCHE(IGMN,IBMN) IE=IE+1 enddo enddo C MPTVAL=IVACAR DO 723 ID=1,6 MELVAL=IVAL(ID) IBMN=MIN(IB,VELCHE(/2)) 723 CONTINUE C C IF(KERRE.NE.0) THEN INTERR(1)=ISOUS INTERR(2)=IB GO TO 727 ENDIF C C REMPLISSAGE C DO IC=1,NBG MPTVAL=IVACA1 DO 726 ID=1,6 MELVAL=IVAL(ID) 726 CONTINUE C enddo enddo C 727 SEGSUP IWRK GOTO 151 C_______________________________________________________________________ C C (fdp) FORMULATION JOINT 1 AVEC REPERE LOCAL LIE C_______________________________________________________________________ C 66 CONTINUE SEGINI IWRK C DO IB=1,NBELEM C C ON CHERCHE LES COORDONNEES DES NOEUDS, LES DEPLACEMENTS ET C LES ROTATIONS C IE=1 DO IC=1,NBNN MPTVAL=IVADEP DO ID=1,NDEP MELVAL=IVAL(ID) IGMN=MIN(IC,VELCHE(/1)) IBMN=MIN(IB,VELCHE(/2)) XDDL(IE)=VELCHE(IGMN,IBMN) IE=IE+1 ENDDO ENDDO C C ON CHERCHE LES VECTEURS ORIENTANT L'ELEMENT JOINT DANS LE C CHAMP DE CARACTERISTIQUES C MPTVAL=IVACAR DO IC=1,NBROBL MELVAL=IVAL(IC) IBMN=MIN(IB,VELCHE(/2)) ENDDO C C ON APPLIQUE LA ROTATION AUX VECTEURS ORIENTANT LE JOINT C ITOUR=-1*INFMOD(9) IF (ITOUR.EQ.1) THEN IF (KERRE.EQ.1) THEN RETURN ENDIF ENDIF C C REMPLISSAGE DU CHAMP DE CARACTERISTIQUES AVEC LES NOUVEAUX C VECTEURS C MPTVAL=IVACA1 DO IC=1,NBROBL MELVAL=IVAL(IC) ENDDO C ENDDO C SEGSUP IWRK GOTO 151 C_______________________________________________________________________ C C FORMULATION POUTRE ET TUYAU C_______________________________________________________________________ C 120 CONTINUE SEGINI IWRK C DO 121 IB=1,NBELEM C C ON CHERCHE LES COORDONNEES DES NOEUDS ET LES DEPLACEMENTS C IE=1 DO IC=1,NBNN MPTVAL=IVADEP DO ID=1,NDEP MELVAL=IVAL(ID) IGMN=MIN(IC,VELCHE(/1)) IBMN=MIN(IB,VELCHE(/2)) XDDL(IE)=VELCHE(IGMN,IBMN) IE=IE+1 enddo enddo C C MPTVAL=IVACAR IF (IVECT.EQ.1) THEN do id=1,3 MELVAL=IVAL(id) segact melval ** write(6,*) 'melval ',melval,velche(/1),velche(/2) IBMN=MIN(IB,VELCHE(/2)) enddo C C CAS DU CHAMELEM COMVERTI C ELSE IF (IVECT.EQ.2) THEN DO 6429 IC=1,3 MELVAL=IVAL(IC) IBMN=MIN(IB,VELCHE(/2)) 6429 CONTINUE ENDIF C IF (IVECT.NE.0) THEN C IF(KERRE.NE.0) THEN INTERR(1)=ISOUS INTERR(2)=IB GO TO 127 ENDIF C C REMPLISSAGE C MPTVAL=IVACA1 DO 126 ID=1,3 MELVAL=IVAL(ID) SEGACT MELVAL*MOD ** write(6,*) vect(id) 126 CONTINUE ENDIF 121 CONTINUE C 127 SEGSUP IWRK GOTO 151 C_______________________________________________________________________ C C AUTRE FORMULATION C_______________________________________________________________________ C 151 CONTINUE 150 CONTINUE SEGDES MELEME SEGSUP INFO SEGDES IMODEL MPTVAL=IVACAR IF (MPTVAL.NE.0) THEN SEGACT MPTVAL DO 152 I=1,ival(/1) IF (IVAL(I).NE.0) THEN MELVAL=IVAL(I) SEGDES MELVAL ENDIF 152 CONTINUE IF (MOCARA.NE.0) SEGSUP MPTVAL ENDIF C MPTVAL=IVACA1 IF (MPTVAL.NE.0) THEN SEGACT MPTVAL DO I=1,IVAL(/1) IF (IVAL(I).NE.0) THEN MELVAL=IVAL(I) SEGDES MELVAL ENDIF ENDDO IF (MOCARA.NE.0) SEGSUP MPTVAL ENDIF C MPTVAL=IVADEP IF (MPTVAL.NE.0) THEN SEGACT MPTVAL DO 153 I=1,ival(/1) IF (IVAL(I).NE.0) THEN MELVAL=IVAL(I) SEGDES MELVAL ENDIF 153 CONTINUE SEGSUP MPTVAL ENDIF C NOMID=MOCARA IF (MOCARA.NE.0) SEGSUP NOMID NOMID=MODEPL IF(lsupdp) SEGSUP NOMID C IF(KERRE.NE.0) THEN IRET=0 SEGDES MMODEL RETURN ENDIF C 200 CONTINUE C SEGDES MMODEL RETURN C 9990 CONTINUE C C ERREUR DANS UNE SOUS ZONE DESACTIVATION ET RETOUR C SEGDES MELEME * SEGSUP INFO SEGDES IMODEL MPTVAL=IVACAR DO 9152 I=1,IVAL(/1) IF (IVAL(I).NE.0) THEN MELVAL=IVAL(I) SEGDES MELVAL ENDIF 9152 CONTINUE IF (MOCARA.NE.0) SEGSUP MPTVAL C MPTVAL=IVACA1 if (mptval.ne.0) then DO I=1,IVAL(/1) IF (IVAL(I).NE.0) THEN MELVAL=IVAL(I) SEGDES MELVAL ENDIF ENDDO IF (MOCARA.NE.0) SEGSUP MPTVAL endif C MPTVAL=IVADEP if (mptval.ne.0) then DO 9153 I=1,IVAL(/1) IF (IVAL(I).NE.0) THEN MELVAL=IVAL(I) SEGDES MELVAL ENDIF 9153 CONTINUE IF (MODEPL.NE.0) SEGSUP MPTVAL endif C NOMID=MOCARA IF (MOCARA.NE.0) SEGSUP NOMID NOMID=MODEPL IF (MODEPL.NE.0.AND.lsupdp) SEGSUP NOMID C RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales