Télécharger propto.eso

Retour à la liste

Numérotation des lignes :

propto
  1. C PROPTO SOURCE SP204843 26/02/03 21:15:35 12461
  2. SUBROUTINE PROPTO
  3. IMPLICIT REAL*8 (A-H,O-Z)
  4. IMPLICIT INTEGER (I-N)
  5. C***********************************************************************
  6. C NOM : PROPTO
  7. C DESCRIPTION : Une implémentation de l'amélioration d'une topologie
  8. C autour d'un élément. On reprend OPTITOPO pour le corps
  9. C du programme. On reprend l'extraction et la topologie inverse de
  10. C EXTO. Le point crucial sera d'implémenter la modification de la
  11. C topologie : enlever les anciens éléments et mettre les nouveaux.
  12. C
  13. C Ici, on fait les entrées-sorties et on initialise le common avec
  14. C les options globales.
  15. C
  16. C
  17. C LANGAGE : ESOPE
  18. C AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SEMT/LTA)
  19. C mél : gounand@semt2.smts.cea.fr
  20. C***********************************************************************
  21. C APPELES :
  22. C APPELES (E/S) :
  23. C APPELES (BLAS) :
  24. C APPELES (CALCUL) :
  25. C APPELE PAR :
  26. C***********************************************************************
  27. C SYNTAXE GIBIANE :
  28. C ENTREES :
  29. C ENTREES/SORTIES :
  30. C SORTIES :
  31. C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
  32. C***********************************************************************
  33. C VERSION : v1, 04/10/2017, version initiale
  34. C HISTORIQUE : v1, 04/10/2017, création
  35. C HISTORIQUE :
  36. C HISTORIQUE :
  37. C***********************************************************************
  38. -INC PPARAM
  39. -INC CCOPTIO
  40. -INC TMATOP2
  41. -INC SMELEME
  42. POINTEUR ITOPO.MELEME
  43. POINTEUR IELEM.MELEME
  44. * TOPologie Améliorée
  45. POINTEUR ITOPA.MELEME
  46. POINTEUR IPVIRT.MELEME
  47. -INC SMLOBJE
  48. POINTEUR LTOPA.MLOBJE
  49. -INC SMLMOTS
  50. -INC SMCHPOI
  51. POINTEUR ICMETR.MCHPOI,ICMTR2.MCHPOI
  52. * METrique sur la topologie Améliorée
  53. POINTEUR ICMETA.MCHPOI,ICMTA2.MCHPOI
  54. integer oooval
  55. parameter(ncle=13)
  56. character*8 mtyp
  57. character*4 mcle(ncle)
  58. logical lmet
  59.  
  60. data mcle /'IMPR','VERI','VTOL','QTOL','VIRT','SGAJ','ALGO'
  61. $ ,'AJNO','NCMA','STMA','MOYE','BARY','SEQM'/
  62. *
  63. * Executable statements
  64. *
  65. impr=0
  66. IF (IMPR.Ge.5) WRITE(IOIMP,*) 'Entrée dans propto.eso'
  67. *
  68. * Initialisation des données dans le common TMATOP2
  69. * Attention, il faut mettre les mêmes valeurs par défaut
  70. * que dans ryo2v et prtopv
  71. *
  72. impr=0
  73. iveri=0
  74. isgadj=0
  75. xvtol=1.d-11
  76. qtol=1.d-2
  77. ipvirt=0
  78. imet=0
  79. imomet=0
  80. xdens=0.d0
  81. icmetr=0
  82. ialgo=0
  83. iajno=0
  84. incma=1000
  85. istma=0
  86. imobar=0
  87. iseqm=0
  88. * write(ioimp,*) 'propto : entree =',OOOVAL(2,1)
  89. * Entrees
  90. CALL LIROBJ('MAILLAGE',ITOPO,1,IRETOU)
  91. IF (IERR.NE.0) RETURN
  92. CALL LIROBJ('MAILLAGE',IELEM,1,IRETOU)
  93. IF (IERR.NE.0) RETURN
  94. CALL QUETYP(MTYP,0,IRET)
  95. if (iret.EQ.1) then
  96. if (MTYP.NE.'MOT ') THEN
  97. *
  98. * Lecture de la métrique voulue :
  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. IF (MTYP.EQ.'LOGIQUE ') THEN
  105. call lirlog(lmet,1,IRLOG)
  106. IF (IERR.NE.0) RETURN
  107. ELSEIF (MTYP.EQ.'CHPOINT ') THEN
  108. CALL LIROBJ('CHPOINT',ICMETR,1,IRET)
  109. IF (IERR.NE.0) RETURN
  110. call extr11(icmetr,mlmots)
  111. if (ierr.ne.0) return
  112. segact mlmots
  113. CALL PLACE(MOTS,MOTS(/2),iplac,'G ')
  114. if (iplac.ne.0) then
  115. imet=3
  116. else
  117. imet=4
  118. endif
  119. segsup mlmots
  120. elseif (MTYP.EQ.'FLOTTANT'.OR.MTYP.EQ.'ENTIER') then
  121. call lirree(XDENS,1,IRET)
  122. IF (IERR.NE.0) RETURN
  123. imet=2
  124. else
  125. * 39 2
  126. * On ne veut pas d'objet de type %m1:8
  127. MOTERR(1:8)=MTYP
  128. CALL ERREUR(39)
  129. RETURN
  130. endif
  131. endif
  132. endif
  133. *
  134. * Mots-Clefs
  135. *
  136. 10 continue
  137. call lirmot(mcle,ncle,imot,0)
  138. if (imot.eq.1) then
  139. CALL LIRENT(impr,1,IRET)
  140. IF (IERR.NE.0) RETURN
  141. elseif (imot.eq.2) then
  142. CALL LIRENT(iveri,1,IRET)
  143. IF (IERR.NE.0) RETURN
  144. elseif (imot.eq.3) then
  145. CALL LIRREE(XVTOL,1,IRET)
  146. IF (IERR.NE.0) RETURN
  147. elseif (imot.eq.4) then
  148. CALL LIRREE(QTOL,1,IRET)
  149. IF (IERR.NE.0) RETURN
  150. elseif (imot.eq.5) then
  151. CALL LIROBJ('MAILLAGE',IPVIRT,1,IRET)
  152. IF (IERR.NE.0) RETURN
  153. elseif (imot.eq.6) then
  154. CALL LIRENT(isgadj,1,IRET)
  155. IF (IERR.NE.0) RETURN
  156. elseif (imot.eq.7) then
  157. CALL LIRENT(ialgo,1,IRET)
  158. IF (IERR.NE.0) RETURN
  159. elseif (imot.eq.8) then
  160. CALL LIRENT(iajno,1,IRET)
  161. IF (IERR.NE.0) RETURN
  162. elseif (imot.eq.9) then
  163. CALL LIRENT(incma,1,IRET)
  164. IF (IERR.NE.0) RETURN
  165. elseif (imot.eq.10) then
  166. CALL LIRENT(istma,1,IRET)
  167. IF (IERR.NE.0) RETURN
  168. elseif (imot.eq.11) then
  169. CALL LIRENT(imomet,1,IRET)
  170. IF (IERR.NE.0) RETURN
  171. elseif (imot.eq.12) then
  172. CALL LIRENT(imobar,1,IRET)
  173. IF (IERR.NE.0) RETURN
  174. elseif (imot.eq.13) then
  175. CALL LIRENT(iseqm,1,IRET)
  176. IF (IERR.NE.0) RETURN
  177. elseif (imot.ne.0) then
  178. MOTERR(1:8)=MCLE(imot)
  179. Write(ioimp,*) MOTERR(1:8)
  180. * Option indisponible
  181. CALL ERREUR(19)
  182. RETURN
  183. endif
  184. if (imot.ne.0) goto 10
  185. *
  186. * Test des paramètres
  187. *
  188. *!debug if (impr.ge.3) then
  189. if (impr.ge.2) then
  190. write(ioimp,*) 'Opto parameters :'
  191. write(ioimp,186) 'impr',impr,'iveri',iveri,'ipvirt',ipvirt
  192. $ ,'imet',imet,'isgadj',isgadj,'ialgo',ialgo,'iajno',iajno
  193. $ ,'incma',incma,'istma',istma,'imomet',imomet,'imobar'
  194. $ ,imobar,'iseqm',iseqm
  195. write(ioimp,188) 'xvtol',xvtol,'qtol',qtol
  196. endif
  197. *
  198. * Initialisation des sorties du common
  199. *
  200. jparco=0
  201. jexplo=0
  202. jchang=0
  203. jnascm=0
  204. * Traitement
  205. * En moyenne géométrique, on passe en LOG avant OPTO1
  206. if (imomet.eq.1.and.icmetr.ne.0) then
  207. call ecrcha('LOG')
  208. call ecrobj('CHPOINT',ICMETR)
  209. call prtens
  210. if (ierr.ne.0) return
  211. call lirobj('CHPOINT',ICMTR2,1,IRET)
  212. if (ierr.ne.0) return
  213. else
  214. ICMTR2=ICMETR
  215. endif
  216. * Restituer le CHPOINT sur tous les noeuds ??
  217. CALL OPTO1(ITOPO,IELEM,IPVIRT,ICMTR2,
  218. $ ITOPA,ICMTA2,LTOPA)
  219. IF (IERR.NE.0) RETURN
  220. if (imomet.eq.1.and.icmta2.ne.0) then
  221. call ecrcha('EXP')
  222. call ecrobj('CHPOINT',ICMTA2)
  223. call prtens
  224. if (ierr.ne.0) return
  225. call lirobj('CHPOINT',ICMETA,1,IRET)
  226. if (ierr.ne.0) return
  227. if (icmta2.ne.icmtr2) segsup,icmta2
  228. segsup,icmtr2
  229. else
  230. ICMETA=ICMTA2
  231. endif
  232. * Sorties
  233. CALL ECRENT(JNASCM)
  234. CALL ECRENT(JPARCO)
  235. CALL ECRENT(JCHANG)
  236. CALL ECRENT(JEXPLO)
  237. if (imet.le.2) then
  238. if (irlog.eq.1) then
  239. call ecrlog(lmet)
  240. else
  241. CALL ECRREE(XDENS)
  242. endif
  243. else
  244. CALL ACTOBJ('CHPOINT',ICMETA,1)
  245. CALL ECROBJ('CHPOINT',ICMETA)
  246. endif
  247. * del endif
  248. CALL ACTOBJ('MAILLAGE',ITOPA,1)
  249. CALL ECROBJ('MAILLAGE',ITOPA)
  250. SEGACT LTOPA
  251. NOBJ=LTOPA.LISOBJ(/1)
  252. DO IOBJ=1,NOBJ
  253. MELEME=LTOPA.LISOBJ(IOBJ)
  254. CALL ACTOBJ('MAILLAGE',MELEME,1)
  255. ENDDO
  256. CALL ECROBJ('LISTOBJE',LTOPA)
  257. *
  258. * Normal termination
  259. *
  260. RETURN
  261. *
  262. * Format handling
  263. *
  264. 186 FORMAT (2X,12(A6,'=',I6,2X))
  265. 188 FORMAT (2X,12(A6,'=',1PG12.5,2X))
  266. *
  267. * Error handling
  268. *
  269. 9999 CONTINUE
  270. MOTERR(1:8)='PROPTO '
  271. * 349 2
  272. *Problème non prévu dans le s.p. %m1:8 contactez votre assistance
  273. CALL ERREUR(349)
  274. RETURN
  275. *
  276. * End of subroutine PROPTO
  277. *
  278. END
  279.  
  280.  
  281.  

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