Télécharger limodl.eso

Retour à la liste

Numérotation des lignes :

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

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