cadgsi
C CADGSI SOURCE CB215821 23/01/25 21:15:05 11573 SUBROUTINE CADGSI C************************************************************************ C C OBJET : C C CALCUL DE LA MATRICE MASSE DIAGONALE ---> Creation d'un CHAMPOIN C Pour les SOMMETS D0=NI ( MASSE LUMPE ) C Pour les FACES D0=1/2(Vol1 + Vol2) C Pour les CENTRES D0=Vol Elt C C SYNTAXE : C C RES = DGSI OBJ1 <TYPE> <'IMPR'> ; C C OBJ1 : Table DOMAINE C TYPE ; SOMMET , FACE , CENTRE (par defaut SOMMET) MSOMMET CENTREP1 C C C************************************************************************ IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) INTEGER INEFMD -INC CCGEOME -INC SMCHAML -INC PPARAM -INC CCOPTIO -INC SMELEME POINTEUR MELEMP.MELEME -INC SMTABLE POINTEUR MTABD.MTABLE INTEGER TMTABD(1) -INC SMCOORD -INC SMLENTI -INC SMCHPOI -INC SIZFFB POINTEUR IZF1.IZFFM,IZH2.IZHR CHARACTER*8 NOM0,CHAI,LISMO(5),TYPE,TYPC,NOM DATA LISMO/'SOMMET ','FACE ','CENTRE ','MSOMMET ','CENTREP1'/ C *************************************************************** C---------------------------------------------------------------------- C KPOIN = 0->SOMMET 1-> FACE 2-> CENTRE 3-> CENTREP0 4-> CENTREP1 5-> MSOMMET C INEFMD : Type formulation INEFMD=1 LINE,=2 MACRO,=3 QUADRATIQUE, INEFMD=4 LINB C************************************************************************ INEFMD=0 IKAS=1 IMPR=0 IAXI=0 SEGACT,MCOORD IF(IFOMOD.EQ.0)IAXI=2 MTABD=TMTABD(1) IF(IRET.EQ.0)THEN WRITE(6,*)' On attend une table de soustype DOMAINE' RETURN ENDIF 19 CONTINUE IF(IRET.EQ.0)GO TO 20 IF(IP.EQ.0)THEN WRITE(6,*)' On attend un mot cle parmi SOMMET FACE CENTRE ', & 'MSOMMET CENTREP1 ' RETURN ENDIF IKAS=IP 20 CONTINUE IF(IKAS.EQ.1.OR.IKAS.EQ.4)THEN C SOMMET et MSOMMET C SOMMET IF(IKAS.EQ.1)THEN TYPE=' ' IF(TYPE.NE.'MAILLAGE')RETURN TYPE=' ' IF(TYPE.NE.'MAILLAGE')RETURN ENDIF C MSOMMET IF(IKAS.EQ.4)THEN c write(6,*)' CADGSI: IKAS=4' TYPE=' ' IF(TYPE.NE.'MAILLAGE')RETURN TYPE=' ' IF(TYPE.NE.'MAILLAGE')RETURN ENDIF C CREATION DE LA DIAGONALE SEGACT MELEME NBSOUS=LISOUS(/1) IF(NBSOUS.EQ.0)NBSOUS=1 C C BOUCLE SUR LES TYPES D'ELEMENTS ET CALCUL C DO 1 KSOUS=1,NBSOUS IF(NBSOUS.EQ.1)IPT1=MELEME IF(NBSOUS.GT.1)IPT1=LISOUS(KSOUS) SEGACT IPT1 NP=IPT1.NUM(/1) NEL=IPT1.NUM(/2) C NOM0=NOMS(IPT1.ITYPEL)//' ' IF(INEFMD.EQ.1.AND.IKAS.EQ.4)NOM0=NOMS(IPT1.ITYPEL)//'P1P1' IF(INEFMD.EQ.2.AND.IKAS.EQ.4)NOM0=NOMS(IPT1.ITYPEL)//'MCF1' IF(INEFMD.EQ.3.AND.IKAS.EQ.4)NOM0=NOMS(IPT1.ITYPEL)//'PFP1' c write(6,*)'4 NOM0=',NOM0 SEGACT IZFFM*MOD IZHR=KZHR(1) SEGACT IZHR*MOD C NPG=FN(/2) NES=GR(/1) IF(IMPR.NE.0)THEN WRITE(6,*)' SUB CADGSI : NES,NP,NPG,IDIM,NEL=' & ,NES,NP,NPG,IDIM,NEL ENDIF C DO 10 K=1,NEL C NPGR=0 IF(IAXI.NE.0)NPGR=NPG C DO 12 I=1,NP J=IPT1.NUM(I,K) DO 13 N=1,IDIM XYZ(N,I)=XCOOR((J-1)*(IDIM+1) +N) 13 CONTINUE 12 CONTINUE IF(IMPR.NE.0)THEN WRITE(6,*)' SUB CADGSI : AIRE=',AIRE WRITE(6,*)' SUB CADGSI : LER ' WRITE(6,1001)(IPT1.NUM(I,K),I=1,NP) WRITE(6,*)' SUB CADGSI : XYZ ' WRITE(6,1002)((XYZ(N,I),N=1,2),I=1,NP) ENDIF C DO 3 J=1,NP SJ=0.D0 DO 4 L=1,NPG SJ=SJ+FN(J,L)*PGSQ(L) 4 CONTINUE C SD(J,K)=SJ JU=LECT(IPT1.NUM(J,K)) C D0(JU)=D0(JU)+SJ VPOCHA(JU,1)=VPOCHA(JU,1)+SJ 3 CONTINUE C 10 CONTINUE SEGSUP IZFFM,IZHR 1 CONTINUE SEGSUP MLENTI IF(IMPR.NE.0)THEN WRITE(6,*)' SUB CADGSI : CALCUL DE LA DIAGONALE' C WRITE(6,1003)(I,VPOCHA(I,1),I=1,NPT) WRITE(6,*)' FIN DE CADGSI' ENDIF C FACE ELSEIF(IKAS.EQ.2)THEN TYPE=' ' IF(TYPE.NE.'MAILLAGE')RETURN TYPE=' ' IF(TYPE.NE.'MAILLAGE')RETURN IF(MELEME.EQ.0)RETURN IF(MCHPO1.EQ.0)RETURN C CREATION DE LA DIAGONALE SEGACT MELEME C C BOUCLE SUR LES TYPES D'ELEMENTS ET CALCUL C I1=NUM(1,K) I3=NUM(3,K) I1=MLENT1.LECT(I1) I3=MLENT1.LECT(I3) V=(MPOVA1.VPOCHA(I1,1)+MPOVA1.VPOCHA(I3,1) )*0.5D0 2 CONTINUE SEGSUP MLENT1,MLENT2 ELSEIF(IKAS.EQ.3)THEN C CENTRE IF(MCHPOI.EQ.0)RETURN ELSEIF(IKAS.EQ.5.OR.IKAS.EQ.6)THEN C CENTREP1 et CENTREP0 IF(INEFMD.EQ.1)THEN C% Le type d'élément fini %m1:8 ne convient pas. MOTERR( 1: 8) = 'LINE' RETURN ENDIF TYPE = ' ' TYPE = ' ' IF (TYPE.NE.'MCHAML ') THEN CALL KPSOML TYPE = 'MCHAML' IF (IRET.EQ.0)THEN NOM='XXPSOML' GOTO 5000 ENDIF ENDIF SEGACT MCHELM TYPE=' ' IF(INEFMD.EQ.2)THEN IF(TYPE.NE.'MAILLAGE')RETURN ELSEIF(INEFMD.EQ.3)THEN NOM='MAILLAGE' IF(TYPE.NE.'MAILLAGE')GO TO 5000 ENDIF TYPE=' ' IF(TYPE.NE.'MAILLAGE')THEN ENDIF NOM='ELTP1NC ' IF(TYPE.NE.'MAILLAGE')GO TO 5000 SEGACT MELEME NBSOUS=LISOUS(/1) IF(NBSOUS.EQ.0)NBSOUS=1 NUTOEL=0 NPTD=VPOCHA(/1) IES=IDIM MP10=0 DO 11 L=1,NBSOUS IPT1=MELEME IF(NBSOUS.NE.1)IPT1=LISOUS(L) SEGACT IPT1 MCHAML=ICHAML(L) SEGACT MCHAML MELVAL=IELVAL(1) SEGACT MELVAL NP =IPT1.NUM(/1) IPT2=MELEMP IF(NBSOUS.NE.1)IPT2=LISOUS(L) SEGACT IPT2 IF(INEFMD.EQ.2.AND.IKAS.EQ.5)NOM0=NOMS(IPT1.ITYPEL)//'MCP1' IF(INEFMD.EQ.3.AND.IKAS.EQ.5)NOM0=NOMS(IPT1.ITYPEL)//'PRP1' SEGACT IZFFM*MOD IZHR=KZHR(1) IZH2=KZHR(2) SEGACT IZHR*MOD,IZH2*MOD NES=GR(/1) NPG=GR(/3) IZF1=KTP(1) SEGACT IZF1*MOD MP1=IZF1.FN(/1) NP = IPT1.NUM(/1) SEGACT,MCOORD DO 109 I=1,NP J=IPT1.NUM(I,K) JC = (J-1)*(IDIM+1) DO 110 N=1,IDIM XYZ(N,I)=XCOOR( JC + N ) 110 CONTINUE 109 CONTINUE DO 39 M=1,MP1 M11=LECT(IPT2.NUM(M,K)) M1=M+MP10 c IF(KPOIND.EQ.5)M1=M11 U=0.D0 DO 33 LL=1,NPG U=U+IZF1.FN(M,LL)*PGSQ(LL) 33 CONTINUE VPOCHA(M1,1)=VPOCHA(M1,1)+U 39 CONTINUE MP10=MP10+MP1 21 CONTINUE SEGSUP IZFFM,IZF1,IZHR,IZH2 11 CONTINUE SEGSUP MLENTI ENDIF SEGDES MTABD RETURN 5000 CONTINUE C Indice %m1:8 : Problème de données détecté dans lektab IPOINT = 0 MOTERR(1:8) = NOM RETURN 1001 FORMAT(20(1X,I5)) 1002 FORMAT(10(1X,1PE11.4)) 1003 FORMAT(6(1X,I7,1X,1PE11.4)) END
© Cast3M 2003 - Tous droits réservés.
Mentions légales