permab
C PERMAB SOURCE CB215821 24/04/12 21:16:50 11897 *______________________________________________________________________ * * OPERATEUR PERMEABILITE (MILIEUX POREUX) APPELE PAR PERMEA * * Entrees : * --------- * * MODORI Pointeur sur un MMODEL * MCHORI Pointeur sur un MCHAML de materiau * * Sorties : * --------- * * IPRIGI Pointeur sur un objet RIGIDITE de permeabilite * IRET =1 ou 0 suivant succes ou non * * Passage aux nouveaux CHAMELEMs par jm CAMPENON le 07/91 *______________________________________________________________________ * IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) * -INC CCHAMP -INC PPARAM -INC CCOPTIO -INC CCGEOME -INC SMRIGID -INC SMCHAML -INC SMELEME -INC SMCOORD -INC SMINTE -INC SMMODEL * SEGMENT WRK1 REAL*8 REL(LRE,LRE),XE(3,NBBB) ENDSEGMENT * SEGMENT WRK2 ENDSEGMENT * SEGMENT WRK3 REAL*8 XGENE(NSTN,LRN) ENDSEGMENT * SEGMENT WRK4 REAL*8 XLOC(3,3),XGLOB(3,3),TXR(IDIM,IDIM) REAL*8 VALMAT(NMATT) REAL*8 PMAT(NSTB,NSTB),PMAT1(IDIM,IDIM),PMAT2(IDIM,IDIM) ENDSEGMENT * SEGMENT WRK5 REAL*8 BPSS(3,3),XEL(3,NBBB) REAL*8 XNTH(LPP,LPP),XNTB(LPP,LPP),XNTT(LPP) ENDSEGMENT * SEGMENT WRK6 REAL*8 PKK(NSTPK,NSTPK) ENDSEGMENT * SEGMENT INFO INTEGER INFELL(JG) ENDSEGMENT * SEGMENT NOTYPE CHARACTER*16 TYPE(NBTYPE) ENDSEGMENT * SEGMENT MPTVAL INTEGER IPOS(NS),NSOF(NS) INTEGER IVAL(NCOSOU) CHARACTER*16 TYVAL(NCOSOU) ENDSEGMENT * INTEGER OOOVAL CHARACTER*8 CMATE CHARACTER*(NCONCH) CONM * INTTYP correspond au type de points d'integration utilise PARAMETER ( INTTYP=3 ) PARAMETER (NINF=3) INTEGER INFOS(NINF) LOGICAL lsupfo,lsupdp * NHRM=NIFOUR IRET = 0 IPRIGI = 0 * * Reduction du modele a la formulation poreuse * MMODE1 = MODORI SEGINI,MMODEL=MMODE1 NSOUS = KMODEL(/1) N1 = 0 DO isous = 1, NSOUS IMODEL = KMODEL(isous) SEGACT,IMODEL IF (FORMOD(1).EQ.'POREUX') THEN N1 = N1 + 1 KMODEL(N1) = IMODEL ELSE SEGDES,IMODEL ENDIF ENDDO IF (N1.NE.NSOUS) SEGADJ,MMODEL IPMODL = MMODEL NSOUS = N1 IF (NSOUS.LE.0) THEN MOTERR(1:8) = 'MMODEL ' INTERR(1) = MODORI GOTO 9991 ENDIF * * Reduction du champ au modele precedemment reduit * MCHELM = MCHORI SEGACT,MCHELM IF (TITCHE(1:8).NE.'CARACTER') THEN SEGDES,MCHELM MOTERR(1:16) = 'CARACTERISTIQUES' GOTO 9991 ENDIF SEGDES,MCHELM IF (IRET.NE.1) THEN GOTO 9991 ENDIF * * Verification du lieu support du MCHAML de materiau * ISUP=0 IF (ISUP.GT.1) GO TO 9991 * * Activation du MMODEL * MMODEL=IPMODL SEGACT MMODEL NSOUS=KMODEL(/1) * * ON FABRIQUE LES MATRICES UNIQUEMENT POUR LES ZONES * DE MILIEU POREUX. * NRIGEL=NSOUS * * Initialisation du chapeau de l'objet RIGIDITE * SEGINI MRIGID ICHOLE=0 IMGEO1=0 IMGEO2=0 IFORIG=IFOUR MTYMAT='PERMEABI' * * BOUCLE SUR LES SOUS ZONES DU MODELE * ISORI=0 DO 500 ISOUS=1,NSOUS * * On recupere l'information generale * IMODEL=KMODEL(ISOUS) SEGACT IMODEL IF(FORMOD(1).NE.'POREUX') THEN GO TO 9999 ENDIF * * Traitement du modele * MELE=NEFMOD IPMAIL=IMAMOD CONM =CONMOD * IF (IRTD.EQ.0) GOTO 9999 * * Nature du materiau * CMATE = CMATEE MATE = IMATEE INAT = INATUU * * Information sur l'element fini * IF (INFMOD(/1).LT.2+INTTYP) THEN IF (IERR.NE.0) GO TO 9999 INFO=IPINF MFR =INFELL(13) IELE =INFELL(14) IPORE=INFELL(8) MINTE=INFELL(11) segsup info else MFR =INFELE(13) IELE =INFELE(14) IPORE=INFELE(8) MINTE=infmod(5) endif IPMINT=MINTE * * Si necessaire PARTITIONNEMENT du segment XMATRI * IPT1=IPMAIL SEGACT,IPT1 NBNN1 =IPT1.NUM(/1) NBELE1=IPT1.NUM(/2) * LASYM=0 IF(MFR.EQ.33) THEN IDECAP=1 ELSE IF(MFR.EQ.57) THEN IDECAP=2 LASYM=2 ELSE IF(MFR.EQ.59) THEN IDECAP=3 LASYM=2 ENDIF LR1=NBNNE(IELE) LRE=LR1*IDECAP * LTRK=OOOVAL(1,4) IF (LTRK.EQ.0) LTRK=OOOVAL(1,1) LTRK=MAX(LTRK,2**24) * Ajout a la taille en mots de la matrice des infos du segment LSEG=LRE*LRE*NBELE1 + 16 NBLPRT=(LSEG-1)/LTRK+1 NBLMAX=(NBELE1-1)/NBLPRT+1 NBLPRT=(NBELE1-1)/NBLMAX+1 * write(ioimp,*) ' PERMAB nblprt nblmax ',NBLPRT,NBLMAX,NBELE1 MELEME=IPT1 * BOUCLE DE PARTITIONNEMENT DU SEGMENT XMATRI DO 5000 IPRT = 1,NBLPRT ISORI= ISORI+1 IF (ISORI.GT.IRIGEL(/2)) THEN NRIGEL=ISORI SEGADJ,MRIGID ENDIF IF (NBLPRT.GT.1) THEN JPRT=(IPRT-1)*NBLMAX SEGACT,IPT1 NBSOUS=0 NBREF=0 NBNN=NBNN1 NBELEM=MIN(NBLMAX,NBELE1-JPRT) * write(ioimp,*) ' creation segment ',nbnn,nbelem SEGINI,MELEME ITYPEL=IPT1.ITYPEL DO I=1,NBELEM IB=I+JPRT DO J=1,NBNN NUM(J,I)=IPT1.NUM(J,IB) ENDDO ICOLOR(I)=IPT1.ICOLOR(I) ENDDO ENDIF IPMAIL=MELEME * Fin du traitement particulier en cas de PARTITIONNEMENT du XMATRI * Quelques initialisations suite au partionnement IPDES = 0 * NMATR = 0 NMATF = 0 IVAMAT = 0 NCARA = 0 NCARF = 0 IVACAR = 0 * Activation du MELEME support des rigidites MELEME=IPMAIL SEGACT,MELEME NBNN =NUM(/1) NBELEM=NUM(/2) NLIGRP = LRE NLIGRD = LRE SEGINI DESCR if(lnomid(1).ne.0) then nomid=lnomid(1) segact nomid modepl=nomid ndepl=lesobl(/2) ndum=lesfac(/2) lsupdp=.false. else lsupdp=.true. endif if(lnomid(2).ne.0) then nomid=lnomid(2) segact nomid moforc=nomid nforc=lesobl(/2) lsupfo=.false. else lsupfo=.true. endif * ID=1 NOMID=MODEPL SEGACT NOMID NCP=LESOBL(/2) NOMID=MOFORC SEGACT NOMID * IF (MFR.EQ.33) THEN DO 4005 IB=1,NBSOM(IELE) NOMID=MODEPL LISINC(ID)=LESOBL(NCP) NOMID=MOFORC LISDUA(ID)=LESOBL(NCP) NOELEP(ID)=IBSOM(NSPOS(IELE)+IB-1) NOELED(ID)=IBSOM(NSPOS(IELE)+IB-1) ID=ID+1 4005 CONTINUE * IF (MELE.GE.108.AND.MELE.LE.110) THEN * LR1=(3*LRE-IPORE)/2 DO 4008 INOEUD=LR1+1,LRE NOMID=MODEPL LISINC(ID)=LESOBL(NCP) NOMID=MOFORC LISDUA(ID)=LESOBL(NCP) NOELEP(ID)=INOEUD NOELED(ID)=INOEUD ID=ID+1 4008 CONTINUE END IF * DO 4006 IB=1,LR1 DO 4007 INSOM=1,NBSOM(IELE) IF(IB.EQ.IBSOM(NSPOS(IELE)+INSOM-1)) GO TO 4006 4007 CONTINUE NOMID=MODEPL LISINC(ID)=LESOBL(NCP) NOMID=MOFORC LISDUA(ID)=LESOBL(NCP) NOELEP(ID)=IB NOELED(ID)=IB ID=ID+1 4006 CONTINUE * ELSE IF (MFR.EQ.57.OR.MFR.EQ.59) THEN DO 4205 IPR=1,IDECAP NCPDEC=NCP-IDECAP+IPR * DO 4105 IB=1,NBSOM(IELE) NOMID=MODEPL LISINC(ID)=LESOBL(NCPDEC) NOMID=MOFORC LISDUA(ID)=LESOBL(NCPDEC) NOELEP(ID)=IBSOM(NSPOS(IELE)+IB-1) NOELED(ID)=IBSOM(NSPOS(IELE)+IB-1) ID=ID+1 4105 CONTINUE * IF (MELE.GE.185.AND.MELE.LE.190) THEN * LR1=(3*NBNNE(IELE)-IPORE)/2 DO 4108 INOEUD=LR1+1,NBNNE(IELE) NOMID=MODEPL LISINC(ID)=LESOBL(NCPDEC) NOMID=MOFORC LISDUA(ID)=LESOBL(NCPDEC) NOELEP(ID)=INOEUD NOELED(ID)=INOEUD ID=ID+1 4108 CONTINUE END IF * FIN NEW * DO 4106 IB=1,LR1 DO 4107 INSOM=1,NBSOM(IELE) IF(IB.EQ.IBSOM(NSPOS(IELE)+INSOM-1)) GO TO 4106 4107 CONTINUE NOMID=MODEPL LISINC(ID)=LESOBL(NCPDEC) NOMID=MOFORC LISDUA(ID)=LESOBL(NCPDEC) NOELEP(ID)=IB NOELED(ID)=IB ID=ID+1 4106 CONTINUE 4205 CONTINUE * ENDIF NOMID =MOFORC if(lsupfo)SEGSUP NOMID NOMID =MODEPL if(lsupdp)SEGSUP NOMID IPDES=DESCR SEGDES DESCR * * Initialisation de MINTE * SEGACT MINTE NBPGAU=POIGAU(/1) * CCCCCC LVAL=(LRE*(LRE+1))/2 NELRIG=NBELEM SEGINI xMATRI * * Verification de la presence des composantes pour le materiau * NBROBL=0 NBRFAC=0 * cas isotrope IF (MATE.EQ.1) THEN * IF (MELE.GE.79.AND.MELE.LE.83) THEN NBROBL=2 SEGINI NOMID LESOBL(1)='PERM' LESOBL(2)='VISC' ELSE IF (MELE.GE.108.AND.MELE.LE.110) THEN NBROBL=4 SEGINI NOMID LESOBL(1)='PERT' LESOBL(2)='PERH' LESOBL(3)='PERB' LESOBL(4)='VISC' ELSE IF (MELE.GE.173.AND.MELE.LE.177) THEN NBROBL=4 SEGINI NOMID LESOBL(1)='PK11' LESOBL(2)='PK12' LESOBL(3)='PK21' LESOBL(4)='PK22' ELSE IF (MELE.GE.178.AND.MELE.LE.182) THEN NBROBL=9 SEGINI NOMID LESOBL(1)='PK11' LESOBL(2)='PK12' LESOBL(3)='PK13' LESOBL(4)='PK21' LESOBL(5)='PK22' LESOBL(6)='PK23' LESOBL(7)='PK31' LESOBL(8)='PK32' LESOBL(9)='PK33' ELSE IF (MELE.GE.185.AND.MELE.LE.187) THEN NBROBL=12 SEGINI NOMID LESOBL(1)='PT11' LESOBL(2)='PH11' LESOBL(3)='PB11' LESOBL(4)='PT12' LESOBL(5)='PH12' LESOBL(6)='PB12' LESOBL(7)='PT21' LESOBL(8)='PH21' LESOBL(9)='PB21' LESOBL(10)='PT22' LESOBL(11)='PH22' LESOBL(12)='PB22' ELSE IF (MELE.GE.188.AND.MELE.LE.190) THEN NBROBL=27 SEGINI NOMID LESOBL(1)='PT11' LESOBL(2)='PH11' LESOBL(3)='PB11' LESOBL(4)='PT12' LESOBL(5)='PH12' LESOBL(6)='PB12' LESOBL(7)='PT13' LESOBL(8)='PH13' LESOBL(9)='PB13' LESOBL(10)='PT21' LESOBL(11)='PH21' LESOBL(12)='PB21' LESOBL(13)='PT22' LESOBL(14)='PH22' LESOBL(15)='PB22' LESOBL(16)='PT23' LESOBL(17)='PH23' LESOBL(18)='PB23' LESOBL(19)='PT31' LESOBL(20)='PH31' LESOBL(21)='PB31' LESOBL(22)='PT32' LESOBL(23)='PH32' LESOBL(24)='PB32' LESOBL(25)='PT33' LESOBL(26)='PH33' LESOBL(27)='PB33' ENDIF * cas orthotrope ELSE IF (MATE.EQ.2) THEN IF (IDIM.EQ.3) THEN NBROBL=10 SEGINI NOMID LESOBL(1)='PER1' LESOBL(2)='PER2' LESOBL(3)='PER3' LESOBL(4)='VISC' LESOBL(5)='V1X ' LESOBL(6)='V1Y ' LESOBL(7)='V1Z ' LESOBL(8)='V2X ' LESOBL(9)='V2Y ' LESOBL(10)='V2Z ' ELSE IF(IDIM.EQ.2) THEN IF (IFOUR.LE.0) THEN NBROBL=5 SEGINI NOMID LESOBL(1)='PER1' LESOBL(2)='PER2' LESOBL(3)='VISC' LESOBL(4)='V1X ' LESOBL(5)='V1Y ' ELSE IF (IFOUR.EQ.1) THEN NBROBL=6 SEGINI NOMID LESOBL(1)='PER1' LESOBL(2)='PER2' LESOBL(3)='PER3' LESOBL(4)='VISC' LESOBL(5)='V1X ' LESOBL(6)='V1Y ' ENDIF ENDIF * cas anisotrope ELSE IF (MATE.EQ.3)THEN IF(IDIM.EQ.3)THEN NBROBL=13 SEGINI NOMID LESOBL(1)='PER1' LESOBL(2)='PER2' LESOBL(3)='PER3' LESOBL(4)='PE12' LESOBL(5)='PE13' LESOBL(6)='PE23' LESOBL(7)='VISC' LESOBL(8)='V1X ' LESOBL(9)='V1Y ' LESOBL(10)='V1Z ' LESOBL(11)='V2X ' LESOBL(12)='V2Y ' LESOBL(13)='V2Z ' ELSE IF (IDIM.EQ.2) THEN IF (IFOUR.LE.0) THEN NBROBL=6 SEGINI NOMID LESOBL(1)='PER1' LESOBL(2)='PER2' LESOBL(3)='PE12' LESOBL(4)='VISC' LESOBL(5)='V1X ' LESOBL(6)='V1Y ' ELSE IF (IFOUR.EQ.1) THEN NBROBL=7 SEGINI NOMID LESOBL(1)='PER1' LESOBL(2)='PER2' LESOBL(3)='PE12' LESOBL(4)='PER3' LESOBL(5)='VISC' LESOBL(6)='V1X ' LESOBL(7)='V1Y ' ENDIF ENDIF * cas unidirectionnel ELSE IF (MATE.EQ.4) THEN IF (IDIM.EQ.3) THEN NBROBL=8 SEGINI NOMID LESOBL(1)='PERM' LESOBL(2)='VISC' LESOBL(3)='V1X ' LESOBL(4)='V1Y ' LESOBL(5)='V1Z ' LESOBL(6)='V2X ' LESOBL(7)='V2Y ' LESOBL(8)='V2Z ' ELSE NBROBL=4 SEGINI NOMID LESOBL(1)='PERM' LESOBL(2)='VISC' LESOBL(3)='V1X ' LESOBL(4)='V1Y ' ENDIF ENDIF * NMATR=NBROBL NMATF=NBRFAC NMATT = NMATR+NMATF MOMATR=NOMID * NBTYPE=1 SEGINI NOTYPE MOTYPE=NOTYPE TYPE(1)='REAL*8' * SEGSUP NOTYPE IF (IERR.NE.0) GOTO 9992 IF (ISUP.EQ.1) THEN ENDIF C C TRAITEMENT DES CHAMPS DE CARACTERISTIQUES * C NBROBL=0 NBRFAC=0 MOCARA=0 IVECT=0 * * EPAISSEUR DANS LE CAS DES CONTRAINTES PLANES * IF(IFOUR.EQ.-2.AND.((MELE.GE.79.AND.MELE.LE.83) & .OR.(MELE.GE.173.AND.MELE.LE.182)))THEN * NBROBL=0 NBRFAC=1 SEGINI NOMID MOCARA=NOMID LESFAC(1)='DIM3' * NBTYPE=1 SEGINI NOTYPE TYPE(1)='REAL*8' ENDIF * NCARA=NBROBL NCARF=NBRFAC NCARR=NCARA+NCARF * IF (MOCARA.NE.0) THEN MOTYPE=NOTYPE $ IVACAR) SEGSUP NOTYPE IF (IERR.NE.0) GOTO 9992 * IF (ISUP.EQ.1) THEN ENDIF ENDIF * *_____________________________________________________________________ * * NUMERO DES ETIQUETTES : * ETIQUETTES DE 1 A 98 POUR TRAITEMENT SPECIFIQUE A L ELEMENT * DANS LA ZONE SPECIFIQUE A CHAQUE ELEMENT COMMENCANT PAR : * 5 CONTINUE * ELEMENT 5 ETIQUETTES 1005 2005 3005 4005 ... * 44 CONTINUE * ELEMENT 44 ETIQUETTES 1044 2044 3044 4044 ... *_____________________________________________________________________ GOTO (99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, 1 99,99,99,99,99,99,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,79,79, 4 79,79,79,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, 5 99,99,99,99,99,99,99,80,80,80),MELE * IF(MELE.GE.173.AND.MELE.LE.182) GO TO 173 IF(MELE.GE.185.AND.MELE.LE.190) GO TO 185 * 99 CONTINUE SEGSUP xMATRI MOTERR(1:4)=NOMTP(MELE) MOTERR(5:12)='PERMEABI' GOTO 9990 *_______________________________________________________________________ * * MILIEU POREUX *_______________________________________________________________________ * 79 CONTINUE * * Pour ces elements NBBB : Nb de noeuds * NBNO : Nb de fonctions de forme * DIM3=1.D0 NBNO=IPORE NBBB=NBNN NSTN=1 LRN=NBNO-NBBB NSTB=2 IF(IFOUR.GT.0) NSTB=3 * * CAS NON ISOTROPES * RECUPERATION DES FONCTIONS DE FORME ET LEURS DERIVEES * AU CENTRE DE L'ELEMENT POUR LE CALCUL DES AXES LOCAUX * IF(MATE.EQ.2.OR.MATE.EQ.3.OR.MATE.EQ.4) THEN MINTE2=MINT SEGACT MINTE2 SEGINI WRK4 ENDIF * SEGINI WRK1,WRK2,WRK3 I195=0 I259=0 I367=0 DO 3079 IB=1,NBELEM * * On cherche les coordonnees des noeuds de l'element IB * * * calcul des axes locaux dans les cas non isotropes * IF(MATE.EQ.2.OR.MATE.EQ.3.OR.MATE.EQ.4) THEN NBSH=MINTE2.SHPTOT(/2) if (nbsh.eq.-1) then return endif ENDIF * * * boucle sur les points de Gauss * ISDJC=0 DO 4079 IGAU=1,NBPGAU * PRINT *, ' POINT DE GAUSS ',IGAU 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 * & DIM3,XE,SHPTOT,SHPWRK,BGENE,XGENE,DJAC,2) IF(DJAC.LT.0.) ISDJC=ISDJC+1 IF(DJAC.EQ.0.) I259 =IB DJAC=ABS(DJAC)*POIGAU(IGAU) * PRINT *,' MATRICE B LIGNE PAR LIGNE ' * DO 3367 IPZ = 1,NSTB ** PRINT *,' LIGNE ',IPZ * WRITE(6,3368) (BGENE(IPZ,JPZ), JPZ=1,LRE) *3368 FORMAT(8(1X,1PE10.3)/) *3367 CONTINUE EREF=1.D0 MPTVAL=IVAMAT * * le cas isotrope * IF (MATE.EQ.1) THEN MELVAL=IVAL(1) IGMN=MIN(IGAU,VELCHE(/1)) IBMN=MIN(IB ,VELCHE(/2)) XK =VELCHE(IGMN,IBMN) * MELVAL=IVAL(2) IGMN=MIN(IGAU,VELCHE(/1)) IBMN=MIN(IB ,VELCHE(/2)) XMU =VELCHE(IGMN,IBMN) IF(XMU.EQ.0.D0) THEN I367=IB GO TO 4079 ENDIF COMJAC=DJAC*EREF*EREF*XK/XMU DO 4279 I=1,LRN DO 4279 J=1,I DO 4279 K=1,NSTB REL(I,J)=REL(I,J)+COMJAC*BGENE(K,I)*BGENE(K,J) 4279 CONTINUE * * les cas non isotropes * ELSE IF(MATE.EQ.2.OR.MATE.EQ.3.OR.MATE.EQ.4) THEN * DO 4379 IM=1,NMATT IF (IVAL(IM).NE.0) THEN MELVAL=IVAL(IM) IBMN=MIN(IB ,VELCHE(/2)) IGMN=MIN(IGAU,VELCHE(/1)) VALMAT(IM)=VELCHE(IGMN,IBMN) ELSE VALMAT(IM)=0.D0 ENDIF 4379 CONTINUE * IF(KERRE.EQ.1) GO TO 99 IF(KERRE.EQ.2) THEN I367=IB GO TO 4079 ENDIF * * * les cas non prevus * ELSE GO TO 99 ENDIF * 4079 CONTINUE IF(ISDJC.NE.0.AND.ISDJC.NE.NBPGAU) I195=IB * SEGINI XMATRI * IMATTT(IB)=XMATRI * * Remplissage de XMATRI * * SEGDES XMATRI 3079 CONTINUE * SEGSUP WRK1,WRK2,WRK3 IF(MATE.EQ.2.OR.MATE.EQ.3.OR.MATE.EQ.4) THEN SEGDES MINTE2 SEGSUP WRK4 ENDIF * IF(I195.NE.0) THEN INTERR(1)=I195 GOTO 9990 ELSE IF(I259.NE.0) THEN INTERR(1)=I259 GOTO 9990 ELSE IF(I367.NE.0) THEN INTERR(1)=I367 GOTO 9990 ENDIF * SEGDES xMATRI * GOTO 610 *_______________________________________________________________________ * * JOINTS EN FORMULATION MILIEUX POREUX *_______________________________________________________________________ * 80 CONTINUE * * Pour ces elements NBBB : Nb de noeuds * NBNO : Nb de fonctions de forme * NBNO=IPORE NBBB=NBNN NSTN=1 LPP=(NBNO-NBBB)*3/2 LRN=LPP NSTB=2 IF(IFOUR.EQ.2) NSTB=3 * PRINT *,' NBNO=', NBNO * PRINT *,' NBBB=', NBBB * PRINT *,' NSTN=', NSTN * PRINT *,' LRN =', LRN * PRINT *,' LRE =', LRE * PRINT *,' NSTB =', NSTB * SEGINI WRK1,WRK2,WRK3,WRK5 I195=0 I259=0 I367=0 DO 3080 IB=1,NBELEM * * On cherche les coordonnees des noeuds de l'element IB * * * calcul des axes locaux * * * * * boucle sur les points de Gauss * ISDJC=0 DO 4080 IGAU=1,NBPGAU * . SHPTOT,SHPWRK,BPSS,BGENE,XGENE,DJAC,3) IF(DJAC.LT.0.) ISDJC=ISDJC+1 IF(DJAC.EQ.0.) I259 =IB DJAC=ABS(DJAC)*POIGAU(IGAU) * EREF=1.D0 MPTVAL=IVAMAT * * le cas isotrope (le seul) * MELVAL=IVAL(1) IGMN=MIN(IGAU,VELCHE(/1)) IBMN=MIN(IB ,VELCHE(/2)) XKT =VELCHE(IGMN,IBMN) * MELVAL=IVAL(2) IGMN=MIN(IGAU,VELCHE(/1)) IBMN=MIN(IB ,VELCHE(/2)) XKNH =VELCHE(IGMN,IBMN) * MELVAL=IVAL(3) IGMN=MIN(IGAU,VELCHE(/1)) IBMN=MIN(IB ,VELCHE(/2)) XKNB =VELCHE(IGMN,IBMN) * MELVAL=IVAL(4) IGMN=MIN(IGAU,VELCHE(/1)) IBMN=MIN(IB ,VELCHE(/2)) XMU =VELCHE(IGMN,IBMN) IF(XMU.EQ.0.D0) THEN I367=IB GO TO 4080 ENDIF COMJAT=DJAC*EREF*EREF*XKT/XMU COMJNH=DJAC*EREF*EREF*XKNH/XMU COMJNB=DJAC*EREF*EREF*XKNB/XMU DO 4280 I=1,LRN DO 4280 J=1,I REL(I,J)=REL(I,J)+COMJAT*BGENE(1,I)*BGENE(1,J) . *XNTT(I)*XNTT(J) . +COMJNH*XGENE(1,I)*XGENE(1,J)*XNTH(I,J) . +COMJNB*XGENE(1,I)*XGENE(1,J)*XNTB(I,J) IF(IFOUR.EQ.2)THEN REL(I,J)=REL(I,J)+COMJAT*BGENE(2,I)*BGENE(2,J) . *XNTT(I)*XNTT(J) ENDIF 4280 CONTINUE * 4080 CONTINUE IF(ISDJC.NE.0.AND.ISDJC.NE.NBPGAU) I195=IB * SEGINI XMATRI * IMATTT(IB)=XMATRI * * Remplissage de XMATRI * * SEGDES XMATRI 3080 CONTINUE * SEGSUP WRK1,WRK2,WRK3,WRK5 * IF(I195.NE.0) THEN INTERR(1)=I195 GOTO 9990 ELSE IF(I259.NE.0) THEN INTERR(1)=I259 GOTO 9990 ELSE IF(I367.NE.0) THEN INTERR(1)=I367 GOTO 9990 ENDIF * SEGDES xMATRI * GOTO 610 *_______________________________________________________________________ * * MILIEU POREUX - SUITE *_______________________________________________________________________ * 173 CONTINUE * * Pour ces elements NBBB : Nb de noeuds * NBNO : Nb de fonctions de forme * DIM3=1.D0 NBNO=IPORE NBBB=NBNN NSTN=IDECAP LPP=NBNO-NBBB LRN=IDECAP*LPP NSTBE=2 IF(IFOUR.GT.0) NSTBE=3 NSTB=NSTBE*IDECAP * PRINT *,'NSTBE=',NSTBE * PRINT *,'NSTB=',NSTB * PRINT *,'IDECAP=',IDECAP * PRINT *,'LRE =',LRE * * CAS NON ISOTROPES * NON PREVU * IF(MATE.EQ.2.OR.MATE.EQ.3.OR.MATE.EQ.4) THEN GO TO 9990 ENDIF * NSTPK= NSTB SEGINI WRK1,WRK2,WRK3,WRK6 I195=0 I259=0 I367=0 DO 3173 IB=1,NBELEM * PRINT *,'ELEMENT ' , IB * * On cherche les coordonnees des noeuds de l'element IB * * * * boucle sur les points de Gauss * ISDJC=0 DO 4173 IGAU=1,NBPGAU * PRINT *, ' POINT DE GAUSS ',IGAU 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 * LHOO=NSTB & DIM3,XE,SHPTOT,SHPWRK,BGENE,XGENE,DJAC,IDECAP,LHOO,2) IF(DJAC.LT.0.) ISDJC=ISDJC+1 IF(DJAC.EQ.0.) I259 =IB DJAC=ABS(DJAC)*POIGAU(IGAU) * PRINT *,' MATRICE B LIGNE PAR LIGNE ' * DO 1367 IPZ = 1,NSTB * PRINT *,' LIGNE ',IPZ * WRITE(6,1368) (BGENE(IPZ,JPZ), JPZ=1,LRE) *1368 FORMAT(8(1X,1PE10.3)/) *1367 CONTINUE * EREF=1.D0 MPTVAL=IVAMAT * * le cas isotrope * IF (MATE.EQ.1) THEN ICO=1 DO 1731 ICD = 1,IDECAP ICDA =(ICD -1) * NSTBE DO 1732 JCD = 1,IDECAP JCDA =(JCD -1) * NSTBE MELVAL=IVAL(ICO) IGMN=MIN(IGAU,VELCHE(/1)) IBMN=MIN(IB ,VELCHE(/2)) DO 1733 KCD = 1,NSTBE PKK(ICDA+KCD,JCDA+KCD) =VELCHE(IGMN,IBMN) 1733 CONTINUE ICO=ICO+1 1732 CONTINUE 1731 CONTINUE * * PRINT *,' MATRICE PKK' * IF (IDECAP.EQ.2) THEN * WRITE (6,1342) ((PKK(I,J),J=1,NSTB),I=1,NSTB) *1342 FORMAT(4(1X,1PE12.5)/) * * ELSE IF (IDECAP.EQ.3) THEN * WRITE (6,1343) ((PKK(I,J),J=1,NSTB),I=1,NSTB) *1343 FORMAT(6(1X,1PE12.5)/) * ENDIF COMJAC=DJAC*EREF*EREF * * les cas non prevus * ELSE GO TO 99 ENDIF * 4173 CONTINUE IF(ISDJC.NE.0.AND.ISDJC.NE.NBPGAU) I195=IB * SEGINI XMATRI * IMATTT(IB)=XMATRI * * Remplissage de XMATRI * * SEGDES XMATRI 3173 CONTINUE * SEGSUP WRK1,WRK2,WRK3,WRK6 IF(MATE.EQ.2.OR.MATE.EQ.3.OR.MATE.EQ.4) THEN SEGDES MINTE2 SEGSUP WRK4 ENDIF * IF(I195.NE.0) THEN INTERR(1)=I195 GOTO 9990 ELSE IF(I259.NE.0) THEN INTERR(1)=I259 GOTO 9990 ELSE IF(I367.NE.0) THEN INTERR(1)=I367 GOTO 9990 ENDIF * SEGDES xMATRI * GOTO 610 *_______________________________________________________________________ * * JOINTS EN FORMULATION MILIEUX POREUX - SUITE *_______________________________________________________________________ * 185 CONTINUE * * Pour ces elements NBBB : Nb de noeuds * NBNO : Nb de fonctions de forme * NBNO=IPORE NBBB=NBNN NSTN=IDECAP LPP=(NBNO-NBBB)*3/2 LRN=IDECAP*LPP NSTBE=2 IF(IFOUR.EQ.2) NSTBE=3 NSTB=NSTBE*IDECAP NSTPKE=3 NSTPK=NSTPKE*IDECAP * PRINT *,' NBNO=', NBNO * PRINT *,' NBBB=', NBBB * PRINT *,' NSTN=', NSTN * PRINT *,' LPP =', LPP * PRINT *,' LRN =', LRN * PRINT *,' LRE =', LRE * PRINT *,' NSTBE=', NSTBE * PRINT *,' NSTB =', NSTB * PRINT *,' NSTPKE =', NSTPKE * PRINT *,' NSTPK =', NSTPK * SEGINI WRK1,WRK2,WRK3,WRK5,WRK6 I195=0 I259=0 I367=0 DO 3185 IB=1,NBELEM * * On cherche les coordonnees des noeuds de l'element IB * * * calcul des axes locaux * * * * * boucle sur les points de Gauss * ISDJC=0 DO 4185 IGAU=1,NBPGAU * LHOO=NSTB . SHPTOT,SHPWRK,BPSS,BGENE,XGENE,DJAC,IDECAP,NSTB,3) IF(DJAC.LT.0.) ISDJC=ISDJC+1 IF(DJAC.EQ.0.) I259 =IB DJAC=ABS(DJAC)*POIGAU(IGAU) * EREF=1.D0 MPTVAL=IVAMAT * * le cas isotrope (le seul) * IF(MATE.EQ.1) THEN FAC = DJAC*EREF*EREF IE=0 DO 2185 IPR=1,IDECAP IPR1 = (IPR-1) * NSTPKE DO 2185 JPR=1,IDECAP JPR1 = (JPR-1) * NSTPKE DO 2186 I=1,NSTPKE II = I + IPR1 JJ = I + JPR1 IE=IE+1 MELVAL=IVAL(IE) IGMN=MIN(IGAU,VELCHE(/1)) IBMN=MIN(IB ,VELCHE(/2)) PKK(II,JJ)=VELCHE(IGMN,IBMN)*FAC 2186 CONTINUE 2185 CONTINUE * DO 8985 IPR=1,IDECAP IPR1 = (IPR-1)*NSTPKE IPR2 = 2*IPR IPPDEC=(IPR-1)*LPP IRRDEC=(IPR-1)*NBBB DO 8985 JPR=1,IDECAP JPR1 = (JPR-1)*NSTPKE JPR2 = 2*JPR JPPDEC=(JPR-1)*LPP JRRDEC=(JPR-1)*NBBB * COMJAT=PKK(IPR1+1,JPR1+1) COMJNH=PKK(IPR1+2,JPR1+2) COMJNB=PKK(IPR1+3,JPR1+3) * IF(IFOUR.LE.0) THEN DO 4285 I=1,LPP II =I+IPPDEC IR =I+IRRDEC DO 4285 J=1,LPP JJ =J+JPPDEC JR =J+JRRDEC REL(IR,JR)=REL(IR,JR) . +COMJAT*BGENE(IPR,II)*BGENE(JPR,JJ) . *XNTT(I)*XNTT(J) . +COMJNH*XGENE(IPR,II)*XGENE(JPR,JJ)*XNTH(I,J) . +COMJNB*XGENE(IPR,II)*XGENE(JPR,JJ)*XNTB(I,J) 4285 CONTINUE * ELSE DO 4385 I=1,LPP II =I+IPPDEC DO 4385 J=1,LPP JJ =J+JPPDEC REL(IR,JR)=REL(IR,JR) . +COMJAT*XNTT(I)*XNTT(J)* . (BGENE(IPR2-1,II)*BGENE(JPR2-1,JJ) . + BGENE(IPR2,II)*BGENE(JPR2,JJ)) . +COMJNH*XGENE(IPR,II)*XGENE(JPR,JJ)*XNTH(I,J) . +COMJNB*XGENE(IPR,II)*XGENE(JPR,JJ)*XNTB(I,J) 4385 CONTINUE ENDIF 8985 CONTINUE * ELSE GO TO 9990 ENDIF * 4185 CONTINUE IF(ISDJC.NE.0.AND.ISDJC.NE.NBPGAU) I195=IB * SEGINI XMATRI * IMATTT(IB)=XMATRI * * Remplissage de XMATRI * * SEGDES XMATRI 3185 CONTINUE * SEGSUP WRK1,WRK2,WRK3,WRK5,WRK6 * IF(I195.NE.0) THEN INTERR(1)=I195 GOTO 9990 ELSE IF(I259.NE.0) THEN INTERR(1)=I259 GOTO 9990 ELSE IF(I367.NE.0) THEN INTERR(1)=I367 GOTO 9990 ENDIF * * GOTO 610 * * Desactivation des segment propres a la geometrie ISOUS * 610 CONTINUE * SEGDES MELEME SEGDES MINTE * IF (ISUP.EQ.1) THEN ELSE ENDIF * NOMID=MOMATR SEGSUP NOMID IF (lsupdp) THEN NOMID=MODEPL SEGSUP,NOMID ENDIF IF (lsupfo) THEN NOMID=MOFORC SEGSUP,NOMID ENDIF * COERIG(ISORI) = 1.D0 IRIGEL(1,ISORI)=IPMAIL IRIGEL(2,ISORI)=0 IRIGEL(3,ISORI)=IPDES IRIGEL(4,ISORI)=xMATRI IRIGEL(5,ISORI)=NHRM IRIGEL(6,ISORI)=0 IRIGEL(7,ISORI)=LASYM xmatri.symre=lasym SEGDES xMATRI IRIGEL(8,ISORI)=0 * Fin de la boucle de PARTITIONNEMENT du segment XMATRI 5000 CONTINUE SEGDES IMODEL 500 CONTINUE IF(ISORI.NE.NRIGEL) GO TO 9999 SEGDES MRIGID C SEGSUP MMODEL IRET = 1 IPRIGI = MRIGID RETURN * * Erreur dans une sous zone desactivation et retour * 9990 CONTINUE IF (ISUP.EQ.1) THEN ELSE ENDIF * 9992 CONTINUE SEGSUP DESCR SEGSUP xMATRI SEGDES MELEME SEGDES MINTE * NOMID=MOMATR SEGSUP NOMID 9999 CONTINUE SEGSUP MRIGID IRET = 0 IPRIGI = 0 9991 CONTINUE MMODEL = IPMODL DO isous = 1, NSOUS IMODEL = KMODEL(isous) SEGDES,IMODEL ENDDO C SEGSUP,MMODEL RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales