vecte2
C VECTE2 SOURCE CB215821 24/04/12 21:17:26 11897 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 * * * * MCHA1 MCHAML de CONTRAINTES PRINCIPALES * * MCHA2 MCHAML de CARACTERISTIQUES (coques epaisses) * * MOD1 MMODEL * * AMP coefficient d'amplification (FLOTTANT) * * CMOT composante a visualiser (MOT) * * LMOT1 liste des couleurs affectees aux composantes * * MVECT0 pointeur sur MVECTE resultat * * * * D. R.-M. mai & juin 1994 * *---------------------------------------------------------------* -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*(*) CMOT * MVECT0 = 0 SMAX = 0.D0 * MCHELM = MCHA1 SEGACT MCHELM * * Verification du support : noeuds ou pdi ? * 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 = 5 : MCHAML aux pdi IF (ISUP.NE.1.AND.ISUP.NE.5) THEN SEGDES MCHELM RETURN ENDIF * NMO = 0 IF (LMOT1.NE.0) THEN MLMOTS = LMOT1 SEGACT MLMOTS ENDIF * MMODEL = MOD1 SEGACT MMODEL NSOUS = KMODEL(/1) * * Boucle sur les zones du MCHAML * DO 100 ISOU = 1,NSOUS IVACOM = 0 IVAEP = 0 IMODEL = KMODEL(ISOU) SEGACT IMODEL IPMAIL = IMAMOD CONM = CONMOD MELE = NEFMOD MELEME = IMAMOD NFOR = FORMOD(/2) NMAT = MATMOD(/2) * * if(infmod(/1).lt.7) then IF (IERR.NE.0) THEN SEGDES IMODEL,MMODEL,MCHELM RETURN ENDIF 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(7) MINTE1 = INFMOD(8) endif * IPMINT = MINTE IF (MFR.EQ.5.AND.MCHA2.EQ.0) THEN MOTERR(1:16) = 'CARACTERISTIQUES' SEGDES IMODEL,MMODEL,MCHELM RETURN ENDIF IF (ISUP.EQ.5.AND.MFR.EQ.5) SEGACT MINTE1 * IF (IRET.EQ.0) GOTO 900 * SEGACT MINTE NBPGAU = POIGAU(/1) SEGACT MELEME NBN1 = NUM(/1) NBELE1 = NUM(/2) IF (ISUP.EQ.1) NIPO = NBN1 IF (ISUP.EQ.5) NIPO = NBPGAU SEGINI MWRK1 NPPO = NIPO * NBELE1 IF (ISUP.EQ.5) SEGINI IPPO IF (ISUP.EQ.5.AND.MFR.EQ.5) SEGINI MWRK2 * * Listes de composantes attendues * & NLIST,IER1) IF (IER1.NE.0) THEN IF (IER1.EQ.2) THEN moterr(1:4) = CMOT ENDIF SEGDES IMODEL,MMODEL,MCHELM RETURN ENDIF * IF (NMO.NE.0) THEN IF ((CMOT.EQ.' '.AND.LMOT1.NE.0.AND.NLIST.NE.NMO).OR. & (CMOT.NE.' '.AND.NMO.NE.1)) GOTO 900 ENDIF * IF (CMOT.EQ.' ') THEN NVEC = NLIST * 2 ELSE NVEC = 2 ENDIF ID = 1 SEGINI MVECTE * * Boucle sur les composantes * DO 150 IC = 1,NLIST NOMID = MOCOMP(IC) SEGACT NOMID IF (CMOT.NE.' '.AND.LESOBL(1).NE.CMOT) GOTO 151 IC2 = IC IF (CMOT.EQ.LESOBL(1)) IC2 = 1 NOCOVE(IC2,1) = LESOBL(1) IF (LMOT1.EQ.0) THEN NOCOUL(IC2) = IC2+1 ELSE ICOUL=IDCOUL+1 NOCOUL(IC2) = ICOUL-1 ENDIF IGEOV(IC2) = 0 * * Creation du MCHPOI puis du MSOUPO et du MPOVAL * NAT = 2 NSOUPO = 1 SEGINI MCHPOI ICHPO(IC2) = MCHPOI MTYPOI = 'VECTEUR ' MOCHDE = 'CONTRAINTES PRINCIPALES' IFOPOI = IFOUR JATTRI(1) = 2 JATTRI(2) = 0 NC = IDIM + 1 SEGINI MSOUPO IPCHP(1) = MSOUPO NOCOMP(1) = 'SIPX' NOCOMP(2) = 'SIPY' IF (IDIM.EQ.3) NOCOMP(3) = 'SIPZ' NOCOMP(IDIM+1) = 'SIGN' * 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.EQ.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 * * IF (ISUP.EQ.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 MELVAL = IVAL(1) IPMN = MIN(IPSU,VELCHE(/1)) IEMN = MIN(IEL ,VELCHE(/2)) SMWW = VELCHE(IPMN,IEMN) IF (SMWW.GE.0.D0) VPOCHA(IPO,IDIM+1) = 0.D0 IF (SMWW.LT.0.D0) VPOCHA(IPO,IDIM+1) = 1.D0 IF (ABS(SMWW).GT.SMAX) SMAX = ABS(SMWW) * DO 350 I1 = 1,IDIM MELVAL = IVAL(1+I1) IPMN = MIN(IPSU,VELCHE(/1)) IEMN = MIN(IEL ,VELCHE(/2)) COS1 = VELCHE(IPMN,IEMN) VPOCHA(IPO,I1) = SMWW * COS1 350 CONTINUE * IF (ISUP.EQ.5) THEN IF (IC2.EQ.1) THEN IF (ISUP.EQ.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) * segact mcoord*mod nbpts=nbpts+1 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 ELSE IPT1.NUM(1,IPO) = IPPO(IPO) ENDIF ELSE IPT1.NUM(1,IPO) = NUM(IPSU,IEL) ENDIF 300 CONTINUE 200 CONTINUE SEGDES MPOVAL,MSOUPO,MCHPOI,IPT1 151 SEGDES NOMID 150 CONTINUE * IC1 = 0 DO 500 IC2 = NLIST+1,NLIST*2 IC1 = IC1 + 1 NOMID = MOCOMP(IC1) SEGACT NOMID IF (CMOT.NE.' '.AND.CMOT.NE.LESOBL(1)) GOTO 501 IF (CMOT.EQ.LESOBL(1)) THEN IC3 = 2 IC1 = 1 MCHPOI = ICHPO(1) ELSE IC3 = IC2 MCHPOI = ICHPO(IC1) ENDIF NOCOVE(IC3,1) = LESOBL(1) IF (LMOT1.EQ.0) THEN NOCOUL(IC3) = IC1 + 1 ELSE ICOUL=IDCOUL+1 NOCOUL(IC3) = ICOUL-1 ENDIF IGEOV(IC3) = 0 ICHPO(IC3) = ICHP2 501 SEGDES NOMID 500 CONTINUE * * Desactivation des segments de la zone ISOU * SEGDES IMODEL,MINTE,MELEME IF (MFR.EQ.5) SEGDES MINTE1 DO 105 I0 = 1,NCOMP IF (IVAL(I0).NE.0) THEN MELVAL = IVAL(I0) SEGDES,MELVAL ENDIF 105 CONTINUE SEGSUP MPTVAL,MWRK1 IF (ISUP.EQ.5.AND.MFR.EQ.5) SEGSUP MWRK2 IF (ISUP.EQ.5) SEGSUP IPPO NCX = NLIST * 2 IF (CMOT.NE.' ') NCX = 2 DO 101 IMX = 1,NCX AMPF(IMX) = AMP 101 CONTINUE SEGDES MVECTE * IF (MVECT0.EQ.0) THEN MVECT0 = MVECTE ELSE MVECT0 = MVECT1 ENDIF * 100 CONTINUE SEGDES MMODEL,MCHELM IF (LMOT1.NE.0) SEGDES MLMOTS RETURN * 900 CONTINUE * RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales