Télécharger incor2.eso

Retour à la liste

Numérotation des lignes :

incor2
  1. C INCOR2 SOURCE GOUNAND 25/03/10 21:15:01 12184
  2. SUBROUTINE INCOR2(MATELE,IMULAG,LITOT,LITYP,LINIV,IMPR,IRET)
  3. IMPLICIT REAL*8 (A-H,O-Z)
  4. IMPLICIT INTEGER (I-N)
  5. C***********************************************************************
  6. C NOM : INCOR2
  7. C DESCRIPTION :
  8. C
  9. C Construction de l'ensemble des noms d'inconnues possibles LITOT
  10. C et attribution d'un ordre.
  11. C On voudra qu'un ddl d'ordre i soit après au moins un ddl d'ordre
  12. C i-1 avec lequel il a une relation
  13. C LITOT : liste des noms d'inconnues
  14. C LIORD : ordre pour chaque inconnue
  15. C LITYP : type d'inconnue 1 : trusted
  16. C 2 : untrusted
  17. C 3 : premier multiplicateur
  18. C 4 : deuxième multiplicateur
  19. C LINIV : niveau de multiplicateur 1 : n'est pas un multiplicateur
  20. C 2 : est un multiplicateur qui
  21. C porte au moins sur un 1
  22. C 3 : est un multiplicateur qui
  23. C porte au moins sur un 2
  24. C ...
  25. C
  26. C
  27. C LANGAGE : ESOPE
  28. C AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  29. C mél : gounand@semt2.smts.cea.fr
  30. C***********************************************************************
  31. C SYNTAXE GIBIANE :
  32. C ENTREES :
  33. C ENTREES/SORTIES :
  34. C SORTIES :
  35. C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
  36. C***********************************************************************
  37. C VERSION : v1, 24/03/2004, version initiale
  38. C HISTORIQUE : v1, 24/03/2004, création
  39. C HISTORIQUE :
  40. C HISTORIQUE :
  41. C***********************************************************************
  42. C Prière de PRENDRE LE TEMPS de compléter les commentaires
  43. C en cas de modification de ce sous-programme afin de faciliter
  44. C la maintenance !
  45. C***********************************************************************
  46.  
  47. -INC PPARAM
  48. -INC CCOPTIO
  49. POINTEUR MATELE.MATRIK
  50. POINTEUR IMATEL.IMATRI
  51. -INC SMLMOTS
  52. POINTEUR GPINCS.MLMOTS
  53. POINTEUR LITOT.MLMOTS
  54. POINTEUR LITOT2.MLMOTS
  55. -INC SMLENTI
  56. POINTEUR LINIV.MLENTI
  57. POINTEUR LINIV2.MLENTI
  58. POINTEUR LITYP.MLENTI
  59. POINTEUR LITYP2.MLENTI
  60. POINTEUR LORD.MLENTI
  61. POINTEUR LIORD.MLENTI
  62. C! POINTEUR LIORD2.MLENTI
  63. POINTEUR LIPERM.MLENTI
  64. LOGICAL LOK
  65. *
  66. INTEGER LNMOTS
  67. PARAMETER (LNMOTS=8)
  68. CHARACTER*8 MONMOT,MONMOD,MONMOP
  69. LOGICAL LRELA
  70. LOGICAL LTYNU2,LTYP1
  71. *
  72. INTEGER IMPR,IRET
  73. *
  74. * Executable statements
  75. *
  76. IF (IMPR.GT.2) WRITE(IOIMP,*) 'Entrée dans incor2.eso'
  77. LTYNU2=(IMULAG.EQ.4.OR.IMULAG.EQ.5)
  78. *
  79. SEGACT MATELE
  80. NMATE = MATELE.IRIGEL(/2)
  81. *
  82. * Construction de la liste des inconnues
  83. *
  84. NBMTOT=0
  85. DO 3 IMATE=1,NMATE
  86. IMATEL=MATELE.IRIGEL(4,IMATE)
  87. SEGACT IMATEL
  88. NBMTOT=NBMTOT+IMATEL.LISPRI(/2)
  89. SEGDES IMATEL
  90. 3 CONTINUE
  91. JGN=LNMOTS
  92. JGM=2*NBMTOT
  93. SEGINI GPINCS
  94. SEGINI LITOT
  95. NBM2=0
  96. DO 4 IMATE=1,NMATE
  97. IMATEL=MATELE.IRIGEL(4,IMATE)
  98. SEGACT IMATEL
  99. DO 42 IBME=1,IMATEL.LISPRI(/2)
  100. NBM2=NBM2+1
  101. GPINCS.MOTS(NBM2)=IMATEL.LISPRI(IBME)
  102. 42 CONTINUE
  103. DO 43 IBME=1,IMATEL.LISDUA(/2)
  104. NBM2=NBM2+1
  105. GPINCS.MOTS(NBM2)=IMATEL.LISDUA(IBME)
  106. 43 CONTINUE
  107. SEGDES IMATEL
  108. 4 CONTINUE
  109. CALL CUNIQ(GPINCS.MOTS,LNMOTS,NBM2,
  110. $ LITOT.MOTS,NBUNIQ,
  111. $ IMPR,IRET)
  112. IF (IRET.NE.0) GOTO 9999
  113. JGN=LNMOTS
  114. JGM=NBUNIQ
  115. SEGADJ LITOT
  116. SEGSUP GPINCS
  117. *
  118. * SEGPRT,LITOT
  119. *
  120. * Construction de la liste des types
  121. JG=LITOT.MOTS(/2)
  122. SEGINI LITYP
  123. * Par défaut, toutes les inconnues ont le type untrusted (2)
  124. DO IORD=1,LITYP.LECT(/1)
  125. LITYP.LECT(IORD)=2
  126. ENDDO
  127. * On parcourt la liste des noms pour donner un type trusted (1)
  128. * ou multiplicateur de Lagrange premier (3) ou deuxième (4).
  129. DO ITOT=1,LITOT.MOTS(/2)
  130. * IF (LITOT.MOTS(ITOT)(1:1).EQ.'$') THEN
  131. * LITYP.LECT(ITOT)=1
  132. * ELSEIF (LITOT.MOTS(ITOT)(1:2).EQ.'LX') THEN
  133. IF (LITOT.MOTS(ITOT)(1:2).EQ.'LX') THEN
  134. LITYP.LECT(ITOT)=3
  135. ELSEIF (LITOT.MOTS(ITOT)(1:2).EQ.'MX') THEN
  136. LITYP.LECT(ITOT)=4
  137. ENDIF
  138. ENDDO
  139. DO IMATE=1,NMATE
  140. IMATYP=MATELE.IRIGEL(7,IMATE)
  141. IF (IMATYP.EQ.4.OR.IMATYP.EQ.-3.OR.IMATYP.EQ.-4) THEN
  142. IMATEL=MATELE.IRIGEL(4,IMATE)
  143. SEGACT IMATEL
  144. DO IBME=1,IMATEL.LISDUA(/2)
  145. MONMOT=IMATEL.LISDUA(IBME)
  146. CALL FIMOTS(MONMOT,LITOT,IORD,IMPR,IRET)
  147. IF (IRET.NE.0) GOTO 9999
  148. IF (IMATYP.EQ.-4) THEN
  149. LITYP.LECT(IORD)=4
  150. ELSE
  151. LITYP.LECT(IORD)=3
  152. ENDIF
  153. ENDDO
  154. SEGDES IMATEL
  155. ENDIF
  156. ENDDO
  157. * SEGPRT,LITYP
  158. *
  159. * On construit LINIV
  160. *
  161. JG=LITOT.MOTS(/2)
  162. SEGINI LINIV
  163. * On fait d'abord les types trusted et untrusted
  164. DO ITYP=1,2
  165. DO IINC=1,LITOT.MOTS(/2)
  166. IF (LITYP.LECT(IINC).EQ.ITYP) THEN
  167. LINIV.LECT(IINC)=1
  168. ENDIF
  169. ENDDO
  170. ENDDO
  171. * Les inconnues qui ont le type muliplicateur de Lagrange
  172. * mais qui n'ont de relations qu'avec elles-memes
  173. * se font attribuer un niveau 1.
  174. DO ITYP=3,4
  175. DO IINC=1,LITOT.MOTS(/2)
  176. IF (LITYP.LECT(IINC).EQ.ITYP) THEN
  177. MONMOD=LITOT.MOTS(IINC)
  178. LRELA=.TRUE.
  179. DO IMATE=1,NMATE
  180. IMATEL=MATELE.IRIGEL(4,IMATE)
  181. SEGACT IMATEL
  182. DO IBME=1,IMATEL.LISDUA(/2)
  183. IF (IMATEL.LISDUA(IBME).EQ.MONMOD) THEN
  184. MONMOP=IMATEL.LISPRI(IBME)
  185. *rajout 10/04/2009
  186. CALL FIMOTS(MONMOP,LITOT,IORP,IMPR,IRET)
  187. IF (IRET.NE.0) GOTO 9999
  188. ITYPP=LITYP.LECT(IORP)
  189. IF (MONMOP.NE.MONMOD.AND.(ITYPP.NE.ITYP)) THEN
  190. * IF (.NOT.(MONMOP.EQ.MONMOD)) THEN
  191. LRELA=.FALSE.
  192. ENDIF
  193. ENDIF
  194. ENDDO
  195. SEGDES IMATEL
  196. ENDDO
  197. IF (LRELA) THEN
  198. * LIORD.LECT(IINC)=IORD
  199. * IORD=IORD+1
  200. LINIV.LECT(IINC)=1
  201. ENDIF
  202. ENDIF
  203. ENDDO
  204. ENDDO
  205. SEGDES LITYP
  206. *
  207. * WRITE(IOIMP,*) ' Coucou les gars'
  208. *
  209. * SEGPRT,LITOT
  210. * SEGPRT,LINIV
  211. * SEGPRT,LIORD
  212. * SEGPRT,LIORD
  213. * On s'occupe des inconnues n'ayant pas de niveau.
  214. NLAG=0
  215. DO IINC=1,LITOT.MOTS(/2)
  216. INIV=LINIV.LECT(IINC)
  217. IF (INIV.EQ.0) THEN
  218. NLAG=NLAG+1
  219. ENDIF
  220. ENDDO
  221. *
  222. * WRITE(IOIMP,*) 'NLAG=',NLAG
  223. *
  224. DO IBCL=1,LITOT.MOTS(/2)
  225. * 9 CONTINUE
  226. IF (NLAG.GT.0) THEN
  227. DO IINC=1,LITOT.MOTS(/2)
  228. INIV=LINIV.LECT(IINC)
  229. IF (INIV.EQ.0) THEN
  230. MONMOD=LITOT.MOTS(IINC)
  231. * WRITE(IOIMP,*) 'IINC=',IINC
  232. * WRITE(IOIMP,*) 'MONMOD=',MONMOD
  233. LOK=.FALSE.
  234. DO IMATE=1,NMATE
  235. IMATEL=MATELE.IRIGEL(4,IMATE)
  236. SEGACT IMATEL
  237. DO IBME=1,IMATEL.LISDUA(/2)
  238. IF (IMATEL.LISDUA(IBME).EQ.MONMOD) THEN
  239. MONMOP=IMATEL.LISPRI(IBME)
  240. IF (MONMOP.NE.MONMOD) THEN
  241. CALL FIMOTS(MONMOP,LITOT,JINC,IMPR,IRET)
  242. IF (IRET.NE.0) GOTO 9999
  243. KNIV=LINIV.LECT(JINC)
  244. * WRITE(IOIMP,*) 'MONMOP=',MONMOP
  245. * WRITE(IOIMP,*) 'KNIV=',KNIV
  246. IF (KNIV.NE.0) THEN
  247. * LOK=.FALSE.
  248. * ELSE
  249. LOK=.TRUE.
  250. INIV=MAX(INIV,KNIV+1)
  251. ENDIF
  252. ENDIF
  253. ENDIF
  254. ENDDO
  255. SEGDES IMATEL
  256. ENDDO
  257. * WRITE(IOIMP,*) 'LOK=',LOK
  258. IF (LOK) THEN
  259. NLAG=NLAG-1
  260. LINIV.LECT(IINC)=INIV
  261. ENDIF
  262. ENDIF
  263. ENDDO
  264. * GOTO 9
  265. ENDIF
  266. ENDDO
  267. SEGDES MATELE
  268. SEGDES LINIV
  269. *
  270. * Normal termination
  271. *
  272. IRET=0
  273. RETURN
  274. *
  275. * Format handling
  276. *
  277. *
  278. * Error handling
  279. *
  280. 9999 CONTINUE
  281. IRET=1
  282. WRITE(IOIMP,*) 'An error was detected in subroutine incor2'
  283. RETURN
  284. *
  285. * End of subroutine INCOR2
  286. *
  287. END
  288.  
  289.  

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