ydudw
C YDUDW SOURCE GOUNAND 23/08/22 21:15:04 11725 SUBROUTINE YDUDW IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) C*********************************************************************** C C CET OPERATEUR DISCRETISE L'OPERATEUR DE PENALISATION DIV(U)=EPS*P C EN 2D SUR LES ELEMENTS QUA4 TRI3 TRI7 et QUA9 PLAN OU AXI C EN 3D SUR LES ELEMENTS CUB8 ET PRI6 C C SYNTAXE : C --------- C C DUDW(EPS) INCO UN : C C COEFFICIENTS : C -------------- C C C EPS (SCAL DOMA) PARAMETRE DE PENALISATION C (SCAL ELEM) C C INCONNUES : C ----------- C C UN CHAMP DE VITESSE C C C OPTIONS : POROSITE DIV(PU)=EPS*P C SOURCE DIV(U)-Q=EPS*P C C************************************************************************ -INC PPARAM -INC CCOPTIO -INC CCGEOME -INC SMCOORD -INC SMLENTI -INC SMELEME POINTEUR MELEM1.MELEME,MELEMS.MELEME,MELEMI.MELEME,MELEMP.MELEME POINTEUR MELEMC.MELEME -INC SMCHPOI POINTEUR IZGG1.MPOVAL,SRCE.MPOVAL,IZTGG1.MPOVAL -INC SIZFFB POINTEUR IZF1.IZFFM -INC SMMATRIK -INC SMLMOTS POINTEUR LINCO.MLMOTS SEGMENT TRAV REAL*8 AF(NP,NP,NINC,NINC),AS(NP,NINC),CT(MP1,NP,NINC),PQ(MP1) ENDSEGMENT CHARACTER*8 NOMZ,TYPE,TYPC CHARACTER*(LOCOMP) NOM0,NOM1,NOM2,NOM3,NOMI DIMENSION IXV(3) PARAMETER (NTB=1) CHARACTER*8 LTAB(NTB) DIMENSION KTAB(NTB) DATA LTAB/'KIZX '/ C***************************************************************************** CDUDW C write(6,*)' Operateur DUDW ' IF(IERR.NE.0)RETURN MTABX=KTAB(1) C C- Récupération de la table EQEX (pointeur MTAB1) C IF(MTAB1.EQ.0)THEN C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24 MOTERR( 1: 8) = ' EQEX ' MOTERR( 9:16) = ' EQEX ' MOTERR(17:24) = ' KIZX ' RETURN ENDIF IF(NASTOK.EQ.0)THEN RETURN ENDIF C C- Récupération de la table INCO (pointeur KINC) C IF(KINC.EQ.0)THEN C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24 MOTERR( 1: 8) = ' INCO ' MOTERR( 9:16) = ' INCO ' MOTERR(17:24) = ' EQEX ' RETURN ENDIF C***************************************************************************** C OPTIONS C KIMPL = 0 -> EXPL 1 -> IMPL 2 -> SEMI C KFORM = 0 -> SI 1 -> EF 2 -> VF 3 -> EFMC C IDCEN = 0-> rien 1-> CENTREE 2-> SUPGDC 3-> SUPG 4-> TVISQUEU 5-> CNG IAXI=0 IF(IFOMOD.EQ.0)IAXI=2 C C- Récupération de la table des options KOPT (pointeur KOPTI) C IF (KOPTI.EQ.0) THEN C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24 MOTERR( 1: 8) = ' KOPT ' MOTERR( 9:16) = ' KOPT ' MOTERR(17:24) = ' KIZX ' RETURN ENDIF IF(KFORM.NE.0.AND.KFORM.NE.1)THEN C Option %m1:8 incompatible avec les données MOTERR( 1: 8) = 'EF/EFM1 ' RETURN ENDIF C write(6,*)' Apres les options ' C***************************************************************************** C C- Récupération de la table DOMAINE associée au domaine local C IF(MTABZ.EQ.0)THEN C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24 MOTERR( 1: 8) = ' DOMZ ' MOTERR( 9:16) = ' DOMZ ' MOTERR(17:24) = ' KIZX ' RETURN ENDIF MELEMI=MACRO1 IF (IERR.NE.0) RETURN IF(MQUAD.EQ.0.AND.MACRO1.EQ.0.AND.KPRE.NE.2)THEN WRITE(6,*)'Operateur DUDW ' WRITE(6,*)'Type d''éléments non prévu' RETURN ENDIF IF(KPRE.EQ.2)THEN MELEMP=MELEMC MELEMI=MELEME ELSEIF(KPRE.EQ.3)THEN MELEMP=MELEMC ELSEIF(KPRE.EQ.4)THEN ENDIF SEGACT MELEME SEGACT MELEMP C************************************************************************* C VERIFICATIONS SUR LES INCONNUES C write(6,*)' Verification des inconnues ' TYPE='LISTMOTS' SEGACT LINCO C Indice %m1:8 : contient plus de %i1 %m9:16 MOTERR( 1:8) = 'LISTINCO' INTERR(1) = 1 MOTERR(9:16) = ' MOTS ' RETURN ENDIF TYPE=' ' IF(TYPE.NE.'CHPOINT ')THEN C Indice %m1:8 : ne contient pas un objet de type %m9:16 MOTERR( 1: 8) = 'INC '//NOMI MOTERR( 9:16) = 'CHPOINT ' RETURN ELSE ENDIF C************************************************************************* C Le domaine de definition est donne par le SPG de la premiere inconnue C Les inconnues suivantes devront posseder ce meme pointeur C On verifie que les points de la zone sont tous inclus dans ce SPG IF(IRET.NE.0)THEN C Indice %m1:8 : L'objet %m9:16 n'a pas le bon support géométrique MOTERR(1: 8) = 'INC '//NOMI MOTERR(9:16) = 'CHPOINT ' RETURN ENDIF NINC=IDIM MLENT1=MLENTI C***************************************************************************** C Lecture du ou des coefficients C write(6,*)' Lecture des coefficients' C? IXV(1)=MELEMC IXV(1)=0 IXV(2)=1 IXV(3)=0 & MTABX,KINC,1,IXV,IZTG1,IZTGG1,NPT1,NC1,IK1,IRET) IF(IRET.EQ.0)RETURN KITT=2 INDGS=0 SRCE=IZTGG1 MPOVA1 =IZTGG1 MPOVA3 =IZTGG1 IF(IARG.EQ.2)THEN IXV(1)=MELEMC IXV(2)=1 IXV(3)=0 & MTABX,KINC,2,IXV,IZS,SRCE,NPTS,NCS,IKS,IRET) IF(IRET.EQ.0)RETURN INDGS=1 ENDIF C************************************************************************* IF(KFORM.EQ.0)THEN C CAS FORMULATION EF SI (GRESHO) IF(KIMPL.NE.0)THEN GO TO 90 ENDIF WRITE(6,*)' Operateur DUDW ' WRITE(6,*)' Cas Formulation EF SI ' WRITE(6,*)' Cas invalide ' GO TO 90 C*********************************************************************** ELSE IF(KFORM.EQ.1)THEN C CAS FORMULATION EF NUTOEL=0 SEGACT MELEMI NBSOUS=MELEMI.LISOUS(/1) IF(NBSOUS.EQ.0)NBSOUS=1 NRIGE=7 NKID =9 NKMT =7 NMATRI=1 SEGINI MATRIK IRIGEL(1,1)=MELEMI IRIGEL(2,1)=MELEMI NBOP=0 NBME=NINC*NINC C NBME=2 NBELC=0 SEGINI IMATRI IRIGEL(4,1)=IMATRI KSPGP=MELEMS KSPGD=MELEMS IF(NBME.EQ.4)THEN NOM1='1'//NOMI(1:7) NOM2='2'//NOMI(1:7) LISDUA(1)=NOM1 LISDUA(2)=NOM1 LISDUA(3)=NOM2 LISDUA(4)=NOM2 ELSEIF(NBME.EQ.9)THEN NOM1='1'//NOMI(1:7) NOM2='2'//NOMI(1:7) NOM3='3'//NOMI(1:7) LISDUA(1)=NOM1 LISDUA(2)=NOM1 LISDUA(3)=NOM1 LISDUA(4)=NOM2 LISDUA(5)=NOM2 LISDUA(6)=NOM2 LISDUA(7)=NOM3 LISDUA(8)=NOM3 LISDUA(9)=NOM3 ELSEIF(NBME.EQ.2)THEN LISDUA(1)='1'//NOMI(1:7) LISDUA(2)='2'//NOMI(1:7) ELSE WRITE(6,*)' Operateur DUDW ' WRITE(6,*)' Cas invalide' GO TO 90 ENDIF IF(INDGS.NE.0)THEN NAT=2 NSOUPO=1 SEGACT MELEMS N=MELEMS.NUM(/2) NC=NINC SEGINI MCHPO1,MSOUP1,MPOVA1 MCHPO1.IFOPOI=IFOUR MCHPO1.MOCHDE=TITREE MCHPO1.MTYPOI='SMBR' MCHPO1.JATTRI(1)=2 MCHPO1.IPCHP(1)=MSOUP1 MSOUP1.NOCOMP(1)=NOM1 MSOUP1.NOCOMP(2)=NOM2 IF(NINC.EQ.3)MSOUP1.NOCOMP(3)=NOM3 MSOUP1.IGEOC=MELEMS MSOUP1.IPOVAL=MPOVA1 SEGACT MELEMC N=MELEMC.NUM(/2) NC=1 SEGINI MCHPO3,MSOUP3,MPOVA3 MCHPO3.IFOPOI=IFOUR MCHPO3.MOCHDE=TITREE MCHPO3.MTYPOI='SMBR' MCHPO3.JATTRI(1)=2 MCHPO3.IPCHP(1)=MSOUP3 MSOUP3.NOCOMP(1)='SCAL' MSOUP3.IGEOC=MELEMC MSOUP3.IPOVAL=MPOVA3 ENDIF DO 101 L=1,NBSOUS IPT1=MELEMI IPT2=MELEMI IF(NBSOUS.NE.1)IPT1=MELEMI.LISOUS(L) SEGACT IPT1 IF(INDGS.NE.0)THEN IPT2=MELEMP IF(NBSOUS.NE.1)IPT2=MELEMP.LISOUS(L) SEGACT IPT2 ENDIF IF(MQUAD.NE.0)THEN IF(KPRE.EQ.2)NOM0=NOMS(IPT1.ITYPEL)//'PRP0' IF(KPRE.EQ.3)NOM0=NOMS(IPT1.ITYPEL)//'PRP0' IF(KPRE.EQ.4)NOM0=NOMS(IPT1.ITYPEL)//'PRP1' ELSEIF(MACRO1.NE.0)THEN IF(KPRE.EQ.2)NOM0=NOMS(IPT1.ITYPEL)//' ' IF(KPRE.EQ.3)NOM0=NOMS(IPT1.ITYPEL)//'MCP0' IF(KPRE.EQ.4)NOM0=NOMS(IPT1.ITYPEL)//'MCP1' ELSE IF(KPRE.EQ.2)NOM0=NOMS(IPT1.ITYPEL)//' ' ENDIF SEGACT IZFFM*MOD IZHR=KZHR(1) SEGACT IZHR*MOD NES=GR(/1) NPG=GR(/3) IZF1=KTP(1) SEGACT IZF1*MOD MP1=IZF1.FN(/1) NP = IPT1.NUM(/1) MP = NP SEGINI IPM1,IPM2,IPM3,IPM4 LIZAFM(L,1)=IPM1 C LIZAFM(L,2)=IPM4 LIZAFM(L,2)=IPM2 LIZAFM(L,3)=IPM3 LIZAFM(L,4)=IPM4 IPM5=IPM1 IPM6=IPM1 IPM7=IPM1 IPM8=IPM1 IPM9=IPM1 IF(NBME.EQ.9)THEN SEGINI IPM5,IPM6,IPM7,IPM8,IPM9 LIZAFM(L,5)=IPM5 LIZAFM(L,6)=IPM6 LIZAFM(L,7)=IPM7 LIZAFM(L,8)=IPM8 LIZAFM(L,9)=IPM9 ENDIF C Pour l'instant les sources et puits de masse ne sont pas actifs INDG2=0 KI2=0 KJ2=0 SEGINI TRAV NPT=MPOVA1.VPOCHA(/1) SEGACT,MCOORD & NES,IDIM,NP,MP1,NPG,IAXI,NINC, & IZTGG1.VPOCHA,IK1,SRCE.VPOCHA,INDGS,IKS, & IPM1.AM,IPM2.AM,IPM3.AM,IPM4.AM,IPM5.AM,IPM6.AM,IPM7.AM, & IPM8.AM,IPM9.AM,MPOVA1.VPOCHA,NPT,LECT,IPT2.NUM,MLENT1.LECT, & MPOVA3.VPOCHA) SEGDES,MCOORD SEGSUP TRAV 101 CONTINUE SEGDES IMATRI,MATRIK C? CALL ECMO(MTABX,'MATELM','MATRIK',MATRIK) NAT=2 NSOUPO=0 SEGINI MCHPOI JATTRI(1)=2 IF(INDGS.NE.0)THEN TYPE=' ' IF(TYPE.NE.'CHPOINT')THEN ELSE CALL PRFUSE ENDIF TYPE=' ' C CALL ACMO(MTAB1,'DUDWSRCE',TYPE,MCHPO4) C IF(TYPE.NE.'CHPOINT')THEN C ELSE C CALL ECROBJ('CHPOINT',MCHPO3) C CALL ECROBJ('CHPOINT',MCHPO4) C CALL PRFUSE C CALL LIROBJ('CHPOINT',MCHPOI,1,IRET) C CALL ECMO(MTAB1,'DUDWSRCE','CHPOINT',MCHPOI) C ENDIF ENDIF SEGSUP MLENTI IF(INDGS.NE.0)SEGSUP MLENT1 RETURN C************************************************************************* ELSE IF(KFORM.EQ.2)THEN C CAS FORMULATION VF RETURN ENDIF C************************************************************************* 1002 FORMAT(10(1X,1PE11.4)) 90 CONTINUE * WRITE(6,*)' Interuption anormale de DUDW' * 34 2 * Operateur incompatible avec les options utilisees RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales