jacono
C JACONO SOURCE OF166741 25/02/21 21:17:36 12166 C======================================================================= C ENTREES : C --------- C IPMODL= pointeur sur un MMODEL C INORM = 1 si les vecteurs doivent etre normes 0 sinon C C SORTIES : C -------- C C IPCHE = CHAMELEM contenant les JACOBIENS C ( = normale aux faces des elements dans le cas des coques) C ( = tangente a la fibre neutre dans le cas des poutres) C IRET = 1 si succes 0 sinon C C Passage au nouveau Chamelem PAR S.RAMAHANDRY le 11/09/90 C C 2013-01-02 (BP) : ajout zones cohesives (ZCO2,3 et 4 => coque mince) C + calcul de la tangente pour les poutres C C C===================================================================== IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC CCHAMP -INC SMCHAML -INC SMMODEL -INC SMELEME -INC SMCOORD -INC SMINTE -INC TMPTVAL SEGMENT TRA REAL*8 XEL(3,NBNN) ,SHP(6,NBNN) ,XE(3,NBNN) ENDSEGMENT C SEGMENT TR1 REAL*8 TH(NBN1) ,TXR(3,3,NBN1) ,XJ(3,3) ENDSEGMENT C SEGMENT INFO INTEGER INFELL(JG) ENDSEGMENT PARAMETER(UN=1.D0,XZER=0.D0) DIMENSION BPSS(3,3) DIMENSION XU(3), XV(3), XW(3) IDIMP1 = IDIM+1 NHRM=NIFOUR IRET=1 C C ACTIVATION DU MODELE C MMODEL= IPMODL SEGACT MMODEL NSOUS=KMODEL(/1) C C CREATION DU MCHELM C N1=NSOUS N3=6 IF (INORM .EQ. 1) THEN L1=8 ELSE L1=16 ENDIF SEGINI MCHELM IF (INORM .EQ. 1) THEN TITCHE='NORMALES' ELSE TITCHE='VECTEURS SURFACE' ENDIF IFOCHE=IFOUR IPCHE=MCHELM C____________________________________________________________________ C C DEBUT DE LA BOUCLE SUR LES DIFFERENTES ZONES C____________________________________________________________________ C DO 500 ISOUS=1,NSOUS C C ON RECUPERE L INFORMATION GENERALE C IMODEL=KMODEL(ISOUS) SEGACT IMODEL IPMAIL=IMAMOD IMACHE(ISOUS)=IPMAIL CONCHE(ISOUS)=CONMOD C C TRAITEMENT DU MODELE C MELE=NEFMOD MELEME=IMAMOD NFOR=FORMOD(/2) NMAT=MATMOD(/2) C____________________________________________________________________ C C INFORMATION SUR L'ELEMENT FINI C____________________________________________________________________ C if(infmod(/1).lt.7) then IF (IERR.NE.0) THEN SEGSUP MCHELM IRET=0 RETURN ENDIF INFO=IPINF MELE =INFELL(1) MFR =INFELL(13) MINTE=INFELL(11) MINTE1=INFELL(12) segsup info else MELE =INFELE(1) MFR =INFELE(13) MINTE=INFMOD(7) MINTE1=INFMOD(8) endif C INFCHE(ISOUS,1)=0 INFCHE(ISOUS,2)=0 INFCHE(ISOUS,3)=NHRM INFCHE(ISOUS,4)=MINTE INFCHE(ISOUS,5)=0 INFCHE(ISOUS,6)=5 C C INITIALISATION DE MINTE C SEGACT MINTE NBPGAU=POIGAU(/1) C C ACTIVATION DU MELEME C SEGACT MELEME NBNN =NUM(/1) NBELEM=NUM(/2) C C RECHERCHE DE LA TAILLE DES MELVAL A ALLOUER C IF (MFR.EQ.3.OR.MFR.EQ.5.OR.MFR.EQ.9 .OR. MFR.EQ.77) THEN N1PTEL=NBPGAU N1EL=NBELEM ELSEIF(MFR.EQ.7 .OR. MFR.EQ.13) THEN N1PTEL=NBPGAU N1EL=NBELEM ELSE N1PTEL = 0 N1EL = 0 ENDIF N2PTEL=0 N2EL =0 C C CREATION DU MCHAML DE LA SOUS ZONE C NJAC=IDIM N2 = NJAC SEGINI MCHAML ICHAML(ISOUS)=MCHAML NSR =1 NCOSOR=NJAC SEGINI MPTVAL IVAJAC=MPTVAL C C 2 OU 3 COMPOSANTES C ICOMP=1 IF (IFOUR.EQ.0.OR.IFOUR.EQ.1) THEN NOMCHE(ICOMP)='VR ' ELSE NOMCHE(ICOMP)='VX ' ENDIF TYPCHE(ICOMP)='REAL*8' SEGINI MELVA1 IELVAL(ICOMP)=MELVA1 IVAL(ICOMP)=MELVA1 C ICOMP=2 IF (IFOUR.EQ.0.OR.IFOUR.EQ.1) THEN NOMCHE(ICOMP)='VZ ' ELSE NOMCHE(ICOMP)='VY ' ENDIF TYPCHE(ICOMP)='REAL*8' SEGINI MELVA2 IELVAL(ICOMP)=MELVA2 IVAL(ICOMP)=MELVA2 C MELVA3 = 0 IF (IDIM .EQ. 3) THEN ICOMP=3 NOMCHE(ICOMP)='VZ ' TYPCHE(ICOMP)='REAL*8' SEGINI MELVA3 IELVAL(ICOMP)=MELVA3 IVAL(ICOMP)=MELVA3 ENDIF C SEGINI TRA C C ================ FORMULATION MASSIVE ======================= C IF(MFR.EQ.1.OR.MFR.EQ.33) THEN GOTO 520 C C ================ FORMULATION COQUE MINCE ===================== C C ELSE IF(MFR.EQ.3.OR.MFR.EQ.9 .OR. MFR.EQ.77) THEN IDI2=IDIM-1 DO 3000 IB=1,NBELEM *--------------Calcul de la normale a l'élément IREF1 = IDIMP1*(MELEME.NUM(1, IB) - 1) IREF2 = IDIMP1*(MELEME.NUM(2, IB) - 1) XNORU = 0.D0 DO IC = 1, IDIM r_z = XCOOR(IREF2+IC)-XCOOR(IREF1+IC) XU(IC) = r_z XNORU = XNORU + (r_z * r_z) ENDDO XNORU = SQRT(XNORU) DO IC = 1, IDIM XU(IC) = XU(IC)/XNORU ENDDO IF (IDIM .EQ. 2) THEN XW(1) = -XU(2) XW(2) = XU(1) ELSE IN = 3 33 IREF3 = IDIMP1*(MELEME.NUM(IN, IB) - 1) XNORV = 0.D0 DO IC = 1, IDIM r_z = XCOOR(IREF3+IC)-XCOOR(IREF1+IC) XV(IC) = r_z XNORV = XNORV + (r_z * r_z) ENDDO XNORV = SQRT(XNORV) DO IC = 1, IDIM XV(IC) = XV(IC)/XNORV ENDDO XW(1) = XU(2)*XV(3) - XU(3)*XV(2) XW(2) = XU(3)*XV(1) - XU(1)*XV(3) XW(3) = XU(1)*XV(2) - XU(2)*XV(1) XNORW = 0. DO IC = 1, IDIM XNORW = XNORW + XW(IC)*XW(IC) ENDDO IF (XNORW .LT. 1.E-4) THEN IN = IN + 1 if(IN.le.NBNN) GOTO 33 ENDIF XNORW = SQRT(XNORW) DO IC = 1, IDIM XW(IC) = XW(IC)/XNORW ENDDO ENDIF *--------------Fin du calcul de la normale a l'élément C IF(IDIM.EQ.2)THEN ELSE IF(IDIM.EQ.3) THEN ENDIF MPTVAL=IVAJAC DO 3002 IC=1,NBPGAU IF (INORM .EQ. 1) THEN DJAC = 1.D0 ELSE DO IE=1,NBNN DO ID=1,6 SHP(ID,IE)=SHPTOT(ID,IE,IC) ENDDO ENDDO ENDIF MELVAL = IVAL(1) IBMN=MIN(IB, MELVAL.VELCHE(/2)) IGMN=MIN(IC,MELVAL.VELCHE(/1)) MELVAL.VELCHE(IGMN,IBMN)=DJAC*XW(1) MELVAL = IVAL(2) IBMN=MIN(IB, MELVAL.VELCHE(/2)) IGMN=MIN(IC,MELVAL.VELCHE(/1)) MELVAL.VELCHE(IGMN,IBMN)=DJAC*XW(2) IF (IDIM .EQ. 3) THEN MELVAL = IVAL(3) IBMN=MIN(IB, MELVAL.VELCHE(/2)) IGMN=MIN(IC,MELVAL.VELCHE(/1)) MELVAL.VELCHE(IGMN,IBMN)=DJAC*XW(3) ENDIF 3002 CONTINUE 3000 CONTINUE GOTO 520 C C ================ FORMULATION POUTRE ET TUYAU ==================== C ELSE IF(MFR.EQ.7.OR.MFR.EQ.13) THEN IDI2=IDIM-1 DO 4000 IB=1,NBELEM *-----------Calcul de la tangente a l'élément IREF1 = IDIMP1*(MELEME.NUM(1, IB) - 1) IREF2 = IDIMP1*(MELEME.NUM(2, IB) - 1) XNORU = 0.D0 DO IC = 1, IDIM r_z = XCOOR(IREF2+IC)-XCOOR(IREF1+IC) XU(IC) = r_z XNORU = XNORU + (r_z * r_z) ENDDO XNORU = SQRT(XNORU) DO IC = 1, IDIM XU(IC) = XU(IC)/XNORU ENDDO *-----------Fin du calcul de la tangente a l'élément *-----------Calcul de la tangente a l'élément en chaque point de Gauss c BP : On suppose le jacobien constant dans l'element (idem POUJAC.eso) C => on sort le calcul du jacobien de la boucle sur les points de Gauss. C Cela implique que la POUTre de Bernoulli n'est pas isoparamétrique... IF (INORM .EQ. 1) THEN DJAC = 1.D0 ELSE DJAC = 1.D0/DBLE(NBPGAU) ENDIF MPTVAL=IVAJAC DO 4002 IC=1,NBPGAU MELVAL = IVAL(1) IBMN=MIN(IB, MELVAL.VELCHE(/2)) IGMN=MIN(IC,MELVAL.VELCHE(/1)) MELVAL.VELCHE(IGMN,IBMN)=DJAC*XU(1) MELVAL = IVAL(2) IBMN=MIN(IB, MELVAL.VELCHE(/2)) IGMN=MIN(IC,MELVAL.VELCHE(/1)) MELVAL.VELCHE(IGMN,IBMN)=DJAC*XU(2) IF (IDIM .EQ. 3) THEN MELVAL = IVAL(3) IBMN=MIN(IB, MELVAL.VELCHE(/2)) IGMN=MIN(IC,MELVAL.VELCHE(/1)) MELVAL.VELCHE(IGMN,IBMN)=DJAC*XU(3) ENDIF 4002 CONTINUE 4000 CONTINUE GOTO 520 C C ================ FORMULATION COQUE EPAISSE ==================== C ELSE IF(MFR.EQ.5) THEN SEGACT MINTE1 NBPGA1=MINTE1.POIGAU(/1) NBN1 =MINTE1.SHPTOT(/2) SEGINI TR1 C C UNE PETITE HORREUR ON CONSIDERE LES EPAISSEURS CONSTANTES C DO 5010 IC=1,NBNN TH(IC)=UN 5010 CONTINUE DO 5000 IB=1,NBELEM *--------------Calcul de la normale a l'élément IREF1 = IDIMP1*(MELEME.NUM(1, IB) - 1) * IREF2 = IDIMP1*(MELEME.NUM(2, IB) - 1) * bp : les EF de coque epaisse etant quadratiques (coq6 et coq8), on * prend les noeuds "coins" pour eviter pb avec les noeuds 1,2,3 si courbures IREF2 = IDIMP1*(MELEME.NUM(3, IB) - 1) XNORU = 0. DO IC = 1, IDIM r_z = XCOOR(IREF2+IC)-XCOOR(IREF1+IC) XU(IC) = r_z XNORU = XNORU + (r_z * r_z) ENDDO XNORU = SQRT(XNORU) DO IC = 1, IDIM XU(IC) = XU(IC)/XNORU ENDDO IF (IDIM .EQ. 2) THEN XW(1) = -XU(2) XW(2) = XU(1) ELSE * IN = 3 IN = 5 13 IREF3 = IDIMP1*(MELEME.NUM(IN, IB) - 1) XNORV = 0.D0 DO IC = 1, IDIM r_z = XCOOR(IREF3 + IC) - XCOOR(IREF1 + IC) XV(IC) = r_z XNORV = XNORV + (r_z * r_z) ENDDO XNORV = SQRT(XNORV) DO IC = 1, IDIM XV(IC) = XV(IC)/XNORV ENDDO XW(1) = XU(2)*XV(3) - XU(3)*XV(2) XW(2) = XU(3)*XV(1) - XU(1)*XV(3) XW(3) = XU(1)*XV(2) - XU(2)*XV(1) XNORW = 0. DO IC = 1, IDIM XNORW = XNORW + XW(IC)*XW(IC) ENDDO XNORW = SQRT(XNORW) IF (XNORW .LT. 1.E-4) THEN if(IN.LT.NBNN) then IN = IN + 1 GOTO 13 else write(6,*) 'Difficultes pour etablir la normale de' write(6,*) 'l element',IB write(6,*) 'Verifiez votre maillage' GOTO 9990 endif ENDIF DO IC = 1, IDIM XW(IC) = XW(IC)/XNORW ENDDO ENDIF *--------------Fin du calcul de la normale a l'élément IF (INORM .EQ. 0) THEN C ENDIF C MPTVAL=IVAJAC DO 5002 IC=1,NBPGAU IF (INORM .EQ. 1) THEN DJAC = 1.D0 ELSE E=DZEGAU(IC) ENDIF MELVAL = IVAL(1) IBMN=MIN(IB, MELVAL.VELCHE(/2)) IGMN=MIN(IC, MELVAL.VELCHE(/1)) MELVAL.VELCHE(IGMN,IBMN)=DJAC*XW(1) MELVAL = IVAL(2) IBMN=MIN(IB, MELVAL.VELCHE(/2)) IGMN=MIN(IC, MELVAL.VELCHE(/1)) MELVAL.VELCHE(IGMN,IBMN)=DJAC*XW(2) IF (IDIM .EQ. 3) THEN MELVAL = IVAL(3) IBMN=MIN(IB, MELVAL.VELCHE(/2)) IGMN=MIN(IC, MELVAL.VELCHE(/1)) MELVAL.VELCHE(IGMN,IBMN)=DJAC*XW(3) ENDIF 5002 CONTINUE 5000 CONTINUE SEGSUP TR1 GOTO 520 ENDIF C--------------------------------------------------------------------- C DESACTIVATION DES SEGMENTS PROPRES A LA ZONE GEOMETRIQUE ISOUS C--------------------------------------------------------------------- 520 CONTINUE MPTVAL=IVAJAC SEGSUP MPTVAL SEGSUP TRA 500 CONTINUE RETURN C C------------------------------------------------------------------- C ERREUR DANS UNE ZONE , DESACTIVATION ET RETOUR C------------------------------------------------------------------- 9990 CONTINUE IRET = 0 MPTVAL=IVAJAC SEGSUP MPTVAL * RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales