Télécharger pendia.eso

Retour à la liste

Numérotation des lignes :

pendia
  1. C PENDIA SOURCE CB215821 20/11/25 13:35:34 10792
  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. C
  76. C
  77. IMPLICIT INTEGER(I-N)
  78.  
  79. -INC PPARAM
  80. -INC CCOPTIO
  81. -INC SMCHPOI
  82. -INC SMLMOTS
  83. C
  84. C**** Variables de COOPTIO
  85. C
  86. C INTEGER IPLLB, IERPER, IERMAX, IERR, INTERR
  87. C & ,IOTER, IOLEC, IOIMP, IOCAR, IOACQ
  88. C & ,IOPER, IOSGB, IOGRA, IOSAU, IORES
  89. C & ,IECHO, IIMPI, IOSPI
  90. C & ,IDIM
  91. C & ,MCOORD
  92. C & ,IFOMOD, NIFOUR, IFOUR, NSDPGE, IONIVE
  93. C & ,NGMAXY, IZROSF, ISOTYP, IOSCR,LTEXLU
  94. C & ,NORINC,NORVAL,NORIND,NORVAD
  95. C & ,NUCROU, IPSAUV
  96. C
  97. INTEGER IDOMA, IRET1, ICEN, IFACEL, IFACEP, ICELL, ISOMM
  98. & ,ICHPO, ICHGRA, ICOEFF
  99. & ,NBCOMP
  100. & ,ICHCL, ISGLIM, NSOUPO, IMAIL, IMOT
  101.  
  102. C
  103. CHARACTER*(8) MOT,MTYPR
  104. LOGICAL LOGCOE
  105. C+PPb On initialise parceque c'est utile...
  106. MOT=' '
  107. C+PPb
  108. C
  109. C**** Lecture du MELEME SPG des points CENTRE.
  110. C
  111. CALL LEKTAB(IDOMA,'CENTRE',ICEN)
  112. IF(IERR .NE. 0) GOTO 9999
  113. C
  114. C**** Lecture du MELEME SPG des points FACE.
  115. C
  116. CALL LEKTAB(IDOMA,'FACE',IFAC)
  117. IF(IERR .NE. 0) GOTO 9999
  118. C
  119. C**** Lecture du MELEME SPG des points SOMMET
  120. C
  121. CALL LEKTAB(IDOMA,'SOMMET',ISOMM)
  122. IF(IERR .NE. 0) GOTO 9999
  123. C
  124. C**** Lecture du MELEME de connect. FACEL
  125. C
  126. CALL LEKTAB(IDOMA,'FACEL',IFACEL)
  127. IF(IERR .NE. 0) GOTO 9999
  128. C
  129. C**** Lecture du MELEME de connect. FACEP
  130. C
  131. CALL LEKTAB(IDOMA,'FACEP',IFACEP)
  132. IF(IERR .NE. 0) GOTO 9999
  133. C
  134. C**** Lecture du MELEME MAILLAGE
  135. C
  136. CALL LEKTAB(IDOMA,'MAILLAGE',IMAIL)
  137. IF(IERR .NE. 0) GOTO 9999
  138. C
  139. C**** Lecture du CHPOINT dont on veut calculer le gradient!
  140. C
  141. CALL LIROBJ('CHPOINT ',ICHPO,1,IRET1)
  142. CALL ACTOBJ('CHPOINT ',ICHPO,1)
  143. IF(IERR .NE. 0) GOTO 9999
  144. C
  145. C**** Control du CHPOIT
  146. C
  147. MLMOTS=0
  148. CALL QUEPO1(ICHPO, ICEN, MLMOTS)
  149. IMOT=MLMOTS
  150. IF (IERR .NE. 0) GOTO 9999
  151. C En sortie, MLMOTS contient le nom de composantes de ICHPO
  152. SEGACT MLMOTS
  153. NBCOMP = MLMOTS.MOTS(/2)
  154. SEGDES MLMOTS
  155. IF(NBCOMP .GT. 9)THEN
  156. C
  157. C******* Message d'erreur standard
  158. C -301 0 %m1:40
  159. C
  160. MOTERR(1:40) = 'NBCOMP > 9 '
  161. WRITE(IOIMP,*) MOTERR(1:40)
  162. CALL ERREUR(22)
  163. GOTO 9999
  164. ENDIF
  165. C
  166. C**** Lecture du CHPOINT du conditions aux limites (optionel)
  167. C
  168. IRET1=0
  169. CALL LIRCHA(MOT,0,IRET1)
  170. IF(IERR .NE. 0) GOTO 9999
  171. IF(IRET1.NE.0)THEN
  172. IF(MOT .EQ. 'CLIM') THEN
  173. CALL LIROBJ('CHPOINT ',ICHCL,1,ICELL)
  174. CALL ACTOBJ('CHPOINT ',ICHCL,1)
  175. IF(IERR .NE. 0) GOTO 9999
  176. MCHPOI = ICHCL
  177. SEGACT MCHPOI
  178. NSOUPO = MCHPOI.IPCHP(/1)
  179. IF(NSOUPO .EQ. 0) THEN
  180. ICHCL=0
  181. ISGLIM=0
  182. ELSE
  183. MSOUPO=MCHPOI.IPCHP(1)
  184. SEGACT MSOUPO
  185. ISGLIM=MSOUPO.IGEOC
  186. SEGDES MSOUPO
  187. ENDIF
  188. SEGDES MCHPOI
  189. ELSE
  190. C
  191. C******* Je la remets dans la pile
  192. C
  193. CALL ECRCHA(MOT)
  194. IF(IERR .NE. 0) GOTO 9999
  195. ICHCL=0
  196. ISGLIM=0
  197. ENDIF
  198. ELSE
  199. ISGLIM=0
  200. ICHCL=0
  201. ENDIF
  202. C
  203. C**** Control du CHPOIT
  204. C N.B.: MLMOTS contient les composantes de ICHPO
  205. C
  206. IF(ICHCL .GT. 0)THEN
  207. ICELL = 0
  208. CALL QUEPO1(ICHCL, ICELL, MLMOTS)
  209. IF (IERR .NE. 0) GOTO 9999
  210. ENDIF
  211. C
  212. C**** Lecture du MCHAMLs qui contiennent les elements de matrice
  213. C pour le calcul du gradient et (eventuelment) de l'hessian
  214. C
  215. C Si MOT = 'GRADGEO', on a ces MCHAMLs; sinon il faut le calculer
  216. C
  217. CALL LIRCHA(MOT,0,IRET1)
  218. IF(IERR .NE. 0) GOTO 9999
  219. IF(IRET1 .EQ. 0)THEN
  220. LOGCOE = .TRUE.
  221. ELSEIF(MOT .NE. 'GRADGEO')THEN
  222. CALL ECRCHA(MOT)
  223. IF(IERR .NE. 0) GOTO 9999
  224. LOGCOE=.TRUE.
  225. ELSE
  226. LOGCOE=.FALSE.
  227. CALL LIROBJ('MCHAML ',ICOEFF,1,IRET1)
  228. CALL ACTOBJ('MCHAML ',ICOEFF,1)
  229. IF(IERR .NE. 0) GOTO 9999
  230. ENDIF
  231. IF(LOGCOE)THEN
  232. CALL GRADIA(ICEN,ISOMM,IFACEL,IFACEP,IMAIL,ISGLIM,
  233. & ICOEFF)
  234. IF (IERR .NE. 0) GOTO 9999
  235. ENDIF
  236. C
  237. C**** Calcul de gradient
  238. C
  239. CALL PENDI1(IMOT,IFAC,ICHPO,ICHCL,ICOEFF,ICHGRA)
  240. IF(IERR .NE. 0) GOTO 9999
  241. C
  242. C**** Ecriture de gradient, (hessian), (limiteur),
  243. C (MCHAMLs pour le calcul de gradient et/ou du hessian)
  244. C
  245. IF(MOT .NE. 'GRADGEO') THEN
  246. CALL ACTOBJ('MCHAML ',ICOEFF,1)
  247. CALL ECROBJ('MCHAML ',ICOEFF)
  248. IF(IERR .NE. 0) GOTO 9999
  249. ENDIF
  250. CALL ACTOBJ('CHPOINT ',ICHGRA,1)
  251. CALL ECROBJ('CHPOINT ',ICHGRA)
  252. IF(IERR .NE. 0) GOTO 9999
  253. C
  254. SEGSUP MLMOTS
  255. C
  256. C**** Sortie du programme
  257. C
  258. 9999 CONTINUE
  259. END
  260.  
  261.  
  262.  
  263.  

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