Télécharger prtrac.eso

Retour à la liste

Numérotation des lignes :

prtrac
  1. C PRTRAC SOURCE CB215821 24/04/12 21:17:00 11897
  2. SUBROUTINE PRTRAC
  3. C=======================================================================
  4. C
  5. C CE SOUS PROGRAMME GERE LES TRACES.
  6. C
  7. C IL COMMENCE PAR FABRIQUER L'ENSEMBLE DES SEGMENTS A TRACER EN
  8. C EXTRAYANT LES POINTS UTILES DE L'ENSEMBLE DES POINTS
  9. C
  10. C PUIS IL APPELE LA PROJECTION ET EFFECTUE LE TRACE.
  11. C
  12. C OPTIONS POSSIBLES
  13. C QUALIFIE = TRACE AVEC LES NOMS D'OBJETS
  14. C NOEUDS = TRACE AVEC LES NUMEROS REELS DE NOEU
  15. C ELEMENTS = TRACE AVEC LES NUMEROS D'ELEMENT PAR
  16. C OBJET ELEMENTAIRE
  17. C COULEUR = TRACE UNIQUEMENT LA COULEUR COURANTE
  18. C OU LA COULEUR CHOISIE
  19. C CACHE = TRACE EN "PARTIES VUES-CACHEES"
  20. C ECLATE = TRACE EN ECLATANT LES ELEMENTS
  21. C PEUT ETRE SUIVI PAR UN COEFFICIENT
  22. C FACE = TRACE EN REPRESENTATION PAR FACETTE
  23. C EXCLUT POUR LE MOMENT LES AUTRES OPTIONS
  24. C COUPE = TRACE EN EXCLUANT DE LA REPRESENTATION LA PARTIE
  25. C SITUE PLUS PRES DE L'OBSERVATEUR QU'UN PLAN DONNE
  26. C SECTION = TRACE DE L'INTERSECTION AVEC UN PLAN DONNE
  27. C CHAMP = AFFICHE LA VALEUR DU CHAMP AU POINT SUPPORT
  28. C
  29. C=======================================================================
  30. C
  31. C Modifications :
  32. C
  33. C NOEL 1984 Trace des DEFORMES
  34. C En ce cas lecture non d'une geometrie mais d'un objet DEFORME
  35. C La seule option permise est CACHE
  36. C
  37. C AOUT 1985 Trace d'ISOVALEUR
  38. C Trace les isovaleurs d'un objet de type CHAMPOINT uniquement
  39. C Par defaut on trace 7 isovaleurs
  40. C OPTION : Si prealablement on a cree un objet avec
  41. C l'operateur 'PROG', on peut tracer le nombre d'isovaleurs
  42. C que l'on desire (7 MAXI)
  43. C
  44. C MARS 1986 Introduction de l'option COUPE limitee a la coupe par
  45. C un plan en 3D uniquement
  46. C
  47. C AOUT 1986 Introduction du trace de vecteurs
  48. C
  49. C 1995 Option 'DIRE' et compagnie P.PEGON JRC-ISPRA
  50. C
  51. C FEV 1999 Augmentation des marges autour du dessin
  52. C
  53. C 09/2003 Modifications (temporaires ?) dans le cas IDIM=1.
  54. C
  55. C OCT. 2007 PM :
  56. C .Retournement axe des isovaleurs / amplitude deformee /
  57. C legende vecteurs, contraintes et fissures
  58. C .Couleur des segments marche avec nouvelles couleurs
  59. C .Du fait du passage a 16 couleurs et de la precision des entiers,
  60. C ajout d'une dimension a KON pour specifier le codage de la
  61. C couleur : 0 = une seule, codage normal (anciennement < 300)
  62. C 1 = Possiblement plusieurs, codage binaire par
  63. C puissance de 2 (anciennement > 300)
  64. C .Des nombres en dur lies au nb de couleurs et a l'indice du noir
  65. C passent en parametres
  66. C .Passage du nb de legendes max des vecteurs a 40 (au lieu de 8)
  67. C .Augmentation du nb de legendes de deformees a NDEFMX=40
  68. C auparavant limite en dur a 7
  69. C .Mauvaise identification des elements Navier-Stokes depuis l'ajout de
  70. C nouveaux elements
  71. C
  72. C DEC 2016 SG :
  73. C Ajout d'une option BOITE pour centrer la vue sur un maillage
  74. C donne
  75. C
  76. C MAR 2017 CB215821 :
  77. C Element de SEGMENT passe a la SUBROUTINE AMPINT
  78. C
  79. C=======================================================================
  80. C
  81. C REMARQUES :
  82. C
  83. C Limitation a NLEGMX du nombre de legendes de vecteurs
  84. C
  85. C=======================================================================
  86. C
  87. C VARIABLES :
  88. C
  89. C ICHL : tableau des numero de couleur a prendre pour les deformees
  90. C
  91. C=======================================================================
  92. IMPLICIT INTEGER(I-N)
  93.  
  94. EXTERNAL LONG
  95. -INC CCREEL
  96. -INC PPARAM
  97. -INC CCOPTIO
  98. -INC CCGEOME
  99. -INC SMELEME
  100. POINTEUR IPTETI.MELEME
  101. -INC CCNOYAU
  102. -INC CCASSIS
  103. -INC SMDEFOR
  104. -INC SMCHPOI
  105. -INC SMVECTE
  106. -INC SMMODEL
  107. -INC SMCOORD
  108. -INC CCTRACE
  109. -INC SMANNOT
  110. C Pointeur de sauvegarde du maillage en DIMEnsion 1
  111. POINTEUR ICOORSAV.MCOORD
  112. SEGMENT sxcord
  113. real XCORD(IDIM,ITE)
  114. endsegment
  115. SEGMENT ICPR(nbpts)
  116. SEGMENT JCPR(nbpts)
  117. SEGMENT VCPCHA(nbpts)
  118. SEGMENT IVU(ITE)
  119. SEGMENT NTSEG(LTSEGS)
  120. SEGMENT KON(3,NBCON,NMAX)
  121. SEGMENT XPROJ(3,ITE)
  122. SEGMENT XPRO2(3,ITE)
  123. SEGMENT KXPRO2(NVEC)
  124. SEGMENT KABEL(0)
  125. SEGMENT KABCOR(0)
  126. SEGMENT LABCO2(3,0)
  127. SEGMENT KABEL2(0)
  128. SEGMENT KABCO3(0)
  129. SEGMENT LABCO3(3,0)
  130. SEGMENT KABCO2(2,0)
  131. SEGMENT ICOR2(0)
  132. SEGMENT KABCPR(0)
  133. SEGMENT KABCP2(0)
  134. SEGMENT MCOUP(0)
  135.  
  136. LOGICAL COUPE,ZDATE,ZCHAM,ZBOIT,ZNOLE
  137. LOGICAL LTELQ
  138. C LOGICAL ZLEGI
  139. REAL DDEC,PDDEC,PYB
  140.  
  141. SEGMENT SDEF
  142. REAL AMPIMP(NDEF)
  143. ENDSEGMENT
  144.  
  145. REAL XMINT,XMAXT,YMINT,YMAXT,ZMINT,ZMAXT
  146. REAL XMIN ,XMAX ,YMIN ,YMAX ,ZMIN ,ZMAX
  147. REAL VCHC(70)
  148. CHARACTER TXTIT*72
  149. CHARACTER*(LOCOMP) TXISO,VALISO
  150. CHARACTER*72 TITRY,MONMES
  151. CHARACTER*8 TXT
  152. CHARACTER*7 FMTX
  153. CHARACTER*64 ABCDEF
  154. CHARACTER*12 ZONE
  155. LOGICAL KLIEN
  156. CHARACTER*(LOCHAI) TXANNO
  157. DIMENSION TRX(6),TRY(6),TRZ(6)
  158. CHARACTER*13 LEGEND(10)
  159. PARAMETER (NCOMPC=10)
  160. CHARACTER*(LOCOMP) COMPCH(NCOMPC)
  161. REAL LLCAR,HHCAR
  162. CHARACTER*10 TMPCAR
  163. CPM NBCOUL-1 au lieu de 8, et IPUIS2
  164. CPV NBCOUL pas connu a la compilation => valeur numerique
  165. INTEGER ICHC(0:30 ),ICHCS(0:30 ),ITEST(0:30 ),
  166. & IPUIS2(0:30 )
  167. PARAMETER (NDEFMX=40)
  168. INTEGER ICHL(NDEFMX)
  169. C+PP (DIRE et FACB et FSDB)
  170. PARAMETER (ISOPT=22)
  171. CHARACTER*4 MSOPT(ISOPT),MOVE(6)
  172. DIMENSION diloc(3)
  173. C+PP
  174. DIMENSION XTR(40),YTR(40),ZTR(40)
  175. DIMENSION PX(4),PY(4)
  176. LOGICAL VALEUR,FENET,BLOCAG,INWDS,INWDS2,CROIX
  177. C probleme optimiseur sur rs6K
  178. SAVE NTSEG
  179. REAL*8 XXX
  180. dimension cgrav(3),axez(3)
  181. C pour les traces de legendes de vecteurs
  182. PARAMETER (NLEGMX=40)
  183. DIMENSION NVCOL(NLEGMX),VAMPF(NLEGMX)
  184. CHARACTER*4 NVLEG(3,NLEGMX)
  185. C+PP + option DIRE et divers FACE
  186. LOGICAL ldire, lndegr, lblanc
  187. C BERTIN: ajout de variable
  188. REAL XB,YB,ZB,XE,YE,ZE,OEBA,XM,YM,ZM,BARY(3),XU,YU,ZU
  189. REAL A,B,C,YHAUT,XHAUT
  190. INTEGER ZCOM,AB,BA,I,K,ISOVU
  191. CHARACTER*72 BUFFER,TIME
  192. CHARACTER*10 VALCH
  193. CHARACTER*4 MODEC(3)
  194. C SG tableau contenant les pointeurs sur tous les maillages lus
  195. PARAMETER(NMAXLU=3)
  196. C IMAILU : index dans le tableau LMAILU
  197. C NMAILU : nombre de maillage effectivent lus
  198. INTEGER IMAILU,NMAILU
  199. INTEGER LMAILU(NMAXLU)
  200. C SG 20160420 dans le coloriage des segments
  201. C icoul : couleur courante (non definie = -3)
  202. C kcoul : couleur voulue
  203. C le but est de n'appeler chcoul que si qqch va etre trace
  204. integer icoul,kcoul
  205. C
  206. REAL BLOK
  207. C+PP
  208. DATA ABCDEF( 1:32)/'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef'/
  209. DATA ABCDEF(33:64)/'ghijklmnopqrstuvwxyz0123456789&@'/
  210. C PP + option DIRE et divers FACE
  211. DATA MSOPT/'QUAL','NOEU','ELEM','CACH','ECLA','COUL','FACE',
  212. * 'COUP','ANIM','OSCI','ARET','TITR','LEGE','NCLK','SECT',
  213. * 'DIRE','FACB','FSDB','DATE','CHAM','BOIT','NOLE'/
  214. DATA MOVE/'SI11','SI22','SI33','FIS1','FIS2','FIS3'/
  215. cbp espacement des legendes des isovaleur (-> nombre maxi NDEC=25 par defaut)
  216. DATA MODEC/'VING','DIX ','CINQ'/
  217. DATA AMPLIT/0.D0/
  218.  
  219.  
  220. C Initialisation de COMPCH
  221. DO ICMP=1,NCOMPC
  222. COMPCH(ICMP)=' '
  223. ENDDO
  224.  
  225. C-----------------------------------------------------------------------
  226. C L'operateur TRACER ne marche pas en l'etat pour le cas IDIM=1.
  227. C Astuce : au debut de l'appel a PRTRAC, on recopie le SEGMENT MCOORD
  228. C a 1 DIMENSION dans un segment MCOORD a 2 DIMENSIONs. On effectue
  229. C l'operation inverse lors de la sortie de PRTRAC (GOTO 8900).
  230. C Utiliser IDIMSAV pour savoir si dimension = 1 (0 sinon).
  231. C-----------------------------------------------------------------------
  232. IF (IDIM.EQ.1) THEN
  233. segact mcoord*mod
  234. ICOORSAV=MCOORD
  235. IDIMSAV=IDIM
  236. IDIM=IDIM+1
  237. SEGINI MCOORD
  238. j=IDIM+1
  239. k=IDIMSAV+1
  240. DO i=1,NBPTS
  241. XCOOR((i-1)*j+1)=ICOORSAV.XCOOR((i-1)*k+1)
  242. XCOOR(i*j)=ICOORSAV.XCOOR(i*k)
  243. ENDDO
  244. ELSE
  245. IDIMSAV=0
  246. ENDIF
  247.  
  248. C-----------------------------------------------------------------------
  249. C INITIALISATIONS
  250. C-----------------------------------------------------------------------
  251. sdef =0
  252. ite =0
  253. mlreel=0
  254. LCOMP =0
  255. NCOMP =0
  256. MCARA =0
  257. MCAR1 =0
  258. melemi=0
  259. melei2=0
  260.  
  261. C POUR EVITER DES PROBLEMES UN DEFAUT SUR NCOUMA
  262. NCOUMA=7
  263. BLOCAG=.FALSE.
  264. CROIX =.FALSE.
  265. INWDS =.TRUE.
  266. INWDS2=.TRUE.
  267. ICHISO=0
  268. vchmin= xsgran
  269. vchmax=-xsgran
  270. ipv =0
  271. IPVV =0
  272. melsau=0
  273. mcham =0
  274. VCPCHA=0
  275. IANIM =0
  276. KON =0
  277. ISORT =0
  278. ICLE =0
  279. ITR =1
  280. IVU =0
  281. NTSEG =0
  282. XPROJ =0
  283. XPRO2 =0
  284. KXPRO2=0
  285. IVEC =0
  286. NVECL =0
  287. NBCTS =0
  288. IRETO2=0
  289. KABCOR=0
  290. KABCO2=0
  291. KABCO3=0
  292. LABCO2=0
  293. LABCO3=0
  294. KABEL =0
  295. KABEL2=0
  296. KABCPR=0
  297. KABCP2=0
  298. ICOR2 =0
  299. DIOCA2=REAL(DIOCAD)
  300. TITRY =TITREE
  301. TXTIT =' '
  302. TXISO =' '
  303. VALISO='VAL-ISO'
  304. KCLICK=1
  305. SEGACT MCOORD*MOD
  306. XPRO2 =0
  307. MCOU2 =0
  308. icoup1=0
  309. coupol=-1.
  310. MELEM2=0
  311. MDEFOR=0
  312. NDEF =0
  313. VALEUR=.FALSE.
  314. FENET =.TRUE.
  315. MCOUP =0
  316. NISOD =0
  317. NISO =0
  318. IISO =0
  319. IMEL2 =0
  320. IMEL3 =0
  321. ZCOM =0
  322. ZDATE =.FALSE.
  323. ISOVU =-1
  324. ZCHAM =.FALSE.
  325. C ZLEGI =.FALSE.
  326. ZBOIT =.FALSE.
  327. ZNOLE =.FALSE.
  328. VALCH =' '
  329. XHAUT =0.
  330. YHAUT =0.
  331.  
  332. C INIT DU TABLEAU COMPTEUR DE COULEUR
  333. C on ne compte pas le nb de fois que la couleur DEFA (i=0) apparait
  334. DO i=1,NBCOUL-1
  335. ICHC(i)=0
  336. ENDDO
  337. DO i=1,NDEFMX
  338. ICHL(i)=0
  339. ENDDO
  340. CPM precalcul des puissances de 2 : IPUIS2(IC)=2**(IC-1)
  341. IPUIS2(0)=0
  342. K2=1
  343. DO i=1,NBCOUL-1
  344. IPUIS2(i)=K2
  345. K2=K2*2
  346. ENDDO
  347. IICOL=IDCOUL
  348. IDEF=1
  349. IRESU=0
  350. IECLAT=0
  351. IQUALI=0
  352. INUMNO=0
  353. INUMEL=0
  354. ICACHE=0
  355. IFADES=0
  356. IDEFCO=0
  357. IDEFOR=0
  358. IDEFS =0
  359. KDEFOR=0
  360. ICOUP =0
  361. ISECT =0
  362. IARET =0
  363. NBCAT =0
  364. NBETIQ =0
  365. C+PP + option DIRE et divers FACE
  366. ldire =.FALSE.
  367. lndegr=.FALSE.
  368. lblanc=.FALSE.
  369. C+PP
  370.  
  371. C-----------------------------------------------------------------------
  372. C LECTURE DES PARAMETRES
  373. C-----------------------------------------------------------------------
  374.  
  375. cBP ajout possibilite d'espacer + les legendes avec VING DIX ou CINQ...
  376. CALL LIRMOT(MODEC,3,NDEC2,0)
  377. C PP + option DIRE et divers FACE
  378. 4099 CALL LIRMOT(MSOPT,ISOPT,IR,0)
  379. IF (IR.EQ.0) GOTO 4000
  380. C PP + option DIRE (4016) et divers FACE (4017,4018)
  381. GOTO (4001,4002,4003,4004,4005,4006,4007,4008,4009,4010,4011,
  382. > 4012,4013,4014,4015,4016,4017,4018,4019,4020,4021,4022)
  383. $ ,IR
  384. 4001 IQUALI=1
  385. GOTO 4099
  386. 4002 INUMNO=1
  387. GOTO 4099
  388. 4003 INUMEL=1
  389. GOTO 4099
  390. 4004 ICACHE=1
  391. GOTO 4099
  392. 4005 IECLAT=1
  393. XXX=0.5D0
  394. CALL LIRREE(XXX,0,IRETOU)
  395. XECLAT=REAL(XXX)
  396. GOTO 4099
  397. 4006 IDEFCO=1
  398. CALL LIRMOT(NCOUL,NBCOUL,IICOL,0)
  399. IF (IICOL.EQ.0) IICOL=IDCOUL+1
  400. IICOL=IICOL-1
  401. GOTO 4099
  402. C+PP divers FACE
  403. 4017 lndegr=.TRUE.
  404. 4018 lblanc=.TRUE.
  405. C+PP
  406. 4007 IFADES=1
  407. ICACHE=1
  408. GOTO 4099
  409. 4008 ICOUP=1
  410. GOTO 4099
  411. 4009 IANIM=1
  412. GOTO 4099
  413. 4010 IANIM=2
  414. GOTO 4099
  415. 4011 IARET=1
  416. GOTO 4099
  417. 4012 CALL LIRCHA(TXTIT,0,IRETOU)
  418. IF (IRETOU.EQ.0) TXTIT=' '
  419. GOTO 4099
  420. 4013 CALL LIRCHA(TXISO,0,IRETOU)
  421. IF (IRETOU.EQ.0) TXISO=' '
  422. GOTO 4099
  423. 4014 KCLICK=0
  424. GOTO 4099
  425. 4015 ISECT=1
  426. ICOUP=1
  427. GOTO 4099
  428. C+PP + option DIRE (4016)
  429. 4016 ldire=.TRUE.
  430. IF (IDIM.NE.3) ldire=.FALSE.
  431. GOTO 4099
  432. 4019 ZDATE=.TRUE.
  433. GOTO 4099
  434. 4020 continue
  435. ZCHAM=.TRUE.
  436. GOTO 4099
  437. 4021 continue
  438. ZBOIT=.TRUE.
  439. GOTO 4099
  440. 4022 continue
  441. ZNOLE=.TRUE.
  442. GOTO 4099
  443. C+PP
  444.  
  445. 4000 CONTINUE
  446.  
  447.  
  448. C ---------------------
  449. C LECTURE de ANNOTATION
  450. C ---------------------
  451. CALL LIROBJ('ANNOTATI',IANNO1,0,IRETAN)
  452.  
  453. IF (IRETAN.NE.0) THEN
  454. CALL ACTOBJ('ANNOTATI',IANNO1,1)
  455. MANNO1 = IANNO1
  456. NBANNO = MANNO1.ICLAS(/1)
  457. DO K=1,NBANNO
  458. ICLAS1 = MANNO1.ICLAS(K)
  459. IF (ICLAS1.EQ.1) THEN
  460. NBCAT = NBCAT+1
  461. ELSEIF (ICLAS1.EQ.2) THEN
  462. NBETIQ = NBETIQ+1
  463. ENDIF
  464. ENDDO
  465. ENDIF
  466.  
  467. * EN SPECIFIANT VALEUR=VRAI, ON MODIFIE LE COMPORTEMENT DE DFENET
  468. * => ON RECUPERERA DANS X1;X2;Y1;Y2 L'EMPLACEMENT DE BASE RESERVE
  469. * DANS LA MARGE A DROITE DU MAILLAGE (UTILISE POUR AFFICHER
  470. * LES ISOVALEURS, L'AMPLITUDE DES DEFORMEES, LES COMPOSANTES
  471. * DES VECTEURS...)
  472. IF (NBCAT.GT.0) VALEUR=.TRUE.
  473.  
  474.  
  475.  
  476. C SP lecture optionnelle du nombre d'isovaleurs demande NISOD
  477. IRET = 0
  478. CALL LIRENT(NISOLU,0,IRET)
  479. IF (IERR.NE.0) RETURN
  480. IF (IRET.EQ.1) NISOD=NISOLU
  481.  
  482. C MODIF POUR AUTORISER RIGIDITE A LA PLACE DE GEOMETRIE
  483. CALL LIROBJ('RIGIDITE',III,0,IRETOU)
  484. IF (IRETOU.EQ.1) THEN
  485. CALL ECRCHA('MAILLAGE')
  486. CALL ECROBJ('RIGIDITE',III)
  487. CALL EXTRAI
  488. ENDIF
  489. C
  490. C SG 2016/11/29 On lit tous les maillages ici car on ne sait pas a
  491. C priori combien on va en avoir. En effet, il peut y en avoir 3 avec
  492. C le deuxième facultatif....
  493. C Par contre, après, on est obligé de changer tous les
  494. C LIROBJ(MAILLAGE) et de gérer les erreurs nous-mêmes
  495. C
  496. IMAILU=1
  497. NMAILU=0
  498. DO JJJ=1,NMAXLU
  499. LMAILU(JJJ)=0
  500. ENDDO
  501. 5555 CONTINUE
  502. CALL LIROBJ('MAILLAGE',IGMAI,0,IGRET)
  503. IF (IGRET.EQ.1) THEN
  504. NMAILU=NMAILU+1
  505. IF (NMAILU.GT.NMAXLU) THEN
  506. CALL ERREUR(5)
  507. RETURN
  508. ENDIF
  509. LMAILU(NMAILU)=IGMAI
  510. GOTO 5555
  511. ENDIF
  512. Cdbg WRITE(IOIMP,*) 'NMAILU=',NMAILU
  513. Cdbg WRITE(IOIMP,*) 'LMAILU=',(LMAILU(JJJ),JJJ=1,3)
  514.  
  515. C SG 2016/11/29 : Le maillage boite est le dernier lu
  516. IF (ZBOIT) THEN
  517. C CALL LIROBJ('MAILLAGE',IMBOIT,1,ireto)
  518. C IF (IERR.NE.0) RETURN
  519. IF (NMAILU.GT.0) THEN
  520. IMBOIT=LMAILU(NMAILU)
  521. LMAILU(NMAILU)=0
  522. CALL CHANGE(IMBOIT,1)
  523. ELSE
  524. MOTERR(1:8)='MAILLAGE'
  525. C 37 2 On ne trouve pas d'objet de type %m1:8
  526. CALL ERREUR(37)
  527. RETURN
  528. ENDIF
  529. ENDIF
  530. C
  531. IF (IDIM.EQ.2.OR.IECLAT.EQ.1) THEN
  532. ICACHE=0
  533. ICOUP=0
  534. ENDIF
  535.  
  536. C Lecture du point d'observation et des points de coupe
  537. IF (IDIM.EQ.3) CALL LIROBJ('POINT',IOEI,0,IRETOU)
  538. IF (ICOUP.EQ.1) THEN
  539. CALL LIROBJ('POINT',ICOUP1,1,IRETO)
  540. CALL LIROBJ('POINT',ICOUP2,1,IRETO)
  541. iob=0
  542. if (iretou.eq.0) iob=1
  543. CALL LIROBJ('POINT',ICOUP3,iob,IRETO)
  544. if (ireto.eq.0) then
  545. icoup3=ioei
  546. ioei=0
  547. endif
  548. IF (IERR.NE.0) GOTO 8900
  549. ENDIF
  550.  
  551. C PP + option DIRE
  552. IF (ICOUP.EQ.1.AND.ldire.AND.IOEI.NE.0) THEN
  553. xno1=0.
  554. xno2=0.
  555. psca=0.
  556. do i=1,3
  557. cgrav(i)=REAL(xcoor((ICOUP1-1)*4+i))
  558. diloc(i)=REAL(xcoor((ICOUP2-1)*4+i)) - cgrav(i)
  559. xno1=xno1+(cgrav(i)-REAL(xcoor((IOEI-1)*4+i)))**2
  560. xno2=xno2+ diloc(i)**2
  561. psca=psca+(cgrav(i)-REAL(xcoor((IOEI-1)*4+i)))*diloc(i)
  562. enddo
  563. xno1=SQRT(xno1*xno2)
  564. IF (xno1.LT.1.D-5) then
  565. C Tache impossible. Probablement donnees erronees
  566. CALL ERREUR(26)
  567. ELSE
  568. if (ABS(psca/xno1).GT.0.5D0) THEN
  569. C Tache impossible. Probablement donnees erronees
  570. CALL ERREUR(26)
  571. ENDIF
  572. ENDIF
  573. DO i=1,3
  574. diloc(i)=diloc(i)/SQRT(xno2)
  575. ENDDO
  576. ELSE
  577. do i=1,3
  578. cgrav(i)=0.
  579. diloc(i)=0.
  580. enddo
  581. ENDIF
  582. C PP
  583. C en l'absence d'oeil specifie, on en met un par defaut
  584. IF (IDIM.EQ.3) THEN
  585. IF (IOEI.NE.0) IOEIL=IOEI
  586. IF (IOEIL.EQ.0) THEN
  587. C il n'y a meme pas d'oeil par defaut
  588. NBPTS=nbpts+1
  589. SEGADJ MCOORD
  590. IOEIL=NBPTS
  591. XCOOR((IOEIL-1)*4+1)= 1.0D6
  592. XCOOR((IOEIL-1)*4+2)=-1.2D6
  593. XCOOR((IOEIL-1)*4+3)= 0.9D6
  594. XCOOR((IOEIL-1)*4+4)= 1
  595. ENDIF
  596. ENDIF
  597. IF (IERR.NE.0) GOTO 8900
  598. IOEINI=IOEIL
  599.  
  600. C-----------------------------------------------------------------------
  601. C LECTURE de VECTEUR et/ou de DEFORME
  602. C-----------------------------------------------------------------------
  603.  
  604. C -VECTEUR ?
  605. MVECTE=0
  606. MVECTS=MVECTE
  607. CALL LIROBJ('VECTEUR ',MVECTE,0,IRETO1)
  608. MVECTS=MVECTE
  609. IF (MVECTE.NE.0) THEN
  610. C SG 2016/11/29 CALL LIROBJ('MAILLAGE',MELEME,1,IRET)
  611. IF (IMAILU.GT.NMAXLU) THEN
  612. CALL ERREUR(5)
  613. RETURN
  614. ELSE
  615. MELEME=LMAILU(IMAILU)
  616. IMAILU=IMAILU+1
  617. IF (MELEME.EQ.0) THEN
  618. MOTERR(1:8)='MAILLAGE'
  619. C 37 2 On ne trouve pas d'objet de type %m1:8
  620. CALL ERREUR(37)
  621. ENDIF
  622. ENDIF
  623. IF (IERR.NE.0) GOTO 8900
  624. SEGACT MVECTE
  625. ENDIF
  626.  
  627. C -DEFORME ?
  628. MDEFOR=0
  629. IF (MVECTE.EQ.0) CALL LIROBJ('DEFORME ',MDEFOR,0,IRETO2)
  630. IDEFOR=IRETO2
  631. IF (IDEFOR.NE.0) THEN
  632. C RECHERCHE UNE SECONDE DEFORMEE (CAS TRACE ARETE )
  633. CALL LIROBJ('DEFORME',MDEFO1,0,IMEL3)
  634. C STOP SI TRACE ARETE DE DEFORME (CAS OU IL EN MANQUE UNE)
  635. IF (IDEFOR.NE.0 .AND. IARET.NE.0 .AND. IMEL3.EQ.0) GOTO 8900
  636. SEGACT MDEFOR
  637. ENDIF
  638.  
  639. C PRENDRE LE BON TITRE SI IL Y A LIEU
  640. MCHPOI=0
  641. IF (MVECTE.NE.0) THEN
  642. MCHPOI=ICHPO(1)
  643. ENDIF
  644. IF (MDEFOR.NE.0) THEN
  645. MCHPOI=ICHDEF(1)
  646. ENDIF
  647. IF (MCHPOI.NE.0) THEN
  648. VALEUR=.TRUE.
  649. SEGACT MCHPOI
  650. * On se fout du titre stocke dans le CHPOINT
  651. * C celui fourni a TRAC qui nous interesse
  652. C IF(MOCHDE(1:12).NE.' ') THEN
  653. C READ (MOCHDE,FMT='(A8)') IPVV
  654. C IF (IPVV.NE.0) THEN
  655. C TITRY=MOCHDE
  656. C ENDIF
  657. C ENDIF
  658. ENDIF
  659.  
  660. C-----------------------------------------------------------------------
  661. C LECTURE D'UN CHPOINT ou d'un MCHAML
  662. C POUR LE TRACE DES ISOVALEURS DE CELUI-CI
  663. C-----------------------------------------------------------------------
  664.  
  665. C MISE A 1 DU FLAG IRETOU POUR INDIQUER CETTE EXISTENCE
  666. CALL LIROBJ('CHPOINT ',MCHPOI,0,IRETO3)
  667. c-----debut du cas ou on n'a pas lu de chpoint : lecture d'un mchaml
  668. IF (IRETO3.EQ.0) THEN
  669. C ICONV=0
  670. CALL LIROBJ('MCHAML ',IPIN,0,IRETO3)
  671. IF (IRETO3.EQ.1) THEN
  672. CALL ACTOBJ('MCHAML ',IPIN,1)
  673. CALL LIROBJ('MMODEL ',IPMO1,1,IRETT1)
  674. CALL ACTOBJ('MMODEL ',IPMO1,1)
  675. IF (IERR.NE.0) GOTO 8900
  676.  
  677. CALL REDUAF(IPIN,IPMO1,MCHA1,0,IR,KER)
  678. IF(IR .NE. 1) CALL ERREUR(KER)
  679. IF(IERR .NE. 0) RETURN
  680.  
  681. C ENLEVER EVENTUELLEMENT LA PARTIE FROTTEMENT DU MODELE et les relations
  682. C de conformite
  683. MMODE1=IPMO1
  684. SEGINI,MMODEL=MMODE1
  685. N1=0
  686. NS1=0
  687. DO 4300 I=1,KMODEL(/1)
  688. IMODEL=KMODEL(I)
  689. SEGACT IMODEL
  690. C FRO3
  691. IF (NEFMOD.EQ.107) GOTO 4300
  692. C FRO4
  693. IF (NEFMOD.EQ.165) GOTO 4300
  694. C MULT
  695. IF (NEFMOD.EQ.22) GOTO 4300
  696. IF (NEFMOD.EQ.259) GOTO 4300
  697. C Navier_stokes
  698. CPM ceux apres 258 ne sont plus du NS
  699. IF (NEFMOD.GE.195.AND.NEFMOD.LE.258) NS1=1
  700. N1=N1+1
  701. KMODEL(N1)=IMODEL
  702. 4300 CONTINUE
  703. SEGADJ MMODEL
  704. IPMO1=MMODEL
  705. C -TRAITEMENT SPECIAL POUR NAVIER_STOKES
  706. IF(NS1.EQ.1) THEN
  707. CALL CHASPG(IPMO1,MCHA1,MCHAM,IRET,1)
  708. IF (IRET.NE.0) MCHAM=MCHA1
  709. ELSE
  710. C -SINON PASSER LES CHAMELEM AUX NOEUDS
  711. CALL CHASUP(IPMO1,MCHA1,MCHAM,IRET,1)
  712. IF (IRET.NE.0) MCHAM=MCHA1
  713. C lecture eventuelle d'un champ de caracteristiques (poutres, etc ...)
  714. CALL LIROBJ('MCHAML ',IPIN,0,IRET)
  715. mcara=IPIN
  716. IF (IRET.EQ.1) THEN
  717. CALL ACTOBJ('MCHAML ',IPIN ,1)
  718.  
  719. CALL REDUAF(IPIN,IPMO1,MCAR1,0,IR,KER)
  720. IF(IR .NE. 1) CALL ERREUR(KER)
  721. IF(IERR .NE. 0) RETURN
  722. CALL CHASUP(IPMO1,MCAR1,MCARA,IRET,1)
  723. ENDIF
  724. ENDIF
  725. C -FIN DE LA DISTINCTION NAVIER_STOKES / AUTRES CAS
  726. C on ne les transforme plus en champoint. On travaille
  727. C directement dessus
  728. C CALL CHAMPO(MCHAM,1,MCHPOI,IY)
  729. C IF(IRET.EQ.0) CALL DTCHAM(MCHAM)
  730. C IF (ICONV.EQ.1) THEN
  731. C CALL DTMODL(IPMO1)
  732. C IF (IRET.EQ.0) CALL DTCHAM(MCHA1)
  733. C ENDIF
  734. ENDIF
  735. IF (IERR.NE.0) GOTO 8900
  736. ENDIF
  737. c-----fin du cas ou on n'a pas lu de chpoint : lecture d'un mchaml
  738.  
  739. C TRACE DES ISOVALEURS ? oui (ICHISO=1) si :
  740. C - il y a effectivement un chpoint ou un mchaml
  741. IF (IRETO3.EQ.1) THEN
  742. ICHISO=IRETO3
  743. cbp VALEUR=.TRUE.
  744. cbp si NO LEgende, alors on ne decale pas
  745. VALEUR=.NOT.ZNOLE
  746. ENDIF
  747. C - il y a au moins 1 deformee qui contient un chpoint
  748. IF (IDEFOR.EQ.1) THEN
  749. SEGACT MDEFOR
  750. NDEF=AMPL(/1)
  751. segini,sdef
  752. DO I=1,NDEF
  753. IF(MDCHP(I).NE.0.OR.MDCHEL(I).NE.0) ICHISO=1
  754. C (fdp) Initialisation des coef d'amplification imposes pour le trace
  755. C a partir de ceux contenus dans les objets deformees
  756. AMPIMP(I)=AMPL(I)
  757. C (fdp) S'il n'y a qu'une deformee a tracer et que l'on a modifie
  758. C l'amplification via l'interface de trace, alors on reprend
  759. C cette valeur saisie
  760. IF ((NDEF.EQ.1).AND.AMPLIT.LT.XSGRAN/2.AND.
  761. > ABS(AMPLIT).GT.XPETIT) AMPIMP(I)=AMPLIT
  762. ENDDO
  763. ENDIF
  764.  
  765.  
  766. C-----------------------------------------------------------------------
  767. C INIT ENVIRONNEMENT GRAPHIQUE
  768. C-----------------------------------------------------------------------
  769.  
  770. C point de rebranchement apres nouveau point de vu
  771. 4210 CONTINUE
  772. NBPTS=nbpts
  773. CALL TREFF
  774. IF(TXTIT.NE.' ') TITRY=TXTIT
  775. CALL TRINIT(25,DIOCA2,DIOCA2,TITRY,0.15,VALEUR,NCOUMA)
  776. CALL TRCLIK(KCLICK)
  777. NVECL=0
  778. C
  779. IF (MDEFOR.EQ.0.AND.MVECTE.EQ.0) GOTO 6000
  780. C---- C'EST UNE DEFORMEE OU UN VECTEUR QUE L'ON VEUT FAIRE -------------
  781.  
  782. C ON ANNULE LES OPTIONS INCOMPATIBLES
  783. IQUALI=0
  784. INUMNO=0
  785. INUMEL=0
  786. IDEFCO=0
  787. IECLAT=0
  788. C IFADES=0 CAS A DISCUTER ????
  789.  
  790. C-----------------------------------------------------------------------
  791. C EXTRAIT DES DEFORMES LE MAILLAGE, LES COORD. POINTS ...
  792. C-----------------------------------------------------------------------
  793. 1234 IF (MDEFOR.NE.0) THEN
  794. CALL CREDEF(KABEL,KABCOR,KABCPR,MDEFOR,LABCO2,sdef )
  795. IF (IMEL3.NE.0) CALL CREDEF(KABEL2,KABCO3,KABCP2,MDEFO1,LABCO3,
  796. > sdef )
  797. ENDIF
  798. IF (MVECTE.NE.0) CALL CREVEC(MELEME,ICPR,KABCOR,LABCO2,MVECTE,0)
  799.  
  800. C-----------------------------------------------------------------------
  801. C CALCUL DU CADRE AVANT DE CYCLER SUR LA SUITE (EN MODIFIANT PROJEC)
  802. C SUR LA DEFORMEE PRINCIPALE
  803. C-----------------------------------------------------------------------
  804.  
  805. C PP + option DIRE
  806. CALL CADRCL(KABCOR,LABCO2,IOEIL,XPROJ,
  807. * 0,XMINT,YMINT,XMAXT,YMAXT,ZMINT,ZMAXT,cgrav,diloc,ldire,axez)
  808. * WRITE(IOIMP,*) 'PRTRAC : XMINT,YMINT,XMAXT,YMAXT,ZMINT,ZMAXT=',
  809. * $ XMINT,YMINT,XMAXT,YMAXT,ZMINT,ZMAXT
  810. C TRACER CARRE FAIT DANS TRINIT SI NECESSAIRE
  811. XMIN=XMINT
  812. XMAX=XMAXT
  813. C XMAX=MAX(XMAXT,XMIN+YMAXT-YMINT,XMIN+ZMAXT-ZMINT)
  814. YMIN=YMINT
  815. YMAX=YMAXT
  816. C YMAX=MAX(YMAXT,YMIN+XMAXT-XMINT,YMIN+ZMAXT-ZMINT)
  817. ZMIN=ZMINT
  818. ZMAX=ZMAXT
  819. C ZMAX=MAX(ZMAXT,ZMIN+XMAXT-XMINT,ZMIN+XMAXT-XMINT)
  820. C Modif des marges
  821. C Ancien :
  822. C XDEC=(XMAX-XMIN)*0.01
  823. C Nouveau :
  824. XDEC=(XMAX-XMIN)*0.1
  825. XMAX=XMAX+XDEC
  826. YMAX=YMAX+XDEC
  827. ZMAX=ZMAX+XDEC
  828. XMIN=XMIN-XDEC
  829. YMIN=YMIN-XDEC
  830. ZMIN=ZMIN-XDEC
  831. IF (IRESU.NE.1) THEN
  832. IF (ZBOIT) THEN
  833. CALL PROJC2(IMBOIT,IOEIL,CGRAV,XBMIN,XBMAX,YBMIN
  834. $ ,YBMAX,ZBMIN,ZBMAX)
  835. XMI=XBMIN
  836. XMA=XBMAX
  837. YMI=YBMIN
  838. YMA=YBMAX
  839. ZMI=ZBMIN
  840. ZMA=ZBMAX
  841. ELSE
  842. XMI=XMIN
  843. XMA=XMAX
  844. YMI=YMIN
  845. YMA=YMAX
  846. ZMI=ZMIN
  847. ZMA=ZMAX
  848. ENDIF
  849. ENDIF
  850. CALL DFENET(XMI,XMA,YMI,YMA,ZMI,ZMA,X1,X2,Y1,Y2,FENET)
  851.  
  852.  
  853. C-----------------------------------------------------------------------
  854. C
  855. C ON BOUCLE SUR LES DEFORMES (OU LES VECTEURS)
  856. C
  857. C-----------------------------------------------------------------------
  858.  
  859. C INITIALISATION de NDEF et NVEC
  860. IF (MDEFOR.NE.0) THEN
  861. SEGACT MDEFOR
  862. NDEF=KABCPR(/1)
  863. C dans le cas isovaleur sur chpoint (ou mchaml) = syntaxe 4,
  864. C 1 seule deformee est utilisee
  865. IF (IRETO3.EQ.1) NDEF=1
  866. IF (IANIM.NE.0) CALL TRANIM(IANIM,NDEF)
  867. ENDIF
  868. IDEFOR=NDEF
  869. KDEFOR=NDEF
  870. IF (MVECTE.NE.0) THEN
  871. SEGACT MVECTE
  872. NVEC=AMPF(/1)
  873. NDEF=1
  874. IDEFOR=NVEC
  875. KDEFOR=0
  876. ENDIF
  877.  
  878. C d'abord on calcule si necessaire le min et max general
  879. vchmin=xsgran
  880. vchmax=-xsgran
  881. NDEB=1
  882. if (mdefor.ne.0.and.ichiso.ne.0.and.mlreel.eq.0)
  883. > CALL vchbor(mdefor,NDEB,NDEF,vchmin,vchmax)
  884. if(iimpi.ge.666) write(ioimp,*) 'vchmin,vchmax=',vchmin,vchmax
  885.  
  886. IDEF=0
  887. C>>>> DEBUT DE LA BOUCLE PRINCIPALE >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  888. 6099 CONTINUE
  889. IDEF=IDEF+1
  890. IF (IDEF.GT.NDEF) GOTO 6100
  891. if(iimpi.ge.666) write(ioimp,*) '------IDEF=',IDEF,' /',NDEF
  892. if(iimpi.ge.666) write(ioimp,*) 'ICHISO,NISO=',ICHISO,NISO
  893.  
  894. c cas animation
  895. IF (IANIM.NE.0) CALL TRIMAG(IDEF)
  896.  
  897. c cas deformee
  898. IF (MDEFOR.NE.0) THEN
  899. VCHC(MIN(NDEFMX,IDEF))=REAL(AMPL(MIN(NDEFMX,IDEF)))
  900. C POUR AFFICHER CORRECTEMENT DEFORME SUR ISOVALEUR
  901. SIAMPL=REAL(AMPL(IDEF))
  902. IF(AMPIMP(IDEF).LT.XSGRAN/2.)SIAMPL=AMPIMP(IDEF)
  903. ICHL(MIN(NDEFMX,IDEF))=JCOUL(MIN(NDEFMX,IDEF))
  904. KSCDEF=JCOUL(MIN(NDEFMX,IDEF))
  905. ENDIF
  906. IF (MDEFOR.NE.0) THEN
  907. ICPR=KABCPR(IDEF)
  908. MELEME=KABEL(IDEF)
  909. SXCORD=KABCOR(IDEF)
  910. ITE=XCORD(/2)
  911. cbp IF (MDCHP(IDEF).NE.0) MCHPOI=MDCHP(IDEF)
  912. cbp IF (MDCHEL(IDEF).NE.0) MCHAM=MDCHEL(IDEF)
  913. cbp IF (MDMODE(IDEF).NE.0) IPMO1=MDMODE(IDEF)
  914. c on ne recupere le chpoint d isovaleur de la deformee
  915. c que si pas de chpoint explicitement fourni
  916. IF (IRETO3.EQ.0) THEN
  917. SEGACT MDEFOR
  918. MCHPOI=MDCHP(IDEF)
  919. MCHAM=MDCHEL(IDEF)
  920. IPMO1=MDMODE(IDEF)
  921. ENDIF
  922. ENDIF
  923. if(iimpi.ge.666) write(ioimp,*) 'MCHPOI=',MCHPOI
  924.  
  925. c recup du MELEME et du KABEL si DEFORMES ou de CREVEC si VECTEURS
  926. IPT1=MELEME
  927. if (ite.eq.0) ITE=ICPR(/1)
  928. C GOTO 6010
  929.  
  930. C---- POINT D'ARRIVEE EN L'ABSENCE DE DEFORMES ET DE VECTEURS ----------
  931. 6000 CONTINUE
  932.  
  933. IISO=0
  934. IF (ICHISO.EQ.1) THEN
  935. cbp NISO=1
  936. cbp on introduit IISO
  937. cbp =1 si il y a un champ d isovaleur pour cette ieme deformee
  938. IF(MCHPOI.ne.0.or.mcham.ne.0) IISO=max(1,NISOD)
  939. C On ne sait indiquer les isovaleurs que sur une seule deformee
  940. C IF (NDEF.GT.1) CALL ERREUR(283)
  941. IF (IERR.NE.0) GOTO 8900
  942. IF (ISOTYP.GT.0.AND.IDIM.EQ.3) ICACHE=1
  943. ENDIF
  944.  
  945. c les operations suivantes ne doivent etre realisee qu'une seule
  946. c fois, sinon on saute en 6011
  947. IF (IDEF.NE.1) GOTO 6011
  948. if (ipv.eq.0) then
  949.  
  950. C-----------------------------------------------------------------------
  951. C LECTURE MAILLAGE PRINCIPAL (sauf cas deformee et chamelem)
  952. C-----------------------------------------------------------------------
  953. IF (IDEFOR.EQ.0.and.mcham.eq.0) THEN
  954. C SG 2016/11/29 CALL LIROBJ('MAILLAGE',MELEME,1,IRETOU)
  955. IF (IMAILU.GT.NMAXLU) THEN
  956. CALL ERREUR(5)
  957. RETURN
  958. ELSE
  959. MELEME=LMAILU(IMAILU)
  960. IMAILU=IMAILU+1
  961. IF (MELEME.EQ.0) THEN
  962. IF (MCHPOI.EQ.0) THEN
  963. CALL ERREUR(21)
  964. RETURN
  965. ENDIF
  966. C Si aucun maillage fourni, on extrait les maillages de POI1
  967. C contenus dans le CHPOINT
  968. CALL ECRCHA('MAIL')
  969. CALL ECROBJ('CHPOINT',MCHPOI)
  970. CALL EXTRAI
  971. CALL LIROBJ('MAILLAGE',MELEME,1,IRETOU)
  972. CCCCCC MOTERR(1:8)='MAILLAGE'
  973. CCCCCC 37 2 On ne trouve pas d'objet de type %m1:8
  974. CCCCCC CALL ERREUR(37)
  975. ENDIF
  976. ENDIF
  977. IF (IERR.NE.0) GOTO 8900
  978. melsau=meleme
  979. ENDIF
  980. C-----------------------------------------------------------------------
  981. C LECTURE EVENTUELLE D'UN 2ND MAILLAGE
  982. C-----------------------------------------------------------------------
  983. C SG 2016/11/29 CALL LIROBJ('MAILLAGE',MELEM2,0,IRETOU)
  984. IF (IMAILU.GT.NMAXLU) THEN
  985. CALL ERREUR(5)
  986. RETURN
  987. ELSE
  988. MELEM2=LMAILU(IMAILU)
  989. IMAILU=IMAILU+1
  990. IRETOU=1
  991. IF (MELEM2.EQ.0) IRETOU=0
  992. ENDIF
  993. IMEL2=IRETOU
  994. IF (IMEL2.EQ.0.AND.IARET.EQ.1.AND.IDEFOR.EQ.0) GOTO 8900
  995. c IF (MDEFOR.EQ.0) then
  996. C mdefos=mdefor
  997. C MDEFOR=MELEME
  998. c endif
  999. CALL REFUS
  1000.  
  1001. endif
  1002. 6011 CONTINUE
  1003.  
  1004. C POUR ETRE L'IDENTITE SUR L'OBJET
  1005.  
  1006. C-----------------------------------------------------------------------
  1007. C INTERPOLATION CAS DES ISO
  1008. C-----------------------------------------------------------------------
  1009.  
  1010. cbp IF (NISO.NE.0) THEN
  1011. IF (ICHISO.EQ.1) THEN
  1012. C ici on rajoute une structure recevant les chamelems
  1013. if(VCPCHA.ne.0) segsup,VCPCHA
  1014. VCPCHA = 0
  1015. if(MCHPOI.ne.0.or.mcham.ne.0) then
  1016. SEGINI VCPCHA
  1017. cbp cas chpoint fourni (a 1 ou plus composantes), on reinitialise
  1018. if (IRETO3.eq.1) then
  1019. vchmin=xsgran
  1020. vchmax=-vchmin
  1021. endif
  1022. CALL AVISO(MELEME,MCHPOI,mcham,ipmo1,NISOD,
  1023. > VCPCHA,VCHC,NISO,NCOUMA,
  1024. > VCHMIN,VCHMAX,MLREEL,MCARA,NCOMP,LCOMP,COMPCH,ISOVU)
  1025. if(iimpi.ge.666) write(ioimp,*) 'AVISO -> NISOD, NISO=',NISOD
  1026. $ ,NISO,' VCHMIN,VCHMAX=',VCHMIN,VCHMAX
  1027. IF (IERR.NE.0) GOTO 8900
  1028. endif
  1029. ENDIF
  1030. if(iimpi.ge.666) write(ioimp,*) 'VCPCHA=',VCPCHA
  1031.  
  1032. C-----------------------------------------------------------------------
  1033. C CAS D'UNE COUPE
  1034. C-----------------------------------------------------------------------
  1035.  
  1036. IF (ICOUP.EQ.1) THEN
  1037. if (melemi.eq.0) melemi=meleme
  1038. if (melei2.eq.0) melei2=melem2
  1039. C write(6 ,*) ' on doit faire une coupe '
  1040. IF (IDEFOR.EQ.0.AND.MVECTE.EQ.0) THEN
  1041. CALL CRCOUP(IOEIL,ICOUP1,ICOUP2,ICOUP3,MELEME,MCOUP,VCPCHA,
  1042. * MELEM2,MCOU2,mcham,isect)
  1043. ELSE
  1044. KABC=KABCOR(IDEF)
  1045. SXCORD=KABC
  1046. SEGACT SXCORD
  1047. NBCTS=XCORD(/2)
  1048. ITE=NBCTS
  1049. C INITIALISATION DE IVU (UN ELEMENT PAR POINT)
  1050. C IVU=1 POINT VU (EN CAS DE COUPE )
  1051. C IVU<>1 POINT PAS VU
  1052. SEGINI IVU
  1053. DO 5000 I=1,ITE
  1054. IVU(I)=1
  1055. 5000 CONTINUE
  1056. CALL CRCOU2(IOEIL,ICOUP1,ICOUP2,ICOUP3,MELEME,MCOUP,VCPCHA,
  1057. * KABC,ICPR,MELEM2,MCOU2,ITE,IVU,mcham,isect)
  1058. ENDIF
  1059. ENDIF
  1060.  
  1061. C 3001 CONTINUE
  1062.  
  1063. C -ON SAUTE CETTE PARTIE SI DEFORMEE OU VECTEURS
  1064. IF (IDEFOR.NE.0.OR.MVECTE.NE.0) GOTO 6010
  1065. C SI MCOUP=0 DECRIT LA VISIBILITE DU DERNIER COMPOSANT DE MELEME
  1066. SEGINI ICPR
  1067. DO 3010 I=1,ICPR(/1)
  1068. ICPR(I)=0
  1069. 3010 CONTINUE
  1070. ITE=0
  1071. SEGACT MELEME
  1072. IPT1=MELEME
  1073. DO 3003 I=1,MAX(1,LISOUS(/1))
  1074. IF (LISOUS(/1).NE.0) THEN
  1075. IPT1=LISOUS(I)
  1076. ENDIF
  1077. SEGACT IPT1
  1078. DO 3005 J=1,IPT1.NUM(/1)
  1079. DO 30051 K=1,IPT1.NUM(/2)
  1080. IPOIT=IPT1.NUM(J,K)
  1081. IF (ICPR(IPOIT).NE.0) GOTO 30051
  1082. ITE=ITE+1
  1083. ICPR(IPOIT)=ITE
  1084. 30051 CONTINUE
  1085. 3005 CONTINUE
  1086. 3003 CONTINUE
  1087. C on complete ICPR avec le 2eme maillage pour que celui ci soit toujours trace
  1088. if (imel2.ne.0) then
  1089. ipt2=melem2
  1090. SEGACT ipt2
  1091. IPT1=ipt2
  1092. DO 3013 I=1,MAX(1,ipt2.LISOUS(/1))
  1093. IF (ipt2.LISOUS(/1).NE.0) THEN
  1094. IPT1=ipt2.LISOUS(I)
  1095. ENDIF
  1096. SEGACT IPT1
  1097. DO 3015 J=1,IPT1.NUM(/1)
  1098. DO 30151 K=1,IPT1.NUM(/2)
  1099. IPOIT=IPT1.NUM(J,K)
  1100. IF (ICPR(IPOIT).NE.0) GOTO 30151
  1101. ITE=ITE+1
  1102. ICPR(IPOIT)=ITE
  1103. 30151 CONTINUE
  1104. 3015 CONTINUE
  1105. 3013 CONTINUE
  1106. endif
  1107. NBCTS=ITE
  1108. DO 5011 I=NBPTS+1,nbpts
  1109. IF (ICPR(I).EQ.0) THEN
  1110. ITE=ITE+1
  1111. ICPR(I)=ITE
  1112. ENDIF
  1113. 5011 CONTINUE
  1114. 6010 CONTINUE
  1115. C -FIN DE LA PARTIE SAUTEE SI DEFORMEE OU VECTEURS
  1116. C
  1117. C EN CAS DE TRACE ECLATE ON PROCEDE DIFFEREMMENT
  1118. IF (IECLAT.EQ.1) GOTO 4200
  1119.  
  1120. C ITE EST LE NOMBRE DE POINTS A TRACER ICPR LE TABLEAU
  1121. C ON VA MAINTENANT INITIALISER ET REMPLIR LE TABLEAU DES CONNECTIONS
  1122. IMELIN=MELEME
  1123. MCOUIN=MCOUP
  1124.  
  1125. C----------------------------------------------------------
  1126. C LE 2ND MAILLAGE DEVIENT MAILLAGE PRINCIPAL - LES POINTS VUS
  1127. C ONT ETE CALCULES SUR LE 1ER MAILLAGE - (IDEM DEFO)
  1128. C----------------------------------------------------------
  1129. IF (IMEL2.NE.0) THEN
  1130. MELEM3=MELEME
  1131. MELEME=MELEM2
  1132. ENDIF
  1133. IF (IMEL2.NE.0) MCOUP =MCOU2
  1134. IF (IMEL3.NE.0) THEN
  1135. MELEM3=KABEL(IDEF)
  1136. MELEME=KABEL2(IDEF)
  1137. C KABCOR=KABCOR(IDEF)
  1138. ICPR=KABCPR(IDEF)
  1139. C LABCO2=LABCO3
  1140. ENDIF
  1141. IPT1=MELEME
  1142. SEGACT MELEME
  1143.  
  1144. C----------------------------------------------------------
  1145. C REALISATION DU TABLEAU DES CONNECTIONS
  1146. C KON(3,VOISIN,NOEUD) :
  1147. C KON(1,V,N)=Numero DU V-IEME NOEUD RELIE PAR UN SEGMENT AU NOEUD N
  1148. C KON(2,V,N)=COULEUR DU V-IEME NOEUD RELIE PAR UN SEGMENT A N
  1149. C Il peut y avoir plusieurs couleurs collationnees en binaire
  1150. C par ajout de puissances de 2
  1151. C KON(3,V,N)=0 si codage couleur direct, 1 si codage binaire
  1152. C RMQ: SI N=NBCONR, RENVOI SUR LISTE DE NOEUDS VOISINS
  1153. C----------------------------------------------------------
  1154. C Pour permettre les isovaleurss sur les poutres, on exclue de ce tableau
  1155. C ce qui vient des SEG2 et SEG3 si on est en isovaleur
  1156. C
  1157. NBCON =9
  1158. NBCONR=NBCON-1
  1159. NMAX =(12*ITE)/NBCON+200
  1160. SEGINI KON
  1161. C MISE A ZERO DU TABLEAU KON
  1162. DO I=1,NMAX
  1163. DO J=1,NBCON
  1164. KON(1,J,I)=0
  1165. KON(2,J,I)=0
  1166. KON(3,J,I)=0
  1167. ENDDO
  1168. ENDDO
  1169.  
  1170. C FABRICATION DU TABLEAU DES CONNECTIONS
  1171. ICHAIN=ITE
  1172. COUPE=.FALSE.
  1173. C Boucle sur les Partitions
  1174. DO 222 IO=1,MAX(1,LISOUS(/1))
  1175. IF (LISOUS(/1).NE.0) THEN
  1176. COUPE=.FALSE.
  1177. IF (IO.EQ.LISOUS(/1).AND.MCOUP.NE.0) COUPE=.TRUE.
  1178. IPT1=LISOUS(IO)
  1179. ENDIF
  1180. SEGACT IPT1
  1181. K=IPT1.ITYPEL
  1182. C PRISE EN COMPTE DES BLOCAGES
  1183. IF (K.EQ.22) BLOCAG=.TRUE.
  1184. IF (K.EQ.259) BLOCAG=.TRUE.
  1185. IF (K.EQ.1) CROIX =.TRUE.
  1186. C poutres+iso on saute
  1187. if(iimpi.ge.666) write(ioimp,*)
  1188. & 'avant goto 222 : ICHISO,NISO,MCHPOI=',ICHISO,NISO,MCHPOI
  1189. cbp if ((k.eq.2.or.k.eq.3).and.niso.ne.0.and.
  1190. if ((k.eq.2.or.k.eq.3).and.IISO.NE.0.and.
  1191. > meleme.ne.melem2) goto 222
  1192. C
  1193. if(iimpi.ge.666) write(ioimp,*)
  1194. & 'remplissage de KON depui IPT1=',IPT1
  1195. IDEP=LPT(K)
  1196. IFIN1=IDEP+2*LPL(K)-2
  1197. IFIN2=IFIN1
  1198. IF (LPL(K).EQ.0) THEN
  1199. IF (LPT(K).EQ.0)THEN
  1200. GOTO 2225
  1201. ELSE
  1202. C Polygone
  1203. IFIN1=IDEP+2*IPT1.NUM(/1)-2
  1204. IFIN2=IFIN1 - 2
  1205. ENDIF
  1206. ENDIF
  1207.  
  1208. IF (IDEFOR.NE.0.AND.MDEFOR.NE.0) SEGACT MDEFOR
  1209. C Boucle sur les elements de la partition
  1210. DO 223 I=1,IPT1.NUM(/2)
  1211. IF (IDEFOR.EQ.0.OR.MVECTE.NE.0.OR.IANIM.NE.0) THEN
  1212. KSCOLI=IPT1.ICOLOR(I)
  1213. C IF (KSCOLI.EQ.0) KSCOLI=IDCOUL
  1214. ELSE
  1215. KSCOLI=KSCDEF
  1216. C+PP couleur par defaut pour les deformees = celle du maillage
  1217. IF (KSCOLI.EQ.0) KSCOLI=IPT1.ICOLOR(I)
  1218. C+PP
  1219. C IF (KSCOLI.EQ.0) KSCOLI=IDCOUL
  1220. ENDIF
  1221. if(iimpi.ge.666) write(ioimp,*) 'KSCOLI=',KSCOLI
  1222. IS=1
  1223. DO 2 J=IDEP,IFIN1,2
  1224. IF (J.LE.IFIN2) THEN
  1225. N1=ICPR(IPT1.NUM(KSEGM(J),I))
  1226. N2=ICPR(IPT1.NUM(KSEGM(J+1),I))
  1227. ELSE
  1228. C Polygone
  1229. N1=ICPR(IPT1.NUM(KSEGM(IFIN2+1),I))
  1230. N2=ICPR(IPT1.NUM(KSEGM(1),I))
  1231. ENDIF
  1232. IF (COUPE) THEN
  1233. C NE FONCTIONNE QUE SUR DES TRI3
  1234. IS=IS*2
  1235. IF (MOD((2*MCOUP(I))/IS,2).EQ.0) GOTO 2
  1236. ENDIF
  1237. NI=N1
  1238. NJ=N2
  1239. IF (N1*N2.EQ.0) GOTO 8
  1240. C Attribution de la couleur au segment correspondant dans KON :
  1241. IPO=0
  1242. 9 CONTINUE
  1243. KSCOL1=KSCOLI
  1244. NII=NI
  1245. 7 DO 4 K=1,NBCONR
  1246. IF (KON(1,K,NI).GT.NJ) GOTO 4
  1247. IF (KON(1,K,NI).LT.NJ) THEN
  1248. KSAUV1=NJ
  1249. KSCOL1=KSCOLI
  1250. KSCOD1=0
  1251. GOTO 5
  1252. ENDIF
  1253.  
  1254. C recherche si KSCOL1 fait partie des couleurs du segment,
  1255. C si oui (JJ=1), deje traite
  1256. C sinon (JJ=0), on l'ajoute a la liste de couleurs
  1257. C et on met a jour celle des segments eventuellement confondus
  1258. JJ=0
  1259. C IF (KSCOL1.EQ.0) KSCOL1=IDCOUL
  1260. CPM IF (KON(2,K,NI).LT.300) KON(2,K,NI)=
  1261. CPM $ 300+(2**(KON(2,K,NI)-1))
  1262. IF (KON(3,K,NI).EQ.0) THEN
  1263. C Passage en binaire si pas deja fait
  1264. KON(3,K,NI)=1
  1265. IK=KON(2,K,NI)
  1266. KON(2,K,NI)=IPUIS2(IK)
  1267. C Il n'y a qu'une seule couleur de codee, facile a tester
  1268. IF (IK.EQ.KSCOL1) JJ=1
  1269. ELSE
  1270. C potentiellement plusieurs couleurs codees, a tester
  1271. CPM ICAL=KON(2,K,NI)-300
  1272. ICAL=KON(2,K,NI)
  1273. CPM (NBCOUL-1) au lieu de 7
  1274. DO II=(NBCOUL-1),KSCOL1,-1
  1275. IF (IPUIS2(II).LE.ICAL) THEN
  1276. IF (II.EQ.KSCOL1) THEN
  1277. JJ=1
  1278. ELSE
  1279. ICAL=ICAL-IPUIS2(II)
  1280. ENDIF
  1281. ENDIF
  1282. ENDDO
  1283. ENDIF
  1284.  
  1285. C Si cette couleur existe, le segment a deja ete traite
  1286. IF (JJ.EQ.1) GOTO 2
  1287.  
  1288. C sinon on ajoute la couleur a la liste binaire de couleurs du segment
  1289. KON(2,K,NI)=KON(2,K,NI)+IPUIS2(KSCOL1)
  1290.  
  1291. C ainsi qu'aux segments confondus eventuels
  1292. 1111 CONTINUE
  1293. DO II=1,NBCONR
  1294. IF (KON(1,II,NJ).EQ.NII) THEN
  1295. KON(2,II,NJ)=KON(2,K,NI)
  1296. KON(3,II,NJ)=KON(3,K,NI)
  1297. GOTO 1113
  1298. ENDIF
  1299. ENDDO
  1300. IF (KON(1,NBCON,NJ).NE.0) THEN
  1301. NJ=KON(1,NBCON,NJ)
  1302. GOTO 1111
  1303. ENDIF
  1304. 1113 CONTINUE
  1305. GOTO 2
  1306. 4 CONTINUE
  1307.  
  1308. C on passe au noeud suivant dans la chaine,
  1309. C ou on l'incremente et on la met a jour si on est arrive au bout
  1310. IF (KON(1,NBCON,NI).NE.0) THEN
  1311. NI=KON(1,NBCON,NI)
  1312. GOTO 7
  1313. ENDIF
  1314. KSAUV1=NJ
  1315. KSCOL1=KSCOLI
  1316. KSCOD1=1
  1317. 301 ICHAIN=ICHAIN+1
  1318. IF (ICHAIN.EQ.NMAX) THEN
  1319. NMAX=NMAX+1000
  1320. SEGADJ KON
  1321. C WRITE (IOIMP,*) 'PRTRAC: KON agrandi'
  1322. ENDIF
  1323. KON(1,NBCON,NI)=ICHAIN
  1324. K=1
  1325. NI=ICHAIN
  1326.  
  1327. C On insere la nouvelle connexion NJ a la place de la
  1328. C connexion actuelle, et on decale le reste d'un cran
  1329. 5 CONTINUE
  1330. KSAUV=KON(1,K,NI)
  1331. KSCOL=KON(2,K,NI)
  1332. KSCOD=KON(3,K,NI)
  1333. C IF (KSCOL1.EQ.0) KSCOL1=IDCOUL
  1334. KON(1,K,NI)=KSAUV1
  1335. KON(2,K,NI)=KSCOL1
  1336. KON(3,K,NI)=KSCOD1
  1337. KSAUV1=KSAUV
  1338. KSCOL1=KSCOL
  1339. KSCOD1=KSCOD
  1340. IF (KSAUV.EQ.0) GOTO 3
  1341. KDEP=K+1
  1342. IF (KDEP.EQ.NBCON) GOTO 302
  1343. 303 CONTINUE
  1344. DO KHE=KDEP,NBCONR
  1345. KSAUV=KON(1,KHE,NI)
  1346. KSCOL=KON(2,KHE,NI)
  1347. KSCOD=KON(3,KHE,NI)
  1348. C IF (KSCOL1.EQ.0) KSCOL1=IDCOUL
  1349. KON(1,KHE,NI)=KSAUV1
  1350. KON(2,KHE,NI)=KSCOL1
  1351. KON(3,KHE,NI)=KSCOD1
  1352. IF (KSAUV.EQ.0) GOTO 3
  1353. KSAUV1=KSAUV
  1354. KSCOL1=KSCOL
  1355. KSCOD1=KSCOD
  1356. ENDDO
  1357. 302 CONTINUE
  1358. IF (KON(1,NBCON,NI).EQ.0) GOTO 301
  1359. NI=KON(1,NBCON,NI)
  1360. KDEP=1
  1361. GOTO 303
  1362. 3 IF (NJ.NE.N2.OR.IPO.EQ.1) GOTO 2
  1363. NI=N2
  1364. NJ=N1
  1365. IPO=1
  1366. GOTO 9
  1367. 2 CONTINUE
  1368. 223 CONTINUE
  1369. 2225 CONTINUE
  1370. 222 CONTINUE
  1371. GOTO 10
  1372. C Operation malvenue. Resultat douteux
  1373. 8 CALL ERREUR(23)
  1374.  
  1375. 10 CONTINUE
  1376.  
  1377. CTC IF (MCOU2.NE.0) THEN
  1378. C NETTOYAGE APRES COUPE
  1379. C SEGSUP MCOUP
  1380. C SEGACT MELEME
  1381. C DO 8802 IO=1,LISOUS(/1)
  1382. C IPT1=LISOUS(IO)
  1383. C SEGSUP IPT1
  1384. C 8802 CONTINUE
  1385. C SEGSUP MELEME
  1386. C ENDIF
  1387. MELEME=IMELIN
  1388. MCOUP =MCOUIN
  1389. C GESTION DU TABLEAU ICPR(COMPTEUR DE COULEUR)
  1390. C ITEST(II) = 1 si la couleur appartient a la liste du point, 0 sinon
  1391. C (= conversion de KON(2,I,J) en tableau)
  1392. C ICHC(I) : nb de segments sur lesquels apparait la couleur I
  1393. C On ramene, si code en binaire, KON(2,.,.) dans l'intervalle
  1394. C [0;NBCOUL-1] en melangeant eventuellement les couleurs des
  1395. C segments confondus
  1396. DO 310 I=1,NBCONR
  1397. DO 3101 J=1,KON(/3)
  1398. CPM on ecrit IK au lieu de KON(2,I,J) pour economiser l'acces memoire
  1399. IK=KON(2,I,J)
  1400. IF (IK.NE.0) THEN
  1401. CPM IF (IK.LE.9) THEN
  1402. IF (KON(3,I,J).EQ.0) THEN
  1403. C KON(2,.,.) est deja code dans l'intervalle [0;NBCOUL-1]
  1404. C soit que ce segment est seul, soit qu'il a deja ete rencontre 1 fois
  1405. ICHC(IK)=ICHC(IK)+1
  1406. ELSE
  1407. C cas ou KON est code en puissances de 2 dans [1;2**(NBCOUL-1)]
  1408. CPM NBCOUL-1 au lieu de 7
  1409. C tablage des couleurs possibles. IK finit a 0
  1410. DO II=1,(NBCOUL-1)
  1411. ITEST(II)=0
  1412. ENDDO
  1413. CPM NBCOUL-1 au lieu de 7
  1414. DO II=(NBCOUL-1),1,-1
  1415. IF (IPUIS2(II).LE.IK) THEN
  1416. IK=IK-IPUIS2(II)
  1417. ITEST(II)=1
  1418. ENDIF
  1419. ENDDO
  1420.  
  1421. C Couleur finale du segment a tracer
  1422. IF (IDEFCO.EQ.1.AND.ITEST(IICOL).EQ.1) THEN
  1423. C Le segment est eligible
  1424. IK=IICOL
  1425. ELSE
  1426. CPM NBCOUL-1 au lieu de 7
  1427. IK=0
  1428. DO II=1,NBCOUL-1
  1429. IF (ITEST(II).EQ.1) THEN
  1430. C si plusieurs couleurs, on les melange
  1431. IF (IK.EQ.0) THEN
  1432. IK=II
  1433. ELSE
  1434. IK=ITABM(IK,II)
  1435. ENDIF
  1436. ENDIF
  1437. ENDDO
  1438. ENDIF
  1439. KON(2,I,J)=IK
  1440. KON(3,I,J)=0
  1441. ICHC(IK)=ICHC(IK)+1
  1442. ENDIF
  1443. ENDIF
  1444. 3101 CONTINUE
  1445. 310 CONTINUE
  1446. SEGDES KON
  1447. IF (IRESU.EQ.6) GOTO 4999
  1448.  
  1449. C POINT D'ARRIVEE SI ECLATE
  1450. 4200 CONTINUE
  1451. segact ICPR
  1452. IF(ITE.EQ.0)RETURN
  1453.  
  1454. * ON AJOUTE LES NOEUDS DES ANNOTATIONS A LA TABLE ICPR
  1455. * AVANT DE CALCULER LA PROJECTION
  1456. IF (NBETIQ.GT.0) THEN
  1457. SEGACT,ICPR*MOD
  1458. DO K=1,NBANNO
  1459. ICLAS1 = MANNO1.ICLAS(K)
  1460. IF (ICLAS1.EQ.2) THEN
  1461. ISEGT1 = MANNO1.ISEGT(K)
  1462. METIQ1 = ISEGT1
  1463. IPTETI = METIQ1.INUPT
  1464. IPTNUM = IPTETI.NUM(1,1)
  1465. IF (ICPR(IPTNUM).EQ.0) THEN
  1466. ITE = ITE + 1
  1467. ICPR(IPTNUM) = ITE
  1468. ENDIF
  1469. ENDIF
  1470. ENDDO
  1471. ENDIF
  1472.  
  1473. SEGINI XPROJ
  1474. IF (IDEFOR.NE.0) GOTO 6030
  1475. C IF (IDEFOR.NE.0.OR.MVECTE.NE.0) GOTO 6030 A VOIR PV
  1476. C LA TROISIEME COORDONNEE PROJETEE EST LA DISTANCE A L'OEIL
  1477. CALL PROJEC(ICPR,XPROJ,IOEIL,CGRAV,axez)
  1478. SEGDES ICPR
  1479. IF (ZBOIT) THEN
  1480. CALL PROJC2(IMBOIT,IOEIL,CGRAV,XBMIN,XBMAX,YBMIN
  1481. $ ,YBMAX,ZBMIN,ZBMAX)
  1482. ENDIF
  1483. C
  1484. XMIN=1E30
  1485. XMAX=-XMIN
  1486. YMIN=XMIN
  1487. YMAX=XMAX
  1488. ZMIN=XMIN
  1489. ZMAX=XMAX
  1490. DO I=1,ITE
  1491. XMIN=MIN(real(XMIN),XPROJ(1,I))
  1492. XMAX=MAX(REAL(XMAX),XPROJ(1,I))
  1493. YMIN=MIN(real(YMIN),XPROJ(2,I))
  1494. YMAX=MAX(REAL(YMAX),XPROJ(2,I))
  1495. ZMIN=MIN(real(ZMIN),XPROJ(3,I))
  1496. ZMAX=MAX(REAL(ZMAX),XPROJ(3,I))
  1497. ENDDO
  1498. C
  1499. XDEC=XMAX-XMIN
  1500. YDEC=YMAX-YMIN
  1501. ZDEC=ZMAX-ZMIN
  1502. C Modif des marges
  1503. C Nouveau :
  1504. DDEC=MAX(XDEC,YDEC,ZDEC)*0.1
  1505. C MODIF JCARDO 28/02/2012 : DDEC vaut maintenant XSZPRE au minimum
  1506. C (evite des erreurs de cancellation)
  1507. DDEC=MAX(DDEC,REAL(xszpre))
  1508. C DDEC=MAX(DDEC,xspeti)
  1509. XMAX=XMAX+DDEC
  1510. XMIN=XMIN-DDEC
  1511. YMIN=YMIN-DDEC
  1512. YMAX=YMAX+DDEC
  1513. ZMIN=ZMIN-DDEC
  1514. ZMAX=ZMAX+DDEC
  1515. C Zoom ou dezoome
  1516. IF (ZBOIT) THEN
  1517. XMI=XBMIN
  1518. XMA=XBMAX
  1519. YMI=YBMIN
  1520. YMA=YBMAX
  1521. ZMI=ZBMIN
  1522. ZMA=ZBMAX
  1523. ELSE
  1524. XMI=XMIN
  1525. YMI=YMIN
  1526. ZMI=ZMIN
  1527. XMA=XMAX
  1528. YMA=YMAX
  1529. ZMA=ZMAX
  1530. ENDIF
  1531. Cgoo CALL DFENET(XMIN,XMAX,YMIN,YMAX,ZMIN,ZMAX,X1,X2,Y1,Y2,FENET)
  1532. CALL DFENET(XMI,XMA,YMI,YMA,ZMI,ZMA,X1,X2,Y1,Y2,FENET)
  1533. GOTO 6040
  1534. 6030 CONTINUE
  1535. C FAIRE ICI LA PROJECTION DE LA DEFORMEE
  1536. C PP + option DIRE
  1537. CALL CADRCL(KABCOR,LABCO2,IOEIL,XPROJ,
  1538. * IDEF,XMIN,YMIN,XMAX,YMAX,ZMIN,ZMAX,cgrav,diloc,ldire,axez)
  1539. 6040 CONTINUE
  1540. * write(6,*) 'xmin xmax ymin ymax zmin zmax',
  1541. * > xmin, xmax, ymin, ymax, zmin, zmax
  1542. C
  1543. C
  1544. C BERTIN: AFFICHAGE DE LA DATE
  1545. IF (ZDATE) THEN
  1546. CALL GIBDAT(JOUR,MOIS,IANNEE)
  1547. iannee=mod(iannee,100)
  1548. C*TC TIME=FDATE()
  1549. BUFFER(1:22)=' / /20 '
  1550. WRITE (BUFFER(4:5),FMT='(I2)') JOUR
  1551. WRITE (BUFFER(7:8),FMT='(I2)') MOIS
  1552. WRITE (BUFFER(12:13),FMT='(I2)') IANNEE
  1553. C*TC WRITE (BUFFER(15:22),FMT='(A8)') TIME(12:20)
  1554. C CALL TRBOX(0.8,0.8)
  1555. READ(BUFFER(1:22),'(A26)') BUFFER
  1556. C CALL TRBOX(1./0.8,1./0.8)
  1557. ENDIF
  1558. C BERTIN: FIN AFFICHAGE DE LA DATE
  1559.  
  1560. C----------------------------------------------------------
  1561. C INITIALISATION DE IVU SI NON FAIT
  1562. C IVU=1 PT VU
  1563. C IVU<>1 PT PAS VU
  1564. C----------------------------------------------------------
  1565. 4999 CONTINUE
  1566. IF (IVU.EQ.0) THEN
  1567. SEGINI IVU
  1568. DO 4997 I=1,ITE
  1569. IVU(I)=1
  1570. 4997 CONTINUE
  1571. ENDIF
  1572. C METTRE NON CACHABLE LES POINTS DU PLAN DE COUPE
  1573. SEGADJ IVU
  1574. C IF (ICACHE.NE.0.AND.NBCTS.NE.0) THEN CORRECTION PV
  1575. IF (NBCTS.NE.0) THEN
  1576. DO 5010 I=NBCTS+1,ITE
  1577. IVU(I)=2
  1578. 5010 CONTINUE
  1579. ENDIF
  1580. C
  1581. CPM NBCOUL-1 au lieu de 8
  1582. DO I=1,NBCOUL-1
  1583. ICHCS(I)=ICHC(I)
  1584. ENDDO
  1585. C cacher en soft si pas opengl
  1586. if (iogra.ne.6) then
  1587. C DEBUT MODIF
  1588. IF (ICACHE.NE.0) THEN
  1589. IF (IARET.EQ.0) THEN
  1590. CALL TIRET3(XPROJ,MELEME,ICPR,XMIN,XMAX,YMIN,YMAX,
  1591. . IVU,NELEM,TMIN,TMAX,MCOUP)
  1592. ELSE
  1593.  
  1594. CALL TIRET3(XPROJ,MELEM3,ICPR,XMIN,XMAX,YMIN,YMAX,
  1595. . IVU,NELEM,TMI,TMAX,MCOUP)
  1596. ENDIF
  1597. ENDIF
  1598. C FIN MODIF
  1599. endif
  1600.  
  1601. C------------------------------------------------------------
  1602. C CAS DU TRACE PAR FACE APPEL AU SOUS-PROGRAM FACED
  1603. C POUR REMPLIR LES FACES
  1604. C------------------------------------------------------------
  1605. IF (IECLAT.NE.1) THEN
  1606. if(iimpi.ge.666) then
  1607. segact,KON
  1608. write(ioimp,*) 'KON(1,:,1)=',(KON(1,iou,1),iou=1,3)
  1609. write(ioimp,*) 'KON(2,:,1)=',(KON(2,iou,1),iou=1,3)
  1610. write(ioimp,*) 'KON(3,:,1)=',(KON(3,iou,1),iou=1,3)
  1611. write(ioimp,*) 'KON(1,:,2)=',(KON(1,iou,2),iou=1,3)
  1612. write(ioimp,*) 'KON(2,:,2)=',(KON(2,iou,2),iou=1,3)
  1613. write(ioimp,*) 'KON(3,:,2)=',(KON(3,iou,2),iou=1,3)
  1614. write(ioimp,*) 'KON(1,:,3)=',(KON(1,iou,3),iou=1,3)
  1615. write(ioimp,*) 'KON(2,:,3)=',(KON(2,iou,3),iou=1,3)
  1616. write(ioimp,*) 'KON(3,:,3)=',(KON(3,iou,3),iou=1,3)
  1617. endif
  1618. if(iimpi.ge.666) write(ioimp,*) 'appel a FACED',IFADES
  1619. IF (IFADES.EQ.1) THEN
  1620. CALL FACED(MELEME,XPROJ,ICPR,IVU,MCOUP,KON,LNDEGR,1)
  1621. ELSEIF (IFADES.EQ.0.AND.IOGRA.EQ.6.AND.ICACHE.EQ.1) THEN
  1622. C TRACe DES ELEMENTS EN EFFACEMENT
  1623. CALL FACED(MELEME,XPROJ,ICPR,IVU,MCOUP,KON,LNDEGR,0)
  1624. ENDIF
  1625. ENDIF
  1626. IF (IERR.NE.0) GOTO 8900
  1627.  
  1628. C------------------------------------------------------------
  1629. C
  1630. C CAS OU ON VEUT TRACER LES ISOVALEURS D UN OBJET DE TYPE CHAMPOINT
  1631. C
  1632. C------------------------------------------------------------
  1633. cbp IF (NISO.NE.0) THEN
  1634. IF (VCPCHA.NE.0) THEN
  1635. C signaler le nombre d'iso
  1636. CALL FVALIS(0,IRESU,NHAUT,NISO)
  1637. PTI=XMAX-XMIN
  1638. if(iimpi.ge.666) write(ioimp,*) 'apel a ATISO'
  1639. XDIB=XMAX-XMIN
  1640. YDIB=YMAX-YMIN
  1641. BLOK=MAX(XDIB,YDIB)*0.003
  1642. CALL ATISO(MELEME,ICPR,XPROJ,VCPCHA,VCHC,IVU,PTI,NISO,MCOUP,
  1643. > mcham,BLOK)
  1644. ENDIF
  1645. C
  1646. C 6080 CONTINUE
  1647. IF (IERR.NE.0) RETURN
  1648. IF (ICACHE.EQ.1) THEN
  1649. LTSEGS=1000
  1650. SEGINI NTSEG
  1651. LTSEG=0
  1652. endif
  1653. C 5001 CONTINUE
  1654. C IF (IECLAT.EQ.1.OR.IFADES.EQ.1) GOTO 4201 PV JUIN 86
  1655. IF (IECLAT.EQ.1) GOTO 4201
  1656. C TRACE DES SEGMENTS D'UNE COULEUR EN LES GROUPANT EN UNE LIGNE
  1657. if(iimpi.ge.666) write(ioimp,*) 'TRACE DES SEGMENTS DUNE COULEUR'
  1658. SEGACT KON*MOD
  1659. C PM NBCOUL-1 au lieu de 8
  1660. icoul=-3
  1661. DO 70 LI=0,NBCOUL-1
  1662. IF (IDEFCO.EQ.1 .AND. LI.NE.IICOL) GOTO 70
  1663. C SI ISOVALEUR ET REMPLISSAGE COULEUR EFFACEMENT
  1664. C MODIF JCARDO 8/12/2011 : rajout condition LI=0
  1665. C => on force NOIR seulement si COUL=DEFA
  1666. C MODIF JCARDO 28/02/2012 : rajout condition IMEL2=0 (eventuellement)
  1667. C => on force NOIR seulement s'il y a un
  1668. C seul objet MAILLAGE
  1669. C IF (NISO.NE.0.AND.ISOTYP.GT.0) CALL CHCOUL(IDNOIR)
  1670. C IF (LI.EQ.0.AND.NISO.NE.0.AND.ISOTYP.GT.0)
  1671. cbp IF ((IMEL2.EQ.0.OR.LI.EQ.0).AND.NISO.NE.0.AND.ISOTYP.GT.0)
  1672. IF ((IMEL2.EQ.0.OR.LI.EQ.0).AND.IISO.NE.0.AND.ISOTYP.GT.0) then
  1673. kcoul=idnoir
  1674. ELSE
  1675. C PP kcoul=LI
  1676. C+PP FACE avec trait blanc
  1677. IF (LBLANC) THEN
  1678. kcoul=0
  1679. ELSE
  1680. kcoul=LI
  1681. ENDIF
  1682. C+PP
  1683. ENDIF
  1684. KAUX=1
  1685. 23 K=KAUX
  1686. IF (IVU(KAUX).LE.0) GOTO 40
  1687. KAUXR=KAUX
  1688. 41 CONTINUE
  1689. DO 19 KL=1,NBCONR
  1690. ITRA=KON(1,KL,K)
  1691. IF (ITRA.LT.0) GOTO 19
  1692. IF (ITRA.EQ.0) GOTO 40
  1693. IF (KON(2,KL,K).NE.LI) GOTO 19
  1694. IF (IVU(ITRA).GE.1) GOTO 21
  1695. 19 CONTINUE
  1696. K=KON(1,NBCON,K)
  1697. IF (K.NE.0) GOTO 41
  1698. 40 KAUX=KAUX+1
  1699. IF (KAUX.GE.ITE+1) GOTO 27
  1700. GOTO 23
  1701. 21 CONTINUE
  1702. IF (ITR.GT.1) THEN
  1703. if (kcoul.ne.icoul) then
  1704. call chcoul(kcoul)
  1705. icoul=kcoul
  1706. endif
  1707. CALL POLRL(ITR,XTR,YTR,ZTR)
  1708. ENDIF
  1709. ITR=1
  1710. XTR(ITR)=XPROJ(1,KAUXR)
  1711. YTR(ITR)=XPROJ(2,KAUXR)
  1712. ZTR(ITR)=XPROJ(3,KAUXR)
  1713. KPRESS=KAUXR
  1714. GOTO 25
  1715. 24 KL=1
  1716. 25 DO 22 L=KL,NBCONR
  1717. M=KON(1,L,K)
  1718. IF (M.EQ.0) GOTO 23
  1719. IF (M.LT.0) GOTO 22
  1720. IF (KON(2,L,K).NE.LI) GOTO 22
  1721. IF (IVU(M).LE.0) GOTO 22
  1722. GOTO 28
  1723. 22 CONTINUE
  1724. K=KON(1,NBCON,K)
  1725. IF (K.EQ.0) GOTO 23
  1726. GOTO 24
  1727. 28 CONTINUE
  1728. ITR=ITR+1
  1729. XTR(ITR)=XPROJ(1,M)
  1730. YTR(ITR)=XPROJ(2,M)
  1731. ZTR(ITR)=XPROJ(3,M)
  1732. IF (ITR.EQ.40) THEN
  1733. if (kcoul.ne.icoul) then
  1734. call chcoul(kcoul)
  1735. icoul=kcoul
  1736. endif
  1737. CALL POLRL(ITR,XTR,YTR,ZTR)
  1738. XTR(1)=XTR(ITR)
  1739. YTR(1)=YTR(ITR)
  1740. ZTR(1)=ZTR(ITR)
  1741. ITR=1
  1742. ENDIF
  1743. KON(1,L,K)=-KON(1,L,K)
  1744. M1=M
  1745. 42 DO 43 L=1,NBCONR
  1746. IF (KON(1,L,M1).EQ.0) GOTO 45
  1747. IF (KON(1,L,M1).EQ.KPRESS) GOTO 44
  1748. 43 CONTINUE
  1749. M1=KON(1,NBCON,M1)
  1750. IF (M1.EQ.0) GOTO 45
  1751. GOTO 42
  1752. 44 KON(1,L,M1)=-KON(1,L,M1)
  1753. 45 KPRESS=M
  1754. GOTO 24
  1755. 27 CONTINUE
  1756. IF (ITR.NE.1) THEN
  1757. if (kcoul.ne.icoul) then
  1758. call chcoul(kcoul)
  1759. icoul=kcoul
  1760. endif
  1761. CALL POLRL(ITR,XTR,YTR,ZTR)
  1762. ENDIF
  1763. ITR=0
  1764. 70 CONTINUE
  1765. IF (ICACHE.EQ.0) GOTO 5002
  1766.  
  1767. C----------------------------------------------------------
  1768. C ON REMPLIT NTSEG AVEC LES SEGMENTS EN PARTIE VUS
  1769. C (OPTION CACHE)
  1770. C----------------------------------------------------------
  1771. DO 5003 K=1,ITE
  1772. IF (IVU(K).LE.0) GOTO 5003
  1773. KK=K
  1774. 5005 CONTINUE
  1775. DO 5004 KL=1,NBCONR
  1776. ITRA=KON(1,KL,KK)
  1777. IF (ITRA.LT.0) GOTO 5004
  1778. IF (ITRA.EQ.0) GOTO 5003
  1779. IF (LTSEGS-LTSEG.LT.10) THEN
  1780. LTSEGS=LTSEGS+1000
  1781. SEGADJ NTSEG
  1782. ENDIF
  1783. NTSEG(LTSEG+1)=K
  1784. NTSEG(LTSEG+2)=ITRA
  1785. C MODIF JCARDO 28/02/2012 : rajout conditions LICLR=0 (+ eventuellement IMEL2=0)
  1786. C cf. commentaires 100 lignes plus haut...
  1787. C IF (NISO.NE.0.AND.ISOTYP.GT.0) THEN
  1788. LICLR=KON(2,KL,KK)
  1789. C IF (LICLR.EQ.0.AND.NISO.NE.0.AND.ISOTYP.GT.0) THEN
  1790. IF ((IMEL2.EQ.0.OR.LICLR.EQ.0)
  1791. cbp & .AND.NISO.NE.0.AND.ISOTYP.GT.0) THEN
  1792. & .AND.IISO.NE.0.AND.ISOTYP.GT.0) THEN
  1793. CPM IDNOIR au lieu de 8
  1794. NTSEG(LTSEG+3)=IDNOIR
  1795. ELSE
  1796. NTSEG(LTSEG+3)=LICLR
  1797. ENDIF
  1798. LTSEG=LTSEG+3
  1799. 5004 CONTINUE
  1800. KK=KON(1,NBCON,KK)
  1801. IF (KK.NE.0) GOTO 5005
  1802. 5003 CONTINUE
  1803. 5002 CONTINUE
  1804. SEGDES KON
  1805. C Trace des petites croix, cas de type POI1
  1806. IF (CROIX) then
  1807. C CALCUL TAILLE POUR LES CROIX
  1808. XDIB=XMAX-XMIN
  1809. YDIB=YMAX-YMIN
  1810. BLOK=MAX(XDIB,YDIB)*0.003
  1811. IPT1=MELEME
  1812. IF (IMEL2.NE.0) IPT1=MELEM2
  1813. SEGACT IPT1
  1814. SEGACT MELEME
  1815. DO 8002 ISOUS=1,MAX(1,LISOUS(/1))
  1816. IF (LISOUS(/1).NE.0) THEN
  1817. IPT1=LISOUS(ISOUS)
  1818. SEGACT IPT1
  1819. ENDIF
  1820. IF (IPT1.ITYPEL.NE.1.OR.VCPCHA.NE.0) GOTO 8004
  1821. C----------------------------------------------------------
  1822. C TRACE DES croix
  1823. C----------------------------------------------------------
  1824. SEGACT IVU,ICPR
  1825. icc = -3
  1826. NBNN=IPT1.NUM(/1)
  1827. DO 8005 IEL=1,IPT1.NUM(/2)
  1828. IF (IVU(ICPR(IPT1.NUM(1,IEL))).GE.1) THEN
  1829. ICOOL=IPT1.ICOLOR(IEL)
  1830. C IF (ICOOL.LE.0) ICOOL=IDCOUL
  1831. CPM IDNOIR au lieu de 8
  1832. cbp IF (NISO.NE.0.AND.ISOTYP.GT.0) ICOOL=IDNOIR
  1833. IF (IISO.NE.0.AND.ISOTYP.GT.0) ICOOL=IDNOIR
  1834. IF (ICOOL.NE.ICC) THEN
  1835. ICC=ICOOL
  1836. CALL CHCOUL(ICC)
  1837. ENDIF
  1838. XPOS=XPROJ(1,ICPR(IPT1.NUM(1,IEL)))
  1839. YPOS=XPROJ(2,ICPR(IPT1.NUM(1,IEL)))
  1840. ZPOS=XPROJ(3,ICPR(IPT1.NUM(1,IEL)))
  1841. XTR(1)=XPOS+BLOK
  1842. YTR(1)=YPOS
  1843. ZTR(1)=ZPOS
  1844. XTR(2)=XPOS-BLOK
  1845. YTR(2)=YPOS
  1846. ZTR(2)=ZPOS
  1847. CALL POLRL(2,XTR,YTR,ZTR)
  1848. XTR(1)=XPOS
  1849. YTR(1)=YPOS+BLOK
  1850. ZTR(1)=ZPOS
  1851. XTR(2)=XPOS
  1852. YTR(2)=YPOS-BLOK
  1853. ZTR(2)=ZPOS
  1854. CALL POLRL(2,XTR,YTR,ZTR)
  1855. ENDIF
  1856. 8005 CONTINUE
  1857. 8004 CONTINUE
  1858. 8002 CONTINUE
  1859. endif
  1860. C Y A T IL DES BLOCAGES ???
  1861. IF (.NOT.BLOCAG) GOTO 7000
  1862. C CALCUL TAILLE POUR LES BLOCAGES
  1863. XDIB=XMAX-XMIN
  1864. YDIB=YMAX-YMIN
  1865. BLOK=MAX(XDIB,YDIB)*0.01
  1866. ICC=-3
  1867. SEGACT MELEME
  1868. IPT1=MELEME
  1869. DO 7002 ISOUS=1,MAX(1,LISOUS(/1))
  1870. IF (LISOUS(/1).NE.0) THEN
  1871. IPT1=LISOUS(ISOUS)
  1872. SEGACT IPT1
  1873. ENDIF
  1874. IF (IPT1.ITYPEL.NE.22) GOTO 7004
  1875. C----------------------------------------------------------
  1876. C TRACE DES BLOCAGES
  1877. C----------------------------------------------------------
  1878. SEGACT IVU,ICPR
  1879. NBNN=IPT1.NUM(/1)
  1880. DO 7005 IEL=1,IPT1.NUM(/2)
  1881. ICOOL=IPT1.ICOLOR(IEL)
  1882. C IF (ICOOL.LE.0) ICOOL=IDCOUL
  1883. IF (NBNN.GT.2) THEN
  1884. C IF (NISO.NE.0.AND.ISOTYP.GT.0) ICOOL=IDNOIR
  1885. IF (ICOOL.NE.ICC) THEN
  1886. ICC=ICOOL
  1887. CALL CHCOUL(ICC)
  1888. ENDIF
  1889. JDTRAC=0
  1890. DO 7006 INO=2,NBNN
  1891. INOS=INO+1
  1892. IF (INOS.GT.NBNN) INOS = 2
  1893. IP1=ICPR(IPT1.NUM(INO,IEL))
  1894. IP2=ICPR(IPT1.NUM(INOS,IEL))
  1895. IF (IVU(IP1).GE.1.AND.IVU(IP2).GE.1) THEN
  1896. IF (JDTRAC.EQ.0) THEN
  1897. XTR(1)=XPROJ(1,IP1)
  1898. YTR(1)=XPROJ(2,IP1)
  1899. ZTR(1)=XPROJ(3,IP1)
  1900. XTR(2)=XPROJ(1,IP2)
  1901. YTR(2)=XPROJ(2,IP2)
  1902. ZTR(2)=XPROJ(3,IP2)
  1903. CALL POLRL(2,XTR,YTR,ZTR)
  1904. ENDIF
  1905. JDTRAC=1
  1906. ELSEIF (IVU(IP1).GE.1) THEN
  1907. IF (LTSEGS-LTSEG.LT.10) THEN
  1908. LTSEGS=LTSEGS+1000
  1909. SEGADJ NTSEG
  1910. ENDIF
  1911. NTSEG(LTSEG+1)=IP1
  1912. NTSEG(LTSEG+2)=IP2
  1913. NTSEG(LTSEG+3)=ICC
  1914. LTSEG=LTSEG+3
  1915. JDTRAC=0
  1916. ELSEIF (IVU(IP2).GE.1) THEN
  1917. IF (LTSEGS-LTSEG.LT.10) THEN
  1918. LTSEGS=LTSEGS+1000
  1919. SEGADJ NTSEG
  1920. ENDIF
  1921. NTSEG(LTSEG+1)=IP2
  1922. NTSEG(LTSEG+2)=IP1
  1923. NTSEG(LTSEG+3)=ICC
  1924. LTSEG=LTSEG+3
  1925. JDTRAC=0
  1926. ENDIF
  1927. 7006 CONTINUE
  1928. ELSEIF (NBNN.EQ.2.AND.IVU(ICPR(IPT1.NUM(2,IEL))).GE.1) THEN
  1929. cbp IF (NISO.NE.0.AND.ISOTYP.GT.0) ICOOL=IDNOIR
  1930. IF (IISO.NE.0.AND.ISOTYP.GT.0) ICOOL=IDNOIR
  1931. IF (ICOOL.NE.ICC) THEN
  1932. ICC=ICOOL
  1933. CALL CHCOUL(ICC)
  1934. ENDIF
  1935. XPOS=XPROJ(1,ICPR(IPT1.NUM(2,IEL)))
  1936. YPOS=XPROJ(2,ICPR(IPT1.NUM(2,IEL)))
  1937. ZPOS=XPROJ(3,ICPR(IPT1.NUM(2,IEL)))
  1938. XTR(1)=XPOS+BLOK
  1939. YTR(1)=YPOS
  1940. ZTR(1)=ZPOS
  1941. XTR(2)=XPOS
  1942. YTR(2)=YPOS+BLOK
  1943. ZTR(2)=ZPOS
  1944. XTR(3)=XPOS-BLOK
  1945. YTR(3)=YPOS
  1946. ZTR(3)=ZPOS
  1947. XTR(4)=XPOS
  1948. YTR(4)=YPOS-BLOK
  1949. ZTR(4)=ZPOS
  1950. XTR(5)=XTR(1)
  1951. YTR(5)=YTR(1)
  1952. ZTR(5)=ZTR(1)
  1953. CALL POLRL(5,XTR,YTR,ZTR)
  1954. ENDIF
  1955. 7005 CONTINUE
  1956. 7004 CONTINUE
  1957. 7002 CONTINUE
  1958. 7000 CONTINUE
  1959. if (iogra.eq.6) goto 4202
  1960. IF (ICACHE.NE.0) THEN
  1961. C PP FACE avec trait blanc
  1962. CALL DICHO3(XPROJ,MELEME,ICPR,XMIN,XMAX,
  1963. * YMIN,YMAX,IVU,NTSEG,NELEM,IICOL,IDEFCO,lblanc,LTSEG)
  1964. C PP * YMIN,YMAX,IVU,NTSEG,NELEM,IICOL,IDEFCO)
  1965. ENDIF
  1966. GOTO 4202
  1967. 4201 CONTINUE
  1968. C----------------------------------------------------------
  1969. C
  1970. C TRACE ECLATE DES ELEMENTS
  1971. C
  1972. C----------------------------------------------------------
  1973. SEGACT ICPR
  1974. C IF (IFADES.EQ.1) GOTO 4400 PV JUIN 86
  1975. SEGACT MELEME
  1976. ICOLE=0
  1977. IPT1=MELEME
  1978. DO 4111 IO=1,MAX(1,LISOUS(/1))
  1979. IF (LISOUS(/1).NE.0) THEN
  1980. IPT1=LISOUS(IO)
  1981. SEGACT IPT1
  1982. ENDIF
  1983. K=IPT1.ITYPEL
  1984. IDEP=LPT(K)
  1985. IFIN=IDEP+2*LPL(K)-2
  1986. IFIN2=IFIN
  1987. IF (LPL(K).EQ.0) THEN
  1988. IF (LPT(K).EQ.0)THEN
  1989. GOTO 4112
  1990. ELSE
  1991. C Polygone
  1992. IFIN=IDEP+2*IPT1.NUM(/1)-2
  1993. IFIN2=IFIN -2
  1994. ENDIF
  1995. ENDIF
  1996. 4112 CONTINUE
  1997. C IFIN=IDEP+2*LPL(K)-2
  1998. DO 4115 I=1,IPT1.NUM(/2)
  1999. IF (IDEFCO.EQ.1.AND.IPT1.ICOLOR(I).NE.IICOL) GOTO 4115
  2000. XG=0.
  2001. YG=0.
  2002. ZG=0.
  2003. ZN=0.
  2004. N=IPT1.NUM(/1)
  2005. DO 4116 J=1,N
  2006. XG=XG+XPROJ(1,ICPR(IPT1.NUM(J,I)))
  2007. YG=YG+XPROJ(2,ICPR(IPT1.NUM(J,I)))
  2008. ZG=ZG+XPROJ(3,ICPR(IPT1.NUM(J,I)))
  2009. 4116 CONTINUE
  2010. XG=XG/N
  2011. YG=YG/N
  2012. ZG=ZG/N
  2013. I3=0
  2014. IF (ICOLE.NE.IPT1.ICOLOR(I)) THEN
  2015. ICOLE=IPT1.ICOLOR(I)
  2016. CALL CHCOUL(ICOLE)
  2017. ENDIF
  2018. ITR=1
  2019. ILTEL=LTEL(1,K)
  2020. IF (ILTEL.NE.0) THEN
  2021. DO 4117 IF=1,ILTEL
  2022. ITR=0
  2023. ILTAD=LTEL(2,K)
  2024. ITYP=LDEL(1,ILTAD+IF-1)
  2025. IAD=LDEL(2,ILTAD+IF-1)
  2026. DO 4118 J=1,KDFAC(1,ITYP)
  2027. I1=ICPR(IPT1.NUM(LFAC(IAD+J-1),I))
  2028. XR=XG+(XPROJ(1,I1)-XG)*XECLAT
  2029. YR=YG+(XPROJ(2,I1)-YG)*XECLAT
  2030. ZR=ZG+(XPROJ(3,I1)-ZG)*XECLAT
  2031. ITR=ITR+1
  2032. XTR(ITR)=XR
  2033. YTR(ITR)=YR
  2034. ZTR(ITR)=ZR
  2035. 4118 CONTINUE
  2036. ITR=ITR+1
  2037. XTR(ITR)=XTR(1)
  2038. YTR(ITR)=YTR(1)
  2039. ZTR(ITR)=ZTR(1)
  2040. IF (IFADES.EQ.0) THEN
  2041. CALL POLRL(ITR,XTR,YTR,ZTR)
  2042. ELSE
  2043. CALL TRFACE(ITR,XTR,YTR,ZTR,ZN,ICOLE,IEFF)
  2044. CALL CHCOUL(IDNOIR)
  2045. CALL POLRL(ITR,XTR,YTR,ZTR)
  2046. CALL CHCOUL(ICOLE)
  2047. ENDIF
  2048. ITR=0
  2049. 4117 CONTINUE
  2050. ELSE
  2051. DO 4114 J=IDEP,IFIN,2
  2052. IF (J.LE.IFIN2) THEN
  2053. I1=ICPR(IPT1.NUM(KSEGM(J),I))
  2054. I2=ICPR(IPT1.NUM(KSEGM(J+1),I))
  2055. ELSE
  2056. I1=ICPR(IPT1.NUM(KSEGM(IFIN2+1),I))
  2057. I2=ICPR(IPT1.NUM(KSEGM(1),I))
  2058. ENDIF
  2059. XR=XG+(XPROJ(1,I1)-XG)*XECLAT
  2060. YR=YG+(XPROJ(2,I1)-YG)*XECLAT
  2061. ZR=ZG+(XPROJ(3,I1)-ZG)*XECLAT
  2062. IF (I1.NE.I3) THEN
  2063. if (ifades.eq.0) then
  2064. IF (ITR.NE.1) call POLRL(ITR,XTR,YTR,ZTR)
  2065. else
  2066. IF (ITR.NE.1) CALL trface(ITR,XTR,YTR,ZTR,zn,icole,ieff)
  2067. endif
  2068. ITR=1
  2069. XTR(1)=XR
  2070. YTR(1)=YR
  2071. ZTR(1)=ZR
  2072. ENDIF
  2073. XR=XG+(XPROJ(1,I2)-XG)*XECLAT
  2074. YR=YG+(XPROJ(2,I2)-YG)*XECLAT
  2075. ZR=ZG+(XPROJ(3,I2)-ZG)*XECLAT
  2076. ITR=ITR+1
  2077. XTR(ITR)=XR
  2078. YTR(ITR)=YR
  2079. ZTR(ITR)=ZR
  2080. I3=I2
  2081. 4114 CONTINUE
  2082. if (ifades.eq.0) then
  2083. IF (ITR.NE.1) CALL POLRL(ITR,XTR,YTR,ZTR)
  2084. else
  2085. IF (ITR.NE.1) CALL trface(ITR,XTR,YTR,ZTR,zn,icole,ieff)
  2086. endif
  2087. ITR=1
  2088. ENDIF
  2089. 4115 CONTINUE
  2090. 4111 CONTINUE
  2091. 4202 CONTINUE
  2092.  
  2093. C----------------------------------------------------------
  2094. C TRAITEMENT DES PARAMETRES TELS QUE NOEUD,QUALI,...
  2095. C (AVANT AFFICHAGE)
  2096. C----------------------------------------------------------
  2097. IF (IQUALI.EQ.0) GOTO 500
  2098. SEGACT XPROJ,IVU,ICPR
  2099. PAS=(X2-X1)/(XMA-XMI)
  2100. CALL INSEGT(3,IRESS)
  2101. C ON MET LES NOMS LA OU ON PEUT
  2102. if(nbesc.ne.0) segact ipiloc
  2103. DO 501 IOB=1,LMNNOM
  2104. C IGNORER LES OBJETS TEMPORAIRES OU INVALIDES
  2105. ICOLE=0
  2106. IF (INOOB2(IOB).NE.'MAILLAGE') GOTO 511
  2107. IPVH=INOOB1(IOB)
  2108. IDEBCH=IPCHAR(IPVH)
  2109. IFINCH=IPCHAR(IPVH+1)-1
  2110. TXT= ICHARA(IDEBCH:IFINCH)
  2111. IF (TXT(1:1).EQ.'#') GOTO 501
  2112. IF (TXT(1:1).EQ.' ') GOTO 501
  2113. IPT4=IOUEP2(IOB)
  2114. IF (IPT4.EQ.0) GOTO 501
  2115. SEGACT IPT4
  2116. XP=0
  2117. YP=0
  2118. ZP=0
  2119. NP=0
  2120. IPT5=IPT4
  2121. DO 503 ISB=1,MAX(1,IPT4.LISOUS(/1))
  2122. IF (IPT4.LISOUS(/1).NE.0) THEN
  2123. IPT5=IPT4.LISOUS(ISB)
  2124. SEGACT IPT5
  2125. ENDIF
  2126. CPM NBCOUL-1 au lieu de 7
  2127. DO 507 I=1,NBCOUL-1
  2128. ITEST(I)=0
  2129. 507 CONTINUE
  2130. DO 504 J=1,IPT5.NUM(/2)
  2131. IF (IPT5.ICOLOR(J).NE.0) THEN
  2132. ITEST(IPT5.ICOLOR(J))=1
  2133. ELSE
  2134. C ITEST(7)=1
  2135. ENDIF
  2136. DO 5041 I=1,IPT5.NUM(/1)
  2137. K=ICPR(IPT5.NUM(I,J))
  2138. IF (K.EQ.0) GOTO 505
  2139. IF (IVU(K).LE.0) GOTO 5041
  2140. NP=NP+1
  2141. XP=XP+XPROJ(1,K)
  2142. YP=YP+XPROJ(2,K)
  2143. ZP=ZP+XPROJ(3,K)
  2144. 5041 CONTINUE
  2145. 504 CONTINUE
  2146. 503 CONTINUE
  2147. IF (NP.EQ.0) GOTO 501
  2148. XP=XP/NP
  2149. YP=YP/NP
  2150. ZP=ZP/NP
  2151. C IF (XP.LT.XMI.OR.XP.GT.XMA.OR.YP.LT.YMI.OR.YP.GT.YMA) GOTO 501
  2152. ICOLE=0
  2153. CPM NBCOUL-1 au lieu de 7
  2154. C couleur avec melange eventuel si plusieurs
  2155. DO 508 I=1,NBCOUL-1
  2156. IF (ITEST(I).EQ.1) THEN
  2157. IF (ICOLE.EQ.0) THEN
  2158. ICOLE=I
  2159. ELSE
  2160. ICOLE=ITABM(ICOLE,I)
  2161. ENDIF
  2162. ENDIF
  2163. 508 CONTINUE
  2164. IF (IDEFCO.EQ.1.AND.ICOLE.NE.IICOL) GOTO 501
  2165. CALL CHCOUL(ICOLE)
  2166. XP=PAS*(XP-XMI)+X1
  2167. YP=PAS*(YP-YMI)+Y1
  2168. ZP=PAS*(ZP-ZMI)+ZMI
  2169. C TXT= INOOB1(IOB)
  2170. CALL TRLABL(XP,YP,ZP,TXT,8,0.15)
  2171. GOTO 501
  2172. 505 CONTINUE
  2173. 511 CONTINUE
  2174. C AU TOUR DES POINTS NOMMES
  2175. IF (INOOB2(IOB).NE.'POINT ') GOTO 501
  2176. IF (IOUEP2(IOB).EQ.0) GOTO 501
  2177. K=ICPR(IOUEP2(IOB))
  2178. IF (K.EQ.0) GOTO 501
  2179. IF (IVU(K).LE.0) GOTO 501
  2180. C IF (XPROJ(1,K).LT.XMI.OR.XPROJ(1,K).GT.XMA) GOTO 501
  2181. C IF (XPROJ(2,K).LT.YMI.OR.XPROJ(2,K).GT.YMA) GOTO 501
  2182. ITRUC=0
  2183. IF (IDEFCO.EQ.1) THEN
  2184. 512 DO 509 I=1,NBCONR
  2185. CPM ?????????? pb si codage KON en binaire ???????????
  2186. IF (KON(2,I,K).EQ.IICOL) THEN
  2187. ITRUC=1
  2188. GOTO 510
  2189. ENDIF
  2190. 509 CONTINUE
  2191. IF (KON(1,NBCON,K).NE.0) THEN
  2192. K=KON(1,NBCON,K)
  2193. GOTO 512
  2194. ENDIF
  2195. ELSE
  2196. ITRUC=1
  2197. ENDIF
  2198. 510 IF (ITRUC.EQ.1) THEN
  2199. CALL CHCOUL(0)
  2200. XP=XPROJ(1,K)
  2201. YP=XPROJ(2,K)
  2202. ZP=XPROJ(3,K)
  2203. XP=PAS*(XP-XMI)+X1
  2204. YP=PAS*(YP-YMI)+Y1
  2205. ZP=PAS*(ZP-ZMI)+ZMI
  2206. IPVH=INOOB1(IOB)
  2207. IDEBCH=IPCHAR(IPVH)
  2208. IFINCH=IPCHAR(IPVH+1)-1
  2209. TXT= ICHARA(IDEBCH:IFINCH)
  2210. CALL TRLABL(XP,YP,ZP,TXT,8,0.15)
  2211. ENDIF
  2212. 501 CONTINUE
  2213. if(nbesc.ne.0) SEGDES,IPILOC
  2214. IF (IRESU.EQ.3) GOTO 6101
  2215. 500 IF (INUMNO.EQ.0) GOTO 531
  2216. SEGACT XPROJ,IVU,ICPR
  2217. PAS=(X2-X1)/(XMA-XMI)
  2218. CALL INSEGT(4,IRESS)
  2219. C INDICATION DES NUMEROS DE NOEUDS
  2220. CALL CHCOUL(0)
  2221. DO 530 I=1,NBPTS
  2222. K=ICPR(I)
  2223. IF (K.EQ.0) GOTO 530
  2224. IF (IVU(K).LE.0) GOTO 530
  2225. C IF (XPROJ(1,K).LT.XMI.OR.XPROJ(1,K).GT.XMA) GOTO 530
  2226. C IF (XPROJ(2,K).LT.YMI.OR.XPROJ(2,K).GT.YMA) GOTO 530
  2227. ITRUC=0
  2228. IF (IDEFCO.EQ.1) THEN
  2229. 521 DO 519 J=1,NBCONR
  2230. CPM ?????????? pb si codage KON en binaire ???????????
  2231. IF (KON(2,J,K).EQ.IICOL) THEN
  2232. ITRUC=1
  2233. GOTO 520
  2234. ENDIF
  2235. 519 CONTINUE
  2236. IF (KON(1,NBCON,K).NE.0) THEN
  2237. K=KON(1,NBCON,K)
  2238. GOTO 521
  2239. ENDIF
  2240. ELSE
  2241. ITRUC=1
  2242. ENDIF
  2243. 520 IF (ITRUC.EQ.1) THEN
  2244. IF (I.LT.10) THEN
  2245. FMTX='(I1,7X)'
  2246. ELSEIF (I.LT.100) THEN
  2247. FMTX='(I2,6X)'
  2248. ELSEIF (I.LT.1000) THEN
  2249. FMTX='(I3,5X)'
  2250. ELSEIF (I.LT.10000) THEN
  2251. FMTX='(I4,4X)'
  2252. ELSEIF (I.LT.100000) THEN
  2253. FMTX='(I5,3X)'
  2254. ELSEIF (I.LT.1000000) THEN
  2255. FMTX='(I6,2X)'
  2256. ELSEIF (I.LT.10000000) THEN
  2257. FMTX='(I7,1X)'
  2258. ENDIF
  2259. WRITE (TXT,FMT=FMTX) I
  2260. XP=XPROJ(1,K)
  2261. YP=XPROJ(2,K)
  2262. ZP=XPROJ(3,K)
  2263. XP=PAS*(XP-XMI)+X1
  2264. YP=PAS*(YP-YMI)+Y1
  2265. ZP=PAS*(ZP-ZMI)+ZMI
  2266. CALL TRLABL(XP,YP,ZP,TXT,8,0.15)
  2267. ENDIF
  2268. 530 CONTINUE
  2269. IF (IRESU.EQ.4) GOTO 6101
  2270. 531 CONTINUE
  2271. C+++*
  2272. IF (LABCO2.EQ.0) GOTO 538
  2273. MVECTS=MVECTE
  2274. MVECTE=LABCO2(3,IDEF)
  2275. IF (MVECTE.EQ.0) GOTO 538
  2276. SEGACT XPROJ,IVU,ICPR
  2277.  
  2278. C TRACE DES VECTEURS SI IL Y A LIEU
  2279. SEGACT MVECTE
  2280. NVEC=NOCOUL(/1)
  2281. KABCO2=LABCO2(1,IDEF)
  2282. KXPRO2=LABCO2(2,IDEF)
  2283. DO 541 IVEC=1,NVEC
  2284. C Mots reserves : contraintes principales / fissures
  2285. CALL PLACE(MOVE,6,IPLA,NOCOVE(IVEC,1))
  2286. IF (IPLA.EQ.0) THEN
  2287. C Cas classique des vecteurs
  2288. CPM NLEGMX au lieu de 8
  2289. IF (NVECL.LT.NLEGMX) THEN
  2290. IFLE = 0
  2291. NVECL=NVECL+1
  2292. VAMPF(NVECL)=AMPF(IVEC)
  2293. IF (VAMPF(NVECL).LT.0) IFLE = -1
  2294. NVCOL(NVECL)=NOCOUL(IVEC)
  2295. NVLEG(1,NVECL)=NOCOVE(IVEC,1)
  2296. cbp petit ajout pour eviter pb si vecteurs crees depuis mchaml
  2297. NVLEG(2,NVECL)=' '
  2298. NVLEG(3,NVECL)=' '
  2299. IDVECT=NOCOVE(/3)
  2300. IF(IDVECT.GT.1) THEN
  2301. NVLEG(2,NVECL)=NOCOVE(IVEC,2)
  2302. IF (IDIM.EQ.3) NVLEG(3,NVECL)=NOCOVE(IVEC,3)
  2303. ENDIF
  2304. cbp fin petit ajout
  2305. ENDIF
  2306. ELSE
  2307. C Cas des contraintes principales
  2308. IF (IPLA.LE.3) IFLE = 1
  2309. C Cas des fissures
  2310. IF (IPLA.GT.3) IFLE = 2
  2311. IF (IFLE.EQ.1.AND.NOCOVE(2,1).EQ.NOCOVE(1,1)) THEN
  2312. NVECL = 1
  2313. VAMPF(1)=AMPF(1)
  2314. NVCOL(1)=NOCOUL(1)
  2315. NVLEG(1,1)=NOCOVE(1,1)
  2316. ELSE
  2317. NVECL = 2
  2318. VAMPF(1)=AMPF(1)
  2319. NVCOL(1)=NOCOUL(1)
  2320. NVLEG(1,1)=NOCOVE(1,1)
  2321. VAMPF(2)=AMPF(2)
  2322. NVCOL(2)=NOCOUL(2)
  2323. NVLEG(1,2)=NOCOVE(2,1)
  2324. IF (IDIM.EQ.3) THEN
  2325. NVECL = 3
  2326. VAMPF(3)=AMPF(3)
  2327. NVCOL(3)=NOCOUL(3)
  2328. NVLEG(1,3)=NOCOVE(3,1)
  2329. ENDIF
  2330. ENDIF
  2331. ENDIF
  2332. XPRO2=KXPRO2(IVEC)
  2333. ICOR2=KABCO2(2,IVEC)
  2334. SEGACT XPRO2,ICOR2,XPROJ,IVU,ICPR
  2335. INVCOU=NOCOUL(IVEC)
  2336. CALL CHCOUL(INVCOU)
  2337. DO 540 I=1,NBPTS
  2338. K=ICPR(I)
  2339. IF (K.EQ.0) GOTO 540
  2340. IF (ICOR2(K).EQ.0) GOTO 540
  2341. IF (IVU(K).LE.0) GOTO 540
  2342. IF (IFLE.EQ.-1) THEN
  2343. C Fleches pointant vers les points
  2344. UX=XPROJ(1,K)-XPRO2(1,K)
  2345. UY=XPROJ(2,K)-XPRO2(2,K)
  2346. UZ=XPROJ(3,K)-XPRO2(3,K)
  2347. XTR(1)=XPRO2(1,K)
  2348. YTR(1)=XPRO2(2,K)
  2349. ZTR(1)=XPRO2(3,K)
  2350. XTR(2)=XPROJ(1,K)-UX/10.
  2351. YTR(2)=XPROJ(2,K)-UY/10.
  2352. ZTR(2)=XPROJ(3,K)-UZ/10.
  2353. U1=XPROJ(1,K)-UX/3-UY/5
  2354. V1=XPROJ(2,K)-UY/3+UX/5
  2355. W1=XPROJ(3,K)
  2356. XTR(3)=U1
  2357. YTR(3)=V1
  2358. ZTR(3)=W1
  2359. XTR(4)=XPROJ(1,K)
  2360. YTR(4)=XPROJ(2,K)
  2361. ZTR(4)=XPROJ(3,K)
  2362. U1=XPROJ(1,K)-UX/3+UY/5
  2363. V1=XPROJ(2,K)-UY/3-UX/5
  2364. W1=XPROJ(3,K)
  2365. XTR(5)=U1
  2366. YTR(5)=V1
  2367. ZTR(5)=W1
  2368. XTR(6)=XPROJ(1,K)-UX/10.
  2369. YTR(6)=XPROJ(2,K)-UY/10.
  2370. ZTR(6)=XPROJ(3,K)
  2371. CALL POLRL(6,XTR,YTR,ZTR)
  2372. ELSE IF (IFLE.EQ.0) THEN
  2373. C Fleches partant des points
  2374.  
  2375. XTR(1)=XPROJ(1,K)
  2376. YTR(1)=XPROJ(2,K)
  2377. ZTR(1)=XPROJ(3,K)
  2378. UX=XPRO2(1,K)-XPROJ(1,K)
  2379. UY=XPRO2(2,K)-XPROJ(2,K)
  2380. UZ=XPRO2(3,K)-XPROJ(3,K)
  2381. XTR(2)=XPRO2(1,K)-UX/10.
  2382. YTR(2)=XPRO2(2,K)-UY/10.
  2383. ZTR(2)=XPRO2(3,K)
  2384. U1=XPRO2(1,K)-UX/3-UY/5
  2385. V1=XPRO2(2,K)-UY/3+UX/5
  2386. W1=XPRO2(3,K)
  2387. XTR(3)=U1
  2388. YTR(3)=V1
  2389. ZTR(3)=W1
  2390. XTR(4)=XPRO2(1,K)
  2391. YTR(4)=XPRO2(2,K)
  2392. ZTR(4)=XPRO2(3,K)
  2393. U1=XPRO2(1,K)-UX/3+UY/5
  2394. V1=XPRO2(2,K)-UY/3-UX/5
  2395. W1=XPRO2(3,K)
  2396. XTR(5)=U1
  2397. YTR(5)=V1
  2398. ZTR(5)=W1
  2399. XTR(6)=XPRO2(1,K)-UX/10.
  2400. YTR(6)=XPRO2(2,K)-UY/10.
  2401. ZTR(6)=XPRO2(3,K)
  2402. CALL POLRL(6,XTR,YTR,ZTR)
  2403. ELSE IF (IFLE.EQ.1) THEN
  2404. C contraintes principales
  2405. IF (ICOR2(K).EQ.1) THEN
  2406. NTR = 6
  2407. XTR(1) = XPROJ(1,K)
  2408. YTR(1) = XPROJ(2,K)
  2409. ZTR(1) = XPROJ(3,K)
  2410. UX = XPRO2(1,K) - XPROJ(1,K)
  2411. UY = XPRO2(2,K) - XPROJ(2,K)
  2412. UZ = XPRO2(3,K) - XPROJ(3,K)
  2413. XTR(2) = XPRO2(1,K) - UX/10
  2414. YTR(2) = XPRO2(2,K) - UY/10
  2415. ZTR(2) = XPRO2(3,K)
  2416. XTR(3) = XPRO2(1,K) - UX/3 - UY/5
  2417. YTR(3) = XPRO2(2,K) - UY/3 + UX/5
  2418. ZTR(3) = XPRO2(3,K)
  2419. XTR(4) = XPRO2(1,K)
  2420. YTR(4) = XPRO2(2,K)
  2421. ZTR(4) = XPRO2(3,K)
  2422. XTR(5) = XPRO2(1,K) - UX/3 + UY/5
  2423. YTR(5) = XPRO2(2,K) - UY/3 - UX/5
  2424. ZTR(5) = XPRO2(3,K)
  2425. XTR(6) = XPRO2(1,K) - UX/10.
  2426. YTR(6) = XPRO2(2,K) - UY/10.
  2427. ZTR(6) = XPRO2(3,K)
  2428. CALL POLRL(NTR,XTR,YTR,ZTR)
  2429. ELSE
  2430. NTR = 6
  2431. XTR(1) = XPROJ(1,K)
  2432. YTR(1) = XPROJ(2,K)
  2433. ZTR(1) = XPROJ(3,K)
  2434. XTR(2) = XPRO2(1,K)
  2435. YTR(2) = XPRO2(2,K)
  2436. ZTR(2) = XPRO2(3,K)
  2437. UX = XPRO2(1,K) - XPROJ(1,K)
  2438. UY = XPRO2(2,K) - XPROJ(2,K)
  2439. UZ = XPRO2(3,K) - XPROJ(3,K)
  2440. XTR(3) = XPRO2(1,K) + UX/3 + UY/5
  2441. YTR(3) = XPRO2(2,K) + UY/3 - UX/5
  2442. ZTR(3) = XPRO2(3,K)
  2443. XTR(4) = XPRO2(1,K) + UX/10
  2444. YTR(4) = XPRO2(2,K) + UY/10
  2445. ZTR(4) = XPRO2(3,K)
  2446. XTR(5) = XPRO2(1,K) + UX/3 - UY/5
  2447. YTR(5) = XPRO2(2,K) + UY/3 + UX/5
  2448. ZTR(5) = XPRO2(3,K)
  2449. XTR(6) = XPRO2(1,K)
  2450. YTR(6) = XPRO2(2,K)
  2451. ZTR(6) = XPRO2(3,K)
  2452. CALL POLRL(NTR,XTR,YTR,ZTR)
  2453. ENDIF
  2454. ELSE IF (IFLE.EQ.2) THEN
  2455. C fissures
  2456. IF (ICOR2(K).EQ.-1) GOTO 540
  2457. NTR = 2
  2458. XTR(1) = XPROJ(1,K)
  2459. YTR(1) = XPROJ(2,K)
  2460. ZTR(1) = XPROJ(3,K)
  2461. XTR(2) = XPRO2(1,K)
  2462. YTR(2) = XPRO2(2,K)
  2463. ZTR(2) = XPRO2(3,K)
  2464. CALL POLRL(NTR,XTR,YTR,ZTR)
  2465. ENDIF
  2466. 540 CONTINUE
  2467. SEGSUP XPRO2,ICOR2
  2468. KABCO2(2,IVEC)=0
  2469. 541 CONTINUE
  2470. * ligne suivante en commentaire car fait planter certains cas tests
  2471. ** SEGSUP KXPRO2,KABCO2
  2472. MVECTE = MVECTS
  2473. 538 CONTINUE
  2474. IF (INUMEL.EQ.0) GOTO 532
  2475. SEGACT XPROJ,IVU,ICPR
  2476. PAS=(X2-X1)/(XMA-XMI)
  2477. CALL INSEGT(5,IRESS)
  2478. SEGACT MELEME
  2479. IPT1=MELEME
  2480. IF (MCOUP.NE.0) GOTO 537
  2481. DO 534 II=1,MAX(1,LISOUS(/1))
  2482. IF (LISOUS(/1).NE.0) IPT1=LISOUS(II)
  2483. SEGACT IPT1
  2484. NBNN=IPT1.NUM(/1)
  2485. NBELEM=IPT1.NUM(/2)
  2486. DO 535 L=1,NBELEM
  2487. XG=0.
  2488. YG=0.
  2489. ZG=0.
  2490. NG=0
  2491. DO 536 N=1,NBNN
  2492. I=ICPR(IPT1.NUM(N,L))
  2493. IF (IVU(I).LE.0) GOTO 536
  2494. XG=XG+XPROJ(1,I)
  2495. YG=YG+XPROJ(2,I)
  2496. ZG=ZG+XPROJ(3,I)
  2497. NG=NG+1
  2498. 536 CONTINUE
  2499. IF (NG.EQ.0) GOTO 535
  2500. XG=XG/NG
  2501. YG=YG/NG
  2502. ZG=ZG/NG
  2503. C IF (XG.LT.XMI.OR.XG.GT.XMA.OR.YG.LT.YMI.OR.YG.GT.YMA) GOTO 535
  2504. INVCOU=IPT1.ICOLOR(L)
  2505. C IF (INVCOU.EQ.0) INVCOU=IDCOUL
  2506. IF (IDEFCO.EQ.1.AND.INVCOU.NE.IICOL) GOTO 535
  2507. CALL CHCOUL(INVCOU)
  2508. IF (L.LT.10) THEN
  2509. FMTX='(I1,7X)'
  2510. ELSEIF (L.LT.100) THEN
  2511. FMTX='(I2,6X)'
  2512. ELSEIF (L.LT.1000) THEN
  2513. FMTX='(I3,5X)'
  2514. ELSEIF (L.LT.10000) THEN
  2515. FMTX='(I4,4X)'
  2516. ELSEIF (L.LT.100000) THEN
  2517. FMTX='(I5,3X)'
  2518. ELSEIF (L.LT.1000000) THEN
  2519. FMTX='(I6,2X)'
  2520. ELSEIF (L.LT.10000000) THEN
  2521. FMTX='(I7,1X)'
  2522. ENDIF
  2523. WRITE (TXT,FMT=FMTX) L
  2524. XG=PAS*(XG-XMI)+X1
  2525. YG=PAS*(YG-YMI)+Y1
  2526. ZG=PAS*(ZG-ZMI)+ZMI
  2527. CALL TRLABL(XG,YG,ZG,TXT,8,0.15)
  2528. 535 CONTINUE
  2529. 534 CONTINUE
  2530. 537 CONTINUE
  2531. IF (IRESU.EQ.5.OR.IRESU.EQ.7) GOTO 6101
  2532. 532 CONTINUE
  2533. *
  2534. * AFFICHAGE D'ETIQUETTES LOCALISEES
  2535. IF (NBETIQ.GT.0) THEN
  2536. DO I=1,5
  2537. TRZ(I)=0.
  2538. ENDDO
  2539.  
  2540. PAS = (X2-X1)/(XMA-XMI)
  2541.  
  2542. * VALEURS (ARBITRAIRES !!) POUR LA LARGEUR ET LA HAUTEUR D'UN CARACTERE
  2543. LLCAR = 0.048
  2544. HHCAR = 0.045
  2545.  
  2546. SEGACT,ICPR
  2547.  
  2548. DO 539 K=1,NBANNO
  2549. ICLAS1 = MANNO1.ICLAS(K)
  2550. IF (ICLAS1.NE.2) GOTO 539
  2551.  
  2552. ISEGT1 = MANNO1.ISEGT(K)
  2553. METIQ1 = ISEGT1
  2554. IPTETI = METIQ1.INUPT
  2555. IPTNUM = IPTETI.NUM(1,1)
  2556. ICOUL = METIQ1.ICLRE
  2557. IPOSI = METIQ1.KPOSI
  2558. DISTA = METIQ1.DEPOR
  2559. KLIEN = METIQ1.BLIEN
  2560. TXANNO = METIQ1.TXETI
  2561. ILON = LONG(TXANNO)
  2562.  
  2563. * DETERMINATION DE L'EMPLACEMENT DE L'ANNOTATION
  2564. XPOI = XPROJ(1,ICPR(IPTNUM))
  2565. YPOI = XPROJ(2,ICPR(IPTNUM))
  2566. ZPOI = XPROJ(3,ICPR(IPTNUM))
  2567. XPOI = PAS*(XPOI-XMI)+X1
  2568. YPOI = PAS*(YPOI-YMI)+Y1
  2569. ZPOI = PAS*(ZPOI-ZMI)+ZMI
  2570.  
  2571. * POSITIONNEMENT DE L'ETIQUETTE PAR-RAPPORT A IPTNUM
  2572. DEC=SQRT(2.)/2. * DISTA
  2573. IF (IPOSI.EQ.1) THEN
  2574. XLNK=MAX(XPOI-DEC,XMI)
  2575. YLNK=MAX(YPOI-DEC,YMI)
  2576. XLAB=MAX(XLNK-(ILON*LLCAR),XMI)
  2577. YLAB=MAX(YLNK-HHCAR,YMI)
  2578. ELSEIF (IPOSI.EQ.2) THEN
  2579. XLNK=MAX(XPOI,XMI)
  2580. YLNK=MAX(YPOI-DISTA,YMI)
  2581. XLAB=MAX(XLNK-(ILON*LLCAR*0.5),XMI)
  2582. YLAB=MAX(YLNK-HHCAR,YMI)
  2583. ELSEIF (IPOSI.EQ.3) THEN
  2584. XLNK=MAX(XPOI+DEC,XMI)
  2585. YLNK=MAX(YPOI-DEC,YMI)
  2586. XLAB=MAX(XLNK,XMI)
  2587. YLAB=MAX(YLNK-HHCAR,YMI)
  2588. ELSEIF (IPOSI.EQ.4) THEN
  2589. XLNK=MAX(XPOI-DISTA,XMI)
  2590. YLNK=MAX(YPOI,YMI)
  2591. XLAB=MAX(XLNK-(ILON*LLCAR),XMI)
  2592. YLAB=MAX(YLNK-(HHCAR*0.5),YMI)
  2593. ELSEIF (IPOSI.EQ.5) THEN
  2594. XLNK=MAX(XPOI,XMI)
  2595. YLNK=MAX(YPOI,YMI)
  2596. XLAB=MAX(XLNK-(ILON*LLCAR*0.5),XMI)
  2597. YLAB=MAX(YLNK-(HHCAR*0.5),YMI)
  2598. ELSEIF (IPOSI.EQ.6) THEN
  2599. XLNK=MAX(XPOI+DISTA,XMI)
  2600. YLNK=MAX(YPOI,YMI)
  2601. XLAB=MAX(XLNK,XMI)
  2602. YLAB=MAX(YLNK-(HHCAR*0.5),YMI)
  2603. ELSEIF (IPOSI.EQ.7) THEN
  2604. XLNK=MAX(XPOI-DEC,XMI)
  2605. YLNK=MAX(YPOI+DEC,YMI)
  2606. XLAB=MAX(XLNK-(ILON*LLCAR),XMI)
  2607. YLAB=MAX(YLNK,YMI)
  2608. ELSEIF (IPOSI.EQ.8) THEN
  2609. XLNK=MAX(XPOI,XMI)
  2610. YLNK=MAX(YPOI+DISTA,YMI)
  2611. XLAB=MAX(XLNK-(ILON*LLCAR*0.5),XMI)
  2612. YLAB=MAX(YLNK,YMI)
  2613. ELSEIF (IPOSI.EQ.9) THEN
  2614. XLNK=MAX(XPOI+DEC,XMI)
  2615. YLNK=MAX(YPOI+DEC,YMI)
  2616. XLAB=MAX(XLNK,XMI)
  2617. YLAB=MAX(YLNK,YMI)
  2618. ENDIF
  2619. ZLAB = 0.
  2620.  
  2621. * TRACE DE L'ANNOTATION
  2622. CALL CHCOUL(ICOUL)
  2623. CALL TRLABL(XLAB,YLAB,ZLAB,TXANNO,ILON,0.11)
  2624.  
  2625. * TRACE DU LIEN
  2626. IF (KLIEN.AND.DISTA.GT.0.AND.IPOSI.NE.5) THEN
  2627. CALL CHCOUL(ICOUL)
  2628. XTR(1)=XPOI
  2629. YTR(1)=YPOI
  2630. ZTR(1)=ZPOI
  2631. XTR(2)=XLNK
  2632. YTR(2)=YLNK
  2633. ZTR(2)=ZPOI
  2634. CALL POLRL(2,XTR,YTR,ZTR)
  2635. ENDIF
  2636.  
  2637. CALL CHCOUL(IDCOUL)
  2638. 539 CONTINUE
  2639. ENDIF
  2640. *
  2641. IF (IDEFOR.EQ.0) GOTO 6101
  2642. SEGSUP KON,XPROJ,ICPR,IVU
  2643. IF (XPRO2.NE.0) SEGSUP XPRO2
  2644. IF (MCOUP.NE.0) THEN
  2645. C NETTOYAGE APRES COUPE
  2646. C SEGSUP MCOUP
  2647. SEGACT MCOORD*MOD
  2648. C SEGADJ MCOORD
  2649. C SEGACT MELEME
  2650. C DO 8801 IO=1,LISOUS(/1)
  2651. C* IPT1=LISOUS(IO)
  2652. C SEGSUP IPT1
  2653. C 8801 CONTINUE
  2654. C SEGSUP MELEME
  2655. ENDIF
  2656. GOTO 6099
  2657. C<<<< FIN DE BOUCLE SUR LES DEFORMEES OU VECTEURS <<<<<<<<<<<<<<<<<<<<<<
  2658.  
  2659.  
  2660. C---- POINT D'ARRIVEE EN FIN DE BOUCLE SUR LES DEFORMEES OU VECTEURS ---
  2661. 6100 CONTINUE
  2662. IDEFS=IDEFOR
  2663. IDEFOR=0
  2664. IF (IANIM.NE.0) CALL TRIMAG(NDEF+1)
  2665. IF (KABEL.NE.0) SEGSUP KABEL
  2666. IF (KABEL2.NE.0) SEGSUP KABEL2
  2667. IF (KABCPR.NE.0) SEGSUP KABCPR
  2668. IF (KABCP2.NE.0) SEGSUP KABCP2
  2669. SEGSUP KABCOR
  2670. IF (KABCO3.NE.0) SEGSUP KABCO3
  2671. IF (LABCO2.NE.0) SEGSUP LABCO2
  2672. IF (LABCO3.NE.0) SEGSUP LABCO3
  2673. 6101 CONTINUE
  2674. CALL MAJSEG(1,IRESU,IQUALI,INUMNO,INUMEL)
  2675. IF (ZCHAM) THEN
  2676. C ZCHAM=.TRUE.
  2677. SEGACT MCHPOI,icpr,vcpcha
  2678. do ibc=1,ipchp(/1)
  2679. msoupo=ipchp(ibc)
  2680. segact msoupo
  2681. do ibcn=1,nocomp(/2)
  2682. if(compch(lcomp).eq.nocomp(ibcn)) go to 6108
  2683. enddo
  2684. go to 6107
  2685. 6108 continue
  2686. IPT6=IGEOC
  2687. SEGACT IPT6
  2688. MPOVAL=IPOVAL
  2689. SEGACT MPOVAL
  2690. do I=1, IPT6.NUM(/2)
  2691. IJ=IPT6.NUM(1,I)
  2692. ijj=icpr(ij)
  2693. WRITE(VALCH,FMT='(E10.3)') vcpcha(ij)
  2694. CALL TRLABL(XPROJ(1,IJj),XPROJ(2,IJj),0.,
  2695. $ VALCH,LEN(VALCH),0.15)
  2696. enddo
  2697. 6107 continue
  2698. enddo
  2699. segdes icpr,vcpcha
  2700. ENDIF
  2701.  
  2702. * option NOLEN : pas d'informations
  2703. IF(ZNOLE) GOTO 6105
  2704. C BERTIN : fin affichage CHAMPOIN
  2705. IF (INWDS.AND.VALEUR) THEN
  2706. C AFFICHAGE DES LABELS DES ISOVALEURS
  2707. CALL FVALIS(1,IRESU,NHAUT,NISO)
  2708. iresu=3
  2709. CALL INSEGT(7,iresu)
  2710. CALL CHCOUL(0)
  2711. NHAUT=NHAUT+INT(YHAUT)
  2712.  
  2713. NDEC=0
  2714. IF (NISO.NE.0.AND.NBCAT.EQ.0) THEN
  2715. C Legende des isovaleurs
  2716. IF(TXISO.NE.' ') VALISO=TXISO
  2717. IF (NCOMP.NE.0) VALISO=COMPCH(LCOMP)
  2718. LVS=LONG(VALISO)
  2719. CALL TRLABL(XHAUT+0.1,FLOAT(NHAUT+2),0.,VALISO(1:LVS),LVS,0.17)
  2720. C min et max
  2721. WRITE (ZONE,FMT='(1PE9.2)') VCHMIN
  2722. CALL TRLABL(XHAUT+0.,FLOAT(NHAUT),0.,'>'//ZONE,10,0.17)
  2723.  
  2724. IF (ZDATE) CALL TRLABL(-1.4,FLOAT(NHAUT-50),0.,BUFFER,26,
  2725. $ 0.17)
  2726. WRITE (ZONE,FMT='(1PE9.2)') VCHMAX
  2727. CALL TRLABL(XHAUT+0.,FLOAT(NHAUT+1),0.,'<'//ZONE,10,0.17)
  2728. C NISO=MIN(15,NISO)
  2729. C NDEC : amplitude verticale de la gamme d'isovaleurs
  2730. NDEC = 25
  2731. PDEC = REAL(NDEC)
  2732. PDDEC= PDEC/NISO
  2733. cBP pour espacer les legendes avec VING DIX ou CINQ labels maxi
  2734. XDEC=0.98
  2735. if(NDEC2.eq.1) XDEC=XDEC*25./21.
  2736. if(NDEC2.eq.2) XDEC=XDEC*25./11.
  2737. if(NDEC2.eq.3) XDEC=XDEC*25./6.
  2738. FAIT = -1
  2739. CPM NHAUT= NHAUT
  2740. NBAS = NHAUT - 1 - NDEC
  2741. DO 6102 I=1,NISO
  2742. PYB = NBAS + ((I-1)*PDDEC)
  2743. IF (ISOTYP.NE.0) THEN
  2744. C petit carre colore
  2745. PX(1)=XHAUT+0.
  2746. PX(2)=XHAUT+0.09
  2747. PX(3)=XHAUT+0.09
  2748. PX(4)=XHAUT+0.
  2749. PY(1)=PYB
  2750. PY(2)=PYB
  2751. PY(3)=PYB + PDDEC
  2752. PY(4)=PYB + PDDEC
  2753. C si moins de 16 isov., on prend une couleur
  2754. C correspondante sur deux (NISO<8) ou sur une (NISO>=8)
  2755. IF (NISO.LT.16) THEN
  2756. c CALL TRAISO(4,PX,PY,ICOTAB(I*(2-NISO/8)))
  2757. CALL TRAISO(4,PX,PY,ICOTAB(ISOTAB(I,NISO)))
  2758. ELSE
  2759. CALL TRAISO(4,PX,PY,I)
  2760. ENDIF
  2761. IF (I*PDDEC-FAIT.LT. XDEC ) GOTO 6102
  2762. C valeur seuil pour l'affichage de la legende isovaleur
  2763. IF (I.GT.1) THEN
  2764. WRITE (ZONE,FMT='(1PG9.2)') VCHC(I-1)
  2765. CALL CHCOUL(0)
  2766. CALL TRLABL(XHAUT+0.1,PYB,0.,ZONE,10,0.17)
  2767. ENDIF
  2768. FAIT=I*PDDEC
  2769. ELSE
  2770. C lettre coloree
  2771. IF (NISO.LT.13) THEN
  2772. C CALL CHCOUL(ICOTAB(I*(2-NISO/8)))
  2773. CALL CHCOUL(ICOTAB(ISOTA0(I,NISO)))
  2774. ELSE
  2775. Csg CALL CHCOUL(I)
  2776. CALL CHCOUL(ICOTAB(MOD(I,12)+1))
  2777. ENDIF
  2778. IF (I*PDDEC-FAIT.LT. 0.98 ) GOTO 6102
  2779. CALL TRLABL(XHAUT+0.002,PYB,0.,ABCDEF(I:I),1,0.17)
  2780. C valeur seuil
  2781. WRITE (ZONE,FMT='(1PG9.2)') VCHC(I)
  2782. CALL TRLABL(XHAUT+0.1,PYB,0.,ZONE,10,0.17)
  2783. FAIT=I*PDDEC
  2784. ENDIF
  2785. 6102 CONTINUE
  2786. ELSE IF (KDEFOR.NE.0) THEN
  2787. CALL TRLABL(XHAUT+0.,FLOAT(NHAUT),0.,'AMPLITUDE',9,0.17)
  2788. CPM NDEFMX au lieu de 7
  2789. NDEF=MIN(NDEF,NDEFMX)
  2790. NBAS = NHAUT - 1 - NDEF
  2791. DO 6103 I=1,NDEF
  2792. CALL CHCOUL(ICHL(I))
  2793. XXXX = AMPIMP(I)
  2794. IF(AMPIMP(I).GE.XSGRAN/2.) XXXX = VCHC(I)
  2795. WRITE (ZONE,FMT='(1PG9.2)') XXXX
  2796. CALL TRLABL(XHAUT+0.,FLOAT(NBAS+I),0.,ZONE,9,0.17)
  2797. 6103 CONTINUE
  2798. ENDIF
  2799. IF (NISO.NE.0.AND.KDEFOR.NE.0) THEN
  2800. CALL CHCOUL(0)
  2801. CALL TRLABL(0.1,FLOAT(NHAUT-NDEC-3),0.,'AMPLITUDE',9,0.17)
  2802. CALL TRLABL(0.1,FLOAT(NHAUT-NDEC-4),0.,'DEFORMEE ',9,0.17)
  2803. WRITE (ZONE,FMT='(1PG9.2)') SIAMPL
  2804. CALL TRLABL(0.,FLOAT(NHAUT - 6 - NDEC),0.,ZONE,9,0.17)
  2805. ENDIF
  2806. IF (NVECL.NE.0) THEN
  2807. CALL TRBOX(0.75,0.75)
  2808. CALL CHCOUL(0)
  2809. C+++*
  2810. CALL TRLABL(-0.1,FLOAT(NHAUT-NDEC-8),0.,
  2811. & 'COMPOSANTES',11,0.17)
  2812. IF (IFLE.NE.0) THEN
  2813. IF (IFLE.EQ.1) THEN
  2814. CALL TRLABL(-0.1,NHAUT-NDEC-8.75,0.,
  2815. & 'CONTRAINTES',11,0.17)
  2816. ELSE
  2817. CALL TRLABL(0.1,NHAUT-NDEC-8.75,0.,'FISSURES',8,0.17)
  2818. ENDIF
  2819. NBAS = NHAUT - 10 - NDEC - NVECL
  2820. DO I=1,NVECL
  2821. CALL CHCOUL(NVCOL(I))
  2822. ZONE=NVLEG(1,I)
  2823. CALL TRLABL(0.,FLOAT(NBAS+I),0.,ZONE,4,0.17)
  2824. ENDDO
  2825. ELSE
  2826. CALL TRLABL(0.1,NHAUT-NDEC-8.75,0.,'VECTEURS',8,0.17)
  2827. NBAS = NHAUT - 10 - NDEC - NVECL
  2828. DO 6104 I=1,NVECL
  2829. CALL CHCOUL(NVCOL(I))
  2830. IF (IDIM.EQ.2) ZONE=NVLEG(1,I)//NVLEG(2,I)
  2831. IF (IDIM.EQ.3) ZONE=NVLEG(1,I)//NVLEG(2,I)//NVLEG(3,I)
  2832. CALL TRLABL(0.,FLOAT(NBAS+I),0.,ZONE,12,0.17)
  2833. 6104 CONTINUE
  2834. ENDIF
  2835. ENDIF
  2836. INWDS2=INWDS
  2837. INWDS=.FALSE.
  2838. CALL FVALIS(0,IRESU,NHAUT,NISO)
  2839. ENDIF
  2840.  
  2841.  
  2842. * AFFICHAGE D'UNE LEGENDE DETAILLANT LA SIGNIFICATION DES COULEURS
  2843. * DU MAILLAGE (NOTE : ON NE TESTE PAS SI LES COULEURS APPARAISSENT
  2844. * EFFECTIVEMENT DANS LE MAILLAGE)
  2845. IF (NBCAT.GT.0) THEN
  2846. DO I=1,5
  2847. TRZ(I)=0.
  2848. ENDDO
  2849.  
  2850. NHAUT = 31
  2851. NDEC = 25
  2852. NBAS = NHAUT - 1 - NDEC
  2853. PDEC = REAL(NDEC)
  2854. * pour eviter une division par zero due a la sortie du calcul de pddec du test
  2855. PDDEC= MIN(PDEC/(NBCAT+xspeti),3.)
  2856. XPOS1 = 0.
  2857. DXLEG = 0.5*ABS(X2-X1)
  2858.  
  2859. K1 = 0
  2860. DO 236 K=1,NBANNO
  2861. ICLAS1 = MANNO1.ICLAS(K)
  2862. IF (ICLAS1.NE.1) GOTO 236
  2863.  
  2864. K1 = K1 + 1
  2865. ISEGT1 = MANNO1.ISEGT(K)
  2866. MCATE1 = ISEGT1
  2867. SEGACT,MCATE1
  2868.  
  2869. ICOUL = MCATE1.ICLRC
  2870. TXANNO = MCATE1.TXCAT
  2871.  
  2872. * TRACE DE LA PETITE BOITE DE COULEUR
  2873. TYY = NBAS + ((K1-1.)*PDDEC)
  2874. TRX(1)= XPOS1
  2875. TRX(2)= XPOS1 + DXLEG
  2876. TRX(3)= XPOS1 + DXLEG
  2877. TRX(4)= XPOS1
  2878. TRY(1)= TYY
  2879. TRY(2)= TYY
  2880. TRY(3)= TYY + (0.5*PDDEC)
  2881. TRY(4)= TYY + (0.5*PDDEC)
  2882. CALL TRFACE(4,TRX,TRY,TRZ,1.,ICOUL,IEFF)
  2883.  
  2884. * ECRITURE DU TEXTE DE LA LEGENDE
  2885. ILON = LONG(TXANNO)
  2886. CALL CHCOUL(0)
  2887. CALL TRLABL(XPOS1,TYY + (0.6*PDDEC),0.,TXANNO,ILON,0.17)
  2888.  
  2889. SEGDES,MCATE1
  2890. 236 CONTINUE
  2891. ENDIF
  2892.  
  2893.  
  2894.  
  2895.  
  2896. C----------------------------------------------------------
  2897. C
  2898. C POST TRAITEMENT DE L'AFFICHAGE : ZOOM,NOM,IMPRESSION ...
  2899. C
  2900. C----------------------------------------------------------
  2901.  
  2902. C
  2903. 6105 CONTINUE
  2904.  
  2905.  
  2906. C AFFICHAGE DES CLES GRAPHIQUES
  2907. C AFFICHAGE DES CLES GRAPHIQUES
  2908. NCASE=10
  2909. LLONG=13
  2910. LEGEND(1)=' Fin trace '
  2911. LEGEND(2)=' Zoom/Pan'
  2912. LEGEND(3)=' Rotation'
  2913. LEGEND(4)=' Coupe '
  2914. LEGEND(5)=' Valeur'
  2915. LEGEND(6)='Qualification'
  2916. LEGEND(7)=' Noeuds'
  2917. LEGEND(8)=' Elements'
  2918. LEGEND(9)=' Animation'
  2919. C attention dans xtrini on teste la chaine " Animation"
  2920. LEGEND(10)=' Options'
  2921.  
  2922. if (idim.ne.3) then
  2923. legend(3)=' '
  2924. legend(4)=' '
  2925. endif
  2926. IF (NISO.NE.0.OR.NDEF.NE.0.OR.NVECL.NE.0) THEN
  2927. LEGEND(6)=' '
  2928. LEGEND(7)=' '
  2929. LEGEND(8)=' '
  2930. IF (KDEFOR.NE.0.OR.IVEC.NE.0) LEGEND(5)=' '
  2931. IF (IANIM.EQ.0) LEGEND(9)=' '
  2932. ELSE
  2933. LEGEND(5)=' '
  2934. LEGEND(9)=' '
  2935. ENDIF
  2936. IF (KDEFOR.NE.0) LEGEND(5)='Amplification'
  2937. IF (NCOMP.NE.0) LEGEND(6)='Composantes'
  2938. CALL MENU(LEGEND,NCASE,LLONG)
  2939. C
  2940. IRESU=0
  2941. C RECUPERATION DE LA CLE FRAPPEE
  2942. icle=-1
  2943. isort=0
  2944. CALL TRAFF(ICLE)
  2945. C TRAITEMENT
  2946. IF (ICLE.NE.0) THEN
  2947. IF (ICLE.EQ.1) THEN
  2948. CALL PRZOOM(IRESU,ISORT,IQUALI,INUMNO,INUMEL,
  2949. $ XMI,XMA,YMI,YMA)
  2950.  
  2951.  
  2952. ENDIF
  2953. IF (ICLE.EQ.2) THEN
  2954. CALL rotvu(ioeini,ioeil,cgrav,xmi,xma,ymi,yma,zmi,zma,axez)
  2955. GOTO 7001
  2956. ENDIF
  2957. IF (ICLE.EQ.4) THEN
  2958. IF (KDEFOR.EQ.0) THEN
  2959. C AFFICHAGE DE VALEUR D'ISO
  2960. PAS=(X2-X1)/(XMA-XMI)
  2961. CALL ISOINT(VCPCHA,MELEME,ICPR,XPROJ,IVU,PAS,
  2962. $ XMI,YMI,X1,Y1,mcham)
  2963. IRESU=2
  2964. GOTO 6101
  2965. ELSE
  2966. C (fdp) Modification de l'amplitude de maniere interactive
  2967. CALL AMPINT(NDEF,VCHC,SDEF,IIMP)
  2968. C (fdp) Dans le cas d'une deformee seule, on garde l'amplification
  2969. C Cette valeur sera re-utilisee au prochain trace d'une
  2970. C deformee seule
  2971. IF (NDEF.EQ.1) THEN
  2972. AMPLIT=REAL(AMPIMP(IIMP))
  2973. SIAMPL=REAL(AMPIMP(IIMP))
  2974. ENDIF
  2975. GOTO 7001
  2976. ENDIF
  2977. ENDIF
  2978. IF (ICLE.EQ.5.AND.NCOMP.NE.0) THEN
  2979. CALL COMPINT(NCOMP,LCOMP,COMPCH)
  2980. GOTO 7001
  2981. ENDIF
  2982. IF (ICLE.EQ.5) CALL CHANG(IRESU,ISORT,IQUALI,3)
  2983. IF (ICLE.EQ.6) CALL CHANG(IRESU,ISORT,INUMNO,4)
  2984. IF (ICLE.EQ.7) CALL CHANG(IRESU,ISORT,INUMEL,5)
  2985. IF (ICLE.EQ.11) THEN
  2986. CALL FLGI
  2987. ISORT=0
  2988. ENDIF
  2989. IF (ICLE.EQ.12) THEN
  2990. CALL IMPR
  2991. ISORT=0
  2992. ENDIF
  2993. C BERTIN: Traitement de la coupe
  2994. IF (ICLE.EQ.3) THEN
  2995. C Ecriture de maniere permanente du barycentre e ICOUP1.
  2996. IF (ZCOM.EQ.0) THEN
  2997. CALL ECROBJ('MAILLAGE',MELEME)
  2998. CALL BARYCE
  2999. CALL LIROBJ('POINT',IBARY,1,IRETOU)
  3000. IREF=(IBARY-1)*(IDIM+1)
  3001. BARY(1)=REAL(XCOOR(IREF+1))
  3002. BARY(2)=REAL(XCOOR(IREF+2))
  3003. BARY(3)=REAL(XCOOR(IREF+3))
  3004. XB= BARY(1)
  3005. YB= BARY(2)
  3006. ZB= BARY(3)
  3007. ZCOM=1
  3008. SEGACT MCOORD*MOD
  3009. nbpts=nbpts+3
  3010. segadj mcoord
  3011. icoup1=nbpts-2
  3012. icoup2=nbpts-1
  3013. icoup3=nbpts
  3014. ENDIF
  3015.  
  3016. XE=REAL( XCOOR((IOEIL-1)*(idim+1)+1) )
  3017. YE=REAL( XCOOR((IOEIL-1)*(idim+1)+2) )
  3018. ZE=REAL( XCOOR((IOEIL-1)*(idim+1)+3) )
  3019. LEGEND(1)=' Retour '
  3020. LEGEND(2)=' Annulation '
  3021. LEGEND(3)=' Position '
  3022.  
  3023. CALL MENU(LEGEND,3,13)
  3024. call trmess('Pour une coupe choisir Position puis la definir')
  3025. CALL TRAFF(ICLE2)
  3026.  
  3027. IF (ICLE2.EQ.0) GOTO 6105
  3028.  
  3029. IF (ICLE2.EQ.1) THEN
  3030. ICOUP=0
  3031. mcou2=0
  3032. mcoup=0
  3033. coupol=-1.
  3034. GOTO 7001
  3035. ENDIF
  3036. call coupno(xmi,xma,ymi,yma,zmi,zma,coupra,coupol)
  3037. if(melemi.ne.0)then
  3038. mcoup=0
  3039. mcou2=0
  3040. meleme=melemi
  3041. endif
  3042. if(melei2.ne.0) melem2=melei2
  3043. icoup=1
  3044. C recherche du min et du max le long de oeil bary
  3045. xb=bary(1)
  3046. yb=bary(2)
  3047. zb=bary(3)
  3048. xm=xb-XE
  3049. ym= yb-YE
  3050. zm= zb-ZE
  3051. oeba=sqrt(xm*xm + ym*ym + zm*zm)
  3052. xm = xm / oeba
  3053. ym=ym/oeba
  3054. zm=zm/oeba
  3055. ipt7=meleme
  3056. ipt3=ipt7
  3057. segact ipt7
  3058. coupma= -1000.*oeba
  3059. coupmi= +1000.*oeba
  3060. do ipa=1,max(1,ipt7.lisous(/1))
  3061. if( ipt7.lisous(/1).ne.0) then
  3062. ipt3=ipt7.lisous(ipa)
  3063. segact ipt3
  3064. endif
  3065. do ipb=1,ipt3.num(/2)
  3066. do ipc=1,ipt3.num(/1)
  3067. iu=ipt3.num(ipc,ipb)*(idim+1)
  3068. xu= real(xcoor(iu-3))
  3069. yu= real(xcoor(iu-2))
  3070. zu= real(xcoor(iu-1))
  3071. dd= xm*(xb-xu) + ym*(yb-yu) +zm*(zb-zu)
  3072. if(coupma.lt.dd ) coupma=dd
  3073. if(coupmi.gt.dd ) coupmi=dd
  3074. enddo
  3075. enddo
  3076. enddo
  3077. xbn = xb - xm*coupma + xm*coupra*(coupma-coupmi)
  3078. ybn = yb - ym*coupma + ym*coupra*(coupma-coupmi)
  3079. zbn = zb - zm*coupma + zm*coupra*(coupma-coupmi)
  3080. segact,mcoord*MOD
  3081. XCOOR((ICOUP1-1)*(idim+1)+1)=XBn
  3082. XCOOR((ICOUP1-1)*(idim+1)+2)=YBn
  3083. XCOOR((ICOUP1-1)*(idim+1)+3)=ZBn
  3084.  
  3085.  
  3086. if( (abs (XM) + abs(YM)) .ne. 0.) then
  3087. xcoor((icoup2-1)*(idim+1)+1 )= xbn - ym
  3088. xcoor((icoup2-1)*(idim+1)+2 )= ybn + xm
  3089. xcoor((icoup2-1)*(idim+1)+3 )= zbn
  3090. xcoor((icoup3-1)*(idim+1)+1 )= xbn - xm*zm
  3091. xcoor((icoup3-1)*(idim+1)+2 )= ybn - ym*zm
  3092. xcoor((icoup3-1)*(idim+1)+3 )= zbn + xm*xm + ym*ym
  3093. else
  3094. xcoor((icoup2-1)*(idim+1)+1 )= xbn + 1.
  3095. xcoor((icoup2-1)*(idim+1)+2 )= ybn
  3096. xcoor((icoup2-1)*(idim+1)+3 )= zbn
  3097. xcoor((icoup3-1)*(idim+1)+1 )= xbn
  3098. xcoor((icoup3-1)*(idim+1)+2 )= ybn + 1.
  3099. xcoor((icoup3-1)*(idim+1)+3 )= zbn
  3100. endif
  3101. C write(IOIMP,*) ' points definissant la coupe'
  3102. icoy1=(ICOUP1-1)*(idim+1)
  3103. icoy2=(ICOUP2-1)*(idim+1)
  3104. icoy3=(ICOUP3-1)*(idim+1)
  3105. * write(IOIMP,fmt='(3(e12.5,2X))')xcoor(icoy1+1),xcoor(icoy1+2)
  3106. * $ ,xcoor(icoy1+3)
  3107. * write(ioimp,fmt='(3(e12.5,2X))')xcoor(icoy2+1),xcoor(icoy2+2)
  3108. * $ ,xcoor(icoy2+3)
  3109. * write(ioimp,fmt='(3(e12.5,2X))')xcoor(icoy3+1),xcoor(icoy3+2)
  3110. * $ ,xcoor(icoy3+3)
  3111. GOTO 7001
  3112. ENDIF
  3113.  
  3114. IF (ICLE.EQ.9) THEN
  3115. LEGEND(1)= ' Retour '
  3116. LEGEND(2)=' Isovaleurs'
  3117. IF (ZCHAM) THEN
  3118. LEGEND(3)=' (X) Champ'
  3119. ELSE
  3120. LEGEND(3)=' ( ) Champ'
  3121. ENDIF
  3122. IF (ZDATE) THEN
  3123. LEGEND(4)=' (X) Date '
  3124. ELSE
  3125. LEGEND(4)=' ( ) Date '
  3126. ENDIF
  3127. LEGEND(5)=' Fonts >> '
  3128. IF (ICOSC.EQ.1) THEN
  3129. LEGEND(6)='Ecran>> Blanc'
  3130. ELSE IF (ICOSC.EQ.2) THEN
  3131. LEGEND(6)='Ecran>> Noir'
  3132. ENDIF
  3133. LEGEND(7)=' Pos Legende '
  3134. CALL MENU(LEGEND,7,13)
  3135. CALL TRAFF(ICLE2)
  3136. C si on a change la fonte on sort
  3137. if (icle2.eq.7) icle2=0
  3138.  
  3139. IF (ICLE2.EQ.0) GOTO 6105
  3140.  
  3141. IF (ICLE2.EQ.1) THEN
  3142. CALL TRGET ('Entrer le nombre d''isovaleurs (<100) : ',
  3143. $ TMPCAR)
  3144. READ(TMPCAR,'(I2)') BA
  3145. NISOD = BA
  3146. C write(6,*) 'NISO, ICHISO =',NISO,ICHISO
  3147.  
  3148. GOTO 7001
  3149. ENDIF
  3150.  
  3151. IF (ICLE2.EQ.2.and.(mchpoi.ne.0)) THEN
  3152. IF (ZCHAM) then
  3153. ZCHAM=.FALSE.
  3154. ELSE
  3155. ZCHAM=.TRUE.
  3156. ENDIF
  3157. GOTO 7001
  3158. ENDIF
  3159.  
  3160. IF (ICLE2.EQ.3) THEN
  3161. IF (ZDATE) THEN
  3162. ZDATE=.FALSE.
  3163. ELSE
  3164. ZDATE=.TRUE.
  3165. ENDIF
  3166. GOTO 7001
  3167. ENDIF
  3168. IF (ICLE2.EQ.4) THEN
  3169. LEGEND(1)=' Retour '
  3170. LEGEND(2)=' 8_BY_13 '
  3171. LEGEND(3)=' 9_BY_15 '
  3172. LEGEND(4)=' TIMES_10 '
  3173. LEGEND(5)=' TIMES_24 '
  3174. LEGEND(6)=' HELV_10 '
  3175. LEGEND(7)=' HELV_12 '
  3176. LEGEND(8)=' HELV_18 '
  3177. CALL MENU(LEGEND,8,13)
  3178. CALL TRAFF(ICLE3)
  3179. IF (ICLE3.EQ.0) GOTO 7001
  3180. IOPOLI=ICLE3
  3181. GOTO 7001
  3182. ENDIF
  3183. IF (ICLE2.EQ.5) THEN
  3184. IF (ICOSC.EQ.1) THEN
  3185. ICOSC=2
  3186. ELSE IF (ICOSC.EQ.2) THEN
  3187. ICOSC=1
  3188. ENDIF
  3189. GOTO 7001
  3190. ENDIF
  3191. IF (ICLE2.EQ.6) THEN
  3192. C ZLEGI=.TRUE.
  3193. CALL TRGET ('Translation en X de :', TMPCAR)
  3194. READ(TMPCAR,'(F4.2)') XHAUT
  3195. CALL TRGET ('Translation en Y de :', TMPCAR)
  3196. READ(TMPCAR,'(F4.2)') YHAUT
  3197. GOTO 7001
  3198. ENDIF
  3199.  
  3200. ENDIF
  3201.  
  3202. C BERTIN: Fin traitement
  3203.  
  3204. IF (ISORT.EQ.0) GOTO 6105
  3205. C
  3206. ELSE
  3207. CALL MAJSEG(2,IRESU,IQUALI,INUMNO,INUMEL)
  3208. ENDIF
  3209. IF (IRESU.EQ.8) THEN
  3210. XMI=XMIN
  3211. XMA=XMAX
  3212. YMI=YMIN
  3213. YMA=YMAX
  3214. IRESU=1
  3215. ENDIF
  3216. IF (IRESU.EQ.2) THEN
  3217. GOTO 4202
  3218. ELSE IF (IRESU.EQ.1) THEN
  3219. X1=XMI
  3220. X2=XMA
  3221. Y1=YMI
  3222. Y2=YMA
  3223. C Z1=ZMI
  3224. C Z2=ZMA
  3225. IF (IDEFOR.NE.0) GOTO 1234
  3226. C IF (IECLAT.NE.1.AND.IFADES.NE.1) THEN PV JUIN 86
  3227. IF (IECLAT.NE.1) THEN
  3228. SEGACT KON,XPROJ,ICPR,IVU
  3229. DO 6004 I=1,NBCONR
  3230. DO J=1,KON(/3)
  3231. IF (KON(1,I,J).LT.0) KON(1,I,J)=-KON(1,I,J)
  3232. ENDDO
  3233. 6004 CONTINUE
  3234.  
  3235. SEGDES KON
  3236. CPM NBCOUL-1 au lieu de 7
  3237. DO I=1,NBCOUL-1
  3238. ICHC(I)=ICHCS(I)
  3239. ENDDO
  3240. CALL DFENET(XMI,XMA,YMI,YMA,ZMI,ZMA,X1,X2,Y1,Y2,FENET)
  3241. GOTO 4999
  3242. ENDIF
  3243. SEGACT XPROJ
  3244. CALL DFENET(XMI,XMA,YMI,YMA,ZMI,ZMA,X1,X2,Y1,Y2,FENET)
  3245. GOTO 4201
  3246. ELSE IF (IRESU.EQ.3) THEN
  3247. GOTO 4202
  3248. ELSE IF (IRESU.EQ.4) THEN
  3249. GOTO 500
  3250. ELSE IF (IRESU.EQ.5) THEN
  3251. GOTO 531
  3252. ELSE IF (IRESU.EQ.6) THEN
  3253. CALL DFENET(XMI,XMA,YMI,YMA,ZMI,ZMA,X1,X2,Y1,Y2,FENET)
  3254. C IF (IECLAT.NE.1.AND.IFADES.NE.1) THEN PV JUIN 86
  3255. IF (IECLAT.NE.1) THEN
  3256. SEGSUP KON
  3257. GOTO 6010
  3258. ELSE
  3259. SEGACT XPROJ
  3260. GOTO 4201
  3261. ENDIF
  3262. ENDIF
  3263. SEGSUP XPROJ,ICPR,IVU
  3264. IF (IECLAT.NE.1) SEGSUP KON
  3265. IF (IDEFOR.NE.0) THEN
  3266. SEGSUP KABEL,KABCOR,KABCPR
  3267. SEGDES MDEFOR
  3268. ENDIF
  3269. IF ((MCOUP.NE.0).AND.(IDEFOR.EQ.0)) THEN
  3270. C NETTOYAGE APRES COUPE
  3271. SEGSUP MCOUP
  3272. SEGACT MCOORD*MOD
  3273. C SEGADJ MCOORD
  3274. SEGACT MELEME
  3275. DO IO=1,LISOUS(/1)
  3276. IPT1=LISOUS(IO)
  3277. SEGSUP IPT1
  3278. ENDDO
  3279. SEGSUP MELEME
  3280. ENDIF
  3281. IF (MVECTE.NE.0) SEGDES MVECTE
  3282. IF (VCPCHA.NE.0) SEGSUP VCPCHA
  3283.  
  3284. C FIN de l'appel a PRTRAC - Cas particulier IDIM=1
  3285. C Recopie du segment MCOORD en DIMENSION 1 (retour a l'etat initial)
  3286. 8900 IF (IDIMSAV.NE.0) THEN
  3287. IDIM=IDIMSAV
  3288. SEGSUP MCOORD
  3289. MCOORD=ICOORSAV
  3290. SEGDES,MCOORD
  3291. ENDIF
  3292. RETURN
  3293.  
  3294. 7001 continue
  3295. if (icpr .ne.0) segsup icpr
  3296. if (ivu .ne.0) segsup ivu
  3297. if (ntseg .ne.0) segsup ntseg
  3298. if (kon .ne.0) segsup kon
  3299. if (xproj .ne.0) segsup xproj
  3300. if (xpro2 .ne.0) segsup xpro2
  3301. if (kxpro2.ne.0) segsup kxpro2
  3302. if (kabel .ne.0) segsup kabel
  3303. if (kabcor.ne.0) segsup kabcor
  3304. if (labco2.ne.0) segsup labco2
  3305. if (kabel2.ne.0) segsup kabel2
  3306. if (kabco3.ne.0) segsup kabco3
  3307. if (labco3.ne.0) segsup labco3
  3308. if (kabco2.ne.0) segsup kabco2
  3309. if (icor2 .ne.0) segsup icor2
  3310. C KABCO2(2,IVEC)=0
  3311. if (kabcpr.ne.0) segsup kabcpr
  3312. if (kabcp2.ne.0) segsup kabcp2
  3313. if (mvecte.ne.0) segact mvecte
  3314. if (mcoup .ne.0) segsup mcoup
  3315. if (vcpcha.ne.0) segsup vcpcha
  3316. idefor=idefs
  3317. ipv=1
  3318. C if (mdefos.ne.-1) mdefor=mdefos
  3319. if (melsau.ne.0) meleme=melsau
  3320. INWDS=INWDS2
  3321. goto 4210
  3322.  
  3323. END
  3324.  
  3325.  
  3326.  
  3327.  
  3328.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales