Télécharger liimod.eso

Retour à la liste

Numérotation des lignes :

liimod
  1. C LIIMOD SOURCE OF166741 24/12/18 21:15:19 12092
  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. MN3 = IDAN( 4)
  98. imNM5 = IDAN( 5)
  99. imNM6 = IDAN( 6)
  100. NOBMOD = IDAN( 7)
  101. imNMI = IDAN( 9)
  102. imNMC = IDAN(10)
  103.  
  104. if (imNM1.NE.NM1) then
  105. write(ioimp,*) 'LIIMOD : incompatibilite imNM1',imNM1,NM1
  106. call erreur(5)
  107. endif
  108. if (imNM5.NE.NM5) then
  109. write(ioimp,*) 'LIIMOD : incompatibilite imNM5',imNM5,NM5
  110. call erreur(5)
  111. endif
  112. if (MN3.lt.1) then
  113. write(ioimp,*) 'LIIMOD : incompatibilite MN3',MN3,'<1'
  114. call erreur(5)
  115. endif
  116.  
  117. imNM2 = 2 * NFOR
  118. imNM3 = 2 * NMAT
  119. imNM4 = MN3
  120. imNM7 = NOBMOD
  121. imNM9 = NM9
  122.  
  123. jnNMI = imNM1 + imNM4 + imNM7 + imNM9
  124. jnNMC = imNM2 + imNM3 + imNM5 + imNM6 + imNM7
  125. if (imNMI.NE.jnNMI) then
  126. write(ioimp,*) 'LIIMOD : incompatibilite imNMI',imNMI,jnNMI
  127. call erreur(5)
  128. endif
  129. if (imNMC.NE.jnNMC) then
  130. write(ioimp,*) 'LIIMOD : incompatibilite imNMC',imNMC,jnNMC
  131. call erreur(5)
  132. endif
  133.  
  134. * Ajustement des tableaux MTAB* si besoin :
  135. IF (imNMI.GT.NMI) THEN
  136. write(ioimp,*) 'LIIMOD ajustement MTABEI',NMI,imNMI
  137. NMI = imNMI
  138. SEGADJ,MTABEI
  139. ENDIF
  140. IF (imNMC.GT.NMC) THEN
  141. write(ioimp,*) 'LIIMOD ajustement MTABEC',NMC,imNMC
  142. NMC = imNMC
  143. SEGADJ,MTABEC
  144. ENDIF
  145. * ---------------------------------------------
  146. * (10.2) Lecture des donnees du IMODEL
  147. * ---------------------------------------------
  148. IRETOU = 0
  149. CALL LFCDIE(IURES,imNMI,ITABEI,IRETOU,IFORM)
  150. IF (IRETOU.NE.0) RETURN
  151. IRETOU = 0
  152. CALL LFCDIN(IURES,imNMC,ITABEC,IRETOU,IFORM)
  153. IF (IRETOU.NE.0) RETURN
  154.  
  155. * ----------------------------------------------
  156. * (10.3) Iniitalisation et remplissage du IMODEL
  157. * ----------------------------------------------
  158. SEGINI,IMODEL
  159.  
  160. jnNMI = 0
  161. jnNMC = 0
  162.  
  163. imodel.IMAMOD = ITABEI( jnNMI + 1 )
  164. imodel.NEFMOD = ITABEI( jnNMI + 2 )
  165. imodel.IPDPGE = ITABEI( jnNMI + 6 )
  166. imodel.IMATEE = ITABEI( jnNMI + 7 )
  167. imodel.INATUU = ITABEI( jnNMI + 8 )
  168. imodel.IDERIV = ITABEI( jnNMI + 38 )
  169.  
  170. c* Lecture de la FORMULATION (FORMOD et MATMOD) :
  171. jin = jnNMC
  172. DO in = 1, NFOR
  173. jin = jin + 1
  174. imodel.FORMOD(in)(1: 8) = ITABEC( jin )
  175. jin = jin + 1
  176. imodel.FORMOD(in)(9:16) = ITABEC( jin )
  177. ENDDO
  178. jnNMC = jnNMC + imNM2
  179. c*dbg write(6,*) ' ',jnNMI,jnNMC,0,imNM2
  180. jin = jnNMC
  181. DO in = 1, NMAT
  182. jin = jin + 1
  183. imodel.MATMOD(in)(1: 8) = ITABEC( jin )
  184. jin = jin + 1
  185. imodel.MATMOD(in)(9:16) = ITABEC( jin )
  186. ENDDO
  187. jnNMC = jnNMC + imNM3
  188. c*dbg write(6,*) ' ',jnNMI,jnNMC,0,imNM3
  189.  
  190. c* Lecture du constituant et de la phase :
  191. imodel.CONMOD = ' '
  192. imodel.CONMOD( 1: 8) = ITABEC( jnNMC + 1 )
  193. imodel.CONMOD( 9:16) = ITABEC( jnNMC + 2 )
  194. imodel.CONMOD(17:24) = ITABEC( jnNMC + 3 )
  195. imodel.CMATEE = ITABEC( jnNMC + 4 )
  196. jnNMC = jnNMC + imNM5
  197. c*dbg write(6,*) ' ',jnNMI,jnNMC,0,imNM5
  198.  
  199. c* Lecture des NOMID :
  200. jin = jnNMC
  201. DO in = 1, 14
  202. nbrobl = ITABEI( jnNMI + 7 + 2*in )
  203. nbrfac = ITABEI( jnNMI + 8 + 2*in )
  204. IF (nbrobl+nbrfac.NE.0) THEN
  205. SEGINI,nomid
  206. DO it = 1, nbrobl
  207. jin = jin + 1
  208. nomid.lesobl(it) = ITABEC( jin )
  209. ENDDO
  210. DO it = 1, nbrfac
  211. jin = jin + 1
  212. nomid.lesfac(it) = ITABEC( jin )
  213. ENDDO
  214. imodel.LNOMID(in) = nomid
  215. SEGDES,nomid
  216. ENDIF
  217. ENDDO
  218. jnNMI = jnNMI + imNM1
  219. jnNMC = jnNMC + imNM6
  220. c*dbg write(ioimp,*) ' ',jnNMI,jnNMC,imNM1,imNM6
  221.  
  222. c* Lecture de INFMOD :
  223. DO in = 1, MN3
  224. imodel.INFMOD(in) = ITABEI( jnNMI + in )
  225. ENDDO
  226. jnNMI = jnNMI + imNM4
  227. c*dbg write(6,*) ' ',jnNMI,jnNMC,imNM4,0
  228.  
  229. DO in = 1, NOBMOD
  230. imodel.TYMODE(in) = ITABEC( jnNMC + in )
  231. imodel.IVAMOD(in) = ITABEI( jnNMI + in )
  232. ENDDO
  233. jnNMI = jnNMI + imNM7
  234. jnNMC = jnNMC + imNM7
  235. c*dbg write(ioimp,*) ' ',jnNMI,jnNMC,imNM7,imNM7
  236.  
  237. DO in = 1, 16
  238. imodel.INFELE(in) = ITABEI( jnNMI + in )
  239. ENDDO
  240. jnNMI = jnNMI + imNM9
  241. c*dbg write(ioimp,*) ' ',jnNMI,jnNMC,imNMI,imNMC
  242.  
  243. c-dbgC==DEB= FORMULATION HHO == Sous-Modele de type HHO =====================
  244. c-dbg IF (imodel.NEFMOD .EQ. HHO_NUM_ELEMENT) imHHO = imHHO + 1
  245. c-dbgC==FIN= FORMULATION HHO ================================================
  246.  
  247. *Petite modification en cas de modele externe :
  248. if (NFOR.eq.1) then
  249. if (imodel.FORMOD(1).eq.'MECANIQUE ' .or.
  250. & imodel.FORMOD(1).eq.'POREUX ') then
  251. if (imodel.INATUU.GE.0) goto 200
  252. iumat = 0
  253. ivisc = 0
  254. iviex = 0
  255. do in = 1, NMAT
  256. if (matmod(in).eq.'NON_LINEAIRE ') iumat = in
  257. if (matmod(in).eq.'VISCO_EXTERNE ') ivisc = in
  258. enddo
  259. if (iumat.ne.0) then
  260. if (matmod(iumat+1).ne.'UTILISATEUR ') then
  261. write(ioimp,*) 'maj modele umat incorrect'
  262. call erreur(5)
  263. return
  264. endif
  265. imodel.INATUU = -1
  266. endif
  267. if (ivisc.ne.0) then
  268. if (imodel.INATUU.eq.-2) goto 200
  269. c* mise a jour du modele
  270. CALL MODVIX(momodl,nmod)
  271. CALL PLACE(momodl,nmod,iviex,matmod(ivisc+1))
  272. if (iviex.eq.0) then
  273. write(ioimp,*) 'MAJ modele IVIEX incorrect'
  274. call erreur(5)
  275. return
  276. endif
  277. imodel.INATUU = -2
  278. NOBMOD = NOBMOD + 1
  279. SEGADJ,imodel
  280. imodel.TYMODE(NOBMOD+1) = 'IVIEX '
  281. imodel.IVAMOD(NOBMOD+1) = iviex
  282. endif
  283. 200 continue
  284. endif
  285. endif
  286.  
  287. c* Cas particuliers ne devant plus arriver a ce niveau :
  288. do in = 1, NFOR
  289. if (imodel.FORMOD(in).eq.'CONVECTION ' ) then
  290. write(ioimp,*) 'Formulation CONVECTION lue !!!'
  291. write(ioimp,*) 'Incompatible avec niveau < 25'
  292. call erreur(5)
  293. endif
  294. if (imodel.FORMOD(in).eq.'RAYONNEMENT ' ) then
  295. write(ioimp,*) 'Formulation RAYONNEMENT lue !!!'
  296. write(ioimp,*) 'Incompatible avec niveau < 25'
  297. call erreur(5)
  298. endif
  299. enddo
  300.  
  301. SEGDES,IMODEL
  302. ITLAC(**) = IMODEL
  303.  
  304. ENDDO
  305.  
  306. * --------------------------------------------
  307. * (0.2) Suppression des segments de sauvegarde
  308. * --------------------------------------------
  309. SEGSUP,MTABEI,MTABEC
  310.  
  311. c-dbgC==DEB= FORMULATION HHO ================================================
  312. c-dbg CALL HHOPIL(2,imHHO,imHHO)
  313. c-dbgC==FIN= FORMULATION HHO ================================================
  314.  
  315. c RETURN
  316. END
  317.  
  318.  
  319.  

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