Télécharger varinu.eso

Retour à la liste

Numérotation des lignes :

varinu
  1. C VARINU SOURCE JK148537 26/06/23 21:15:08 12579
  2.  
  3. SUBROUTINE VARINU(IPOI1,IPOI2,IPMODL,IRET,MICHE,JEMIL,CHARP)
  4.  
  5. *____________________________________________________________________
  6. *
  7. * OBJET : Variation d'un champ/élément ayant une ou des composante(s)
  8. * °°°°°°° de type EVOLUTION ou NUAGE (FLOTTANT-EVOLUTION
  9. * ou FLOTTANT-FLOTTANT-EVOLUTION) en fonction
  10. * d'un champ/point ou d'un champ/élément.Ce champ peut
  11. * avoir plusieurs composantes si necessaire. Dans ce cas il
  12. * est possible d'instancier un champ/element dont les
  13. * composantes dependent de parametres differents en
  14. * chaque point.
  15. *
  16. * ENTREES :
  17. * °°°°°°°°°
  18. *
  19. * IPOI1 Pointeur sur un MCHAML
  20. * IPOI2 Pointeur sur un CHPOINT ou MCHAML
  21. * IPMODL Pointeur sur un MMODEL
  22. * JEMIL Support de sortie pour le champ : 1 A 6
  23. * MICHE = 1 IPOI2 est un objet de type CHPOINT
  24. * = 0 IPOI2 est un objet de type MCHAML
  25. * CHARP Chaine definissant le sous type (facultatif)
  26. *
  27. *
  28. * SORTIE :
  29. * °°°°°°°°
  30. *
  31. * IRET Pointeur sur le MCHAML resultat
  32. * =0 si operation impossible
  33. *
  34. *_____________________________________________________________________
  35.  
  36. IMPLICIT INTEGER(I-N)
  37. IMPLICIT REAL*8(A-H,O-Z)
  38.  
  39. -INC PPARAM
  40. -INC CCOPTIO
  41. -INC CCNOYAU
  42. -INC CCASSIS
  43. -INC CCREEL
  44.  
  45. -INC SMCHAML
  46. -INC SMCHPOI
  47. -INC SMMODEL
  48. -INC SMEVOLL
  49. -INC SMLREEL
  50. -INC SMLENTI
  51. -INC SMELEME
  52. -INC SMINTE
  53. -INC SMCOORD
  54. -INC SMNUAGE
  55. -INC SMLMOTS
  56. -INC SMTABLE
  57. -INC SMCHARG
  58. -INC DECHE
  59.  
  60. EXTERNAL long
  61.  
  62. CHARACTER*(*) CHARP
  63.  
  64. CHARACTER*16 CHA1,TYPV,CMNAME
  65. CHARACTER*72 SOUTYP
  66. CHARACTER*(LOCHAI) MOTEMP,LMELIB,LMEFCT,lacomm
  67. CHARACTER*8 TYP3,CTYP,CTYP2
  68. CHARACTER*(LOCOMP) NOMTMP,MOT1,MOT2,NOM2,NOM4,NOM5,NOMTT
  69. CHARACTER*8 NOMCO,NOM3
  70. CHARACTER*4 NOMCO4,NOMSIM
  71. LOGICAL COQ,KNUAG,KREAL,KFLOT,lsupma,dstati,drev21,
  72. & drev22
  73. LOGICAL BTHRD,dnua1
  74. INTEGER IPTAMO
  75. C
  76. C Creation des segments
  77. SEGMENT SWORK
  78. REAL*8 VAL1(NBPGA1),VAL2(NBPGAU),VALN(NBN1)
  79. REAL*8 SHP(6,NBN1) ,XE(3,NBN1)
  80. ENDSEGMENT
  81. SEGMENT IAMOI
  82. REAL*8 VEL1(MG1,N1EL2),VEL2(MG2,MXNBE)
  83. ENDSEGMENT
  84. SEGMENT IAMO2
  85. REAL*8 FLO1(NFLO),FLO2(NFLO,NFLO)
  86. INTEGER IFLO2(NFLO)
  87. ENDSEGMENT
  88. SEGMENT WRKEXT
  89. CHARACTER*(LOCOMP) NOMPAR(NPARA)
  90. INTEGER IVAPAR(NPARA)
  91. REAL*8 VALPAR(NPARA)
  92. ENDSEGMENT
  93. SEGMENT WRKRES
  94. CHARACTER*(LOCOMP) NOMVAL(N2)
  95. INTEGER IVALIS(N2)
  96. REAL*8 XVAL(N2)
  97. ENDSEGMENT
  98.  
  99. C PARALLELISATION PTHREAD
  100. SEGMENT SPARAL
  101. INTEGER NNN,ML1,ML2,MPV1,MPV2,MCH1,MEL2,
  102. & N1ELP,N1PELP
  103. INTEGER IXX(NBTHR)
  104. ENDSEGMENT
  105.  
  106. SEGMENT SXX
  107. REAL*8 XX(NDIM)
  108. ENDSEGMENT
  109. C
  110. C Introduction d'un COMMON pour la parallelisation
  111. COMMON/IPLMUC/IPARAL
  112. EXTERNAL IPMULi
  113.  
  114. DATA NOMTT/'T '/
  115. DATA NOMSIM/'SIMU'/
  116.  
  117. PARAMETER (NBCOEV = 23)
  118. CHARACTER*8 NOCOEV(NBCOEV)
  119. DATA NOCOEV / 'TRAC ','EVOL ','COMP ','FLXY ',
  120. & 'FLXZ ','CISY ','CISZ ','JDA ',
  121. & 'EM0 ','EM1 ','EM2 ','EM3 ',
  122. & 'EM4 ','EM5 ','EM6 ','EM7 ',
  123. & 'EM8 ','SFFS ','EFFS ','SJCB ',
  124. & 'SJTB ','SJSB ','ECRO ' /
  125.  
  126. segact mcoord
  127. KREAL = .TRUE.
  128. C
  129. JEMIL1 = JEMIL
  130. dstati = .false.
  131. C
  132. C Pour la parallelisation de l'interpolation
  133. C
  134. IPARAL= 0
  135. BTHRD = .FALSE.
  136. MCHAM2= 0
  137. IPOIN1= 0
  138. C
  139. INUBF4 = 0
  140. C
  141. C CONVERSION DU CHPOINT OU MCHAML EN MCHAML AU SUPORT DEMANDE
  142. IF (MICHE.EQ.1) THEN
  143. CALL CHAME1(0,IPMODL,IPOI2,' ',IPOI3,JEMIL1)
  144. IF (IERR.NE.0) RETURN
  145. ELSE
  146. *
  147. * AM 14/6/07
  148. * ON PASSE UN INDICATEUR DE SUPPORT NEGATIF A CHASUP
  149. * POUR EVITER DES PROBLEMES DE CHANGEMENT DE SUPPORT
  150. * DE VARIABLES INTERNES NON SCALAIRES, DANS CHASUP
  151. *
  152. JEMIL2 = - JEMIL1
  153. CALL CHASUP(IPMODL,IPOI2,IPOI3,IRT2,JEMIL2)
  154. IF (IRT2.NE.0) THEN
  155. CALL ERREUR(IRT2)
  156. RETURN
  157. ENDIF
  158. ENDIF
  159. C
  160. C ACTIVATION DU MODELE
  161. MMODEL=IPMODL
  162. NSOUS1=mmodel.KMODEL(/1)
  163. C
  164. C ACTIVATION DES MCHELM
  165. MCHEL1=IPOI1
  166. NSOUS=MCHEL1.ICHAML(/1)
  167. IF (NSOUS.GT.NSOUS1) THEN
  168. CALL ERREUR(553)
  169. RETURN
  170. ENDIF
  171. NINF=MCHEL1.INFCHE(/2)
  172. C
  173. C Creation du MCHAML
  174. N1=NSOUS
  175. N3=6
  176. IF (CHARP.EQ.' ') THEN
  177. L1=MCHEL1.TITCHE(/1)
  178. SOUTYP=MCHEL1.TITCHE
  179. ELSE
  180. L1=LEN(CHARP)
  181. SOUTYP=CHARP
  182. ENDIF
  183. SEGINI MCHELM
  184. IRET=MCHELM
  185. IFOCHE=IFOUR
  186. TITCHE=SOUTYP
  187. C
  188. C Boucle sur les sous zone du MCHAML
  189. DO 10 ISOUS=1,NSOUS
  190. C
  191. JEMIL1 = JEMIL
  192. C
  193. C VALEURS INITIALES
  194. MCHEL2=0
  195. IYOUN=0
  196. IMACHE(ISOUS)=MCHEL1.IMACHE(ISOUS)
  197. CONCHE(ISOUS)=MCHEL1.CONCHE(ISOUS)
  198. DO IP=1,NINF
  199. INFCHE(ISOUS,IP)=MCHEL1.INFCHE(ISOUS,IP)
  200. ENDDO
  201. C
  202. C Mise en concordance des pointeurs de maillage
  203. C
  204. MELEME=IMACHE(ISOUS)
  205. C* DO IO=1,kmodel(/1)
  206. DO IO=1, NSOUS1
  207. IMODEL=KMODEL(IO)
  208. if (cmatee.eq.'STATIQUE') dstati = .true.
  209. IF (IMAMOD.EQ.MELEME.AND.CONMOD.EQ.CONCHE(ISOUS)) GOTO 40
  210. ENDDO
  211. CALL ERREUR(472)
  212. GOTO 9930
  213. 40 CONTINUE
  214. IMELE=NEFMOD
  215. C
  216. C Le modèle est-il appuye sur des elements coques.
  217. C MF1 = 3 ---> coque
  218. C MF1 = 5 ---> coque epaisse
  219. C MF1 = 9 ---> coque avec cisaillement transverse
  220. C
  221. MF1 = NUMMFR(NEFMOD)
  222. COQ = (MF1 .EQ. 3).OR.(MF1 .EQ. 5).OR.(MF1 .EQ. 9)
  223.  
  224. C Supports d'integration specifiques
  225. CALL PLACE(FORMOD,NFORQ,ichph,'CHANGEMENT_PHASE')
  226. IF(ichph.NE.0) JEMIL1=1
  227.  
  228. IF (JEMIL1 .NE. 1 ) THEN
  229. NFORQ = FORMOD(/2)
  230. CALL PLACE(FORMOD,NFORQ,ither,'THERMIQUE ')
  231. CALL PLACE(FORMOD,NFORQ,idiff,'DIFFUSION ')
  232. CALL PLACE(FORMOD,NFORQ,imeta,'METALLURGIE ')
  233.  
  234. IF (ither.NE.0 .OR. idiff.NE.0 .OR. imeta.NE.0) THEN
  235. CALL PLACE(matmod,NMATQ,iray,'RAYONNEMENT')
  236. C Support 6 SAUF pour le RAYONNEMENT...
  237. C Les cas-tests de RAYONNEMENT sont en erreur sans ca...
  238. IF (iray.EQ.0) THEN
  239. IF (JEMIL1.NE.2) JEMIL1 = 6
  240. ENDIF
  241. ENDIF
  242. ENDIF
  243. C
  244. IPTR3=0
  245. IF (MCHEL1.INFCHE(ISOUS,4).EQ.0) THEN
  246. IF (ither.NE.0 .OR. idiff.NE.0 .OR. imeta.NE.0) THEN
  247. IF (JEMIL1 .EQ. 6) THEN
  248. CALL TSHAPE(IMELE,'NOEUD',MINTE1)
  249. ELSE IF (JEMIL1 .EQ. 2) THEN
  250. CALL TSHAPE(IMELE,'GRAVITE',MINTE1)
  251. ENDIF
  252. IF (IERR.NE.0) GOTO 9930
  253. C#MC 08/04/98
  254. ELSE
  255. MINTE1=INFMOD(3)
  256. ENDIF
  257. C La sous-zone est aux noeuds :
  258. ELSE
  259. MINTE1=MCHEL1.INFCHE(ISOUS,4)
  260. ENDIF
  261. C
  262. C Information sur l'element fini
  263. IF (ither.NE.0 .OR. idiff.NE.0 .OR. imeta.NE.0) THEN
  264. IF (JEMIL1 .EQ. 6) THEN
  265. CALL TSHAPE(IMELE,'GAUSS ',MINTE)
  266. ELSE IF (JEMIL1.EQ.2) THEN
  267. CALL TSHAPE(IMELE,'GRAVITE',MINTE)
  268. ENDIF
  269. IF (IERR.NE.0) GOTO 9920
  270. MELGEO = NUMGEO(IMELE)
  271. ELSE
  272. MINTE =INFMOD(2+JEMIL1)
  273. MELGEO=INFELE(14)
  274. ENDIF
  275. INFCHE(ISOUS,4)=MINTE
  276. IF (JEMIL1.EQ.1) INFCHE(ISOUS,4)=0
  277. INFCHE(ISOUS,6)=JEMIL1
  278. C
  279. C On recupere le nombre de points support NBPGA1 pour
  280. C pour l'ancien chamelem NBPGAU pour le nouveau mchaml
  281. NBPGA1 = MINTE1.SHPTOT(/3)
  282. NBPGAU = SHPTOT(/3)
  283. C
  284. C On recupere le nombre d'elements
  285. NBN1=NUM(/1)
  286. NEL0=NUM(/2)
  287. SEGINI SWORK
  288. C
  289. C CREATION DU MCHAML
  290. MCHAM1=MCHEL1.ICHAML(ISOUS)
  291. N2=MCHAM1.NOMCHE(/2)
  292. SEGINI MCHAML
  293. ICHAML(ISOUS)=MCHAML
  294.  
  295. NMATQ =MATMOD(/2)
  296. iuser = 0
  297. CALL PLACE(MATMOD,NMATQ,iuser,'UTILISATEUR')
  298. CMNAME=' '
  299. IF (iuser.GT.0) THEN
  300. IF (iuser.LT.NMATQ) CMNAME = MATMOD(iuser+1)
  301. ENDIF
  302. *
  303. KNUAG = .FALSE.
  304. IF (TITCHE.EQ.'CARACTERISTIQUES') THEN
  305. DO 60 IC1=1,N2
  306. IF (MCHAM1.NOMCHE(IC1).EQ.'YOUN ') IYOUN=IC1
  307. CHA1=MCHAM1.TYPCHE(IC1)
  308. IF (CHA1(9:16).EQ.'NUAGE ') KNUAG = .TRUE.
  309. 60 CONTINUE
  310. IF (KNUAG) THEN
  311. SEGINI WRK53
  312. wrk53.MFR = MF1
  313. wrk53.NFOR = NFORQ
  314. wrk53.NMAT = NMATQ
  315. wrk53.CMATE = CMATEE
  316. wrk53.MATE = IMATEE
  317. wrk53.INPLAS = INATUU
  318. if(lnomid(6).ne.0) then
  319. nomid=lnomid(6)
  320. ipnomc=nomid
  321. nbrobl=lesobl(/2)
  322. nbrfac=lesfac(/2)
  323. lsupma=.false.
  324. else
  325. lsupma=.true.
  326. CALL IDMATR(MF1,IMODEL,IPNOMC,NBROBL,NBRFAC)
  327. endif
  328. IQMOD=IMODEL
  329. IWRK53=WRK53
  330. NMATT=NBROBL+NBRFAC
  331. CALL COTYPE(IQMOD,13,MOTYPE,IWRK53,NBROBL,NBRFAC)
  332. NOTYPE=MOTYPE
  333. SEGACT NOTYPE
  334. NBTYPE=TYPE(/2)
  335. KREAL = .TRUE.
  336. DO 65 ITYPE=1,NBTYPE
  337. TYPV=TYPE(ITYPE)
  338. IF (TYPV(1:6).NE.'REAL*8') KREAL = .FALSE.
  339. 65 CONTINUE
  340. SEGDES NOTYPE
  341. SEGSUP WRK53
  342. ENDIF
  343. ENDIF
  344. C
  345. SEGINI WRK53
  346. SEGINI WRKRES
  347. WRKEXT = 0
  348. JESIMU = 0
  349. C
  350. C'''''''''''''''''''''''''''''''''''''
  351. C BOUCLE SUR LES COMPOSANTES
  352. C
  353. C'''''''''''''''''''''''''''''''''''''
  354. DO 70 ICOMP=1,N2
  355. IAMOI=0
  356. C
  357. C traitement des composantes de type FLOTTANT ou MCHAML
  358. C
  359. CHA1 = MCHAM1.TYPCHE(ICOMP)
  360. NOMCHE(ICOMP) = MCHAM1.NOMCHE(ICOMP)
  361. NOMCO = MCHAM1.NOMCHE(ICOMP)
  362. NOMVAL(ICOMP) = MCHAM1.NOMCHE(ICOMP)
  363. MELVA1 = MCHAM1.IELVAL(ICOMP)
  364. C
  365. C---------------------------------------------------------
  366. C Composante de type reel
  367. C---------------------------------------------------------
  368. C
  369. IF (CHA1(1:8).EQ.'REAL*8 ') THEN
  370. TYPCHE(ICOMP)='REAL*8'
  371. N1PTE1=MELVA1.VELCHE(/1)
  372. IF (N1PTE1.EQ.1) THEN
  373. N1PTEL=1
  374. ELSE
  375. N1PTEL=NBPGAU
  376. ENDIF
  377. N1EL =MELVA1.VELCHE(/2)
  378. N2PTEL=0
  379. N2EL =0
  380. C
  381. C test de compatibilite des nombres d'elements
  382. C
  383. IF (N1EL.NE.NEL0.AND.N1EL.NE.1.AND.NEL0.NE.1) THEN
  384. MOTERR(1:8)='VARINU '
  385. CALL ERREUR(146)
  386. GOTO 9910
  387. ENDIF
  388. N1PAUX=N1PTE1
  389. C
  390. C Pour les COQ4, le nb de pt de GAUSS vaut 5, mais on
  391. C ne prend que les 4 premiers (le 5ieme sert uniquement
  392. C au cisaillement)
  393. IF (IMELE.EQ.49.AND.N1PAUX.EQ.5) N1PAUX=4
  394. SEGINI MELVAL
  395. IELVAL(ICOMP)=MELVAL
  396. C
  397. C Traitement immediat si champ constant
  398. IF (N1PTE1.EQ.1) THEN
  399. DO 80 IEL=1,N1EL
  400. VELCHE(1,IEL)=MELVA1.VELCHE(1,IEL)
  401. 80 CONTINUE
  402. ELSE
  403. DO 90 IEL=1,NEL0
  404. DO 100 IGAU=1,N1PTE1
  405. VAL1(IGAU)=MELVA1.VELCHE(IGAU,IEL)
  406. 100 CONTINUE
  407. C
  408. C LE CHAMELEM N'EST PAS AUX NOEUDS
  409. IF (MINTE1.NE.0) THEN
  410. C Meme support
  411. IF (MINTE.EQ.MINTE1) THEN
  412. DO 110 IGAU=1,N1PTE1
  413. VELCHE(IGAU,IEL)=VAL1(IGAU)
  414. 110 CONTINUE
  415. GOTO 90
  416. C Support different
  417. ELSE
  418. CALL DOXE(XCOOR,IDIM,NBN1,NUM,IEL,XE)
  419. CALL QUEDIM(MELGEO,KERRE1)
  420. CALL CH1CH2(IMELE,MINTE,MINTE1,N1PTEL,N1PAUX,NBN1,
  421. & SWORK,IPOIN1,KERRE1)
  422. IF (KERRE1.NE.0) THEN
  423. IF (KERRE1.EQ.195) INTERR(1)=IEL
  424. CALL ERREUR(KERRE1)
  425. GOTO 9900
  426. ENDIF
  427. DO 120 IGAU=1,N1PTEL
  428. VELCHE(IGAU,IEL)=VAL2(IGAU)
  429. 120 CONTINUE
  430. ENDIF
  431. ELSE
  432. DO 130 IGAU=1,N1PTEL
  433. VALG=0.D0
  434. DO 140 INO=1,NBN1
  435. VALG=VALG+SHPTOT(1,INO,IGAU)*VAL1(INO)
  436. 140 CONTINUE
  437. VELCHE(IGAU,IEL)=VALG
  438. 130 CONTINUE
  439. ENDIF
  440. 90 CONTINUE
  441. ENDIF
  442. C
  443. C---------------------------------------------------------
  444. C Composante de type evolution
  445. C---------------------------------------------------------
  446. C
  447. ELSE IF (CHA1(9:16).EQ.'EVOLUTIO') THEN
  448. N1PTE3=MELVA1.IELCHE(/1)
  449. N1EL3 =MELVA1.IELCHE(/2)
  450. IF (N1EL3.NE.NEL0.AND.N1EL3.NE.1.AND.NEL0.NE.1) THEN
  451. MOTERR(1:8)='VARINU '
  452. CALL ERREUR(146)
  453. GOTO 9910
  454. ENDIF
  455. C
  456. C S'il s'agit d'une courbe de traction d'un matériau
  457. C constant, on garde l'objet EVOLUTIO sans rien changer.
  458. C
  459. NOMTMP=NOMCHE(ICOMP)
  460. C IF (TITCHE.EQ.'CARACTERISTIQUES'.AND.
  461. C & N1PTE3.EQ.1.AND.N1EL3.EQ.1) THEN
  462. IPLAC = 0
  463. CALL PLACE(NOCOEV,NBCOEV,IPLAC,NOMTMP)
  464. IF (IPLAC.NE.0) THEN
  465. TYPCHE(ICOMP)='POINTEUREVOLUTIO'
  466. N1PTEL=0
  467. N1EL =0
  468. N2PTEL=1
  469. N2EL =1
  470. SEGINI MELVAL
  471. IELVAL(ICOMP)=MELVAL
  472. IELCHE(N2PTEL,N2EL)=MELVA1.IELCHE(1,1)
  473. GOTO 70
  474. ENDIF
  475. C ENDIF
  476. C
  477. C S'il s'agit d'autres composantes que la courbe de
  478. C traction d'un matériau constant on fait l'interpolation
  479. C selon la loi de variation
  480. C
  481. TYPCHE(ICOMP)='REAL*8'
  482. MCHEL2=IPOI3
  483. IF (MCHEL2.ICHAML(/1).LT.NSOUS) THEN
  484. CALL ERREUR(553)
  485. GOTO 9910
  486. ENDIF
  487. IF (IMAMOD.NE.MCHEL2.IMACHE(ISOUS).OR.
  488. & CONMOD.NE.MCHEL2.CONCHE(ISOUS)) THEN
  489. do is = 1,mchel2.imache(/1)
  490. if (imamod.eq.mchel2.imache(is).and.
  491. & conmod.eq.mchel2.conche(is)) then
  492. icham2 = mchel2.ichaml(is)
  493. goto 149
  494. endif
  495. enddo
  496. CALL ERREUR(472)
  497. GOTO 9910
  498. ELSE
  499. ICHAM2=MCHEL2.ICHAML(ISOUS)
  500. ENDIF
  501. C
  502. 149 CONTINUE
  503. iptamo = 0
  504. if (inatuu.eq.164.and.NOMTMP.eq.'MOCO ') then
  505. N=1
  506. segini mevol1,mevol2
  507. segini,melva2=melva1
  508. segini,melva3=melva1
  509. drev21 = .false.
  510. drev22 = .true.
  511. do iel = 1,melva2.ielche(/2)
  512. do ipg = 1,melva2.ielche(/1)
  513. MEVOLL = MELVA2.IELCHE(ipg,iel)
  514. KEVOLL = IEVOLL(1)
  515. mevol1.ievoll(1) = ievoll(1)
  516. melva2.ielche(ipg,iel) = mevol1
  517. if (ievoll(/1).gt.1) then
  518. mevol2.ievoll(1) = ievoll(2)
  519. melva3.ielche(ipg,iel) = mevol2
  520. drev21 = .true.
  521. else
  522. drev22 = .false.
  523. endif
  524. enddo
  525. enddo
  526. CALL VARIN2(ICHAM2,melva2,COQ,MELEME,SWORK,NOMCO,IMELE,
  527. & MELGEO,MINTE,MINTE1,MELVAL,KERRE1)
  528. C iptrai = melval
  529. nomche(icomp) = 'RAID'
  530. if (drev21.and.drev22) then
  531. CALL VARIN2(ICHAM2,melva3,COQ,MELEME,SWORK,NOMCO,IMELE,
  532. & MELGEO,MINTE,MINTE1,MELVAL,KERRE1)
  533. iptamo = melval
  534. endif
  535. c if (.not.drev22) write(6,*) 'AMOR problématique',kerre1
  536. c melval = iptrai
  537.  
  538. else
  539. CALL VARIN2(ICHAM2,MELVA1,COQ,MELEME,SWORK,NOMCO,IMELE,
  540. & MELGEO,MINTE,MINTE1,MELVAL,KERRE1)
  541. endif
  542. C
  543. IF (KERRE1.NE.0) THEN
  544. IF (KERRE1.EQ.146) MOTERR(1:8)='VARINU '
  545. CALL ERREUR(KERRE1)
  546. GOTO 9910
  547. ENDIF
  548. IELVAL(ICOMP)=MELVAL
  549. C
  550. C---------------------------------------------------------
  551. C Composante de type nuage
  552. C---------------------------------------------------------
  553. C
  554. ELSE IF (CHA1(9:16).EQ.'NUAGE ') THEN
  555. INUBF4 = MELVA1.IELCHE(1,1)
  556. MNUAG1 = INUBF4
  557. NVAR = MNUAG1.NUANOM(/2)
  558. IF (NVAR.LE.1) THEN
  559. INTERR(1)=MNUAG1
  560. INTERR(2)=2
  561. INTERR(3)=2
  562. CALL ERREUR(628)
  563. GOTO 9910
  564. ENDIF
  565. C Depouillement du nuage pour connaitre le nombre de dimensions de
  566. C la grille
  567. NNU=MNUAG1.NUAPOI(/1)
  568. NDIM=NNU-1
  569. IF (NDIM.LT.1) THEN
  570. INTERR(1)=MNUAG1
  571. INTERR(2)=2
  572. INTERR(3)=1
  573. CALL ERREUR(628)
  574. RETURN
  575. ENDIF
  576. C
  577. C Initialisation d'une liste de mots pour stocker les noms des
  578. C dimensions de la grille
  579. JGN=LONOM
  580. JGM=NNU
  581. SEGINI,MLMOT1
  582. C
  583. C Parcours du NUAGE pour verifications noms
  584. dnua1 = .false.
  585. knuch2 = 0
  586. DO I=1,NNU
  587. C Nom de la composante I
  588. MOT1=MNUAG1.NUANOM(I)
  589. C Et rangement du mot dans la liste de mots adhoc
  590. MLMOT1.MOTS(I)=MOT1
  591. if (mot1.eq.NOMCHE(ICOMP)) dnua1 = .true.
  592. ENDDO
  593. * recherche adequation nuage / parametres
  594. IF (DNUA1) THEN
  595. MCHEL2=IPOI3
  596. IF (MCHEL2.ICHAML(/1).LT.NSOUS) THEN
  597. CALL ERREUR(553)
  598. GOTO 9910
  599. ENDIF
  600. IF (IMAMOD.NE.MCHEL2.IMACHE(ISOUS).OR.
  601. & CONMOD.NE.MCHEL2.CONCHE(ISOUS)) THEN
  602. do is = 1,mchel2.imache(/1)
  603. if (imamod.eq.mchel2.imache(is).and.
  604. & conmod.eq.mchel2.conche(is)) then
  605. icham2 = mchel2.ichaml(is)
  606. goto 259
  607. endif
  608. enddo
  609. CALL ERREUR(472)
  610. GOTO 9910
  611. ELSE
  612. ICHAM2=MCHEL2.ICHAML(ISOUS)
  613. ENDIF
  614. C
  615. 259 CONTINUE
  616. C
  617. MCHAM2 = ICHAM2
  618. NCO1 = MCHAM2.IELVAL(/1)
  619. INO1 = 0
  620. INO3 = 0
  621. do ii = 1,nnu
  622. knuch3 = 0
  623. DO INO = 1,NCO1
  624. NOM2 = MCHAM2.NOMCHE(INO)
  625. if (nom2.eq.mlmot1.mots(ii).and.
  626. &mcham2.typche(ino)(1:8).eq.'REAL*8 ') knuch3 = knuch3 + 1
  627. ENDDO
  628. if (knuch3.eq.1) knuch2 = knuch2 + 1
  629. enddo
  630.  
  631. ELSE
  632. * recopie
  633. TYPCHE(ICOMP)='POINTEURNUAGE '
  634. N1PTEL=0
  635. N1EL =0
  636. N2PTEL=1
  637. N2EL =1
  638. SEGINI MELVAL
  639. IELVAL(ICOMP)=MELVAL
  640. IELCHE(N2PTEL,N2EL)=MELVA1.IELCHE(1,1)
  641. SEGSUP MLMOT1
  642. GOTO 70
  643.  
  644. ENDIF
  645.  
  646. C interpolation grille reprend fonctionnalité de IPOL / z = f(x,y)
  647. if(knuch2.ge.2) then
  648. TYPCHE(ICOMP)='REAL*8'
  649. N2EL = MELVA1.IELCHE(/2)
  650. N2PTEL = MELVA1.IELCHE(/1)
  651. C
  652. C test de compatibilite des nombres d'elements
  653. C
  654. IF (N2EL.NE.1.OR.N2PTEL.NE.1) THEN
  655. MOTERR(1:8)='VARINU '
  656. CALL ERREUR(146)
  657. GOTO 9910
  658. ENDIF
  659.  
  660. MCHAM2 = ICHAM2
  661. NCO1 = MCHAM2.IELVAL(/1)
  662. INUBF4 = MELVA1.IELCHE(1,1)
  663. MNUAG1 = INUBF4
  664. NVAR = MNUAG1.NUANOM(/2)
  665. IF (NVAR.LE.1) THEN
  666. INTERR(1)=MNUAG1
  667. INTERR(2)=2
  668. INTERR(3)=2
  669. CALL ERREUR(628)
  670. GOTO 9910
  671. ENDIF
  672. C
  673. INO1 = 0
  674. INO3 = 0
  675. DO INO = 1,NCO1
  676. NOM2 = MCHAM2.NOMCHE(INO)
  677. do i = 1,nnu
  678. if (nom2.eq.mlmot1.mots(i)) then
  679. if (ino1.eq.0) ino1 = ino
  680. if (ino1.ne.0) ino3 = ino
  681. endif
  682. enddo
  683. ENDDO
  684. IF (INO1.NE.0.AND.INO3.NE.0) THEN
  685. MELVA3=MCHAM2.IELVAL(INO1)
  686. MELVA4=MCHAM2.IELVAL(INO3)
  687. ELSE
  688.  
  689. CALL ERREUR(665)
  690. GOTO 9910
  691. ENDIF
  692. C
  693. C Depouillement du nuage pour connaitre le nombre de dimensions de
  694. C la grille
  695. NNU=MNUAG1.NUAPOI(/1)
  696. NDIM=NNU-1
  697. IF (NDIM.LT.1) THEN
  698. INTERR(1)=MNUAG1
  699. INTERR(2)=2
  700. INTERR(3)=1
  701. CALL ERREUR(628)
  702. RETURN
  703. ENDIF
  704. C
  705. C Initialisation d'une liste de mots pour stocker les noms des
  706. C dimensions de la grille
  707. JGN=LONOM
  708. JGM=NNU
  709. * SEGINI,MLMOT1
  710. C
  711. C Iniilisation d'une liste d'entiers pour stocker les pointeurs vers
  712. C les LISTREEL definissant la grille de valeur de la fonction F
  713. JG=NNU
  714. SEGINI,MLENT1
  715. C
  716. C Parcours du NUAGE pour verifications
  717. NVAL=1
  718. DO I=1,NNU
  719. C Nom de la composante I
  720. MOT1=MNUAG1.NUANOM(I)
  721. C Et rangement du mot dans la liste de mots adhoc
  722. * MLMOT1.MOTS(I)=MOT1
  723. C Les composantes doivent abriter 1 seul objet de type LISTREEL
  724. CTYP2=MNUAG1.NUATYP(I)
  725. IF (CTYP2.NE.'LISTREEL') THEN
  726. CALL ERREUR(941)
  727. RETURN
  728. ENDIF
  729. NUAVI1=MNUAG1.NUAPOI(I)
  730. NPO=NUAVI1.NUAINT(/1)
  731. IF (NPO.NE.1) THEN
  732. CALL ERREUR(941)
  733. RETURN
  734. ENDIF
  735. MLREE1=NUAVI1.NUAINT(1)
  736. C Verification de la taille de la derniere liste
  737. IF (I.EQ.NNU) THEN
  738. NTEST=MLREE1.PROG(/1)
  739. IF (NTEST.NE.NVAL) THEN
  740. CALL ERREUR(21)
  741. RETURN
  742. ENDIF
  743. ELSE
  744. NVAL=NVAL*(MLREE1.PROG(/1))
  745. ENDIF
  746. C Et rangement du pointeur dans la liste d'entiers adhoc
  747. MLENT1.LECT(I)=MLREE1
  748. ENDDO
  749.  
  750. C Liste de correspondance entre les composantes du MCHAML et les
  751. C noms des dimensions de la grille
  752. C MLENT2.LECT(i) = numero de la composante de MCHAM1
  753. C correspondante a la dimension i de la grille
  754. JG=NNU
  755. SEGINI,MLENT2
  756. N1PTEL=0
  757. N1EL=0
  758. N2PTEL=0
  759. N2EL=0
  760. DO K=1,NDIM
  761. MOT2=MLMOT1.MOTS(K)
  762. JVAL1=0
  763. DO J=1,MCHAM2.IELVAL(/1)
  764. MOT1=MCHAM2.NOMCHE(J)
  765. IF (MOT1.EQ.MOT2) THEN
  766. JVAL1=K
  767. GOTO 2
  768. ENDIF
  769. ENDDO
  770. C Cas ou une composante du MCHAML ne se retrouve pas dans les
  771. C noms des dimensions de la grille
  772. 2 IF (JVAL1.EQ.0) THEN
  773. CALL ERREUR(665)
  774. RETURN
  775. ENDIF
  776. MLENT2.LECT(JVAL1)=J
  777. C Verification que le champ contient des flottants,
  778. IF (MCHAM2.TYPCHE(J).NE.'REAL*8') THEN
  779. MOTERR(1:16) = MCHAM2.TYPCHE(J)
  780. MOTERR(17:20) = MOT1
  781. MOTERR(21:29) = 'argument'
  782. CALL ERREUR(552)
  783. RETURN
  784. ENDIF
  785. C Recherche des tailles MAX des MELVAL de chaque composante de
  786. C cette sous zone (pour preparer le champ de sortie)
  787. MELVA1=MCHAM2.IELVAL(J)
  788. N1PTEL=MAX(N1PTEL,MELVA1.VELCHE(/1))
  789. N1EL =MAX(N1EL ,MELVA1.VELCHE(/2))
  790. ENDDO
  791. C Initialisation du tableau de valeurs (MELVA2) du sous champ
  792. C de sortie
  793. SEGINI,MELVA2
  794.  
  795. C Preparation pour le calcul en parallele
  796. C Regalge fait sur PC40 pour determiner le nombre de NOEUDS optimum
  797. C par thread
  798. IOPTIM = 100
  799. N1 = N1EL / IOPTIM
  800.  
  801. ITH = 0
  802. IF (NBESC .NE. 0) ITH=oothrd
  803. C CB215821 : DESACTIVE LA PARALLELISATION PTHREAD LORSQUE ON EST
  804. C DEJA DANS LES ASSISTANTS
  805. IF ((N1.LE.1) .OR. (NBTHRS .EQ. 1) .OR. (ITH .GT. 0)) THEN
  806. NBTHR = 1
  807. BTHRD = .FALSE.
  808. ELSE
  809. BTHRD = .TRUE.
  810. NBTHR = MIN(N1, NBTHRS)
  811. CALL THREADII
  812. ENDIF
  813.  
  814. SEGINI,SPARAL
  815. DO ITH=1,NBTHR
  816. SEGINI,SXX
  817. SPARAL.IXX(ITH) = SXX
  818. ENDDO
  819.  
  820. SPARAL.NNN = 0
  821. SPARAL.ML1 = MLENT1
  822. SPARAL.ML2 = MLENT2
  823. SPARAL.MPV1 = 0
  824. SPARAL.MPV2 = 0
  825. SPARAL.MCH1 = MCHAM1
  826. SPARAL.MEL2 = MELVA2
  827. SPARAL.N1ELP = N1EL
  828. SPARAL.N1PELP = N1PTEL
  829.  
  830. C Lancement des Threads
  831. IF (BTHRD) THEN
  832. IPARAL=SPARAL
  833. DO ITH=2,NBTHR
  834. CALL THREADID(ITH,IPMULI)
  835. ENDDO
  836. CALL IPMULI(1)
  837.  
  838. DO ITH=2,NBTHR
  839. CALL THREADIF(ITH)
  840. ENDDO
  841.  
  842. CALL THREADIS
  843. ELSE
  844. CALL IPMULI(1)
  845. ENDIF
  846. C On le range dans le MCHAML global
  847. IELVAL(ICOMP)=MELVA2
  848. SEGSUP MLMOT1,MLENT1,MLENT2
  849.  
  850. DO ITH=1,NBTHR
  851. SXX = SPARAL.IXX(ITH)
  852. SEGSUP,SXX
  853. ENDDO
  854. SEGSUP,SPARAL
  855. *
  856. GOTO 70
  857. endif
  858.  
  859. * autres cas
  860. TYPCHE(ICOMP)='POINTEUREVOLUTIO'
  861. MCHEL2=IPOI3
  862. NSOUS2=MCHEL2.ICHAML(/1)
  863. IF (NSOUS2.GT.NSOUS1.OR.NSOUS2.LT.NSOUS) THEN
  864. CALL ERREUR(553)
  865. GOTO 9910
  866. ENDIF
  867. C Mise en concordance des pointeurs de maillage
  868. DO 150 IP=1,NSOUS
  869. IF (MCHEL2.IMACHE(IP).EQ.MELEME.AND.
  870. & MCHEL2.CONCHE(IP).EQ.CONCHE(ISOUS)) GOTO 160
  871. 150 CONTINUE
  872. CALL ERREUR(472)
  873. GOTO 9930
  874. 160 CONTINUE
  875. MCHAM2=MCHEL2.ICHAML(IP)
  876. C
  877. NCO1 = MCHAM2.IELVAL(/1)
  878. INU = MELVA1.IELCHE(1,1)
  879. MNUAGE = INU
  880. NVAR = NUANOM(/2)
  881. IF (NVAR.LE.1) THEN
  882. INTERR(1)=MNUAGE
  883. INTERR(2)=2
  884. INTERR(3)=2
  885. CALL ERREUR(628)
  886. GOTO 9910
  887. ENDIF
  888. C
  889. NOM4 = ' '
  890. NOM5 = ' '
  891. IA1 = 0
  892. IA2 = 0
  893. IVAR = 0
  894. DO 170 INO2=1,NVAR
  895. TYP3 = NUATYP(INO2)
  896. IF (TYP3.EQ.'FLOTTANT') THEN
  897. IF (IVAR.EQ.0) THEN
  898. NOM4 = NUANOM(INO2)
  899. IA1 = INO2
  900. ENDIF
  901. IF (IVAR.EQ.1) THEN
  902. NOM5 = NUANOM(INO2)
  903. IA2 = INO2
  904. ENDIF
  905. IVAR = IVAR + 1
  906. ENDIF
  907. 170 CONTINUE
  908. IF (IVAR.LT.1) THEN
  909. INTERR(1)=MNUAGE
  910. MOTERR(1:8)='FLOTTANT'
  911. CALL ERREUR(629)
  912. GOTO 9910
  913. ENDIF
  914. IF (IVAR.GT.2) THEN
  915. INTERR(1)=MNUAGE
  916. INTERR(2)=2
  917. CALL ERREUR(938)
  918. GOTO 9910
  919. ENDIF
  920. IF (NOM4.EQ.NOM5) THEN
  921. INTERR(1)=MNUAGE
  922. MOTERR(1:8)='FLOTTANT'
  923. CALL ERREUR(939)
  924. GOTO 9910
  925. ENDIF
  926. C
  927. DO 180 IBBON=1,NVAR
  928. IF (NUATYP(IBBON).EQ.'EVOLUTIO') GOTO 190
  929. 180 CONTINUE
  930. INTERR(1)=MNUAGE
  931. MOTERR(1:8)='EVOLUTIO'
  932. CALL ERREUR(629)
  933. GOTO 9910
  934. 190 CONTINUE
  935. C
  936. C Cas des coques dont les caracteristiques dependent de T
  937. C
  938. IF (COQ.AND.
  939. & ((NOM4.EQ.NOMTT).OR.(NOM5.EQ.NOMTT))) THEN
  940. INO2 = 0
  941. INO1 = 0
  942. INO3 = 0
  943. DO 200 INO = 1,NCO1
  944. NOM2 = MCHAM2.NOMCHE(INO)
  945. IF (NOM2.EQ.NOMTT ) INO2=INO
  946. IF (NOM2.EQ.'TINF ') INO1=INO
  947. IF (NOM2.EQ.'TSUP ') INO3=INO
  948. 200 CONTINUE
  949. IF (INO1.NE.0.AND.INO2.NE.0.AND.INO3.NE.0) THEN
  950. MELVA3=MCHAM2.IELVAL(INO1)
  951. MELVA4=MCHAM2.IELVAL(INO3)
  952. C
  953. NBP2=MELVA4.VELCHE(/1)
  954. NBP1=MELVA3.VELCHE(/1)
  955. NEL1=MELVA3.VELCHE(/2)
  956. NEL2=MELVA4.VELCHE(/2)
  957. N1PTEL=MAX(NBP1,NBP2)
  958. N1EL =MAX(NEL1,NEL2)
  959. N2PTEL=0
  960. N2EL =0
  961. SEGINI MELVA5
  962. DO 210 IGAU=1,N1PTEL
  963. IGMN1=MIN(IGAU,MELVA3.VELCHE(/1))
  964. IGMN2=MIN(IGAU,MELVA4.VELCHE(/1))
  965. DO 220 IB=1,N1EL
  966. IBMN1=MIN(IB ,MELVA3.VELCHE(/2))
  967. IBMN2=MIN(IB ,MELVA4.VELCHE(/2))
  968. MELVA5.VELCHE(IGAU,IB)=MELVA3.VELCHE(IGMN1,IBMN1)+
  969. & MELVA4.VELCHE(IGMN2,IBMN2)
  970. 220 CONTINUE
  971. 210 CONTINUE
  972. C
  973. MELVA3=MCHAM2.IELVAL(INO2)
  974. N1PTEL = MELVA3.VELCHE(/1)
  975. N1EL = MELVA3.VELCHE(/2)
  976. N2PTEL = 0
  977. N2EL = 0
  978. SEGINI MELVA4
  979. DO 230 II = 1,N1PTEL
  980. DO 240 III = 1,N1EL
  981. MELVA4.VELCHE(II,III) = 4.D0*MELVA3.VELCHE(II,III)
  982. 240 CONTINUE
  983. 230 CONTINUE
  984. C
  985. NBP2=MELVA4.VELCHE(/1)
  986. NBP1=MELVA5.VELCHE(/1)
  987. NEL1=MELVA5.VELCHE(/2)
  988. NEL2=MELVA4.VELCHE(/2)
  989. N1PTEL=MAX(NBP1,NBP2)
  990. N1EL =MAX(NEL1,NEL2)
  991. N2PTEL=0
  992. N2EL =0
  993. SEGINI MELVA6
  994. DO 250 IGAU=1,N1PTEL
  995. IGMN1=MIN(IGAU,MELVA5.VELCHE(/1))
  996. IGMN2=MIN(IGAU,MELVA4.VELCHE(/1))
  997. DO 260 IB=1,N1EL
  998. IBMN1=MIN(IB ,MELVA5.VELCHE(/2))
  999. IBMN2=MIN(IB ,MELVA4.VELCHE(/2))
  1000. MELVA6.VELCHE(IGAU,IB)=MELVA5.VELCHE(IGMN1,IBMN1)+
  1001. & MELVA4.VELCHE(IGMN2,IBMN2)
  1002. 260 CONTINUE
  1003. 250 CONTINUE
  1004. SEGSUP MELVA4,MELVA5
  1005. C
  1006. N1PTEL = MELVA6.VELCHE(/1)
  1007. N1EL = MELVA6.VELCHE(/2)
  1008. N2PTEL = 0
  1009. N2EL = 0
  1010. IF (NOM4.EQ.NOMTT) THEN
  1011. SEGINI MELVA2
  1012. DO 270 II = 1,N1PTEL
  1013. DO 280 III = 1,N1EL
  1014. MELVA2.VELCHE(II,III)=
  1015. & 1.D0/6.D0*MELVA6.VELCHE(II,III)
  1016. 280 CONTINUE
  1017. 270 CONTINUE
  1018. SEGSUP MELVA6
  1019. GOTO 290
  1020. ENDIF
  1021. IF (NOM5.EQ.NOMTT) THEN
  1022. SEGINI MELVA3
  1023. DO 300 II = 1,N1PTEL
  1024. DO 310 III = 1,N1EL
  1025. MELVA3.VELCHE(II,III)=
  1026. & 1.D0/6.D0*MELVA6.VELCHE(II,III)
  1027. 310 CONTINUE
  1028. 300 CONTINUE
  1029. SEGSUP MELVA6
  1030. GOTO 290
  1031. ENDIF
  1032. ELSEIF (INO2.NE.0) THEN
  1033. IF (NOM4.EQ.NOMTT) THEN
  1034. MELVA2=MCHAM2.IELVAL(INO2)
  1035. GOTO 290
  1036. ENDIF
  1037. IF ((IVAR.EQ.2).AND.(NOM5.EQ.NOMTT)) THEN
  1038. MELVA3=MCHAM2.IELVAL(INO2)
  1039. GOTO 290
  1040. ENDIF
  1041. ENDIF
  1042. ELSE
  1043. ITRO = 0
  1044. DO 320 INO = 1,NCO1
  1045. NOM2 = MCHAM2.NOMCHE(INO)
  1046. IF (IVAR.EQ.1.AND.NOM4.EQ.NOM2) THEN
  1047. MELVA2=MCHAM2.IELVAL(INO)
  1048. GOTO 290
  1049. ENDIF
  1050. IF (IVAR.EQ.2) THEN
  1051. IF (NOM4.EQ.NOM2) THEN
  1052. MELVA2=MCHAM2.IELVAL(INO)
  1053. ITRO = ITRO + 1
  1054. ENDIF
  1055. IF (NOM5.EQ.NOM2) THEN
  1056. MELVA3=MCHAM2.IELVAL(INO)
  1057. ITRO = ITRO + 1
  1058. ENDIF
  1059. IF (ITRO.EQ.2) GOTO 290
  1060. ENDIF
  1061. 320 CONTINUE
  1062. ENDIF
  1063. C
  1064. CALL ERREUR(665)
  1065. GOTO 9910
  1066. C
  1067. 290 CONTINUE
  1068.  
  1069. N1PTE1=MELVA2.VELCHE(/1)
  1070. N1E1 =MELVA2.VELCHE(/2)
  1071. IF (IVAR.EQ.2) THEN
  1072. N1PTE2=MELVA3.VELCHE(/1)
  1073. N1E2 =MELVA3.VELCHE(/2)
  1074. ENDIF
  1075. C On teste la taille du MCHAML_FLOTTANT
  1076. IF (N1E1.NE.NEL0.AND.N1E1.NE.1.AND.NEL0.NE.1) THEN
  1077. MOTERR(1:8)='VARINU '
  1078. CALL ERREUR(146)
  1079. GOTO 9910
  1080. ENDIF
  1081. IF (IVAR.EQ.2.AND.
  1082. & N1E2.NE.NEL0.AND.N1E2.NE.1.AND.NEL0.NE.1) THEN
  1083. MOTERR(1:8)='VARINU '
  1084. CALL ERREUR(146)
  1085. GOTO 9910
  1086. ENDIF
  1087. IF (N1PTE1.NE.1.AND.N1PTE1.NE.NBPGAU) THEN
  1088. MOTERR(1:8)='VARINU '
  1089. CALL ERREUR(146)
  1090. GOTO 9910
  1091. ENDIF
  1092. IF (IVAR.EQ.2.AND.
  1093. & N1PTE2.NE.1.AND.N1PTE2.NE.NBPGAU) THEN
  1094. MOTERR(1:8)='VARINU '
  1095. CALL ERREUR(146)
  1096. GOTO 9910
  1097. ENDIF
  1098. C
  1099. NUAVFL=NUAPOI(IA1)
  1100. NUAVIN=NUAPOI(IBBON)
  1101. NBC1 =NUAFLO(/1)
  1102. NBC2 =NUAINT(/1)
  1103. IF (IVAR.EQ.2) THEN
  1104. NUAVF1=NUAPOI(IA2)
  1105. NBC3=NUAVF1.NUAFLO(/1)
  1106. IF (NBC1.NE.NBC2.OR.NBC2.NE.NBC3) THEN
  1107. CALL ERREUR(625)
  1108. GOTO 9910
  1109. ENDIF
  1110. IF (NBC1.LE.1) THEN
  1111. INTERR(1)=MNUAGE
  1112. INTERR(2)=2
  1113. INTERR(3)=2
  1114. CALL ERREUR(628)
  1115. GOTO 9910
  1116. ENDIF
  1117. ELSE
  1118. IF (NBC1.NE.NBC2) THEN
  1119. CALL ERREUR(625)
  1120. GOTO 9910
  1121. ENDIF
  1122. IF (NBC1.LE.1) THEN
  1123. INTERR(1)=MNUAGE
  1124. INTERR(2)=2
  1125. INTERR(3)=2
  1126. CALL ERREUR(628)
  1127. GOTO 9910
  1128. ENDIF
  1129. ENDIF
  1130. C En cas de MCHAML de type caracteristiques on verifie
  1131. C la coherence entre les modules d'young et la pente
  1132. C des courbes de traction
  1133. IF (IYOUN.NE.0.AND.NOMCHE(ICOMP).EQ.'TRAC ') THEN
  1134. CALL VERINU(IPOI1,ISOUS,IYOUN,ICOMP)
  1135. IF (IERR.NE.0) THEN
  1136. GOTO 9910
  1137. ENDIF
  1138. ENDIF
  1139. C La valeur maxi. et mini. de l'objet flottant défini dans NUAGE
  1140. IF (IVAR.EQ.1) THEN
  1141. XMAX1=-1.D35
  1142. XMIN1= 1.D35
  1143. DO 330 IC=1,NBC1
  1144. IF (NUAFLO(IC).GT.XMAX1) THEN
  1145. XMAX1=NUAFLO(IC)
  1146. IMAX1=IC
  1147. ENDIF
  1148. IF (NUAFLO(IC).LT.XMIN1) THEN
  1149. XMIN1=NUAFLO(IC)
  1150. IMIN1=IC
  1151. ENDIF
  1152. 330 CONTINUE
  1153. ENDIF
  1154. IF (IVAR.EQ.2) THEN
  1155. XMAX1=-1.D35
  1156. XMIN1= 1.D35
  1157. XMAX3=-1.D35
  1158. XMIN3= 1.D35
  1159. DO 340 IC=1,NBC1
  1160. IF (NUAFLO(IC).GT.XMAX1) XMAX1=NUAFLO(IC)
  1161. IF (NUAFLO(IC).LT.XMIN1) XMIN1=NUAFLO(IC)
  1162. IF (NUAVF1.NUAFLO(IC).GT.XMAX3) XMAX3=NUAVF1.NUAFLO(IC)
  1163. IF (NUAVF1.NUAFLO(IC).LT.XMIN3) XMIN3=NUAVF1.NUAFLO(IC)
  1164. 340 CONTINUE
  1165. XZOB1 = 0.5D0*(XMIN1+XMAX1)
  1166. XZOB3 = 0.5D0*(XMIN3+XMAX3)
  1167. DO 350 IC=1,NBC1
  1168. TEST1 = (NUAFLO(IC) - XMIN1) / XZOB1
  1169. TEST3 = (NUAVF1.NUAFLO(IC) - XMIN3) / XZOB3
  1170. IF (ABS(TEST1).LT.1.D-10.AND.ABS(TEST3).LT.1.D-10)
  1171. & IMI1MI3=IC
  1172. TEST1 = (NUAFLO(IC) - XMIN1) / XZOB1
  1173. TEST3 = (NUAVF1.NUAFLO(IC) - XMAX3) / XZOB3
  1174. IF (ABS(TEST1).LT.1.D-10.AND.ABS(TEST3).LT.1.D-10)
  1175. & IMI1MA3=IC
  1176. TEST1 = (NUAFLO(IC) - XMAX1) / XZOB1
  1177. TEST3 = (NUAVF1.NUAFLO(IC) - XMIN3) / XZOB3
  1178. IF (ABS(TEST1).LT.1.D-10.AND.ABS(TEST3).LT.1.D-10)
  1179. & IMA1MI3=IC
  1180. TEST1 = (NUAFLO(IC) - XMAX1) / XZOB1
  1181. TEST3 = (NUAVF1.NUAFLO(IC) - XMAX3) / XZOB3
  1182. IF (ABS(TEST1).LT.1.D-10.AND.ABS(TEST3).LT.1.D-10)
  1183. & IMA1MA3=IC
  1184. 350 CONTINUE
  1185. C
  1186. C Test : nuage sous forme GRILLE
  1187. C
  1188. NFLO = NBC1
  1189. SEGINI IAMO2
  1190. C
  1191. NFLO = NBC1
  1192. SEGINI IAMO2
  1193. IFLO1 = 1
  1194. IFLO2(IFLO1) = 1
  1195. FLO1(IFLO1) = NUAFLO(1)
  1196. FLO2(IFLO1,IFLO2(IFLO1)) = NUAVF1.NUAFLO(1)
  1197. DO 360 IC1=2,NBC1
  1198. DO 370 IFL1=1,IFLO1
  1199. TEST1 = (NUAFLO(IC1) - FLO1(IFL1)) / XZOB1
  1200. IF (ABS(TEST1).LT.1.D-10) GOTO 380
  1201. 370 CONTINUE
  1202. IFLO1 = IFLO1 + 1
  1203. FLO1(IFLO1) = NUAFLO(IC1)
  1204. IFLO2(IFLO1) = 1
  1205. FLO2(IFLO1,IFLO2(IFLO1)) = NUAVF1.NUAFLO(IC1)
  1206. GOTO 360
  1207. 380 CONTINUE
  1208. DO 390 IFL2=1,IFLO2(IFL1)
  1209. TEST3 =
  1210. & (NUAVF1.NUAFLO(IC1) - FLO2(IFL1,IFL2)) / XZOB3
  1211. IF (ABS(TEST3).LT.1.D-10) THEN
  1212. SEGSUP IAMO2
  1213. INTERR(1)=MNUAGE
  1214. CALL ERREUR(940)
  1215. GOTO 9900
  1216. ENDIF
  1217. 390 CONTINUE
  1218. IFLO2(IFL1) = IFLO2(IFL1) + 1
  1219. FLO2(IFL1,IFLO2(IFL1)) = NUAVF1.NUAFLO(IC1)
  1220. 360 CONTINUE
  1221. C
  1222. DO 400 IFL1=2,IFLO1
  1223. IF (IFLO2(IFL1).NE.IFLO2(1)) THEN
  1224. SEGSUP IAMO2
  1225. INTERR(1)=MNUAGE
  1226. CALL ERREUR(941)
  1227. GOTO 9900
  1228. ENDIF
  1229. DO 410 IFL2=1,IFLO2(IFL1)
  1230. DO 420 IFL=1,IFLO2(1)
  1231. TEST3 = (FLO2(IFL1,IFL2) - FLO2(1,IFL)) / XZOB3
  1232. IF (ABS(TEST3).LT.1.D-10) GOTO 410
  1233. 420 CONTINUE
  1234. SEGSUP IAMO2
  1235. INTERR(1)=MNUAGE
  1236. CALL ERREUR(941)
  1237. GOTO 9900
  1238. 410 CONTINUE
  1239. 400 CONTINUE
  1240. C
  1241. SEGSUP IAMO2
  1242. ENDIF
  1243. C
  1244. KFLOT = .TRUE.
  1245. IF (.NOT.KREAL) THEN
  1246. NOMID=IPNOMC
  1247. NOTYPE=MOTYPE
  1248. SEGACT NOTYPE
  1249. DO 430 IOBL=1,NBROBL
  1250. IF (LESOBL(IOBL).EQ.NOMCO) THEN
  1251. TYPV=TYPE(IOBL)
  1252. IF (TYPV(1:6).NE.'REAL*8') KFLOT = .FALSE.
  1253. GOTO 440
  1254. ENDIF
  1255. 430 CONTINUE
  1256. DO 450 IFAC=1,NBRFAC
  1257. IF (LESFAC(IFAC).EQ.NOMCO) THEN
  1258. TYPV=TYPE(NBROBL+IFAC)
  1259. IF (TYPV(1:6).NE.'REAL*8') KFLOT = .FALSE.
  1260. GOTO 440
  1261. ENDIF
  1262. 450 CONTINUE
  1263. 440 CONTINUE
  1264. SEGDES NOTYPE
  1265. ENDIF
  1266. C
  1267. IF (IVAR.EQ.1) THEN
  1268. C
  1269. C Cas du nuage FLOTTANT-EVOLUTION
  1270. C
  1271. C La taille du nouvau MCHAML_EVOLUTION
  1272. N1PTEL = 0
  1273. N1EL = 0
  1274. N2EL = N1E1
  1275. IF (N1PTE1.EQ.1) THEN
  1276. N2PTEL=1
  1277. ELSE
  1278. N2PTEL=NBPGAU
  1279. ENDIF
  1280. SEGINI MELVAL
  1281. IELVAL(ICOMP)=MELVAL
  1282. C
  1283. DO 460 IEL=1,N2EL
  1284. DO 470 IGAU=1,N2PTEL
  1285. VA1=MELVA2.VELCHE(IGAU,IEL)
  1286. C Si la valeur VA1 est tombée pile à un flottant défini dans
  1287. C nuage, on prend la courbe correspondant au flottant.
  1288. DO 480 IN=1,NBC1-1
  1289. IF ((NUAFLO(IN+1)-NUAFLO(IN)).EQ.0.D0) THEN
  1290. XZOB=0.5D0*(XMIN1+XMAX1)
  1291. TEST1 = (VA1-NUAFLO(IN))/XZOB
  1292. ELSE
  1293. TEST1 = (VA1-NUAFLO(IN))/
  1294. & (NUAFLO(IN+1)-NUAFLO(IN))
  1295. ENDIF
  1296. IF (ABS(TEST1).LT.1.D-10) THEN
  1297. IEV3=NUAINT(IN)
  1298. GOTO 490
  1299. ENDIF
  1300. 480 CONTINUE
  1301. C Si la valeur VA1 est supérieure au flottant maxi.,
  1302. C on prend la courbe correspondant au flottant maxi..
  1303. IF (VA1.GE.NUAFLO(IMAX1)) THEN
  1304. IEV3=NUAINT(IMAX1)
  1305. C Si la valeur VA1 est inférieure au flottant mini.,
  1306. C on prend la courbe correspondant au flottant mini..
  1307. ELSEIF (VA1.LE.NUAFLO(IMIN1)) THEN
  1308. IEV3=NUAINT(IMIN1)
  1309. ELSE
  1310. VMAX1=-1.D35
  1311. VMIN1= 1.D35
  1312. DO 500 IC=1,NBC1
  1313. IF (VA1.GT.NUAFLO(IC).AND.NUAFLO(IC).GT.VMAX1)
  1314. & THEN
  1315. VMAX1=NUAFLO(IC)
  1316. IGA=IC
  1317. ENDIF
  1318. IF (VA1.LT.NUAFLO(IC).AND.NUAFLO(IC).LT.VMIN1)
  1319. & THEN
  1320. VMIN1=NUAFLO(IC)
  1321. IDR=IC
  1322. ENDIF
  1323. 500 CONTINUE
  1324. XX1 =(NUAFLO(IDR)-VA1)/(NUAFLO(IDR)-NUAFLO(IGA))
  1325. XX2 =(VA1-NUAFLO(IGA))/(NUAFLO(IDR)-NUAFLO(IGA))
  1326. IEV1= NUAINT(IGA)
  1327. IEV2= NUAINT(IDR)
  1328. IF (IEV1.EQ.IEV2) THEN
  1329. IEV3=IEV1
  1330. ELSE
  1331. CALL EVOLIN(IEV1,XX1,IEV2,XX2,IEV3)
  1332. IF (IEV3.EQ.0 .OR. IERR.NE.0) GOTO 9900
  1333.  
  1334. C En cas de MCHAML de type caracteristiques on modifie
  1335. C la courbe de traction issue de EVOLIN pour que la pente
  1336. C soit interpolée linéairement
  1337. IF(IYOUN.NE.0.AND.NOMCHE(ICOMP).EQ.'TRAC ')THEN
  1338. CALL MODICO(IPOI1,IEV3,ISOUS,ICOMP,IGA,IDR,
  1339. & IEV1,IEV2,VA1,1,IEV4)
  1340. IF (IEV4.EQ.0 .OR. IERR.NE.0) GOTO 9900
  1341. IEV3=IEV4
  1342. ENDIF
  1343. ENDIF
  1344. ENDIF
  1345. 490 CONTINUE
  1346. IELCHE(IGAU,IEL)=IEV3
  1347. 470 CONTINUE
  1348. 460 CONTINUE
  1349.  
  1350. IF (KFLOT) THEN
  1351. NCO1 = MCHAM2.IELVAL(/1)
  1352. MEVOLL = IELCHE(1,1)
  1353. KEVOLL = IEVOLL(1)
  1354. NOM4 = NOMEVX
  1355. NCO1 = MCHAM2.IELVAL(/1)
  1356. DO 510 INO = 1,NCO1
  1357. NOM2 = MCHAM2.NOMCHE(INO)
  1358. IF (NOM2.EQ.NOM4) GOTO 520
  1359. 510 CONTINUE
  1360. KFLOT=.FALSE.
  1361. 520 CONTINUE
  1362. ENDIF
  1363. C
  1364. IF (KFLOT) THEN
  1365. TYPCHE(ICOMP)='REAL*8 '
  1366. MELVA6=MELVAL
  1367. ICHAM2=MCHAM2
  1368. CALL VARIN2(ICHAM2,MELVA6,COQ,MELEME,SWORK,NOMCO,IMELE,
  1369. & MELGEO,MINTE,MINTE1,MELVAL,KERRE1)
  1370. IF (KERRE1.NE.0) THEN
  1371. CALL ERREUR(26)
  1372. RETURN
  1373. ENDIF
  1374. C SEGSUP MELVA6
  1375. ENDIF
  1376. C
  1377. IELVAL(ICOMP)=MELVAL
  1378. C
  1379. ENDIF
  1380. C
  1381. IF (IVAR.EQ.2) THEN
  1382. C
  1383. C Cas du nuage FLOTTANT-FLOTTANT-EVOLUTION
  1384. C
  1385. C La taille du nouvau MCHAML_EVOLUTION
  1386. N1PTEL = 0
  1387. N1EL = 0
  1388. N2EL = N1E1
  1389. IF (N1E1.EQ.1.AND.N1E2.EQ.1) THEN
  1390. N2EL=1
  1391. ELSE
  1392. N2EL=NEL0
  1393. ENDIF
  1394. IF (N1PTE1.EQ.1.AND.N1PTE2.EQ.1) THEN
  1395. N2PTEL=1
  1396. ELSE
  1397. N2PTEL=NBPGAU
  1398. ENDIF
  1399. SEGINI MELVAL
  1400. IELVAL(ICOMP)=MELVAL
  1401. C
  1402. DO 530 IEL=1,N2EL
  1403. DO 540 IGAU=1,N2PTEL
  1404. IEL1 = MIN(IEL,N1E1)
  1405. IGAU1 = MIN(IGAU,N1PTE1)
  1406. VA1=MELVA2.VELCHE(IGAU1,IEL1)
  1407. IEL2 = MIN(IEL,N1E2)
  1408. IGAU2 = MIN(IGAU,N1PTE2)
  1409. VA2=MELVA3.VELCHE(IGAU2,IEL2)
  1410. C Si les valeurs VA1 et VA2 sont tombées pile à un flottant défini dans
  1411. C nuage, on prend la courbe correspondant au flottant.
  1412. VMAX1=-1.D35
  1413. VMIN1=1.D35
  1414. VMAX2=-1.D35
  1415. VMIN2=1.D35
  1416. IDR1=0
  1417. IGA1=0
  1418. IDR2=0
  1419. IGA2=0
  1420. DO 550 IN=1,NBC1-1
  1421. IF ((NUAFLO(IN+1)-NUAFLO(IN)).EQ.0.D0) THEN
  1422. XZOB=0.5D0*(XMIN1+XMAX1)
  1423. TEST1 = (VA1-NUAFLO(IN))/XZOB
  1424. TMAX1 = (NUAFLO(IN)-NUAFLO(IMA1MA3))/XZOB
  1425. TMIN1 = (NUAFLO(IN)-NUAFLO(IMI1MI3))/XZOB
  1426. ELSE
  1427. TEST1 = (VA1-NUAFLO(IN))/
  1428. & (NUAFLO(IN+1)-NUAFLO(IN))
  1429. TMAX1 = (NUAFLO(IN)-NUAFLO(IMA1MA3))/
  1430. & (NUAFLO(IN+1)-NUAFLO(IN))
  1431. TMIN1 = (NUAFLO(IN)-NUAFLO(IMI1MI3))/
  1432. & (NUAFLO(IN+1)-NUAFLO(IN))
  1433. ENDIF
  1434. IF ((NUAVF1.NUAFLO(IN+1)-NUAVF1.NUAFLO(IN)).EQ.0.D0)
  1435. & THEN
  1436. XZOB=0.5D0*(XMIN3+XMAX3)
  1437. TEST2 = (VA2-NUAVF1.NUAFLO(IN))/XZOB
  1438. TMAX2 =
  1439. & (NUAVF1.NUAFLO(IN)-NUAVF1.NUAFLO(IMA1MA3))/XZOB
  1440. TMIN2 =
  1441. & (NUAVF1.NUAFLO(IN)-NUAVF1.NUAFLO(IMI1MI3))/XZOB
  1442. ELSE
  1443. TEST2 = (VA2-NUAVF1.NUAFLO(IN))/
  1444. & (NUAVF1.NUAFLO(IN+1)-NUAVF1.NUAFLO(IN))
  1445. TMAX2 =
  1446. & (NUAVF1.NUAFLO(IN)-NUAVF1.NUAFLO(IMA1MA3))/
  1447. & (NUAVF1.NUAFLO(IN+1)-NUAVF1.NUAFLO(IN))
  1448. TMIN2 =
  1449. & (NUAVF1.NUAFLO(IN)-NUAVF1.NUAFLO(IMI1MI3))/
  1450. & (NUAVF1.NUAFLO(IN+1)-NUAVF1.NUAFLO(IN))
  1451. ENDIF
  1452. IF
  1453. & (ABS(TEST1).LT.1.D-10.AND.ABS(TEST2).LT.1.D-10)
  1454. & THEN
  1455. IEV3=NUAINT(IN)
  1456. GOTO 560
  1457. ELSE
  1458. IF (ABS(TEST1).LT.1.D-10.OR.
  1459. & (VA1.GT.NUAFLO(IMA1MA3).AND.
  1460. & ABS(TMAX1).LT.1.D-10).OR.
  1461. & (VA1.LT.NUAFLO(IMI1MI3).AND.
  1462. & ABS(TMIN1).LT.1.D-10)) THEN
  1463. IF (IGA1.NE.-1) THEN
  1464. VMAX2=-1.D35
  1465. VMIN2=1.D35
  1466. ENDIF
  1467. IF (VA2.GT.NUAVF1.NUAFLO(IN).AND.
  1468. & NUAVF1.NUAFLO(IN).GE.VMAX2) THEN
  1469. VMAX2=NUAVF1.NUAFLO(IN)
  1470. IGA2=IN
  1471. IF (VA2.GT.NUAVF1.NUAFLO(IMA1MA3)) THEN
  1472. IDR2=IN
  1473. ENDIF
  1474. ENDIF
  1475. IF (VA2.LT.NUAVF1.NUAFLO(IN).AND.
  1476. & NUAVF1.NUAFLO(IN).LE.VMIN2) THEN
  1477. VMIN2=NUAVF1.NUAFLO(IN)
  1478. IDR2=IN
  1479. IF (VA2.LT.NUAVF1.NUAFLO(IMI1MI3)) THEN
  1480. IGA2=IN
  1481. ENDIF
  1482. ENDIF
  1483. IGA1=-1
  1484. IDR1=-1
  1485. GOTO 550
  1486. ELSE
  1487. IF (IGA1.EQ.-1)GOTO 550
  1488. IF (ABS(TEST2).LT.1.D-10.OR.
  1489. & (VA2.GT.NUAVF1.NUAFLO(IMA1MA3).AND.
  1490. & ABS(TMAX2).LT.1.D-10).OR.
  1491. & (VA2.LT.NUAVF1.NUAFLO(IMI1MI3).AND.
  1492. & ABS(TMIN2).LT.1.D-10)) THEN
  1493. IF (IGA2.NE.-1) THEN
  1494. VMAX1=-1.D35
  1495. VMIN1=1.D35
  1496. ENDIF
  1497. IF
  1498. & (VA1.GT.NUAFLO(IN).AND.NUAFLO(IN).GE.VMAX1)
  1499. & THEN
  1500. VMAX1=NUAFLO(IN)
  1501. IGA1=IN
  1502. IF (VA1.GT.NUAFLO(IMA1MA3)) THEN
  1503. IDR1=IN
  1504. ENDIF
  1505. ENDIF
  1506. IF
  1507. & (VA1.LT.NUAFLO(IN).AND.NUAFLO(IN).LE.VMIN1)
  1508. & THEN
  1509. VMIN1=NUAFLO(IN)
  1510. IDR1=IN
  1511. IF (VA1.LT.NUAFLO(IMI1MI3)) THEN
  1512. IGA1=IN
  1513. ENDIF
  1514. ENDIF
  1515. IGA2=-1
  1516. IDR2=-1
  1517. GOTO 550
  1518. ELSE
  1519. IF (IGA2.EQ.-1)GOTO 550
  1520. IF
  1521. & (VA1.GT.NUAFLO(IN).AND.NUAFLO(IN).GE.VMAX1)
  1522. & THEN
  1523. IF (VA2.GT.NUAVF1.NUAFLO(IN).AND.
  1524. & NUAVF1.NUAFLO(IN).GE.VMAX2) THEN
  1525. VMAX1=NUAFLO(IN)
  1526. VMAX2=NUAVF1.NUAFLO(IN)
  1527. IGA1=IN
  1528. ENDIF
  1529. IF (VA2.LT.NUAVF1.NUAFLO(IN).AND.
  1530. & NUAVF1.NUAFLO(IN).LE.VMIN2) THEN
  1531. VMAX1=NUAFLO(IN)
  1532. VMIN2=NUAVF1.NUAFLO(IN)
  1533. IGA2=IN
  1534. ENDIF
  1535. ENDIF
  1536. IF
  1537. & (VA1.LT.NUAFLO(IN).AND.NUAFLO(IN).LE.VMIN1)
  1538. & THEN
  1539. IF (VA2.LT.NUAVF1.NUAFLO(IN).AND.
  1540. & NUAVF1.NUAFLO(IN).LE.VMIN2) THEN
  1541. VMIN1=NUAFLO(IN)
  1542. VMIN2=NUAVF1.NUAFLO(IN)
  1543. IDR2=IN
  1544. ENDIF
  1545. IF (VA2.GT.NUAVF1.NUAFLO(IN).AND.
  1546. & NUAVF1.NUAFLO(IN).GE.VMAX2) THEN
  1547. VMIN1=NUAFLO(IN)
  1548. VMAX2=NUAVF1.NUAFLO(IN)
  1549. IDR1=IN
  1550. ENDIF
  1551. ENDIF
  1552. ENDIF
  1553. ENDIF
  1554. ENDIF
  1555. 550 CONTINUE
  1556. IF ((NUAFLO(NBC1)-NUAFLO(NBC1-1)).EQ.0.D0) THEN
  1557. XZOB=0.5D0*(XMIN1+XMAX1)
  1558. TEST1 = (VA1-NUAFLO(NBC1))/XZOB
  1559. TMAX1 = (NUAFLO(NBC1)-NUAFLO(IMA1MA3))/XZOB
  1560. TMIN1 = (NUAFLO(NBC1)-NUAFLO(IMI1MI3))/XZOB
  1561. ELSE
  1562. TEST1 = (VA1-NUAFLO(NBC1))/
  1563. & (NUAFLO(NBC1)-NUAFLO(NBC1-1))
  1564. TMAX1 = (NUAFLO(NBC1)-NUAFLO(IMA1MA3))/
  1565. & (NUAFLO(NBC1)-NUAFLO(NBC1-1))
  1566. TMIN1 = (NUAFLO(NBC1)-NUAFLO(IMI1MI3))/
  1567. & (NUAFLO(NBC1)-NUAFLO(NBC1-1))
  1568. ENDIF
  1569. IF
  1570. & ((NUAVF1.NUAFLO(NBC1)-NUAVF1.NUAFLO(NBC1-1)).EQ.0.D0)
  1571. & THEN
  1572. XZOB=0.5D0*(XMIN3+XMAX3)
  1573. TEST2 = (VA2-NUAVF1.NUAFLO(NBC1))/XZOB
  1574. TMAX2 =
  1575. & (NUAVF1.NUAFLO(NBC1)-NUAVF1.NUAFLO(IMA1MA3))/XZOB
  1576. TMIN2 =
  1577. & (NUAVF1.NUAFLO(NBC1)-NUAVF1.NUAFLO(IMI1MI3))/XZOB
  1578. ELSE
  1579. TEST2 = (VA2-NUAVF1.NUAFLO(NBC1))/
  1580. & (NUAVF1.NUAFLO(NBC1)-NUAVF1.NUAFLO(NBC1-1))
  1581. TMAX2 =
  1582. & (NUAVF1.NUAFLO(NBC1)-NUAVF1.NUAFLO(IMA1MA3))/
  1583. & (NUAVF1.NUAFLO(NBC1)-NUAVF1.NUAFLO(NBC1-1))
  1584. TMIN2 =
  1585. & (NUAVF1.NUAFLO(NBC1)-NUAVF1.NUAFLO(IMI1MI3))/
  1586. & (NUAVF1.NUAFLO(NBC1)-NUAVF1.NUAFLO(NBC1-1))
  1587. ENDIF
  1588. C
  1589. IF (ABS(TEST1).LT.1.D-10.AND.ABS(TEST2).LT.1.D-10)
  1590. & THEN
  1591. IEV3=NUAINT(NBC1)
  1592. GOTO 560
  1593. ELSE
  1594. IF (ABS(TEST1).LT.1.D-10.OR.
  1595. & (VA1.GT.NUAFLO(IMA1MA3).AND.
  1596. & ABS(TMAX1).LT.1.D-10).OR.
  1597. & (VA1.LT.NUAFLO(IMI1MI3).AND.
  1598. & ABS(TMIN1).LT.1.D-10)) THEN
  1599. IF (VA2.GT.NUAVF1.NUAFLO(NBC1).AND.
  1600. & NUAVF1.NUAFLO(NBC1).GE.VMAX2) THEN
  1601. VMAX2=NUAVF1.NUAFLO(NBC1)
  1602. IGA2=NBC1
  1603. IF (VA2.GT.NUAVF1.NUAFLO(IMA1MA3)) THEN
  1604. IDR2=NBC1
  1605. ENDIF
  1606. ENDIF
  1607. IF (VA2.LT.NUAVF1.NUAFLO(NBC1).AND.
  1608. & NUAVF1.NUAFLO(NBC1).LE.VMIN2) THEN
  1609. VMIN2=NUAVF1.NUAFLO(NBC1)
  1610. IDR2=NBC1
  1611. IF (VA2.LT.NUAVF1.NUAFLO(IMI1MI3)) THEN
  1612. IGA2=NBC1
  1613. ENDIF
  1614. ENDIF
  1615. IGA1=-1
  1616. IDR1=-1
  1617. GOTO 570
  1618. ELSE
  1619. IF (IGA1.EQ.-1)GOTO 570
  1620. IF (ABS(TEST2).LT.1.D-10.OR.
  1621. & (VA2.GT.NUAVF1.NUAFLO(IMA1MA3).AND.
  1622. & ABS(TMAX2).LT.1.D-10).OR.
  1623. & (VA2.LT.NUAVF1.NUAFLO(IMI1MI3).AND.
  1624. & ABS(TMIN2).LT.1.D-10)) THEN
  1625. IF
  1626. & (VA1.GT.NUAFLO(NBC1).AND.NUAFLO(NBC1).GE.VMAX1)
  1627. & THEN
  1628. VMAX1=NUAFLO(NBC1)
  1629. IGA1=NBC1
  1630. IF (VA1.GT.NUAFLO(IMA1MA3)) THEN
  1631. IDR1=NBC1
  1632. ENDIF
  1633. ENDIF
  1634. IF
  1635. & (VA1.LT.NUAFLO(NBC1).AND.NUAFLO(NBC1).LE.VMIN1)
  1636. & THEN
  1637. VMIN1=NUAFLO(NBC1)
  1638. IDR1=NBC1
  1639. IF (VA1.LT.NUAFLO(IMI1MI3)) THEN
  1640. IGA1=NBC1
  1641. ENDIF
  1642. ENDIF
  1643. IGA2=-1
  1644. IDR2=-1
  1645. GOTO 570
  1646. ELSE
  1647. IF (IGA1.EQ.-1.OR.IGA2.EQ.-1)GOTO 570
  1648. IF
  1649. & (VA1.GT.NUAFLO(NBC1).AND.NUAFLO(NBC1).GE.VMAX1)
  1650. & THEN
  1651. IF (VA2.GT.NUAVF1.NUAFLO(NBC1).AND.
  1652. & NUAVF1.NUAFLO(NBC1).GE.VMAX2) THEN
  1653. VMAX1=NUAFLO(NBC1)
  1654. VMAX2=NUAVF1.NUAFLO(NBC1)
  1655. IGA1=IN
  1656. ENDIF
  1657. IF (VA2.LT.NUAVF1.NUAFLO(NBC1).AND.
  1658. & NUAVF1.NUAFLO(NBC1).LE.VMIN2) THEN
  1659. VMAX1=NUAFLO(NBC1)
  1660. VMIN2=NUAVF1.NUAFLO(NBC1)
  1661. IGA2=IN
  1662. ENDIF
  1663. ENDIF
  1664. IF
  1665. & (VA1.LT.NUAFLO(NBC1).AND.NUAFLO(NBC1).LE.VMIN1)
  1666. & THEN
  1667. IF (VA2.LT.NUAVF1.NUAFLO(NBC1).AND.
  1668. & NUAVF1.NUAFLO(NBC1).LE.VMIN2) THEN
  1669. VMIN1=NUAFLO(NBC1)
  1670. VMIN2=NUAVF1.NUAFLO(NBC1)
  1671. IDR2=IN
  1672. ENDIF
  1673. IF (VA2.GT.NUAVF1.NUAFLO(NBC1).AND.
  1674. & NUAVF1.NUAFLO(NBC1).GE.VMAX2) THEN
  1675. VMIN1=NUAFLO(NBC1)
  1676. VMAX2=NUAVF1.NUAFLO(NBC1)
  1677. IDR1=IN
  1678. ENDIF
  1679. ENDIF
  1680. ENDIF
  1681. ENDIF
  1682. ENDIF
  1683. C Si les valeurs VA1 et VA2 sont supérieures au flottant maxi.,
  1684. C on prend la courbe correspondant aux flottants maxi.
  1685. 570 CONTINUE
  1686. IF (VA1.GE.NUAFLO(IMA1MA3).AND.
  1687. & VA2.GE.NUAVF1.NUAFLO(IMA1MA3)) THEN
  1688. IEV3=NUAINT(IMA1MA3)
  1689. GOTO 560
  1690. ENDIF
  1691. IF (VA1.LE.NUAFLO(IMI1MI3).AND.
  1692. & VA2.LE.NUAVF1.NUAFLO(IMI1MI3)) THEN
  1693. IEV3=NUAINT(IMI1MI3)
  1694. GOTO 560
  1695. ENDIF
  1696. IF (VA1.LE.NUAFLO(IMI1MA3).AND.
  1697. & VA2.GE.NUAVF1.NUAFLO(IMI1MA3)) THEN
  1698. IEV3=NUAINT(IMI1MA3)
  1699. GOTO 560
  1700. ENDIF
  1701. IF (VA1.GE.NUAFLO(IMA1MI3).AND.
  1702. & VA2.LE.NUAVF1.NUAFLO(IMA1MI3)) THEN
  1703. IEV3=NUAINT(IMA1MI3)
  1704. GOTO 560
  1705. ENDIF
  1706. C Si seule la valeur VA1 est tombée pile à un flottant défini dans
  1707. C nuage ou est supérieure à la valeur maxi, on interpole sur VA2
  1708. IF (IGA1.EQ.-1) THEN
  1709. XX1=(NUAVF1.NUAFLO(IDR2)-VA2)/
  1710. & (NUAVF1.NUAFLO(IDR2)-NUAVF1.NUAFLO(IGA2))
  1711. XX2=(VA2-NUAVF1.NUAFLO(IGA2))/
  1712. & (NUAVF1.NUAFLO(IDR2)-NUAVF1.NUAFLO(IGA2))
  1713. IEV1=NUAINT(IGA2)
  1714. IEV2=NUAINT(IDR2)
  1715. IF (IEV1.EQ.IEV2) THEN
  1716. IEV3=IEV1
  1717. ELSE
  1718. CALL EVOLIN(IEV1,XX1,IEV2,XX2,IEV3)
  1719. IF (IEV3.EQ.0.OR.IERR.NE.0) THEN
  1720. GOTO 9900
  1721. ENDIF
  1722. C En cas de MCHAML de type caracteristiques on modifie
  1723. C la courbe de traction issue de EVOLIN pour que la pente
  1724. C soit interpolée linéairement
  1725. IF (IYOUN.NE.0.AND.NOMCHE(ICOMP).EQ.'TRAC ')
  1726. & THEN
  1727. CALL MODICO(IPOI1,IEV3,ISOUS,ICOMP,IGA2,IDR2,
  1728. & IEV1,IEV2,VA2,2,IEV4)
  1729. IF (IEV4.EQ.0.OR.IERR.NE.0) THEN
  1730. GOTO 9900
  1731. ENDIF
  1732. IEV3=IEV4
  1733. ENDIF
  1734. ENDIF
  1735. GOTO 560
  1736. ENDIF
  1737. C Si seule la valeur VA2 est tombée pile à un flottant défini dans
  1738. C nuage ou est supérieure à la valeur maxi, on interpole sur VA1
  1739. IF (IGA2.EQ.-1) THEN
  1740. XX1=(NUAFLO(IDR1)-VA1)/(NUAFLO(IDR1)-NUAFLO(IGA1))
  1741. XX2=(VA1-NUAFLO(IGA1))/(NUAFLO(IDR1)-NUAFLO(IGA1))
  1742. IEV1=NUAINT(IGA1)
  1743. IEV2=NUAINT(IDR1)
  1744. IF (IEV1.EQ.IEV2) THEN
  1745. IEV3=IEV1
  1746. ELSE
  1747. CALL EVOLIN(IEV1,XX1,IEV2,XX2,IEV3)
  1748. IF (IEV3.EQ.0.OR.IERR.NE.0) THEN
  1749. GOTO 9900
  1750. ENDIF
  1751. C En cas de MCHAML de type caracteristiques on modifie
  1752. C la courbe de traction issue de EVOLIN pour que la pente
  1753. C soit interpolée linéairement
  1754. IF (IYOUN.NE.0.AND.NOMCHE(ICOMP).EQ.'TRAC ')
  1755. & THEN
  1756. CALL MODICO(IPOI1,IEV3,ISOUS,ICOMP,IGA1,IDR1,
  1757. & IEV1,IEV2,VA1,1,IEV4)
  1758. IF (IEV4.EQ.0.OR.IERR.NE.0) THEN
  1759. GOTO 9900
  1760. ENDIF
  1761. IEV3=IEV4
  1762. ENDIF
  1763. ENDIF
  1764. GOTO 560
  1765. ENDIF
  1766. C Cas général : on interpole sur VA1 PUIS VA2
  1767. C -- > sur VA1
  1768. XX1=(NUAFLO(IDR1)-VA1)/(NUAFLO(IDR1)-NUAFLO(IGA1))
  1769. XX2=(VA1-NUAFLO(IGA1))/(NUAFLO(IDR1)-NUAFLO(IGA1))
  1770. IEV1=NUAINT(IGA1)
  1771. IEV2=NUAINT(IDR1)
  1772. IF (IEV1.EQ.IEV2) THEN
  1773. IEV3=IEV1
  1774. ELSE
  1775. CALL EVOLIN(IEV1,XX1,IEV2,XX2,IEV3)
  1776. IF (IEV3.EQ.0.OR.IERR.NE.0) THEN
  1777. GOTO 9900
  1778. ENDIF
  1779. C En cas de MCHAML de type caracteristiques on modifie
  1780. C la courbe de traction issue de EVOLIN pour que la pente
  1781. C soit interpolée linéairement
  1782. IF (IYOUN.NE.0.AND.NOMCHE(ICOMP).EQ.'TRAC ')
  1783. & THEN
  1784. CALL MODICO(IPOI1,IEV3,ISOUS,ICOMP,IGA1,IDR1,
  1785. & IEV1,IEV2,VA1,1,IEV4)
  1786. IF (IEV4.EQ.0.OR.IERR.NE.0) THEN
  1787. GOTO 9900
  1788. ENDIF
  1789. IEV3=IEV4
  1790. ENDIF
  1791. ENDIF
  1792. XX1=(NUAFLO(IDR2)-VA1)/(NUAFLO(IDR2)-NUAFLO(IGA2))
  1793. XX2=(VA1-NUAFLO(IGA2))/(NUAFLO(IDR2)-NUAFLO(IGA2))
  1794. IEV1=NUAINT(IGA2)
  1795. IEV2=NUAINT(IDR2)
  1796. IF (IEV1.EQ.IEV2) THEN
  1797. IEV4=IEV1
  1798. ELSE
  1799. CALL EVOLIN(IEV1,XX1,IEV2,XX2,IEV4)
  1800. IF (IEV4.EQ.0.OR.IERR.NE.0) THEN
  1801. GOTO 9900
  1802. ENDIF
  1803. C En cas de MCHAML de type caracteristiques on modifie
  1804. C la courbe de traction issue de EVOLIN pour que la pente
  1805. C soit interpolée linéairement
  1806. IF (IYOUN.NE.0.AND.NOMCHE(ICOMP).EQ.'TRAC ')
  1807. & THEN
  1808. CALL MODICO(IPOI1,IEV4,ISOUS,ICOMP,IGA2,IDR2,
  1809. & IEV1,IEV2,VA1,1,IEV5)
  1810. IF (IEV5.EQ.0.OR.IERR.NE.0) THEN
  1811. GOTO 9900
  1812. ENDIF
  1813. IEV4=IEV5
  1814. ENDIF
  1815. ENDIF
  1816. C
  1817. C -- > sur VA2
  1818. XX1=(NUAVF1.NUAFLO(IDR2)-VA2)/
  1819. & (NUAVF1.NUAFLO(IDR2)-NUAVF1.NUAFLO(IDR1))
  1820. XX2=(VA2-NUAVF1.NUAFLO(IDR1))/
  1821. & (NUAVF1.NUAFLO(IDR2)-NUAVF1.NUAFLO(IDR1))
  1822. CALL EVOLIN(IEV3,XX1,IEV4,XX2,IEV5)
  1823. IF (IEV5.EQ.0.OR.IERR.NE.0) THEN
  1824. GOTO 9900
  1825. ENDIF
  1826. C En cas de MCHAML de type caracteristiques on modifie
  1827. C la courbe de traction issue de EVOLIN pour que la pente
  1828. C soit interpolée linéairement
  1829. IF (IYOUN.NE.0.AND.NOMCHE(ICOMP).EQ.'TRAC ') THEN
  1830. CALL MODICO(IPOI1,IEV5,ISOUS,ICOMP,IDR1,IDR2,IEV3,
  1831. & IEV4,VA2,2,IEV6)
  1832. IF (IEV6.EQ.0.OR.IERR.NE.0) THEN
  1833. GOTO 9900
  1834. ENDIF
  1835. IEV5=IEV6
  1836. ENDIF
  1837. IEV3=IEV5
  1838. C
  1839. 560 CONTINUE
  1840. IELCHE(IGAU,IEL)=IEV3
  1841. 540 CONTINUE
  1842. 530 CONTINUE
  1843. C
  1844. IF (KFLOT) THEN
  1845. NCO1 = MCHAM2.IELVAL(/1)
  1846. MEVOLL = IELCHE(1,1)
  1847. KEVOLL = IEVOLL(1)
  1848. NOM4 = NOMEVX
  1849. NCO1 = MCHAM2.IELVAL(/1)
  1850. DO 580 INO = 1,NCO1
  1851. NOM2 = MCHAM2.NOMCHE(INO)
  1852. IF (NOM2.EQ.NOM4) GO TO 590
  1853. 580 CONTINUE
  1854. KFLOT=.FALSE.
  1855. 590 CONTINUE
  1856. ENDIF
  1857. C
  1858. IF (KFLOT) THEN
  1859. TYPCHE(ICOMP)='REAL*8 '
  1860. MELVA6=MELVAL
  1861. ICHAM2=MCHAM2
  1862. CALL VARIN2(ICHAM2,MELVA6,COQ,MELEME,SWORK,NOMCO,IMELE,
  1863. & MELGEO,MINTE,MINTE1,MELVAL,KERRE1)
  1864. SEGSUP MELVA6
  1865. ENDIF
  1866. C
  1867. IELVAL(ICOMP)=MELVAL
  1868. C
  1869. ENDIF
  1870. C
  1871. C---------------------------------------------------------
  1872. C Composante de type LISTMOTS
  1873. C (evaluation externe)
  1874. C---------------------------------------------------------
  1875. C
  1876. ELSE IF (CHA1(9:16).EQ.'LISTMOTS') THEN
  1877. *jk
  1878. if (FORMOD(1).EQ.'LIAISON') THEN
  1879. TYPCHE(ICOMP)=CHA1
  1880. N1PTEL=0
  1881. N1EL =0
  1882. N2PTEL=1
  1883. N2EL =1
  1884. SEGINI MELVAL
  1885. IELVAL(ICOMP)=MELVAL
  1886. IELCHE(N2PTEL,N2EL)=MELVA1.IELCHE(1,1)
  1887. else
  1888. C
  1889. C Le LISTMOTS donne les parametres de la composante, en
  1890. C fonction desquels doit se faire l'evaluation externe.
  1891. C
  1892. C HYPOTHESE de CHAMP UNIFORME : la composante a les memes
  1893. C parametres en tout point d'integration de tout element
  1894. C de la sous-zone.
  1895. C Cette hypothese est necessaire car une composante ne peut
  1896. C etre associee qu'a une seule fonction externe.
  1897. C
  1898. N2PTE1=MELVA1.IELCHE(/1)
  1899. N2EL1=MELVA1.IELCHE(/2)
  1900. IF (N2PTE1.NE.1.AND.N2EL1.NE.1) THEN
  1901. MOTERR(1:8)=NOMCO
  1902. CALL ERREUR(953)
  1903. GOTO 9910
  1904. ENDIF
  1905. IVALIS(ICOMP) = 1
  1906. *
  1907. IF (JESIMU.EQ.0) THEN
  1908. C
  1909. C Acces au MCHAML des parametres sur la sous-zone
  1910. C
  1911. MCHEL2=IPOI3
  1912. IF (MCHEL2.ICHAML(/1).LT.NSOUS) THEN
  1913. CALL ERREUR(553)
  1914. GOTO 9910
  1915. ENDIF
  1916.  
  1917. IF (IMAMOD.NE.MCHEL2.IMACHE(ISOUS).OR.
  1918. & CONMOD.NE.MCHEL2.CONCHE(ISOUS)) THEN
  1919.  
  1920. do is = 1,mchel2.imache(/1)
  1921. if (imamod.eq.mchel2.imache(is).and.
  1922. & conmod.eq.mchel2.conche(is)) then
  1923. MCHAM2 = mchel2.ICHAML(is)
  1924. goto 449
  1925. endif
  1926. enddo
  1927.  
  1928. CALL ERREUR(472)
  1929. GOTO 9910
  1930. ENDIF
  1931.  
  1932. MCHAM2=MCHEL2.ICHAML(ISOUS)
  1933. *
  1934. 449 CONTINUE
  1935.  
  1936. NCMP2=MCHAM2.NOMCHE(/2)
  1937. C
  1938. C Verification de la presence des parametres necessaires
  1939. C Verification que ces parametres sont du type REAL*8
  1940. C Releve des pointeurs vers les MELVAL correspondants
  1941. C Determination de la representation du champ de sortie
  1942. C
  1943. NOMCO4=NOMCO(1:4)
  1944. C
  1945. MLMOT1=MELVA1.IELCHE(1,1)
  1946. NPARA=MLMOT1.MOTS(/2)
  1947. *
  1948. IF (MLMOT1.MOTS(1)(1:4).EQ.NOMSIM) THEN
  1949. JESIMU=1
  1950. NPARA=NPARA-1
  1951. ENDIF
  1952. *
  1953. SEGINI,WRKEXT
  1954. C
  1955. N1PTEL=1
  1956. N1EL=1
  1957. C
  1958. DO IPARA=1,NPARA
  1959. C
  1960. JPARA=IPARA+JESIMU
  1961. NOMTMP = MLMOT1.MOTS(JPARA)
  1962.  
  1963. ITROUV=0
  1964. DO ICMP2=1,NCMP2
  1965. IF (MCHAM2.NOMCHE(ICMP2)(1:4).EQ.NOMTMP(1:4)) THEN
  1966. ITROUV = ICMP2
  1967. GOTO 602
  1968. ENDIF
  1969. ENDDO
  1970. 602 CONTINUE
  1971. IF (ITROUV.EQ.0) THEN
  1972. MOTERR(1:4)=NOMTMP(1:4)
  1973. MOTERR(5:8)=NOMCO4
  1974. CALL ERREUR(954)
  1975. GOTO 9910
  1976. ENDIF
  1977. IF (MCHAM2.TYPCHE(ITROUV)(1:8).NE.'REAL*8 ') THEN
  1978. MOTERR(1:4)=NOMTMP(1:4)
  1979. MOTERR(5:8)=NOMCO4
  1980. CALL ERREUR(955)
  1981. GOTO 9910
  1982. ENDIF
  1983. C
  1984. NOMPAR(IPARA)=NOMTMP(1:4)
  1985. IVAPAR(IPARA)=MCHAM2.IELVAL(ITROUV)
  1986. C
  1987. C N.B. Toutes les composantes du MCHAML de parametres
  1988. C s'appuient sur la meme famille de points de Gauss (cf.
  1989. C changement de support effectue en debut de traitement).
  1990. C Toutefois la representation peut etre differente d'un
  1991. C parametre a l'autre : uniforme, constante par element
  1992. C ou complete. La representation la plus fine sur tous
  1993. C les parametres impose celle de la variable de sortie.
  1994. C
  1995. MELVA2=IVAPAR(IPARA)
  1996. N1PTE2=MELVA2.VELCHE(/1)
  1997. N1EL2 =MELVA2.VELCHE(/2)
  1998. IF (N1EL2.GT.1) THEN
  1999. IF (N1EL.EQ.1) THEN
  2000. N1EL=N1EL2
  2001. ELSE IF (N1EL2.NE.N1EL) THEN
  2002. MOTERR(1:8)='VARINU '
  2003. CALL ERREUR(146)
  2004. GOTO 9910
  2005. ENDIF
  2006. ENDIF
  2007. IF (N1PTE2.GT.1) THEN
  2008. IF (N1PTEL.EQ.1) THEN
  2009. N1PTEL=N1PTE2
  2010. ELSE IF (N1PTE2.NE.N1PTEL) THEN
  2011. MOTERR(1:8)='VARINU '
  2012. CALL ERREUR(146)
  2013. GOTO 9910
  2014. ENDIF
  2015. ENDIF
  2016. C
  2017. ENDDO
  2018. C
  2019. NPMAX = N1PTEL
  2020. NEMAX = N1EL
  2021. C
  2022. IF (JESIMU.EQ.0) THEN
  2023.  
  2024. N1PAUX=N1PTEL
  2025. C
  2026. C Pour les COQ4, le nb de pts de GAUSS vaut 5, mais on
  2027. C ne prend que les 4 premiers (le 5eme sert uniquement
  2028. C au cisaillement)
  2029. IF (IMELE.EQ.49.AND.N1PAUX.EQ.5) N1PAUX=4
  2030. C
  2031. C Premier appel au module externe COMPUT pour verifications
  2032. C
  2033. IVERI=1
  2034. IERUT=0
  2035. CALL COMPUT(IVERI,NOMCO4,NOMPAR,VALPAR,NPARA,
  2036. & VALCMP,IERUT)
  2037. IF (IERUT.NE.0) THEN
  2038. INTERR(1)=IERUT
  2039. CALL ERREUR(957)
  2040. GOTO 9910
  2041. ENDIF
  2042. C
  2043. C Initialisation du MELVAL de sortie
  2044. C
  2045. TYPCHE(ICOMP)='REAL*8 '
  2046. N2PTEL=0
  2047. N2EL=0
  2048. SEGINI MELVAL
  2049. IELVAL(ICOMP)=MELVAL
  2050. C
  2051. C Evaluation externe de la composante
  2052. C
  2053. IVERI=0
  2054. CC
  2055. DO IEL=1,N1EL
  2056. DO IGAU=1,N1PAUX
  2057. DO IPARA=1,NPARA
  2058. MELVA2=IVAPAR(IPARA)
  2059. IBGAU=MIN(IGAU,MELVA2.VELCHE(/1))
  2060. IELGA=MIN(IEL ,MELVA2.VELCHE(/2))
  2061. VALPAR(IPARA)=MELVA2.VELCHE(IBGAU,IELGA)
  2062. ENDDO
  2063. IERUT=0
  2064. CALL COMPUT(IVERI,NOMCO4,NOMPAR,VALPAR,NPARA,
  2065. & VELCHE(IGAU,IEL),IERUT)
  2066. IF (IERUT.NE.0) THEN
  2067. INTERR(1)=IERUT
  2068. CALL ERREUR(957)
  2069. GOTO 9900
  2070. ENDIF
  2071. ENDDO
  2072. ENDDO
  2073. C
  2074. ENDIF
  2075. C
  2076. ENDIF
  2077. endif
  2078. C
  2079. C---------------------------------------------------------
  2080. C Composante de type TABLE
  2081. C (evaluation externe avec dlopen)
  2082. C---------------------------------------------------------
  2083. C
  2084. ELSE IF (CHA1(9:16).EQ.'TABLE') THEN
  2085. *jk
  2086. if (FORMOD(1).EQ.'LIAISON') THEN
  2087. TYPCHE(ICOMP)=CHA1
  2088. N1PTEL=0
  2089. N1EL =0
  2090. N2PTEL=1
  2091. N2EL =1
  2092. SEGINI MELVAL
  2093. IELCHE(N2PTEL,N2EL)=MELVA1.IELCHE(1,1)
  2094. IELVAL(ICOMP)=MELVAL
  2095. else
  2096. C
  2097. C La TABLE donne le nom de la loi et les parametres
  2098. C de la composante, en fonction desquels doit se faire
  2099. C l'evaluation externe.
  2100. C
  2101. N2PTE1=MELVA1.IELCHE(/1)
  2102. N2EL 1=MELVA1.IELCHE(/2)
  2103. IF (N2PTE1.NE.1.AND.N2EL1.NE.1) THEN
  2104. MOTERR(1:8)=NOMCO
  2105. CALL ERREUR(953)
  2106. GOTO 9910
  2107. ENDIF
  2108. IVALIS(ICOMP) = 1
  2109. C
  2110. C Acces au MCHAML des parametres sur la sous-zone
  2111. C
  2112. MCHEL2=IPOI3
  2113.  
  2114. IF (MCHEL2.ICHAML(/1).LT.NSOUS) THEN
  2115. CALL ERREUR(553)
  2116. GOTO 9910
  2117. ENDIF
  2118.  
  2119. MCHAM2=MCHEL2.ICHAML(ISOUS)
  2120. IF (IMAMOD.NE.MCHEL2.IMACHE(ISOUS).OR.
  2121. & CONMOD.NE.MCHEL2.CONCHE(ISOUS)) THEN
  2122. do is = 1,mchel2.imache(/1)
  2123. if (imamod.eq.mchel2.imache(is).and.
  2124. & conmod.eq.mchel2.conche(is)) then
  2125. MCHAM2 = mchel2.ICHAML(is)
  2126. goto 649
  2127. endif
  2128. enddo
  2129.  
  2130. CALL ERREUR(472)
  2131. GOTO 9910
  2132. ENDIF
  2133. 649 CONTINUE
  2134. NCMP2=MCHAM2.NOMCHE(/2)
  2135. C
  2136. C Verification de la presence des parametres necessaires
  2137. C Verification que ces parametres sont du type REAL*8
  2138. C Releve des pointeurs vers les MELVAL correspondants
  2139. C Determination de la representation du champ de sortie
  2140. C
  2141. NOMCO4=NOMCO(1:4)
  2142.  
  2143. C Vérification de la table & Preconditionnement :
  2144. MTAB1 = MELVA1.IELCHE(1,1)
  2145.  
  2146. ip = 0
  2147. CALL SELLOI(MTAB1,MTAB2,ip)
  2148. IF (MTAB2.LE.0 .OR. IERR.NE.0) GOTO 9910
  2149.  
  2150. IF (mtab2.MTABIV(1) .EQ. 1) THEN
  2151. ITROU1 = 1
  2152. ITROU2 = 0
  2153. ELSE
  2154. ITROU1 = 0
  2155. ITROU2 = 2
  2156. ENDIF
  2157. LMEPTR = mtab2.MTABIV(2)
  2158. MLMOT1 = mtab2.MTABIV(3)
  2159. SEGACT,MLMOT1
  2160. NPARA = MLMOT1.MOTS(/2)
  2161. lacomm = ' '
  2162. lmepro = 0
  2163. IF (ITROU2.NE.0) THEN
  2164. if (NBESC.NE.0) SEGACT,IPILOC
  2165. IDEBCH = IPCHAR(LMEPTR)
  2166. IFINCH = IPCHAR(LMEPTR+1)-1
  2167. lacomm = ICHARA(IDEBCH:IFINCH)
  2168. lmepro = IFINCH-IDEBCH+1
  2169. if (NBESC.NE.0) SEGDES,IPILOC
  2170. ENDIF
  2171. SEGDES,mtab2
  2172.  
  2173. C Vérification de la liste de paramètres
  2174.  
  2175. SEGINI,WRKEXT
  2176. C
  2177. N1PTEL=1
  2178. N1EL=1
  2179. C
  2180. DO 650 IPARA=1,NPARA
  2181. C
  2182. JPARA=IPARA+JESIMU
  2183. NOMTMP = MLMOT1.MOTS(JPARA)
  2184. ITROUV = 0
  2185. DO ICMP2 = 1, NCMP2
  2186. IF (MCHAM2.NOMCHE(ICMP2)(1:4).EQ.NOMTMP(1:4)) THEN
  2187. ITROUV = ICMP2
  2188. GOTO 652
  2189. ENDIF
  2190. ENDDO
  2191. 652 CONTINUE
  2192. IF (ITROUV.EQ.0) THEN
  2193. MOTERR(1:4)=NOMTMP(1:4)
  2194. MOTERR(5:8)=NOMCO4
  2195. CALL ERREUR(954)
  2196. GOTO 9910
  2197. ENDIF
  2198. IF (MCHAM2.TYPCHE(ITROUV)(1:8).NE.'REAL*8 ') THEN
  2199. MOTERR(1:4)=NOMTMP(1:4)
  2200. MOTERR(5:8)=NOMCO4
  2201. CALL ERREUR(955)
  2202. GOTO 9910
  2203. ENDIF
  2204. C
  2205. NOMPAR(IPARA)=NOMTMP(1:4)
  2206. IVAPAR(IPARA)=MCHAM2.IELVAL(ITROUV)
  2207. C
  2208. C N.B. Toutes les composantes du MCHAML de parametres
  2209. C s'appuient sur la meme famille de points de Gauss (cf.
  2210. C changement de support effectue en debut de traitement).
  2211. C Toutefois la representation peut etre differente d'un
  2212. C parametre a l'autre : uniforme, constante par element
  2213. C ou complete. La representation la plus fine sur tous
  2214. C les parametres impose celle de la variable de sortie.
  2215. C
  2216. MELVA2=IVAPAR(IPARA)
  2217. N1PTE2=MELVA2.VELCHE(/1)
  2218. N1EL2 =MELVA2.VELCHE(/2)
  2219. IF (N1EL2.GT.1) THEN
  2220. IF (N1EL.EQ.1) THEN
  2221. N1EL=N1EL2
  2222. ELSE IF (N1EL2.NE.N1EL) THEN
  2223. MOTERR(1:8)='VARINU '
  2224. CALL ERREUR(146)
  2225. GOTO 9910
  2226. ENDIF
  2227. ENDIF
  2228. IF (N1PTE2.GT.1) THEN
  2229. IF (N1PTEL.EQ.1) THEN
  2230. N1PTEL=N1PTE2
  2231. ELSE IF (N1PTE2.NE.N1PTEL) THEN
  2232. MOTERR(1:8)='VARINU '
  2233. CALL ERREUR(146)
  2234. GOTO 9910
  2235. ENDIF
  2236. ENDIF
  2237. C
  2238. 650 CONTINUE
  2239. C
  2240. NPMAX = N1PTEL
  2241. NEMAX = N1EL
  2242. C
  2243. N1PAUX=N1PTEL
  2244. C
  2245. C Pour les COQ4, le nb de pts de GAUSS vaut 5, mais on
  2246. C ne prend que les 4 premiers (le 5eme sert uniquement
  2247. C au cisaillement)
  2248. IF (IMELE.EQ.49.AND.N1PAUX.EQ.5) N1PAUX=4
  2249. C
  2250. C Ouverture de la loi et vérification du nombre de paramètres
  2251. C
  2252. C Initialisation du MELVAL de sortie
  2253. C
  2254. TYPCHE(ICOMP)='REAL*8 '
  2255. N2PTEL=0
  2256. N2EL=0
  2257. SEGINI MELVAL
  2258. IELVAL(ICOMP)=MELVAL
  2259. C
  2260. IF (ITROU2.NE.0) THEN
  2261. C Appel par programme externe
  2262. ith=0
  2263. ith=oothrd
  2264. moterr=lacomm(1:lmepro)
  2265. CALL lance(lacomm(1:lmepro)//char(0),ith)
  2266. DO IPARA = 1, NPARA
  2267. MELVA2=IVAPAR(IPARA)
  2268. I_CHAMP=1
  2269. CALL becrdon(MELVA2.VELCHE,ith,IPARA,NPARA,
  2270. & I_CHAMP,N1EL,N1PAUX)
  2271. ENDDO
  2272. CALL blires(VELCHE,iend,istat,ith)
  2273. *
  2274. ELSE IF (ITROU1.NE.0) THEN
  2275. C appel par librairie
  2276. DO IEL=1,N1EL
  2277. DO IGAU=1,N1PAUX
  2278. DO IPARA=1,NPARA
  2279. MELVA2=IVAPAR(IPARA)
  2280. IBGAU=MIN(IGAU,MELVA2.VELCHE(/1))
  2281. IELGA=MIN(IEL,MELVA2.VELCHE(/2))
  2282. VALPAR(IPARA)=MELVA2.VELCHE(IBGAU,IELGA)
  2283. ENDDO
  2284. IERUT=0
  2285. r_z = 0.D0
  2286. CALL LOIEXT(LMEPTR,VALPAR,NPARA,r_z,IERUT)
  2287. IF (IERUT.NE.0) THEN
  2288. INTERR(1)=IERUT
  2289. CALL ERREUR(957)
  2290. GOTO 9900
  2291. ENDIF
  2292. VELCHE(IGAU,IEL) = r_z
  2293. ENDDO
  2294. ENDDO
  2295. C Fin appel par librairie
  2296. ELSE
  2297. WRITE(ioimp,*) 'VARINU : ITROU. incorrect -> Bizarre !'
  2298. CALL ERREUR(5)
  2299. GOTO 9900
  2300. ENDIF
  2301. C
  2302. endif
  2303. C
  2304. C---------------------------------------------------------
  2305. C Composante de type CHARGEMENT
  2306. C---------------------------------------------------------
  2307. C
  2308. ELSE IF (CHA1(9:16).EQ.'CHARGEME') THEN
  2309.  
  2310. C---- 1. Lecture du parametre TEMP dans MCHAML IPOI3
  2311. C
  2312. C Appareillement des sous-zones :
  2313. MCHEL2=IPOI3
  2314. IF (MCHEL2.ICHAML(/1).LT.NSOUS) THEN
  2315. CALL ERREUR(553)
  2316. GOTO 9910
  2317. ENDIF
  2318. IF (IMAMOD.NE.MCHEL2.IMACHE(ISOUS).OR.
  2319. & CONMOD.NE.MCHEL2.CONCHE(ISOUS)) THEN
  2320. DO IS1 = 1,MCHEL2.IMACHE(/1)
  2321. IF (IMAMOD.EQ.MCHEL2.IMACHE(IS1).AND.
  2322. & CONMOD.EQ.MCHEL2.CONCHE(IS1)) THEN
  2323. ICHAM2 = MCHEL2.ICHAML(IS1)
  2324. GOTO 680
  2325. ENDIF
  2326. ENDDO
  2327. CALL ERREUR(472)
  2328. GOTO 9910
  2329. ELSE
  2330. ICHAM2 = MCHEL2.ICHAML(ISOUS)
  2331. ENDIF
  2332. C
  2333. 680 CONTINUE
  2334. C
  2335. C Recherche du MELVAL de nom de composante TEMP :
  2336. MCHAM2 = ICHAM2
  2337. C SEGACT, MCHAM2
  2338. NC1 = MCHAM2.NOMCHE(/2)
  2339. IELVA2 = 0
  2340. DO IN1=1,NC1
  2341. IF (MCHAM2.NOMCHE(IN1).EQ.'TEMP') THEN
  2342. IELVA2 = MCHAM2.IELVAL(IN1)
  2343. GOTO 681
  2344. ENDIF
  2345. ENDDO
  2346.  
  2347. 681 CONTINUE
  2348. IF (IELVA2.EQ.0) THEN
  2349. CALL ERREUR(665)
  2350. GOTO 9910
  2351. ENDIF
  2352. C
  2353. C Lecture de la valeur du TEMP (TPS1) :
  2354. MELVA2 = IELVA2
  2355. C SEGACT, MELVA2
  2356. TPS1 = MELVA2.VELCHE(1,1)
  2357. C
  2358. C /!\ Je suppose que la valeur de la composante TEMP est uniforme /!\
  2359. C Lignes ci-dessous permettent de le verifier
  2360. C Le champ peut ne pas etre constant.
  2361. C On verifie que la valeur est uniforme
  2362. C N1PTE2 = MELVA2.VELCHE(/1)
  2363. C N1E2 = MELVA2.VELCHE(/2)
  2364. C IF (N1PTE2.NE.1.OR.N1E2.NE.1) THEN
  2365. C DO IE1=1, N1E2
  2366. C DO IP1=1, N1PTE2
  2367. C TIJ1 = MELVA2.VELCHE(IP1,IE1)
  2368. C XCRIT1 = ABS(TPS1*XZPREC+TIJ1*XZPREC)
  2369. C IF (ABS(TIJ1-TPS1).GT.XCRIT1) THEN
  2370. C write (6,*) ' TIJ1 =',TIJ1
  2371. C write (6,*) ' TPS1 =',TPS1
  2372. C MOTERR(1:4) = 'VARI'
  2373. C MOTERR(5:8) = 'TEMP'
  2374. C CALL ERREUR(335)
  2375. C GOTO 9910
  2376. C ENDIF
  2377. C ENDDO
  2378. C ENDDO
  2379. C ENDIF
  2380. C write (6,*) ' Le temp vaut =',TPS1
  2381.  
  2382. C---- 2. On tire le CHARGEMENT pour le temps donne :
  2383. C
  2384. C Lecture du pointeur sur l'objet CHARGEMENT
  2385. N2PTE1 = MELVA1.IELCHE(/1)
  2386. N2E1 = MELVA1.IELCHE(/2)
  2387. IF (N2E1.NE.1.OR.N2PTE1.NE.1) THEN
  2388. MOTERR(1:4) = 'VARI'
  2389. MOTERR(5:8) = NOMCHE(ICOMP)(1:4)
  2390. CALL ERREUR(335)
  2391. GOTO 9910
  2392. ENDIF
  2393. IPCHG1 = MELVA1.IELCHE(1,1)
  2394. C write (6,*) ' MELVA1.IELCHE(1,1) =',MELVA1.IELCHE(1,1)
  2395. C
  2396. C Chargement elementaire ?
  2397. MCHARG = IPCHG1
  2398. C CALL ACTOBJ('CHARGEME',MCHARG,1)
  2399. C SEGACT, MCHARG
  2400. NCG1 = KCHARG(/1)
  2401. IF (NCG1.NE.1) THEN
  2402. MOTERR(1:4) = 'VARI'
  2403. MOTERR(5:8) = NOMCHE(ICOMP)(1:4)
  2404. CALL ERREUR(335)
  2405. GOTO 9910
  2406. ENDIF
  2407. C
  2408. C Appel a l'operateur TIRE :
  2409. CALL ECRREE(TPS1)
  2410. CALL ECROBJ('CHARGEME',IPCHG1)
  2411. CALL TIRE
  2412. IF (IERR.NE.0) RETURN
  2413. C
  2414. C---- 3. Traitement du resultat TIRE :
  2415. C
  2416. C Lecture du resultat :
  2417. CALL QUETYP(CTYP,1,IRETOU)
  2418. IF (IERR.NE.0) RETURN
  2419. CALL LIROBJ(CTYP,IPCH1,1,IRETOU)
  2420. IF (IERR.NE.0) RETURN
  2421. C
  2422. C Affectation du resultat selon le type
  2423. C
  2424. C Cas d'un POINT :
  2425. IF (CTYP.EQ.'POINT') THEN
  2426. TYPCHE(ICOMP) = 'POINTEURPOINT '
  2427. N1PTEL = 0
  2428. N1EL = 0
  2429. N2PTEL = 1
  2430. N2EL = 1
  2431. SEGINI, MELVAL
  2432. IELVAL(ICOMP) = MELVAL
  2433. IELCHE(N2PTEL,N2EL) = IPCH1
  2434. C
  2435. C Cas d'un CHPOINT :
  2436. ELSEIF (CTYP.EQ.'CHPOINT') THEN
  2437. C Reduction sur le maillage de la ss-zone
  2438. IPGEO1 = MCHEL1.IMACHE(ISOUS)
  2439. CALL CHAME1(IPGEO1,0,IPCH1,' ',IPCH2,1)
  2440. IF (IERR.NE.0) RETURN
  2441. C
  2442. C Passage au bon support
  2443. CALL CHASUP(IPMODL,IPCH2,IPCH3,IRETOU,JEMIL1)
  2444. IF (IERR.NE.0) RETURN
  2445. C
  2446. C On remplit le MCHAML resultat
  2447. MCHEL3 = IPCH3
  2448. MCHAM3 = MCHEL3.ICHAML(1)
  2449. TYPCHE(ICOMP) = MCHAM3.TYPCHE(1)
  2450. N1PTEL = 0
  2451. N1EL = 0
  2452. N2PTEL = 1
  2453. N2EL = 1
  2454. IELVAL(ICOMP) = MCHAM3.IELVAL(1)
  2455. C
  2456. C Cas d'un MCHAML :
  2457. ELSEIF (CTYP.EQ.'MCHAML') THEN
  2458. C Reduction sur le maillage de la ss-zone
  2459. IPGEO1 = MCHEL1.IMACHE(ISOUS)
  2460. CALL REDUIC(IPCH1,IPGEO1,IPCH2)
  2461. IF (IERR.NE.0) RETURN
  2462. IF (IPCH2.EQ.0) THEN
  2463. MOTERR(1:4) = 'VARI'
  2464. MOTERR(5:8) = NOMCHE(ICOMP)(1:4)
  2465. CALL ERREUR(335)
  2466. GOTO 9910
  2467. ENDIF
  2468. CALL ACTOBJ('MCHAML',IPCH2,1)
  2469. C
  2470. C Passage au bon support
  2471. CALL CHASUP(IPMODL,IPCH2,IPCH3,IRETOU,JEMIL1)
  2472. IF (IERR.NE.0) RETURN
  2473. C
  2474. C On remplit le MCHAML resultat
  2475. MCHEL3 = IPCH3
  2476. C SEGACT, MCHEL3
  2477. MCHAM3 = MCHEL3.ICHAML(1)
  2478. TYPCHE(ICOMP) = MCHAM3.TYPCHE(1)
  2479. N1PTEL = 0
  2480. N1EL = 0
  2481. N2PTEL = 1
  2482. N2EL = 1
  2483. IELVAL(ICOMP) = MCHAM3.IELVAL(1)
  2484. C
  2485. ENDIF
  2486. C Fin du traitement d'un CHARGEMENT
  2487. C
  2488. C---------------------------------------------------------
  2489. C traitement des composante d'autres types
  2490. C que 'REAL*8' 'EVOLUTIO' ou 'NUAGE ' ou 'LISTMOTS'
  2491. C---------------------------------------------------------
  2492. C
  2493. ELSE
  2494. C
  2495. TYPCHE(ICOMP)=CHA1
  2496. N1PTEL=0
  2497. N1EL =0
  2498. N2PTEL= MELVA1.IELCHE(/1)
  2499. N2EL = MELVA1.IELCHE(/2)
  2500. SEGINI,MELVAL=MELVA1
  2501. IELVAL(ICOMP)=MELVAL
  2502. CC
  2503. ENDIF
  2504. C
  2505. 70 CONTINUE
  2506. * ajout d une composante pour IMPCOMPL
  2507. if (inatuu.eq.164.and.iptamo.gt.0) then
  2508. N2 = N2 + 1
  2509. segadj mchaml
  2510. typche(N2) = 'REAL*8'
  2511. nomche(N2) = 'VISC'
  2512. ielval(N2) = iptamo
  2513. endif
  2514. *'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  2515. * FIN DE BOUCLE SUR LES COMPOSANTES
  2516. *'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  2517. *
  2518. * cas simul
  2519. *
  2520. IF (JESIMU.EQ.1) THEN
  2521. *
  2522. * ON COMMENCE PAR ACTIVER TOUTES LES COMPOSANTES
  2523. * ET CREER LES MELVALS NON ENCORE CREES
  2524. *
  2525. DO 700 ICOMP=1,N2
  2526. IF (IVALIS(ICOMP).EQ.0) THEN
  2527. MELVAL=IELVAL(ICOMP)
  2528. NPMAX = MAX(NPMAX,VELCHE(/1))
  2529. NEMAX = MAX(NEMAX,VELCHE(/2))
  2530. ENDIF
  2531. 700 CONTINUE
  2532. DO 701 ICOMP=1,N2
  2533. IF (IVALIS(ICOMP).EQ.1) THEN
  2534. TYPCHE(ICOMP)='REAL*8 '
  2535. N1PTEL=NPMAX
  2536. N1EL=NEMAX
  2537. N2PTEL=0
  2538. N2EL=0
  2539. SEGINI MELVAL
  2540. IELVAL(ICOMP)=MELVAL
  2541. ENDIF
  2542. 701 CONTINUE
  2543. C
  2544. C Evaluation externe de la composante
  2545. C
  2546. DO 820 IEL=1,NEMAX
  2547. DO 821 IGAU=1,NPMAX
  2548. C
  2549. C Recuperation des parametres
  2550. C
  2551. DO 822 IPARA=1,NPARA
  2552. MELVA2=IVAPAR(IPARA)
  2553. N1PTE2=MELVA2.VELCHE(/1)
  2554. N1EL2=MELVA2.VELCHE(/2)
  2555. IF (N1PTE2.EQ.1) THEN
  2556. IF (N1EL2.EQ.1) THEN
  2557. VALPAR(IPARA)=MELVA2.VELCHE(1,1)
  2558. ELSE
  2559. VALPAR(IPARA)=MELVA2.VELCHE(1,IEL)
  2560. ENDIF
  2561. ELSE
  2562. VALPAR(IPARA)=MELVA2.VELCHE(IGAU,IEL)
  2563. ENDIF
  2564. 822 CONTINUE
  2565. *
  2566. * recuperation du tableau xval
  2567. *
  2568. DO 824 ICOMP=1,N2
  2569. MELVAL=IELVAL(ICOMP)
  2570. N1PTE1=VELCHE(/1)
  2571. N1EL1 =VELCHE(/2)
  2572. *
  2573. IF (N1PTE1.EQ.0.AND.N1EL1.EQ.0) THEN
  2574. XVAL(ICOMP)=0.
  2575. ELSE
  2576. IF (N1PTE1.EQ.1) THEN
  2577. IF (N1EL1.EQ.1) THEN
  2578. XVAL(ICOMP)=VELCHE(1,1)
  2579. ELSE
  2580. XVAL(ICOMP)=VELCHE(1,IEL)
  2581. ENDIF
  2582. ELSE
  2583. XVAL(ICOMP)=VELCHE(IGAU,IEL)
  2584. ENDIF
  2585. ENDIF
  2586. 824 CONTINUE
  2587. *
  2588. IERUT=0
  2589. CALL COMPUS(NOMVAL,XVAL,IVALIS,N2,
  2590. & NOMPAR,VALPAR,NPARA,CMNAME,IERUT)
  2591. IF (IERUT.NE.0) THEN
  2592. INTERR(1)=IERUT
  2593. CALL ERREUR(957)
  2594. GOTO 9900
  2595. ENDIF
  2596. *
  2597. * remplissage
  2598. *
  2599. DO 825 ICOMP=1,N2
  2600. IF (IVALIS(ICOMP).EQ.1) THEN
  2601. MELVAL=IELVAL(ICOMP)
  2602. VELCHE(IGAU,IEL) = XVAL(ICOMP)
  2603. ENDIF
  2604. 825 CONTINUE
  2605. *
  2606. 821 CONTINUE
  2607. 820 CONTINUE
  2608. *
  2609. ENDIF
  2610. *
  2611. *'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  2612. SEGSUP SWORK
  2613. SEGSUP WRK53
  2614. SEGSUP WRKRES
  2615. IF (WRKEXT.NE.0) SEGSUP,WRKEXT
  2616. IF (KNUAG) THEN
  2617. SEGSUP NOTYPE
  2618. NOMID=IPNOMC
  2619. if(lsupma)SEGSUP NOMID
  2620. ENDIF
  2621. IF (IAMOI.NE.0) SEGSUP IAMOI
  2622.  
  2623. 10 CONTINUE
  2624. C
  2625. C FIN de la boucle sur les sous-zones du MCHAML
  2626. C -----------------------------------------------
  2627. *
  2628. * - STATIQUE - MODAL cree composantes facultatives
  2629. *
  2630. IF (dstati.and.iret.ne.0) THEN
  2631. call varin6(ipmodl,iret)
  2632. if (ierr.ne.0) return
  2633. ENDIF
  2634.  
  2635. C Fin normale de VARINU
  2636. C =====================
  2637. NSOUS=ICHAML(/1)
  2638. DO IS = 1,NSOUS
  2639. MCHAML = ICHAML(IS)
  2640. DO im = 1,IELVAL(/1)
  2641. MELVAL = IELVAL(im)
  2642. CALL COMRED(MELVAL)
  2643. IELVAL(im)=MELVAL
  2644. ENDDO
  2645. ENDDO
  2646.  
  2647. RETURN
  2648.  
  2649. C Erreur dans une sous zone / desactivation et retour
  2650. C ===================================================
  2651. 9900 CONTINUE
  2652. SEGSUP MELVAL
  2653. C
  2654. 9910 CONTINUE
  2655. SEGSUP MCHAML
  2656. C
  2657. SEGSUP SWORK
  2658. SEGSUP WRK53
  2659. SEGSUP WRKRES
  2660. IF (WRKEXT.NE.0) SEGSUP,WRKEXT
  2661. IF (IAMOI.NE.0) SEGSUP IAMOI
  2662. C
  2663. 9920 CONTINUE
  2664. 9930 CONTINUE
  2665. IRET=0
  2666. SEGSUP MCHELM
  2667.  
  2668. c return
  2669. END
  2670.  
  2671.  
  2672.  
  2673.  
  2674.  
  2675.  

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