hhorig
C HHORIG SOURCE OF166741 26/02/23 21:15:05 12480 *----------------------------------------------------------------------* * CALCUL DE LA RIGIDITE POUR LA FORMULATION 'HHO' * *----------------------------------------------------------------------* * ENTREES : * * --------- * * * * SORTIES : * * --------- * *----------------------------------------------------------------------* SUBROUTINE HHORIG (modHHO, IPRIGI,ISOU, IPDSCR, & MATE,IVAMAT,NVMAT, IVACAR,NVCAR, iret) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC CCREEL -INC CCHHOPA -INC CCHHOPR -INC SMCOORD -INC SMCHAML -INC SMELEME c!!-INC SMINTE -INC SMLENTI -INC SMLREEL POINTEUR mlrmsh.mlreel, mlrmbh.mlreel -INC SMMODEL -INC SMRIGID -INC TMPTVAL SEGMENT MWKMAT REAL*8 VALMAT(NTMAT), HOELAS(lhook,lhook) c** REAL*8 XLOC(3,3),XGLOB(3,3),TXR(IDIM,IDIM) ENDSEGMENT LOGICAL LDPGE iret = 0 IPMATR = 0 imodel = modHHO c* segact,imodel <- actif en entree/sortie C- Premieres verifications : CALL HHONOB(modHHO, nobHHO, iret) IF (nobHHO.LE.0) THEN write(ioimp,*) 'HHORIG: data not consistent !' iret = 5 return END IF C- Recuperation des donnees du modele en entree meleme = imodel.IMAMOD NBELEM = meleme.NUM(/2) c* MELE = imodel.NEFMOD MFR = imodel.infele(13) IF (LDPGE) THEN write(ioimp,*) 'HHORIG: PLAN GENE not implemented !' iret = 21 RETURN END IF C---- !! mlenti = imodel.IVAMOD(nobHHO+1) c* segact,mlenti c* n_o_face = mlenti.lect(2) c* n_d_face = mlenti.lect(3) c* n_o_cell = mlenti.lect(4) c* n_d_cell = mlenti.lect(5) nb_faces = mlenti.lect(7) NBPGAU = mlenti.lect(8) LRE = mlenti.lect(11) c-dbg write(ioimp,*) 'HHORIG:',ISOU,':',nb_faces,LRE,NBPGAU write(ioimp,*) '(WARNING)HHORIG: Bizarre nb_faces' END IF IF (NBPGAU .NE. imodel.INFELE(6)) then write(ioimp,*) '(WARNING)HHORIG: Bizarre nb.p.gau' END IF IF (LRE .NE. imodel.INFELE(9)) then write(ioimp,*) '(WARNING)HHORIG: Bizarre LRE' END IF C- Verification des proprietes materielles : Champ CONSTANT par ELEMENT ! mptval = IVAMAT NTMAT = mptval.IVAL(/1) NUMAT = NTMAT - 4 lhook = 9 C- Tableau de stockage des proprietes materielles MWKMAT = 0 SEGINI,MWKMAT IWKMAT = MWKMAT isz = 0 iunif = 0 DO is = 1, NTMAT IF (is.LE.(NVMAT-4) .OR. is.GT.NVMAT) THEN melval = mptval.IVAL(is) IGMN = melval.VELCHE(/1) IEMN = melval.VELCHE(/2) IF (IGMN.NE.1) isz = isz + 1 IF (IGMN.EQ.1 .AND. IEMN.EQ.1) iunif = iunif + 1 VALMAT(is) = melval.VELCHE(1,1) END IF END DO IF (isz.NE.0) THEN write(ioimp,*) 'HHORIG: Material properties must be constant ', & 'by element (for the moment) !' iret = 21 RETURN END IF * Le champ de proprietes est completement uniforme : IF (iunif.NE.NUMAT) iunif = 0 C- Materiau isotrope et proprietes uniformes : -> calcul de HOELAS IF (MATE.EQ.1 .AND. iunif.NE.0) THEN r_z = HOELAS(4,4) * 2.D0 DO i = 4, lhook HOELAS(i,i) = r_z END DO END IF C - Materiaux orthotrope et anisotrope IF (MATE.EQ.2.OR.MATE.EQ.3) THEN C** AFAIRE !!! END IF C- Les donnees liees a la formulation HHO : IVCSTA = IVAL(NVMAT-3) melval = IVCSTA IGCS = melval.VELCHE(/1) IECS = melval.VELCHE(/2) c-dbg write(ioimp,*) 'IVCSTA',melval,igcs,iecs,tyval(nvmat-3) IF (IGCS.NE.1) THEN write(ioimp,*) 'HHORIG : Stabilization coefficient must be ', & 'constant by element' iret = 21 RETURN END IF IVMSTA = IVAL(NVMAT) melval = IVMSTA IGMS = melval.IELCHE(/1) IEMS = melval.IELCHE(/2) c-dbg write(ioimp,*) 'IVMSTA',melval,igms,iems,tyval(nvmat) IF (IGMS.NE.1) THEN write(ioimp,*) 'HHORIG : Stabilization matrix must be ', & 'constant by element' iret = 21 RETURN END IF mlrmsh = melval.IELCHE(1,1) c* segact,mlrmsh c* write(ioimp,*) 'HHORIG MSTAB SIZE:',mlrmsh.prog(/1), LRE,LRE*LRE, c* & mlenti.lect(16) write(ioimp,*) 'HHORIG : Stabilization matrix size incorrect' iret = 21 RETURN END IF IVPIHO = IVAL(NVMAT-2) melval = IVPIHO IGPI = melval.VELCHE(/1) IEPI = melval.VELCHE(/2) c-dbg write(ioimp,*) 'IVPIHO',melval,igpi,iepi,tyval(nvmat-2) IVMBHO = IVAL(NVMAT-1) melval = IVMBHO IGMB = melval.IELCHE(/1) IEMB = melval.IELCHE(/2) c-dbg write(ioimp,*) 'IVMBHO',melval,igmb,iemb,tyval(nvmat-1) mlrmbh = melval.IELCHE(1,1) c* segact,mlrmbh c* write(ioimp,*) 'HHORIG MSTAB SIZE:',mlrmsh.prog(/1), LRE,LRE*LRE, c* & mlenti.lect(16) write(ioimp,*) 'HHORIG : BHHO matrix size incorrect' iret = 21 RETURN END IF C Le maillage support pour la rigidite est constitue du point support C de la cellule et des points supports de chaque face de la cellule C A FAIRE : ajouter le point support des DPGE ! IF (LDPGE) NBNN = NBNN + 1 NBREF = 0 NBSOUS = 0 SEGINI,ipt1 ipt1.ITYPEL = 28 IF (LDPGE) THEN DO i = 1, NBELEM ipt1.NUM(NBNN,i) = IIPDPG END DO END IF mlent1 = imodel.IVAMOD(nobHHO+4) c* segact,mlent1 nbel1 = mlent1.lect(/1) / 2 if (nbel1.ne.NBELEM) write(ioimp,*) 'Bizarre hhorig nbel1' ipt2 = MPCHHO SEGACT,ipt2 DO i = 1, nbel1 je = mlent1.lect(2*i-1) ip = mlent1.lect(2*i) if (ip.le.0) write(ioimp,*) 'HHORIG: Bizarre...',i,je,ip jp = ip + NBCHHO(je-1) ipt1.num(1,i) = ipt2.num(1,jp) END DO mlent1 = imodel.IVAMOD(nobHHO+3) c* segact,mlent1 nbfac1 = mlent1.lect(/1) / 2 c-dbg write(ioimp,*) 'HHORIG:',nbelem,nbno,nbfac1,nbnn ipt2 = MPFHHO SEGACT,ipt2 DO jg1 = 1, nbfac1 ie1 = i_z + 1 je = mlent1.lect(2*jg1-1) ip = ABS(mlent1.lect(2*jg1)) if (ip.eq.0) write(ioimp,*) 'HHORIG: Bizarre...',i,je,ip jp = ip + NBFHHO(je-1) ipt1.num(ip1,ie1) = ipt2.num(1,jp) c-dbg write(ioimp,*) 'LO',jg1,ie1,ip1,'--',jp,je c-dbg write(ioimp,*) ' ',ipt2.num(1,jp) END DO c* SEGDES,ipt1 C INITIALISATION DU SEGMENT XMATRI NLIGRP = LRE NLIGRD = LRE NELRIG = NBELEM SEGINI,XMATRI XMATRI.SYMRE = 0 C------------------------- C Boucle sur les cellules du modele C------------------------- DO IEL = 1,NBELEM C- Recuperation des proprietes constantes par element : IF (iunif.EQ.0) THEN DO is = 1, NVMAT IF (is.LE.(NVMAT-4) .OR. is.GT.NVMAT) THEN melval = mptval.IVAL(is) VALMAT(is) = melval.VELCHE(1,IEL) END IF END DO END IF C- Materiau isotrope IF (MATE.EQ.1 .AND. iunif.EQ.0) THEN r_z = HOELAS(4,4) * 2.D0 DO i = 4, lhook HOELAS(i,i) = r_z END DO ENDIF C - Calcul des axes locaux dans les cas orthotrope et anisotrope IF (MATE.EQ.2.OR.MATE.EQ.3) THEN ENDIF C- Initialisation de la matrice de rigidite avec la matrice de stabilisation melval = IVCSTA CSTAB = melval.VELCHE(1,MIN(IEL,IECS)) melval = IVMSTA mlrmsh = melval.IELCHE(1,MIN(IEL,IEMS)) c* segact,mlrmsh c* !! matrice SHHO stockee colonne par colonne : LRE*LRE (symetrique ?) DO j = 1, LRE jc = LRE * (j-1) DO i = 1, LRE END DO END DO c* segdes,mlrmsh JEPI = MIN(IEL,IEPI) JEMB = MIN(IEL,IEMB) C-- -- -- -- -- -- -- -- -- C - Boucle sur les points de Gauss C-- -- -- -- -- -- -- -- -- DO IGAU = 1, NBPGAU C-AFAIRE C -- Recuperation des proprietes materielles (IGAU) C-AFAIRE DO is = 1, NVMAT C-AFAIRE IF (is.LE.(NVMAT-4) .OR. is.GT.NVMAT) THEN C-AFAIRE melval = mptval.IVAL(is) C-AFAIRE JEMN = MIN(IEL ,melval.VELCHE(/2)) C-AFAIRE JGMN = MIN(IGAU,melval.VELCHE(/1)) C-AFAIRE VALMAT(is) = melval.VELCHE(JGMN,JEMN) C-AFAIRE END IF C-AFAIRE END DO C-AFAIREC- Materiau isotrope C-AFAIRE IF (MATE.EQ.1) THEN C-AFAIRE CALL DOHMAS(VALMAT,'ISOTROPE',IFOUR,lhook,1,HOELAS,iretc) C-AFAIRE r_z = HOELAS(4,4) * 2.D0 C-AFAIRE DO i = 4, lhook C-AFAIRE HOELAS(i,i) = r_z C-AFAIRE END DO C-AFAIRE END IF melval = IVPIHO JGPI = MIN(IGAU,IGPI) poig = melval.VELCHE(JGPI,JEPI) melval = IVMBHO JGMB = MIN(IGAU,IGMB) mlrmbh = melval.IELCHE(JGMB,JEMB) c* segact,mlrmbh c* !! matrice BHHO stockee colonne par colonne : lhook*LRE C-- -- -- -- -- -- -- -- -- END DO C-- -- -- -- -- -- -- -- -- C------------------------- END DO C------------------------- SEGDES,xMATRI IPMATR = xMATRI mrigid = IPRIGI c* segact,mrigid*mod mrigid.IRIGEL(1,ISOU) = ipt1 mrigid.IRIGEL(2,ISOU) = 0 mrigid.IRIGEL(3,ISOU) = IPDSCR mrigid.IRIGEL(4,ISOU) = IPMATR mrigid.IRIGEL(5,ISOU) = NIFOUR mrigid.IRIGEL(6,ISOU) = 0 mrigid.IRIGEL(7,ISOU) = 0 mrigid.COERIG(ISOU) = 1.D0 IF (MATE.EQ.2.OR.MATE.EQ.3) THEN ENDIF SEGSUP,MWKMAT * RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales