toch1
C TOCH1 SOURCE SP204843 24/03/15 21:15:09 11871 C TOCH1 C CE SOUS PROGRAMME EST APPELE PAR PROPER. C IL GERE LA ROTATION DES COMPOSANTES DES CHPOINT, MCHAML C SOURCE MO + CHARRAS 97/07/29 C MODIF KICH 97/11 C les differentes etapes sont commentees le long du programme. IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC SMCOORD -INC SMELEME -INC SMCHPOI -INC SMCHAML -INC TMTRAV REAL*8 SIGM(3,3),QRtQ(3,3),NSIG(3,3),RtQ(3,3) CHARACTER*(LOCOMP) MOIC CHARACTER*8 MOTYPE CHARACTER*14 MESSER CHARACTER*16 TYPIC LOGICAL LAG COMMON /CTOURN/XPT1,YPT1,ZPT1,XV1,YV1,ZV1,XV2,YV2,ZV2,XVEC,YVEC, # ZVEC,ANGLE,ICLE,XP1,YP1,ZP1 SEGMENT ICPR(nbpts) SEGMENT MSWBLO CHARACTER*(LOCOMP) MOTDDL(0) ENDSEGMENT SEGMENT MSWBL1 CHARACTER*(LOCOMP) MOZO(IZO,NOCO) INTEGER NOCCH1(IZO,NOCO) INTEGER TRIGO1(IZO,NOCO) ENDSEGMENT * CHARACTER*(LOCOMP) AAA(4,6) CHARACTER*(LOCOMP) MODEPL(5) CHARACTER*(LOCOMP) MODEDU(5) CHARACTER*(LOCOMP) MORODU(5) CHARACTER*(LOCOMP) MOROTA(5) CHARACTER*(LOCOMP) MODEFO(6) C AAA(1,..) DATA MODEPL(1)/'UX '/ DATA MODEPL(2)/'UY '/ DATA MODEPL(3)/'UZ '/ DATA MODEPL(4)/'UR '/ DATA MODEPL(5)/'UZ '/ C DATA MODEPL(6)/'UT '/ C AAA(2,..) DATA MODEDU(1)/'FX '/ DATA MODEDU(2)/'FY '/ DATA MODEDU(3)/'FZ '/ DATA MODEDU(4)/'FR '/ DATA MODEDU(5)/'FZ '/ C AAA(3,..) DATA MOROTA(1)/'RX '/ DATA MOROTA(2)/'RY '/ DATA MOROTA(3)/'RZ '/ DATA MOROTA(4)/' '/ DATA MOROTA(5)/' '/ C AAA(4,..) DATA MORODU(1)/'MX '/ DATA MORODU(2)/'MY '/ DATA MORODU(3)/'MZ '/ DATA MORODU(4)/' '/ DATA MORODU(5)/' '/ C DATA MODEFO(1)/'EPXX'/ DATA MODEFO(2)/'EPYY'/ DATA MODEFO(3)/'EPZZ'/ DATA MODEFO(4)/'GAXY'/ DATA MODEFO(5)/'GAXZ'/ DATA MODEFO(6)/'GAYZ'/ C IF (MOTYPE.EQ.'CHPOINT ') GOTO 100 IF (MOTYPE.EQ.'MCHAML ') GOTO 200 100 CONTINUE MCHPO1 = IP1 C creation matrice aaa 4 col 5 lignes DO I=1,5 AAA(1,I)=MODEPL(I) AAA(2,I)=MODEDU(I) AAA(3,I)=MOROTA(I) AAA(4,I)=MORODU(I) ENDDO NBMDDL=0 LDDLA=0 SEGACT MCHPO1 IZO=MCHPO1.IPCHP(/1) NOCO=0 SEGINI MSWBLO,MSWBL1 DO 8 I=1,MCHPO1.IPCHP(/1) NOC=0 MSOUP1=MCHPO1.IPCHP(I) SEGACT MSOUP1 DO 7 IA=1,MSOUP1.NOCOMP(/2) MOIC=MSOUP1.NOCOMP(IA) C B-1):lecture de chpo1 et test si correspondance entre C la composante moic du chpo1 et une du tableau aaa C si oui LAG vrai LAG=.FALSE. DO 3 ICO=1,4 DO 31 ILIGN=1,6 LAG=(MOIC.EQ.AAA(ICO,ILIGN)) IF (LAG) THEN ICOL=ICO GO TO 4 ENDIF 31 CONTINUE 3 CONTINUE 4 CONTINUE IF (LAG) THEN IF(NOC.GE.1) THEN C la composante est elle deja existante dans cette zone? DO IAK= 1 ,NOCO IF(MOIC.EQ.MOZO(I,IAK)) GO TO 7 ENDDO ENDIF C en sortie de boucle ico represente le type de ddl: C icol =1 --> DEPL, ico =2 --> FORCES C icol =3 --> ROTA, ico =4 --> MOMENT C B-2) determination du nombre et de l appellation des ddl C a creer pour le chpo tourne selon type de calcul C initialisations de depart LDDLA=0 IPOSIA=0 IF(IFOUR.NE.-2.AND.IFOUR.NE.-1.AND.IFOUR.NE.-3) GOTO 101 C DEFORMATIONS PLANES OU CONTRAINTES PLANES OU DEF PLANE GENE C DEFO PLAN -1: UX UY C OU CONT PLAN -2: UX UY C OU DEF PLANE GENE -3:UX UY UZ LDDLA=2 IPOSIA=0 GOTO 107 101 CONTINUE IF(IFOUR.NE.0) GOTO 102 C C AXISYMETRIQUE (IFOUR= 0) C UR UZ LDDLA=2 IPOSIA=3 GOTO 107 102 CONTINUE IF(IFOUR.NE.1) GOTO 103 C C FOURIER (IFOUR= 1 ) C UR UZ LDDLA=2 IPOSIA=3 GOTO 107 103 CONTINUE IF(IFOUR.NE.2) GOTO 104 C C TRIDIM (IFOUR= 2 ) C UX UY UZ C FX FY FZ C RX RY RZ C MX MY MZ LDDLA=3 IPOSIA=0 GOTO 107 104 CONTINUE C C DEFORMATIONS GENERALISEES LDDLA=0 LDDLB=0 IPOSIA=0 IPOSIB=0 107 CONTINUE C IF ((NOC+LDDLA).GT.NOCO) THEN NOCO=NOC+LDDLA SEGADJ MSWBL1 ENDIF C la composante envoyee est elle compatible avec le mode de calcul?? DO IAA=1,LDDLA IF(MOIC.EQ.AAA(ICOL,IPOSIA+IAA)) THEN GO TO 108 ELSE IF(IAA.EQ.LDDLA)THEN IF(IFOUR.EQ.-1)MESSER='DEFO PLAN ' IF(IFOUR.EQ.-2)MESSER='CONT PLAN ' IF(IFOUR.EQ.-3)MESSER='DEF PLANE GENE' IF(IFOUR.EQ.0)MESSER='AXISYMETRIQUE ' IF(IFOUR.EQ.1)MESSER='FOURIER ' IF(IFOUR.EQ.2)MESSER='TRIDIM ' INTERR(1)=I MOTERR(1:4)=MOIC MOTERR(5:19)=MESSER GO TO 999 ELSE CONTINUE ENDIF ENDIF ENDDO 108 CONTINUE C on remplit motddl DO IAA=1,LDDLA MOTDDL(**)=AAA(ICOL,IPOSIA+IAA) ENDDO C remplissage des tableaux,MOZO,TRIGO1 et NOCCH1 C qui serviront a dimensionner le nouveau chpo C MOZO contient pour chaque zone le nom des composantes C et peut aussi....contenir du ' 'ce qui servira. C NOCCH1 contient,pour chaque zone, le no d emplacement de C chaque composante dans le chpo d origine. si une composante C cree n existait pas dans le chpo de depart alors: C NOCCH1 (zone,no compos)=0 C TRIGO1 contient,pour chaque zone,et pour chaque composante C un nombre qui peut prendre les valeurs: C -1 si la composante ne doit pas tourner C 0 si MOZO (I,nomcompos) =' ' C 3 2 ou 1 si elle doit tourner.la 1ere des ddl d une meme C famille est indicee a 2 (3 si 3d). IF ((NOC + LDDLA).GT.NOCO) THEN NOCO=NOC+LDDLA SEGADJ MSWBL1 ENDIF DO 6 IAA=NBMDDL+1,NBMDDL+LDDLA NOC= NOC+1 MOZO (I,NOC)=MOTDDL(IAA) TRIGO1(I,NOC)=NBMDDL+LDDLA+1-IAA DO 5 IAB=IA,MSOUP1.NOCOMP(/2) IF(MOTDDL(IAA).EQ.MSOUP1.NOCOMP(IAB))THEN NOCCH1 (I,NOC)=IAB ELSE IF(.NOT.LAG)NOCCH1 (I,NOC)=0 ENDIF 5 CONTINUE 6 CONTINUE NBMDDL=NBMDDL+LDDLA ELSE NOC= NOC+1 IF (NOC.GT.NOCO) THEN NOCO= NOCO+ 1 SEGADJ MSWBL1 ENDIF MOZO(I,NOC)=MOIC NOCCH1(I,NOC)=IA TRIGO1(I,NOC)=-1 ENDIF 7 CONTINUE 8 CONTINUE SEGDES MSWBLO C print*,'en sortie: ' C print*,'NOCO= ',NOCO C do iiw=1,NOCCH1 (/1) C do ijl=1,NOCCH1 (/2) C print*,'MOZO (',Iiw,',',ijl,')= ',MOZO(Iiw,ijl) C #,'NOCCH1 (',Iiw,',',ijl,')= ',NOCCH1(Iiw,ijl) C #,'TRIGO1 (',Iiw,',',ijl,')= ',TRIGO1(Iiw,ijl) C enddo C enddo C mise a jour des valeurs de toutes les composantes du C nouveau chpo1 sans tenir compte des rotations SEGACT, MCHPO1*MOD MCHPO1.IFOPOI = IFOUR DO 14 I=1,MCHPO1.IPCHP(/1) MSOUP1=MCHPO1.IPCHP(I) DO NC=1,NOCCH1(/2) IF(MOZO(I,NC).EQ.' ')GO TO 11 ENDDO 11 CONTINUE NC=NC-1 SEGINI MSOUP3 MCHPO1.IPCHP(I)=MSOUP3 SEGACT MSOUP1 MSOUP3.IGEOC= MSOUP1.IGEOC MPOVA1=MSOUP1.IPOVAL SEGACT MPOVA1 N=MPOVA1.VPOCHA(/1) SEGINI MPOVA3 MSOUP3.IPOVAL=MPOVA3 DO 13 IC=1,NC MSOUP3.NOCOMP(IC)=MOZO(I,IC) ICN= NOCCH1(I,IC) IF(ICN.EQ.0) GO TO 13 C si composante n existe pas dans le chpo initial C (car elle est cree pour chpo3) elle reste a 0 DO IB=1,N MPOVA3.VPOCHA(IB,IC)=MPOVA1.VPOCHA(IB,ICN) ENDDO 13 CONTINUE SEGSUP MPOVA1,MSOUP1 14 CONTINUE C fin mise a jour des valeurs sans rotations C mise a jour des valeurs des composantes du C nouveau chpo1 necessitant la rotation C TRIGO1(I,IC)= 1 , 2 , 3 au max; C TRIGO1(I,IC)=-1 ou 0 pas de rotation SEGACT MCHPO1 DO 16 I=1,MCHPO1.IPCHP(/1) MSOUP3=MCHPO1.IPCHP(I) SEGACT MSOUP3 MPOVA3=MSOUP3.IPOVAL SEGACT MPOVA3*MOD ICC1=0 NC=MSOUP3.NOCOMP(/2) DO 15 IC=1,NC C si les valeurs sont deja a jour : IF(TRIGO1(I,IC).LT.0) GO TO 15 C il y a TRIGO1(I,IC) ddl a traiter en meme temps: C incrementation de IC par les go to IF(IC.LT.ICC1) GO TO 15 ICC1=IC+TRIGO1(I,IC) N=MPOVA3.VPOCHA(/1) DO IB=1,N XD=MPOVA3.VPOCHA(IB, IC) YD=MPOVA3.VPOCHA(IB, IC+1) ZD=0. IF(IFOUR.EQ.2)ZD=MPOVA3.VPOCHA(IB,IC+2) CO=COS(ANGLE) XE=XD*XV1+YD*YV1+ZD*ZV1 YE=XD*XV2+YD*YV2+ZD*ZV2 ZE=XD*XVEC+YD*YVEC+ZD*ZVEC ZD=ZE c nouveaux ux uy uz= MPOVA3.VPOCHA(IB,IC) =XD*XV1+YD*XV2+ZD*XVEC MPOVA3.VPOCHA(IB,IC+1)=XD*YV1+YD*YV2+ZD*YVEC IF(IFOUR.EQ.2) #MPOVA3.VPOCHA(IB,IC+2)=XD*ZV1+YD*ZV2+ZD*ZVEC ENDDO 15 CONTINUE 16 CONTINUE SEGDES MSWBL1 C ** partition C initialisation et ajustement du segment MTRAV NNIN=0 NNNOE=0 SEGINI,MTRAV C tri des composantes: elles ne doivent apparaitre C qu' 1 seule fois dans INCO DO 22 I=1,MCHPO1.IPCHP(/1) MSOUP3=MCHPO1.IPCHP(I) SEGACT MSOUP3 NC=MSOUP3.NOCOMP(/2) DO 21 IA=1,NC MOIC=MSOUP3.NOCOMP(IA) IF(NNIN.EQ.0)THEN NNIN=1 SEGADJ,MTRAV ELSE LAG=.TRUE. DO IAA=1,NNIN LAG=.FALSE. GO TO 17 ENDIF ENDDO 17 CONTINUE IF(LAG)THEN NNIN=NNIN + 1 SEGADJ,MTRAV ENDIF ENDIF 21 CONTINUE 22 CONTINUE C fin tri des composantes C on passe de la numerotation globale a C la numerotation locale SEGINI ICPR DO 25 I=1,MCHPO1.IPCHP(/1) MSOUP3=MCHPO1.IPCHP(I) SEGACT MSOUP3 NC=MSOUP3.NOCOMP(/2) DO 24 IA=1,NC MELEME=MSOUP3.IGEOC SEGACT MELEME DO IAA=1,NUM(/2) IAB =NUM(1,IAA) ICPR(IAB)= 1 ENDDO 24 CONTINUE 25 CONTINUE NNNOE=0 DO I=1,ICPR(/1) IF(ICPR(I).EQ.1) THEN NNNOE= NNNOE+1 SEGADJ MTRAV ICPR(I)=NNNOE IGEO(NNNOE)=I ENDIF ENDDO C fin numerotation locale C NNNOE et NNNIN sont aux bonnes tailles et valeurs C copie des valeurs aux noeuds + mise a jour de IBIN et NHAR C attention a la correspondance entre la composante en cours C de traitement et son homologue rangee dans INCO DO 30 I=1,MCHPO1.IPCHP(/1) MSOUP3=MCHPO1.IPCHP(I) SEGACT MSOUP3 DO 29 IAB=1,MSOUP3.NOCOMP(/2) MOIC=MSOUP3.NOCOMP(IAB) MELEME=MSOUP3.IGEOC MPOVA3=MSOUP3.IPOVAL SEGACT MELEME,MPOVA3 DO 28 IA=1,NUM(/2) DO IB=1,NNIN BB(IB,ICPR(NUM(1,IA)))=MPOVA3.VPOCHA(IA,IAB) IBIN(IB,ICPR(NUM(1,IA)))=1 NHAR(IB)=MSOUP3.NOHARM(IAB) ELSE CONTINUE ENDIF ENDDO 28 CONTINUE 29 CONTINUE 30 CONTINUE C le segment MTRAV est entierement rempli C on l envoie a crechep IP1 = KCHPOI GOTO 992 c cas du mchaml 200 CONTINUE MCHEL1 = IP1 C creation matrice aaa 4 col 6 lignes DO I=1,6 AAA(2,I)=MODEFO(I) AAA(4,I)=MODEFO(I) ENDDO NBMDDL=0 LDDLA=0 SEGACT MCHEL1 IZO=MCHEL1.ICHAML(/1) NOCO=0 SEGINI MSWBLO,MSWBL1 DO 208 I=1,MCHEL1.ICHAML(/1) NOC=0 MCHAM1=MCHEL1.ICHAML(I) SEGACT MCHAM1 DO 207 IA=1,MCHAM1.NOMCHE(/2) MOIC=MCHAM1.NOMCHE(IA) TYPIC=MCHAM1.TYPCHE(IA) C B-1):lecture de chpo1 et test si correspondance entre C la composante moic du chpo1 et une du tableau aaa C si oui LAG vrai * controle que le type est bien reel LAG=.FALSE. DO 203 ICO=1,4 DO 2031 ILIGN=1,6 LAG=(MOIC.EQ.AAA(ICO,ILIGN)).AND.(TYPIC.EQ.'REAL*8') IF (LAG) THEN ICOL=ICO GO TO 204 ENDIF 2031 CONTINUE 203 CONTINUE 204 CONTINUE IF (LAG) THEN IF(NOC.GE.1) THEN C la composante est elle deja existante dans cette zone? DO IAK= 1 ,NOCO IF(MOIC.EQ.MOZO(I,IAK)) GO TO 207 ENDDO ENDIF C en sortie de boucle icol represente le type de ddl: C icol =1 --> CONT massif, icol =2 --> DEFO massif C icol =3 --> CONT, icol =4 --> DEFO, C B-2) determination du nombre et de l appellation des composantes C a creer pour le mchaml tourne selon type de calcul C initialisations de depart LDDLA=0 IPOSIA=0 IF(IFOUR.NE.-2.AND.IFOUR.NE.-1.AND.IFOUR.NE.-3) GOTO 211 C DEFORMATIONS PLANES OU CONTRAINTES PLANES OU DEF PLANE GENE C DEFO PLAN -1: UX UY / SMXX SMYY SMZZ SMXY C OU CONT PLAN -2: UX UY / idem C OU DEF PLANE GENE -3:UX UY UZ / idem LDDLA=4 IPOSIA=0 GOTO 217 211 CONTINUE IF(IFOUR.NE.0) GOTO 212 C C AXISYMETRIQUE (IFOUR= 0) C UR UZ / SMRR SMTT SMZZ SMRZ LDDLA=4 IPOSIA=3 GOTO 217 212 CONTINUE IF(IFOUR.NE.1) GOTO 213 C C FOURIER (IFOUR= 1 ) C UR UZ / SMXX SMYY SMZZ SMXY ? LDDLA=4 IPOSIA=3 GOTO 217 213 CONTINUE IF(IFOUR.NE.2) GOTO 214 C C TRIDIM (IFOUR= 2 ) C UX UY UZ / SMXX SMYY SMZZ SMXY SMXZ SMYZ LDDLA=6 IPOSIA=0 GOTO 217 214 CONTINUE C C DEFORMATIONS GENERALISEES LDDLA=0 LDDLB=0 IPOSIA=0 IPOSIB=0 217 CONTINUE C IF ((NOC+LDDLA).GT.NOCO) THEN NOCO=NOC+LDDLA SEGADJ MSWBL1 ENDIF C la composante envoyee est elle compatible avec le mode de calcul?? DO IAA=1,LDDLA * on semble impose les composantes du champ resultat : pb melange IF(MOIC.EQ.AAA(ICOL,IPOSIA+IAA)) THEN GO TO 218 ELSE IF(IAA.EQ.LDDLA)THEN IF(IFOUR.EQ.-1)MESSER='DEFO PLAN ' IF(IFOUR.EQ.-2)MESSER='CONT PLAN ' IF(IFOUR.EQ.-3)MESSER='DEF PLANE GENE' IF(IFOUR.EQ.0)MESSER='AXISYMETRIQUE ' IF(IFOUR.EQ.1)MESSER='FOURIER ' IF(IFOUR.EQ.2)MESSER='TRIDIM ' INTERR(1)=I MOTERR(1:4)=MOIC MOTERR(5:19)=MESSER * GO TO 994 ELSE CONTINUE ENDIF ENDIF ENDDO 218 CONTINUE C on remplit motddl DO IAA=1,LDDLA MOTDDL(**)=AAA(ICOL,IPOSIA+IAA) ENDDO C remplissage des tableaux,MOZO,TRIGO1 et NOCCH1 C qui serviront a dimensionner le nouveau mchaml C MOZO contient pour chaque zone le nom des composantes C et peut aussi....contenir du ' 'ce qui servira. C NOCCH1 contient,pour chaque zone, le no d emplacement de C chaque composante dans le mchaml d origine. si une composante C cree n existait pas dans le mchaml de depart alors: C NOCCH1 (zone,no compos)=0 C TRIGO1 contient,pour chaque zone,et pour chaque composante C un nombre qui peut prendre les valeurs: C -1 si la composante ne doit pas tourner C 0 si MOZO (I,nomcompos) =' ' C 3 2 ou 1 si elle doit tourner.la 1ere des composantes d une meme C famille est indicee a 2 (3 si 3d). IF ((NOC+LDDLA).GT.NOCO) THEN NOCO=NOC+LDDLA SEGADJ MSWBL1 ENDIF DO 206 IAA=NBMDDL+1,NBMDDL+LDDLA NOC= NOC+1 MOZO (I,NOC)=MOTDDL(IAA) TRIGO1(I,NOC)=NBMDDL+LDDLA+1-IAA DO 205 IAB=IA,MCHAM1.NOMCHE(/2) IF(MOTDDL(IAA).EQ.MCHAM1.NOMCHE(IAB))THEN NOCCH1 (I,NOC)=IAB ELSE IF(.NOT.LAG)NOCCH1 (I,NOC)=0 ENDIF 205 CONTINUE 206 CONTINUE NBMDDL=NBMDDL+LDDLA ELSE NOC= NOC + 1 IF (NOC.GT.NOCO) THEN NOCO= NOCO + 1 SEGADJ MSWBL1 ENDIF MOZO(I,NOC)=MOIC NOCCH1(I,NOC)=IA TRIGO1(I,NOC)=-1 ENDIF 207 CONTINUE 208 CONTINUE SEGDES MSWBLO C mise a jour des valeurs de toutes les composantes du C nouveau mchaml sans tenir compte des rotations SEGACT, MCHEL1*MOD DO 224 I=1,MCHEL1.ICHAML(/1) MCHAM1=MCHEL1.ICHAML(I) DO NC=1,NOCCH1(/2) IF(MOZO(I,NC).EQ.' ')GO TO 221 ENDDO 221 CONTINUE N2=NC-1 SEGINI MCHAM3 MCHEL1.ICHAML(I)=MCHAM3 * chercher le dimensionnement max et apres tout faire ... N1PTEL = 1 N1EL = 1 SEGACT MCHAM1 DO KN2=1,MCHAM1.IELVAL(/1) MELVA1 = MCHAM1.IELVAL(KN2) SEGACT MELVA1 N1PTEL = MAX(MELVA1.VELCHE(/1),N1PTEL) N1EL = MAX(MELVA1.VELCHE(/2),N1EL) ENDDO DO 223 IC = 1,N2 MCHAM3.NOMCHE(IC)=MOZO(I,IC) ICN= NOCCH1(I,IC) IF(ICN.EQ.0) THEN C si composante n existe pas dans le mchaml initial C (car elle est cree pour mchel3) elle reste a 0 N2PTEL=0 N2EL=0 SEGINI MELVA3 MCHAM3.IELVAL(IC) = MELVA3 MCHAM3.TYPCHE(IC) = 'REAL*8' GOTO 223 ENDIF c la composante existe MELVA1=MCHAM1.IELVAL(ICN) MCHAM3.TYPCHE(IC) = MCHAM1.TYPCHE(ICN) IF (MCHAM1.TYPCHE(ICN).NE.'REAL*8') THEN MCHAM3.IELVAL(IC) = MELVA1 GOTO 223 ENDIF SEGACT MELVA1 N2PTEL=0 N2EL=0 SEGINI MELVA3 MCHAM3.IELVAL(IC)=MELVA3 DO INPT = 1,N1PTEL DO IEL = 1,N1EL IF (MELVA1.VELCHE(/1).EQ.1) THEN IF (MELVA1.VELCHE(/2).EQ.1) THEN MELVA3.VELCHE(INPT,IEL) = MELVA1.VELCHE(1,1) ELSE MELVA3.VELCHE(INPT,IEL) = MELVA1.VELCHE(1,IEL) ENDIF ELSE MELVA3.VELCHE(INPT,IEL) = MELVA1.VELCHE(INPT,IEL) ENDIF ENDDO ENDDO SEGSUP MELVA1 223 CONTINUE SEGSUP MCHAM1 224 CONTINUE C fin mise a jour des valeurs sans rotations * determine QRtQ CO=COS(ANGLE) RtQ(3,1) = XVEC RtQ(3,2) = YVEC RtQ(3,3) = ZVEC QRtQ(1,1) = XV1*RtQ(1,1) + XV2*RtQ(2,1) + XVEC*RtQ(3,1) QRtQ(1,2) = XV1*RtQ(1,2) + XV2*RtQ(2,2) + XVEC*RtQ(3,2) QRtQ(1,3) = XV1*RtQ(1,3) + XV2*RtQ(2,3) + XVEC*RtQ(3,3) QRtQ(2,1) = YV1*RtQ(1,1) + YV2*RtQ(2,1) + YVEC*RtQ(3,1) QRtQ(2,2) = YV1*RtQ(1,2) + YV2*RtQ(2,2) + YVEC*RtQ(3,2) QRtQ(2,3) = YV1*RtQ(1,3) + YV2*RtQ(2,3) + YVEC*RtQ(3,3) QRtQ(3,1) = ZV1*RtQ(1,1) + ZV2*RtQ(2,1) + ZVEC*RtQ(3,1) QRtQ(3,2) = ZV1*RtQ(1,2) + ZV2*RtQ(2,2) + ZVEC*RtQ(3,2) QRtQ(3,3) = ZV1*RtQ(1,3) + ZV2*RtQ(2,3) + ZVEC*RtQ(3,3) C mise a jour des valeurs des composantes du C nouveau mchaml necessitant la rotation C TRIGO1(I,IC)= 1 , 2 , 3 au max; C TRIGO1(I,IC)=-1 ou 0 pas de rotation SEGACT MCHEL1 DO 236 I=1,MCHEL1.ICHAML(/1) MCHAM3=MCHEL1.ICHAML(I) SEGACT MCHAM3 ICC1=0 NC=MCHAM3.NOMCHE(/2) DO 235 IC=1,NC C si les valeurs sont deja a jour : IF(TRIGO1(I,IC).LT.0) GO TO 235 C il y a TRIGO1(I,IC) ddl a traiter en meme temps: C incrementation de IC par les go to IF(IC.LT.ICC1) GO TO 235 ICC1=IC+TRIGO1(I,IC) * calcul plan, axi ou Fourier MELVA1=MCHAM3.IELVAL(IC) MELVA2=MCHAM3.IELVAL(IC+1) MELVA3=MCHAM3.IELVAL(IC+2) MELVA4=MCHAM3.IELVAL(IC+3) SEGACT, MELVA1*MOD,MELVA2*MOD,MELVA3*MOD,MELVA4*MOD * calcul 3D IF (TRIGO1(I,IC).EQ.6) THEN MELVA5=MCHAM3.IELVAL(IC+4) MELVA6=MCHAM3.IELVAL(IC+5) SEGACT, MELVA5*MOD,MELVA6*MOD ENDIF N1PTEL=MELVA1.VELCHE(/1) N1EL = MELVA1.VELCHE(/2) DO INPT = 1,N1PTEL DO IEL = 1,N1EL SIGM(1,1)=MELVA1.VELCHE(INPT,IEL) SIGM(2,2)=MELVA2.VELCHE(INPT,IEL) SIGM(1,2)=MELVA4.VELCHE(INPT,IEL) SIGM(2,1)=SIGM(1,2) SIGM(3,3)=MELVA3.VELCHE(INPT,IEL) IF (TRIGO1(I,IC).EQ.6) THEN SIGM(1,3)=MELVA5.VELCHE(INPT,IEL) SIGM(2,3)=MELVA6.VELCHE(INPT,IEL) SIGM(3,1)=SIGM(1,3) SIGM(3,2)=SIGM(2,3) ELSE SIGM(1,3)=0 SIGM(2,3)=0 SIGM(3,1)=0 SIGM(3,2)=0 ENDIF c nouvelles composantes = QRtQ SIGMA QtRtQ DO L=1,3 DO M=1,3 NSIG(L,M)=SIGM(L,1)*QRtQ(M,1)+SIGM(L,2)*QRtQ(M,2)+ & SIGM(L,3)*QRtQ(M,3) ENDDO ENDDO DO L=1,3 DO M=1,3 SIGM(L,M)=NSIG(1,M)*QRtQ(L,1)+NSIG(2,M)*QRtQ(L,2)+ & NSIG(3,M)*QRtQ(L,3) ENDDO ENDDO MELVA1.VELCHE(INPT,IEL)=SIGM(1,1) MELVA2.VELCHE(INPT,IEL)=SIGM(2,2) MELVA4.VELCHE(INPT,IEL)=SIGM(1,2) MELVA3.VELCHE(INPT,IEL)=SIGM(3,3) IF (TRIGO1(I,IC).EQ.6) THEN MELVA5.VELCHE(INPT,IEL)=SIGM(1,3) MELVA6.VELCHE(INPT,IEL)=SIGM(2,3) ENDIF ENDDO ENDDO 235 CONTINUE 236 CONTINUE SEGDES MSWBL1 * on arrete la le traitement. Par rapport a la programmation * du cas chpoint, il y a encore des verifs a faire sur l unicite * des composantes. Mais comme a ce jour, la definition du ET sur * les MCHAML n est pas claire, il faut reflechir ... 11/97 KICH. IP1 = MCHEL1 GOTO 994 992 CONTINUE SEGSUP MTRAV,ICPR 994 CONTINUE SEGSUP MSWBLO, MSWBL1 999 CONTINUE END
© Cast3M 2003 - Tous droits réservés.
Mentions légales