Télécharger prtrac.eso

Retour à la liste

Numérotation des lignes :

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

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