fofis1
C FOFIS1 SOURCE CB215821 24/04/12 21:16:01 11897 1 IPCHE4,IPCHP1,IRET) * ************************************************************************ * * ENTREES : * _________ * * IPMODL = POINTEUR SUR UN MMODEL * IPCHE1 = POINTEUR SUR UN MCHAML DE CONTRAINTES * IPCHE2 = POINTEUR SUR UN MCHAML DE GRADIENT * IPCHE3 = POINTEUR SUR UN MCHAML DE GRADIENT DE FLEXION * IPCHE4 = POINTEUR SUR UN MCHAML DE CARACTERISTIQUES * * SORTIES : * __________ * * IPCHP1 = POINTEUER SUR UN CHPOINT DE FORCES NODALES * IRET = 1 OU 0 SUIVANT SUCCES OU PAS * ************************************************************************ IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) * -INC PPARAM -INC CCOPTIO -INC CCHAMP -INC SMCHAML -INC SMCHPOI -INC SMELEME -INC SMCOORD -INC SMMODEL -INC SMINTE * SEGMENT WRK1 REAL*8 XFORC(LRE), XSTRS(NSTRS), XE(3,NBBB) ENDSEGMENT * SEGMENT WRK2 ENDSEGMENT * SEGMENT WRK3 ENDSEGMENT * SEGMENT WRK4 REAL*8 BPSS(3,3), XEL(3,NBBB), XFOLO(LRE) ENDSEGMENT * SEGMENT MPTVAL INTEGER IPOS(NS) ,NSOF(NS) INTEGER IVAL(NCOSOU) CHARACTER*16 TYVAL(NCOSOU) ENDSEGMENT * SEGMENT NOTYPE CHARACTER*16 TYPE(NBTYPE) ENDSEGMENT * PARAMETER ( NINF=3 ) INTEGER INFOS(NINF) CHARACTER*(NCONCH) CONM LOGICAL lsupfo,lsupgd,lsupgf,lsupco INTEGER ISUP1,ISUP2,ISUP3,ISUP4 * ISUP1=0 ISUP2=0 ISUP3=0 ISUP4=0 IRET = 0 IPCHP1 = 0 * * Verification du sous-type et du lieu support du MCHAML de contrain * MCHELM=IPCHE1 SEGACT,MCHELM IF(TITCHE.NE.'CONTRAINTES')THEN MOTERR(1:32)='CONTRAINTES' RETURN ENDIF IF (ISUP1.GT.1) RETURN * * Verification du sous-type et du lieu support du MCHAML de gradient * MCHELM=IPCHE2 SEGACT,MCHELM IF(TITCHE.NE.'GRADIENT')THEN MOTERR(1:32)='GRADIENT' RETURN ENDIF IF (ISUP2.GT.1) RETURN * * Verification du sous-tyoe et du lieu support du MCHAML * de gradient de flexion * IF (IPCHE3.NE.0) THEN MCHELM=IPCHE3 SEGACT,MCHELM IF(TITCHE.NE.'GRADIENT DE FLEXION')THEN MOTERR(1:32)='GRADIENT DE FLEXION' RETURN ENDIF IF (ISUP3.GT.1) RETURN ENDIF * * Verification du sous-type et du lieu support du MCHAML * de caracteristiques * IF (IPCHE4.NE.0) THEN MCHELM=IPCHE4 SEGACT,MCHELM IF(TITCHE.NE.'CARACTERISTIQUES')THEN MOTERR(1:32)='CARACTERISTIQUES' RETURN ENDIF IF (ISUP4.GT.1) RETURN ENDIF C_______________________________________________________________________ C C ACTIVATION DU MODELE C_______________________________________________________________________ C MMODEL=IPMODL SEGACT MMODEL NSOUS=KMODEL(/1) C C INITIALISATION DU MCHELM DE FORCES C L1=6 N1=NSOUS N3=6 SEGINI MCHELM IPCHE5=MCHELM IFOCHE=IFOUR TITCHE='FORCES' C_______________________________________________________________________ C C BOUCLE SUR LES SOUS ZONES C_______________________________________________________________________ C DO 500 ISOUS=1,NSOUS C IVASTR=0 NSTR=0 IVAGRA=0 NGRAD=0 IVAGRF=0 NGRAF=0 IVACAR=0 NCARR=0 IVAFOR=0 C C TRAITEMENT DU MODELE C IMODEL=KMODEL(ISOUS) SEGACT IMODEL CONM=CONMOD MELE=NEFMOD IPMAIL=IMAMOD C C ACTIVATION DU MELEME C MELEME=IPMAIL SEGACT MELEME NBNN=NUM(/1) NBELEM=NUM(/2) C C RECOPIE DU MCHELM C IMACHE(ISOUS)=IPMAIL C C CREATION DU TABLEAU INFOS C IF (IRTD.EQ.0) GOTO 991 C_______________________________________________________________________ C C INFORMATIONS SUR L'{L{MENT FINI C_______________________________________________________________________ C * CALL ELQUOI(MELE,0,3,IPINF,IMODEL) * IF (IERR.NE.0) GOTO 991 * INFO=IPINF NBPGS= INFELE(4) NBPGAU = INFELE(6) * MINTE = INFELE(11) MINTE=infmod(5) IPMINT= MINTE MINTE1= INFMOD(8) NSTRS = INFELE(16) MFR = INFELE(13) LW = INFELE(7) NDDL = INFELE(15) LRE = INFELE(9) IPPORE=0 IF(MFR.EQ.33) IPPORE=NBNN LVAL = (LRE*(LRE+1))/2 NHRM = NIFOUR C SEGACT MINTE C C REMPLIR LE TABLEAU DE L'INFORMATION DE MCHAML C INFCHE(ISOUS,1)=0 INFCHE(ISOUS,2)=0 INFCHE(ISOUS,3)=NIFOUR INFCHE(ISOUS,4)=0 INFCHE(ISOUS,5)=0 INFCHE(ISOUS,6)=1 C_______________________________________________________________________ C C NOMS DE COMPOSANTES NECESSAIRES ( FORCES ) C_______________________________________________________________________ C if(lnomid(2).ne.0) then nomid = lnomid(2) segact nomid moforc=nomid nfor=lesobl(/2) nfac=0 lsupfo=.false. else lsupfo=.true. endif C C CREATION DU MCHAML C N2=NFOR SEGINI MCHAML ICHAML(ISOUS)=MCHAML NOMID=MOFORC SEGACT NOMID DO 110 ICOMP=1,NFOR NOMCHE(ICOMP)=LESOBL(ICOMP) TYPCHE(ICOMP)='REAL*8' 110 CONTINUE if(lsupfo)SEGSUP NOMID C_______________________________________________________________________ C C NOMS DE COMPOSANTES NECESSAIRES(CONTRAINTES,GRADIENT, C GRADIENT DE FLEXION ) C_______________________________________________________________________ C if(lnomid(4).ne.0) then nomid=lnomid(4) segact nomid mostrs=nomid nstr=lesobl(/2) nfac=lesfac(/2) lsupco=.false. else lsupco=.true. endif C if(lnomid(3).ne.0) then nomid=lnomid(3) segact nomid mograd=nomid ngrad=lesobl(/2) nfac=lesfac(/2) lsupgd=.false. else lsupgd=.true. endif C * write(6,*) ' lnomid() ' ,(lnomid(iou),iou=1,12) if(lnomid(11).ne.0) then nomid=lnomid(11) segact nomid mograf=nomid ngraf=lesobl(/2) nfac=lesfac(/2) lsupgf=.false. else lsupgf=.true. endif C C VERIFICATION DE LEUR PRESENCE C NBTYPE=1 SEGINI NOTYPE MOTYPE=NOTYPE TYPE(1)='REAL*8' NOMID=MOSTRS if(lsupco)SEGSUP NOMID IF (IERR.NE.0)THEN SEGSUP NOTYPE GOTO 510 ENDIF * IF (ISUP1.EQ.1) THEN ENDIF * NOMID=MOGRAD * write(6,*) ' lsupgd 1',lsupgd if(lsupgd)SEGSUP NOMID IF (IERR.NE.0)THEN SEGSUP NOTYPE GOTO 510 ENDIF * IF (ISUP2.EQ.1) THEN ENDIF * IF(NGRAF.NE.0)THEN IF(IPCHE3.NE.0)THEN NOMID=MOGRAF if(lsupgf)SEGSUP NOMID IF (IERR.NE.0)THEN SEGSUP NOTYPE GOTO 510 ENDIF * IF (ISUP3.EQ.1) THEN ENDIF ELSE MOTERR(1:8)='GRAFLEXI' MOTERR(9:12)=NOMTP(MELE) MOTERR(13:20)='FOFISS' GO TO 510 ENDIF ENDIF SEGSUP NOTYPE C_____________________________________________________________________ * TRAITEMENT DES CHAMPS DE CARACTERISTIQUES * C____________________________________________________________________ C NBROBL=0 NBRFAC=0 MOCARA=0 IVECT=0 NOMID=0 ** write(6,*) ' mfr ifour ipche4 ngraf ipche3 ' * $ ,mfr,ifour,ipche4, ngraf, ipche3 * write(6,*) ' lsupgd 2',lsupgd * * EPAISSEUR DANS LE CAS MASSIF EN CONTRAINTES PLANES * IF((MFR.EQ.1.OR.MFR.EQ.33).AND.IFOUR.EQ.-2. + AND.IPCHE4.NE.0)THEN NBROBL=0 NBRFAC=1 SEGINI NOMID MOCARA=NOMID LESFAC(1)='DIM3' * NBTYPE=1 SEGINI NOTYPE MOTYPE=NOTYPE TYPE(1)='REAL*8' * * EPAISSEUR ET EXCENTREMENT DANS LE CAS DES COQUES * ELSEIF (MFR.EQ.3.OR.MFR.EQ.5.OR.MFR.EQ.9) THEN NBROBL=1 IF(MFR.EQ.3.AND.IFOUR.EQ.-2) THEN NBRFAC=2 ELSE NBRFAC=1 ENDIF SEGINI NOMID MOCARA=NOMID LESOBL(1)='EPAI' LESFAC(1)='EXCE' IF(MFR.EQ.3.AND.IFOUR.EQ.-2) LESFAC(2)='DIM3' * NBTYPE=1 SEGINI NOTYPE MOTYPE=NOTYPE TYPE(1)='REAL*8' * * SECTION POUR LES BARRES * ELSE IF (MFR.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 * ELSE IF (MFR.EQ.7 ) THEN NBROBL=4 NBRFAC=5 SEGINI NOMID MOCARA=NOMID LESOBL(1)='TORS' LESOBL(2)='INRY' LESOBL(3)='INRZ' LESOBL(4)='SECT' LESFAC(1)='SECY' LESFAC(2)='SECZ' LESFAC(3)='VX' LESFAC(4)='VY' LESFAC(5)='VZ' IVECT=1 * NBTYPE=9 SEGINI NOTYPE MOTYPE=NOTYPE TYPE(1)='REAL*8' TYPE(2)='REAL*8' TYPE(3)='REAL*8' TYPE(4)='REAL*8' TYPE(5)='REAL*8' TYPE(6)='REAL*8' TYPE(7)='REAL*8' TYPE(8)='REAL*8' TYPE(9)='REAL*8' * * CARACTERISTIQUES POUR LES TUYAUX * ELSE IF (MFR.EQ.13) THEN NBROBL=2 NBRFAC=4 SEGINI NOMID MOCARA=NOMID LESOBL(1)='EPAI' LESOBL(2)='RAYO' LESFAC(1)='RACO' LESFAC(2)='VX' LESFAC(3)='VY' LESFAC(4)='VZ' IVECT=1 * NBTYPE=4 SEGINI NOTYPE MOTYPE=NOTYPE TYPE(1)='REAL*8' TYPE(2)='REAL*8' TYPE(3)='REAL*8' TYPE(4)='REAL*8' TYPE(5)='REAL*8' TYPE(6)='REAL*8' * * CARACTERISTIQUES POUR LES LINESPRING * ELSE IF (MFR.EQ.15) THEN NBROBL=5 SEGINI NOMID MOCARA=NOMID LESOBL(1)='EPAI' LESOBL(2)='FISS' LESOBL(3)='VX ' LESOBL(4)='VY ' LESOBL(5)='VZ ' * NBTYPE=1 SEGINI NOTYPE MOTYPE=NOTYPE TYPE(1)='REAL*8' * * CARACTERISTIQUES POUR LES TUYAUX FISSURES * ELSE IF (MFR.EQ.17) THEN NBROBL=9 SEGINI NOMID MOCARA=NOMID LESOBL(1)='RAYO' LESOBL(2)='EPAI' LESOBL(3)='VX ' LESOBL(4)='VY ' LESOBL(5)='VZ ' LESOBL(6)='VXF ' LESOBL(7)='VYF ' LESOBL(8)='VZF ' LESOBL(9)='ANGL' * NBTYPE=1 SEGINI NOTYPE MOTYPE=NOTYPE TYPE(1)='REAL*8' * * CARACTERISTIQUES DES ELEMENTS HOMOGENEISES * ELSE IF (MFR.EQ.37) THEN IF(IFOUR.EQ.1.OR.IFOUR.EQ.0) THEN NBROBL=4 SEGINI NOMID MOCARA=NOMID LESOBL(1)='SCEL' LESOBL(2)='SFLU' LESOBL(3)='EPS ' LESOBL(4)='XINE' ELSE NBROBL=3 SEGINI NOMID MOCARA=NOMID LESOBL(1)='SCEL' LESOBL(2)='SFLU' LESOBL(3)='EPS ' ENDIF * NBTYPE=1 SEGINI NOTYPE MOTYPE=NOTYPE TYPE(1)='REAL*8' ENDIF * IF (MOCARA.NE.0) THEN IF (IPCHE4.NE.0) THEN * 1 INFOS,3,IVACAR) SEGSUP NOTYPE IF (IERR.NE.0) GOTO 9990 ELSE MOTERR(1:8)='CARACTER' MOTERR(9:12)=NOMTP(MELE) MOTERR(13:20)='FOFISS ' SEGSUP NOMID NCARA=0 NCARF=0 MOCARA=0 GOTO 510 ENDIF NCARA=NBROBL NCARF=NBRFAC NCARR=NCARA+NCARF * IF (ISUP4.EQ.1) THEN IF(IERR.NE.0)THEN SEGSUP NOMID ISUP4=0 GOTO 510 ENDIF ENDIF * write(6,*) ' lsupgd 3 ' , lsupgd SEGSUP NOMID * write(6,*) ' lsupgd 4 ' , lsupgd , nomid ENDIF NCARA=NBROBL NCARF=NBRFAC NCARR=NCARA+NCARF C C RECHERCHE DES TAILLES DE MELVAL C N1EL=NBELEM N1PTEL=NBNN NBPTEL=N1PTEL NEL =N1EL C C CREATION DU MELVAL DE FORCES C NS=1 NCOSOU=NFOR SEGINI MPTVAL IVAFOR=MPTVAL DO 100 ICOMP=1,NFOR N2PTEL=0 N2EL=0 SEGINI MELVAL IELVAL(ICOMP)=MELVAL IVAL(ICOMP)=MELVAL 100 CONTINUE C C======================================================================= C NUMERO DES ETIQUETTES : C ETIQUETTES DE 1 A 98 POUR TRAITEMENT SPECIFIQUE A L ELEMENT C DANS LA ZONE SPECIFIQUE A CHAQUE ELEMENT COMMENCANT PAR : C 5 CONTINUE C ELEMENT 5 ETIQUETTES 1005 2005 3005 4005 ... C 44 CONTINUE C ELEMENT 44 ETIQUETTES 1044 2044 3044 4044 ... C======================================================================= GOTO (99,99,99, 4,99, 4,99, 4,99, 4,99,99,99, 4, 4, 4, 4,99,99,99, 1 99,99, 4, 4, 4, 4,99,99,99,99,99,99,99,99,99,99,99,99,99,99, 2 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, 3 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, 4 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99),MELE C C GOTO (99,99,99, 4,99, 4,99, 4,99, 4,99,99,99, 4, 4, 4, 4,99,99,99, C 1 99,99, 4, 4, 4, 4,27,28,29,30,99,99,99,99,99,99,99,99,99,99, C 2 41,29,99,44,99,99,99,99,49,30,51,99,99,99,99,41,99,99,99,99, C 3 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, C 4 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99),MELE C 99 CONTINUE MOTERR(1:4)=NOMTP(MELE) MOTERR(5:12)='FOFISS' GOTO 510 C C SECTEUR DE CALCUL POUR LES ELEMENTS MASSIFS C 4 CONTINUE DIM3=1.D0 NBNO=NBNN NBBB=NBNN SEGINI WRK1,WRK2 I195=0 I259=0 DO 3004 IB=1,NBELEM C C ON CHERCHE LES COORDONNEES DES NOEUDS DE L ELEMENT IB C C C MISE A 0 DES FORCES C C C BOUCLE SUR LES POINTS DE GAUSS C ISDJC=0 DO 5004 IGAU=1,NBPGAU C C RECUPERATION DE L'EPAISSEUR C IF (IFOUR.EQ.-2)THEN MPTVAL=IVACAR IF (IVACAR.NE.0) THEN MELVAL=IVAL(1) IF (MELVAL.NE.0) THEN IGMN=MIN(IGAU,VELCHE(/1)) IBMN=MIN(IB,VELCHE(/2)) DIM3=VELCHE(IGMN,IBMN) ELSE DIM3=1.D0 ENDIF ENDIF ENDIF C C ***************** C ON CHERCHE LES GRADIENTS MPTVAL=IVAGRA DO 1104 ICOMP=1,9 MELVAL=IVAL(ICOMP) IBMN=MIN(IB,VELCHE(/2)) IGMN=MIN(IGAU,VELCHE(/1)) 1104 CONTINUE C ***************** IF(DJAC.LT.0.) ISDJC=ISDJC+1 IF(DJAC.EQ.0.) THEN INTERR(1) = IB GOTO 9904 ENDIF DJAC=ABS(DJAC)*POIGAU(IGAU) C C ON CHERCHE LES CONTRAINTES C MPTVAL=IVASTR DO 6004 ICOMP=1,NSTR MELVAL=IVAL(ICOMP) IBMN=MIN(IB,VELCHE(/2)) IGMN=MIN(IGAU,VELCHE(/1)) XSTRS(ICOMP)=VELCHE(IGMN,IBMN) 6004 CONTINUE C C CALCUL DE BPRIM*SIGMA C 5004 CONTINUE IF (ISDJC.NE.0.AND.ISDJC.NE.NBPGAU) THEN INTERR(1) = IB GOTO 9904 ENDIF C C ON RANGE XFORC DANS MELVAL C IE=0 MPTVAL=IVAFOR DO IGAU=1,NBNN DO ICOMP=1,NFOR IE=IE+1 MELVAL=IVAL(ICOMP) IBMN=MIN(IB ,VELCHE(/2)) VELCHE(IGAU,IBMN)=XFORC(IE) enddo enddo 3004 CONTINUE 9904 CONTINUE SEGSUP WRK1,WRK2 GOTO 510 C ------------------------------------------------------------------ C ELEMENT COQ3 (NON) | | | | | | | | | | | | | | | | | | | C ********************************************************************* * ATTENTION LORS DU BRANCHEMENT IL FAUT PASSER AUX NOUVEAUX * CHAMELEMS COMME POUR LES ELEMENTS MASSIF ********************************************************************* * 27 CONTINUE * NBBB=NBNN * LW=151 * SEGINI WRK1,WRK3 * DO 3027 IB=1,NBELEM * IBMN1=MIN(IB,NEL1) * IBMN4=MIN(IB,NEL4) *C *C ON CHERCHE LES COORDONNEES DES NOEUDS DE L ELEMENT IB *C * CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE) *C *C ON REACTUALISE LA GEOMETRIE *C * IF(IRT4.EQ.0) GOTO 8027 * DO 4027 IC=1,3 * DO 4027 ID=1,3 * XE(ID,IC)=XE(ID,IC)+MELVA3.VELCHA(IC,ID,IB) * 4027 CONTINUE * 8027 CONTINUE *C *C MISE A ZERO DES FORCES INTERNES *C * CALL ZERO(XFORC,1,LRE) *C *C ON CHERCHE LES EPAISSEURS ET ON MOYENNE * * EPAIST=XZER * DO 5027 IC=1,NBPTE4 * EPAIST=EPAIST+MELVA4.VELCHA(IC,1,IBMN4) *5027 CONTINUE * EPAIST=EPAIST/NBPTE4 * **************** * ON CHERCHE LES GRADIENTS ET GRAFLEXIS * * DO 1127 IC=1,9 * GRAD(IC)=MELVA2.VELCHA(1,IC,IBMN1) *1127 CONTINUE * IF (IRT5.EQ.0) GO TO 1327 * DO 1227 IC=1,9 * GRAF(IC)=MELVA5.VELCHA(1,IC,IBMN1) *1227 CONTINUE *1327 CONTINUE * **************** * ON CHERCHE LES CONTRAINTES * * DO 7027 IC=1,NCOEL1 * XSTRS(IC)=MELVA1.VELCHA(1,IC,IBMN1) * 7027 CONTINUE *C *C ON CALCULE B*SIGMA *C * CALL BSIGCO(EPAIST,XE,XSTRS,XFORC,WORK,WORK,WORK(82),WORK(88), * * WORK(92),WORK(119),WORK(128),WORK(134),WORK(143),WORK(143), * * WORK(146),WORK(149)) *C *C RANGEMENT DANS MELVAL *C * IE=0 * DO 9027 IC=1,NBNN * DO 9027 ID=1,6 * IE=IE+1 * VELCHA(IC,ID,IB)=XFORC(IE) * 9027 CONTINUE * 3027 CONTINUE * SEGSUP WRK1,WRK3 * GOTO 510 *C *C ELEMENT DKT (NON) *C ********************************************************************* * ATTENTION LORS DU BRANCHEMENT IL FAUT PASSER AUX NOUVEAUX * CHAMELEMS COMME POUR LES ELEMENTS MASSIF ********************************************************************* * 28 CONTINUE * NBNO=NBNN * NBBB=NBNN * SEGINI WRK1,WRK2,WRK3,WRK4 * DO 3028 IB=1,NBELEM * IBMN1=MIN(IB,NEL1) * IBMN4=MIN(IB,NEL4) *C *C ON CHERCHE LES COORDONNEES DES NOEUDS DE L ELEMENT IB *C * CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE) *C *C ON REACTUALISE LA GEOMETRIE *C * IF(IRT4.EQ.0) GOTO 8028 * DO 4028 IC=1,NBPTE3 * DO 4028 ID=1,3 * XE(ID,IC)=XE(ID,IC)+MELVA3.VELCHA(IC,ID,IB) * 4028 CONTINUE * 8028 CONTINUE *C *C MISE A ZERO DES FORCES INTERNES *C * CALL ZERO(XFORC,1,LRE) *C * CALL VPAST(XE,BPSS) *C BPSS STOCKE LA MATRICE DE PASSAGE * CALL VCORLC (XE,XEL,BPSS) * CALL TRPOSE(BPSS) *C *C ON CHERCHE LES EPAISSEURS ET ON MOYENNE *C * EPAIST=XZER * DO 5028 IC=1,NBPTE4 * EPAIST=EPAIST+MELVA4.VELCHA(IC,1,IBMN4) * 5028 CONTINUE * EPAIST=EPAIST/NBPTE4 *C *C BOUCLE SUR LES POINTS DE GAUSS *C * DO 6028 IGAU=1,NBPGAU * IGMN1=MIN(IGAU,NBPTE1) *C ******************* *C ON CHERCHE LES GRADIENTS ET GRAFLEXIS *C * DO 1028 IC=1,9 * GRAD(IC)=MELVA2.VELCHA(IGMN1,IC,IBMN1) * 1028 CONTINUE * IF (IRT5.EQ.0) GO TO 1328 * DO 1228 IC=1,9 * GRAF(IC)=MELVA5.VELCHA(IGMN1,IC,IBMN1) * 1228 CONTINUE * 1328 CONTINUE *C ******************* * CALL BPRIMA(IGAU,MELE,MFR,NBNO,LRE,IFOUR,NSTRS,0, * 1 XEL,SHPTOT,SHPWRK,GRAD,BPRIM,DJAC) * DJAC=DJAC*POIGAU(IGAU) *C *C ON CHERCHE LES CONTRAINTES *C * DO 7028 IC=1,NCOEL1 * XSTRS(IC)=MELVA1.VELCHA(IGMN1,IC,IBMN1) * 7028 CONTINUE *C *C ON CALCULE BPRIM*SIGMA *C * CALL BSIG(BPRIM,XSTRS,NSTRS,LRE,DJAC,XFORC) * 6028 CONTINUE *C *C TRAITEMENT DE XFORC ET RANGEMENT DANS MELVAL *C * EPA=EPAIST*EPAIST/6. * DO 1128 IC=1,3 * IE=(IC-1)*6 * XFORC(IE+1)=EPAIST*XFORC(IE+1) * XFORC(IE+2)=EPAIST*XFORC(IE+2) * XFORC(IE+3)= EPA*XFORC(IE+3) * XFORC(IE+4)= EPA*XFORC(IE+4) * XFORC(IE+5)= EPA*XFORC(IE+5) * 1128 CONTINUE * CALL MATVEC(XFORC,XFOLO,BPSS,6) * IE=0 * DO 9028 IC=1,NBNN * DO 9028 ID=1,6 * IE=IE+1 * VELCHA(IC,ID,IB)=XFOLO(IE) * 9028 CONTINUE * 3028 CONTINUE * SEGSUP WRK1,WRK2,WRK3,WRK4 * GOTO 510 *C *C ELEMENT POUTRE (NON) *C ********************************************************************* * ATTENTION LORS DU BRANCHEMENT IL FAUT PASSER AUX NOUVEAUX * CHAMELEMS COMME POUR LES ELEMENTS MASSIF ********************************************************************* * 29 CONTINUE * NBBB=NBNN * SEGINI WRK1,WRK3 * DO 3029 IB=1,NBELEM * IBMN1=MIN(IB,NEL1) * IBMN4=MIN(IB,NEL4) *C *C ON CHERCHE LES COORDONNEES DES NOEUDS DE L ELEMENTIB *C * CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE) *C *C ON REACTUALISE LA GEOMETRIE *C * IF(IRT4.EQ.0) GO TO 8029 * DO 4029 IC=1,NBPTE3 * DO 4029 ID=1,IDIM * XE(ID,IC)=XE(ID,IC)+MELVA3.VELCHA(IC,ID,IB) *4029 CONTINUE *C *C IL FAUDRAIT AUSSI MODIFIER LE VECTEUR LOCAL DE LA POUTRE *C *8029 CONTINUE *C *C MISE A ZERO DES FORCES INTERNES *C * CALL ZERO(XFORC,1,LRE) *C *C ON CHERCHE LES CARACTERISTIQUES DE L ELEMENT IB *C * DO 6029 IC=1,ICARA * WORK(IC)=MELVA4.VELCHA(1,IC,IBMN4) *6029 CONTINUE *C *C CAS DES TUYAUX - ON CALCULE LES CARACTERISTIQUES DE LA POUTRE *C EQUIVALENTE (NON) *C * IF(MELE.EQ.42) CALL TUYCAR(WORK,KERRE,0) *C *C ON CHERCHE LES CONTRAINTES - ON LES MET DANS WORK *C * IE=9 * DO 7029 ID=1,NBPTE1 * DO 7029 IC=1,NCOEL1 * IE=IE+1 * WORK(IE)=MELVA1.VELCHA(ID,IC,IBMN1) *7029 CONTINUE *C *C ON CALCULE LES FORCES INTERNES *C * CALL POUBSG(XFORC,WORK,XE,WORK(10),WORK(22),KERRE) * IF(KERRE.EQ.0) GO TO 5029 * INTERR(1)=IA * INTERR(2)=IB * SEGSUP WRK1,WRK3 * CALL ERREUR(128) * GO TO 9990 *5029 CONTINUE *C *C RANGEMENT DANS MELVAL *C * IE=0 * DO 9029 ID=1,NBPTEL * DO 9029 IC=1,NCOELE * IE=IE+1 * VELCHA(ID,IC,IB)=XFORC(IE) *9029 CONTINUE *029 CONTINUE * SEGSUP WRK1,WRK3 * GO TO 510 * * ELEMENTS LISP ET LISM (NON) ********************************************************************* * ATTENTION LORS DU BRANCHEMENT IL FAUT PASSER AUX NOUVEAUX * CHAMELEMS COMME POUR LES ELEMENTS MASSIF ********************************************************************* * * 30 CONTINUE * NBBB=NBNN * SEGINI WRK1,WRK3,WRK4 * DO 3030 IB=1,NBELEM * IBMN1=MIN(IB,NEL1) * IBMN4=MIN(IB,NEL4) *C *C ON CHERCHE LES COORDONNEES DES NOEUDS DE L ELEMENT IB *C * CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE) *C *C ON REACTUALISE LA GEOMETRIE *C * IF(IRT4.EQ.1) THEN * DO 4030 IC=1,3 * DO 4030 ID=1,3 * XE(ID,IC)=XE(ID,IC)+MELVA3.VELCHA(IC,ID,IB) * 4030 CONTINUE * ENDIF *C *C MISE A ZERO DES FORCES INTERNES *C * CALL ZERO(XFORC,1,LRE) *C *C ON CHERCHE LES CONTRAINTES *C * IE=0 * DO 7030 IC=1,NBPGAU * ICMN1=MIN(IC,NBPTE1) * DO 7030 ID=1,NCOEL1 * IE=IE+1 * WORK(IE)=MELVA1.VELCHA(ICMN1,ID,IBMN1) * 7030 CONTINUE *C *C ON CHERCHE LES CARACTERISTIQUES *C * DO 6030 IC=1,NBPGAU * ICMN4=MIN(IC,NBPTE4) * DO 6030 ID=1,NCOEL4 * IE=IE+1 * WORK(IE)=MELVA4.VELCHA(ICMN4,ID,IBMN4) * 6030 CONTINUE *C *C ON CALCULE B*SIGMA *C * ICNT=NBPGAU*NSTRS+1 * CALL LISPBS(WORK(1),WORK(ICNT),POIGAU,SHPTOT, * 1 NBPGAU,NBNO,XE,XFOLO,BPSS,XFORC) *C *C RANGEMENT DANS MELVAL *C * IE=0 * DO 9030 IC=1,NBNN * DO 9030 ID=1,6 * IE=IE+1 * VELCHA(IC,ID,IB)=XFORC(IE) * 9030 CONTINUE * 3030 CONTINUE * SEGSUP WRK1,WRK3,WRK4 * GOTO 510 *C *C ELEMENT COQ8 COQ6 (NON) *C ********************************************************************* * ATTENTION LORS DU BRANCHEMENT IL FAUT PASSER AUX NOUVEAUX * CHAMELEMS COMME POUR LES ELEMENTS MASSIF ********************************************************************* * 41 CONTINUE * NBBB=NBNN * SEGINI WRK1,WRK3 * SEGACT MINTE1 * NBPGA1=MINTE1.SHPTOT(/3) * NBN1 =MINTE1.SHPTOT(/2) *C *C BOUCLE DE CALCUL POUR LES DIFFERENTS ELEMENTS *C * I240=0 * I241=0 * DO 3041 IB=1,NBELEM * IBMN1=MIN(IB,NEL1) * IBMN4=MIN(IB,NEL4) *C *C ON CHERCHE LES COORDONNEES DES NOEUDS DE L ELEMENT IB *C * CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE) *C *C ON REACTUALISE LA GEOMETRIE *C * IF(IRT4.EQ.1) THEN * DO 4041 IC=1,3 * DO 4041 ID=1,3 * XE(ID,IC)=XE(ID,IC)+MELVA3.VELCHA(IC,ID,IB) * 4041 CONTINUE * ENDIF *C *C MISE A ZERO DES FORCES INTERNES *C * CALL ZERO(XFORC,1,LRE) *C *C ON CHERCHE LES EPAISSEURS ET ON MOYENNE *C * EPAIST=XZER * DO 5041 IC=1,NBPTE4 * EPAIST=EPAIST+MELVA4.VELCHA(IC,1,IBMN4) * 5041 CONTINUE * EPAIST=EPAIST/DBLE(NBPTE4) * CALL ZERO(XFORC,1,LRE) *C *C ON CHERCHE LES CONTRAINTES *C * IE=1 * DO 7041 IC=1,NBPGAU * DO 7041 ID=1,NSTRS * WORK(IE)=MELVA1.VELCHA(IC,ID,IBMN1) * IE=IE+1 * 7041 CONTINUE *C *C ON CALCULE B*SIGMA *C * CALL COQ8BS(XE,NBNN,NBPGAU,LRE,NSTRS,EPAIST,DZEGAU,POIGAU, * * SHPTOT,MINTE1.SHPTOT,WORK(1),XFORC,IRRT) * IF(IRRT.EQ.0) I241=IB * IF(IRRT.EQ.-1) I240=IB *C *C RANGEMENT DANS MELVAL *C * IE=0 * DO 9041 IC=1,NBNN * DO 9041 ID=1,6 * IE=IE+1 * VELCHA(IC,ID,IB)=XFORC(IE) * 9041 CONTINUE * 3041 CONTINUE * SEGSUP WRK1,WRK3 * IF(I241.NE.0) INTERR(1)=I241 * IF(I241.NE.0) CALL ERREUR(241) * IF(I240.NE.0) INTERR(1)=I240 * IF(I240.NE.0) CALL ERREUR(240) * IF(I241.NE.0.OR.I240.NE.0)GO TO 9990 * GOTO 510 *C *C ELEMENT COQ2 (NON) *C ********************************************************************* * ATTENTION LORS DU BRANCHEMENT IL FAUT PASSER AUX NOUVEAUX * CHAMELEMS COMME POUR LES ELEMENTS MASSIF ********************************************************************* * 44 CONTINUE * DIM3=1.D0 * NBNO=NBNN * NBBB=NBNN * SEGINI WRK1,WRK2 * I255=0 * I256=0 * DO 3044 IB=1,NBELEM * IBMN1=MIN(IB,NEL1) * IBMN4=MIN(IB,NEL4) *C *C ON CHERCHE LES COORDONNEES DES NOEUDS DE L ELEMENT IB *C * CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE) *C *C ON REACTUALISE LA GEOMETRIE *C * IF(IRT4.EQ.1) THEN * DO 4044 IC=1,NBPTE3 * DO 4044 ID=1,IDIM * XE(ID,IC)=XE(ID,IC)+MELVA3.VELCHA(IC,ID,IB) * 4044 CONTINUE * ENDIF *C *C MISE A ZERO DES FORCES INTERNES *C * CALL ZERO(XFORC,1,LRE) *C *C ON CHERCHE L EPAISSEUR DE L ELEMENT IB *C * EPAIST=MELVA4.VELCHA(1,1,IBMN4) * EPA=EPAIST*EPAIST/6.D0 * *C *C BOUCLE SUR LES POINTS DE GAUSS *C * DO 6044 IGAU=1,NBPGAU * IGMN1=MIN(IGAU,NBPTE1) * MPTVAL=IVACAR * MELVAL=IVAL(2) * IF (MELVAL.NE.0) THEN * IGMN=MIN(IGAU ,VELCHE(/1)) * IBMN=MIN(IB ,VELCHE(/2)) * EXCEN =VELCHE(IGMN,IBMN) * ELSE * EXCEN=0.D0 * ENDIF * IF(IFOUR.EQ.-2) THEN * MELVAL=IVAL(3) * IF (MELVAL.NE.0) THEN * IGMN=MIN(IGAU ,VELCHE(/1)) * IBMN=MIN(IB ,VELCHE(/2)) * DIM3=VELCHE(IGMN,IBMN) * ELSE * DIM3=1.D0 * ENDIF * ENDIF * CALL BCOQ2(BGENE,NSTRS,DJAC,IGAU,IFOUR,XE,NHRM,QSIGAU,POIGAU, * . EXCEN,DIM3,IRRT,XDPGE,YDPGE) * IF(IRRT.EQ.1) I255=IB * IF(IRRT.EQ.2) I256=IB *C *C ON CHERCHE LES CONTRAINTES - ON LES MET DANS XSTRS *C * DO 7044 IC=1,NCOEL1 * XSTRS(IC)=MELVA1.VELCHA(IGMN1,IC,IBMN1) * 7044 CONTINUE * NCO1 = NCOEL1/2 * DO 8044 IC=1,NCO1 * XSTRS(IC )=XSTRS(IC )*EPAIST * XSTRS(IC+NCO1)=XSTRS(IC+NCO1)*EPA * 8044 CONTINUE *C *C ON CALCULE B*SIGMA *C * CALL BSIG(BGENE,XSTRS,NSTRS,LRE,DJAC,XFORC) * 6044 CONTINUE *C *C TRAITEMENT DE XFORC ET RANGEMENT DANS MELVAL *C * IF(IFOUR.GT.0) THEN * DO 9044 IC=1,2 * IE=(IC-1)*4 * VELCHA(IC,1,IB)= XFORC(IE+1) * VELCHA(IC,2,IB)= XFORC(IE+2) * VELCHA(IC,3,IB)= XFORC(IE+3) * VELCHA(IC,4,IB)= XFORC(IE+4) * 9044 CONTINUE * ELSE IF(IFOUR.LE.0) THEN * DO 9944 IC=1,2 * IE=(IC-1)*3 * VELCHA(IC,1,IB)= XFORC(IE+1) * VELCHA(IC,2,IB)= XFORC(IE+2) * VELCHA(IC,3,IB)= XFORC(IE+3) * 9944 CONTINUE * ENDIF * 3044 CONTINUE * SEGSUP WRK1,WRK2 * IF(I255.NE.0) THEN * INTERR(1)=I255 * CALL ERREUR(255) * ENDIF * IF(I256.NE.0) THEN * INTERR(1)=I256 * CALL ERREUR(256) * ENDIF * IF(I255.NE.0.OR.I256.NE.0)GO TO 9990 * GOTO 510 *C *C ELEMENT COQ4 (NON) *C ********************************************************************* * ATTENTION LORS DU BRANCHEMENT IL FAUT PASSER AUX NOUVEAUX * CHAMELEMS COMME POUR LES ELEMENTS MASSIF ********************************************************************* * 49 CONTINUE * IG1=0 * NBNO=NBNN * NBBB=NBNN * SEGINI WRK1,WRK2,WRK4 * DO 3049 IB=1,NBELEM * IBMN1=MIN(IB,NEL1) * IBMN4=MIN(IB,NEL4) *C *C ON CHERCHE LES COORDONNEES DES NOEUDS DE L ELEMENT IB *C * CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE) *C *C ON REACTUALISE LA GEOMETRIE *C * IF(IRT4.EQ.1) THEN * DO 4049 IC=1,NBPTE3 * DO 4049 ID=1,IDIM * XE(ID,IC)=XE(ID,IC)+MELVA3.VELCHA(IC,ID,IB) * 4049 CONTINUE * ENDIF *C *C MISE A ZERO DES FORCES INTERNES *C * CALL ZERO(XFORC,1,LRE) *C *C RIFERIMENTO LOCALE *C * CALL CQ4LOC(XE,XEL,BPSS,IERT,0) * CALL TRPOSE(BPSS) *C *C ON CHERCHE L EPAISSEUR DE L ELEMENT IB *C * EPAIST=MELVA4.VELCHA(1,1,IBMN4) *C *C BOUCLE SUR LES POINTS DE GAUSS *C * DO 6049 IGAU=1,NBPGAU * IGMN1=MIN(IGAU,NBPTE1) * CALL BCOQ4(IGAU,XEL,SHPTOT,SHPWRK,BGENE,DJAC,IERT,0) * IF (IERT.NE.0) IG1=IB *C *C ON CHERCHE LES CONTRAINTES - ON LES MET DANS WORK *C * DO 7049 IC=1,NCOEL1 * XSTRS(IC)=MELVA1.VELCHA(IGMN1,IC,IBMN1) * 7049 CONTINUE *C *C ON CALCULE B*SIGMA *C * DJAC=DJAC*POIGAU(IGAU) * CALL BSIG(BGENE,XSTRS,NSTRS,LRE,DJAC,XFORC) * 6049 CONTINUE *C *C TRAITEMENT DE XFORC ET RANGEMENT DANS MELVAL *C * EPA=EPAIST*EPAIST/6.D0 * DO 8049 IC=1,4 * IE=(IC-1)*6 * XFORC(IE+1)=EPAIST*XFORC(IE+1) * XFORC(IE+2)=EPAIST*XFORC(IE+2) * XFORC(IE+3)=EPAIST*XFORC(IE+3) * XFORC(IE+4)= EPA*XFORC(IE+4) * XFORC(IE+5)= EPA*XFORC(IE+5) * XFORC(IE+6)= EPA*XFORC(IE+6) * 8049 CONTINUE * CALL MATVEC(XFORC,XFOLO,BPSS,8) * IE=0 * DO 9049 IC=1,4 * DO 9049 ID=1,6 * IE=IE+1 * VELCHA(IC,ID,IB)=XFOLO(IE) * 9049 CONTINUE * 3049 CONTINUE * SEGSUP WRK1,WRK2,WRK4 * IF(IG1.NE.0) THEN * INTERR(1)=IG1 * CALL ERREUR (321) * GO TO 9990 * ENDIF * GOTO 510 *C *C ELEMENT COF3 (NON) *C ********************************************************************* * ATTENTION LORS DU BRANCHEMENT IL FAUT PASSER AUX NOUVEAUX * CHAMELEMS COMME POUR LES ELEMENTS MASSIF ********************************************************************* * 51 CONTINUE * NBNO=NBNN * NBBB=NBNN * SEGINI WRK1,WRK2 * DO 3051 IB=1,NBELEM * IBMN1=MIN(IB,NEL1) * IBMN4=MIN(IB,NEL4) *C *C ON CHERCHE LES COORDONNEES DES NOEUDS DE L ELEMENT IB *C * CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE) *C *C ON REACTUALISE LA GEOMETRIE *C * IF(IRT4.EQ.1) THEN * DO 4051 IC=1,NBPTE3 * DO 4051 ID=1,IDIM * XE(ID,IC)=XE(ID,IC)+MELVA3.VELCHA(IC,ID,IB) * 4051 CONTINUE * ENDIF *C *C MISE A ZERO DES FORCES INTERNES *C * CALL ZERO(XFORC,1,LRE) *C *C ON CHERCHE L EPAISSEUR DE L ELEMENT IB *C * EPAIST=MELVA4.VELCHA(1,1,IBMN4) *C *C BOUCLE SUR LES POINTS DE GAUSS *C * DO 6051 IGAU=1,NBPGAU * IGMN1=MIN(IGAU,NBPTE1) * CALL BCOF3(BGENE,DJAC,IGAU,IFOUR,XE,NHRM,QSIGAU,POIGAU,IRRT) *C *C ON CHERCHE LES CONTRAINTES - ON LES MET DANS WORK *C * DO 7051 IC=1,NCOEL1 * XSTRS(IC)=MELVA1.VELCHA(IGMN1,IC,IBMN1) * 7051 CONTINUE *C *C ON CALCULE B*SIGMA *C * CALL BSIG(BGENE,XSTRS,NSTRS,LRE,DJAC,XFORC) * 6051 CONTINUE *C *C TRAITEMENT DE XFORC ET RANGEMENT DANS MELVAL *C * EPA=EPAIST*EPAIST/6.D0 * DO 9051 IC=1,2 * IE=(IC-1)*4 * VELCHA(IC,1,IB)=EPAIST*XFORC(IE+1) * VELCHA(IC,2,IB)=EPAIST*XFORC(IE+2) * VELCHA(IC,3,IB)=EPAIST*XFORC(IE+3) * VELCHA(IC,4,IB)= EPA*XFORC(IE+4) * 9051 CONTINUE * 3051 CONTINUE * SEGSUP WRK1,WRK2 * GOTO 510 C | | | | | | | | | | | | | | C --------------------------------------------------------------- C_______________________________________________________________________ C C DESACTIVATION DES SEGMENTS PROPRES A LA ZONE GEOMETRIQUE ISOUS C_______________________________________________________________________ C 510 CONTINUE C IF (ISUP1.EQ.1) THEN ELSE ENDIF * IF (ISUP2.EQ.1) THEN ELSE ENDIF * IF (ISUP3.EQ.1) THEN ELSE ENDIF * IF (ISUP4.EQ.1) THEN ELSE ENDIF * IF (IERR.NE.0) THEN SEGSUP MCHAML ELSE ENDIF 991 CONTINUE * IF (IERR.NE.0) GOTO 9990 * 500 CONTINUE C_______________________________________________________________________ C C TRANSFORMATION DU CHAMELEM EN CHPOINT C_______________________________________________________________________ C IRET = 1 C ATTRIBUTION D'UNE NATURE DISCRETE IF (IRET.EQ.1) THEN MCHPOI = IPCHP1 SEGACT MCHPOI NAT = MAX ( JATTRI(/1) , 1 ) NSOUPO = IPCHP(/1) SEGADJ MCHPOI JATTRI(1) = 2 ENDIF C RETURN * * ERREUR DANS UNE SOUS ZONE, DESACTIVATION ET RETOUR * 9990 CONTINUE IRET=0 SEGSUP MCHELM END
© Cast3M 2003 - Tous droits réservés.
Mentions légales