Télécharger prtrac.eso

Retour à la liste

Numérotation des lignes :

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

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