Télécharger modext.eso

Retour à la liste

Numérotation des lignes :

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

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