Télécharger limodl.eso

Retour à la liste

Numérotation des lignes :

  1. C LIMODL SOURCE PV 17/10/03 21:16:00 9581
  2.  
  3. SUBROUTINE LIMODL(IURES,ITLACC,IMAX1,IRETOU,IFORM,NIVEAU
  4. & ,NBANC)
  5.  
  6. IMPLICIT INTEGER(I-N)
  7. IMPLICIT REAL*8(A-H,O-Z)
  8. *--------------------------------------------------------------------*
  9. * *
  10. * LECTURE D'UN NOUVEAU MODELE SUR LE FICHIER IORES. *
  11. * *
  12. * Param}tres: *
  13. * *
  14. * IORES Num{ro du fichier de sortie *
  15. * ITLACC Pile contenant les nouveaux MODELEs *
  16. * IMAX1 Nombre de MODELEs dans la pile *
  17. * IFORM Si sauvegarde en format ou non *
  18. * *
  19. * APPEL{ PAR: LIPIL *
  20. * *
  21. * Auteur, date de cr{ation: *
  22. * *
  23. * Denis ROBERT-MOUGIN, le 5 juillet 1989. *
  24. * *
  25. *--------------------------------------------------------------------*
  26. -INC CCOPTIO
  27.  
  28. -INC SMMODEL
  29. -INC SMLMOTS
  30. -INC SMELEME
  31.  
  32. SEGMENT,ITLACC
  33. INTEGER ITLAC(0)
  34. ENDSEGMENT
  35. SEGMENT,MTABE1
  36. INTEGER ITABE1(NM1)
  37. ENDSEGMENT
  38. SEGMENT,MTABE2
  39. CHARACTER*(8) ITABE2(NM2)
  40. ENDSEGMENT
  41. SEGMENT,MTABE3
  42. CHARACTER*(8) ITABE3(NM3)
  43. ENDSEGMENT
  44. SEGMENT,MTABE4
  45. INTEGER ITABE4(NM4)
  46. ENDSEGMENT
  47. SEGMENT,MTABE5
  48. CHARACTER*(8) ITABE5(NM5)
  49. ENDSEGMENT
  50. SEGMENT,MTABE6
  51. CHARACTER*(8) ITABE6(NM6)
  52. ENDSEGMENT
  53. SEGMENT MTAB6B
  54. CHARACTER*(4) ITAB6B(NM6)
  55. ENDSEGMENT
  56. SEGMENT,MTABE7
  57. CHARACTER*(8) ITABE7(NM7)
  58. ENDSEGMENT
  59. SEGMENT,MTABE8
  60. Integer ITABE8(NM7)
  61. ENDSEGMENT
  62. SEGMENT MTABE9
  63. Integer ITABE9(nm9)
  64. ENDSEGMENT
  65. *
  66. INTEGER IDAN(10)
  67. * maj modele externe (visco_externe ou utilisateur)
  68. CHARACTER*16 MOMODL(10)
  69. *
  70. * write(6,*) ' niveau limodl ', niveau
  71. N45=5
  72. IF(NIVEAU.GE.12) N45=6
  73. NIDAN=4
  74. if( niveau.ge.13) nidan = 7
  75. if(niveau.ge.15) nidan=10
  76. IRETOU=0
  77. MN3=0
  78. NM7=0
  79. *
  80. * Boucle sur les MODELEs contenus dans la pile:
  81. *
  82. DO 10 IEL=1,IMAX1
  83. DO 110 INI=1,NIDAN
  84. IDAN(INI) = 0
  85. 110 CONTINUE
  86. CALL LFCDIE(IURES,NIDAN,IDAN,IRETOU,IFORM)
  87. IF(IRETOU.NE.0) RETURN
  88. N1 =IDAN(1)
  89. NM2 =IDAN(2)
  90. NM3 =IDAN(3)
  91. NM4 =IDAN(4)
  92. idecmo=2
  93. NM5 = N1 * idecmo
  94. if(niveau.ge.13) then
  95. nm5=idan(5)
  96. idecmo=0
  97. if (n1.gt.0) idecmo=nm5/n1
  98. n45=idan(6)
  99. nm6=idan(7)
  100. segini mtabe6
  101. segini mtab6b
  102. if(niveau.ge.15) then
  103. nm7=idan(8)
  104. segini mtabe7,mtabe8
  105. endif
  106. endif
  107. *
  108. SEGINI MMODEL
  109. NM1 = N1 * N45
  110. nm9=n1*16
  111. segini,mtabe9
  112. SEGINI,MTABE1
  113. SEGINI,MTABE2
  114. SEGINI,MTABE3
  115. * IF(NIVEAU.GE.4) THEN
  116. SEGINI,MTABE4
  117. SEGINI,MTABE5
  118. * ENDIF
  119. *
  120. CALL LFCDIE(IURES,NM1,ITABE1,IRETOU,IFORM)
  121. if(n45.gt.28) call lfcdie(IURES,NM9,ITABE9,IRETOU,IFORM)
  122. * write(6,*) ' itabe1 '
  123. * write(6,fmt='(10i5)' ) (itabe1(iau),iau=1,nm1)
  124. IF(IRETOU.NE.0) RETURN
  125. * IF(NIVEAU.GE.4) THEN
  126. * write(6,*) 'nm1 nm2 nm3 nm4 nm5 nm6 nm7 '
  127. * write(6,*) nm1, nm2 ,nm3, nm4, nm5, nm6, nm7
  128. CALL LFCDIN(IURES,NM5,ITABE5,IRETOU,IFORM)
  129. IF(IRETOU.NE.0) RETURN
  130. * ENDIF
  131. CALL LFCDIN(IURES,NM2,ITABE2,IRETOU,IFORM)
  132. IF(IRETOU.NE.0) RETURN
  133. CALL LFCDIN(IURES,NM3,ITABE3,IRETOU,IFORM)
  134. IF(IRETOU.NE.0) RETURN
  135. * IF(NIVEAU.GE.4) THEN
  136. CALL LFCDIE(IURES,NM4,ITABE4,IRETOU,IFORM)
  137. IF(IRETOU.NE.0) RETURN
  138. * ENDIF
  139. if(niveau.ge.14) then
  140. call lfcdin(iores,nm6,itabe6,iretou,iform)
  141. IF(IRETOU.NE.0) RETURN
  142. ENDIF
  143. if(niveau.eq.13) then
  144. call lfcden(iores,nm6,itab6b,iretou,iform)
  145. if(iretou.ne.0) return
  146. endif
  147. if(niveau.ge.15.and.nm7.ne.0) then
  148. call LFCDIN(IURES,NM7,ITABE7,IRETOU,IFORM)
  149. * write(6,*) 'nm7 ' , nm7
  150. * write(6,*) 'itabe7 ',( itabe7(iou),iou=1,nm7)
  151. if(iretou.ne.0) return
  152. CALL LFCDIE(IURES,NM7,ITABE8,IRETOU,IFORM)
  153. * write(6,*)'itabe8 ', ( itabe8(iou),iou=1,nm7)
  154. if(iretou.ne.0) return
  155. endif
  156.  
  157. * BOUCLES SUR LES ZONES {L{MENTAIRES DU MODELE:
  158. *
  159. JFOR= 0
  160. * write(6,*) ' N45 ' , n45
  161. JMAT= 0
  162. JINF= 0
  163. JNOMID=0
  164. nparmo=0
  165. jobj=0
  166. nobmod=0
  167. jderiv=0
  168. DO 20 ISOUEL=4/spaj>span style="color: #cc66cc;">1,N1
  169. ISOU = N45 * ( ISOUEL - 1 )
  170. NFOR = ITABE1(ISOU+3)
  171. NMAT = ITABE1(ISOU+4)
  172. if(niveau.ge.13) nparmo= itabe1(isou+10)
  173. if(niveau.ge.15) nobmod = itabe1(isou+11)
  174. if(n45.ge.37) nobmod=itabe1(isou+37)
  175. if(n45.ge.38) then
  176. jderiv=itabe1(isou+38)
  177. else
  178. jderiv=mepsil
  179. endif
  180. IF(NIVEAU.GE.4) MN33 = ITABE1(ISOU+5)
  181. mn3=mn33
  182. if(n45.lt.28) mn3=7
  183. *
  184. * write(6,*) ' nparmo nm3 ', nparmo ,mn3
  185. SEGINI IMODEL
  186. CONMOD=' '
  187. KMODEL(ISOUEL) = IMODEL
  188. IMAMOD = ITABE1(ISOU+1)
  189. NEFMOD = ITABE1(ISOU+2)
  190. IF (NIVEAU.GE.20) THEN
  191. IPDPGE = ITABE1(ISOU+6)
  192. ELSE
  193. * IF (NIVEAU.LE.19) THEN
  194. IPDPGE = 0
  195. IF (NIVEAU.GE.12) THEN
  196. ii_z = ITABE1(ISOU+6)
  197. IF (ii_z.GT.0) THEN
  198. IPT1 = ii_z + NBANC
  199. CALL CRELEM(IPT1)
  200. C On verifie s'il n'a pas deja ete preconditionne.
  201. CALL CRECH1(IPT1,1)
  202. segdes,ipt1
  203. IPDPGE = IPT1
  204. ENDIF
  205. ENDIF
  206. * ENDIF
  207. ENDIF
  208. ideriv=jderiv
  209. * IF(NIVEAU.GE.4) THEN
  210. CONMOD(1:8) = ITABE5(idecmo*(ISOUEL-1)+1)
  211. CONMOD(9:16)= ITABE5(idecmo*(ISOUEL-1)+2)
  212. if(niveau.ge.13) then
  213. if(n45.le.28) then
  214. conmod(17:24)= ITABE5(idecmo*(ISOUEL-1)+3)
  215. llmova= ITABE1(ISOU+7)
  216. llmoma= ITABE1(ISOU+8)
  217. llfama= ITABE1(ISOU+9)
  218. * write(6,*)'llmova llmoma llfama',llmova,llmoma,llfama
  219. else
  220. conmod(17:24)= ITABE5(idecmo*(ISOUEL-1)+3)
  221. cmatee=ITABE5(idecmo*(ISOUEL-1)+4)
  222. imatee=itabe1(isou+7)
  223. inatuu=itabe1(isou+8)
  224. do iyu=1,16
  225. infele(iyu)=itabe9( iyu+(isouel-1)*16)
  226. enddo
  227. endif
  228. endif
  229. *
  230. DO 30 IFOR=1,NFOR
  231. JFOR = JFOR + 1
  232. FORMOD(IFOR)(1:8) = ITABE2(JFOR)
  233. JFOR = JFOR + 1
  234. FORMOD(IFOR)(9:16) = ITABE2(JFOR)
  235. 30 CONTINUE
  236. *
  237. iplu=0
  238. do ioy=1,nfor
  239. if(formod(ioy).eq.'CONVECTION ' ) then
  240. iplu=1
  241. formod(ioy)='THERMIQUE'
  242. endif
  243. enddo
  244. DO 40 IMAT=1,NMAT
  245. JMAT = JMAT + 1
  246. MATMOD(IMAT)(1:8) = ITABE3(JMAT)
  247. JMAT = JMAT + 1
  248. MATMOD(IMAT)(9:16) = ITABE3(JMAT)
  249. 40 CONTINUE
  250. if(iplu.eq.1) then
  251. nmat=nmat+1
  252. segadj imodel
  253. matmod(nmat)='CONVECTION '
  254. endif
  255. *
  256. * IF(NIVEAU.GE.4) THEN
  257. DO 50 IMN3=1,MN33
  258. JINF = JINF + 1
  259. INFMOD(IMN3) = ITABE4(JINF)
  260. 50 CONTINUE
  261. * write(6,*) ' nm3infmod', mn3,(infmod(iou),iou=1,mn3)
  262. * ENDIF
  263. if ( niveau.ge.13) then
  264. if(n45.le.28) then
  265. lmotva=0
  266. lmotma=0
  267. lmotmf=0
  268. lmotpa=0
  269. jgn=4
  270. jgm=llmova
  271. nbrobl=llmova
  272. nbrfac=0
  273. if(nbrobl.ne.0) then
  274. segini mlmots
  275. lmotva=mlmots
  276. do inm6=1,nbrobl
  277. jnomid=jnomid+1
  278. * write(6,*) ' jnomid1' , jnomid
  279. mots(inm6)=itabe6(jnomid)
  280. enddo
  281. endif
  282. nbrobl=llmoma
  283. nbrfac=llfama
  284. if(nbrobl.ne.0) then
  285. jgm=nbrobl
  286. segini mlmots
  287. lmotma=mlmots
  288. do inm6=1,nbrobl
  289. jnomid=jnomid+1
  290. * write(6,*) ' jnomid2 ' , jnomid
  291. mots(inm6)=itabe6(jnomid)
  292. enddo
  293. endif
  294. if(nbrfac.ne.0) then
  295. jgm=nbrfac
  296. segini mlmots
  297. lmotmf=mlmots
  298. do inm6=1,nbrfac
  299. jnomid=jnomid+1
  300. * write(6,*) ' jnomid3 ' , jnomid
  301. mots(inm6)=itabe6(jnomid)
  302. enddo
  303. endif
  304. if(nparmo.ne.0) then
  305. jgm=nparmo
  306. segini mlmots
  307. lmotpa=mlmots
  308. do inm6=1,nparmo
  309. jnomid=jnomid+1
  310. mots(inm6)=itabe6(jnomid)
  311. enddo
  312. endif
  313. IF (FORMOD(1).NE.'NAVIER_STOKES'.AND.FORMOD(1).NE.'EULER') THEN
  314. call inomid(imodel,' ',iret,lmotva,lmotma,
  315. $ lmotmf,lmotpa)
  316. ENDIF
  317. IF(FORMOD(1).EQ.'MECANIQUE'.or.formod(1).eq.'POREUX'.or.
  318. $ FORMOD(1).EQ.'DIFFUSION'.or.formod(1).eq.'ELECTROSTATIQUE'.or.
  319. $ formod(/2).eq.2) then
  320. call prquoi(imodel)
  321. ENDIF
  322. else
  323. do iou=1,14
  324. nbrobl=itabe1(isou+7+2*iou)
  325. nbrfac=itabe1(isou+8+2*iou)
  326. if(nbrobl+nbrfac.ne.0) then
  327. segini nomid
  328. lnomid(iou)=nomid
  329. do iyto=1,nbrobl
  330. jnomid=jnomid+1
  331. lesobl(iyto)=itabe6(jnomid)
  332. enddo
  333. do iyto=1,nbrfac
  334. jnomid=jnomid+1
  335. lesfac(iyto)=itabe6(jnomid)
  336. enddo
  337. segdes nomid
  338. endif
  339. enddo
  340. endif
  341. endif
  342. if(niveau.ge.15) then
  343. * write(6,*) ' nobmod job' , nobmod,jobj
  344. do 15 ihy = 1, nobmod
  345. jobj=jobj+1
  346. tymode(ihy)=itabe7(jobj)
  347. ivamod(ihy)=itabe8(jobj)
  348. 15 continue
  349. endif
  350. *Petite modification en cas de modele externe :
  351. if (formod(/2).eq.1) then
  352. if (formod(1).EQ.'MECANIQUE' .OR.
  353. & formod(1).EQ.'POREUX') then
  354. if (inatuu.ge.0) goto 200
  355. iumat = 0
  356. ivisc = 0
  357. iviex = 0
  358. do i = 1, nmat
  359. if (matmod(i).EQ.'NON_LINEAIRE') iumat = i
  360. if (matmod(i).EQ.'VISCO_EXTERNE') ivisc = i
  361. enddo
  362. if (iumat.ne.0) then
  363. if (matmod(iumat+1).ne.'UTILISATEUR') then
  364. write(ioimp,*) 'maj modele umat incorrect'
  365. call erreur(5)
  366. return
  367. endif
  368. inatuu = -1
  369. endif
  370. if (ivisc.ne.0) then
  371. if (inatuu.eq.-2) goto 200
  372. c* mise a jour du modele
  373. call modvix(momodl,nmod)
  374. call place(momodl,nmod,iviex,matmod(ivisc+1))
  375. if (iviex.eq.0) then
  376. write(ioimp,*) 'MAJ modele iviex incorrect'
  377. call erreur(5)
  378. return
  379. endif
  380. inatuu = -2
  381. nobmod = nobmod + 1
  382. segadj,imodel
  383. tymode(nobmod+1)='IVIEX '
  384. ivamod(nobmod+1)=iviex
  385. endif
  386. 200 continue
  387. endif
  388. endif
  389. *Petite verification en diffusion
  390. if (formod(1).eq.'DIFFUSION') then
  391. if (niveau.lt.17) then
  392. write(ioimp,*) 'Incompatibilite de niveau !'
  393. call erreur(5)
  394. endif
  395. *gounand: au-dessus du niveau 18, les noms d'inconnues lnomdd et lnomdu
  396. * sont sauvegardes
  397. if (niveau.le.18) call vermdi(tymode(1),tymode(2))
  398. if (ierr.ne.0) then
  399. write(ioimp,*) 'Revoir votre mise en donnees !'
  400. call erreur(5)
  401. endif
  402. endif
  403. *
  404. SEGDES IMODEL
  405. 20 CONTINUE
  406. *
  407. SEGSUP,MTABE1,MTABE2,MTABE3
  408. IF(NIVEAU.GE.4) THEN
  409. SEGSUP,MTABE4,MTABE5
  410. ENDIF
  411. if(niveau.ge.14)segsup mtabe6
  412. if(niveau.ge.13) segsup mtab6b
  413. if(niveau.ge.15) segsup mtabe7,mtabe8
  414. SEGDES MMODEL
  415. ITLAC(**) = MMODEL
  416. *
  417. 10 CONTINUE
  418. *
  419. RETURN
  420. END
  421.  
  422.  
  423.  
  424.  

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