fpcoqu
C FPCOQU SOURCE OF166741 24/10/07 21:15:18 12016 *_____________________________________________________________________ * * CALCULE LES FORCES DE PRESSIONS APPLIQUEES SUR DES COQUES * * ENTREES : * --------- * * P VALEUR DE LA PRESSION SI ELLE EST CONSTANTE * IPCHE1 CHPOINT CONTENANT LES VALEURS DES PRESSIONS AUX NOEUDS * IPCHM1 CHAMELEM CONTENANT LES VALEURS DES PRESSIONS AUX NOEUDS * ICONV FLAG DE CONVERSION * IPMODL OBJET AFFECTE SUR LEQUEL S APPLIQUE LA PRESSION * JMLU 1 SI MOT CLE NORMAL * 0 SINON IL FAUT APPELER PRORIE * 0 SI LE MOT CLE NORM A ETE INDIQUE * * SORTIES : * --------- * * IPTFP CHPOINT DES FORCES NODALES EQUIVALENTES * IRET 1 OU 0 SUIVANT SUCCES OU NON *_____________________________________________________________________ IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC CCHAMP -INC SMCOORD -INC SMELEME -INC SMMODEL -INC SMCHAML -INC SMCHPOI -INC SMINTE SEGMENT NOTYPE CHARACTER*16 TYPE(NBTYPE) ENDSEGMENT SEGMENT MPTVAL INTEGER IPOS(NS) ,NSOF(NS) INTEGER IVAL(NCOSOU) CHARACTER*16 TYVAL(NCOSOU) ENDSEGMENT * Segment donnant le pointeur de maillage correcte au MCHAML de * caracteristique apres creation d'un MMODEL SEGMENT JPMAIL INTEGER MAIL1 (NSOUS1) INTEGER MAIL2 (NSOUS1) ENDSEGMENT CHARACTER*8 MOT CHARACTER*(NCONCH) CONM PARAMETER (NINF=3) INTEGER INFOS(NINF) logical ltelq INTEGER ISUPCA DATA MOT/'RIGIDITE'/ IRET = 0 IGEOM= 0 lzero = 0 nbtype = 1 SEGINI,notype notype.TYPE(1) = 'REAL*8 ' MOTYR8 = notype nbrobl = 1 nbrfac = 0 SEGINI,nomid nomid.LESOBL(1) = 'SCAL ' MOSCAL = nomid NHRM=NIFOUR IFLAG=0 IVACAR=0 JPMAIL=0 * CHAMP PAR ELEMENT des CARACTERISTIQUES IPCHE2 = 0 ISUPCA = 0 IF (IERR.NE.0) RETURN * LE FLAG SERT A INDIQUER SI L'ON DOIT OU NON DETRUIRE LE MODELE * EN CAS DE CREATION ( 0 : DESTRUCTION D'UN MMODEL CREE ) IF (IPCHE1.NE.0.OR.IPCHM1.NE.0) THEN * * ON CREE LE MMODEL S'ACCROCHANT AU CHPOINT * * ON CREE L OBJET MAILLAGE CONTENANT TOUS LES POINTS DU CHPOINT * IF (IPCHE1.NE.0) THEN IF (IERR.NE.0) RETURN MCHPOI=IPCHE SEGACT MCHPOI NSOUPO=IPCHP(/1) IPGEOM = 0 DO 1140 I=1,NSOUPO MSOUPO=IPCHP(I) SEGACT MSOUPO IF (IPGEOM.EQ.0) THEN IPGEOM = IGEOC ELSE IPP2 = IGEOC ltelq=.false. IPGEOM = IPPT ENDIF 1140 CONTINUE * * ON CREE L OBJET MAILLAGE CONTENANT TOUS LES POINTS DU CHAMELEM * ELSE CALL NOMC IF (IERR.NE.0) RETURN IF (IERR.NE.0) RETURN MCHEL2=IPCHE SEGACT MCHEL2 DO 1150 I=1,MCHEL2.IMACHE(/1) IMTMP=MCHEL2.IMACHE(I) IF (I.GT.1) THEN ltelq=.false. IPGEOM = IPPT ELSE IPGEOM = IMTMP ENDIF 1150 CONTINUE ENDIF IF (IERR.NE.0) RETURN N1=0 SEGINI MMODEL IPMOD=MMODEL MMODE1=IPMODL NSOUS1=MMODE1.KMODEL(/1) * BOUCLE SUR LES SOUS ZONE GEOMETRIQUES ELEMENTAIRES IRRT=0 DO 50 ISOUS=1,NSOUS1 IMODE1=MMODE1.KMODEL(ISOUS) ITGEOM=IMODE1.IMAMOD IF (IRR.EQ.0) THEN * * ON A VERIFIER L ADHERENCE DU CHPOINT A CE MAILLAGE * IF (IERR.NE.0) THEN SEGSUP MMODEL RETURN ENDIF N1=N1+1 SEGADJ MMODEL * * CREATION DE L'OBJET IMODEL DE CETTE SOUS ZONE * NFOR=IMODE1.FORMOD(/2) NMAT=IMODE1.MATMOD(/2) MN3 =IMODE1.INFMOD(/1) NPARMO=0 nobmod=0 SEGINI IMODEL conmod(1:24)=' ' IMAMOD=IPOGEO NEFMOD=IMODE1.NEFMOD CONMOD=IMODE1.CONMOD IPDPGE=IMODE1.IPDPGE * * CREATION D'UN TABLEAU DE CORRESPONDANCE LE IMAMOD DU * MMODEL (IPMODL) ET DU IMAMOD DU NVX MMODEL QUE L'ON CREE * (UTILISE DANS LE KOMCHA POUR LE MCHAML DE CARATERISTIQUE * POUR LES COQ6 ET COQ8) * IF (NEFMOD.EQ.41.OR.NEFMOD.EQ.56) THEN IF (JPMAIL.EQ.0) SEGINI JPMAIL MAIL1(ISOUS)=ITGEOM MAIL2(ISOUS)=IPOGEO ENDIF DO 47 I=1,MN3 INFMOD(I)=IMODE1.INFMOD(I) 47 CONTINUE CONMOD=IMODE1.CONMOD DO 48 I=1,NFOR FORMOD(I)=IMODE1.FORMOD(I) 48 CONTINUE DO 49 I=1,NMAT MATMOD(I)=IMODE1.MATMOD(I) 49 CONTINUE KMODEL(N1)=IMODEL ELSE * * LE CHPOINT OU CHAMELEM N'ADHERE PAS A CETTE ZONE * IRRT=IRRT+1 ENDIF 50 CONTINUE * IF (NSOUPO.GT.1) THEN MELEME=IPGEOM SEGSUP MELEME ENDIF * IF (IRRT.EQ.NSOUS1) THEN * * L'OBJET MAILLAGE ET LE CHPOINT OU CHAMELEM SONT INCOMPATIBLES * MOTERR(1:8)='MAILLAGE' IF (IPCHE1.NE.0) THEN MOTERR(9:16)='CHPOINT' ELSE MOTERR(9:16)='CHAMELEM' ENDIF MMODEL=IPMOD SEGSUP MMODEL IF (JPMAIL.NE.0) SEGSUP JPMAIL RETURN ENDIF IPMODI=IPMOD ELSE IPMODI=IPMODL IFLAG=1 ENDIF * *-------EN 3D ET DANS LE CAS OU NORM N'A PAS ETE INDIQUE * ON CHARGE PRORIE DE REORIENTER LES ELEMENTS * IF (IDIM.EQ.3.AND.JMLU.EQ.0) THEN MMODE1=IPMODI NSOUS=MMODE1.KMODEL(/1) N1=NSOUS SEGINI MMODEL IPMOD=MMODEL NBELEM=0 NBNN=0 NBREF=0 NBSOUS=NSOUS SEGINI MELEME DO 9 ISOUS=1,NSOUS IMODEL=MMODE1.KMODEL(ISOUS) LISOUS(ISOUS)=IMAMOD 9 CONTINUE * * MAILLAGE A REORIENTER * * * ORIENTATION PRORIE LIT LES DONNEES QUI LE CONCERNE * CALL PRORIE * * MAILLAGE REORIENTE * IF (IERR.NE.0) THEN SEGSUP MMODEL IF (JPMAIL.NE.0) SEGSUP JPMAIL RETURN ENDIF SEGACT MELEME DO 10 ISOUS=1,NSOUS IMODE1=MMODE1.KMODEL(ISOUS) SEGACT IMODE1 NFOR=IMODE1.FORMOD(/2) NMAT=IMODE1.MATMOD(/2) MN3 =IMODE1.INFMOD(/1) NPARMO=0 nobmod=0 SEGINI IMODEL conmod(1:24)=' ' KMODEL(ISOUS)=IMODEL * * IMAMOD REORIENTE * IMAMOD=LISOUS(ISOUS) NEFMOD=IMODE1.NEFMOD CONMOD=IMODE1.CONMOD IPDPGE=IMODE1.IPDPGE * * MISE A JOUR DU TABLEAU DE CORRESONDANCE DES IMAMOD * IF (NEFMOD.EQ.41.OR.NEFMOD.EQ.56) THEN IF (JPMAIL.EQ.0) THEN NSOUS1=NSOUS SEGINI JPMAIL ENDIF IF (IFLAG.EQ.1) MAIL1(ISOUS)=IMODE1.IMAMOD MAIL2(ISOUS)=IMAMOD ENDIF CONMOD=IMODE1.CONMOD DO 1 I=1,NFOR FORMOD(I)=IMODE1.FORMOD(I) 1 CONTINUE DO 2 I=1,NMAT MATMOD(I)=IMODE1.MATMOD(I) 2 CONTINUE DO 3 I=1,MN3 INFMOD(I)=IMODE1.INFMOD(I) 3 CONTINUE IF (IFLAG.NE.1) THEN SEGSUP IMODE1 ENDIF 10 CONTINUE IF (IFLAG.NE.1) SEGSUP MMODE1 IFLAG=0 ELSE IPMOD=IPMODI ENDIF * * EN 2D ET EN 3D , ON VERIFIE QUE 2 ELEMENTS ADJACENTS * ONT LA MEME ORIENTATION * MMODEL=IPMOD DO 11 ISOUS=1,KMODEL(/1) IMODEL=KMODEL(ISOUS) IF (ISOUS.GT.1) THEN IPTGEO=IMAMOD ltelq=.false. IGEOM=IPPT ELSE IGEOM=IMAMOD ENDIF 11 CONTINUE CALL VERSEN IF (IERR.NE.0) GOTO 9990 IF (KMODEL(/1).GT.1) THEN MELEME=IGEOM SEGSUP MELEME ENDIF * * ON TRANSFORME LE CHPOINT DE PRESSION EN CHELEM * IF (IPCHE1.EQ.0.AND.IPCHM1.EQ.0) THEN IF (IERR.NE.0) RETURN MCHEL1=IPCH1 SEGACT MCHEL1 NSOUS=MCHEL1.ICHAML(/1) DO 12 ISOUS=1,NSOUS MCHAM1=MCHEL1.ICHAML(ISOUS) SEGACT MCHAM1 MELVA1=MCHAM1.IELVAL(1) SEGACT MELVA1*MOD N1PTEL=MELVA1.VELCHE(/1) N1EL =MELVA1.VELCHE(/2) DO IB=1,N1EL DO IGAU=1,N1PTEL MELVA1.VELCHE(IGAU,IB)=P ENDDO ENDDO 12 CONTINUE ELSE IF (IPCHE1.NE.0) THEN * * On transforme le CHPOINT en MCHAML aux pts de Gauss pour la rigidite * IF (IERR.NE.0) GOTO 9990 ELSE * * On change eventuellement le support du MCHAML * IPCH1=IPCHE ENDIF * Verification du lieu support du MCHAML de caracteristiques IF (IPCHE2.NE.0) THEN IF (ISUPCA.GT.1) GOTO 9990 ENDIF * ACTIVATION DU MODEL * MMODEL=IPMOD NSOUS=KMODEL(/1) DO 100 ISOUS=1,NSOUS IVAFOR=0 IVASCA=0 IVACAR=0 MOCARA = 0 * * TRAITEMENT DU MODEL * IMODEL=KMODEL(ISOUS) * * ON RECUPERE L INFORMATION GENERALE * IPMAIL = IMAMOD CONM = CONMOD MELE = NEFMOD MELEME = IPMAIL NBELEM = meleme.NUM(/2) NBNN = meleme.NUM(/1) * * INFORMATION SUR L ELEMENT FINI * MFR = imodel.INFELE(13) IPTINT = imodel.INFMOD(5) IPTNOE = imodel.INFELE(12) * IPTNOE = imodel.INFMOD(8) IPPORE=0 IF (MFR.EQ.33) IPPORE=NBNN * * RECHERCHE DU MELVAL DU CHAMELEM DE PRESSION * * CREATION DU TABLEAU INFO IF (IRTD.EQ.0) GOTO 910 * IF (IERR.NE.0) GOTO 910 MPTVAL = IVASCA IPTVPR = IVAL(1) * * CHANGEMENT EVENTUEL DU SUPPORT DANS LE CAS OU UN MCHAML A ETE FOURNI * IF (IPCHM1.NE.0) THEN IF (ISUP2.EQ.4) THEN GOTO 910 ELSE IF (ISUP2.EQ.1) THEN IVPRES = IPTVPR ENDIF ENDIF * * RECHERCHE DES NOMS DE COMPOSANTES * nomid = imodel.LNOMID(2) if (nomid.ne.0) then MOFORC=nomid nfor=lesobl(/2) nfac=0 else write(ioimp,*) 'FPCOQU : MOFORC = 0' endif NCOMP=NFOR IF (IFOUR.EQ.-3) NCOMP=NFOR-3 * * CREATION DU MCHAML DE LA SOUS ZONE * IF (MELE.EQ.27.OR.MELE.EQ.28.OR.MELE.EQ.45.OR.MELE.EQ.93) THEN N1PTEL=3 ELSE IF (MELE.EQ.44) THEN N1PTEL=2 ELSE IF (MELE.EQ.49.OR.MELE.EQ.41.OR.MELE.EQ.56) THEN N1PTEL=NBNN ELSE * * ERREUR L ELEMENT N EST PAS ENCORE IMPLEMENTE * MOTERR(1:4)=NOMTP(MELE) MOTERR(5:12)='FPCOQU ' GOTO 910 ENDIF * N1EL=NBELEM N2PTEL=0 N2EL =0 N2=NCOMP SEGINI MCHAML NS=1 NCOSOU=NCOMP SEGINI MPTVAL IVAFOR=MPTVAL NOMID=MOFORC DO 4 ICOMP=1,NCOMP NOMCHE(ICOMP)=LESOBL(ICOMP) TYPCHE(ICOMP)='REAL*8' SEGINI MELVAL IELVAL(ICOMP)=MELVAL IVAL(ICOMP)=MELVAL 4 CONTINUE *_______________________________________________________________________ * * CALCUL DES FORCES NODALES EQUIVALENTES * DEBRANCHEMENT SUIVANT LE TYPE DES ELEMENTS *_______________________________________________________________________ * IF (MELE.EQ.27.OR.MELE.EQ.28.OR.MELE.EQ.45 1 .OR.MELE.EQ.93) THEN * * ELEMENTS COQ3 , DKT OU DKTC * --------------------------- ELSE IF (MELE.EQ.44) THEN * * ELEMENT COQ2 * ------------ * * TRAITEMENT DU CHAMP DE CARACTERISTIQUES * IF (IFOUR.EQ.-2 .AND.IPCHE2.NE.0) THEN * * CREATION DU TABLEAU INFO * IF (IRTD.EQ.0) GOTO 910 NBROBL=0 NBRFAC=1 SEGINI NOMID LESFAC(1)='DIM3' NCARA=NBROBL NCARF=NBRFAC NCARR=NCARA+NCARF MOCARA = NOMID + INFOS,3,IVACAR) IF (IERR.NE.0) GOTO 910 * IF (ISUP.EQ.1) THEN ENDIF ENDIF * * * ELEMENTS COQ4 * ------------- ELSE IF (MELE.EQ.49) THEN * * ELEMENTS COQ6 OU COQ8 * --------------------- ELSE IF (MELE.EQ.41.OR.MELE.EQ.56) THEN IF (IPCHE2.EQ.0) THEN * Message a affiner write(ioimp,*) 'Manque CARACTERISTIQUES COQ6&COQ8' GOTO 910 ENDIF *____________________________________________________________________ * * TRAITEMENT DES CHAMPS DE CARACTERISTIQUES * CARACTERISTIQUES POUR LES COQ8 ET COQ6 *____________________________________________________________________ * NBROBL=1 NBRFAC=0 SEGINI NOMID LESOBL(1)='EPAI' NCARA=NBROBL NCARF=NBRFAC NCARR=NCARA+NCARF MOCARA=NOMID IF (IFLAG.EQ.0) THEN * * ON RECUPERE LE IMAMOD DU MMODEL D'ORIGINE POUR QUE LE IPMAIL * DONNE CORRESPONDE A CELUI DE IPCHE21 * DO 60 KISOUS=1,NSOUS1 IF (IPMAIL.EQ.MAIL2(KISOUS)) THEN IPMAI1=MAIL1(KISOUS) GOTO 61 ENDIF 60 CONTINUE * * NE DOIT NORMALEMENT JAMAIS SE PRODUIRE * GOTO 910 61 CONTINUE ELSE IPMAI1=IPMAIL ENDIF IF (IERR.NE.0) GOTO 910 IF (ISUPCA.EQ.1) THEN ENDIF ELSE * * ERREUR L ELEMENT N EST PAS ENCORE IMPLEMENTE * MOTERR(1:4)=NOMTP(MELE) MOTERR(5:12)='FPCOQU' GOTO 910 ENDIF * * INITIALISATION DU CHELEM ELEMENTAIRE DES FORCES NODALES * N1=1 L1=6 N3=6 SEGINI,MCHELM IPCHEL=MCHELM mchelm.TITCHE = 'FORCES' mchelm.IFOCHE = IFOUR mchelm.IMACHE(1) = IPMAIL mchelm.CONCHE(1) = CONM mchelm.ICHAML(1) = MCHAML mchelm.INFCHE(1,1) = 0 mchelm.INFCHE(1,2) = 0 mchelm.INFCHE(1,3) = NHRM mchelm.INFCHE(1,4) = IPTINT mchelm.INFCHE(1,5) = 0 mchelm.INFCHE(1,6) = 3 * * ON TRANSFORME LE CHAM/ELEM EN CHAM/POIN * IF (IRET.EQ.0) GOTO 910 IF (ISOUS.GT.1) THEN IF (IRET.EQ.0) GOTO 910 IPTFP=IRET ELSE IPTFP=IPCHPO ENDIF ISOK = 1 910 CONTINUE IF (ISUPCA.EQ.1) THEN ELSE ENDIF MPTVAL = IVASCA IF (mptval.NE.0) SEGSUP,MPTVAL MPTVAL = IVAFOR IF (mptval.NE.0) SEGSUP,MPTVAL NOMID = MOCARA IF (nomid.NE.0) SEGSUP,NOMID * ERREUR DANS UNE SOUS ZONE, DESACTIVATION ET RETOUR IF (ISOK .NE. 1) GOTO 9997 100 CONTINUE IRET = 1 * * FIN : 9997 CONTINUE notype = MOTYR8 SEGSUP,notype nomid = MOSCAL SEGSUP,nomid 9990 CONTINUE IF (JPMAIL.NE.0) SEGSUP,JPMAIL RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales