Télécharger varinu.eso

Retour à la liste

Numérotation des lignes :

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

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