bsigmp
C BSIGMP SOURCE OF166741 24/10/21 21:15:03 12042 1 IPCHP4,IRET,noer) C_______________________________________________________________________ C C Entrees: C ________ C C IPMOD0 Pointeur sur un MMODEL C IPCHE1 Pointeur sur un MCHAML de contraintes C IPCHE2 Pointeur sur un MCHAML de caracteristiques (FACULTATIF) C IPCHE3 POINTEUR SUR UN MCHAML DE HOOKE (FACULTATIF) C IMAT Flag de HOOKE (2 si oui, 1 sinon) C IPCHP4 = 0 ou POINTEUR sur un CHPOINT de deplacements (FACULTATIF) C C SORTIES: C ________ C C IPCHP4 Pointeur sur un CHPOINT de forces aux noeuds C IRET = 1 OU 0 suivant succes ou pas (Message d'erreur C imprime dans ce cas) C C Passage aux nouveaux CHAMELEMs par I.Monnier le 13.06.90 C_______________________________________________________________________ C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC CCHAMP C==DEB= FORMULATION HHO == Includes specifiques ======================== -INC CCHHOPA -INC CCHHOPR C==FIN= FORMULATION HHO ================================================ -INC SMMODEL -INC SMCHAML -INC SMCHPOI -INC SMELEME -INC SMINTE -INC SMLENTI POINTEUR MLPHAS.MLENTI -INC SMCOORD SEGMENT NOTYPE CHARACTER*16 TYPE(NBTYPE) ENDSEGMENT SEGMENT MPTVAL INTEGER IPOS(NS) ,NSOF(NS) INTEGER IVAL(NCOSOU) CHARACTER*16 TYVAL(NCOSOU) ENDSEGMENT C==DEB= FORMULATION HHO == Pour FUSION champs HHO ====================== C SID : SEGMENT A REMPLIR POUR FUNOBJ (voir le sp pour son contenu) SEGMENT SID INTEGER IPOINT(NBFUS) LOGICAL BVAL (NBFUS) REAL*8 XVAL (NBFUS) CHARACTER*(IC1) CVAL (NBFUS) CHARACTER*8 CTYPE1,CREATE ENDSEGMENT C==FIN= FORMULATION HHO ================================================ C==DEB= FORMULATION HHO == Chpoint de forces a chaque zone HHO ========= POINTEUR mlehho.mlenti C==FIN= FORMULATION HHO ================================================ PARAMETER ( NINF=3 ) INTEGER INFOS(NINF) CHARACTER*8 CMATE CHARACTER*(NCONCH) CONM LOGICAL BDPGE,ldpge,lsupma,dcmate,b_z LOGICAL dphas,dcont1,dcont2 C On a besoin du MCOORD dans DOXE plus loin SEGACT,MCOORD C==DEB= FORMULATION HHO == Chpoint de deplacement ====================== IPCHPU = IPCHP4 C==FIN= FORMULATION HHO ================================================ IRET = 0 IPCHP4 = 0 noer = 0 isup1 = 0 isup2 = 0 isup3 = 0 mchaml = 0 llent2 = 0 klent2 = 0 mlphas = 0 C_______________________________________________________________________ C C ACTIVATION DU MODELE C_______________________________________________________________________ * On deroule le modele initial IPMOD0 et on ne garde que les sous- * modeles d interet -> on cree un nouveau modele IPMODL C IPMODL est ACTIF en retour : if (ierr.ne.0) return mmodel = IPMODL NSOUS = mmodel.kmodel(/1) C==DEB= FORMULATION HHO == Quelques verifications ====================== kHHO = 0 DO im = 1, NSOUS imodel = mmodel.kmodel(im) IF (imodel.nefmod.EQ.HHO_NUM_ELEMENT) kHHO = kHHO + 1 END DO mleHHO = 0 IF (kHHO.GT.0) THEN IF (IPCHPU.EQ.0) THEN write(ioimp,*) 'HHO - BSIG: displacement field is missing!' RETURN END IF if (ierr.ne.0) return jg = NSOUS SEGINI,mleHHO END IF C==FIN= FORMULATION HHO ================================================ * Suport recherche = STRESSES ISUPMO = 3 * * Verification du lieu support des MCHAML * * Contraintes : IF (ISUP1.GT.1) RETURN * Caracteristiques : IF (IPCHE2.NE.0) THEN IF (ISUP2.GT.1) RETURN ENDIF * Matrice.Hooke : IF (IPCHE3.NE.0) THEN IF (ISUP3.NE.0) RETURN ENDIF C C MCHAML DES CONTRAINTES C mchel1 = IPCHE1 C C INITIALISATION DU MCHELM DE FORCES C N1 = NSOUS L1 = 6 N3 = 6 CALL oooprl(1) SEGINI,mchelm IPCHE5 = mchelm mchelm.IFOCHE = IFOUR mchelm.TITCHE = 'FORCES' C C Cas des modes de calcul GENERALISES (2D et 1D) pour la mecanique : C On cree un CHPOINT local pour les forces sur les points supports : ICHPGE = 0 IF (IFOUR.EQ.-3) THEN BDPGE = .TRUE. NFORDG = 3 NC = NFORDG SEGINI,msoupo msoupo.NOCOMP(1) = 'FZ ' msoupo.NOCOMP(2) = 'MY ' msoupo.NOCOMP(3) = 'MX ' ELSE IF (IFOUR.EQ.11) THEN BDPGE = .TRUE. NFORDG = 2 NC = NFORDG SEGINI,msoupo msoupo.NOCOMP(1) = 'FZ ' msoupo.NOCOMP(2) = 'FY ' ELSE IF (IFOUR.EQ.9.OR.IFOUR.EQ.10.OR.IFOUR.EQ.14) THEN BDPGE = .TRUE. NFORDG = 1 NC = NFORDG SEGINI,msoupo msoupo.NOCOMP(1) = 'FZ ' ELSE IF (IFOUR.EQ.7.OR.IFOUR.EQ.8) THEN BDPGE = .TRUE. NFORDG = 1 NC = NFORDG SEGINI,msoupo msoupo.NOCOMP(1) = 'FY ' ELSE BDPGE = .FALSE. NFORDG = 0 ENDIF C On finit de remplir le CHPOINT en cas de DPGE : IF (BDPGE) THEN NSOUPO = 1 NAT = 1 SEGINI,mchpoi mchpoi.MTYPOI = ' ' mchpoi.MOCHDE = ' ' mchpoi.JATTRI(1) = 2 mchpoi.IPCHP(1) = msoupo mchpoi.IFOPOI = IFOUR C On cree un maillage de POI1 avec les points supports (sans redondance) nbnn = 1 nbelem = NSOUS nbref = 0 nbsous = 0 SEGINI,meleme meleme.itypel = 1 N_DPGE = 0 K_DPGE = 0 DO im = 1, NSOUS imodel = mmodel.kmodel(im) iipdpg = imodel.IPDPGE IF (iipdpg.GT.0) THEN N_DPGE = N_DPGE + 1 meleme.num(1,N_DPGE) = iipdpg K_DPGE = im GOTO 1180 ENDIF ENDDO K_DPGE = NSOUS+1 1180 CONTINUE DO im = K_DPGE+1, NSOUS imodel = mmodel.kmodel(im) iipdpg = imodel.IPDPGE IF (iipdpg.LE.0) GOTO 1190 DO jm = 1, N_DPGE IF (iipdpg.EQ.meleme.num(1,jm)) GOTO 1190 ENDDO N_DPGE = N_DPGE + 1 meleme.num(1,N_DPGE) = iipdpg 1190 CONTINUE ENDDO IF (N_DPGE.NE.NSOUS) THEN nbelem = N_DPGE SEGADJ,meleme ENDIF msoupo.IGEOC = meleme C On cree les valeurs de forces GENE nulles au depart : N = N_DPGE NC = NFORDG SEGINI,mpoval msoupo.IPOVAL = mpoval ICHPGE = mchpoi ENDIF CALL oooprl(0) K_DPGE = 0 C un petit segment toujours utile : NBTYPE=1 SEGINI,NOTYPE TYPE(1)='REAL*8' MOTYR8 = NOTYPE C_______________________________________________________________________ C C BOUCLE SUR LES SOUS ZONES C_______________________________________________________________________ C ISOUS = 0 * DO 200 KISOUS = 1, NSOUS * * INITIALISATION * IVAMAT=0 IVACAR=0 IVASTR=0 IVAFOR=0 MOMATR=0 MOCARA=0 MOSTRS=0 MOFORC=0 lsupma=.true. IPMINT=0 mophas = 0 C C TRAITEMENT DU MODELE C imodel = mmodel.kmodel(KISOUS) MELE = imodel.NEFMOD c pas de contribution if (mele.eq.259) goto 200 ISOUS = ISOUS+1 IPMAIL = imodel.IMAMOD CONM = imodel.CONMOD IIPDPG = imodel.IPDPGE C C CREATION DU TABLEAU INFOS C IF (IRTD.EQ.0) GOTO 9991 C if (formod(1).eq.'MELANGE'.and.CMATEE.EQ.'PARALLEL') then mophas = lnomid(12) nomid = mophas nmpha = lesobl(/2) nmphf = lesfac(/2) jg = nmpha + nmphf NPHAT=JG if (mlphas.gt.0) then * verifie que le precedent melange a ete totalement traite do iph = 1,mlphas.lect(/1) if (mlphas.lect(iph).gt.0) then c write(6,*) 'bsigmp-melange incompletement traite' return endif enddo segadj mlphas elseif (mlphas.eq.0) then if (IPCHE2.gt.0) segini mlphas endif IVAPHA = 0 imoref = 0 imosou = imodel * associe phase et coefficient de phase IF (IVAMOD(/1).GE.1) THEN DO j = 1,IVAMOD(/1) IF (TYMODE(j).EQ.'IMODEL ') THEN IMODE1 = IVAMOD(j) * SEGACT,IMODE1 IF (IMODE1.FORMOD(1)(1:10).EQ.'MECANIQUE ' .OR. & IMODE1.FORMOD(1)(1:10).EQ.'POREUX ' .OR. & IMODE1.FORMOD(1)(1:16).EQ.'ELECTROSTATIQUE ' .OR. & IMODE1.FORMOD(1)(1:10).EQ.'LIQUIDE ' ) THEN do iph = 1,nmpha if (imode1.conmod(17:24).eq.lesobl(iph)) then if (mlphas.gt.0) mlphas.lect(iph) = imode1 if (imoref.eq.0) imoref = imode1 endif enddo ELSE C SEGDES,IMODE1 ENDIF ENDIF ENDDO ELSE c write(6,*) 'traitement MELANGE - 1 ' return ENDIF if (imoref.eq.0) then c write(6,*) 'traitement MELANGE - 2 ' return endif C if (IPCHE2.gt.0) then MOTYPE = MOTYR8 IF (IERR.NE.0) GOTO 9992 nomid = mophas mptval = ivapha dphas = .false. do iph = 1,nmpha if (ival(iph).eq.0) dphas = .true. enddo else IVAPHA = 0 endif if (ivapha.gt.0) then mptval = IVAPHA if (dphas) then * massif / manque proportions phases / imite imoref / conserve CONM moterr(1:50) = 'attention pas trouve proportions de phases' interr(1) = imodel moterr(1:16) = conm moterr(17:24) = ' ' imodel = imoref elseif (ival(/1).ge.nmpha) then goto 200 else c write(6,*) 'traitement MELANGE - 3 ' return endif else * massif / pas de proportions phases / imite imoref / conserve CONM imodel = imoref endif IF(ISUP.EQ.1)THEN IF(IERR.NE.0)THEN ISUP=0 GOTO 9991 ENDIF ENDIF IF (IERR.NE.0) GOTO 9992 endif iphas = 0 melpha = 0 if (mlphas.gt.0.and.ivapha.gt.0) then mptval = ivapha do iph =1,NPHAT if (imodel.eq.mlphas.lect(iph)) then iphas = iph melpha = ival(iphas) mlphas.lect(iph) = 0 endif enddo endif C C COQUE INTEGREE OU PAS ? NPINT = INFMOD(1) C C NATURE DU MATERIAU C CMATE = CMATEE MATE = IMATEE INAT = INATUU dcmate = .FALSE. DO im = 1, imodel.matmod(/2) IF (imodel.matmod(im).EQ.'IMPEDANCE') dcmate = .TRUE. ENDDO C____________________________________________________________________ C C ACTIVATION DU MELEME C MELEME = IPMAIL if (dcmate) then if (itypel.eq.1) mele = 45 if (itypel.eq.2) mele = 2 endif NBNN = meleme.NUM(/1) NBELEM = meleme.NUM(/2) C_______________________________________________________________________ C C INFORMATIONS SUR L'ELEMENT FINI C_______________________________________________________________________ C C Support : STRESSES = 3 sauf cas particulier(s) ISUPMO = 3 IF (infmod(/1).lt.2+ISUPMO) then write(ioimp,*) 'BSIGMP : INFMOD(/1) <',2+ISUPMO,imodel ENDIF NBPGAU= INFELE(4) MINTE = infmod(5) MINTE1 = infele(12) c* MINTE1= INFMOD(8) MFR = INFELE(13) NSTRS = INFELE(16) LHOOK = INFELE(10) LW = INFELE(7) LRE = INFELE(9) IPORE = INFELE(8) if (MFR.EQ.73) then ISUPMO = 6 minte1 = 0 nbpgau = minte.poigau(/1) endif IPMINT= MINTE IPMIN1= MINTE1 NHRM = NIFOUR IPPORE =0 IF (MFR.EQ.33.OR.MFR.EQ.57.OR.MFR.EQ.59) IPPORE = NBNN C Informations en DPGE pour le (sous-)modele courant C Si ldpge est VRAI, alors ndpge = NFORDG, sinon ndpge = 0. IMACHE(ISOUS) = IPMAIL INFCHE(ISOUS,1)=0 INFCHE(ISOUS,2)=0 INFCHE(ISOUS,3)=NIFOUR INFCHE(ISOUS,4)=IPMINT INFCHE(ISOUS,5)=0 INFCHE(ISOUS,6)=ISUPMO C__________________________________ C C NOMS DE COMPOSANTES NECESSAIRES ( CONTRAINTES ) C_______________________________________________________________________ C MOSTRS = lnomid(4) if (mostrs.eq.0) then write(ioimp,*) 'BSIGMP : MOSTRS=lnomid(4)=0 !',imodel endif nomid = mostrs nstr = nomid.lesobl(/2) nfac = nomid.lesfac(/2) if (cmate.eq.'MODAL'.or.cmate.eq.'STATIQUE') then * recherche composante FMOD if (llent2.eq.0) then jg = NSOUS jgl2 = jg segini mlent2 llent2 = mlent2 endif do im2 = 1, mchel1.imache(/1) if (mchel1.imache(im2).eq.imamod.and. & mchel1.conche(im2).eq.conmod) then mcham2 = mchel1.ichaml(im2) if (klent2 + melva2.ielche(/2).gt.jgl2) then jgl2 = jgl2 + melva2.ielche(/2) jg = jgl2 segadj mlent2 endif do iel2 = 1,melva2.ielche(/2) klent2 = klent2 + 1 mlent2.lect(klent2) = melva2.ielche(1,iel2) enddo goto 11 endif enddo endif enddo 11 continue *JK truande le test komcha IF(NSTRS.LT.1) THEN GO TO 9990 ENDIF mostrs0 = mostrs if (ifomod.eq.6) then nbrobl = 1 nbrfac = 1 segini nomid lesobl(1) = 'EFFX' lesfac(1) = 'IFFX' else nbrobl = 1 nbrfac = 0 segini nomid lesobl(1) = 'EFFX' endif mostrs = nomid else IF(NSTR+NFAC.NE.NSTRS) THEN GO TO 9990 ENDIF endif C C VERIFICATION DE LEUR PRESENCE C MOTYPE = MOTYR8 icond = 0 if (melpha.gt.0) icond = 1 IF (IERR.NE.0) GOTO 9991 if (melpha.eq.0) then mptval = ivastr nomid = mostrs dcont1 = .false. dcont2 = .false. if (ival(/1).ge.lesobl(/2)) then do ic = 1,lesobl(/2) if (ival(ic).le.0) dcont1 = .true. if (ival(ic).gt.0) dcont2 = .true. enddo else dcont1 = .true. endif if (dcont1) then if (dcont2) then c write(6,*) ' composantes contraintes incompletes cons ',conmod return else * aucune composante de contrainte pour le constituant : au suivant goto 200 endif endif endif C if (cmate.eq.'MODAL'.or.cmate.eq.'STATIQUE') then mptval = ivastr segact mptval*mod ns = ipos(/1) ncosou = 0 jg = ival(/1) segini mlenti do ico = 1,ival(/1) if (ival(ico).gt.0) then ncosou = ncosou + 1 lect(ncosou) = ival(ico) endif enddo segadj mptval do ico = 1,ncosou ival(ico) = lect(ico) enddo segsup mlenti segsup nomid mostrs = mostrs0 endif C IF (ISUP1.EQ.1) THEN ifai=1 if( mele.eq.260.and.iret1c.eq.5) ifai=0 & MOSTRS,MELE) ENDIF C_______________________________________________________________________ C C NOMS DE COMPOSANTES NECESSAIRES ( FORCES ) C_______________________________________________________________________ C MOFORC = lnomid(2) if (MOFORC.eq.0) then write(ioimp,*) 'BSIGMP : MOFORC=lnomid(2)=0 !',imodel endif nomid = MOFORC NFORC = nomid.lesobl(/2) nfacf = nomid.lesfac(/2) C C CREATION DU MCHAML C C CAS PARTICULIER DE LA DEFO PLANE GENE : RIEN SUR FZ MY MX C C* NFOREF=NFORC C* IF (ldpge) NFOREF = NFOREF - ndpge NFOREF = NFORC - ndpge c N2=NFOREF c bp: les composantes facultatives peuvent elles aussi exister ! * on ajustera apres bsigmx la taille reellement utilisee par la force N2=NFOREF+NFACF if (cmate.eq.'MODAL'.or.cmate.eq.'STATIQUE') then if (ncosou.lt.n2) then *jk : rustique nfacf = 0 n2 = ncosou nforef = ncosou endif endif C==DEB= FORMULATION HHO ================================================ C On va calculer directement le chpoint de forces pour chaque sous-zone. C On ne passe pas dans ce cas par un MCHAML de forces. On va le creer C mais il sera vide dans les zones associees a la formulation HHO. IF (MFR.EQ.HHO_MFR_ELEMENT .AND. MELE.EQ.HHO_NUM_ELEMENT) THEN NFOREF = 0 NFAREF = 0 N2 = 0 END IF C==FIN= FORMULATION HHO ================================================ C C TAILLES DE MELVAL C N1EL=NBELEM N1PTEL=NBNN NBPTEL=NBPGAU NEL =N1EL C C CREATION DU MELVAL DE FORCES C NS=1 NCOSOU=NFOREF+NFACF CALL oooprl(1) SEGINI MCHAML SEGINI MPTVAL DO ICOMP=1,NCOSOU N2PTEL=0 N2EL =0 SEGINI MELVAL IELVAL(ICOMP)=MELVAL IVAL(ICOMP)=MELVAL ENDDO CALL oooprl(0) ICHAML(ISOUS)=MCHAML IVAFOR=MPTVAL DO ICOMP=1,NFOREF NOMCHE(ICOMP)=LESOBL(ICOMP) TYPCHE(ICOMP)='REAL*8' ENDDO if(NFACF .ne. 0) then IFAC = 0 DO ICOMP=(NFOREF+1),N2 IFAC = IFAC + 1 NOMCHE(ICOMP)=LESFAC(IFAC) TYPCHE(ICOMP)='REAL*8' ENDDO endif C____________________________________________________________________ C * TRAITEMENT DES CHAMPS DE CARACTERISTIQUES * C____________________________________________________________________ NBROBL=0 NBRFAC=0 NOMID=0 IVECT=0 * Sauf indication contraire, les composantes sont toutes de type REAL*8 NOTYPE = MOTYR8 * * EPAISSEUR DANS LE CAS MASSIF EN CONTRAINTES PLANES * IF((MFR.EQ.1.OR.MFR.EQ.31.OR.MFR.EQ.63.OR. + (MELE.GE.79.AND.MELE.LE.83)).AND. + IFOUR.EQ.-2)THEN * NBRFAC=1 SEGINI NOMID LESFAC(1)='DIM3' * * EPAISSEUR ET EXCENTREMENT DANS LE CAS DES COQUES * ELSEIF (MFR.EQ.3.OR.MFR.EQ.5.OR.MFR.EQ.9) THEN NBROBL=1 IF(MFR.EQ.3.AND.IFOUR.EQ.-2) THEN NBRFAC=2 ELSE NBRFAC=1 ENDIF SEGINI NOMID LESOBL(1)='EPAI' LESFAC(1)='EXCE' IF(MFR.EQ.3.AND.IFOUR.EQ.-2) LESFAC(2)='DIM3' * * SECTION POUR LES BARRES * ELSE IF (MFR.EQ.27) THEN IF(.NOT.dcmate) THEN NBROBL=1 SEGINI NOMID LESOBL(1)='SECT' ENDIF * * section, excentrements et orientation pour les barres excentrees * ELSE IF (MFR.EQ.49) THEN NBROBL=6 SEGINI NOMID LESOBL(1)='SECT' LESOBL(2)='EXCZ' LESOBL(3)='EXCY' LESOBL(4)='VX ' LESOBL(5)='VY ' LESOBL(6)='VZ ' * * raideurs locales et orientation pour l'element LIA2 * de liaison a 2 noeuds * ELSE IF (MFR.EQ.51) THEN NBROBL=9 SEGINI NOMID LESOBL(1)='RLUX' LESOBL(2)='RLUY' LESOBL(3)='RLUZ' LESOBL(4)='RLRX' LESOBL(5)='RLRY' LESOBL(6)='RLRZ' LESOBL(7)='VX ' LESOBL(8)='VY ' LESOBL(9)='VZ ' * * CARACTERISTIQUES POUR LES POUTRES * ELSE IF (MFR.EQ.7 ) THEN if (dcmate) then NBRFAC=6 SEGINI NOMID LESFAC(1)='TORS' LESFAC(2)='INRY' LESFAC(3)='INRZ' LESFAC(4)='VX' LESFAC(5)='VY' LESFAC(6)='VZ' IVECT=1 else IF (CMATE.EQ.'SECTION') THEN NBRFAC=3 SEGINI NOMID LESFAC(1)='VX' LESFAC(2)='VY' LESFAC(3)='VZ' IVECT=1 * ELSEIF (IFOUR.EQ.-2.OR.IFOUR.EQ.-1.OR.IFOUR.EQ.-3) THEN NBROBL=2 NBRFAC=1 SEGINI NOMID LESOBL(1)='SECT' LESOBL(2)='INRZ' LESFAC(1)='SECY' * ELSE NBROBL=4 NBRFAC=5 SEGINI NOMID LESOBL(1)='TORS' LESOBL(2)='INRY' LESOBL(3)='INRZ' LESOBL(4)='SECT' LESFAC(1)='SECY' LESFAC(2)='SECZ' LESFAC(3)='VX' LESFAC(4)='VY' LESFAC(5)='VZ' IVECT=1 ENDIF endif * * CARACTERISTIQUES POUR LES TUYAUX * ELSE IF (MFR.EQ.13) THEN NBROBL=2 NBRFAC=5 SEGINI NOMID LESOBL(1)='EPAI' LESOBL(2)='RAYO' LESFAC(1)='RACO' LESFAC(2)='CISA' LESFAC(3)='VX' LESFAC(4)='VY' LESFAC(5)='VZ' IVECT=1 * * CARACTERISTIQUES POUR LES LINESPRING * ELSE IF (MFR.EQ.15) THEN NBROBL=5 SEGINI NOMID LESOBL(1)='EPAI' LESOBL(2)='FISS' LESOBL(3)='VX ' LESOBL(4)='VY ' LESOBL(5)='VZ ' * * CARACTERISTIQUES POUR LES TUYAUX FISSURES * ELSE IF (MFR.EQ.17) THEN NBROBL=9 SEGINI NOMID LESOBL(1)='RAYO' LESOBL(2)='EPAI' LESOBL(3)='VX ' LESOBL(4)='VY ' LESOBL(5)='VZ ' LESOBL(6)='VXF ' LESOBL(7)='VYF ' LESOBL(8)='VZF ' LESOBL(9)='ANGL' * * CARACTERISTIQUES DES ELEMENTS HOMOGENEISES * ELSE IF (MFR.EQ.37) THEN IF(IFOUR.EQ.1.OR.IFOUR.EQ.0) THEN NBROBL=4 SEGINI NOMID LESOBL(1)='SCEL' LESOBL(2)='SFLU' LESOBL(3)='EPS ' LESOBL(4)='XINE' ELSE NBROBL=3 SEGINI NOMID LESOBL(1)='SCEL' LESOBL(2)='SFLU' LESOBL(3)='EPS ' ENDIF * C CARACTERISTIQUE POUR LES JOINTS GENE C ELSE IF (MFR.EQ.55) THEN NBROBL=0 NBRFAC=1 SEGINI NOMID LESFAC(1)='EPAI' c c element coaxial COS2 (3D pour liaison acier-beton) c ELSE IF( MFR.EQ.78) THEN NBROBL=1 NBRFAC=0 SEGINI NOMID LESOBL(1)='SECT' C==DEB= FORMULATION HHO ================================================ ELSE IF (MFR.EQ.HHO_MFR_ELEMENT) THEN IF (MELE.EQ.HHO_NUM_ELEMENT) THEN nbrobl = 2 nbrfac = 0 SEGINI,nomid nomid.LESOBL(1) = 'PIHO' nomid.LESOBL(2) = 'BHHO' MOCARA = nomid nbtype = 2 SEGINI,NOTYPE notype.TYPE(1) = 'REAL*8 ' notype.TYPE(2) = 'POINTEURLISTREEL' END IF C==FIN= FORMULATION HHO ================================================ ENDIF MOCARA=NOMID * rendement kich 09/01 /// a remettre en cause avec phases (kich 04/09) if (MOCARA.EQ.0) then nbrobl = 0 nbrfac = 0 segini nomid mocara = nomid endif MOTYPE = NOTYPE ifac = nbrfac NCAR1=NBROBL + NBRFAC + 1 NBRFAC= nbrfac + 10 segadj nomid lesfac(ifac + 1) = 'REND' lesfac(ifac + 2) = 'W1X ' lesfac(ifac + 3) = 'W1Y ' lesfac(ifac + 4) = 'W1Z ' lesfac(ifac + 5) = 'W2X ' lesfac(ifac + 6) = 'W2Y ' lesfac(ifac + 7) = 'W2Z ' lesfac(ifac + 8) = 'REN1' lesfac(ifac + 9) = 'REN2' lesfac(ifac + 10)= 'REN3' if (motype.ne.MOTYR8) then notype = motype nbtype = notype.type(/2) + 1 segadj notype type(nbtype) = 'REAL*8' endif * NCARA=NBROBL NCARF=NBRFAC NCARR=NCARA+NCARF C* IF (MOCARA.NE.0) THEN IF (IPCHE2.gt.0) THEN icond = 1 if (ncara.le.0) icond = 0 $ INFOS,3,IVACAR) IF (IERR.NE.0) GOTO 9990 IF (ISUP2.EQ.1.and.mele.ne.260) THEN IF (IERR.NE.0)THEN ISUP2=0 GOTO 9990 ENDIF ENDIF ELSE IF (NCARA.GT.0) THEN MOTERR(1:8)='CARACTER' MOTERR(9:12)=NOMTP(MELE) MOTERR(13:20)='BSIGMA' GOTO 9990 ENDIF C* ENDIF if (motype.ne.MOTYR8) then notype = motype segsup,notype endif mptval = ivacar if (ivacar.gt.0) then dphas = .true. do iv = 1,ival(/1) if (ival(iv).gt.0) dphas = .false. enddo if (dphas) ivacar = 0 endif C____________________________________________________________________ C * RANGEMENT DE LA MATRICE DE HOOKE DANS UN TABLEAU DE TRAVAIL * * UNIQUEMENT DANS LE CAS DE L'ELEMENT COQUE DST C____________________________________________________________________ * NBGMAT = 0 NELMAT = 0 NMATR = 0 NMATF = 0 NMATT = 0 IF(MELE.EQ.93.or.mele.eq.260)THEN IF (IMAT.EQ.2) THEN NBRFAC=0 IF(CMATE.NE.'ISOTROPE')THEN NBROBL=3 SEGINI NOMID LESOBL(1)='MAHO' LESOBL(2)='V1X ' LESOBL(3)='V1Y ' NBTYPE=3 SEGINI NOTYPE TYPE(1)='POINTEURLISTREEL' TYPE(2)='REAL*8' TYPE(3)='REAL*8' ELSE NBROBL=1 SEGINI NOMID LESOBL(1)='MAHO' NBTYPE=1 SEGINI NOTYPE TYPE(1)='POINTEURLISTREEL' ENDIF MOMATR=NOMID MOTYPE=NOTYPE SEGSUP NOTYPE IF (IERR.NE.0) GOTO 9990 MPTVAL=IVAMAT MELVAL=IVAL(1) NBGMAT=IELCHE(/1) NELMAT=IELCHE(/2) NMATR=NBROBL NMATF=NBRFAC NMATT=NMATR+NMATF ELSE C____________________________________________________________________ * * SINON TRAITEMENT DES CHAMPS DE MATERIAU C____________________________________________________________________ * NBROBL=0 NBRFAC=0 IF (FORMOD(1).EQ.'MECANIQUE'.AND.CMATE.EQ.'ISOTROPE') THEN NBROBL=2 SEGINI NOMID MOMATR=NOMID LESOBL(1)='YOUN' LESOBL(2)='NU ' ELSEIF(FORMOD(1).EQ.'MECANIQUE'.AND.CMATE.EQ.'ORTHOTRO')THEN IF(INAT.EQ.67) THEN NBROBL=6 SEGINI NOMID MOMATR=NOMID LESOBL(1)='YG1 ' LESOBL(2)='YG2 ' LESOBL(3)='NU12' LESOBL(4)='G12 ' LESOBL(5)='V1X ' LESOBL(6)='V1Y ' ELSE if(lnomid(6).ne.0) then nomid=lnomid(6) momatr=nomid nbrobl=lesobl(/2) nbrfac=lesfac(/2) lsupma=.false. else endif ENDIF ENDIF NMATR=NBROBL NMATF=NBRFAC NMATT=NMATR+NMATF * IF (MOMATR.NE.0) THEN MOTYPE = MOTYR8 IF (IERR.NE.0) GOTO 9990 * IF (ISUP2.EQ.1.and.mele.ne.260) THEN IF (IERR.NE.0)THEN ISUP2=0 GOTO 9990 ENDIF ENDIF * MPTVAL=IVAMAT NBGMAT = 0 NELMAT = 0 DO IM=1,NMATT IF(IVAL(IM).NE.0)THEN MELVAL=IVAL(IM) NBGMAT=MAX(NBGMAT,VELCHE(/1)) NELMAT=MAX(NELMAT,VELCHE(/2)) ENDIF ENDDO ENDIF ENDIF ENDIF C C================================================ C C CAS D'UN JOINT UNIDIMENSIONNEL JOI1 C Chargement des vecteurs situes dans les caracteristiques materiau C C================================================ IF(MFR.EQ.75) THEN IF(IFOUR.EQ.2) THEN NBROBL=6 NBRFAC=0 SEGINI NOMID MOMATR=NOMID LESOBL(1)='V1X' LESOBL(2)='V1Y' LESOBL(3)='V1Z' LESOBL(4)='V2X' LESOBL(5)='V2Y' LESOBL(6)='V2Z' NMATR=NBROBL NMATF=NBRFAC ELSE IF(IFOUR.EQ.-2.OR.IFOUR.EQ.-1) THEN NBROBL=2 NBRFAC=0 SEGINI NOMID MOMATR=NOMID LESOBL(1)='V1X' LESOBL(2)='V1Y' NMATR=NBROBL NMATF=NBRFAC ENDIF MOTYPE=MOTYR8 * IF (IERR.NE.0) GOTO 9990 * NMATT=NMATR+NMATF * C IF(ISUP1.EQ.1)THEN IF(IERR.NE.0)THEN ISUP1=0 GOTO 9990 ENDIF ENDIF MPTVAL=IVAMAT NBGMAT = 0 NELMAT = 0 DO 11265 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 11265 CONTINUE nmattd=nmatt ivamtd= ivamat ENDIF C_______________________________________________________________________ C C NUMERO DES ETIQUETTES : C ETIQUETTES DE 1 A 98 POUR TRAITEMENT SPECIFIQUE A L ELEMENT C Les elements sont groupes comme suit : C - massif, poreux, joints poreux,incompressibles --> BSIGM1 C - coq3,dkt,coq4,coq8,coq2,jot3,joi4,joi2,joi3 ----> BSIGM2 C - poutre,tuyau,linespring,tuyau fissure,barre ----> BSIGM3 c et poutre Timoschenko, cos2, coa2 C_______________________________________________________________________ C IF(MELE.GE.1.AND.MELE.LE.100) THEN C CABL SEG2 SEG3 TRI3 TRI4 TRI6 TRI7 QUA4 QUA5 QUA8 GOTO ( 99, 29, 99, 4, 99, 4, 99, 4, 99, 4 C QUA9 RAC2 RAC3 CUB8 CU20 PRI6 PR15 LIA3 LIA4 LIA6 1 , 99, 99, 99, 4, 4, 4, 4, 99, 99, 99 C LIA8 MULT TET4 TE10 PYR5 PY13 COQ3 DKT POUT LISP 2 , 99, 99, 4, 4, 4, 4, 27, 27, 29, 29 C FAC3 FAC4 FAC6 FAC8 LTR3 LQU4 LCU8 LPR6 LTE4 LPY5 3 , 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 C COQ8 TUYA TUFI COQ2 POI1 BARR RACO LSU2 COQ4 LISM 4 , 27, 29, 29, 27, 29, 29, 99, 99, 27, 29 C COF3 RES2 LSU3 LSU4 LICO COQ6 CVS2 CVS3 CVT3 CVT6 5 , 99, 99, 99, 99, 99, 27, 99, 99, 99, 99 C CVQ4 CVQ8 THP5 TH13 THP6 TH15 THC8 TH20 ICT3 ICQ4 6 , 99, 99, 99, 99, 99, 99, 99, 99, 4, 4 C ICT6 ICQ8 ICC8 ICT4 ICP6 IC20 IC10 IC15 TRIP QUAP 7 , 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 C CUBP TETP PRIP TIMO JOI2 JOI3 JOT3 JOI4 JOI6 JOI8 8 , 4, 4, 4, 29, 27, 27, 27, 27, 99, 99 C LISC TRIH DST LIC4 CERC TUYO LSE2 LITU HYT3 HYQ4 9 , 99, 99, 27, 99, 29, 29, 99, 99, 99, 99) c cccccc . ,MELE ELSEIF(MELE.GE.101.AND.MELE.LE.200) THEN C HYT4 HYP6 HYC8 TRIS QUAS POIS FOR3 JOP3 JOP6 JOP8 GOTO ( 99, 99, 99, 99, 99, 99, 99, 4, 4, 4 C POL3 POL4 POL5 POL6 POL7 POL8 POL9 PO10 PO11 PO12 1 , 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 C PO13 PO14 BAR3 BAEX LIA2 QUAH CUBH ROT3 SEF2 TRF3 2 , 4, 4, 29, 29, 29, 34, 34, 34, 34, 34 C QUF4 CUF8 PRF6 TEF4 PYF5 MSE3 MTR6 MQU9 MC27 MP18 3 , 34, 34, 34, 34, 34, 34, 34, 34, 34, 34 C MT10 MP14 SEF3 TRF7 QUF9 CF27 PF21 TF15 PF19 SEG6 4 , 34, 34, 34, 34, 34, 34, 34, 34, 34, 34 C TR21 QU36 C216 P126 TE56 PY91 TRH6 BSE2 BTR4 BQU5 5 , 34, 34, 34, 34, 34, 34, 34, 34, 34, 34 C BCU9 BPR7 BTE5 BPY6 FRO4 SEGS POJS JCT3 JCI4 JGI2 6 , 34, 34, 34, 34, 34, 34, 34, 27, 27, 27 C JGT3 JGI4 TRIQ QUAQ CUBQ TETQ PRIQ TRIR QUAR CUBR 7 , 27, 27, 4, 4, 4, 4, 4, 4, 4, 4 C TETR PRIR Q4RI Q8RI JOQ3 JOQ6 JOQ8 JOR3 JOR6 JOR8 8 , 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 C T1D2 T1D3 M1D2 M1D3 LC03 LC07 LC09 LC27 LC21 LC15 9 , 34, 34, 4, 4, 34, 34, 34, 34, 34, 34) c cccccc . ,MELE-100 ELSEIF(MELE.GE.201.AND.MELE.LE.300) THEN C LC19 LS03 LS07 LS09 LS27 LS21 LS15 LS19 BS03 BS07 GOTO ( 34, 34, 34, 34, 34, 34, 34, 34, 34, 34 C BS09 BS27 BS21 BS15 BS19 MC03 MC07 MC09 MC27 MC21 1 , 34, 34, 34, 34, 34, 34, 34, 34, 34, 34 C MC15 MC19 M103 M107 M109 M127 M121 M115 M119 MS03 2 , 34, 34, 34, 34, 34, 34, 34, 34, 34, 34 C MS07 MS09 MS27 MS21 MS15 MS19 QC03 QC07 QC09 QC27 3 , 34, 34, 34, 34, 34, 34, 34, 34, 34, 34 C QC21 QC15 QC19 Q103 Q107 Q109 Q127 Q121 Q115 Q119 4 , 34, 34, 34, 34, 34, 34, 34, 34, 34, 34 C QS03 QS07 QS09 QS27 QS21 QS15 QS19 CIFL SURE SHB8 5 , 34, 34, 34, 34, 34, 34, 34, 34, 34, 29 C CAF2 CAF3 XQ4R XC8R JOI1 ZCO2 ZCO3 ZCO4 TUY2 TUY3 6 , 34, 34, 34, 34, 29, 29, 29, 29, 99, 99 C COS2 COA2 ICY5 IC13 CU27 PR21 TE15 PY19 C20R P15R 7 , 29, 29, 4, 4, 4, 4, 4, 4, 4, 4 C HHO .... .... .... .... .... .... .... .... .... 8 , 34, 34, 34, 34, 34, 34, 34, 34, 34, 34 C ... .... .... .... .... .... .... .... .... .... 9 , 34, 34, 34, 34, 34, 34, 34, 34, 34, 34) c cccccc . ,MELE-200 ENDIF C 34 CONTINUE C Cas particulier de la Formulation DIFFUSION : IF (MFR.EQ.73) GOTO 4 C==DEB= FORMULATION HHO ================================================ IF (MFR.EQ.HHO_MFR_ELEMENT) THEN IF (MELE.EQ.HHO_NUM_ELEMENT) THEN CALL HHOBSG(IMODEL, MOFORC, IVASTR,NSTRS, & IIPDPG, ADPG,BDPG,CDPG, & IVACAR,NCARA, IPMINT,NBPGAU, & IPCHPU, IVAFOR, iret) IF (iret.NE.0) THEN GOTO 9990 END IF mleHHO.lect(ISOUS) = IVAFOR GOTO 510 END IF END IF C==FIN= FORMULATION HHO ================================================ C_______________________________________________________________________ C POUR les XFEM on fait un cas particuliers IF(MFR.EQ.63) THEN & IVAFOR,ADPG,BDPG,CDPG,IIPDPG,IRETER) IF(IRETER.NE.0) RETURN MPTVAL = IVAFOR N1TOT = IPOS(/1) N1SUP = N1TOT - 1 N2TOT = IVAL(/1) * si le nombre de sous-zones fournies par BSIGMX doit augmenter... c write(6,*) N1TOT,N1SUP,N2TOT,N1,NFOREF,NFACF IF (N1SUP.ge.1) THEN N1 = N1 + N1SUP segadj,MCHELM ENDIF I2TOT = 0 I1NN = 1 DO I1=1,(1+N1SUP) * -cas ou la zone est vide if (IPOS(I1).eq.0) then N1 = N1 - 1 segadj,MCHELM I2TOT = I2TOT + NSOF(I1) if(I1.eq.I1NN) I1NN=I1NN+1 * -cas ou il faut remplir ICHAML avec MCHAM1 = copie du MCHAML pere else N2=NFOREF+NFACF segini,MCHAM1=MCHAML * la 1ere fois est reperee par I1NN if(I1.ne.I1NN) ISOUS = ISOUS + 1 ICHAML(ISOUS) = MCHAM1 c write(6,*) 'bsigmp: creation de ICHAML(',ISOUS,')=',MCHAM1 IMACHE(ISOUS) = IPOS(I1) N2 = NSOF(I1) segadj,MCHAM1 I2TOT = I2TOT + 1 enddo endif ENDDO * Quand on a fini avec cette zone on n oublie pas de supprimer * le MCHAML pere des MCHAM1. c * Dans le cas ou ils n ont pas ete utilises, c * les MELVAL du MCHAML pere peuvent etre supprimes aussi. c if (IPOS(1).eq.0) then c DO IB=1,IELVAL(/1) c MELVAL=IELVAL(IB) c SEGSUP MELVAL c ENDDO c endif * -> cela semble etre une erreur car les melval sont utilises !!! SEGSUP MCHAML GO TO 510 ENDIF C fin des XFEM _________________________________________________________ 99 CONTINUE MOTERR(1:4)=NOMTP(MELE) MOTERR(5:12)='BSIGMA' GOTO 9990 C_______________________________________________________________________ C C massifs, poreux, joints poreux, incompressibles C_______________________________________________________________________ C 4 CONTINUE IF (MFR.EQ.71) THEN & IVAFOR,NFORC) ELSE IF (MFR.EQ.73) THEN & IVAFOR,NFORC) ELSE & IVACAR,IPORE,LHOOK,NFORC,IVAFOR,ADPG,BDPG,CDPG, & IIPDPG,ncar1,melpha,noer) if (noer.eq.195) return ENDIF GOTO 510 C_______________________________________________________________________ C C coq3,dkt,coq4,coq8,coq2,dst,jot3,joi4,joi2,joi3 C_______________________________________________________________________ C 27 CONTINUE if (dcmate) goto 29 & MELE,MFR,IPMINT,IPMIN1,IVAMAT,NMATT,NBGMAT,NELMAT,IMAT,NPINT, & NFORC,IVAFOR,ADPG,BDPG,CDPG,IIPDPG) GOTO 510 C_______________________________________________________________________ C C poutre,tuyau,linespring,tuyau fissure,barre,poutre Timoschenko C joi1, zone_cohesive, cos2, coa2 C_______________________________________________________________________ C 29 CONTINUE ncaru = ncar1 - 1 &IVASTR,ISOUS,NBPGAU,NBPTEL,IPMINT,NFORC,IVAFOR,ADPG,BDPG,CDPG &,IIPDPG,ivamat,NMATT,MFR,dcmate) GOTO 510 C_______________________________________________________________________ C C DESACTIVATION DES SEGMENTS PROPRES A LA ZONE GEOMETRIQUE ISOUS C_______________________________________________________________________ C 510 CONTINUE C C Cas des modes de calculs GENEralises : C IF (ldpge) THEN K_DPGE = K_DPGE + 1 mchpoi = ICHPGE msoupo = mchpoi.ipchp(1) ipt1 = msoupo.IGEOC DO im = 1, N_DPGE IF (iipdpg.EQ.ipt1.num(1,im)) GOTO 300 ENDDO write(ioimp,*) 'BSIGMP - incoherence iipdpg / ipt1' 300 CONTINUE mpoval = msoupo.IPOVAL mpoval.vpocha(im,1) = mpoval.vpocha(im,1) + ADPG IF (NFORDG.GE.2) THEN mpoval.vpocha(im,2) = mpoval.vpocha(im,2) + BDPG IF (NFORDG.GE.3) THEN mpoval.vpocha(im,3) = mpoval.vpocha(im,3) + CDPG ENDIF ENDIF ENDIF IF(ISUP1.EQ.1)THEN ELSE ENDIF * * IF(ISUP2.EQ.1.AND.IMAT.NE.2)THEN ELSE ENDIF * IF(ISUP2.EQ.1)THEN ELSE ENDIF * NOMID=MOCARA IF (MOCARA.NE.0) SEGSUP NOMID NOMID=MOMATR IF (MOMATR.NE.0.and.lsupma) SEGSUP NOMID * IF (IERR.NE.0) GO TO 9991 C 200 CONTINUE C_______________________________________________________________________ C C TRANSFORMATION DU CHAMELEM EN CHPOINT C_______________________________________________________________________ C if (ierr.ne.0) return C==DEB= FORMULATION HHO ================================================ IF (kHHO.GT.0) THEN NBFUS = kHHO IF (NSOUS.NE.kHHO) NBFUS = NBFUS + 1 IF (NBFUS.EQ.1) THEN ipchp6 = 0 DO im = 1, NSOUS ip = mleHHO.lect(im) IF (ip.NE.0) THEN if (ipchp6.ne.0) then write(ioimp,*) 'BSIGMP-NBFUS-ipchp6' return end if ipchp6 = ip END IF END DO ELSE ic1 = 0 SEGINI,sid sid.CTYPE1 = 'CHPOINT ' sid.CREATE = 'BSIGMA ' i = 0 IF (NSOUS.NE.kHHO) THEN i = i + 1 sid.IPOINT(i) = IPCHP4 END IF DO im = 1, NSOUS ip = mleHHO.lect(im) IF (ip.NE.0) THEN i = i + 1 sid.IPOINT(i) = ip END IF END DO if (i.ne.khho) write(ioimp,*) 'ERREUR HHO BSIG SID !' r_z = 0. b_z = .TRUE. SEGSUP,sid END IF IPCHP4 = ipchp6 SEGSUP,mleHHO END IF C==FIN= FORMULATION HHO ================================================ C C CAS des modes de calculs GENERALISEs : C ON ADDITIONNE LE CHPOINT RESULTANT DE LA TRANSFORMATION DU CHAMELEM C ET LE PETIT CHPOINT DES FORCES INTERNES AUx NOEUDs supports C IF (BDPGE) THEN IF (K_DPGE.NE.0) THEN IPCHP4 = IPCHP6 ENDIF ENDIF C IF (llent2.gt.0) then ipc1 = ipchp4 jg = klent2 segadj mlent2 do ipj= 1,jg ipcj = mlent2.lect(ipj) if (ipcj.gt.0) then ipc1 = ipc2 endif enddo ipchp4 = ipc1 segsup mlent2 ENDIF C IPCHE5 est maintenant inutile ! MCHELM = IPCHE5 DO im=1,ICHAML(/1) MCHAML=mchelm.ICHAML(im) IF (MCHAML.GT.0) THEN DO jm=1,IELVAL(/1) MELVAL=mchaml.IELVAL(jm) SEGSUP,MELVAL ENDDO SEGSUP,MCHAML ENDIF ENDDO SEGSUP,MCHELM C* Fin normale IRET = 1 GOTO 9000 * * ERREUR DANS UNE SOUS ZONE, DESACTIVATION ET RETOUR * 9990 CONTINUE * IF(ISUP1.EQ.1)THEN ELSE ENDIF * * IF(ISUP2.EQ.1.AND.IMAT.NE.2)THEN ELSE ENDIF * IF(ISUP2.EQ.1)THEN ELSE ENDIF * NOMID=MOCARA IF (MOCARA.NE.0) SEGSUP NOMID NOMID=MOMATR IF (MOMATR.NE.0.and.lsupma) SEGSUP NOMID 9991 CONTINUE 9992 CONTINUE IRET = 0 C Dernieres desactivations avant de quitter : 9000 CONTINUE mmodel = IPMODL SEGDES,mmodel meleme = MAILDG IF (meleme.NE.0) SEGDES,meleme notype = MOTYR8 SEGSUP,notype c RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales