Télécharger prtrac.eso

Retour à la liste

Numérotation des lignes :

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

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