adchel
C ADCHEL SOURCE SP204843 24/10/25 21:15:03 12048 C_______________________________________________________________________ C C ADDITION / SOUSTRACTION DE 2 CHPS PAR ELEMENTS C C ( ADDITION :IEPS=1 ; SOUSTRACTION IEPS=-1 ) C C ENTREE : C -------- C C IPCHE1 POINTEUR SUR LE PREMIER CHAMPS (TYPE MCHAML) C IPCHE2 POINTEUR SUR LE DEUXIEME CHAMPS (TYPE MCHALM) C IEPS = 1 ADDITION C =-1 SOUSTRACTION C C SORTIE : C ________ C C IPCHAD POINTEUR SUR LE CHAMPS SOMME (TYPE MCHAML) C = 0 SI L OPERATION EST IMPOSSIBLE C C MESSAGE D ERREUR DECHENCHE SI IPCHAD=0 C C LES 2 CHAM PAR ELEMENT PEUVENT AVOIR DES SUPPORTS GEOMETRIQUES C DIFFERENTS POUR PEU QUE LES OBJETS AFFECTES ELEMENTAIRES QUI LES C SOUS TENDENT FORMENT UNE PARTITION DE LA GEOMETRIE C C CODE EBERSOLT JUILLET 84 PASSAGE 4331 FEVRIER 85 C C ON PEUT ADDITIONNER A UN CHAMELEM QUELCONQUE UN CHAMELEM A UNE C COMPOSANTE C C MODIFIE SEPTEMBRE 86 C C PASSAGE AUX NOUVEAU CHAMELEM PAR JM CAMPENON LE 29 10 90 C +PP EXTENSION ADDITION P.PEGON 24/11/92 C C CB215821 : Gestion de la soustraction avec des SOUS-ZONES disjointes C_______________________________________________________________________ C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC SMCHAML -INC SMLREEL -INC SMCOORD CHARACTER*16 TYPCH2 SEGMENT MZONG INTEGER NZONG(0) ENDSEGMENT SEGMENT MZON1 INTEGER NZON1(0) ENDSEGMENT SEGMENT MZON2 INTEGER NZON2(0) ENDSEGMENT C SEGMENT ITAFF INTEGER JTAFF(0) ENDSEGMENT C SEGMENT MPTVAL INTEGER IPOS(NS) ,NSOF(NS) INTEGER IVAL(NCOSOU) CHARACTER*16 TYVAL(NCOSOU) ENDSEGMENT C PARAMETER ( NINF=3 ) INTEGER INFOS(NINF) CHARACTER*72 MOT CHARACTER*16 CONCH1,CONCH2 LOGICAL BOOLSO C BOOLSO=.FALSE. IF(IEPS.EQ. 1) XX= 1.D0 IF(IEPS.EQ.-1) XX=-1.D0 C if (ieps.eq.-1) then C write (6,*) ' adchel soustraction de chamelem ' C endif IF(IPCHE1.NE.IPCHE2) GOTO 1000 C C SI LES 2 POINTEURS SONT EGAUX TRAITEMENT SPECIAL C MCHEL1=IPCHE1 MCHEL2=IPCHE2 SEGINI,MCHELM=MCHEL1 IPCHAD = MCHELM NSOUS = IMACHE(/1) IF (IEPS.EQ. 1) XX=2.D0 IF (IEPS.EQ.-1) XX=0.D0 DO 110 IA=1,NSOUS MCHAM1=ICHAML(IA) SEGINI,MCHAML=MCHAM1 ICHAML(IA)=MCHAML DO 111 ICOMP=1,IELVAL(/1) MELVA1 = IELVAL(ICOMP) SEGACT,MELVA1 SEGINI,MELVAL=MELVA1 N1PTEL=VELCHE(/1) IF (N1PTEL.EQ.0) THEN N2PTEL=IELCHE(/1) N2EL =IELCHE(/2) IF (TYPCHE(ICOMP).EQ.'POINTEURLISTREEL') THEN DO 122 IB=1,N2EL DO 121 IGAU=1,N2PTEL MLREE1=IELCHE(IGAU,IB) IF(MLREE1.EQ.0)THEN MLREEL=MLREE1 ELSE SEGACT MLREE1 SEGINI MLREEL DO 123 IPROG=1,JG 123 CONTINUE ENDIF IELCHE(IGAU,IB)=MLREEL 121 CONTINUE 122 CONTINUE ELSE IF (TYPCHE(ICOMP).EQ.'POINTEUREVOLUTIO') THEN DO 126 IB=1,N2EL DO 125 IGAU=1,N2PTEL MEVOL1=IELCHE(IGAU,IB) IELCHE(IGAU,IB)=MEVOL2 125 CONTINUE 126 CONTINUE ELSE IF (TYPCHE(ICOMP).EQ.'POINTEURPOINT ') THEN SEGACT,MCOORD*mod NBNO=NBPTS NBNOI=NBNO SEGADJ,MCOORD DO 132 IB=1,N2EL DO 131 IGAU=1,N2PTEL IP=IELCHE(IGAU,IB) IF(IP.EQ.0)THEN NBPTS=IP ELSE IREF=(IP-1)*(IDIM+1) DO 133 IC=1,IDIM XCOOR(NBNOI*(IDIM+1)+IC)=XCOOR(IREF+IC)*XX 133 CONTINUE XCOOR(NBNOI*(IDIM+1)+(IDIM+1))=XCOOR(IREF+(IDIM+1)) ENDIF IELCHE(IGAU,IB)=NBNOI+1 NBNOI=NBNOI+1 131 CONTINUE 132 CONTINUE ELSE C C NOM DE COMPOSANTE NON RECONNU C MOTERR(1:4)=NOMCHE(ICOMP) IPCHAD=0 SEGSUP MELVAL,MCHAML,MCHELM RETURN ENDIF ELSE N1EL=VELCHE(/2) DO IB=1,N1EL DO IGAU=1,N1PTEL VELCHE(IGAU,IB)=XX*VELCHE(IGAU,IB) ENDDO ENDDO ENDIF IELVAL(ICOMP) = MELVAL 111 CONTINUE 110 CONTINUE GOTO 777 C_______________________________________________________________________ C C CAS GENERAL C_______________________________________________________________________ C 1000 CONTINUE MCHEL1=IPCHE1 MCHEL2=IPCHE2 SEGACT,MCHEL1,MCHEL2 C C ERREUR IMPOSSIBLE D ADDITIONNER DES CHPS/ELMTS C DE SS TYPE DIFFERENTS C IF (MCHEL1.IFOCHE.NE.MCHEL2.IFOCHE) THEN MOTERR(1:16)=MCHEL1.TITCHE(1:8)//MCHEL2.TITCHE(1:8) IPCHAD=0 GOTO 666 ENDIF C MOT=MCHEL1.TITCHE L1=MCHEL1.TITCHE(/1) IF (MOT.EQ.'NOEUD'.OR.MOT.EQ.'GRAVITE' .OR.MOT.EQ.'RIGIDITE'.OR. & MOT.EQ.'MASSE'.OR.MOT.EQ.'STRESSES'.OR.MOT.EQ.'SCALAIRE') THEN MOT= MCHEL2.TITCHE L1 = MCHEL2.TITCHE(/1) ENDIF N3 =MCHEL1.INFCHE(/2) C* On doit avoir N3=6 NSOUS1=MCHEL1.ICHAML(/1) NSOUS2=MCHEL2.ICHAML(/1) C C QUELLE BIJECTION ENTRE LES SOUS PAQUETS SI OUI TRAITEMENT AMELIORE C IF (NSOUS1.NE.NSOUS2) GOTO 4000 C SEGINI ITAFF DO 17 ISOUS1=1,NSOUS1 IPMAI1 = MCHEL1.IMACHE(ISOUS1) CONCH1 = MCHEL1.CONCHE(ISOUS1) DO 18 ISOUS2=1,NSOUS2 ISOUS=ISOUS2 IPMAI2= MCHEL2.IMACHE(ISOUS) CONCH2= MCHEL2.CONCHE(ISOUS) IF(IPMAI1.EQ.IPMAI2.AND.CONCH1.EQ.CONCH2) THEN C C VERIFICATION POUR LES INFCHE C IF (IRTD.EQ.0) GOTO 18 IMINT1=MCHEL1.INFCHE(ISOUS1,4) IMINT2=MCHEL2.INFCHE(ISOUS2,4) IF (IMINT1.EQ.IMINT2) GOTO 171 IMINT1 = MCHEL1.INFCHE(ISOUS1,6) c* IF (IMINT1.EQ.0) IMINT1 = 1 IMINT2 = MCHEL2.INFCHE(ISOUS2,6) c* IF (IMINT2.EQ.0) IMINT2 = 1 IF (IMINT1.EQ.IMINT2) GOTO 171 C C ERREUR IMPOSSIBLE D ADDITIONNER DES CHPS/ELMTS C DE SS TYPE DIFFERENTS C MOTERR(1:8)=MCHEL1.TITCHE MOTERR(9:16)=MCHEL2.TITCHE SEGSUP ITAFF IPCHAD=0 RETURN ENDIF 18 CONTINUE SEGSUP ITAFF GOTO 4000 171 CONTINUE C Ici, les zones ISOUS1 et ISOUS2 ont meme maillage, c meme constituant, meme segment d'integration JTAFF(**)=MCHEL2.ICHAML(ISOUS) 17 CONTINUE C C ON A TROUVE UNE BIJECTION ET ON VECTORISE C N1=NSOUS1 C* N3 = 6 SEGINI MCHELM TITCHE=MOT IFOCHE=IFOUR IPCHAD=MCHELM DO 400 ISOUS=1,NSOUS1 IMACHE(ISOUS)=MCHEL1.IMACHE(ISOUS) CONCHE(ISOUS)=MCHEL1.CONCHE(ISOUS) DO 401 N33=1,N3 INFCHE(ISOUS,N33)=MCHEL1.INFCHE(ISOUS,N33) 401 CONTINUE C MCHAM1=MCHEL1.ICHAML(ISOUS) C SEGINI,MCHAML=MCHAM1 ICHAML(ISOUS)=MCHAML IPCHA=MCHAML C MCHAM2=JTAFF(ISOUS) SEGACT MCHAM2 IPCHA2=MCHAM2 C IF (IPCHA.EQ.0) THEN SEGSUP ITAFF GOTO 9990 ENDIF C 400 CONTINUE SEGSUP ITAFF GOTO 666 C_______________________________________________________________________ C C ON A PAS TROUVE DE BIJECTION C_______________________________________________________________________ C 4000 CONTINUE SEGINI MZONG,MZON1,MZON2 DO 500 ISOUS1=1,NSOUS1 NZONG(**)=MCHEL1.IMACHE(ISOUS1) NZON1(**)=ISOUS1 NZON2(**)=0 500 CONTINUE IWRN=0 DO 510 ISOUS2=1,NSOUS2 IPMAI2 = MCHEL2.IMACHE(ISOUS2) CONCH2 = MCHEL2.CONCHE(ISOUS2) DO 520 ISOUS1=1,NSOUS1 IPMAI1= MCHEL1.IMACHE(ISOUS1) CONCH1= MCHEL1.CONCHE(ISOUS1) IF (IPMAI1.EQ.IPMAI2 .AND.CONCH1.EQ.CONCH2) THEN IF (IRTD.EQ.0) GOTO 520 C C VERIFICATION POUR LES MINTES C IF ( MCHEL1.INFCHE(ISOUS1,6).EQ. & MCHEL2.INFCHE(ISOUS2,6) ) GOTO 530 C C ERREUR SUR LES SUPPORTS DES MCHAML C MOTERR(1:8) =MCHEL1.TITCHE MOTERR(9:16)=MCHEL2.TITCHE IPCHAD=0 SEGSUP MZONG,MZON1,MZON2 RETURN ENDIF 520 CONTINUE IWRN=1 NZONG(**)=IPMAI2 NZON1(**)=0 NZON2(**)=ISOUS2 GOTO 510 C 530 CONTINUE NZON2(ISOUS1)=ISOUS2 510 CONTINUE C C WARNING LES SOUS ZONES GEOMETRIQUES NE SE CORRESPONDENT PAS 2 A 2 C NSOUS=NZONG(/1) N1=NSOUS C* N3=6 SEGINI MCHELM TITCHE=MOT IFOCHE=IFOUR IPCHAD=MCHELM C DO 540 ISOUS=1,NSOUS BOOLSO=.FALSE. IF(NZON1(ISOUS).NE.0.AND.NZON2(ISOUS).NE.0) GOTO 550 C IF(NZON1(ISOUS).NE.0) THEN MCHAM1=MCHEL1.ICHAML( NZON1(ISOUS) ) SEGINI,MCHAML=MCHAM1 IMACHE(ISOUS)=NZONG(ISOUS) CONCHE(ISOUS)=MCHEL1.CONCHE( NZON1(ISOUS) ) DO 402 N33=1,N3 INFCHE(ISOUS,N33)=MCHEL1.INFCHE(NZON1(ISOUS),N33) 402 CONTINUE ENDIF IF(NZON2(ISOUS).NE.0) THEN IF(IEPS .EQ. -1) BOOLSO=.TRUE. MCHAM2=MCHEL2.ICHAML( NZON2(ISOUS) ) SEGINI,MCHAML=MCHAM2 IMACHE(ISOUS)=NZONG(ISOUS) CONCHE(ISOUS)=MCHEL2.CONCHE( NZON2(ISOUS) ) DO 403 N33=1,N3 INFCHE(ISOUS,N33)=MCHEL2.INFCHE(NZON2(ISOUS),N33) 403 CONTINUE ENDIF ICHAML(ISOUS)=MCHAML C DO 175 ICOMP=1,IELVAL(/1) MELVA1=IELVAL(ICOMP) SEGACT,MELVA1 SEGINI,MELVAL=MELVA1 IELVAL(ICOMP)=MELVAL C CB215821 Si c'est la soustraction qu'on demande il faut faire * XX... C sur les SOUS-ZONES issues du 2ème MCHAML (BOOLSO = .TRUE.) IF (BOOLSO) THEN TYPCH2=TYPCHE(ICOMP) ENDIF 175 CONTINUE C GOTO 540 C 550 CONTINUE MCHAM1=MCHEL1.ICHAML( NZON1(ISOUS) ) SEGINI,MCHAML=MCHAM1 IMACHE(ISOUS)=NZONG(ISOUS) CONCHE(ISOUS)=MCHEL1.CONCHE( NZON1(ISOUS) ) DO 404 N33=1,N3 INFCHE(ISOUS,N33)=MCHEL1.INFCHE(NZON1(ISOUS),N33) 404 CONTINUE ICHAML(ISOUS)=MCHAML IPCHA=MCHAML MCHAM2=MCHEL2.ICHAML( NZON2(ISOUS) ) SEGACT MCHAM2 IPCHA2=MCHAM2 C IF (IPCHA.EQ.0) THEN SEGSUP MZONG,MZON1,MZON2 GOTO 9990 ENDIF C 540 CONTINUE C SEGSUP MZONG,MZON1,MZON2 GOTO 666 C 9990 CONTINUE C C ERREUR DANS UNE SOUS ZONE : DESACTIVATION ET RETOUR C SEGSUP MCHAML,MCHELM,ITAFF IPCHAD=0 RETURN C 666 CONTINUE 777 CONTINUE END
© Cast3M 2003 - Tous droits réservés.
Mentions légales