aviso
C AVISO SOURCE OF166741 24/05/02 21:15:02 11928 C > VCPCHA,VCHC,NISO,NCOUMA,VCHMIN,VCHMAX,MLREEL,MCARA, > NCOMP,LCOMP,COMPCH,choico) CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C Préparation du tracé des isovaleurs d un objet c de type CHPOINT ou CHAMELEM C C Création C AOUT 85 C C Modifications : C PM 09/11/2007 : C . ne conserve que le nb d'isovaleurs admissibles C si liste d'isovaleurs imposées C . accepte une liste d'isovaleurs non croissante C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C IMPLICIT INTEGER(I-N) SEGMENT VCPCHA(nbpts) -INC CCREEL -INC PPARAM -INC CCOPTIO -INC SMELEME -INC SMMODEL -INC SMCHPOI -INC SMCOORD -INC SMLREEL -INC SMCHAML -INC SMLMOTS logical egar4 REAL VCHC DIMENSION VCHC(*) c BP : indesou doit etre capable d'accueillir tous les nbsous modeles SEGMENT indesou(nbinde) * tableau des noms de composantes (chamelem) CHARACTER*(*) COMPCH(*) CHARACTER*(LOCOMP) CHOISI INTEGER CHOICO INTEGER NISOD C NISO = NISOD DO I=1,VCPCHA(/1) VCPCHA(I)=0 ENDDO * Cas du MCHAML * ============= IF (MCHAM.NE.0) THEN * Si ce sont des contraintes, on rajoute le Von Mises MCHELM=MCHAM SEGACT MCHELM IUN=1 DO IU=1,ICHAML(/1) MCHAML=ICHAML(IU) SEGACT MCHAML IF(IELVAL(/1).NE.1) IUN=0 ENDDO IF (TITCHE.EQ.'CONTRAINTES'.AND.IUN.NE.1) THEN C Petit traitement pour retirer JOI1 du calcul de VMIS MMODEL=IPMO1 SEGACT,MMODEL N1=KMODEL(/1) SEGINI,MMODE1 NN1=0 DO 3 IMO=1,N1 IMODEL=KMODEL(IMO) SEGACT,IMODEL IF(INFELE(13).EQ.75) GOTO 3 NN1=NN1+1 MMODE1.KMODEL(NN1)=IMODEL 3 CONTINUE IF(NN1.EQ.0) THEN SEGSUP,MMODE1 ELSE N1=NN1 SEGADJ,MMODE1 IPMO1=MMODE1 isouc=1 IF (IERR.NE.0) RETURN SEGACT MCHEL1 DO 5 ISOUS=1,MCHEL1.IMACHE(/1) MCHAML=MCHEL1.ICHAML(ISOUS) SEGACT MCHAML*MOD NOMCHE(1)='VONMISES' 5 CONTINUE MCHELM=MCHELO ENDIF ENDIF * On cree le MELEME a tracer * On stocke les MELVAL dans LISREF (très astucieux) SEGACT MCHELM NBSOUS=IMACHE(/1) NBREF=NBSOUS NBNN=0 NBELEM=0 SEGINI MELEME ITYPEL=0 DO ISOUS=1,NBSOUS LISOUS(ISOUS)=IMACHE(ISOUS) ENDDO nbinde=NBSOUS segini,indesou * kich : pour des modeles heterogenes (ex massif + poutre) pb de trace ksou = 0 DO ISOUS=1,NBSOUS IF (INFCHE(ISOUS,2).EQ.1.AND.INFCHE(ISOUS,6).NE.1) THEN * pas un chamelem aux noeuds RETURN ENDIF MCHAML=ICHAML(ISOUS) SEGACT MCHAML * Constitution de la liste des noms de composantes COMPCH * kich : modif on crée une liste pour l ensemble du MCHELM * NCOMP=0 CHOISI=' ' IF (LCOMP.NE.0) CHOISI=COMPCH(LCOMP) IF (LCOMP.EQ.0) LCOMP=1 DO 25 ICOMP=1,TYPCHE(/2) IF (TYPCHE(1).NE.'REAL*8') GOTO 25 DO JCOMP=1,NCOMP IF (COMPCH(JCOMP).EQ.NOMCHE(ICOMP)) GOTO 25 ENDDO * COMPCH dimensionné à 10 dans PRTRAC IF (NCOMP.EQ.10) GOTO 25 NCOMP=NCOMP+1 COMPCH(NCOMP)=NOMCHE(ICOMP) IF (CHOISI.EQ.' ') CHOISI=NOMCHE(ICOMP) 25 CONTINUE IF (NCOMP.EQ.0) THEN * Il faut spécifier un champ par élément avec une seule composante RETURN ENDIF * provisoirement * DO JCOMP=1,NCOMP * kich : c est nomche qu il faut tester DO ICOMP=1,TYPCHE(/2) * IF (COMPCH(JCOMP).EQ.CHOISI) LISREF(ISOUS)=IELVAL(JCOMP) IF (CHOISI.EQ.NOMCHE(ICOMP)) THEN LISREF(ISOUS)=IELVAL(ICOMP) ksou = ksou + 1 indesou(ksou ) = isous ENDIF ENDDO IF (IERR.NE.0) RETURN ENDDO * verifie le meleme do jso = 1 ,ksou jsous = indesou(jso) lisous(jso) = lisous(jsous) lisref(jso) = lisref(jsous) c write(6,*) 'verif', jso, lisous(jso),lisref(jso),lcomp enddo NBSOUS = ksou NBREF = NBSOUS segadj MELEME segsup,indesou * Calcul des extrema DO ISOUS=1,NBSOUS MELVAL=LISREF(ISOUS) IF (MELVAL.NE.0) THEN SEGACT MELVAL DO INN=1,VELCHE(/1) DO IEL=1,VELCHE(/2) VCHMIN=MIN(VCHMIN,REAL(VELCHE(INN,IEL))) VCHMAX=MAX(VCHMAX,REAL(VELCHE(INN,IEL))) ENDDO ENDDO ENDIF ENDDO ENDIF * Cas du CHPOINT * ============== IF (MCHAM.EQ.0) THEN * Récupération des valeurs du champ à tracer SEGACT MELEME SEGACT MCHPOI NSOUPO=IPCHP(/1) if(lcomp.eq.0) then ncomp=0 do isoupo=1,nsoupo msoupo=ipchp(isoupo) segact msoupo do nbpp=1,nocomp(/2) do ncbb=1,ncomp if( compch(ncbb).eq.nocomp(nbpp)) go to 43 enddo * COMPCH dimensionné à 10 dans PRTRAC IF (NCOMP.EQ.10) GOTO 43 ncomp=ncomp+1 compch(ncomp)=nocomp(nbpp) 43 continue enddo enddo lcomp=1 if( (compch(1).eq.'LX '. or . compch (1).eq.'FLX ' ) $ .and. ncomp.ge.2) lcomp=2 endif choisi=compch(lcomp) DO ISOUPO=1,NSOUPO MSOUPO=IPCHP(ISOUPO) SEGACT MSOUPO MPOVAL=IPOVAL SEGACT MPOVAL IPT2=IGEOC SEGACT IPT2 NCC=NOCOMP(/2) do ic=1,ncc if( choisi.eq.nocomp(ic)) go to 44 enddo go to 45 44 continue DO IEL=1,IPT2.NUM(/2) IFOI=IPT2.NUM(1,IEL) VCPCHA(IFOI)=VPOCHA(IEL,IC) ENDDO 45 continue ENDDO * Calcul des extrema IPT1=MELEME DO I=1,MAX(1,LISOUS(/1)) IF (LISOUS(/1).NE.0) IPT1=LISOUS(I) SEGACT IPT1 DO J=1,IPT1.NUM(/1) DO K=1,IPT1.NUM(/2) IPOIT=IPT1.NUM(J,K) VCHMIN=MIN(VCHMIN,REAL(VCPCHA(IPOIT))) VCHMAX=MAX(VCHMAX,REAL(VCPCHA(IPOIT))) ENDDO ENDDO ENDDO ENDIF C * Détermination de la liste d'isovaleurs * ====================================== **-- par défaut IF (ISOTYP.EQ.0) THEN NISOMA=NCOUMA ELSE NISOMA=NCOUMA-1 ENDIF IF (NISO.LE.0.OR.NISO.GT.NISOMA) NISO=NISOMA *-- d'après un LISTREEL en entrée IF (IERR.NE.0) RETURN IF (MLREEL.EQ.0) GOTO 9800 *PM On s'assure d'avoir une liste croissante SEGINI,MLREE1=MLREEL SEGACT MLREEL * IF (ISOTYP.GT.0) NISO=NISO+1 IF (NISO.LE.0) NISO=NISOMA *PM Limitation du nb d'isovaleurs au nombre de couleurs admissibles IF(NISO.GT.NISOMA) THEN * write(IOIMP,*) 'ajustement à ',nisoma,' réels' JG=NISOMA SEGADJ, MLREE1 * on picore les valeurs parmi la liste entrée DO I=1,JG ENDDO NISO=NISOMA * CALL ERREUR(201) * GOTO 9099 ENDIF *PM PET=-1E30 *PM IF (VCHC(I).LE.PET) THEN *PM* Valeurs non croissantes dans la table *PM CALL ERREUR(211) *PM RETURN *PM ELSE *PM PET=MAX(PET,VCHC(I)) *PM ENDIF ENDDO * Pas nécessaire ? *goo IF (ISOTYP.GT.0) VCHC(NISO)=VCHMAX SEGSUP MLREE1 GOTO 9099 9800 CONTINUE *-- Progression arithmétique entre les extrêmes 9900 CONTINUE C gounand 2018/10/09 C Si la valeur max est approx egale au min, on utilise un VCHMA2 C legerement augmente par rapport à VCHMAX pour creer l'echelle de C valeurs et avoir le champ en bleu. C On ne modifie pas VCHMAX qui est la "vraie" valeur du max et qui C sert ailleurs *ancien IF (VCHMIN.EQ.VCHMAX) NISO=1 *ancien if(abs((VCHMAX - VCHMIN)/VCHMIN).LT.1D-5) NISO = 1 VCHMA2=VCHMAX+(MAX(MAX(ABS(VCHMAX),ABS(VCHMIN))*XSZPRE,XSPETI) $ *NISO*2) ELSE VCHMA2=VCHMAX ENDIF C DO I=1,NISO+1 VCHC(I)=VCHMIN+I*(VCHMA2-VCHMIN)/(NISO+1) ENDDO C On essaie de repérer s'il y a des NaNQ IF (.NOT.(VCHC(1).EQ.VCHC(1))) THEN NISO=1 VCHC(1)=VCHMIN VCHC(2)=VCHMA2 ENDIF * gounand : sorti de aviso.eso NISO est en fait le nombre de * couleurs demandees plutôt que le nombre d'isovaleurs demandees IF (ISOTYP.GT.0) NISO=NISO+1 * Sortie * ====== 9099 CONTINUE END
© Cast3M 2003 - Tous droits réservés.
Mentions légales