Télécharger pendia.eso

Retour à la liste

Numérotation des lignes :

pendia
  1. C PENDIA SOURCE OF166741 24/12/13 21:16:53 12097
  2. SUBROUTINE PENDIA(IDOMA)
  3. C************************************************************************
  4. C
  5. C PROJET : CASTEM 2000
  6. C
  7. C NOM : PENDIA
  8. C
  9. C DESCRIPTION : Appelle par PENT
  10. C
  11. C LANGAGE : FORTRAN 77 + ESOPE 2000 (avec extensions CISI)
  12. C
  13. C AUTEUR : A. BECCANTINI
  14. C
  15. C************************************************************************
  16. C
  17. C
  18. C************************************************************************
  19. C
  20. C PHRASE D'APPEL (GIBIANE) :
  21. C
  22. C
  23. C RCHPO1 RCHELEM1 = 'PENT'
  24. C MCLE1 MCLE2 MCLE3 TABDO CHPO1 (MCLE4 CHPO2) ;
  25. C
  26. C ou
  27. C
  28. C RCHPO1 = 'PENT'
  29. C MCLE1 MCLE2 MCLE3 TABDO CHPO1 (MCL4 CHPO2) MCLE5 RCHELEM1 ;
  30. C
  31. C
  32. C Entrées:
  33. C
  34. C TABDO : Donnée de la table domaine;
  35. C
  36. C MCLE1 : type du champ par point CHPO1. Pour le moment, seul le type
  37. C 'FACE' est autorisé;
  38. C
  39. C MCLE2 : Traitement des éléments de bord et ordre de précision du
  40. C calcul de gradient . Options sont possibles : 'DIAMANT'
  41. C
  42. C MCLE3 : Calcul ou non du limiteur : 'LIMITEUR' ou 'NOLIMITE';
  43. C
  44. C CHPO1 : Donnée du Champ par point de type MCLE1;
  45. C
  46. C MCLE4 : Donnée ou non du CHPO2
  47. C 'CLIM' si donnée, vide sinon.
  48. C
  49. C CHPO2 : Donnée du Champ par point des conditions aux limites
  50. C
  51. C MCLE4 : Donnée ou non du RCHELEM1:
  52. C 'GRADGEO' si donnée, vide sinon.
  53. C
  54. C
  55. C E/S :
  56. C
  57. C RCHELEM1: Champ par élément des coefficients géométriques pour le
  58. C calcul du gradient (et du hessien)
  59. C (entrée si MCLE4 = 'GRADGEO', sinon sortie).
  60. C
  61. C
  62. C Sorties:
  63. C
  64. C RCHPO1 : Champ par point contenant le gradient de CHPO1 (toujours
  65. C calculé) ;
  66. C
  67. C************************************************************************
  68. C
  69. C HISTORIQUE (Anomalies et modifications éventuelles)
  70. C
  71. C HISTORIQUE : Creé le 2/3/2001
  72. C
  73. C************************************************************************
  74. C
  75. IMPLICIT INTEGER(I-N)
  76.  
  77. -INC PPARAM
  78. -INC CCOPTIO
  79. -INC SMCHPOI
  80. -INC SMLMOTS
  81. C
  82. INTEGER IDOMA, IRET1, ICEN, IFACEL, IFACEP, ICELL, ISOMM
  83. & ,ICHPO, ICHGRA, ICOEFF
  84. & ,NBCOMP
  85. & ,ICHCL, ISGLIM, NSOUPO, IMAIL, IMOT
  86.  
  87. C
  88. CHARACTER*(8) MOT,MTYPR
  89. LOGICAL LOGCOE
  90. C+PPb On initialise parceque c'est utile...
  91. MOT=' '
  92. C+PPb
  93. C
  94. C**** Lecture du MELEME SPG des points CENTRE.
  95. C
  96. CALL LEKTAB(IDOMA,'CENTRE',ICEN)
  97. IF(IERR .NE. 0) GOTO 9999
  98. C
  99. C**** Lecture du MELEME SPG des points FACE.
  100. C
  101. CALL LEKTAB(IDOMA,'FACE',IFAC)
  102. IF(IERR .NE. 0) GOTO 9999
  103. C
  104. C**** Lecture du MELEME SPG des points SOMMET
  105. C
  106. CALL LEKTAB(IDOMA,'SOMMET',ISOMM)
  107. IF(IERR .NE. 0) GOTO 9999
  108. C
  109. C**** Lecture du MELEME de connect. FACEL
  110. C
  111. CALL LEKTAB(IDOMA,'FACEL',IFACEL)
  112. IF(IERR .NE. 0) GOTO 9999
  113. C
  114. C**** Lecture du MELEME de connect. FACEP
  115. C
  116. CALL LEKTAB(IDOMA,'FACEP',IFACEP)
  117. IF(IERR .NE. 0) GOTO 9999
  118. C
  119. C**** Lecture du MELEME MAILLAGE
  120. C
  121. CALL LEKTAB(IDOMA,'MAILLAGE',IMAIL)
  122. IF(IERR .NE. 0) GOTO 9999
  123. C
  124. C**** Lecture du CHPOINT dont on veut calculer le gradient!
  125. C
  126. CALL LIROBJ('CHPOINT ',ICHPO,1,IRET1)
  127. CALL ACTOBJ('CHPOINT ',ICHPO,1)
  128. IF(IERR .NE. 0) GOTO 9999
  129. C
  130. C**** Control du CHPOIT
  131. C
  132. MLMOTS=0
  133. CALL QUEPO1(ICHPO, ICEN, MLMOTS)
  134. IMOT=MLMOTS
  135. IF (IERR .NE. 0) GOTO 9999
  136. C En sortie, MLMOTS contient le nom de composantes de ICHPO
  137. SEGACT MLMOTS
  138. NBCOMP = MLMOTS.MOTS(/2)
  139. SEGDES MLMOTS
  140. IF(NBCOMP .GT. 9)THEN
  141. C
  142. C******* Message d'erreur standard
  143. C -301 0 %m1:40
  144. C
  145. MOTERR(1:40) = 'NBCOMP > 9 '
  146. WRITE(IOIMP,*) MOTERR(1:40)
  147. CALL ERREUR(22)
  148. GOTO 9999
  149. ENDIF
  150. C
  151. C**** Lecture du CHPOINT du conditions aux limites (optionel)
  152. C
  153. IRET1=0
  154. CALL LIRCHA(MOT,0,IRET1)
  155. IF(IERR .NE. 0) GOTO 9999
  156. IF(IRET1.NE.0)THEN
  157. IF(MOT .EQ. 'CLIM') THEN
  158. CALL LIROBJ('CHPOINT ',ICHCL,1,ICELL)
  159. CALL ACTOBJ('CHPOINT ',ICHCL,1)
  160. IF(IERR .NE. 0) GOTO 9999
  161. MCHPOI = ICHCL
  162. SEGACT MCHPOI
  163. NSOUPO = MCHPOI.IPCHP(/1)
  164. IF(NSOUPO .EQ. 0) THEN
  165. ICHCL=0
  166. ISGLIM=0
  167. ELSE
  168. MSOUPO=MCHPOI.IPCHP(1)
  169. SEGACT MSOUPO
  170. ISGLIM=MSOUPO.IGEOC
  171. SEGDES MSOUPO
  172. ENDIF
  173. SEGDES MCHPOI
  174. ELSE
  175. C
  176. C******* Je la remets dans la pile
  177. C
  178. CALL ECRCHA(MOT)
  179. IF(IERR .NE. 0) GOTO 9999
  180. ICHCL=0
  181. ISGLIM=0
  182. ENDIF
  183. ELSE
  184. ISGLIM=0
  185. ICHCL=0
  186. ENDIF
  187. C
  188. C**** Control du CHPOIT
  189. C N.B.: MLMOTS contient les composantes de ICHPO
  190. C
  191. IF(ICHCL .GT. 0)THEN
  192. ICELL = 0
  193. CALL QUEPO1(ICHCL, ICELL, MLMOTS)
  194. IF (IERR .NE. 0) GOTO 9999
  195. ENDIF
  196. C
  197. C**** Lecture du MCHAMLs qui contiennent les elements de matrice
  198. C pour le calcul du gradient et (eventuelment) de l'hessian
  199. C
  200. C Si MOT = 'GRADGEO', on a ces MCHAMLs; sinon il faut le calculer
  201. C
  202. CALL LIRCHA(MOT,0,IRET1)
  203. IF(IERR .NE. 0) GOTO 9999
  204. IF(IRET1 .EQ. 0)THEN
  205. LOGCOE = .TRUE.
  206. ELSEIF(MOT .NE. 'GRADGEO')THEN
  207. CALL ECRCHA(MOT)
  208. IF(IERR .NE. 0) GOTO 9999
  209. LOGCOE=.TRUE.
  210. ELSE
  211. LOGCOE=.FALSE.
  212. CALL LIROBJ('MCHAML ',ICOEFF,1,IRET1)
  213. CALL ACTOBJ('MCHAML ',ICOEFF,1)
  214. IF(IERR .NE. 0) GOTO 9999
  215. ENDIF
  216. IF(LOGCOE)THEN
  217. CALL GRADIA(ICEN,ISOMM,IFACEL,IFACEP,IMAIL,ISGLIM,
  218. & ICOEFF)
  219. IF (IERR .NE. 0) GOTO 9999
  220. ENDIF
  221. C
  222. C**** Calcul de gradient
  223. C
  224. CALL PENDI1(IMOT,IFAC,ICHPO,ICHCL,ICOEFF,ICHGRA)
  225. IF(IERR .NE. 0) GOTO 9999
  226. C
  227. C**** Ecriture de gradient, (hessian), (limiteur),
  228. C (MCHAMLs pour le calcul de gradient et/ou du hessian)
  229. C
  230. IF(MOT .NE. 'GRADGEO') THEN
  231. CALL ACTOBJ('MCHAML ',ICOEFF,1)
  232. CALL ECROBJ('MCHAML ',ICOEFF)
  233. IF(IERR .NE. 0) GOTO 9999
  234. ENDIF
  235. CALL ACTOBJ('CHPOINT ',ICHGRA,1)
  236. CALL ECROBJ('CHPOINT ',ICHGRA)
  237. IF(IERR .NE. 0) GOTO 9999
  238. C
  239. SEGSUP MLMOTS
  240. C
  241. C**** Sortie du programme
  242. C
  243. 9999 CONTINUE
  244. END
  245.  
  246.  
  247.  
  248.  
  249.  

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