tconvc
C TCONVC SOURCE FANDEUR 22/01/03 21:15:49 11237 & MPOVA1,IPT1,IPTP1,MPOVA2,NOMFL1,IPTJUN, & NOSUP1,NOSUD1) C C*********************************************************************** C C FONCTION: C --------- C C Création de la matrice de RIGIDITE liée à la discrétisation C en "0D/1D" sur des éléments de type POINT. C C (appelée par la subroutine TOCONV) C C AUTEUR, DATE DE CREATION: C ------------------------- C C Laurent DADA décembre 1996 C C C LANGAGE: C -------- C C ESOPE + FORTRAN77 C C*********************************************************************** C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) C -INC PPARAM -INC CCOPTIO -INC CCGEOME -INC SMCOORD -INC SMCHPOI -INC SMELEME POINTEUR IPTD1.MELEME,IPTP1.MELEME,IPTJUN.MELEME,IPJUCE.MELEME -INC SMRIGID C SEGMENT REDI INTEGER ORDR1(NNGOT) INTEGER ORDR2(NNGOT) ENDSEGMENT C CHARACTER*8 NOMPR1,NOMDU1,NOSUP1,NOSUD1 CHARACTER*8 NOMFL1 LOGICAL LPRIMA C C Création du support géométrique pour la RIGIDITE C (maillage de type SUPER-ELEMENT) C NNGOT = nbpts SEGINI REDI C C S'il n'existe pas de nom de composante PRIMAL ou que les supports des C composantes PRIMAL et DUAL sont les mêmes, on transforme le C maillage de POI1 du support de l'inconnue DUAL en un maillage C de type SUPER-ELEMENT. C SEGACT IPTD1 SEGACT IPTD1 C IF ((.NOT.LPRIMA).OR.(NOSUP1.EQ.NOSUD1)) THEN NBNN = IPTD1.NUM(/2) NBSOUS = 0 NBREF = 0 NBELEM = 1 SEGINI MELEME ICOLOR(1) = IDCOUL ITYPEL = 28 DO 40 I40=1,NBNN NUM(I40,1) = IPTD1.NUM(1,I40) ORDR1(NUM(I40,1)) = I40 40 CONTINUE C C S'il existe un nom de composante PRIMAL, on fusionne les maillages C de POI1 des supports des inconnues PRIMAL et DUAL en un maillage C de type SUPER-ELEMENT. C ELSE SEGACT IPTP1 SEGACT IPTP1 NBNNP1 = IPTP1.NUM(/2) NBNND1 = IPTD1.NUM(/2) NBNN = NBNNP1 + NBNND1 NBSOUS = 0 NBREF = 0 NBELEM = 1 SEGINI MELEME ICOLOR(1) = IDCOUL ITYPEL = 28 DO 50 I50=1,NBNNP1 NUM(I50,1) = IPTP1.NUM(1,I50) ORDR2(NUM(I50,1)) = I50 50 CONTINUE DO 60 I60=1,NBNND1 NUM(I60+NBNNP1,1) = IPTD1.NUM(1,I60) C ORDR1(NUM(I60+NBNNP1,1)) = I60 + NBNNP1 ORDR1(NUM(I60+NBNNP1,1)) = I60 60 CONTINUE SEGDES IPTP1 ENDIF C SEGDES IPTD1 C C Création de la RIGIDITE C NRIGE = 7 NRIGEL = 1 SEGINI MRIGID IPRIGI = MRIGID C MTYMAT = 'RIGIDITE' IFORIG = IFOUR ICHOLE = 0 IMGEO1 = 0 IMGEO2 = 0 ISUPEQ = 0 COERIG(1) = 1.D0 IRIGEL(1,1) = MELEME IRIGEL(2,1) = 0 IRIGEL(5,1) = NIFOUR IRIGEL(6,1) = 0 IRIGEL(7,1) = 2 C C Remplissage du descripteur de l'objet RIGIDITE C IF ((LPRIMA).AND.(NOSUP1.NE.NOSUD1)) THEN NLIGRP = NBNNP1 NLIGRD = NBNND1 SEGINI DESCR IRIGEL(3,1) = DESCR DO 10 I10=1,NBNNP1 NOELEP(I10) = I10 LISINC(I10) = NOMPR1 10 CONTINUE DO 11 I11=1,NBNND1 NOELED(I11) = I11+NBNNP1 LISDUA(I11) = NOMDU1 11 CONTINUE ELSE NLIGRP = NBNN NLIGRD = NBNN SEGINI DESCR IRIGEL(3,1) = DESCR DO 20 I20=1,NBNN NOELED(I20) = I20 LISDUA(I20) = NOMDU1 20 CONTINUE IF (NOSUP1.EQ.NOSUD1) THEN DO 21 I21=1,NBNN NOELEP(I21) = I21 LISINC(I21) = NOMPR1 21 CONTINUE ELSE DO 22 I22=1,NBNN NOELEP(I22) = I22 LISINC(I22) = NOMDU1 22 CONTINUE ENDIF ENDIF C SEGDES DESCR C NELRIG = 1 SEGINI xMATRI * SEGINI XMATRI C * IMATTT(1) = XMATRI IRIGEL(4,1) = xMATRI xmatri.symre=2 * SEGDES IMATRI C C Remplissage de la matrice élémentaire C SEGACT IPJUCE NBEJC1 = IPJUCE.NUM(/2) C activation du maillage et des valeurs du CHPOINT MULT1 SEGACT IPT1 SEGACT MPOVA1 C petit controle du support du champ MULT1 NBEL1 = IPT1.NUM(/2) IF ((.NOT.LPRIMA).OR.(NOSUP1.EQ.NOSUD1)) THEN NBTES1 = NBNN ELSE NBTES1 = NBNND1 ENDIF IF (NBEL1.NE.NBTES1) THEN SEGDES IPT1 SEGDES MPOVA1 SEGDES IPJUCE SEGSUP MELEME SEGSUP XMATRI SEGSUP MRIGID SEGSUP REDI RETURN ENDIF C C C Si la composante PRIMAL n'est pas la composante FLUX C C IF (NOMPR1.NE.NOMFL1) THEN C activation du maillage et des valeurs du CHPOINT FLUX SEGACT IPTJUN SEGACT MPOVA2 C mise à 0.d0 de la matrice élémentaire DO 30 I30=1,NBNN DO 301 I301=1,NBNN RE(I30,I301,1) = 0.D0 301 CONTINUE 30 CONTINUE C balayage sur les SEG3 du maillage des connectivités 'JUNCEL' DO 32 I32=1,NBEJC1 NPT1 = IPJUCE.NUM(1,I32) NPTF1 = IPJUCE.NUM(2,I32) NPT2 = IPJUCE.NUM(3,I32) C récupération de la valeur du débit de masse au point NPTF1 C et des valeurs du champ multiplicateur aux points NPT1 et NPT2 C balayage sur les points du CHPOINT FLUX XVALF1 = 0.D0 DO 321 I321=1,NBEJC1 IF (NPTF1.EQ.(IPTJUN.NUM(1,I321))) THEN XVALF1 = MPOVA2.VPOCHA(I321,1) GOTO 322 ENDIF 321 CONTINUE 322 CONTINUE C balayage sur les points du CHPOINT MULT1 XVALM1 = 0.D0 XVALM2 = 0.D0 DO 323 I323=1,NBEL1 IF (NPT1.EQ.(IPT1.NUM(1,I323))) XVALM1 = MPOVA1.VPOCHA(I323,1) IF (NPT2.EQ.(IPT1.NUM(1,I323))) XVALM2 = MPOVA1.VPOCHA(I323,1) 323 CONTINUE C quantités disparaissant ou apparaissant dans les deux compartiments XMASS1 = -0.5D0 * XVALM1 * XVALF1 XMASS2 = -0.5D0 * XVALM2 * XVALF1 C positions dans la matrice élémentaire IDUA1 = ORDR1(NPT1) IDUA2 = ORDR1(NPT2) C remplissage de la matrice RE(IDUA1,IDUA1,1) = RE(IDUA1,IDUA1,1) - XMASS1 RE(IDUA1,IDUA2,1) = RE(IDUA1,IDUA2,1) - XMASS2 RE(IDUA2,IDUA1,1) = RE(IDUA2,IDUA1,1) + XMASS1 RE(IDUA2,IDUA2,1) = RE(IDUA2,IDUA2,1) + XMASS2 32 CONTINUE SEGDES IPTJUN SEGDES MPOVA2 C C ELSE C C C mise à 0.d0 de la matrice élémentaire DO 70 I70=1,NBNND1 DO 701 I701=1,NBNNP1 RE(I70,I701,1) = 0.D0 701 CONTINUE 70 CONTINUE C balayage sur les SEG3 du maillage des connectivités 'JUNCEL' DO 72 I72=1,NBEJC1 NPT1 = IPJUCE.NUM(1,I72) NPTF1 = IPJUCE.NUM(2,I72) NPT2 = IPJUCE.NUM(3,I72) C récupération des valeurs du champ multiplicateur aux points NPT1 et NPT2 C balayage sur les points du CHPOINT MULT1 XVALM1 = 0.D0 XVALM2 = 0.D0 DO 723 I723=1,NBEL1 IF (NPT1.EQ.(IPT1.NUM(1,I723))) XVALM1 = MPOVA1.VPOCHA(I723,1) IF (NPT2.EQ.(IPT1.NUM(1,I723))) XVALM2 = MPOVA1.VPOCHA(I723,1) 723 CONTINUE C quantité disparaissant ou apparaissant dans le compartiment XMASS1 = -0.5D0 * (XVALM1 + XVALM2) C positions dans la matrice élémentaire IDUA1 = ORDR1(NPT1) IPRI1 = ORDR2(NPTF1) IDUA2 = ORDR1(NPT2) C remplissage de la matrice RE(IDUA1,IPRI1,1) = -1.D0 * XMASS1 RE(IDUA2,IPRI1,1) = XMASS1 72 CONTINUE ENDIF C SEGDES IPT1 SEGDES MPOVA1 C SEGDES XMATRI SEGDES IPJUCE C SEGDES MELEME C SEGDES MRIGID SEGSUP REDI C END
© Cast3M 2003 - Tous droits réservés.
Mentions légales