Télécharger prtrac.eso

Retour à la liste

Numérotation des lignes :

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

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