Télécharger liimod.eso

Retour à la liste

Numérotation des lignes :

liimod
  1. C LIIMOD SOURCE MB234859 25/09/08 21:15:48 12358
  2.  
  3. *----------------------------------------------------------------------*
  4. * LECTURE D'UN SOUS-MODELE (TYPE IMODEL) SUR LE FICHIER IURES *
  5. * *
  6. * Parametres: *
  7. * *
  8. * IURES Numero du fichier de sortie *
  9. * ITLACC Pile contenant les sous-modeles IMODEL *
  10. * IFIN Nombre de IMODELs dans la pile *
  11. * IFORM Si sauvegarde en format ou non *
  12. * *
  13. * APPELE PAR : LIPIL *
  14. *----------------------------------------------------------------------*
  15. SUBROUTINE LIIMOD(IURES,ITLACC,IFIN,IRETOU,IFORM)
  16.  
  17. IMPLICIT INTEGER(I-N)
  18. IMPLICIT REAL*8 (A-H,O-Z)
  19.  
  20. -INC PPARAM
  21. -INC CCOPTIO
  22. -INC CCFXDR
  23.  
  24. c-dbgC==DEB= FORMULATION HHO == INCLUDE =====================================
  25. c-dbg-INC CCHHOPA
  26. c-dbgC==FIN= FORMULATION HHO ================================================
  27.  
  28. -INC SMMODEL
  29.  
  30. SEGMENT,ITLACC
  31. INTEGER ITLAC(0)
  32. ENDSEGMENT
  33.  
  34. SEGMENT,MTABEI
  35. INTEGER ITABEI(NMI)
  36. ENDSEGMENT
  37. SEGMENT,MTABEC
  38. CHARACTER*(8) ITABEC(NMC)
  39. ENDSEGMENT
  40.  
  41. INTEGER IDAN(10)
  42. CHARACTER*16 MOMODL(10)
  43.  
  44. IRETOU = 0
  45.  
  46. iimpil = IIMPI
  47. c-dbg iimpil = 1972
  48.  
  49. N45 = 38
  50. idecmo = 4
  51.  
  52. NIDAN = 10
  53. DO in = 1, 10
  54. IDAN(in) = 0
  55. ENDDO
  56.  
  57. * ------------------------------------------------
  58. * (0.1) PreDimensionnement des tableaux de lecture
  59. * ------------------------------------------------
  60. * Rappel : un CHARACTER*16 est decompose en deux CHARACTER*8
  61. NM1 = N45
  62. NM2 = 2 * 5
  63. NM3 = 2 * 10
  64. NM4 = 20
  65. NM5 = idecmo
  66. NM6 = 500
  67. NM7 = 10
  68. NM9 = 16
  69.  
  70. NMI = NM1 + NM4 + NM7 + NM9
  71. NMC = NM2 + NM3 + NM5 + NM6 + NM7
  72.  
  73. * Tableaux MTABEI et MTABEC (faire un ajustement si besoin) :
  74. SEGINI,MTABEI,MTABEC
  75.  
  76. * --------
  77. * BOUCLE SUR LES IMODELs :
  78. * --------
  79. c-dbg imHHO = 0
  80.  
  81. DO IEL = 1, IFIN
  82.  
  83. * ------------------------------------------------------
  84. * (10.1) Lecture des donnes de dimensionnement du IMODEL
  85. * ------------------------------------------------------
  86. IRETOU = 0
  87. CALL LFCDIE(IURES,NIDAN,IDAN,IRETOU,IFORM)
  88. if (iimpil.eq.1972) then
  89. write(ioimp,*) 'LIIMO : IDAN'
  90. write(ioimp,fmt='(10i5)') (idan(in),in=1,nidan)
  91. endif
  92. IF (IRETOU.NE.0) RETURN
  93.  
  94. imNM1 = IDAN( 1)
  95. NFOR = IDAN( 2)
  96. NMAT = IDAN( 3)
  97. MN3lu = IDAN( 4)
  98. MN3 = MAX(MN3lu,12)
  99. imNM5 = IDAN( 5)
  100. imNM6 = IDAN( 6)
  101. NOBMOD = IDAN( 7)
  102. imNMI = IDAN( 9)
  103. imNMC = IDAN(10)
  104.  
  105. if (imNM1.NE.NM1) then
  106. write(ioimp,*) 'LIIMOD : incompatibilite imNM1',imNM1,NM1
  107. call erreur(5)
  108. endif
  109. if (imNM5.NE.NM5) then
  110. write(ioimp,*) 'LIIMOD : incompatibilite imNM5',imNM5,NM5
  111. call erreur(5)
  112. endif
  113. if (MN3lu.lt.1) then
  114. write(ioimp,*) 'LIIMOD : incompatibilite MN3',MN3lu,'<1'
  115. call erreur(5)
  116. endif
  117.  
  118. imNM2 = 2 * NFOR
  119. imNM3 = 2 * NMAT
  120. imNM4 = MN3lu
  121. imNM7 = NOBMOD
  122. imNM9 = NM9
  123.  
  124. jnNMI = imNM1 + imNM4 + imNM7 + imNM9
  125. jnNMC = imNM2 + imNM3 + imNM5 + imNM6 + imNM7
  126. if (imNMI.NE.jnNMI) then
  127. write(ioimp,*) 'LIIMOD : incompatibilite imNMI',imNMI,jnNMI
  128. call erreur(5)
  129. endif
  130. if (imNMC.NE.jnNMC) then
  131. write(ioimp,*) 'LIIMOD : incompatibilite imNMC',imNMC,jnNMC
  132. call erreur(5)
  133. endif
  134.  
  135. * Ajustement des tableaux MTAB* si besoin :
  136. IF (imNMI.GT.NMI) THEN
  137. write(ioimp,*) 'LIIMOD ajustement MTABEI',NMI,imNMI
  138. NMI = imNMI
  139. SEGADJ,MTABEI
  140. ENDIF
  141. IF (imNMC.GT.NMC) THEN
  142. write(ioimp,*) 'LIIMOD ajustement MTABEC',NMC,imNMC
  143. NMC = imNMC
  144. SEGADJ,MTABEC
  145. ENDIF
  146. * ---------------------------------------------
  147. * (10.2) Lecture des donnees du IMODEL
  148. * ---------------------------------------------
  149. IRETOU = 0
  150. CALL LFCDIE(IURES,imNMI,ITABEI,IRETOU,IFORM)
  151. IF (IRETOU.NE.0) RETURN
  152. IRETOU = 0
  153. CALL LFCDIN(IURES,imNMC,ITABEC,IRETOU,IFORM)
  154. IF (IRETOU.NE.0) RETURN
  155.  
  156. * ----------------------------------------------
  157. * (10.3) Iniitalisation et remplissage du IMODEL
  158. * ----------------------------------------------
  159. SEGINI,IMODEL
  160.  
  161. jnNMI = 0
  162. jnNMC = 0
  163.  
  164. imodel.IMAMOD = ITABEI( jnNMI + 1 )
  165. imodel.NEFMOD = ITABEI( jnNMI + 2 )
  166. imodel.IPDPGE = ITABEI( jnNMI + 6 )
  167. imodel.IMATEE = ITABEI( jnNMI + 7 )
  168. imodel.INATUU = ITABEI( jnNMI + 8 )
  169. imodel.IDERIV = ITABEI( jnNMI + 38 )
  170.  
  171. c* Lecture de la FORMULATION (FORMOD et MATMOD) :
  172. jin = jnNMC
  173. DO in = 1, NFOR
  174. jin = jin + 1
  175. imodel.FORMOD(in)(1: 8) = ITABEC( jin )
  176. jin = jin + 1
  177. imodel.FORMOD(in)(9:16) = ITABEC( jin )
  178. ENDDO
  179. jnNMC = jnNMC + imNM2
  180. c*dbg write(6,*) ' ',jnNMI,jnNMC,0,imNM2
  181. jin = jnNMC
  182. DO in = 1, NMAT
  183. jin = jin + 1
  184. imodel.MATMOD(in)(1: 8) = ITABEC( jin )
  185. jin = jin + 1
  186. imodel.MATMOD(in)(9:16) = ITABEC( jin )
  187. ENDDO
  188. jnNMC = jnNMC + imNM3
  189. c*dbg write(6,*) ' ',jnNMI,jnNMC,0,imNM3
  190.  
  191. c* Lecture du constituant et de la phase :
  192. imodel.CONMOD = ' '
  193. imodel.CONMOD( 1: 8) = ITABEC( jnNMC + 1 )
  194. imodel.CONMOD( 9:16) = ITABEC( jnNMC + 2 )
  195. imodel.CONMOD(17:24) = ITABEC( jnNMC + 3 )
  196. imodel.CMATEE = ITABEC( jnNMC + 4 )
  197. jnNMC = jnNMC + imNM5
  198. c*dbg write(6,*) ' ',jnNMI,jnNMC,0,imNM5
  199. CALL PRQUOI(IMODEL)
  200.  
  201. c* Lecture des NOMID :
  202. jin = jnNMC
  203. DO in = 1, 14
  204. nbrobl = ITABEI( jnNMI + 7 + 2*in )
  205. nbrfac = ITABEI( jnNMI + 8 + 2*in )
  206. IF (nbrobl+nbrfac.NE.0) THEN
  207. SEGINI,nomid
  208. DO it = 1, nbrobl
  209. jin = jin + 1
  210. nomid.lesobl(it) = ITABEC( jin )
  211. ENDDO
  212. DO it = 1, nbrfac
  213. jin = jin + 1
  214. nomid.lesfac(it) = ITABEC( jin )
  215. ENDDO
  216. imodel.LNOMID(in) = nomid
  217. SEGDES,nomid
  218. ENDIF
  219. ENDDO
  220. jnNMI = jnNMI + imNM1
  221. jnNMC = jnNMC + imNM6
  222. c*dbg write(ioimp,*) ' ',jnNMI,jnNMC,imNM1,imNM6
  223.  
  224. c* Lecture de INFMOD :
  225. DO in = 1, MN3lu
  226. imodel.INFMOD(in) = ITABEI( jnNMI + in )
  227. ENDDO
  228. jnNMI = jnNMI + imNM4
  229. c*dbg write(6,*) ' ',jnNMI,jnNMC,imNM4,0
  230.  
  231. DO in = 1, NOBMOD
  232. imodel.TYMODE(in) = ITABEC( jnNMC + in )
  233. imodel.IVAMOD(in) = ITABEI( jnNMI + in )
  234. ENDDO
  235. jnNMI = jnNMI + imNM7
  236. jnNMC = jnNMC + imNM7
  237. c*dbg write(ioimp,*) ' ',jnNMI,jnNMC,imNM7,imNM7
  238.  
  239. DO in = 1, 16
  240. imodel.INFELE(in) = ITABEI( jnNMI + in )
  241. ENDDO
  242. jnNMI = jnNMI + imNM9
  243. c*dbg write(ioimp,*) ' ',jnNMI,jnNMC,imNMI,imNMC
  244.  
  245. c-dbgC==DEB= FORMULATION HHO == Sous-Modele de type HHO =====================
  246. c-dbg IF (imodel.NEFMOD .EQ. HHO_NUM_ELEMENT) imHHO = imHHO + 1
  247. c-dbgC==FIN= FORMULATION HHO ================================================
  248.  
  249. *Petite modification en cas de modele externe :
  250. if (NFOR.eq.1) then
  251. if (imodel.FORMOD(1).eq.'MECANIQUE ' .or.
  252. & imodel.FORMOD(1).eq.'POREUX ') then
  253. if (imodel.INATUU.GE.0) goto 200
  254. iumat = 0
  255. ivisc = 0
  256. iviex = 0
  257. do in = 1, NMAT
  258. if (matmod(in).eq.'NON_LINEAIRE ') iumat = in
  259. if (matmod(in).eq.'VISCO_EXTERNE ') ivisc = in
  260. enddo
  261. if (iumat.ne.0) then
  262. if (matmod(iumat+1).ne.'UTILISATEUR ') then
  263. write(ioimp,*) 'maj modele umat incorrect'
  264. call erreur(5)
  265. return
  266. endif
  267. imodel.INATUU = -1
  268. endif
  269. if (ivisc.ne.0) then
  270. if (imodel.INATUU.eq.-2) goto 200
  271. c* mise a jour du modele
  272. CALL MODVIX(momodl,nmod)
  273. CALL PLACE(momodl,nmod,iviex,matmod(ivisc+1))
  274. if (iviex.eq.0) then
  275. write(ioimp,*) 'MAJ modele IVIEX incorrect'
  276. call erreur(5)
  277. return
  278. endif
  279. imodel.INATUU = -2
  280. NOBMOD = NOBMOD + 1
  281. SEGADJ,imodel
  282. imodel.TYMODE(NOBMOD+1) = 'IVIEX '
  283. imodel.IVAMOD(NOBMOD+1) = iviex
  284. endif
  285. 200 continue
  286. endif
  287. endif
  288.  
  289. c* Cas particuliers ne devant plus arriver a ce niveau :
  290. do in = 1, NFOR
  291. if (imodel.FORMOD(in).eq.'CONVECTION ' ) then
  292. write(ioimp,*) 'Formulation CONVECTION lue !!!'
  293. write(ioimp,*) 'Incompatible avec niveau < 25'
  294. call erreur(5)
  295. endif
  296. if (imodel.FORMOD(in).eq.'RAYONNEMENT ' ) then
  297. write(ioimp,*) 'Formulation RAYONNEMENT lue !!!'
  298. write(ioimp,*) 'Incompatible avec niveau < 25'
  299. call erreur(5)
  300. endif
  301. enddo
  302.  
  303. SEGDES,IMODEL
  304. ITLAC(**) = IMODEL
  305.  
  306. ENDDO
  307.  
  308. * --------------------------------------------
  309. * (0.2) Suppression des segments de sauvegarde
  310. * --------------------------------------------
  311. SEGSUP,MTABEI,MTABEC
  312.  
  313. c-dbgC==DEB= FORMULATION HHO ================================================
  314. c-dbg CALL HHOPIL(2,imHHO,imHHO)
  315. c-dbgC==FIN= FORMULATION HHO ================================================
  316.  
  317. c RETURN
  318. END
  319.  
  320.  
  321.  
  322.  

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