Télécharger guesco.eso

Retour à la liste

Numérotation des lignes :

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

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