Télécharger fcourant.procedur

Retour à la liste

Numérotation des lignes :

  1. * FCOURANT PROCEDUR GOUNAND 18/10/25 21:15:01 9973
  2. ************************************************************************
  3. * NOM : FCOURANT
  4. * DESCRIPTION : Calcul la fonction de courant en 2D et 2D Axi
  5. * par une méthode d'éléments finis moindres carrés
  6. *
  7. * LANGAGE : GIBIANE-CAST3M
  8. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  9. * mél : gounand@semt2.smts.cea.fr
  10. **********************************************************************
  11. * VERSION : v1, 22/11/2007, version initiale
  12. * HISTORIQUE : v1, 22/11/2007, création
  13. * HISTORIQUE : 2018/10/15 : 2eme forme en axi + (fiche 9973)
  14. * composantes UR et UZ par defaut
  15. * recodage, utilisation RESO par defaut, utilisation GIBI.ERREUR
  16. * HISTORIQUE :
  17. ************************************************************************
  18. *
  19. * Procedure fonction de courant 2D et 2D axi
  20. *
  21. * psi est la fonction de courant (streamfunction)
  22. * en 2D, on résout : dpsi/dx = u_y
  23. * dpsi/dy = - u_x
  24. *
  25. * psi est la fonction de courant (Stokes streamfunction)
  26. * B_\theta = psi / r est le potentiel vecteur (B_r = B_z =0)
  27. *
  28. *
  29. * en 2D axi , on résout soit la forme "regularisee" :
  30. * dpsi/dr = 2 pi r u_z
  31. * dpsi/dz = - 2 pi r u_r
  32. * soit la forme "normale" :
  33. * ou : 1/(2 pi r) dpsi/dr = u_z
  34. * 1/(2 pi r) dpsi/dz = - u_r
  35. *
  36. * Par defaut on resout la forme regularisee. On ne le met pas dans la
  37. * notice par souci de simplicite.
  38. *
  39. *
  40. 'DEBPROC' FCOURANT ;
  41. *
  42. 'ARGUMENT' mail*'MAILLAGE' ;
  43. disc = DEADUTIL 'TYPM' mail ;
  44. mquaf = 'CHAN' mail 'QUAF' ;
  45. 'ARGUMENT' un*'CHPOINT' ;
  46. *
  47. * Verif que un est bien defini sur mail
  48. *
  49. mun = 'EXTR' un 'MAIL' ;
  50. pmail = 'CHAN' mail 'POI1' ; pmun = 'CHAN' mun 'POI1' ;
  51. minter = 'INTE' pmail pmun ;
  52. mnoun = 'DIFF' pmail minter ;
  53. 'SI' ('>' ('NBEL' mnoun) 0) ;
  54. nnoex = 'POIN' mnoun 1 ;
  55. * 771 0 ATTENTION !!! Le CHPOINT ne definit pas de valeur au noeud %i1
  56. 'ERRE' 771 'AVEC' nnoex ;
  57. 'FINS' ;
  58. *
  59. 'ARGUMENT' rigblo/'RIGIDITE' ;
  60. lrb = 'EXISTE' rigblo ;
  61. 'SI' lrb ;
  62. 'ARGUMENT' chblo/'CHPOINT' ;
  63. lcb = 'EXISTE' chblo ;
  64. 'SINON' ;
  65. lcb = FAUX ;
  66. 'FINSI' ;
  67. *
  68. 'SI' ('NON' ('EXISTE' rigblo)) ;
  69. pref = 'POIN' ('CHANGER' mail 'POI1') 1 ;
  70. rigblo = 'BLOQ' 'T' pref ;
  71. 'FINSI' ;
  72. *
  73. 'ARGUMENT' rvm/'TABLE' ;
  74. 'SI' ('NON' ('EXISTE' rvm)) ;
  75. typsolv = 0 ;
  76. 'SINO' ;
  77. typsolv = 1 ;
  78. 'FINSI' ;
  79. *
  80. dim = 'VALEUR' 'DIME' ;
  81. *
  82. 'SI' ('NEG' dim 2) ;
  83. * 709 2
  84. * Fonction indisponible en dimension %i1.
  85. 'ERREUR' 709 'AVEC' dim ;
  86. 'FINSI' ;
  87. *
  88. laxi = 'EGA' ('VALEUR' 'MODE') 'AXIS' ;
  89. *
  90. 'SI' laxi ;
  91. ncr = 'MOTS' 'UR' ; ncz = 'MOTS' 'UZ' ;
  92. * Forme regularisee ou normale
  93. 'ARGU' mform/'MOT' ;
  94. 'SI' ('NON' ('EXIS' mform)) ;
  95. mform = 'REGU' ;
  96. 'FINS' ;
  97. lform = 'MOTS' 'REGU' 'NORM' ;
  98. iform = 'POSI' mform 'DANS' lform ;
  99. *1052 2
  100. *Mot-cle incorrect "%M1:4". Voici la liste des valeurs admises :
  101. *1052 2
  102. *%M5:40
  103. 'SI' ('EGA' iform 0) ;
  104. 'ERRE' 1052 'AVEC' ('CHAI' mform 'REGU NORM') ;
  105. 'FINS' ;
  106. * iform = 0 : régularisée
  107. * iform = 1 : standard
  108. *dbg 'SI' ('EGA' iform 1) ;
  109. *dbg 'MESS' 'FCOURANT Axi : forme regularisee' ;
  110. *dbg 'SINO' ;
  111. *dbg 'MESS' 'FCOURANT Axi : forme normale' ;
  112. *dbg 'FINS' ;
  113. * Si on ne trouve pas de composantes UR ou UZ dans le champ un en entree
  114. * mais des composantes UX,UY alors on les autorise car c'est la
  115. * convention de nommage avec EQEX et EXEC...
  116. ncun = 'EXTR' un 'COMP' ;
  117. 'SI' ('NON' ('EXIS' (ncr 'ET' ncz) ncun 'OU')) ;
  118. 'SI' ('EXIS' ('MOTS' 'UX' 'UY') ncun 'ET') ;
  119. ncr = 'MOTS' 'UX' ; ncz = 'MOTS' 'UY' ;
  120. 'FINS' ;
  121. 'FINS' ;
  122. *
  123. cdpr = '*' ('COORDONNEE' 1 mail) ('*' PI 2.D0) ;
  124. *
  125. 'SI' ('EGA' iform 1) ;
  126. * Cas 2D Axi Forme regularisee
  127. numop = 2 ; numvar = 1 ; numder = 2 ;
  128. numdat = 1 ; numcof = 1 ;
  129. *
  130. A = ININLIN numop numvar numdat numcof numder ;
  131. A . 'VAR' . 1 . 'NOMDDL' = 'MOTS' 'T' ;
  132. A . 'VAR' . 1 . 'DISC' = disc ;
  133. *
  134. A . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'DUMM' ;
  135. A . 'DAT' . 1 . 'DISC' = 'CSTE' ;
  136. A . 'DAT' . 1 . 'VALEUR' = -1. ;
  137. A . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
  138. A . 'COF' . 1 . 'LDAT' = 'LECT' 1 ;
  139. *
  140. A . 1 . 1 . 1 = 'LECT' ;
  141. A . 2 . 1 . 2 = 'LECT' 1 ;
  142. *
  143. numdat = 2 ; numcof = 2 ;
  144. B = ININLIN numop numvar numdat numcof numder ;
  145. B . 'VAR' . 1 . 'NOMDDL' = 'MOTS' 'Q' ;
  146. B . 'VAR' . 1 . 'DISC' = disc ;
  147. *
  148. B . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'DUMM' ;
  149. B . 'DAT' . 1 . 'DISC' = 'CSTE' ;
  150. B . 'DAT' . 1 . 'VALEUR' = -1. ;
  151. B . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
  152. B . 'COF' . 1 . 'LDAT' = 'LECT' 1 ;
  153. *
  154. B . 'DAT' . 2 . 'NOMDDL' = 'MOTS' 'SCAL' ;
  155. B . 'DAT' . 2 . 'DISC' = disc ;
  156. B . 'DAT' . 2 . 'VALEUR' = cdpr ;
  157. B . 'COF' . 2 . 'COMPOR' = 'IDEN' ;
  158. B . 'COF' . 2 . 'LDAT' = 'LECT' 2 ;
  159. *
  160. B . 1 . 1 . 1 = 'LECT' 2 ;
  161. B . 2 . 1 . 2 = 'LECT' 1 2 ;
  162. *
  163. numvar = 2 ; numdat = 1 ; numcof = 1 ;
  164. C = ININLIN numop numvar numdat numcof numder ;
  165. C . 'VAR' . 1 . 'NOMDDL' = ncr ;
  166. C . 'VAR' . 1 . 'DISC' = disc ;
  167. C . 'VAR' . 1 . 'VALEUR' = un ;
  168. C . 'VAR' . 2 . 'NOMDDL' = ncz ;
  169. C . 'VAR' . 2 . 'DISC' = disc ;
  170. C . 'VAR' . 2 . 'VALEUR' = un ;
  171. C . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
  172. C . 'DAT' . 1 . 'DISC' = disc ;
  173. C . 'DAT' . 1 . 'VALEUR' = cdpr ;
  174. C . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
  175. C . 'COF' . 1 . 'LDAT' = 'LECT' 1 ;
  176. *
  177. C . 1 . 2 . 0 = 'LECT' 1 ;
  178. C . 2 . 1 . 0 = 'LECT' 1 ;
  179. 'SINO' ;
  180. * Cas 2D Axi Forme normale
  181. numop = 2 ; numvar = 1 ; numder = 2 ;
  182. numdat = 2 ; numcof = 2 ;
  183. *
  184. A = ININLIN numop numvar numdat numcof numder ;
  185. A . 'VAR' . 1 . 'NOMDDL' = 'MOTS' 'T' ;
  186. A . 'VAR' . 1 . 'DISC' = disc ;
  187. *
  188. A . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'DUMM' ;
  189. A . 'DAT' . 1 . 'DISC' = 'CSTE' ;
  190. A . 'DAT' . 1 . 'VALEUR' = -1. ;
  191. A . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
  192. A . 'COF' . 1 . 'LDAT' = 'LECT' 1 ;
  193. *
  194. A . 'DAT' . 2 . 'NOMDDL' = 'MOTS' 'SCAL' ;
  195. A . 'DAT' . 2 . 'DISC' = disc ;
  196. A . 'DAT' . 2 . 'VALEUR' = cdpr ;
  197. A . 'COF' . 2 . 'COMPOR' = 'IDEN' ;
  198. A . 'COF' . 2 . 'LDAT' = 'LECT' 2 ;
  199. A . 1 . 1 . 1 = 'LECT' -2 ;
  200. A . 2 . 1 . 2 = 'LECT' 1 -2 ;
  201. *
  202. numdat = 1 ; numcof = 1 ;
  203. B = ININLIN numop numvar numdat numcof numder ;
  204. B . 'VAR' . 1 . 'NOMDDL' = 'MOTS' 'Q' ;
  205. B . 'VAR' . 1 . 'DISC' = disc ;
  206. *
  207. B . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'DUMM' ;
  208. B . 'DAT' . 1 . 'DISC' = 'CSTE' ;
  209. B . 'DAT' . 1 . 'VALEUR' = -1. ;
  210. B . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
  211. B . 'COF' . 1 . 'LDAT' = 'LECT' 1 ;
  212. *
  213. B . 1 . 1 . 1 = 'LECT' ;
  214. B . 2 . 1 . 2 = 'LECT' 1 ;
  215. *
  216. numvar = 2 ; numdat = 0 ; numcof = 0 ;
  217. C = ININLIN numop numvar numdat numcof numder ;
  218. C . 'VAR' . 1 . 'NOMDDL' = ncr ;
  219. C . 'VAR' . 1 . 'DISC' = disc ;
  220. C . 'VAR' . 1 . 'VALEUR' = un ;
  221. C . 'VAR' . 2 . 'NOMDDL' = ncz ;
  222. C . 'VAR' . 2 . 'DISC' = disc ;
  223. C . 'VAR' . 2 . 'VALEUR' = un ;
  224. *
  225. C . 1 . 2 . 0 = 'LECT' ;
  226. C . 2 . 1 . 0 = 'LECT' ;
  227. 'FINS' ;
  228. *
  229. 'SINON' ;
  230. * Cas 2D PLAN
  231. ncx = 'MOTS' 'UX' ; ncy = 'MOTS' 'UY' ;
  232. *
  233. numop = 2 ; numvar = 1 ; numder = 2 ;
  234. numdat = 1 ; numcof = 1 ;
  235. *
  236. A = ININLIN numop numvar numdat numcof numder ;
  237. A . 'VAR' . 1 . 'NOMDDL' = 'MOTS' 'T' ;
  238. A . 'VAR' . 1 . 'DISC' = disc ;
  239. A . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'DUMM' ;
  240. A . 'DAT' . 1 . 'DISC' = 'CSTE' ;
  241. A . 'DAT' . 1 . 'VALEUR' = -1 ;
  242. A . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
  243. A . 'COF' . 1 . 'LDAT' = 'LECT' 1 ;
  244.  
  245. A . 1 . 1 . 1 = 'LECT' ;
  246. A . 2 . 1 . 2 = 'LECT' 1 ;
  247. *
  248. B = ININLIN numop numvar numdat numcof numder ;
  249. B . 'VAR' . 1 . 'NOMDDL' = 'MOTS' 'Q' ;
  250. B . 'VAR' . 1 . 'DISC' = disc ;
  251. B . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'DUMM' ;
  252. B . 'DAT' . 1 . 'DISC' = 'CSTE' ;
  253. B . 'DAT' . 1 . 'VALEUR' = -1 ;
  254. B . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
  255. B . 'COF' . 1 . 'LDAT' = 'LECT' 1 ;
  256.  
  257. B . 1 . 1 . 1 = 'LECT' ;
  258. B . 2 . 1 . 2 = 'LECT' 1 ;
  259. *
  260. numvar = 2 ; numdat = 0 ; numcof = 0 ;
  261. C = ININLIN numop numvar numdat numcof numder ;
  262. C . 'VAR' . 1 . 'NOMDDL' = ncx ;
  263. C . 'VAR' . 1 . 'DISC' = disc ;
  264. C . 'VAR' . 1 . 'VALEUR' = un ;
  265. C . 'VAR' . 2 . 'NOMDDL' = ncy ;
  266. C . 'VAR' . 2 . 'DISC' = disc ;
  267. C . 'VAR' . 2 . 'VALEUR' = un ;
  268. *
  269. C . 1 . 2 . 0 = 'LECT' ;
  270. C . 2 . 1 . 0 = 'LECT' ;
  271. 'FINSI' ;
  272. *
  273. mat = NLINP mquaf disc A B 'GAU7' ;
  274. * Remettre la symetrie si necessaire
  275. * Au 2018/10/19 : le test de symetrie de RESO est assez contraignant
  276. * pour que cela ne marche pas !
  277. *lpri = 'EXTR' mat 'COMP' ;
  278. *ldua = 'EXTR' mat 'COMP' 'DUAL' ;
  279. *mat = 'CHAN' 'INCO' mat lpri lpri ldua ldua 'SYME' ;
  280. *old mat = 'KOPS' 'RIMA' mat ;
  281. smb = NLINP mquaf disc C B 'GAU7' ;
  282. mtot = mat 'ET' rigblo ;
  283. ftot = smb ;
  284. 'SI' lcb ;
  285. ftot = 'ET' ftot chblo ;
  286. 'FINS' ;
  287. *
  288. 'SI' ('EGA' typsolv 0) ;
  289. solt = 'RESO' mtot ftot ;
  290. 'SINO' ;
  291. solt = 'KRES' mtot 'TYPI' rvm 'SMBR' ftot ;
  292. 'FINS' ;
  293. psi = 'EXCO' 'T' solt 'PSI' ;
  294. 'RESPRO' psi ;
  295. *
  296. 'FINPROC' ;
  297.  
  298.  
  299.  

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