vtimp
C VTIMP SOURCE FANDEUR 22/01/03 21:15:56 11136 SUBROUTINE VTIMP C************************************************************************ C CALCUL DE LA MATRICE M ( P*DIV(U) ) --> AM(NP,IES,NEL) C C IKAS=1 V NORMALE IMPOSEE C IKAS=-1 V TANGENTE IMPOSEE C C************************************************************************ IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC CCGEOME -INC SIZFFB POINTEUR IZF1.IZFFM -INC SMCOORD -INC SMLENTI POINTEUR IPADI.MLENTI -INC SMELEME POINTEUR MELEM1.MELEME,MELEMC.MELEME,MELEMS.MELEME,MELEML.MELEME -INC SMCHPOI POINTEUR IZTU1.MPOVAL,VTANG.MPOVAL -INC SMMATRIK -INC SMLMOTS POINTEUR LINCO.MLMOTS CHARACTER*8 NOMZ,NOMI,TYPE,TYPC,NOM0,NOMA,NOM PARAMETER (NTB=1) CHARACTER*8 LTAB(NTB) DIMENSION KTAB(NTB),IXV(3),RO(1) DATA LTAB/'KIZX '/,RO/1.D0/ C***************************************************************************** CVTIMP C write(6,*)' DEBUT VTIMP ' 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 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 IF (IERR.NE.0) RETURN 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 C************************************************************************* C VERIFICATIONS SUR LES INCONNUES C C- Récupération du nombre d'inconnues et du nom de l'inconnue NOMI C TYPE='LISTMOTS' IF (IERR.NE.0) RETURN 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 C C- Récupération de l'inconnue C 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 NINKO = IZTU1.VPOCHA(/2) IF (NINKO.NE.IDIM) THEN C Indice %m1:8 : Le %m9:16 n'a pas le bon nombre de composantes MOTERR( 1: 8) = 'INC '//NOMI MOTERR( 9:16) = 'CHPOINT ' RETURN ENDIF C On fait pointer ces deux tableaux sur le champ U inconu (tjs présent) pour C eviter de les enlever lors de l'appel FORTRAN si les options sont absentes 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 C***************************************************************************** C************************************************************************* C Lecture des coefficients C Type du coefficient : C IK1=0 CHPOINT IK1=1 scalaire IK1=2 vecteur C write(6,*)' Lecture des coefficients ' IF(IARG.NE.1)THEN C Indice %m1:8 : nombre d'arguments incorrect MOTERR(1:8) = 'IARG ' RETURN ENDIF IXV(1)=MELEMS IXV(2)=1 IXV(3)=0 & MTABX,KINC,1,IXV,IZTG1,VTANG,NPT1,NC1,IK1,IRET) IF(IRET.EQ.0)RETURN C write(6,*)' Operateur VTIMP : Fin lecture Arguments ' C Fin lecture Arguments ************************************************ NAT=2 NSOUPO=1 SEGACT MELEML N=MELEML.NUM(/2) NC=1 SEGINI MCHPO1,MSOUP1,MPOVA1 MCHPO1.IFOPOI=IFOUR MCHPO1.MOCHDE=' ' MCHPO1.MTYPOI='SMBR' MCHPO1.JATTRI(1)=2 MCHPO1.IPCHP(1)=MSOUP1 MSOUP1.NOCOMP(1)='LVTP' MSOUP1.IGEOC=MELEML MSOUP1.IPOVAL=MPOVA1 NRIGE=7 NKID =9 NKMT =7 NMATRI=1 SEGINI MATRIK NBSOUS=1 IRIGEL(1,1)=MELEMS IRIGEL(2,1)=MELEML IRIGEL(7,1)=4 NBME=NINKO SEGINI IMATRI IRIGEL(4,1)=IMATRI KSPGP=MELEMS KSPGD=MELEML DO 102 I=1,NBME WRITE(NOM,FMT='(I1,A7)')I,NOMI(1:7) LISDUA(I)='LVTP'//' ' 102 CONTINUE SEGACT MELEMS NP =1 MP =1 SEGINI IPM1,IPM2 LIZAFM(1,1)=IPM1 LIZAFM(1,2)=IPM2 IF(NBME.EQ.3)THEN SEGINI IPM3 LIZAFM(1,3)=IPM3 ENDIF SEGACT MELEME NBSOU1=LISOUS(/1) IF(NBSOU1.EQ.0)NBSOU1=1 NUTOEL=0 DO 101 L=1,NBSOU1 IPT1=MELEME IF(NBSOU1.NE.1)IPT1=LISOUS(L) SEGACT IPT1 NOM0=NOMS(IPT1.ITYPEL)//' ' SEGACT IZFFM*MOD IZHR=KZHR(1) SEGACT IZHR*MOD NES=GR(/1) NPG=GR(/3) NP=IPT1.NUM(/1) NBELEM=IPT1.NUM(/2) DO 301 K=1,NBELEM DO 20 I=1,NP J1 = IPT1.NUM(I,K) DO 10 N=1,IDIM XYZ(N,I) = XCOOR((J1-1)*(IDIM+1)+N) 10 CONTINUE 20 CONTINUE & NES,IDIM,NP,NPG,IAXI,AIRE,AJ,SGN) U0=1.D0 DO 302 I=1,NP K1=LECT(IPT1.NUM(I,K)) UX=0.D0 UY=0.D0 UZ=0.D0 UT=0.D0 DO 304 LG=1,NPG UX=UX+FN(I,LG)*AJ(1,1,LG) UY=UY+FN(I,LG)*AJ(2,1,LG) IF(IDIM.EQ.3)UZ=UZ+FN(I,LG)*AJ(3,1,LG) UNL=0.D0 DO 321 J=1,NP K2=LECT(IPT1.NUM(J,K)) NK=(K2-1)*(1-IK1)+1 UNL=UNL+VTANG.VPOCHA(NK,1)*FN(J,L) 321 CONTINUE UT=UT+FN(I,LG)*UNL 304 CONTINUE IPM1.AM(K1,1,1)=IPM1.AM(K1,1,1)-UX IPM2.AM(K1,1,1)=IPM2.AM(K1,1,1)-UY IF(IDIM.EQ.3)IPM3.AM(K1,1,1)=IPM3.AM(K1,1,1)-UZ MPOVA1.VPOCHA(K1,1)=MPOVA1.VPOCHA(K1,1)-UT 302 CONTINUE 301 CONTINUE 101 CONTINUE RETURN 1001 FORMAT(20(1X,I5)) 1002 FORMAT(10(1X,1PE11.4)) END
© Cast3M 2003 - Tous droits réservés.
Mentions légales