Télécharger indi2.eso

Retour à la liste

Numérotation des lignes :

indi2
  1. C INDI2 SOURCE GOUNAND 25/07/24 21:15:01 12334
  2. SUBROUTINE INDI2(IMAIL)
  3. IMPLICIT REAL*8 (A-H,O-Z)
  4. IMPLICIT INTEGER (I-N)
  5. C***********************************************************************
  6. C NOM : INDI2
  7. C DESCRIPTION : Indicateur de qualite du mailleur topologique
  8. C
  9. C
  10. C
  11. C LANGAGE : ESOPE
  12. C AUTEUR : Stephane GOUNAND (CEA/DES/ISAS/DM2S/SEMT/LTA)
  13. C mel : gounand@semt2.smts.cea.fr
  14. C***********************************************************************
  15. C APPELES :
  16. C APPELES (E/S) :
  17. C APPELES (BLAS) :
  18. C APPELES (CALCUL) :
  19. C APPELE PAR :
  20. C***********************************************************************
  21. C SYNTAXE GIBIANE :
  22. C ENTREES : IMAIL
  23. C ENTREES/SORTIES :
  24. C SORTIES : ICHA
  25. C***********************************************************************
  26. C VERSION : v1, 31/03/2021, version initiale
  27. C HISTORIQUE : v1, 31/03/2021, creation
  28. C HISTORIQUE :
  29. C HISTORIQUE :
  30. C***********************************************************************
  31. -INC PPARAM
  32. -INC CCOPTIO
  33. -INC SMCOORD
  34. -INC SMLREEL
  35. -INC SMLMOTS
  36. -INC SMELEME
  37. -INC SMCHAML
  38. -INC SMCHPOI
  39. POINTEUR ICMETR.MCHPOI,ICMTR2.MCHPOI
  40. *
  41. parameter(ncle=3)
  42. character*8 mtyp
  43. character*8 mcle(ncle)
  44. logical lmet
  45. *
  46. DATA MCLE/'ARIT ','GEOM ','LISTREEL'/
  47. *
  48. * Executable statements
  49. *
  50. MELEME=IMAIL
  51. * Initialisation des données dans le common CCMATOP
  52. * Attention, il faut mettre les mêmes valeurs par défaut
  53. * que dans proptt et prtopv
  54. xvtol=1.D-11
  55. ipvirt=0
  56. imet=0
  57. xdens=0.d0
  58. icmetr=0
  59. icmtr2=0
  60. imomet=0
  61. impr=0
  62. iveri=2
  63. ilistr=0
  64. 10 continue
  65. call lirmot(mcle,ncle,icle,0)
  66. if (icle.ne.0) then
  67. if (icle.eq.1.or.icle.eq.2) then
  68. imomet=icle-1
  69. elseif (icle.eq.3) then
  70. ilistr=1
  71. else
  72. call erreur(5)
  73. return
  74. endif
  75. goto 10
  76. endif
  77. * 2020/04/29 SG
  78. * Pas de gestion du noeud virtuel car cela n'est pas compatible
  79. * avec la transformation du MLREEL en CHAMELEM
  80. c$$$* Mot-clé VIRT pour gérer le noeud virtuel
  81. c$$$ call lirmot(mcle,ncle,imot,0)
  82. c$$$ IF (IERR.NE.0) RETURN
  83. c$$$ if (imot.eq.1) then
  84. c$$$ CALL LIROBJ('POINT',IPVIRT,0,IRET)
  85. c$$$ IF (IERR.NE.0) RETURN
  86. c$$$ IF (IRET.EQ.0) THEN
  87. c$$$ CALL LIRENT(IPVIRT,1,IRET)
  88. c$$$ IF (IERR.NE.0) RETURN
  89. c$$$ IF (IPVIRT.NE.0) THEN
  90. c$$$ write(ioimp,*)
  91. c$$$ $ 'On voulait lire un point ou un entier nul'
  92. c$$$ goto 9999
  93. c$$$ ENDIF
  94. c$$$ ENDIF
  95. c$$$ endif
  96. *
  97. * Lecture de la métrique voulue :
  98. c LOG1 : pas de métrique,
  99. c FLOT1 : taille de maille ;
  100. C CHPO1 : inverse de la métrique isotrope, nom de composante G ou
  101. C anisotrope, noms de composante G11, G21, G22, (G31, G32, G33 en
  102. C 3D)
  103. *
  104. imet=0
  105. call lirlog(lmet,0,IRET)
  106. IF (IERR.NE.0) RETURN
  107. if (iret.eq.0) then
  108. call lirree(XDENS,0,IRET)
  109. IF (IERR.NE.0) RETURN
  110. if (iret.eq.1) then
  111. imet=2
  112. else
  113. CALL LIROBJ('CHPOINT',ICMETR,0,IRET)
  114. IF (IERR.NE.0) RETURN
  115. if (iret.eq.1) then
  116. call extr11(icmetr,mlmots)
  117. if (ierr.ne.0) return
  118. segact mlmots
  119. CALL PLACE(MOTS,MOTS(/2),iplac,'G ')
  120. if (iplac.ne.0) then
  121. imet=3
  122. else
  123. imet=4
  124. endif
  125. segsup mlmots
  126. endif
  127. endif
  128. if (imomet.eq.1.and.icmetr.ne.0) then
  129. call ecrcha('LOG')
  130. call ecrobj('CHPOINT',ICMETR)
  131. call prtens
  132. if (ierr.ne.0) return
  133. call lirobj('CHPOINT',ICMTR2,1,IRET)
  134. if (ierr.ne.0) return
  135. else
  136. ICMTR2=ICMETR
  137. endif
  138. else
  139. if(lmet) imet=1
  140. endif
  141. * write(ioimp,*) 'imet=',imet
  142. CALL QUALI7(MELEME,IPVIRT,IMET,IMOMET,XDENS,ICMTR2,XVTOL,MLREEL
  143. $ ,IMPR,IVERI)
  144. IF (IERR.NE.0) RETURN
  145. if (imomet.eq.1.and.icmetr.ne.0) then
  146. segsup,icmtr2
  147. endif
  148. *
  149. if (ilistr.eq.1) then
  150. CALL ECROBJ('LISTREEL',MLREEL)
  151. else
  152. *
  153. * Transformation du MLREEL en MCHAML
  154. *
  155. SEGACT MELEME
  156. NBSOUS=LISOUS(/1)
  157. IF (NBSOUS.NE.0) THEN
  158. CALL ERREUR(25)
  159. RETURN
  160. ENDIF
  161. NBELEM=NUM(/2)
  162. SEGACT MLREEL
  163. JG=PROG(/1)
  164. IF (JG.NE.NBELEM) THEN
  165. CALL ERREUR(5)
  166. RETURN
  167. ENDIF
  168. * Création du CHAMELEM
  169. N1PTEL=1
  170. N1EL=NBELEM
  171. N2PTEL=0
  172. N2EL=0
  173. SEGINI,MELVAL
  174. DO IELEM=1,NBELEM
  175. VELCHE(1,IELEM)=PROG(IELEM)
  176. ENDDO
  177. *
  178. N2=1
  179. SEGINI,MCHAML
  180. * NOMCHE(1)='QUALTOPO'
  181. * Eviter les problèmes dans certains opérateurs avec les noms de 4
  182. * lettres ?
  183. NOMCHE(1)='TOPO'
  184. TYPCHE(1)='REAL*8'
  185. *
  186. IELVAL(1)=MELVAL
  187. *
  188. L1=7
  189. N1=1
  190. N3=6
  191. SEGINI,MCHELM
  192. TITCHE='QUALITE'
  193. CONCHE(1)=' '
  194. INFCHE(1,1)=0
  195. INFCHE(1,2)=0
  196. INFCHE(1,3)=NIFOUR
  197. INFCHE(1,4)=0
  198. INFCHE(1,5)=0
  199. INFCHE(1,6)=1
  200. IFOCHE=IFOUR
  201. *
  202. IMACHE(1)=MELEME
  203. ICHAML(1)=MCHAML
  204. * Sortie
  205. SEGSUP MLREEL
  206. CALL ACTOBJ('MCHAML',MCHELM,1)
  207. CALL ECROBJ('MCHAML',MCHELM)
  208. ENDIF
  209. *
  210. * Normal termination
  211. *
  212. RETURN
  213. *
  214. * End of subroutine INDI2
  215. *
  216. END
  217.  
  218.  

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