Télécharger modext.eso

Retour à la liste

Numérotation des lignes :

modext
  1. C MODEXT SOURCE MB234859 25/08/26 21:15:15 12343
  2. C----------------------------------------------------------------------C
  3. C Subroutine qui acquiert les informations propres aux lois externes C
  4. C C
  5. C Sortie : C
  6. C -------- C
  7. C MOTPRO : Nom de la loi utilisateur qui apparait dans IMODEL C
  8. C LUPARX : Parametres externes de la loi (PARA_LOI) C
  9. C LUCMAT : Composantes materiau de la loi (C_MATERIAU) C
  10. C LUCVAR : Variables internes de la loi (C_VARINTER) C
  11. C LMOLOI : Numero de loi (voir LEXTOP) C
  12. C LMOPTR : Pointeur sur la loi (voir LEXTOP) C
  13. C LMOLIB : Nom de la bilbiotheque (LIB_LOI) C
  14. C LMOLGB : Taille du nom LMOLIB C
  15. C LMOFCT : Nom de la fonction dans la bibliotheque C
  16. C LMOLGT : Taille du nom LMOFCT (FCT_LOI) C
  17. C C
  18. C----------------------------------------------------------------------C
  19. SUBROUTINE MODEXT(MOTPRO,LUPARX,LUCMAT,LUCVAR,
  20. & LMOLOI,LMOPTR,LMOLIB,LMOLGB,LMOFCT,LMOLGT)
  21. C
  22. IMPLICIT INTEGER(I-N)
  23. IMPLICIT REAL*8(A-H,O-Z)
  24. C
  25. -INC PPARAM
  26. -INC CCOPTIO
  27. -INC SMLMOTS
  28. C
  29. SEGMENT LIMODE(0)
  30. EXTERNAL LONG
  31. PARAMETER (NBEXT=7)
  32. CHARACTER*4 MOEXT(NBEXT)
  33. CHARACTER*8 PAR1
  34. CHARACTER*16 LMONOM,MOTPRO
  35. CHARACTER*(LOCHAI) MOTEMP,LMOLIB,LMOFCT
  36. DATA MOEXT / 'NUME','NOM_','PARA','C_MA','C_VA','LIB_','FCT_' /
  37. C
  38. LMONUM = 0
  39. MOTPRO = ' '
  40. LUPARX = 0
  41. LUCMAT = 0
  42. LUOVAR = 0
  43. LMOLOI = 0
  44. LMOPTR = 0
  45. LMOLIB = ' '
  46. LMOLGB = 0
  47. LMOFCT = ' '
  48. LMOLGT = 0
  49. LMONOM = ' '
  50. C ==================================================================
  51. C Acquisition des couples mots-cles/valeurs
  52. C ==================================================================
  53. 10 CONTINUE
  54. CALL LIRMOT(MOEXT,NBEXT,LEXT,0)
  55. IF (LEXT.EQ.0) GOTO 11
  56. C
  57. C Lecture d'un entier sous 'NUME_LOI'
  58. IF (LEXT.EQ.1) THEN
  59. CALL LIRENT(LMONUM,1,IRET)
  60. IF (IERR.NE.0) RETURN
  61. C Valeur illicite du numero de la loi (superieur ou egal a 1)
  62. IF (LMONUM.LT.1 .OR. LMONUM.GE.1000000) THEN
  63. INTERR(1) = LMONUM
  64. CALL ERREUR(36)
  65. CALL ERREUR(947)
  66. RETURN
  67. ENDIF
  68. C
  69. C Lecture du nom de la loi sous 'NOM_LOI'
  70. ELSE IF (LEXT.EQ.2) THEN
  71. MOTEMP = ' '
  72. CALL LIRCHA(MOTEMP,1,IRET)
  73. IF (IERR.NE.0) RETURN
  74. IRET = LONG(MOTEMP(1:IRET))
  75. IF (IRET.GT.16) THEN
  76. INTERR(1) = IRET
  77. MOTERR = MOTEMP(1:IRET)
  78. CALL ERREUR(-2)
  79. CALL ERREUR(21)
  80. RETURN
  81. ELSE IF (IRET.LE.0) THEN
  82. INTERR(1) = 0
  83. MOTERR = 'NOM_LOI'
  84. CALL ERREUR(-2)
  85. CALL ERREUR(6)
  86. RETURN
  87. ENDIF
  88. LMONOM(1:IRET) = MOTEMP(1:IRET)
  89. C
  90. C Lecture d'un objet LISTMOTS sous 'PARA_LOI'
  91. ELSE IF (LEXT.EQ.3) THEN
  92. CALL LIROBJ('LISTMOTS',LUPARX,1,IRET)
  93. IF (IERR.NE.0) RETURN
  94. C
  95. C Lecture d'un objet LISTMOTS sous 'C_MATERIAU'
  96. ELSE IF (LEXT.EQ.4) THEN
  97. CALL LIROBJ('LISTMOTS',LUCMAT,1,IRET)
  98. IF (IERR.NE.0) RETURN
  99. C
  100. C Lecture d'un objet LISTMOTS sous 'C_VARINTER'
  101. ELSE IF (LEXT.EQ.5) THEN
  102. CALL LIROBJ('LISTMOTS',LUCVAR,1,IRET)
  103. IF (IERR.NE.0) RETURN
  104. C
  105. C Lecture du nom (du fichier) de la bibliotheque de la loi
  106. ELSE IF (LEXT.EQ.6) THEN
  107. MOTEMP = ' '
  108. CALL LIRCHA(MOTEMP,1,IRET)
  109. IF (IERR.NE.0) RETURN
  110. IF (IRET.GT.LOCHAI) THEN
  111. CALL ERREUR(1110)
  112. RETURN
  113. ENDIF
  114. IRET = LONG(MOTEMP(1:IRET))
  115. IF (IRET.LE.0) THEN
  116. INTERR(1) = 0
  117. MOTERR = 'LIB_LOI'
  118. CALL ERREUR(-2)
  119. CALL ERREUR(6)
  120. RETURN
  121. ENDIF
  122. LMOLIB(1:IRET) = MOTEMP(1:IRET)
  123. LMOLGB = IRET
  124. LMOPTR = IRET
  125. C
  126. C Lecture du nom de la fonction de la loi
  127. ELSE IF (LEXT.EQ.7) THEN
  128. MOTEMP = ' '
  129. CALL LIRCHA(MOTEMP,1,IRET)
  130. IF (IERR.NE.0) RETURN
  131. IF (IRET.GT.LOCHAI) THEN
  132. CALL ERREUR(1110)
  133. RETURN
  134. ENDIF
  135. IRET = LONG(MOTEMP(1:IRET))
  136. IF (IRET.LE.0) THEN
  137. INTERR(1) = 0
  138. MOTERR = 'FCT_LOI'
  139. CALL ERREUR(-2)
  140. CALL ERREUR(6)
  141. RETURN
  142. ENDIF
  143. LMOFCT(1:IRET) = MOTEMP(1:IRET)
  144. LMOLGT = IRET
  145. ENDIF
  146. C
  147. GOTO 10
  148. 11 CONTINUE
  149. C ==================================================================
  150. C Verification des donnees
  151. C ==================================================================
  152. C Il manque 'NUME_LOI' ou 'NOM_LOI' (toujours obligatoire)
  153. IF (LMONUM.EQ.0 .AND. LMONOM.EQ.' ') THEN
  154. IF (LMOLGT.EQ.0) THEN
  155. CALL ERREUR(641)
  156. RETURN
  157. ENDIF
  158. ENDIF
  159. C
  160. IF (LMONUM.NE.0 .AND. LMONOM.NE.' ') THEN
  161. MOTERR(1:16) = 'NUME_LOINOM_LOI '
  162. CALL ERREUR(135)
  163. RETURN
  164. ENDIF
  165. C
  166. C Verifier que les listes de composantes :
  167. C 1/ Ne sont pas vides
  168. C 2/ Ne contiennent pas de redondance
  169. C 3/ La temperature est en tete dans les parametres
  170. DO I =1,3
  171. IF (I.EQ.1) MLMOTS = LUPARX
  172. IF (I.EQ.2) MLMOTS = LUCMAT
  173. IF (I.EQ.3) MLMOTS = LUCVAR
  174. C
  175. IF (MLMOTS.NE.0) THEN
  176. SEGACT,MLMOTS
  177. NBCOMP = MLMOTS.MOTS(/2)
  178. IF (NBCOMP.EQ.0) THEN
  179. CALL ERREUR(964)
  180. RETURN
  181. ENDIF
  182. C
  183. IF (I.GT.1) THEN
  184. C
  185. DO IP = 1, NBCOMP
  186. IF (MOTS(IP).EQ.'T ') THEN
  187. IF (IP.GT.1) THEN
  188. CALL ERREUR(948)
  189. RETURN
  190. ENDIF
  191. GOTO 221
  192. ENDIF
  193. ENDDO
  194. 221 CONTINUE
  195. C
  196. DO 230 IP1 =1,NBCOMP-1
  197. PAR1 = MOTS(IP1)
  198. DO 231 IP2 =IP1+1,NBCOMP
  199. IF (MOTS(IP2).EQ.PAR1) THEN
  200. CALL ERREUR(949)
  201. RETURN
  202. ENDIF
  203. 231 CONTINUE
  204. 230 CONTINUE
  205. C
  206. ENDIF
  207. ENDIF
  208. ENDDO
  209. C
  210. C Ajouter le numero ou le nom de la loi utilisateur
  211. IF (LMONUM.EQ.0) THEN
  212. MOTPRO = LMONOM
  213. IF (LMOLGT.GT.0 .AND. LMONOM.EQ.' ') THEN
  214. SEGINI,limode
  215. WRITE(MOTPRO(1:16),'(I16)') limode
  216. SEGSUP,limode
  217. ENDIF
  218. ELSE
  219. WRITE(MOTPRO(1:16),'(I16)') LMONUM
  220. ENDIF
  221. C
  222. C Bibliotheque externe : pointeur de la fonction externe
  223. IF (LMOPTR.GT.0) THEN
  224. C Si le nom de la fonction n'a pas ete fourni avec le mot-cle 'FCT_LOI',
  225. C on le construit a partir de 'NOM_LOI' ou 'NUME_LOI'.
  226. IF (LMOLGT.EQ.0) THEN
  227. LMOFCT = ' '
  228. IF (LMONUM.EQ.0) THEN
  229. IRET = LONG(LMONOM)
  230. LMOFCT(1:IRET) = LMONOM(1:IRET)
  231. LMOLGT = IRET
  232. ELSE
  233. IRET = 0
  234. DO i = 1, 16
  235. IRET = IRET + 1
  236. IF (MOTPRO(i:i).NE.' ') GOTO 20
  237. ENDDO
  238. 20 CONTINUE
  239. LMOFCT = 'umat_'//MOTPRO(IRET:16)
  240. LMOLGT = 22-IRET
  241. ENDIF
  242. ENDIF
  243. ip = -1
  244. CALL LEXTOP(LMOLIB,LMOFCT,ip,LMOLOI,LMOPTR)
  245. *** IF (IERR.NE.0) RETURN
  246. *si pas d'erreur LMOLOI > 0 et LMOPTR >0 pointe sur une fonction
  247. *dbg IF (LMOLOI.LE.0) CALL ERREUR(5)
  248. *dbg IF (LMOPTR.LE.0) CALL ERREUR(5)
  249. LMOLGB = LONG(LMOLIB)
  250. LMOLGT = LONG(LMOFCT)
  251. *dbg write(ioimp,*) 'LMOLOI =',LMOLOI,LMOPTR,LMOLGB,LMOLGT,
  252. *dbg & LMOLIB(1:LMOLGB),'=',LMOFCT(1:LMOLGT)
  253. ENDIF
  254. C
  255. END
  256.  
  257.  

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