Télécharger propto.eso

Retour à la liste

Numérotation des lignes :

propto
  1. C PROPTO SOURCE GOUNAND 24/09/27 21:15:17 12019
  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. -INC SMLMOTS
  47. -INC SMCHPOI
  48. POINTEUR ICMETR.MCHPOI
  49. * METrique sur la topologie Améliorée
  50. POINTEUR ICMETA.MCHPOI
  51. INTEGER IMPR,IRET
  52. integer oooval
  53. parameter(ncle=11)
  54. character*8 mtyp
  55. character*4 mcle(ncle)
  56. logical lmet
  57.  
  58. data mcle /'IMPR','VERI','VTOL','QTOL','VIRT','SGAJ','ALGO'
  59. $ ,'AJNO','NCMA','STMA','MOYE'/
  60. * data mmet /'SANS','DENS','CSTE','ISOT','ANIS'/
  61. *
  62. * Executable statements
  63. *
  64. impr=0
  65. IF (IMPR.Ge.5) WRITE(IOIMP,*) 'Entrée dans propto.eso'
  66. *
  67. * Initialisation des données dans le common TMATOP2
  68. * Attention, il faut mettre les mêmes valeurs par défaut
  69. * que dans ryo2v et prtopv
  70. *
  71. impr=0
  72. iveri=0
  73. isgadj=0
  74. xvtol=1.d-11
  75. qtol=1.d-2
  76. ipvirt=0
  77. imet=0
  78. imomet=0
  79. xdens=0.d0
  80. icmetr=0
  81. ialgo=0
  82. iajno=0
  83. incma=1000
  84. istma=0
  85. * write(ioimp,*) 'propto : entree =',OOOVAL(2,1)
  86. * Entrees
  87. CALL LIROBJ('MAILLAGE',ITOPO,1,IRETOU)
  88. IF (IERR.NE.0) RETURN
  89. CALL LIROBJ('MAILLAGE',IELEM,1,IRETOU)
  90. IF (IERR.NE.0) RETURN
  91. CALL QUETYP(MTYP,0,IRET)
  92. if (iret.EQ.1) then
  93. if (MTYP.NE.'MOT ') THEN
  94. *
  95. * Lecture de la métrique voulue :
  96. c LOG1 : pas de métrique,
  97. c FLOT1 : taille de maille ;
  98. C CHPO1 : inverse de la métrique isotrope, nom de composante G ou
  99. C anisotrope, noms de composante G11, G21, G22, (G31, G32, G33 en
  100. C 3D)
  101. *
  102. IF (MTYP.EQ.'LOGIQUE ') THEN
  103. call lirlog(lmet,1,IRLOG)
  104. IF (IERR.NE.0) RETURN
  105. ELSEIF (MTYP.EQ.'CHPOINT ') THEN
  106. CALL LIROBJ('CHPOINT',ICMETR,1,IRET)
  107. IF (IERR.NE.0) RETURN
  108. call extr11(icmetr,mlmots)
  109. if (ierr.ne.0) return
  110. segact mlmots
  111. CALL PLACE(MOTS,MOTS(/2),iplac,'G ')
  112. if (iplac.ne.0) then
  113. imet=3
  114. else
  115. imet=4
  116. endif
  117. segsup mlmots
  118. elseif (MTYP.EQ.'FLOTTANT'.OR.MTYP.EQ.'ENTIER') then
  119. call lirree(XDENS,1,IRET)
  120. IF (IERR.NE.0) RETURN
  121. imet=2
  122. else
  123. * 39 2
  124. * On ne veut pas d'objet de type %m1:8
  125. MOTERR(1:8)=MTYP
  126. CALL ERREUR(39)
  127. RETURN
  128. endif
  129. endif
  130. endif
  131. *
  132. * Mots-Clefs
  133. *
  134. 10 continue
  135. call lirmot(mcle,ncle,imot,0)
  136. if (imot.eq.1) then
  137. * call lirree(xval,1,iret)
  138. * impr=3
  139. CALL LIRENT(impr,1,IRET)
  140. IF (IERR.NE.0) RETURN
  141. elseif (imot.eq.2) then
  142. * iveri=2
  143. CALL LIRENT(iveri,1,IRET)
  144. IF (IERR.NE.0) RETURN
  145. elseif (imot.eq.3) then
  146. CALL LIRREE(XVTOL,1,IRET)
  147. IF (IERR.NE.0) RETURN
  148. elseif (imot.eq.4) then
  149. CALL LIRREE(QTOL,1,IRET)
  150. IF (IERR.NE.0) RETURN
  151. elseif (imot.eq.5) then
  152. CALL LIROBJ('POINT',IPVIRT,0,IRET)
  153. IF (IERR.NE.0) RETURN
  154. IF (IRET.EQ.0) THEN
  155. CALL LIRENT(IPVIRT,1,IRET)
  156. IF (IERR.NE.0) RETURN
  157. IF (IPVIRT.NE.0) THEN
  158. write(ioimp,*)
  159. $ 'On voulait lire un point ou un entier nul'
  160. goto 9999
  161. ENDIF
  162. ENDIF
  163. elseif (imot.eq.6) then
  164. * isgadj=1
  165. CALL LIRENT(isgadj,1,IRET)
  166. IF (IERR.NE.0) RETURN
  167. elseif (imot.eq.7) then
  168. CALL LIRENT(ialgo,1,IRET)
  169. IF (IERR.NE.0) RETURN
  170. elseif (imot.eq.8) then
  171. CALL LIRENT(iajno,1,IRET)
  172. IF (IERR.NE.0) RETURN
  173. elseif (imot.eq.9) then
  174. CALL LIRENT(incma,1,IRET)
  175. IF (IERR.NE.0) RETURN
  176. elseif (imot.eq.10) then
  177. CALL LIRENT(istma,1,IRET)
  178. IF (IERR.NE.0) RETURN
  179. elseif (imot.eq.11) then
  180. CALL LIRENT(imomet,1,IRET)
  181. IF (IERR.NE.0) RETURN
  182. elseif (imot.ne.0) then
  183. MOTERR(1:8)=MCLE(imot)
  184. Write(ioimp,*) MOTERR(1:8)
  185. * Option indisponible
  186. CALL ERREUR(19)
  187. RETURN
  188. endif
  189. if (imot.ne.0) goto 10
  190. * write(ioimp,*) 'imet=',imet
  191. *
  192. * Test des paramètres
  193. *
  194. *!debug if (impr.ge.3) then
  195. if (impr.ge.2) then
  196. write(ioimp,*) 'Opto parameters :'
  197. write(ioimp,186) 'impr',impr,'iveri',iveri,'ipvirt',ipvirt
  198. $ ,'imet',imet,'isgadj',isgadj,'ialgo',ialgo,'iajno',iajno
  199. $ ,'incma',incma,'istma',istma
  200. write(ioimp,188) 'xvtol',xvtol,'qtol',qtol
  201. endif
  202. *
  203. * Initialisation des sorties du common
  204. *
  205. jparco=0
  206. jexplo=0
  207. jchang=0
  208. jnascm=0
  209. * Traitement
  210. * write(ioimp,*) 'coucou propto, iveri=',iveri
  211. * write(ioimp,*) 'propto : avant opto1 =',OOOVAL(2,1)
  212. * Restituer le CHPOINT sur tous les noeuds ??
  213. CALL OPTO1(ITOPO,IELEM,IPVIRT,ICMETR,
  214. $ ITOPA,ICMETA)
  215. * write(ioimp,*) 'propto : apres opto1 =',OOOVAL(2,1)
  216. IF (IERR.NE.0) RETURN
  217. * Sorties
  218. CALL ECRENT(JNASCM)
  219. CALL ECRENT(JPARCO)
  220. CALL ECRENT(JCHANG)
  221. CALL ECRENT(JEXPLO)
  222. *del if (imet.gt.1) then
  223. if (imet.le.2) then
  224. if (irlog.eq.1) then
  225. call ecrlog(lmet)
  226. else
  227. CALL ECRREE(XDENS)
  228. endif
  229. else
  230. CALL ACTOBJ('CHPOINT',ICMETA,1)
  231. CALL ECROBJ('CHPOINT',ICMETA)
  232. endif
  233. *del endif
  234. CALL ACTOBJ('MAILLAGE',ITOPA,1)
  235. CALL ECROBJ('MAILLAGE',ITOPA)
  236. *
  237. * Normal termination
  238. *
  239. * write(ioimp,*) 'propto : sortie =',OOOVAL(2,1)
  240. RETURN
  241. *
  242. * Format handling
  243. *
  244. 186 FORMAT (2X,12(A6,'=',I6,2X))
  245. 188 FORMAT (2X,12(A6,'=',1PG12.5,2X))
  246. *
  247. * Error handling
  248. *
  249. 9999 CONTINUE
  250. MOTERR(1:8)='PROPTO '
  251. * 349 2
  252. *Problème non prévu dans le s.p. %m1:8 contactez votre assistance
  253. CALL ERREUR(349)
  254. RETURN
  255. *
  256. * End of subroutine PROPTO
  257. *
  258. END
  259.  
  260.  

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