Télécharger tcrr.eso

Retour à la liste

Numérotation des lignes :

tcrr
  1. C TCRR SOURCE CB215821 20/11/25 13:40:48 10792
  2. SUBROUTINE TCRR
  3. C-----------------------------------------------------------------------
  4. C Test de convergence et mise à jour avec relaxation éventuelle des
  5. C CHPOINT contenu dans la table de sous type INCO.
  6. C-----------------------------------------------------------------------
  7. C
  8. C---------------------------
  9. C Phrase d'appel (GIBIANE) :
  10. C---------------------------
  11. C
  12. C FLOT1 = TCRR CHPO1 ( FLOT2 ) TAB1 ( 'IMPR' ENT1 ) ;
  13. C
  14. C------------------------
  15. C Opérandes et résultat :
  16. C------------------------
  17. C
  18. C E/ CHPO1 : CHPOINT contenant les nouvelles inconnues
  19. C E/ FLOT2 : REEL contenant le coefficient de relaxation (défaut 1.)
  20. C E/ ENT1 : ENTIER contenant la fréquence des impressions de controle
  21. C (suit le mot clé IMPR; si donné COMME SI ENT1=1)
  22. C E/S TAB1 : TABLE de sous type INCO contenant l'ensemble des champs
  23. C /S FLOT1 : REEL contenant l'erreur relative max
  24. C
  25. C----------------------------
  26. C Indices de table modifiés :
  27. C----------------------------
  28. C
  29. C Indices de la table INCO correspondant à une composante de CHPO1.
  30. C
  31. C--------------------------------
  32. C Infos sur le calcul d'erreurs :
  33. C--------------------------------
  34. C
  35. C Pour chaque composante, si CP est la nouvelle valeur à considérer
  36. C (i.e. après relaxation éventuelle) et CM l'ancienne valeur alors
  37. C on calcul MAX(CP) et ERCP=MAX(CP-CM)/MAX(CP), FLOT1 étant le maximum
  38. C des ERCP.
  39. C
  40. C-----------------------------------------------------------------------
  41. IMPLICIT INTEGER(I-N)
  42. IMPLICIT REAL*8 (A-H,O-Z)
  43. C
  44. -INC PPARAM
  45. -INC CCOPTIO
  46. -INC SMLENTI
  47. -INC SMTABLE
  48. -INC SMCHPOI
  49. -INC SMELEME
  50. C
  51. PARAMETER (NTB=1)
  52. DIMENSION KTAB(NTB)
  53. CHARACTER*8 LTAB(NTB)
  54. DATA LTAB /'INCO '/
  55.  
  56. CHARACTER*8 TYPE,TYP0,NOM
  57. CHARACTER*(LOCOMP) NOMI,MOCOMP,NOMMAX
  58. LOGICAL LDUPL
  59. C
  60. C- Initialisations
  61. C
  62. MLENTI = 0
  63. IPT1 = 0
  64. C
  65. C- Lecture de la table INCO
  66. C
  67. NTO = 1
  68. CALL LITABS(LTAB,KTAB,NTB,NTO,IRET)
  69. IF (IRET.EQ.0) RETURN
  70. C
  71. C- Lecture facultative du coefficient de relaxation
  72. C
  73. CALL LIRREE(OMEGA,0,IRET)
  74. IF (IRET.EQ.0) THEN
  75. OMEGA = 1.D0
  76. ENDIF
  77. OMEG1 = 1.D0 - OMEGA
  78. C
  79. C- Lecture facultative des fréquences d'impression de controle
  80. C
  81. CALL LIRCHA(NOM,0,IRET)
  82. IMPR = 0
  83. IF (IRET.EQ.0) THEN
  84. IMPR = 0
  85. ELSEIF (NOM.EQ.'IMPR ') THEN
  86. CALL LIRENT(IMPR,1,IRET)
  87. IF (IRET.EQ.0) RETURN
  88. ENDIF
  89. C
  90. C- Lecture du champoint contenant les nouveaux champs
  91. C
  92. CALL LIROBJ('CHPOINT',MCHPOI,1,IRET)
  93. IF (IERR.NE.0) RETURN
  94. SEGACT MCHPOI
  95. NSOUPO = IPCHP(/1)
  96. C
  97. C- Index de la table INCO (cf opérateur INDEX)
  98. C
  99. MTAB1 = KTAB(1)
  100. SEGACT MTAB1
  101. NBINC1 = MTAB1.MLOTAB
  102. CALL ECROBJ('TABLE ',MTAB1)
  103. CALL INDETA
  104. TYPE='TABLE '
  105. CALL LIROBJ(TYPE,MTAB2,1,IRET)
  106. SEGACT MTAB2
  107. C
  108. C--------------------------------
  109. C= Calcul d'erreurs et relaxation
  110. C--------------------------------
  111. C
  112. ERLM = 0.D0
  113. NOMMAX = ' '
  114. IPTMAX = 0
  115. DO 70 K=1,NBINC1
  116. CALL ACEM(MTAB2,K,NOMI)
  117. C write(6,*)'NOMI=',NOMI
  118. TYPE=' '
  119. CALL ACMO(MTAB1,NOMI,TYPE,MCHPO1)
  120. IF (TYPE.EQ.'CHPOINT ') THEN
  121. LDUPL=.FALSE.
  122. C
  123. C- LICHT active le MPOVAL du CHPOINT de pointeur MCHPO1
  124. C
  125.  
  126. C CALL LICHT(MCHPO1,MPOVA1,TYP0,IGEOM)
  127. * gounand 07/12/2012 : dans TCRR, on change de stratégie et on crée un
  128. * chpoint tout neuf, cela permet d'éviter les appels à COPIER dans TCNM
  129. * et dans les procédures utilisateurs. On pourra aussi se référer au
  130. * pointeur pour préconditionner.
  131. SEGACT MCHPO1
  132. NSOUP1=MCHPO1.IPCHP(/1)
  133. IF(NSOUP1.EQ.0)GO TO 70
  134. DO 71 KNL=1,NSOUP1
  135. MSOUP1=MCHPO1.IPCHP(KNL)
  136. SEGACT MSOUP1
  137. MPOVA1=MSOUP1.IPOVAL
  138. IGEOM =MSOUP1.IGEOC
  139. IF(MPOVA1.EQ.0)GO TO 71
  140. * SEGACT,MPOVA1*MOD
  141. SEGACT,MPOVA1
  142. C
  143. C- KRIPAD donne le LISTENTI de correspondance
  144. C- entre les numérotations locale et globale
  145. C
  146. IF (IGEOM.NE.IPT1) THEN
  147. IF (IPT1.NE.0) SEGSUP MLENTI
  148. IPT1 = IGEOM
  149. CALL KRIPAD(IGEOM,MLENTI)
  150.  
  151. ENDIF
  152. NPT = MPOVA1.VPOCHA(/1)
  153. NCI = MPOVA1.VPOCHA(/2)
  154. DO 60 I=1,NCI
  155. C
  156. C- CONVENTION sur les noms de composantes des champoints :
  157. C- CHPOINT scalaire -> indice de la table INCO
  158. C- CHPOINT vecteur -> rang de la composante + 3 premières lettres
  159. C- du nom de l'indice de la table INCO
  160. C
  161. IF (NCI.NE.1) THEN
  162. WRITE(MOCOMP,FMT='(I1)')I
  163. MOCOMP=MOCOMP(1:1)//NOMI(1:LOCOMP-1)
  164. ELSE
  165. MOCOMP=NOMI
  166. ENDIF
  167. C
  168. C- Recherche de la composante de nom MOCOMP. Si on la trouve, relaxation
  169. C- et calcul d'erreurs
  170. C
  171. DO 50 L=1,NSOUPO
  172. MSOUPO = IPCHP(L)
  173. SEGACT MSOUPO
  174. NC = NOCOMP(/2)
  175. DO 10 J=1,NC
  176. IF (NOCOMP(J).EQ.MOCOMP) GOTO 20
  177. 10 CONTINUE
  178. GOTO 40
  179. 20 CONTINUE
  180. *
  181. * Si on a trouvé une composante, on duplique MPOVA1 après le VERPAD
  182. *
  183. MELEME = IGEOC
  184. CALL VERPAD(MLENTI,MELEME,IRET)
  185. IF(IRET.NE.0)THEN
  186. C Indice %m1:8 : L'objet %m9:16 n'a pas le bon support géométrique
  187. MOTERR(1: 8) = 'INC '//MOCOMP
  188. MOTERR(9:16) = 'CHPOINT '
  189. CALL ERREUR(788)
  190. RETURN
  191. ENDIF
  192. * duplication
  193. SEGINI,MPOVA2=MPOVA1
  194. MPOVA1=MPOVA2
  195. IF (.NOT.LDUPL) THEN
  196. *dbg WRITE(IOIMP,*) 'LDUPL NOMI=',NOMI
  197. SEGINI,MSOUP2=MSOUP1
  198. MSOUP1=MSOUP2
  199. SEGINI,MCHPO2=MCHPO1
  200. MCHPO1=MCHPO2
  201. CALL ECMO(MTAB1,NOMI,TYPE,MCHPO1)
  202. MCHPO1.IPCHP(KNL)=MSOUP1
  203. LDUPL=.TRUE.
  204. ENDIF
  205. MSOUP1.IPOVAL=MPOVA1
  206. *
  207. SEGACT MELEME
  208. MPOVAL = IPOVAL
  209. SEGACT MPOVAL
  210. NPT = VPOCHA(/1)
  211. VMAX = 0.D0
  212. ERMAX = 0.D0
  213. C write(6,*)' On relaxe NOMI MOCOMP =',NOMI,MOCOMP
  214. DO 30 M=1,NPT
  215. MI = LECT(NUM(1,M))
  216. IF(MI.EQ.0)GO TO 30
  217. A = OMEGA*VPOCHA(M,J) + OMEG1*MPOVA1.VPOCHA(MI
  218. $ ,I)
  219. AA = ABS(A)
  220. ER = A - MPOVA1.VPOCHA(MI,I)
  221. ER = ABS(ER)
  222. IF (ERMAX.LT.ER) THEN
  223. ERMAX = ER
  224. MER = MI
  225. ENDIF
  226. IF (AA.GT.VMAX) THEN
  227. VMAX = AA
  228. MMAX = MI
  229. ENDIF
  230. MPOVA1.VPOCHA(MI,I) = A
  231. 30 CONTINUE
  232. ERL = ERMAX / (VMAX+1.D-30)
  233. IF (IMPR.GE.2) THEN
  234. WRITE(6,1000)MOCOMP,ERMAX,MER,ERL,VMAX,MMAX
  235. ENDIF
  236. IF (ERL.GT.ERLM) THEN
  237. ERLM = ERL
  238. NOMMAX = MOCOMP
  239. IPTMAX = MMAX
  240. ENDIF
  241. 40 CONTINUE
  242. 50 CONTINUE
  243. 60 CONTINUE
  244. 71 CONTINUE
  245. ENDIF
  246. 70 CONTINUE
  247. C
  248. C- Affichage de l'erreur globale, ECRITURE et ménage
  249. C
  250. IF(IMPR.GE.1)WRITE(6,1010)NOMMAX,ERLM,IPTMAX
  251. CALL ECRREE(ERLM)
  252. IF (MLENTI.NE.0) SEGSUP MLENTI
  253. SEGDES MTAB1
  254. SEGSUP MTAB2
  255. C
  256. RETURN
  257. 1000 FORMAT(' Comp : ',A8,' Err max : ',1PE8.1,' Pt ',I9,' Err % : ',
  258. & 1PE8.1,' Vmax : ',1PE8.1,' Pt ',I9)
  259. 1010 FORMAT(' Erreur relative maximale : sur la composante ',
  260. & A4,1PE8.1,' Pt ',I9)
  261. END
  262.  
  263.  
  264.  
  265.  

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