vecte
C VECTE SOURCE OF166741 24/09/27 21:15:28 12018 C------------------------------------------------------------------------- C C Opérateur VECTEUR C ----------------- C C VEC1 = VECT | CHPO1 (FLOT1) (| 'DEPL' | 'FORC' |) (COUL1) ; C | (| LMOT1 |) C | (| MOT1 MOT2 (MOT3 si 3D) |) C | C | CHAM1 (CHAM2) MOD1 (FLOT1) (MOCOMP1) (LISMO1) ; c | c | CHAM1 MOD1 (FLOT1) LCOMP1 (LISMO1); C C Objet : C _______ C C L'opérateur VECT construit un objet de type VECTEUR à partir : C - des composantes d'un champ de vecteurs, C - d'un champ par éléments de contraintes principales, C - d'un champ par éléments de variables internes. C C------------------------------------------------------------------------- C C VERIFICATION DE L'EXISTENCE D UN VECTEUR C C------------------------------------------------------------------------- C C PM, 20/03/2007 : prise en compte de la couleur COUL1 C BP, 04/05/2012 : ajout syntaxe 3 (appel a vecte4) C C------------------------------------------------------------------------- SUBROUTINE VECTE IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC CCGEOME -INC CCREEL -INC SMCHPOI -INC SMVECTE -INC SMELEME -INC SMCHAML -INC SMCOORD -INC SMLMOTS CHARACTER*(LOCOMP) NV(3),NOC,CMOT REAL*8 AMP,xmin,xmax,ymin,ymax,zmin,zmax,vmin,vmax LOGICAL LSUPR CHARACTER*4 MOTVEC(2) DATA MOTVEC/ 'DEPL','FORC'/ CHARACTER*(LOCOMP) NU(3) DATA NU/'UX ','UY ','UZ '/ segact,mcoord IF (IERR.NE.0) RETURN * Cas du CHAMELEM * -------------- IF (IRETOU.EQ.0) THEN * Lecture d'un CHAMELEM obligatoirement * de CONTRAINTES PRINCIPALES ou de VARIABLES INTERNES IF (IERR.NE.0) RETURN MCHELM = MCHA1 ICAS = 0 IF (TITCHE.EQ.'CONTRAINTES PRINCIPALES' .OR. & titche.eq.'DEFORMATIONS PRINCIPALE' .or. & TITCHE.EQ.'DEFORMATIONS PRINCIPALES') ICAS = 1 IF (TITCHE.EQ.'VARINTER' .OR. & TITCHE.EQ.'VARIABLES INTERNES') ICAS = 2 c write(*,*) 'ICAS=',ICAS IF (ICAS.EQ.0) THEN ICAS = 3 c Lecture obligatoire des composantes a afficher LMOT0 = 0 IF (IRET.EQ.0) THEN moterr = 'LES COMPOSANTES SONT OBLIGATOIRES POUR LES '// & 'CHAMPS DE TYPE AUTRE QUE "CONTRAINTES '// & 'PRINCIPALES", "DEFORMATIONS PRINCIPALES" OU '// & '"VARIABLES INTERNES"' * L'objet de type %m1:8 n'a pas le bon sous-type MOTERR(1:8) = 'CHAMELEM' RETURN ENDIF ENDIF * Lecture éventuelle d'un CHAMELEM de caractéristiques MCHA2 = 0 IF (IERR.NE.0) RETURN IF (IRET.EQ.1) THEN IF (IERR.NE.0) RETURN MCHELM = MCHA2 IF (TITCHE.NE.'CARACTERISTIQUES') THEN MOTERR(1:16) = 'CARACTERISTIQUES' RETURN ENDIF ENDIF * Lecture du modèle IF (IERR.NE.0) RETURN IPIN=MCHA1 IF(IERR .NE. 0) RETURN IF (MCHA2 .NE. 0) THEN IPIN=MCHA2 IF(IERR .NE. 0) RETURN ENDIF * Lecture du coefficient d'amplification optionnel AMP=1.D0 IF (IERR.NE.0) RETURN * Lecture éventuelle de la composante à conserver IF (ICAS.EQ.1) THEN CMOT = ' ' IF (IERR.NE.0) RETURN ENDIF * Lecture de la liste des couleurs à employer pour chaque composante LMOT1 = 0 IF (IERR.NE.0) RETURN * Création des vecteurs suivant les cas IF (ICAS.EQ.1) IF (ICAS.EQ.2) IF (ICAS.EQ.3) IF (IERR.NE.0) RETURN RETURN ENDIF * Cas du CHPOINT * -------------- *-- Détermination de MLMOT1, listmots des composantes à prendre en compte * On essaie de lire les mot clés 'DEPL' 'FORC' IF (IMOT.NE.0) THEN IF (IERR.NE.0) RETURN IRETOU=1 LSUPR=.TRUE. ELSE * sinon on cherche un listmots de composantes LSUPR=.FALSE. ENDIF IF (IRETOU.NE.0) THEN SEGACT MLMOT1 * Verification du nombre de composantes IF (NM.LT.IDIM) THEN * routine %m1:8 : On voulait un %m9:16 à %i1 composantes au lieu de %i2 . MOTERR(1:8)='VECTE ' MOTERR(9:16)='LISTMOTS' INTERR(1)=IDIM INTERR(2)=NM RETURN ENDIF * Stockage dans la table NV DO K=1,IDIM ENDDO IF (LSUPR) THEN SEGSUP MLMOT1 ELSE SEGDES MLMOT1 ENDIF ELSE * Si pas de listmots (implicite ou explicite), * on lit autant de mots que la dimension KOK=0 DO 9 K=1,IDIM IF (IRETOU.NE.0) THEN KOK=K NV(K)=CMOT ENDIF 9 CONTINUE IF (KOK.GT.0 .AND. KOK.LT.IDIM) THEN * Si le nombre de composantes est insuffisant, c'est qu'elles * n'étaient en fait pas données. On réécrit les mots lus * abusivement pour usage ultérieur DO K=1,KOK CMOT=NV(K) ENDDO ENDIF ENDIF * Et enfin, si aucune spécification, on prend les composantes par * défaut dans la table NU. IF (IRETOU.EQ.0) THEN DO 8 L=1,IDIM NV(L)=NU(L) 8 CONTINUE ENDIF IF (IERR.NE.0) RETURN *-- Lecture de la couleur (valeur par défaut sinon) IF (ICOUL.EQ.0) ICOUL=IDCOUL+1 ICOUL=ICOUL-1 AMP=-xsgran NVEC=1 ID=IDIM SEGINI MVECTE IGEOV(NVEC)=0 ICHPO(NVEC)=MCHPOI AMPF(NVEC)=AMP NOCOUL(NVEC)=ICOUL DO 14 ID=1,IDIM NOCOVE(NVEC,ID)=NV(ID) 14 CONTINUE * Amplification automatique on calcul le coeff if (iretou.eq.0) then idimp1 = idim+1 xmin=xsgran ymin=xsgran zmin=xsgran vmax=-xsgran xmax=-xsgran ymax=-xsgran zmax=-xsgran do 50 i=1,ipchp(/1) msoupo=ipchp(i) meleme=igeoc mpoval=ipoval if (idim.eq.3) then do j=1,num(/2) ip=idimp1*(num(1,j)-1) xmin=min(xcoor(ip+1),xmin) xmax=max(xcoor(ip+1),xmax) ymin=min(xcoor(ip+2),ymin) ymax=max(xcoor(ip+2),ymax) zmin=min(xcoor(ip+3),zmin) zmax=max(xcoor(ip+3),zmax) enddo else if (idim.eq.2) then do j=1,num(/2) ip=idimp1*(num(1,j)-1) xmin=min(xcoor(ip+1),xmin) xmax=max(xcoor(ip+1),xmax) ymin=min(xcoor(ip+2),ymin) ymax=max(xcoor(ip+2),ymax) enddo else ** else if (idim.eq.1) then do j=1,num(/2) ip=idimp1*(num(1,j)-1) xmin=min(xcoor(ip+1),xmin) xmax=max(xcoor(ip+1),xmax) enddo endif do 62 ic=1,vpocha(/2) do 63 iv=1,idim if (nv(iv).ne.nocomp(ic)) goto 63 do 64 j=1,vpocha(/1) vmax=max(vmax,abs(vpocha(j,ic))) 64 continue 63 continue 62 continue 50 continue * if (vmax.le.0.) vmax=1. if (vmax.le.xpetit) vmax=1.d0 if (.not.(vmax.lt.xsgran)) vmax=xsgran ampf(nvec)=max(ampf(nvec),(xmax-xmin)/(vmax*10)) if (idim.ge.2) then ampf(nvec)=max(ampf(nvec),(ymax-ymin)/(vmax*10)) if (idim.ge.3) & ampf(nvec)=max(ampf(nvec),(zmax-zmin)/(vmax*10)) endif endif SEGDES MVECTE c RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales