Télécharger varinu.eso

Retour à la liste

Numérotation des lignes :

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

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