Télécharger indi2.eso

Retour à la liste

Numérotation des lignes :

indi2
  1. C INDI2 SOURCE GOUNAND 25/11/21 21:15:02 12404
  2. SUBROUTINE INDI2(IMAIL,ITOPO)
  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 SMTEXTE
  39. -INC SMCHPOI
  40. POINTEUR ICMETR.MCHPOI,ICMTR2.MCHPOI
  41. *
  42. parameter(ncle=3)
  43. character*8 mtyp
  44. character*8 mcle(ncle)
  45. logical lmet
  46. parameter (ntmet=4)
  47. character*8 typmet(ntmet)
  48. *
  49. DATA MCLE/'ARIT ','GEOM ','LISTREEL'/
  50. DATA typmet/'FLOTTANT','ENTIER ','CHPOINT ','MCHAML '/
  51. *
  52. * Executable statements
  53. *
  54. MELEME=IMAIL
  55. IF (ITOPO.EQ.2.OR.ITOPO.EQ.3) THEN
  56. CALL QUETYP(mtyp,0,iretou)
  57. if (iretou.eq.1) then
  58. CALL PLACE(typmet,ntmet,imet,mtyp)
  59. if (imet.ne.0) then
  60. * Ecrire le mot-cle 'METR' pour la procedure
  61. CALL ECRCHA('METR')
  62. endif
  63. endif
  64. CALL ECROBJ('MAILLAGE',MELEME)
  65. SEGINI MTEXTE
  66. IF (ITOPO.EQ.2) THEN
  67. LTT=14
  68. MTEXT(1:LTT) ='DEADUTIL QALI2'
  69. ELSE
  70. LTT=14
  71. MTEXT(1:LTT) ='DEADUTIL QEQU2'
  72. ENDIF
  73. NCART=LTT
  74. SEGDES MTEXTE
  75. CALL ECROBJ('TEXTE',MTEXTE)
  76. RETURN
  77. ENDIF
  78. * Initialisation des données dans le common CCMATOP
  79. * Attention, il faut mettre les mêmes valeurs par défaut
  80. * que dans proptt et prtopv
  81. xvtol=1.D-11
  82. imet=0
  83. xdens=0.d0
  84. icmetr=0
  85. icmtr2=0
  86. imomet=0
  87. impr=0
  88. iveri=2
  89. ilistr=0
  90. 10 continue
  91. call lirmot(mcle,ncle,icle,0)
  92. if (icle.ne.0) then
  93. if (icle.eq.1.or.icle.eq.2) then
  94. imomet=icle-1
  95. elseif (icle.eq.3) then
  96. ilistr=1
  97. else
  98. call erreur(5)
  99. return
  100. endif
  101. goto 10
  102. endif
  103. * 2020/04/29 SG
  104. * Pas de gestion du noeud virtuel car cela n'est pas compatible
  105. * avec la transformation du MLREEL en CHAMELEM
  106. *
  107. * Lecture de la métrique voulue :
  108. c LOG1 : pas de métrique,
  109. c FLOT1 : taille de maille ;
  110. C CHPO1 : inverse de la métrique isotrope, nom de composante G ou
  111. C anisotrope, noms de composante G11, G21, G22, (G31, G32, G33 en
  112. C 3D)
  113. *
  114. imet=0
  115. call lirlog(lmet,0,IRET)
  116. IF (IERR.NE.0) RETURN
  117. if (iret.eq.0) then
  118. call lirree(XDENS,0,IRET)
  119. IF (IERR.NE.0) RETURN
  120. if (iret.eq.1) then
  121. imet=2
  122. else
  123. CALL LIROBJ('CHPOINT',ICMETR,0,IRET)
  124. IF (IERR.NE.0) RETURN
  125. if (iret.eq.1) then
  126. call extr11(icmetr,mlmots)
  127. if (ierr.ne.0) return
  128. segact mlmots
  129. CALL PLACE(MOTS,MOTS(/2),iplac,'G ')
  130. if (iplac.ne.0) then
  131. imet=3
  132. else
  133. imet=4
  134. endif
  135. segsup mlmots
  136. endif
  137. endif
  138. if (imomet.eq.1.and.icmetr.ne.0) then
  139. call ecrcha('LOG')
  140. call ecrobj('CHPOINT',ICMETR)
  141. call prtens
  142. if (ierr.ne.0) return
  143. call lirobj('CHPOINT',ICMTR2,1,IRET)
  144. if (ierr.ne.0) return
  145. else
  146. ICMTR2=ICMETR
  147. endif
  148. else
  149. if(lmet) imet=1
  150. endif
  151. * write(ioimp,*) 'imet=',imet
  152. CALL QUALI7(MELEME,IMET,IMOMET,XDENS,ICMTR2,XVTOL,MLREEL
  153. $ ,IMPR,IVERI)
  154. IF (IERR.NE.0) RETURN
  155. if (imomet.eq.1.and.icmetr.ne.0) then
  156. segsup,icmtr2
  157. endif
  158. *
  159. if (ilistr.eq.1) then
  160. CALL ECROBJ('LISTREEL',MLREEL)
  161. else
  162. *
  163. * Transformation du MLREEL en MCHAML
  164. *
  165. SEGACT MELEME
  166. NBSOUS=LISOUS(/1)
  167. IF (NBSOUS.NE.0) THEN
  168. CALL ERREUR(25)
  169. RETURN
  170. ENDIF
  171. NBELEM=NUM(/2)
  172. SEGACT MLREEL
  173. JG=PROG(/1)
  174. IF (JG.NE.NBELEM) THEN
  175. CALL ERREUR(5)
  176. RETURN
  177. ENDIF
  178. * Création du CHAMELEM
  179. N1PTEL=1
  180. N1EL=NBELEM
  181. N2PTEL=0
  182. N2EL=0
  183. SEGINI,MELVAL
  184. DO IELEM=1,NBELEM
  185. VELCHE(1,IELEM)=PROG(IELEM)
  186. ENDDO
  187. *
  188. N2=1
  189. SEGINI,MCHAML
  190. * NOMCHE(1)='QUALTOPO'
  191. * Eviter les problèmes dans certains opérateurs avec les noms de 4
  192. * lettres ?
  193. NOMCHE(1)='TOPO'
  194. TYPCHE(1)='REAL*8'
  195. *
  196. IELVAL(1)=MELVAL
  197. *
  198. L1=7
  199. N1=1
  200. N3=6
  201. SEGINI,MCHELM
  202. TITCHE='QUALITE'
  203. CONCHE(1)=' '
  204. INFCHE(1,1)=0
  205. INFCHE(1,2)=0
  206. INFCHE(1,3)=NIFOUR
  207. INFCHE(1,4)=0
  208. INFCHE(1,5)=0
  209. INFCHE(1,6)=1
  210. IFOCHE=IFOUR
  211. *
  212. IMACHE(1)=MELEME
  213. ICHAML(1)=MCHAML
  214. * Sortie
  215. SEGSUP MLREEL
  216. CALL ACTOBJ('MCHAML',MCHELM,1)
  217. CALL ECROBJ('MCHAML',MCHELM)
  218. ENDIF
  219. *
  220. * Normal termination
  221. *
  222. RETURN
  223. *
  224. * End of subroutine INDI2
  225. *
  226. END
  227.  
  228.  

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