Télécharger incor2.eso

Retour à la liste

Numérotation des lignes :

incor2
  1. C INCOR2 SOURCE GOUNAND 25/04/30 21:15:06 12258
  2. SUBROUTINE INCOR2(MATELE,LITOT,MLAG1,MLAG2)
  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 MLAG1 contient les multiplicateurs de Lagrange a placer apres les
  11. C inconnues auxquelles ils se rapportent
  12. C MLAG2 contient les multiplicateurs de Lagrange a placer avant les
  13. C inconnues auxquelles ils se rapportent
  14. C
  15. C
  16. C LANGAGE : ESOPE
  17. C AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  18. C mél : gounand@semt2.smts.cea.fr
  19. C***********************************************************************
  20. C SYNTAXE GIBIANE :
  21. C ENTREES :
  22. C ENTREES/SORTIES :
  23. C SORTIES :
  24. C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
  25. C***********************************************************************
  26. C VERSION : v1, 24/03/2004, version initiale
  27. C HISTORIQUE : v1, 24/03/2004, création
  28. C HISTORIQUE : 24/04/2025, simplification
  29. C HISTORIQUE :
  30. C***********************************************************************
  31.  
  32. -INC PPARAM
  33. -INC CCOPTIO
  34. POINTEUR MATELE.MATRIK
  35. POINTEUR IMATEL.IMATRI
  36. -INC SMLMOTS
  37. POINTEUR GPINCS.MLMOTS
  38. POINTEUR LITOT.MLMOTS
  39. POINTEUR LITOT2.MLMOTS
  40. POINTEUR MLAG1.MLMOTS
  41. POINTEUR MLAG2.MLMOTS
  42. -INC SMLENTI
  43. POINTEUR LINIV.MLENTI
  44. POINTEUR LINIV2.MLENTI
  45. POINTEUR LITYP.MLENTI
  46. POINTEUR LITYP2.MLENTI
  47. POINTEUR LORD.MLENTI
  48. POINTEUR LIORD.MLENTI
  49. C! POINTEUR LIORD2.MLENTI
  50. POINTEUR LIPERM.MLENTI
  51. LOGICAL LOK
  52. *
  53. INTEGER LNMOTS
  54. PARAMETER (LNMOTS=8)
  55. CHARACTER*8 MONMOT,MONMOD,MONMOP
  56. LOGICAL LRELA
  57. LOGICAL LTYP1
  58. *
  59. * Executable statements
  60. *
  61. * WRITE(IOIMP,*) 'Entrée dans incor2.eso'
  62. *
  63. SEGACT MATELE
  64. NMATE = MATELE.IRIGEL(/2)
  65. *
  66. * Construction de la liste des inconnues
  67. *
  68. NBMTOT=0
  69. DO 3 IMATE=1,NMATE
  70. IMATEL=MATELE.IRIGEL(4,IMATE)
  71. SEGACT IMATEL
  72. NBMTOT=NBMTOT+IMATEL.LISPRI(/2)
  73. 3 CONTINUE
  74. JGN=LNMOTS
  75. JGM=2*NBMTOT
  76. SEGINI GPINCS
  77. SEGINI LITOT
  78. NBM2=0
  79. DO 4 IMATE=1,NMATE
  80. IMATEL=MATELE.IRIGEL(4,IMATE)
  81. DO 42 IBME=1,IMATEL.LISPRI(/2)
  82. NBM2=NBM2+1
  83. GPINCS.MOTS(NBM2)=IMATEL.LISPRI(IBME)
  84. 42 CONTINUE
  85. DO 43 IBME=1,IMATEL.LISDUA(/2)
  86. NBM2=NBM2+1
  87. GPINCS.MOTS(NBM2)=IMATEL.LISDUA(IBME)
  88. 43 CONTINUE
  89. 4 CONTINUE
  90. CALL CUNIQ(GPINCS.MOTS,LNMOTS,NBM2,
  91. $ LITOT.MOTS,NBUNIQ,
  92. $ IMPR,IRET)
  93. IF (IRET.NE.0) GOTO 9999
  94. JGN=LNMOTS
  95. JGM=NBUNIQ
  96. SEGADJ LITOT
  97. SEGSUP GPINCS
  98. *
  99. * SEGPRT,LITOT
  100. *
  101. * Construction de la liste des types
  102. JG=LITOT.MOTS(/2)
  103. SEGINI LITYP
  104. N1=0
  105. N2=0
  106. *
  107. * On parcourt la liste des noms pour donner un type trusted (1)
  108. * ou multiplicateur de Lagrange premier (3) ou deuxième (4).
  109. * DO ITOT=1,LITOT.MOTS(/2)
  110. ** IF (LITOT.MOTS(ITOT)(1:1).EQ.'$') THEN
  111. ** LITYP.LECT(ITOT)=1
  112. ** ELSEIF (LITOT.MOTS(ITOT)(1:2).EQ.'LX') THEN
  113. * IF (LITOT.MOTS(ITOT)(1:2).EQ.'LX') THEN
  114. * LITYP.LECT(ITOT)=3
  115. * ELSEIF (LITOT.MOTS(ITOT)(1:2).EQ.'MX') THEN
  116. * LITYP.LECT(ITOT)=4
  117. * ENDIF
  118. * ENDDO
  119. DO IMATE=1,NMATE
  120. IMATYP=MATELE.IRIGEL(7,IMATE)
  121. IF (IMATYP.EQ.4.OR.IMATYP.EQ.-3.OR.IMATYP.EQ.-4) THEN
  122. IMATEL=MATELE.IRIGEL(4,IMATE)
  123. SEGACT IMATEL
  124. DO IBME=1,IMATEL.LISDUA(/2)
  125. MONMOT=IMATEL.LISDUA(IBME)
  126. CALL FIMOTS(MONMOT,LITOT,IORD,IMPR,IRET)
  127. IF (IRET.NE.0) GOTO 9999
  128. IF (IMATYP.EQ.-4) THEN
  129. IF (LITYP.LECT(IORD).NE.2) THEN
  130. N2=N2+1
  131. LITYP.LECT(IORD)=2
  132. ENDIF
  133. ELSE
  134. IF (LITYP.LECT(IORD).NE.1) THEN
  135. N1=N1+1
  136. LITYP.LECT(IORD)=1
  137. ENDIF
  138. ENDIF
  139. ENDDO
  140. ENDIF
  141. ENDDO
  142. *
  143. * On ajoute les inconnues à MLAG1 ou MLAG2 si nécessaire
  144. *
  145. IF (N1.GT.0) THEN
  146. IF (MLAG1.NE.0) THEN
  147. SEGACT MLAG1*MOD
  148. JGN=MLAG1.MOTS(/1)
  149. IDX1=MLAG1.MOTS(/2)
  150. JGM=IDX1+N1
  151. SEGADJ MLAG1
  152. ELSE
  153. JGN=LOCHPO
  154. JGM=N1
  155. SEGINI MLAG1
  156. IDX1=0
  157. ENDIF
  158. I1=0
  159. ENDIF
  160. IF (N2.GT.0) THEN
  161. IF (MLAG2.NE.0) THEN
  162. SEGACT MLAG2*MOD
  163. JGN=MLAG2.MOTS(/1)
  164. IDX2=MLAG2.MOTS(/2)
  165. JGM=IDX2+N2
  166. SEGADJ MLAG2
  167. ELSE
  168. JGN=LOCHPO
  169. JGM=N2
  170. SEGINI MLAG2
  171. IDX2=0
  172. ENDIF
  173. I2=0
  174. ENDIF
  175. *
  176. DO IINC=1,LITOT.MOTS(/2)
  177. IF (LITYP.LECT(IINC).EQ.1) THEN
  178. I1=I1+1
  179. MLAG1.MOTS(IDX1+I1)=LITOT.MOTS(IINC)
  180. ELSEIF (LITYP.LECT(IINC).EQ.2) THEN
  181. I2=I2+1
  182. MLAG2.MOTS(IDX2+I2)=LITOT.MOTS(IINC)
  183. ENDIF
  184. ENDDO
  185.  
  186. * SEGPRT,LITYP
  187.  
  188.  
  189. SEGSUP LITYP
  190. *
  191. * Normal termination
  192. *
  193. IRET=0
  194. RETURN
  195. *
  196. * Format handling
  197. *
  198. *
  199. * Error handling
  200. *
  201. 9999 CONTINUE
  202. IRET=1
  203. WRITE(IOIMP,*) 'An error was detected in subroutine incor2'
  204. RETURN
  205. *
  206. * End of subroutine INCOR2
  207. *
  208. END
  209.  
  210.  

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