C HOOK2D SOURCE AM 12/03/15 21:24:56 7321 SUBROUTINE HOOK2D(IPMODE,CMATE,INAT,MFR,IVAMAT,NMATT,IVACAR, 1 NCARR,NPINT,IVARI,NVART,IVAHOO,KCAS,NBPGAU, 2 LHOOK,LHOO2,LW,LASURF,IPORE,IRET) C_______________________________________________________________________ C C Calcul de la matrice de HOOKE C C Entr{es: C ________ C C IPMODE Pointeur sur un segment imodel C CMATE Type du mat{riau (isotrope, orthotrope .....) C INAT Numero de plasticite C MFR Numero de formulation C IVAMAT Pointeur sur un tableau de MELVAL de MATERIAU C NMATT Nombre de composantes de materiau C IVACAR Pointeur sur un tableau de MELVAL de CARACTERISTIQUES C NCARR Nombre de composantes de caracteristiques C NPINT Nombre de points d integration C IVARI Pointeur sur un tableau de MELVAL de VARIABLES INTERNES C NVART Nombre de composantes de variables internes C IVAHOO Pointeur sur le MELVAL de HOOKE C NBPGAU Nombre de points d integration C LHOOK Taille de la matrice de HOOKE C LHOO2 Taille au carre de la matrice de HOOKE C LW Taille du tableau de travail WORK C LASURF 1 si on veut la matrice en surface de ref, 0 sinon C IPORE dimension pour milieux poreux C C Sorties: C ________ C C IRET=1 OU 0 suivant succes ou pas C C C CODE L EBERSOLT MAI 84 C C Passage aux nouveaux CHAMELEMs par I.Monnier le 18.06.90 C ADDITION DES MATERIAUX ORTHOTROPE ET ANISOTROPE C PAR P.DOWLATYARI DEC. 90 C_______________________________________________________________________ C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC SMCHAML -INC SMLREEL -INC CCHAMP -INC CCOPTIO -INC SMMODEL -INC SMELEME -INC SMCOORD -INC SMINTE * SEGMENT MPTVAL INTEGER IPOS(NS) ,NSOF(NS) INTEGER IVAL(NCOSOU) CHARACTER*16 TYVAL(NCOSOU) ENDSEGMENT * SEGMENT WRK2 REAL*8 XE(3,NBNN),TXR(IDIM,IDIM) REAL*8 XLOC(IDIM,IDIM),XGLOB(IDIM,IDIM) REAL*8 D1HOOK(LHOOK,LHOOK),ROTHOO(LHOOK,LHOOK) ENDSEGMENT * SEGMENT WRK4 REAL*8 SHPWRK(6,NBNN), BGENE(NSTRS,LRE) REAL*8 BPSS(3,3), XEL(3,NBNN) ENDSEGMENT * SEGMENT TRAV REAL*8 VALCAR(LW),VALMAT(NMATT),VAR(NVART) REAL*8 DDHOOK(LHOOK,LHOOK),DDHOMU(LHOOK,LHOOK) REAL*8 COBMA(LHOOK) ENDSEGMENT C DIMENSION CRIGI(12),CMASS(12),S(20) CHARACTER*8 CMATE PARAMETER(XZER=0.D0,X774=.774596669241483D0) C IRET=1 IGAU=0 IB =0 IMODEL=IPMODE MELE=NEFMOD C C RECUPERATION DES TAILLES DE TABLEAUX C MELVAL=IVAHOO NBPTEL=IELCHE(/1) NEL =IELCHE(/2) MPTVAL=IVAMAT NBGMAT = 0 NELMAT = 0 DO 1000 IM=1,NMATT IF(IVAL(IM).NE.0)THEN MELVAL=IVAL(IM) IF(CMATE.EQ.'SECTION')THEN NBGMAT=MAX(NBGMAT,IELCHE(/1)) NELMAT=MAX(NELMAT,IELCHE(/2)) ELSE NBGMAT=MAX(NBGMAT,VELCHE(/1)) NELMAT=MAX(NELMAT,VELCHE(/2)) ENDIF ENDIF 1000 CONTINUE MPTVAL=IVACAR DO 1001 IO=1,NCARR IF(IVAL(IO).NE.0)THEN MELVAL=IVAL(IO) IF (CMATE.EQ.'SECTION') THEN NBGMAT=MAX(NBGMAT,IELCHE(/1)) NELMAT=MAX(NELMAT ,IELCHE(/2)) ELSE NBGMAT=MAX(NBGMAT,VELCHE(/1)) NELMAT=MAX(NELMAT ,VELCHE(/2)) ENDIF ENDIF 1001 CONTINUE IF (IVARI.NE.0) THEN MPTVAL=IVARI DO 1002 IO=1,NVART IF(IVAL(IO).NE.0)THEN MELVAL=IVAL(IO) IF (CMATE.EQ.'SECTION') THEN NBGMAT=MAX(NBGMAT,IELCHE(/1)) NELMAT=MAX(NELMAT ,IELCHE(/2)) ELSE NBGMAT=MAX(NBGMAT,VELCHE(/1)) NELMAT=MAX(NELMAT ,VELCHE(/2)) ENDIF ENDIF 1002 CONTINUE ENDIF C C INITIALISATION DES TABLEAUX DE TRAVAIL C IF(MFR.EQ.15.AND.NBPGAU.EQ.1) THEN DO 10 I=1,NBPGAU S(I)= XZER 10 CONTINUE ELSE IF(MFR.EQ.15.AND.NBPGAU.EQ.3) THEN DO 11 I=1,NBPGAU S(1)=-X774 S(2)= XZER S(3)= X774 11 CONTINUE ENDIF * NMAT1=NMATT * cette sequence est presente car la troisieme composante * (eventuellement) obligatoire est la septieme composante du materiau IF(INAT.EQ.26) NMATT=NMATT+4 SEGINI TRAV * IF ((CMATE.EQ.'ORTHOTRO'.OR.CMATE.EQ.'ANISOTRO'.OR. 1 CMATE.EQ.'UNIDIREC').OR.(MFR.EQ.55)) THEN C RENSEIGNEMENTS SUR LE MAILLAGE MELEME=IMAMOD SEGACT MELEME NBNN=NUM(/1) SEGINI WRK2 * IF(MFR.EQ.55)THEN LRE=NBNN*IDIM NSTRS=LHOOK SEGINI,WRK4 ENDIF * ENDIF C C C IF (((CMATE.EQ.'ORTHOTRO'.OR.CMATE.EQ.'ANISOTRO'.OR. 1 CMATE.EQ.'UNIDIREC').AND.(MFR.EQ.1.OR.MFR.EQ.33)) 1 .OR.(MFR.EQ.55)) THEN C C RENSEIGNEMENTS SUR LE MAILLAGE C NBNO=NBNN IF(MFR.EQ.33) NBNO=IPORE * * RECUPERATION DES FONCTIONS DE FORME ET LEURS DERIVEES AU CENTRE DE * L'ELEMENT POUR LE CALCUL DES AXES LOCAUX IELE=NUMGEO(MELE) CALL RESHPT(1,NBNO,IELE,MELE,NPINT,IPT1,IRT1) MINTE2=IPT1 SEGACT MINTE2 ENDIF C C Boucle sur les elements C DO 1100 IB=1,NEL C IF ((CMATE.EQ.'ORTHOTRO'.OR.CMATE.EQ.'ANISOTRO'.OR. 1 CMATE.EQ.'UNIDIREC').AND.(MFR.EQ.1.OR.MFR.EQ.33)) THEN C C ON CHERCHE LES COORDONNEES DES NOEUDS DE L ELEMENT IB C CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE) C C CALCUL DES AXES LOCAUX C NBSH=MINTE2.SHPTOT(/2) CALL RLOCAL(XE,MINTE2.SHPTOT,NBSH,NBNN,TXR) if (nbsh.eq.-1) then call erreur(525) return endif ENDIF C C Boucle sur les points C DO 1100 IGAU=1,NBPTEL C MPTVAL=IVAMAT DO 1005 IM=1,NMAT1 IF (IVAL(IM).NE.0) THEN MELVAL=IVAL(IM) IBMN=MIN(IB ,VELCHE(/2)) IGMN=MIN(IGAU,VELCHE(/1)) VALMAT(IM)=VELCHE(IGMN,IBMN) ELSE VALMAT(IM)=0.D0 ENDIF 1005 CONTINUE * * cette sequence est presente car la troisieme composante * (eventuellement) obligatoire est la septieme composante du materiau IF(INAT.EQ.26) THEN VALMAT(7)=VALMAT(3) DO 1006 ICOMP=3,6 VALMAT(ICOMP)=0.D0 1006 CONTINUE ENDIF C IF(INAT.EQ.26.OR.INAT.EQ.29.OR.INAT.EQ.30.OR. . INAT.EQ.62.OR.INAT.EQ.64.OR.INAT.EQ.65.OR.INAT.EQ.118) THEN MPTVAL=IVARI DO 1007 IM=1,NVART IF (IVAL(IM).NE.0) THEN MELVAL=IVAL(IM) IBMN=MIN(IB ,VELCHE(/2)) IGMN=MIN(IGAU,VELCHE(/1)) VAR(IM)=VELCHE(IGMN,IBMN) ELSE VAR(IM)=0.D0 ENDIF 1007 CONTINUE ENDIF C IF(MFR.EQ.61)THEN DO ICOMP=1,NCARR MPTVAL=IVACAR MELVAL=IVAL(ICOMP) IF (MELVAL.NE.0) THEN IBMN=MIN(IB ,VELCHE(/2)) IGMN=MIN(IGAU,VELCHE(/1)) VALCAR(ICOMP)=VELCHE(IGMN,IBMN) ELSE VALCAR(ICOMP)=0.D0 ENDIF ENDDO ENDIF C IF(MFR.EQ.7.OR.MFR.EQ.13.OR.MFR.EQ.15. 1 OR.MFR.EQ.17) THEN C C ON CHERCHE LES CARACTERISTIQUES DE L ELEMENT IB C IF(CMATE.EQ.'SECTION') THEN C MPTVAL=IVAMAT MELVAL=IVAL(1) IBMN=MIN(IB ,IELCHE(/2)) IGMN=MIN(IGAU,IELCHE(/1)) IPMODL=IELCHE(IGMN,IBMN) MELVAL=IVAL(2) IBMN=MIN(IB ,IELCHE(/2)) IGMN=MIN(IGAU,IELCHE(/1)) IPCAR=IELCHE(IGMN,IBMN) CALL FRIGIE(IPMODL,IPCAR,CRIGI,CMASS) C ELSEIF (MFR.EQ.15) THEN C IE=1 DO 7030 IC=1,3,2 MPTVAL=IVACAR DO 7030 ICOMP=1,NCARR MELVAL=IVAL(ICOMP) IF (MELVAL.NE.0) THEN IGMN=MIN(IC,VELCHE(/1)) IBMN=MIN(IB,VELCHE(/2)) VALCAR(IE)=VELCHE(IGMN,IBMN) ELSE VALCAR(IE)=0.D0 ENDIF IE=IE+1 7030 CONTINUE C ELSE C DO 1010 ICOMP=1,NCARR MPTVAL=IVACAR MELVAL=IVAL(ICOMP) IF (MELVAL.NE.0) THEN IBMN=MIN(IB ,VELCHE(/2)) IGMN=MIN(IGAU,VELCHE(/1)) VALCAR(ICOMP)=VELCHE(IGMN,IBMN) ELSE VALCAR(ICOMP)=0.D0 ENDIF 1010 CONTINUE ENDIF ENDIF C IF(MFR.EQ.27.OR.MFR.EQ.49) THEN C C ON CHERCHE LA SECTION DE L'ELEMENT IB C MPTVAL=IVACAR MELVAL=IVAL(1) IF (MELVAL.NE.0) THEN IBMN=MIN(IB ,VELCHE(/2)) IGMN=MIN(IGAU,VELCHE(/1)) SECT=VELCHE(IGMN,IBMN) ELSE SECT=0.D0 ENDIF ENDIF C C ON CHERCHE L'EPAISSEUR DU JOINT GENERALISE IB C IF(MFR.EQ.55) THEN MPTVAL=IVACAR MELVAL=IVAL(1) IF (MELVAL.NE.0) THEN IBMN=MIN(IB ,VELCHE(/2)) IGMN=MIN(IGAU,VELCHE(/1)) EPAIST=VELCHE(IGMN,IBMN) ELSE EPAIST=0.D0 ENDIF C IF(EPAIST.EQ.0.D0) THEN CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE) IF(MELE.EQ.170)THEN CALL JO2LOC(XE,MINTE2.SHPTOT,NBNN,XEL,BPSS,NOQUAL) CALL BJO2GN(IGAU,MFR,IFOUR,NIFOUR,XE,XEL,BPSS, . MINTE2.SHPTOT,SHPWRK,EPAIST,BGENE,DJAC,XDPGE,YDPGE,IERT) ELSEIF(MELE.EQ.171)THEN CALL JT3LOC(XE,MINTE2.SHPTOT,NBNN,XEL,BPSS,NOQUAL) CALL BJT3G(IGAU,MFR,IFOUR,NIFOUR,XE,XEL,BPSS, . MINTE2.SHPTOT,SHPWRK,EPAIST,BGENE,DJAC,IERT) ELSEIF(MELE.EQ.172)THEN CALL JO4LOC(XE,MINTE2.SHPTOT,NBNN,XEL,BPSS,NOQUAL) CALL BJO4G(IGAU,XE,XEL,BPSS,MINTE2.SHPTOT,SHPWRK,EPAIST, . BGENE,DJAC,IERT) ENDIF ENDIF ENDIF C C Prise en compte de l'epaisseur et de l'excentrement C dans le cas des coques minces avec ou sans cisaillement C transverse C IF ((CMATE.EQ.'ISOTROPE'.OR.CMATE.EQ.'ORTHOTRO'. 1 OR.CMATE.EQ.'UNIDIREC').AND. 2 (MFR.EQ.3.OR.MFR.EQ.9)) THEN MPTVAL=IVACAR MELVAL=IVAL(1) IF (MELVAL.NE.0) THEN IBMN=MIN(IB ,VELCHE(/2)) IGMN=MIN(IGAU,VELCHE(/1)) EPAIST=VELCHE(IGMN,IBMN) ELSE CALL ERREUR(527) IRET=0 GOTO 9000 ENDIF C IF(LASURF.EQ.0) THEN EXCEN = 0.D0 ELSE MELVAL=IVAL(2) IF (MELVAL.NE.0) THEN IBMN=MIN(IB ,VELCHE(/2)) IGMN=MIN(IGAU,VELCHE(/1)) EXCEN=VELCHE(IGMN,IBMN) ELSE EXCEN=0.D0 ENDIF ENDIF ENDIF C_______________________________________________________________________ C C TRAITEMENT SUIVANT TYPE DE MATERIAU C_______________________________________________________________________ C IF (CMATE.EQ.'ISOTROPE'.OR.CMATE.EQ.'ZONE_COH') THEN CALL HOOKIS(VALMAT,VALCAR,VAR,MFR,IB,IGAU,EXCEN,EPAIST, + INAT,MELE,NPINT,IFOUR,KCAS,NBGMAT,NELMAT, + S,SECT,LHOOK,DDHOMU,DDHOOK, + COBMA,XMOB,IRET) C ELSE IF (CMATE.EQ.'ORTHOTRO') THEN CALL HOOKOR(VALMAT,IB,IGAU,MFR,EXCEN,EPAIST, + MELE,NPINT,IFOUR,KCAS,NBGMAT,NELMAT,SECT,LHOOK, + TXR,XLOC,XGLOB,D1HOOK,ROTHOO,DDHOMU,DDHOOK, + COBMA,XMOB,IRET) C ELSE IF (CMATE.EQ.'ANISOTRO') THEN CALL HOOKAN(VALMAT,IB,IGAU,MFR,IFOUR,KCAS,NBGMAT,NELMAT, + SECT,LHOOK,TXR,XLOC,XGLOB,D1HOOK,ROTHOO,DDHOOK, + MELE,COBMA,XMOB,IRET) C ELSE IF (CMATE.EQ.'UNIDIREC') THEN CALL HOOKUN(VALMAT,IB,IGAU,MFR,EXCEN,EPAIST, + MELE,NPINT,IFOUR,KCAS,NBGMAT,NELMAT,SECT,LHOOK, + TXR,XLOC,XGLOB,D1HOOK,ROTHOO,DDHOMU,DDHOOK, + COBMA,XMOB,IRET) C ELSE IF (CMATE.EQ.'HOMOGENE') THEN CALL HOOKHO(VALMAT,IB,IGAU,MFR,NBGMAT,NELMAT,SECT, + LHOOK,DDHOOK,IRET) C ELSE IF (CMATE.EQ.'SECTION') THEN CALL HOOKSE(VALMAT,IB,IGAU,MFR,CRIGI,IFOUR, + NBGMAT,NELMAT,SECT,LHOOK,DDHOOK,IRET) C ENDIF C IF (IRET.EQ.0) THEN IF (MFR.EQ.3.AND.NPINT.NE.0) THEN CALL ERREUR(251) ELSE MOTERR(1:8)=NOMFR(MFR/2+1) CALL ERREUR(193) ENDIF GOTO 1200 ENDIF C C C REMPLISSAGE DU SEGMENT IVAHOO C JG=LHOO2 SEGINI MLREEL MELVAL=IVAHOO IELCHE(IGAU,IB)=MLREEL KO=0 DO 1015 IO=1,LHOOK DO 1015 JO=1,LHOOK KO=KO+1 PROG(KO)=DDHOOK(IO,JO) 1015 CONTINUE ** SEGDES MLREEL 1100 CONTINUE C 1200 CONTINUE IF ((CMATE.EQ.'ORTHOTRO'.OR.CMATE.EQ.'ANISOTRO'.OR. 1 CMATE.EQ.'UNIDIREC').AND.(MFR.EQ.1.OR.MFR.EQ.33)) THEN ** SEGDES MINTE2 ENDIF * 9000 CONTINUE IF ((CMATE.EQ.'ORTHOTRO'.OR.CMATE.EQ.'ANISOTRO'.OR. 1 CMATE.EQ.'UNIDIREC')) THEN ** SEGDES MELEME SEGSUP WRK2 ENDIF IF (MFR.EQ.55) SEGSUP WRK4 SEGSUP TRAV RETURN END