rtens
C RTENS SOURCE CB215821 24/04/12 21:17:13 11897 & IPTV1,IPTV2,IPTV3,IPCHE1,ICAS,IPCHAM) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) *-----------------------------------------------------------------------* * Operateur RTENS * * * * IPCHE (e) pointeur sur un MCHAML (CONTRAINTES ou DEFORMATIONS * * ou DEFORMATIONS INELASTIQUES) * * IPMODL (e) pointeur sur un MMODEL * * IMOT (e) 0 : repere cartesien ou repere d'orthotropie * * 1 : repere en coordonnees polaires * * 2 : repere en coordonnees cylindriques * * 3 : repere en coordonnees spheriques * * 4 : repere en coordonnees toriques circulaires * * 5 : repere en coordonnees toriques cartesiennes * * KMOT (e) 1 : transformation RT*A*R * * 2 : transformation R*A*RT * * utilisé avec le champ de gradient * IPTV1 (e) 1er vecteur (IMOT = 0) ou 1er point (IMOT <> 0) * * IPTV2 (e) 2eme vecteur (IMOT = 0) ou 2eme point (IMOT <> 0) * * IPTV3 (e) 3eme point (IMOT <> 0) * * IPCHE1 (e) pointeur sur un MCHAML de CARACTERISTIQUES * * ICAS (e) distingue les differents cas * * 1 = * 2 = * 3 = * 4 = option CHAM2 champ de gradient * IPCHAM (s) pointeur sur un MCHAML (CONTRAINTES ou DEFORMATIONS) * * (ou VARIABLES INTERNES ) * * * * Passage aux nouveaux Chamelem par S.RAMAHANDRY le 28/10/90 * * Corrections / redecoupage / ajouts D. R.-M. le 18/3/94 * *-----------------------------------------------------------------------* -INC PPARAM -INC CCOPTIO -INC CCHAMP -INC SMCHAML -INC SMMODEL -INC SMINTE -INC SMCOORD -INC SMELEME * SEGMENT NOTYPE CHARACTER*16 TYPE(NBTYPE) ENDSEGMENT SEGMENT MPTVAL INTEGER IPOS(NS) , NSOF(NS) INTEGER IVAL(NCOSOU) CHARACTER*16 TYVAL(NCOSOU) ENDSEGMENT POINTEUR MPTVA1.MPTVAL * DIMENSION V1(4),V2(4),W2(3),W3(3) DIMENSION CENTR1(3),CENTR2(3),AXEI1(3) * PARAMETER ( NINF=3 ) INTEGER INFOS(NINF) CHARACTER*(NCONCH) CONM CHARACTER*8 CMATE LOGICAL Lsupre,lsupgd lsupre=.true. lsupgd=.true. * NHRM=NIFOUR * * Activation du MMODEL * MMODEL=IPMODL NSOUS=KMODEL(/1) * ICONT=0 IDEFO=0 IDEF = 0 IVARI=0 MOCOMP = 0 MOEP = 0 MOVEC = 0 MCHELM=IPCHE IFOMEM=IFOCHE IF (TITCHE .EQ.'CONTRAINTES') ICONT = 1 IF (TITCHE .EQ.'DEFORMATIONS') IDEFO = 1 IF (TITCHE .EQ.'DEFORMATIONS INELASTIQUES') IDEFO = 2 if (idefo.gt.0) idef= 1 IF (TITCHE .EQ.'VARIABLES INTERNES') IVARI = 1 IF (ICAS.NE.4.AND.ICONT.NE.1.AND.IDEFO.NE.1.AND.IDEFO.NE.2) THEN * * Le sous-type du MCHAML doit etre CONTRAINTES ou DEFORMATIONS * sauf dans le cas gradient pour le moment * MOTERR(1:24) ='CONTRAINTES' MOTERR(25:48)='DEFORMATIONS' RETURN ENDIF * * Verification du lieu support du MCHAML de contraintes * *** CALL QUESUP (IPMODL,IPCHE,5,0,ISUP,IRETCO) ISUP = 5 IF (IRET.NE.0) RETURN IPCHE=IPPV * * Verification du lieu support du MCHAML de caracteristiques * IF (IPCHE1.NE.0) THEN ** CALL QUESUP (IPMODL,IPCHE1,5,1,ISUP1,IRETCA) ** IF (ISUP1.NE.0) RETURN ISUP1 = 5 IF (IRET.NE.0) RETURN IPCHE1=IPPV ENDIF * * Creation du MCHAML resultat (apres rotation) * * cas des champs de contraintes ou de deformations * N1=NSOUS L1=12 IF (IVARI.EQ.1) L1=18 if (idefo.eq.2) L1=25 N3=6 SEGINI MCHELM IF (ICONT.EQ.1) THEN TITCHE='CONTRAINTES' ELSE IF (IDEFO.EQ.1) THEN TITCHE='DEFORMATIONS' ELSE IF (IDEFO.EQ.2) THEN TITCHE='DEFORMATIONS INELASTIQUES' ELSE IF (IVARI.EQ.1) THEN TITCHE='VARIABLES INTERNES' ENDIF IFOCHE=IFOUR IPCHAM=MCHELM * * Boucle sur les zones du MMODEL * ISOUSS = 0 DO 500 ISOUS=1,NSOUS ISOUSS = ISOUSS + 1 * compteurs de sous champs de lobjet rasutlat * * Initialisations * IVACOM=0 IVARES=0 IMODEL=0 NCOMP=0 MOCOMP=0 IVAVEC=0 MOVEC=0 NVEC=0 * * >>> Recuparation des informations generiques <<< * IMODEL=KMODEL(ISOUS) IPMAIL=IMAMOD CONM =CONMOD IMACHE(ISOUSS)=IPMAIL CONCHE(ISOUSS)=CONMOD * * Informations contenues dans le MMODEL * MELE=NEFMOD MELEME=IMAMOD * * Nature et formulation du materiau * C* NFOR=FORMOD(/2) C* NMAT=MATMOD(/2) C* CALL NOMATE(FORMOD,NFOR,MATMOD,NMAT,CMATE,MATE,INAT) CMATE = CMATEE MATE = IMATEE INAT = INATUU * c GG : si le sous modele est un sure rien a faire ne cree pas de sous champs IF (NEFMOD.EQ.259) THEN ISOUSS = ISOUSS - 1 GOTO 500 ENDIF IF(IVARI.EQ.1) THEN * * test sur le type de modele de materiau * en cas de variables internes en attendant que * tous les modeles soient branches * on admet actuellement les modeles ou toutes * les variables internes sont scalaires * LEPROB=2 * * cas des materiaux ou on n'a rien a faire * IF(INAT.EQ. 0.OR.INAT.EQ. 1.OR.INAT.EQ. 3.OR. & INAT.EQ. 5.OR.INAT.EQ.15.OR.INAT.EQ.33.OR. & INAT.EQ.48) THEN LEPROB=0 ENDIF * * cas des materiaux a traiter ( A FAIRE ) * * IF(INAT.EQ. 4) THEN * LEPROB=1 * .......... * ENDIF * * cas des materiaux non prevus * IF(LEPROB.EQ.2) THEN SEGSUP MCHELM RETURN ENDIF ENDIF * * Coque integree ou non ? * IF(INFMOD(/1).NE.0)THEN NPINT=INFMOD(1) ELSE NPINT=0 ENDIF * * Informations concernant l'element-fini * * CALL ELQUOI(MELE,0,5,IPINF,IMODEL) * IF (IERR.NE.0) THEN * SEGSUP MCHELM * RETURN * ENDIF * INFO = IPINF MFR = INFELE(13) NBGS = INFELE(4) NSTRS = INFELE(16) * MINTE = INFELE(11) MINTE=INFMOD(7) IPMINT = MINTE MINTE1 = INFMOD(8) * SEGSUP INFO * * Test presence MCHAML CARACTERISTIQUES si MFR=5 et IMOT<>0 * IF (MFR.EQ.5.AND.ICAS.NE.1.AND.ICAS.NE.4 & .AND.IPCHE1.EQ.0) THEN MOTERR(1:32) = 'CARACTERISTIQUES' SEGSUP MCHELM RETURN ENDIF * * L'option GRADIENT ne fonctionne qu'en massif actuellement * c IF (ICAS.EQ.4.AND.MFR.NE.1.AND.MFR.NE.31) THEN IF (ICAS.EQ.4.AND.MFR.NE.1.AND.MFR.NE.31.AND.MFR.NE.63) THEN SEGSUP MCHELM RETURN ENDIF * * Creation du tableau INFOS * IF (IRTD.EQ.0) GOTO 9990 * INFCHE(ISOUSS,1)=0 INFCHE(ISOUSS,2)=0 INFCHE(ISOUSS,3)=NHRM INFCHE(ISOUSS,4)=MINTE INFCHE(ISOUSS,5)=0 INFCHE(ISOUSS,6)=5 * * Activation du segment MINTE * NBPGAU=POIGAU(/1) * * Activation du segment MELEME * NBNN =NUM(/1) NBELEM=NUM(/2) IPPORE=0 IF(MFR.EQ.33) IPPORE=NBNN * * Recherche des noms de composantes * lsupre=.true. IF (ICONT.EQ.1) THEN if(lnomid(4).ne.0) then nomid=lnomid(4) mocomp=nomid ncomp=lesobl(/2) nfac=lesfac(/2) lsupre=.false. else endif ELSE IF (IDEFO.EQ.1) THEN if(lnomid(5).ne.0) then nomid=lnomid(5) ncomp=lesobl(/2) mocomp=nomid lsupre=.false. else endif ELSE IF (IDEFO.EQ.2) THEN if(lnomid(13).ne.0) then nomid=lnomid(13) mocomp=nomid ncomp=lesobl(/2) nfac=lesfac(/2) lsupre=.false. else endif ELSE IF (IVARI.EQ.1) THEN if(lnomid(10).ne.0) then nomid=lnomid(10) mocomp=nomid ncomp=lesobl(/2) nfac=lesfac(/2) lsupre=.false. else endif ENDIF * * Verification de leur presence * IF(IVARI.EQ.1.AND.LEPROB.EQ.0) THEN NBTYPE=0 SEGINI NOTYPE MOTYPE=NOTYPE ELSE NBTYPE=1 SEGINI NOTYPE MOTYPE=NOTYPE TYPE(1)='REAL*8' ENDIF * SEGSUP NOTYPE IF (IERR.NE.0) GOTO 9990 IF (ISUP.EQ.1) THEN ENDIF * * Cas des variables internes * Si rien a faire, on se contente de recopier la * zone elementaire du MCHAML * IF(IVARI.EQ.1.AND.LEPROB.EQ.0) THEN MPTVAL=IVACOM NCOS=IVAL(/1) IE=0 DO 1021 ICOMP=1,NCOS IF(IVAL(ICOMP).NE.0) IE=IE+1 1021 CONTINUE * N2=IE SEGINI MCHAML ICHAML(ISOUSS)=MCHAML NCOSOU=N2 NS=1 SEGINI MPTVA1 IVARES=MPTVA1 NOMID=MOCOMP NBROBL=LESOBL(/2) NBRFAC=LESFAC(/2) IE=0 DO 1022 ICOMP=1,NCOMP IF(IVAL(ICOMP).NE.0) THEN IE=IE+1 IF(ICOMP.LE.NBROBL) THEN NOMCHE(IE)=LESOBL(ICOMP) ELSE NOMCHE(IE)=LESFAC(ICOMP-NBROBL) ENDIF TYPCHE(IE)=TYVAL(ICOMP) MELVA1=IVAL(ICOMP) SEGINI,MELVAL=MELVA1 IELVAL(IE)=MELVAL MPTVA1.IVAL(IE)=MELVAL ENDIF 1022 CONTINUE GO TO 510 ENDIF * * Taille des MELVAL a allouer (champ non constant a priori) * N1PTEL=NBGS N1EL =NBELEM NBPTEL=N1PTEL NEL =N1EL * * Creation du MCHAML pour la zone ISOUS * N2=NCOMP SEGINI MCHAML ICHAML(ISOUSS)=MCHAML NS=1 NCOSOU=NCOMP SEGINI MPTVAL IVARES=MPTVAL NOMID=MOCOMP DO 102 ICOMP=1,NCOMP NOMCHE(ICOMP)=LESOBL(ICOMP) TYPCHE(ICOMP)='REAL*8' N2PTEL=0 N2EL=0 SEGINI MELVAL IELVAL(ICOMP)=MELVAL IVAL(ICOMP)=MELVAL 102 CONTINUE * * Coordonnees des points caracterisant les * reperes choisis (spherique, cylindrique, ...) * lsupgd=.true. IF (IMOT.NE.0) THEN IF (IMOT.EQ.1) THEN * * Coordonnees POLAIRES * IF (IDIM.EQ.2) THEN IREF=(IPTV1-1)*(IDIM+1) CENTR1(1)=XCOOR(IREF+1) CENTR1(2)=XCOOR(IREF+2) DO 12 II=1,4 V1(II)=0.D0 12 CONTINUE ELSE GOTO 9990 ENDIF ELSE IF (IDIM.EQ.3) THEN * * Autres coordonnees * IREF1=(IPTV1-1)*(IDIM+1) CENTR1(1)=XCOOR(IREF1+1) CENTR1(2)=XCOOR(IREF1+2) CENTR1(3)=XCOOR(IREF1+3) IREF2=(IPTV2-1)*(IDIM+1) AXEI1(1)=XCOOR(IREF2+1) AXEI1(2)=XCOOR(IREF2+2) AXEI1(3)=XCOOR(IREF2+3) DO 103 IC=1,IDIM V1(IC)=AXEI1(IC)-CENTR1(IC) 103 CONTINUE V1(4)=SQRT(V1(1)**2+V1(2)**2+V1(3)**2) IF (V1(4).EQ.0.D0) THEN GOTO 9990 ENDIF DO 104 IC=1,IDIM V1(IC) = V1(IC) / V1(4) 104 CONTINUE IF (IPTV3.NE.0) THEN IREF3=(IPTV3-1)*(IDIM+1) CENTR2(1)=XCOOR(IREF3+1) CENTR2(2)=XCOOR(IREF3+2) CENTR2(3)=XCOOR(IREF3+3) ENDIF ENDIF ELSE IF (ICAS.EQ.2) THEN * * Repere cartesien (IPCHE1 = 0 et IMOT = 0) * IF (IDIM.EQ.2) THEN IREF=(IPTV1-1)*(IDIM+1) V1(1)=XCOOR(IREF+1) V1(2)=XCOOR(IREF+2) V1(4)=SQRT(V1(1)**2+V1(2)**2) IF (V1(4).EQ.0.) THEN GOTO 9990 ENDIF ELSE IF (IDIM.EQ.3) THEN IREF1=(IPTV1-1)*(IDIM+1) V1(1)=XCOOR(IREF1+1) V1(2)=XCOOR(IREF1+2) V1(3)=XCOOR(IREF1+3) V1(4)=SQRT(V1(1)**2+V1(2)**2+V1(3)**2) IF (V1(4).EQ.0.D0) THEN GOTO 9990 ENDIF IF (IPTV2.NE.0) THEN IREF2=(IPTV2-1)*(IDIM+1) V2(1)=XCOOR(IREF2+1) V2(2)=XCOOR(IREF2+2) V2(3)=XCOOR(IREF2+3) V2(4)=SQRT(V2(1)**2+V2(2)**2+V2(3)**2) IF (V2(4).EQ.0.D0) THEN GOTO 9990 ENDIF W3(1)=(V1(2)*V2(3)-V1(3)*V2(2))/(V1(4)*V2(4)) W3(2)=(V1(3)*V2(1)-V1(1)*V2(3))/(V1(4)*V2(4)) W3(3)=(V1(1)*V2(2)-V1(2)*V2(1))/(V1(4)*V2(4)) W2(1)=(W3(2)*V1(3)-W3(3)*V1(2))/V1(4) W2(2)=(W3(3)*V1(1)-W3(1)*V1(3))/V1(4) W2(3)=(W3(1)*V1(2)-W3(2)*V1(1))/V1(4) ENDIF ENDIF ELSEIF (ICAS.EQ.1) THEN * * On veut le tenseur dans le repere d'orthotropie. Il est * stocke pour chaque element dans un MCHAML de CARACTERISTIQUES * (IMOT = 0 et IPCHE1 <> 0) * IF (MFR.EQ.1 .OR. MFR.EQ.31) THEN IF (IDIM.EQ.2) THEN NBROBL=2 NBRFAC=0 SEGINI NOMID MOVEC=NOMID LESOBL(1)='V1X ' LESOBL(2)='V1Y ' ELSE NBROBL=6 NBRFAC=0 SEGINI NOMID MOVEC=NOMID LESOBL(1)='V1X ' LESOBL(2)='V1Y ' LESOBL(3)='V1Z ' LESOBL(4)='V2X ' LESOBL(5)='V2Y ' LESOBL(6)='V2Z ' ENDIF ELSE IF (MFR.EQ.3.OR.MFR.EQ.5.OR.MFR.EQ.9) THEN NBROBL=2 NBRFAC=0 SEGINI NOMID MOVEC=NOMID LESOBL(1)='V1X ' LESOBL(2)='V1Y ' ENDIF NVEC = NBROBL+NBRFAC NBTYPE=1 SEGINI NOTYPE MOTYPE=NOTYPE TYPE(1)='REAL*8' & 1,INFOS,3,IVAVEC) SEGSUP NOTYPE IF (IERR.NE.0) GOTO 9990 * * cas du champ de gradient * ELSE IF (ICAS.EQ.4) THEN * * On veut tourner le tenseur la matrice contenue dans * un MCHAML de GRADIENT ( IPCHE1 ) if(lnomid(3).ne.0) then nomid=lnomid(3) movec=nomid nvec=lesobl(/2) nfac=lesfac(/2) lsupgd=.false. else lsupgd=.true. endif * * VERIFICATION DE LEUR PRESENCE * NBTYPE=1 SEGINI NOTYPE MOTYPE=NOTYPE TYPE(1)='REAL*8' & 1,INFOS,3,IVAVEC) SEGSUP NOTYPE IF (IERR.NE.0) GOTO 9990 * ENDIF * IF (ICAS.NE.1.AND.MFR.EQ.5) THEN * * Caracteristiques pour les coques epaisses * NBROBL = 1 NBRFAC = 0 SEGINI NOMID MOEP = NOMID LESOBL(1) = 'EPAI' NVEC = NBROBL + NBRFAC NBTYPE = 1 SEGINI NOTYPE MOTYPE = NOTYPE TYPE(1) = 'REAL*8' & 1,INFOS,3,IVAEP) SEGSUP NOTYPE IF (IERR.NE.0) GOTO 9990 ENDIF * * MASSI COQUE COQEP POUT CIST THER TUYAU LISP * GOTO (10,66,30,66,50,66,66,66,90,66,66,66,66,66,66),MFR IF (MFR.EQ.31.or.MFR.EQ.63) GOTO 10 * 66 CONTINUE MOTERR(1:8)=NOMFR(MFR) GOTO 9990 10 CONTINUE * * Formulations massive et incompressible * IF (ICAS.EQ.4) THEN * * cas du champ de gradient * & IDEF,MINTE,MELE,NPINT,NVEC,KMOT) IF(IERR.NE.0) GO TO 9990 ELSE * * autres cas * & IVAVEC,IVACOM,IVARES,IDEF,MINTE,MELE,NPINT, & NVEC,V1,V2,W2,W3,CENTR1,CENTR2,AXEI1,IER1) IF (IER1.NE.0) GOTO 9990 ENDIF GOTO 510 30 CONTINUE * * Formulation coque (COQ2, COQ3, DKT ...) * IF (IFOMEM.LT.2) THEN GOTO 9990 ENDIF & IVARES,IDEF,MINTE,MELE,NPINT,NVEC,V1,V2,W2,W3, & CENTR1,CENTR2,AXEI1,IER1) IF (IER1.NE.0) GOTO 9990 GOTO 510 50 CONTINUE * * Formulation coque epaisse (COQ6, COQ8 ...) * & IVARES,IVAEP,IDEF,MINTE,MINTE1,MELE,NPINT,NVEC, & V1,V2,W2,W3,CENTR1,CENTR2,AXEI1,ICAS,IER1) IF (IER1.NE.0) GOTO 9990 GOTO 510 90 CONTINUE * * Formulation coque avec cisaillement transverse * (COQ4, DST ...) * IF (IFOMEM.LT.2) THEN GOTO 9990 ENDIF & IVARES,IDEF,MINTE,MELE,NPINT,NVEC,V1,V2,W2,W3, & CENTR1,CENTR2,AXEI1,ICAS,IER1) IF (IER1.NE.0) GOTO 9990 GOTO 510 * * Desactivation des segments de la zone ISOUS * 510 CONTINUE * IF (ISUP.EQ.1) THEN ELSE ENDIF * NOMID=MOCOMP if(lsupre)SEGSUP NOMID NOMID=MOVEC IF (NOMID.NE.0.and.lsupgd) SEGSUP NOMID NOMID = MOEP IF (NOMID.NE.0) SEGSUP NOMID * * Fin de la boucle sur les zones du MCHAML * 500 CONTINUE IF (N1.NE.ISOUSS) then N1=ISOUSS SEGADJ MCHELM ENDIF RETURN * 9990 CONTINUE * * Erreur dans une zone : desactivation puis retour * IF (ISUP.EQ.1) THEN ELSE ENDIF * NOMID=MOCOMP IF (NOMID.NE.0.and.lsupre) SEGSUP NOMID NOMID=MOVEC IF (NOMID.NE.0.and.lsupgd) SEGSUP NOMID NOMID = MOEP IF (NOMID.NE.0) SEGSUP NOMID IF (ISOUS.GT.1) SEGSUP MCHAML * SEGSUP MCHELM END
© Cast3M 2003 - Tous droits réservés.
Mentions légales