Télécharger varinu.eso

Retour à la liste

Numérotation des lignes :

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

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