workp
C WORKP SOURCE OF166741 24/10/07 21:15:52 12016 ************************************************************************ * ENTREES : * IPMODL = POINTEUR SUR UN OBJET MMODEL * IPCHE1 = POINTEUR SUR UN MCHAML DE CONTRAINTES * IPCHE2 = POINTEUR SUR UN MCHAML DE GRADIENTS * IPCHE3 = POINTEUR SUR UN MCHAML DE GRADIENT DE FLEXION (CAS DES COQUES * * SORTIE : * IPCHE4 = POINTEUR SUR UN MCHAML DE DENSITE D'ENERGIE * IRET = CODE DE RETOUR = 0 ECHEC , = 1 SUCCES * * CODE DE SUO X.Z * PASSAGE AUX NOUVEAUX CHAMELEMS PAR P. DOWLATYARI AVRIL 91 ************************************************************************ IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) * -INC PPARAM -INC CCOPTIO -INC CCHAMP -INC SMCHAML -INC SMCHPOI -INC SMELEME -INC SMCOORD -INC SMMODEL -INC SMINTE -INC SMLREEL C DIMENSION STRESS(8),GRADI(9),GRADF(9) * SEGMENT NOTYPE CHARACTER*16 TYPE(NBTYPE) ENDSEGMENT * SEGMENT MPTVAL INTEGER IPOS(NS) ,NSOF(NS) INTEGER IVAL(NCOSOU) CHARACTER*16 TYVAL(NCOSOU) ENDSEGMENT * PARAMETER ( NINF=3 ) INTEGER INFOS(NINF) CHARACTER*(NCONCH) CONM LOGICAL lsupgd,lsupgf,lsupco C lsupgd=.false. lsupgf=.false. lsupco=.false. IRET = 0 IPCHE4 = 0 C NHRM=NIFOUR C MCHEL1=IPCHE1 SEGACT,MCHEL1 MCHEL2=IPCHE2 SEGACT,MCHEL2 C C TEST DE COMPATIBILITE DES CHAMPS C IF((MCHEL1.TITCHE).EQ.'CONTRAINTES'.AND.(MCHEL2.TITCHE) 1 .EQ.'GRADIENT')THEN IPCONT=IPCHE1 IPGRAD=IPCHE2 IPGRAF=IPCHE3 ELSEIF((MCHEL2.TITCHE).EQ.'CONTRAINTES'.AND.(MCHEL1.TITCHE) 1 .EQ.'GRADIENT')THEN IPCONT=IPCHE2 IPGRAD=IPCHE1 IPGRAF=IPCHE3 ELSE MOTERR(1:19)=MCHEL1.TITCHE(1:8)//MCHEL2.TITCHE(1:8) RETURN ENDIF * * Verification du lieu support du MCHAML de CONTRAINTES * IF (ISUP1.GT.1) RETURN * * Verification du lieu support du MCHAML de GRADIENT * segact mchel1,mchel2 IF (ISUP2.GT.1) RETURN * * Verification du lieu support du MCHAML de GRADIENT DE FLEXION * IF(IPGRAF.NE.0)THEN IF (ISUP3.GT.1) RETURN ENDIF C C ACTIVATION DU MODEL C MMODEL=IPMODL SEGACT,MMODEL NSOUS=KMODEL(/1) C C CREATION DU MCHELM C N1=NSOUS L1=8 N3=6 SEGINI MCHELM TITCHE='SCALAIRE' IFOCHE=IFOUR C C DEBUT DE LA BOUCLE SUR LES DIFFERENTS SOUS-ZONES C isouss=0 DO 500 ISOUS=1,NSOUS * * INITIALISATION * IVASTR=0 NSTR=0 IVAGRA=0 NGRAD=0 IVAGRF=0 NGRAF=0 IPMINT=0 C C ON RECUPERE LES INFOS GENERALES C IMODEL=KMODEL(ISOUS) SEGACT,IMODEL MELE=NEFMOD if((mele.eq.22).OR.(mele.eq.259)) then go to 500 endif isouss=isouss+1 C C TRAITEMENT DU MODELE C IPMAIL=IMAMOD MELEME=IPMAIL CONM = CONMOD C IMACHE(ISOUSs)=IPMAIL CONCHE(ISOUSs)=CONMOD C____________________________________________________________________ C C INFORMATION SUR L'ELEMENT FINI C____________________________________________________________________ C MFR =INFELE(13) NBGS =INFELE(4) * MINTE=INFELE(11) MINTE=INFMOD(7) IPMINT=MINTE IF (IPMINT.NE.0) SEGACT,MINTE C* MINTE1=INFMOD(8) C C COQUE INTEGREE OU PAS ? NPINT=INFMOD(1) C attention aux XFEM qui ne sont pas des coques! IF (MFR.eq.63) NPINT=0 IF (NPINT.NE.0)THEN GOTO 9991 ENDIF C C CREATION DU TABLEAU INFOS C IF (IERR.NE.0) GOTO 9991 C INFCHE(ISOUSs,1)=0 INFCHE(ISOUSs,2)=0 INFCHE(ISOUSs,3)=NHRM INFCHE(ISOUSs,4)=MINTE INFCHE(ISOUSs,5)=0 INFCHE(ISOUSs,6)=5 C C ACTIVATION DU MELEME C SEGACT MELEME NBNN =NUM(/1) NBELEM=NUM(/2) IPPORE=0 IF(MFR.EQ.33) IPPORE=NBNN C____________________________________________________________________ C C RECHERCHE DES NOMS DE COMPOSANTES C____________________________________________________________________ C if(lnomid(4).ne.0) then nomid=lnomid(4) segact nomid mostrs=nomid nstr=lesobl(/2) nfac=lesfac(/2) lsupco=.false. else lsupco=.true. endif C if(lnomid(3).ne.0) then nomid=lnomid(3) segact nomid mograd=nomid ngrad=lesobl(/2) nfac=lesfac(/2) lsupgd=.false. else lsupgd=.true. endif C IF(IPGRAF.NE.0) THEN if(lnomid(11).ne.0) then nomid=lnomid(11) segact nomid mograf=nomid ngraf=lesobl(/2) nfac=lesfac(/2) lsupgf=.false. else lsupgf=.true. endif ENDIF C____________________________________________________________________ C C VERIFICATION DE LEUR PRESENCE C____________________________________________________________________ C NBTYPE=1 SEGINI NOTYPE MOTYPE=NOTYPE TYPE(1)='REAL*8' C IF (IERR.NE.0)THEN SEGSUP NOTYPE GOTO 9990 ENDIF & MOSTRS,MELE) C SEGSUP NOTYPE IF (IERR.NE.0) GOTO 9990 & MOGRAD,MELE) C IF(MFR.EQ.3.OR.MFR.EQ.9)THEN IF(IPGRAF.NE.0)THEN NBTYPE=1 SEGINI NOTYPE MOTYPE=NOTYPE TYPE(1)='REAL*8' SEGSUP NOTYPE IF (IERR.NE.0) GOTO 9990 & MOGRAF,MELE) C ELSE MOTERR(1:8)='MCHAML ' GO TO 9990 ENDIF ENDIF C C RECHERCHE DE LA TAILLE DES MELVAL A ALLOUER C N1PTEL=NBGS N1EL=NBELEM NBPTEL=N1PTEL NEL=N1EL C C CREATION DU MCHAML DE LA SOUS ZONE C N2=1 SEGINI MCHAML ICHAML(ISOUSs)=MCHAML NOMCHE(1)='SCAL' TYPCHE(1)='REAL*8' N2PTEL=0 N2EL=0 SEGINI MELVAL IELVAL(1)=MELVAL C C ELEMENTS MASSIFS ET ELEMENTS COQUES EPAISSES C IF(MFR.EQ.1.OR.MFR.EQ.31.OR.MFR.EQ.5.OR.MFR.EQ.63)THEN C C BOUCLE SUR LES ELEMENTS C DO 600 IB=1,NBELEM C C BOUCLE SUR LES POINTS DE GAUSS C DO 700 IGAU=1,NBPTEL C C ON RECUPERE LES CONTRAINTES C MPTVAL=IVASTR DO 710 ICOMP=1,NSTR MELVAL=IVAL(ICOMP) IBMN=MIN(IB,VELCHE(/2)) IGMN=MIN(IGAU,VELCHE(/1)) STRESS(ICOMP)=VELCHE(IGMN,IBMN) 710 CONTINUE C C ON RECUPERE LES GRADIENTS C MPTVAL=IVAGRA DO 720 ICOMP=1,NGRAD MELVAL=IVAL(ICOMP) IBMN=MIN(IB,VELCHE(/2)) IGMN=MIN(IGAU,VELCHE(/1)) GRADI(ICOMP)=VELCHE(IGMN,IBMN) 720 CONTINUE C C CALCUL DE LA DENSITE DE TRAVAIL C IF (MFR.EQ.1.OR.MFR.EQ.31.OR.MFR.EQ.63) THEN C* <=> IF (MFR.NE.5) THEN WO=STRESS(1)*GRADI(1)+STRESS(2)*GRADI(5)+ 1 STRESS(3)*GRADI(9)+STRESS(4)*(GRADI(2)+GRADI(4))+ 2 STRESS(5)*(GRADI(3)+GRADI(7))+ 3 STRESS(6)*(GRADI(6)+GRADI(8)) ELSE WO=STRESS(1)*GRADI(1)+STRESS(2)*GRADI(5)+ 1 STRESS(3)*(GRADI(2)+GRADI(4))+ 2 STRESS(4)*(GRADI(3)+GRADI(7))+ 3 STRESS(5)*(GRADI(6)+GRADI(8)) ENDIF C C STOCKAGE C MELVAL=IELVAL(1) IBMN=MIN(IB,VELCHE(/2)) VELCHE(IGAU,IBMN)=WO C 700 CONTINUE C 600 CONTINUE C C ELEMENTS COQUES MINCES C ELSEIF(MFR.EQ.3.OR.MFR.EQ.9)THEN IF(IFOUR.EQ.2)THEN C C BOUCLE SUR LES ELEMENTS C DO 800 IB=1,NBELEM C C BOUCLE SUR LES POINTS DE GAUSS C DO 900 IGAU=1,NBPTEL C C ON RECUPERE LES CONTRAINTES C MPTVAL=IVASTR DO 910 ICOMP=1,NSTR MELVAL=IVAL(ICOMP) IBMN=MIN(IB,VELCHE(/2)) IGMN=MIN(IGAU,VELCHE(/1)) STRESS(ICOMP)=VELCHE(IGMN,IBMN) 910 CONTINUE C C ON RECUPERE LES GRADIENTS C MPTVAL=IVAGRA DO 920 ICOMP=1,NGRAD MELVAL=IVAL(ICOMP) IBMN=MIN(IB,VELCHE(/2)) IGMN=MIN(IGAU,VELCHE(/1)) GRADI(ICOMP)=VELCHE(IGMN,IBMN) 920 CONTINUE C C ON RECUPERE LES GRADIENTS DE FLEXION C MPTVAL=IVAGRF DO 930 ICOMP=1,NGRAF MELVAL=IVAL(ICOMP) IBMN=MIN(IB,VELCHE(/2)) IGMN=MIN(IGAU,VELCHE(/1)) GRADF(ICOMP)=VELCHE(IGMN,IBMN) 930 CONTINUE C C CALCUL DE LA DENSITE DE TRAVAIL C IF(MFR.EQ.3)THEN WO=STRESS(1)*GRADI(1)+STRESS(2)*GRADI(5)+ 1 STRESS(3)*(GRADI(2)+GRADI(4))+STRESS(4)*GRADF(1)+ 2 STRESS(5)*GRADF(5)+STRESS(6)*(GRADF(2)+GRADF(4)) ELSE WO=STRESS(1)*GRADI(1)+STRESS(2)*GRADI(5)+ 1 STRESS(3)*(GRADI(2)+GRADI(4))+STRESS(4)*GRADF(1)+ 2 STRESS(5)*GRADF(5)+STRESS(6)*(GRADF(2)+GRADF(4))+ 3 STRESS(7)*(GRADI(3)+GRADI(7))+ 4 STRESS(8)*(GRADI(6)+GRADI(8)) ENDIF C C STOCKAGE C MELVAL=IELVAL(1) IBMN=MIN(IB,VELCHE(/2)) VELCHE(IGAU,IBMN)=WO C 900 CONTINUE C 800 CONTINUE C ELSE C C OPTION NON DISPONIBLE C GO TO 9990 ENDIF C ELSE C C OPTION NON DISPONIBLE C GO TO 9990 ENDIF C C DESACTIVATION DES SEGMENTS C IF(ISUP1.EQ.1)THEN ELSE ENDIF * IF(ISUP2.EQ.1)THEN ELSE ENDIF * IF(IPGRAF.NE.0)THEN IF(ISUP3.EQ.1)THEN ELSE ENDIF ENDIF * MELVAL=IELVAL(1) * NOMID=MOSTRS if(lsupco)SEGSUP NOMID NOMID=MOGRAD if(lsupgd)SEGSUP NOMID IF(IPGRAF.NE.0)THEN NOMID=MOGRAF if(lsupgf)SEGSUP NOMID ENDIF * * 500 CONTINUE if( n1.ne.isouss) then n1=isouss segadj mchelm endif IRET = 1 IPCHE4 = MCHELM * RETURN * * ERREUR DANS UNE SOUS ZONE, DESACTIVATION ET RETOUR * 9990 CONTINUE * IF(ISUP1.EQ.1)THEN ELSE ENDIF * IF(ISUP2.EQ.1)THEN ELSE ENDIF * IF(IPGRAF.NE.0)THEN IF(ISUP3.EQ.1)THEN ELSE ENDIF ENDIF IF(IELVAL(1).NE.0)THEN MELVAL=IELVAL(1) SEGSUP,MELVAL ENDIF * IF(NSTR.NE.0)THEN NOMID=MOSTRS if(lsupco)SEGSUP NOMID ENDIF * IF(NGRAD.NE.0)THEN NOMID=MOGRAD if(lsupgd)SEGSUP NOMID ENDIF * IF(NGRAF.NE.0)THEN NOMID=MOGRAF if(lsupgf)SEGSUP NOMID ENDIF * IF(ICHAML(ISOUSs).NE.0)SEGSUP,MCHAML ISOU=ISOUS-1 IF(ISOU.GE.1)THEN DO 9996 IO=1,ISOU MCHAML=ICHAML(ISOU) SEGACT,MCHAML MELVAL=IELVAL(1) SEGSUP,MELVAL SEGSUP,MCHAML 9996 CONTINUE ENDIF * 9991 CONTINUE SEGSUP,MCHELM * IRET = 0 IPCHE4 = 0 * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales