Télécharger guesco.eso

Retour à la liste

Numérotation des lignes :

guesco
  1. C GUESCO SOURCE GOUNAND 25/10/23 21:15:02 12386
  2. SUBROUTINE GUESCO(TYCHA,MLMOTS,MLMOT1)
  3. IMPLICIT REAL*8 (A-H,O-Z)
  4. IMPLICIT INTEGER (I-N)
  5. C***********************************************************************
  6. C NOM : GUESCO
  7. C DESCRIPTION : Devine des noms de composantes et leur nombre
  8. C a partir de la donnée de MLMOTS (eventuellement
  9. C incomplete si TYCHA=CHPOINT)
  10. C Si on ne sait pas, on renvoie MLMOT1=0
  11. C Si on a trouve une bonne liste de composante MLMOT1, elle est
  12. C ordonnee suivant la convention suivante :
  13. C Symetrique : X11, X21, X22, X31, X32, X33
  14. C General : X11, X12, X13, X21, X22, X23, X31, X32, X33
  15. C
  16. C
  17. C
  18. C LANGAGE : ESOPE
  19. C AUTEUR : Stephane GOUNAND (CEA/DES/ISAS/DM2S/SEMT/LTA)
  20. C mel : gounand@semt2.smts.cea.fr
  21. C***********************************************************************
  22. C APPELES :
  23. C APPELES (E/S) :
  24. C APPELES (BLAS) :
  25. C APPELES (CALCUL) :
  26. C APPELE PAR :
  27. C***********************************************************************
  28. C SYNTAXE GIBIANE :
  29. C ENTREES : TYCHA, MLMOTS
  30. C ENTREES/SORTIES :
  31. C SORTIES : MLMOT1
  32. C***********************************************************************
  33. C VERSION : v1, 10/09/2024, version initiale
  34. C HISTORIQUE : v1, 10/09/2024, creation
  35. C HISTORIQUE :
  36. C HISTORIQUE :
  37. C***********************************************************************
  38. -INC PPARAM
  39. -INC CCOPTIO
  40. -INC SMLMOTS
  41. *
  42. CHARACTER*8 TYCHA
  43. PARAMETER (NTCC=3)
  44. * On se limite à la dimension 3
  45. CHARACTER*1 MOCC(3,NTCC)
  46. character*8 NOMCO
  47. character*8 PRECO
  48. character*1 CLET
  49. EXTERNAL LONG
  50. C
  51. DATA MOCC/'1','2','3','X','Y','Z','R','Z','T'/
  52. *
  53. * Executable statements
  54. *
  55. MLMOT1=0
  56. SEGACT,MLMOTS
  57. NBMOTS=MOTS(/2)
  58. * Les cas simples
  59. IF (NBMOTS.LE.0) THEN
  60. * Le chpoint donne est vide, ou bien son contenu est incompatible avec les noms
  61. * de composante imposes par le listmots et le mot-cle (donne ou sous-entendu)
  62. CALL ERREUR(156)
  63. RETURN
  64. ENDIF
  65. * On essaie de deviner a partir du nom de la premiere composante
  66. NOMCO=MOTS(1)
  67. * Est-ce un vecteur ou un tenseur ?
  68. NBCC=0
  69. LNOMCO=LONG(NOMCO)
  70. * write(ioimp,*) 'lnomco=',lnomco
  71. IF (LNOMCO.GE.1) THEN
  72. CLET=NOMCO(LNOMCO:LNOMCO)
  73. JTCC=0
  74. DO ITCC=1,NTCC
  75. DO JDIM=1,IDIM
  76. IF (CLET.EQ.MOCC(JDIM,ITCC)) THEN
  77. JTCC=ITCC
  78. NBCC=NBCC+1
  79. GOTO 5
  80. ENDIF
  81. ENDDO
  82. ENDDO
  83. 5 CONTINUE
  84. IF (NBCC.NE.0) THEN
  85. IF (LNOMCO.GT.2) THEN
  86. CLET=NOMCO(LNOMCO-1:LNOMCO-1)
  87. DO JDIM=1,IDIM
  88. IF (CLET.EQ.MOCC(JDIM,JTCC)) THEN
  89. NBCC=NBCC+1
  90. GOTO 6
  91. ENDIF
  92. ENDDO
  93. 6 CONTINUE
  94. ENDIF
  95. ENDIF
  96. ENDIF
  97. * NBCC =2 tenseur potentiel mais il reste à voir symetrique ou non ;
  98. * NBCC =1 vecteur potentiel ; NBCC=0 scalaire potentiel
  99. * write(ioimp,*) 'NBCC=',NBCC
  100. PRECO=NOMCO(1:(LNOMCO-NBCC))
  101. IF (TYCHA.EQ.'CHPOINT') THEN
  102. JGN=LOCHPO
  103. ELSE
  104. JGN=LOCOMP
  105. ENDIF
  106. IF (NBCC.EQ.2) THEN
  107. ISYM=3
  108. ELSE
  109. ISYM=1
  110. ENDIF
  111. DO 1000 JSYM=1,ISYM
  112. * write(ioimp,*) 'JSYM=',JSYM
  113. IF (NBCC.EQ.0) THEN
  114. JGM=1
  115. IF (TYCHA.EQ.'CHPOINT') THEN
  116. IF (NBMOTS.GT.JGM) GOTO 99
  117. ELSE
  118. IF (NBMOTS.NE.JGM) GOTO 99
  119. ENDIF
  120. SEGINI MLMOT1
  121. MLMOT1.MOTS=PRECO
  122. ELSEIF (NBCC.EQ.1) THEN
  123. JGM=IDIM
  124. IF (TYCHA.EQ.'CHPOINT') THEN
  125. IF (NBMOTS.GT.JGM) GOTO 99
  126. ELSE
  127. IF (NBMOTS.NE.JGM) GOTO 99
  128. ENDIF
  129. PRECO=NOMCO(1:(LNOMCO-1))
  130. JGM=IDIM
  131. SEGINI MLMOT1
  132. DO JDIM=1,IDIM
  133. PRECO(LNOMCO:LNOMCO)=MOCC(JDIM,JTCC)
  134. MLMOT1.MOTS(JDIM)=PRECO
  135. ENDDO
  136. ELSEIF (NBCC.EQ.2) THEN
  137. IF (JSYM.EQ.1.OR.JSYM.EQ.2) THEN
  138. JGM=IDIM*(IDIM+1)/2
  139. ELSE
  140. JGM=IDIM*IDIM
  141. ENDIF
  142. IF (TYCHA.EQ.'CHPOINT') THEN
  143. IF (NBMOTS.GT.JGM) THEN
  144. IF (JSYM.LT.ISYM) THEN
  145. GOTO 1000
  146. ELSE
  147. GOTO 99
  148. ENDIF
  149. ENDIF
  150. ELSE
  151. IF (NBMOTS.NE.JGM) THEN
  152. IF (JSYM.LT.ISYM) THEN
  153. GOTO 1000
  154. ELSE
  155. GOTO 99
  156. ENDIF
  157. ENDIF
  158. ENDIF
  159. IGM=0
  160. SEGINI MLMOT1
  161. DO JDIM=1,IDIM
  162. IF (JSYM.EQ.1.OR.JSYM.EQ.2) THEN
  163. LDIM=JDIM
  164. ELSEIF (JSYM.EQ.3) THEN
  165. LDIM=IDIM
  166. else
  167. call erreur(5)
  168. return
  169. ENDIF
  170. DO KDIM=1,LDIM
  171. IF (JSYM.EQ.1.OR.JSYM.EQ.3) THEN
  172. PRECO(LNOMCO-1:LNOMCO-1)=MOCC(JDIM,JTCC)
  173. PRECO(LNOMCO:LNOMCO)=MOCC(KDIM,JTCC)
  174. ELSEIF (JSYM.EQ.2) THEN
  175. PRECO(LNOMCO-1:LNOMCO-1)=MOCC(KDIM,JTCC)
  176. PRECO(LNOMCO:LNOMCO)=MOCC(JDIM,JTCC)
  177. ELSE
  178. call erreur(5)
  179. return
  180. ENDIF
  181. IGM=IGM+1
  182. * write(ioimp,*) 'JDIM,KDIM,PRECO=',JDIM,KDIM,PRECO
  183. MLMOT1.MOTS(IGM)=PRECO
  184. ENDDO
  185. ENDDO
  186. ELSE
  187. * write(ioimp,*) 'NBCC=',NBCC,' ?'
  188. MOTERR(1:8)='GUESCO'
  189. CALL ERREUR(1039)
  190. RETURN
  191. ENDIF
  192. * write(ioimp,*) 'GUESCO : MLMOTS=',(MOTS(i2),i2=1,MOTS(/2))
  193. * write(ioimp,*) 'GUESCO : MLMOT1=',(MLMOT1.MOTS(i2),i2=1
  194. * $ ,MLMOT1.MOTS(/2))
  195. * Verifions la présence de toutes les composantes dans la liste devinee
  196. ICMP=0
  197. DO I=1,MOTS(/2)
  198. CALL PLACE (MLMOT1.MOTS,MLMOT1.MOTS(/2),IPLAC,MOTS(I))
  199. IF (IPLAC.NE.0) ICMP=ICMP+1
  200. ENDDO
  201. * write(ioimp,*) 'ICMP=',ICMP
  202. IF (ICMP.NE.MOTS(/2)) THEN
  203. SEGSUP MLMOT1
  204. MLMOT1=0
  205. * Deuxième chance pour le tenseur
  206. IF (NBCC.EQ.2.AND.JSYM.NE.ISYM) GOTO 1000
  207. GOTO 99
  208. ELSE
  209. GOTO 1001
  210. ENDIF
  211. 1000 CONTINUE
  212. 1001 CONTINUE
  213.  
  214.  
  215.  
  216. SEGACT MLMOT1
  217. *
  218. * Normal termination
  219. *
  220. RETURN
  221. *
  222. * On n'a pas su trouver une bonne liste, MLMOT1=0
  223. *
  224. 99 CONTINUE
  225. MLMOT1=0
  226. RETURN
  227. *
  228. * Format handling
  229. *
  230. *
  231. * Error handling
  232. *
  233. 9999 CONTINUE
  234. WRITE(IOIMP,*) 'An error was detected in subroutine guesco'
  235. RETURN
  236. *
  237. * End of subroutine GUESCO
  238. *
  239. END
  240.  
  241.  

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