vecte4
C VECTE4 SOURCE CB215821 24/04/12 21:17:26 11897 C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) *---------------------------------------------------------------* * Creation d'un MVECTE a partir d'un MCHAML en vue * * d'un trace avec des petites fleches * * Largement inspiré de VECTE2 * * * * MCHA1 MCHAML * * MCHA2 MCHAML de CARACTERISTIQUES (coques epaisses) * * MOD1 MMODEL * * AMP coefficient d'amplification (FLOTTANT) * * LMOT0 liste des composantes a visualiser * * LMOT1 liste des couleurs affectees aux composantes * * MVECT0 pointeur sur MVECTE resultat * * * * CREATION , MODIFICATIONS : * * + Benoit Prabel, 01/03/2012 * * + Benoit Prabel, 19/06/2013 : on remplace les "ISUP.EQ.5"* * par des "ISUP.GE.5" ... * *---------------------------------------------------------------* -INC PPARAM -INC CCOPTIO -INC CCGEOME -INC SMCHPOI -INC SMCHAML -INC SMMODEL -INC SMVECTE -INC SMELEME -INC SMINTE -INC SMCOORD -INC SMLMOTS * SEGMENT NOTYPE CHARACTER*16 TYPE(NBTYPE) ENDSEGMENT SEGMENT MPTVAL INTEGER IPOS(NS),NSOF(NS),IVAL(NCOSOU) CHARACTER*16 TYVAL(NCOSOU) ENDSEGMENT SEGMENT INFO INTEGER INFELL(JG) ENDSEGMENT SEGMENT IPPO(NPPO) SEGMENT MWRK1 REAL*8 XEL(3,NBN1) ENDSEGMENT SEGMENT MWRK2 REAL*8 TXR(3,3,NBN1),TH(NBN1) ENDSEGMENT * PARAMETER (NINF = 3) INTEGER INFOS(NINF) DIMENSION XIGAU(3),MOCOMP(3) CHARACTER*(NCONCH) CONM CHARACTER*8 CMATE CHARACTER*4 NOMVEC(6) PARAMETER (LTIT=72) CHARACTER*(LTIT) TITCH1 DATA NOMVEC/'VEC1','VEC2','VEC3','VEC4','VEC5','VEC6'/ c CHARACTER*4 NOMVEC(3) c DATA NOMVEC/'SI11','SI22','SI33'/ ************************************************************************ * Preliminaires ************************************************************************ MVECT0 = 0 SMAX = 0.D0 * MCHELM = MCHA1 IF(ICHAML(/1).EQ.0) THEN RETURN ENDIF * * Verification du support : noeuds ou pdi ? * c write(*,*) 'MCHELM=',MCHELM c write(*,*) 'dim de INFCHE :',INFCHE(/1),INFCHE(/2) c write(*,*) 'INFCHE(1,:)=',(INFCHE(1,iou),iou=1,INFCHE(/2)) ISUP = INFCHE(1,6) NSC = INFCHE(/1) DO 50 ISC=2,NSC ISUP1 = INFCHE(ISC,6) IF (ISUP1.NE.ISUP) ISUP = 0 50 CONTINUE * si ISUP = 1 : MCHAML aux noeuds * si ISUP = 2 : MCHAML au centre de gravite * si ISUP = 3 : MCHAML aux point d integration (rigidite) * si ISUP = 4 : MCHAML aux point d integration (masse) * si ISUP = 5 : MCHAML aux point d integration (stresses) * si ISUP = 6 : MCHAML aux point d integration de T c IF (ISUP.NE.1.AND.ISUP.NE.5.AND.ISUP.NE.6) THEN IF (ISUP.LT.1.OR.ISUP.GT.6) THEN write(IOIMP,*) 'vecte4: Support ISUP=',ISUP RETURN ENDIF c on recupere TITCH1 dimensionné à 72 comme MOCHDE du SMCHPOI LTIT1 = min(LTIT,TITCHE(/1)) TITCH1(1:LTIT1) = TITCHE(1:LTIT1) * liste des composantes NMO0 = 0 MLMOT4 = LMOT0 SEGACT MLMOT4 NLIST = NMO4/idim * le nombre de composantes fournies doit etre un multiple de idim IF((NLIST*IDIM).NE.NMO4) THEN MOTERR(1:8) = 'LISTMOTS' c L'objet %m1:8 n'a pas le bon nombre de composantes c On attend un objet de type %M1:8 de dimension RETURN ENDIF * creation des NLIST nomid correspondants (meme role que IDVEC2) c NBROBL = idim+1 NBROBL = idim NBRFAC = 0 imo4=0 do ilist=1,NLIST SEGINI NOMID MOCOMP(ilist)=NOMID c LESOBL(1) = NOMVEC(ilist) c do iobl=2,NBROBL do iobl=1,NBROBL imo4=imo4+1 enddo c write(6,*)'ilist,LESOBL=',ilist,' ',(LESOBL(iou),iou=1,NBROBL) enddo NCOMP=NBROBL * liste des couleurs NMO = 0 IF (LMOT1.NE.0) THEN MLMOTS = LMOT1 SEGACT MLMOTS if (NMO.ne.NLIST) then write(ioimp,*) 'Incoherence dans la dimension de la liste', & 'des couleurs fournies : On l oublie.' MLMOTS=0 LMOT1=0 NMO=0 endif ENDIF MMODEL = MOD1 NSOUS = KMODEL(/1) ************************************************************************ * Boucle sur les zones du MODELE ************************************************************************ DO 100 ISOU = 1,NSOUS IVACOM = 0 IVAEP = 0 IMODEL = KMODEL(ISOU) IPMAIL = IMAMOD CONM = CONMOD MELE = NEFMOD MELEME = IMAMOD NFOR = FORMOD(/2) NMAT = MATMOD(/2) * * if(infmod(/1).lt.7 .OR. FORMOD(1).EQ.'DIFFUSION') then c CALL ELQUOI(MELE,0,5,IPINF,IMODEL) ISUP5 = MIN(ISUP,5) IF (IERR.NE.0) RETURN INFO = IPINF NBGS = INFELL(4) MFR = INFELL(13) MINTE = INFELL(11) MINTE1 = INFELL(12) segsup info else NBGS = INFELE(4) MFR = INFELE(13) MINTE = INFMOD(ISUP+2) MINTE1 = INFMOD(8) endif * IPMINT = MINTE IF (MFR.EQ.5.AND.MCHA2.EQ.0) THEN MOTERR(1:16) = 'CARACTERISTIQUES' RETURN ENDIF * IF (IRET.EQ.0) GOTO 900 NBPGAU = POIGAU(/1) NBN1 = NUM(/1) NBELE1 = NUM(/2) IF (ISUP.EQ.1) THEN NIPO = NBN1 ELSE NIPO = NBPGAU ENDIF SEGINI MWRK1 NPPO = NIPO * NBELE1 IF (ISUP.GT.1) SEGINI IPPO IF (ISUP.GE.5.AND.MFR.EQ.5) SEGINI MWRK2 * * Listes de composantes attendues * c CALL IDVEC2(IMODEL,1,IDIM,0,CMOT,MOCOMP,NCOMP, c & NLIST,IER1) c IF (IER1.NE.0) THEN c IF (IER1.EQ.1) call erreur(19) c IF (IER1.EQ.2) THEN c moterr(1:4) = CMOT c call erreur(197) c ENDIF c RETURN c ENDIF * IF (NMO.NE.0) THEN IF (LMOT1.NE.0.AND.NLIST.NE.NMO) GOTO 900 ENDIF * c NVEC = NLIST * 2 NVEC = NLIST ID = 1 SEGINI MVECTE c2018 on augmente la taille de MCOORD ici segact mcoord*mod NBPTS1 = nbpts NBPTS=NBPTS1+NPPO SEGADJ,MCOORD NBPTS=NBPTS1 * *======================================================================= * Boucle sur les listes de composantes * DO 150 IC = 1,NLIST c write(6,*) ' ' c write(6,*) '============ ISOU,IC=',ISOU,IC,' ============' NOMID = MOCOMP(IC) IC2=IC c on ecrit pas le noms des composantes, mais de la liste de composante... NOCOVE(IC,1) = NOMVEC(IC) IF (LMOT1.EQ.0) THEN NOCOUL(IC) = IC+1 ELSE ICOUL=IDCOUL+1 NOCOUL(IC) = ICOUL-1 ENDIF c write(6,*) 'NOCOUL=',(NOCOUL(iou),iou=1,NLIST) IGEOV(IC) = 0 * * Creation du MCHPOI puis du MSOUPO et du MPOVAL * NAT = 2 NSOUPO = 1 SEGINI MCHPOI ICHPO(IC) = MCHPOI MTYPOI = 'VECTEUR ' MOCHDE(1:LTIT1) = TITCH1(1:LTIT1) IFOPOI = IFOUR JATTRI(1) = 2 JATTRI(2) = 0 NC = IDIM SEGINI MSOUPO IPCHP(1) = MSOUPO NOCOMP(1) = 'VECX' NOCOMP(2) = 'VECY' IF (IDIM.EQ.3) NOCOMP(3) = 'VECZ' * N = NIPO * NBELE1 SEGINI MPOVAL IPOVAL = MPOVAL * NBNN = 1 NBELEM = N NBSOUS = 0 NBREF = 0 SEGINI IPT1 IGEOC = IPT1 IPT1.ITYPEL = 1 * NBTYPE = 1 SEGINI NOTYPE MOTYPE = NOTYPE TYPE(1) = 'REAL*8' & MOTYPE,1,INFOS,3,IVACOM) SEGSUP NOTYPE IF (IERR.NE.0) GOTO 900 * * Cas des coques epaisses : epaisseur (excentrement) * IF (ISUP.GE.5.AND.MFR.EQ.5) THEN NBROBL = 1 NBRFAC = 0 SEGINI NOMID MOEP = NOMID LESOBL(1) = 'EPAI' NVEC = NBROBL + NBRFAC NBTYPE = 1 SEGINI NOTYPE MOTYPE = NOTYPE TYPE(1) = 'REAL*8' & MOTYPE,1,INFOS,3,IVAEP) SEGSUP NOTYPE ENDIF * IPO = 0 * *---------- Boucle sur les elements ------------------------------ * DO 200 IEL = 1,NBELE1 * * cas general * * coques epaisses IF (ISUP.GE.5.AND.MFR.EQ.5) THEN MPTVAL = IVAEP MELVAL=IVAL(1) DO 201 IP = 1,NBN1 IPMN=MIN(IP ,VELCHE(/1)) IEMN=MIN(IEL,VELCHE(/2)) TH(IP)=VELCHE(IPMN,IEMN) 201 CONTINUE ENDIF * *............. Boucle sur les points supports ............. * DO 300 IPSU = 1,NIPO IPO = IPO + 1 * MPTVAL = IVACOM * DO 350 I1 = 1,IDIM MELVAL = IVAL(I1) IPMN = MIN(IPSU,VELCHE(/1)) IEMN = MIN(IEL ,VELCHE(/2)) COS1 = VELCHE(IPMN,IEMN) VPOCHA(IPO,I1) = COS1 350 CONTINUE * c IF (ISUP.GE.5) THEN IF (ISUP.GT.1) THEN * 1er passage : on calcule les coord du pt d integration IF (IC.EQ.1) THEN IF (ISUP.GE.5.AND.MFR.EQ.5) THEN Z = DZEGAU(IPSU) DO 400 IL = 1,NBN1 400 CONTINUE ELSE DO 410 IL = 1,NBN1 410 CONTINUE ENDIF * * Le pdi est reference dans MCOORD (PROVISOIRE) c2018 NBPTS = nbpts+1 NBPTS=NBPTS+1 c2018 SEGADJ MCOORD XCOOR((NBPTS-1)*(IDIM+1)+1) = XIGAU(1) XCOOR((NBPTS-1)*(IDIM+1)+2) = XIGAU(2) IF (IDIM.EQ.3) XCOOR((NBPTS-1)*(IDIM+1)+3)=XIGAU(3) XCOOR(NBPTS*(IDIM+1)) = 0.D0 IPT1.NUM(1,IPO) = NBPTS IPPO(IPO) = NBPTS * passage suivant : on recupere les coord du pdi ELSE IPT1.NUM(1,IPO) = IPPO(IPO) ENDIF ELSE IPT1.NUM(1,IPO) = NUM(IPSU,IEL) ENDIF 300 CONTINUE *............. fin de Boucle sur les points supports .......... 200 CONTINUE *---------- Fin de Boucle sur les elements ----------------------- 151 CONTINUE 150 CONTINUE * Fin de Boucle sur les composantes *======================================================================= c IC1 = 0 c DO 500 IC2 = NLIST+1,NLIST*2 c IC1 = IC1 + 1 c NOCOVE(IC2,1) = NOMVEC(IC1) c IF (LMOT1.EQ.0) THEN c NOCOUL(IC2) = IC1 + 1 c ELSE c ICOUL=IDCOUL+1 c CALL PLACE(NCOUL,NBCOUL,ICOUL,MOTS(IC1)) c NOCOUL(IC2) = ICOUL-1 c ENDIF c IGEOV(IC2) = 0 c MCHPOI = ICHPO(IC1) c CALL MUCHPO(MCHPOI,-1.D0,ICHP2,1) c ICHPO(IC2) = ICHP2 c 500 CONTINUE * * Desactivation des segments de la zone ISOU * if(MPTVAL.gt.0) segsup,MPTVAL SEGSUP MWRK1 IF (ISUP.GE.5.AND.MFR.EQ.5) SEGSUP MWRK2 IF (ISUP.GE.5) SEGSUP IPPO c NCX = NLIST * 2 NCX = NLIST c IF (CMOT.NE.' ') NCX = 2 DO 101 IMX = 1,NCX AMPF(IMX) = AMP 101 CONTINUE SEGDES MVECTE * IF (MVECT0.EQ.0) THEN MVECT0 = MVECTE c MVECT1 = MVECT0 ELSE MVECT0 = MVECT1 ENDIF c *...................................................................... c segact,MVECT1 c DO i=1,MVECT1.ICHPO(/1) c WRITE(IOIMP,751) MVECT1.AMPF(i),MVECT1.ICHPO(i), c & NCOUL(MAX(0,MIN(NBCOUL-1,MVECT1.NOCOUL(i)))), c & (MVECT1.NOCOVE(i,j),j=1,ID) c ENDDO c 751 FORMAT(2X,G12.5,3X,I8,3X,A4,6X,A4,4X,A4,4X,A4) c *...................................................................... * 100 CONTINUE * 900 CONTINUE END
© Cast3M 2003 - Tous droits réservés.
Mentions légales