Télécharger mag_nlin.procedur

Retour à la liste

Numérotation des lignes :

  1. * MAG_NLIN PROCEDUR FANDEUR 14/10/10 21:15:16 8178
  2. 'DEBPROC' MAG_NLIN ETAB*'TABLE ' ;
  3. *********************************************************************
  4. * estimation de mu aux points de gauss
  5. * multi-materiaux ferro_magnetiques
  6. * materiaux isotropes ou orthotropes
  7. *********************************************************************
  8. *----------------------------------------------------------------------*
  9. * *
  10. *
  11. * PB MAGNETOSTATIQUE 2D ou 3D
  12. * --------------- *
  13. * *
  14. * RESOLUTION D'UN PROBLEME DE MAGNETOSTATIQUE NON-LINEAIRE *
  15. * EN REGIME PERMANENT,A L'AIDE DE LA METHODE DU POINT FIXE *
  16. * ETAB, TABLE CONTENANT EN ENTREE : *
  17. * OBLIGATOIRE *
  18. * INDICE 'SOUSTYPE' THERMIQUE *
  19. * INDICE 'AXI ' LOGIQUE VRAI EN 2D SI AXISYM ( PLAN DEFAUT) *
  20. * *
  21. * INDICE 'TABNUSEC' TABLE DES MATERIAUX FER INDICEE /MODELE *
  22. * OPTIONNEL *
  23. * INDICE 'CRITERE' CRITERE DE CONVERGENCE (10E-5 PAR DEFAUT) *
  24. * INDICE 'OME' POUR 2D UNIQUEMENT *
  25. * COEFF AMORTISSEMENT OSCI 0< OME < 1. *
  26. * *
  27. * INDICE 'NITER' REACTUALISATION DE LA CONDUCTIVITE TOUTES *
  28. * LES NITER ITERATIONS (NITER=1 PAR DEFAUT) *
  29. * INDICE 'NIVEAU' NIVEAU DE MESSAGES (NIVEAU=0 PAR DEFAUT) *
  30. * INDICE 'ITERMAX' NOMBRE D'ITERATIONS MAXIMUM *
  31. * (ITERMAX=10 PAR DEFAUT) *
  32. ************************************************************************
  33. * arguments fabriques dans les passages soit ds pot_vect ou pot_scal *
  34. * INDICE 'FLUX' FLUX EQUIVALENTS *
  35. * INDICE 'BLOQUE' MATRICE DE BLOCAGE (CREEE PAR "BLOQUE") *
  36. * INDICE 'IMPOSE' VALEURS IMPOSEES (CREE PAR "DEPI") *
  37. * INDICE 'RIGCON ' RAIDEUR CONSTANTE *
  38. * INDICE 'RIGFER ' RAIDEUR VARIABLE *
  39. * ETAB CONTENANT EN SORTIE : *
  40. * *
  41. * INDICE 'POTENTIEL' POTENTIEL RESULTAT *
  42. *----------------------------------------------------------------------*
  43. CONVERGE = FAUX ;ETAB.'CONV'= FAUX ;
  44. 'REPETER' PROC 1 ;
  45. 'SI' ( 'NEG' ( ETAB.'SOUSTYPE' ) 'THERMIQUE' ) ;
  46. 'MESS' 'SOUS TYPAGE INCORRECT DE LA TABLE EN ENTREE|' ;
  47. 'QUITTER' PROC ;
  48. 'FINSI' ;
  49. 'SI' ( 'EXISTE' ETAB 'NIVEAU' ) ;
  50. NIV_MESS = ETAB.'NIVEAU' ;
  51. 'SINON' ;
  52. NIV_MESS = 0 ;
  53. 'FINSI' ;
  54. 'SI' ( NIV_MESS '>EG' 1 ) ;
  55. 'SAUTER' 1 'LIGNE' ;
  56. *
  57. *--- RECUPERATION DE L'INFORMATION CONTENUE DANS "ETAB"
  58. *
  59. IVAL = 'VALE' 'DIME' ;
  60. * pour le 3D les blocages sont deja dans la matrice RIGCON
  61. 'SI' (('EXISTE' ETAB 'BLOQUE' ) ET ('EGA' IVAL 2 )) ;
  62. MAT_BLO = ETAB.'BLOQUE';
  63. 'FINSI';
  64. RIG_CON = ETAB.'RIGCON';
  65. 'SI' ( 'EXISTE' ETAB 'IMPOSE' );
  66. VAL_IMPO = ETAB.'IMPOSE' ;
  67. 'FINSI' ;
  68. 'MESS' '*** DEBUT DE LA PROCEDURE "MAG_NONLIN" ***' ;
  69. 'FINSI' ;
  70. ***************
  71. *--- Lecture de MU=MU(B) mu secant suprimee
  72. ***************
  73. 'SI' ( 'EXISTE' ETAB 'TABNUSEC' ) ;
  74. TA_NUSEC = ETAB.'TABNUSEC' ;
  75. 'SINON' ;
  76. 'MESS' '* PRECISER la TABLE des NUsecants = 1/MU(B) *';
  77. 'FINSI' ;
  78. AXI = FAUX ;
  79. 'SI' ( 'EXISTE' ETAB 'AXI') ;
  80. AXI = ETAB.'AXI' ;
  81. 'FINSI' ;
  82. si axi ; mess 'calcul axisymetrique ' ;finsi ;
  83.  
  84.  
  85.  
  86. *MAIL_CHP= FER 'ET' ( 'EXTRA' RIG_CON 'MAIL' );
  87. MAIL_CHP = EXTR (ETAB.'POTENTIEL') MAILLAGE ;
  88. NBRE_NOE = 'NBNO' MAIL_CHP ;
  89. VEC1= 'MANU' 'CHPO' MAIL_CHP 1 'T' ('PROG' NBRE_NOE * 1. ) ;
  90. QTE_FLUX = ETAB.'RHS' ;
  91. 'MENAGE' ;
  92. 'SI' ( 'EXISTE' ETAB 'CRITERE' ) ;
  93. EPSILON = ETAB.'CRITERE' ;
  94. 'SINON' ;
  95. EPSILON = 1.E-5 ;
  96. 'FINSI' ;
  97. 'SI' ( 'EXISTE' ETAB 'NITER' ) ;
  98. NBRE_ITE = ETAB.'NITER' ;
  99. 'SI' ( NIV_MESS '>EG' 1 ) ;
  100. 'SAUTER' 1 'LIGNE' ;
  101. 'MESS' 'REACTUALISATION DE LA MATRICE DE CONDUCTIVITE A L ENTREE '
  102. 'PUIS TOUTES LES ' NBRE_ITE 'ITERATIONS' ;
  103. 'FINSI' ;
  104. 'SINON' ;
  105. NBRE_ITE = 1 ;
  106. 'FINSI' ;
  107. 'SI' ( 'EXISTE' ETAB 'ITERMAX' ) ;
  108. ITER_MAX = ETAB.'ITERMAX' ;
  109. 'SINON' ;
  110. ITER_MAX = 10 ;
  111. 'FINSI' ;
  112. **************************
  113. 'SI' ( 'EXISTE' ETAB 'IMPOSE');
  114. FF1 = QTE_FLUX 'ET' VAL_IMPO ;
  115. 'SINON';
  116. FF1 = QTE_FLUX;
  117. 'FINSI';
  118. 'SI' ('EXISTE' ETAB 'OME') ; OME= ETAB.'OME' ; 'FINSI' ;
  119. 'SI' ('NON' ( 'EXISTE' ETAB 'POTENTIEL')) ;
  120. 'SINON' ;
  121. 'MESS' ' ******************************************************';
  122. 'MESS' ' ****************** REPRISE *****************';
  123. 'MESS' ' ******************************************************';
  124. U1_T = 'EXCO' ( ETAB.'POTENTIEL') 'T' 'NOID' 'T' ;
  125. 'MESS' ' menage ' ; 'MENAGE' ;
  126. 'FINSI' ;
  127. 'SI' ( NIV_MESS '>EG' 2 ) ;
  128. 'SAUTER' 1 'LIGNE' ;
  129. 'MESS' 'CHAMP THERMIQUE AVANT ITERATION ' ;
  130. 'LISTE' U1_T ;
  131. 'FINSI' ;
  132. DAN= 1.;
  133. *
  134. MOESP='REA' ;
  135. *
  136. 'MESS' ' AMAX AMIN DU/U ';
  137. *
  138. MAXA= 'MAXI' U1_T ;MIXA= 'MINI' U1_T ; DAN = 0.;
  139. ***********************************************************
  140. *--- ... ITERATIONS ...
  141. ***********************************************************
  142. NUM_ITE = 0 ;
  143. IFOIS = 0 ;
  144. 'MESS' IFOIS MAXA MIXA DAN ;
  145. 'REPETER' BOUC_1 ;
  146. NUM_ITE = NUM_ITE + 1 ;
  147. IFOIS = IFOIS + 1 ;
  148. *
  149. INDE_TAB = 'INDE' TA_NUSEC ;
  150. NPERM = 'DIME' INDE_TAB ;
  151. i = 0 ;
  152. *******************
  153. 'REPETER' BOUPERM NPERM ;
  154. i = i + 1 ;
  155. MOD_FERi = INDE_TAB.i ;
  156. STN = TA_NUSEC.MOD_FERi ;
  157. ORTT = FAUX ;
  158. 'SI' ('EXISTE' STN 'EV2' ) ;
  159. ORTT = VRAI ;
  160. EV2 = STN.'EV2' ; DIR2 = STN.'DIR2' ;
  161. EV1 = STN.'EV1' ; DIR1 = STN.'DIR1' ;
  162. 'SINON' ;
  163. EV1 = STN.'EV1' ;
  164. 'FINSI' ;
  165. MAI_FERi = EXTRAIRE MOD_FERi 'MAIL' ;
  166. * calcul du champ dans le fer -----> modif de mufer
  167. * mufer (BMOD ) potentiel vecteur on a donne MU(B)
  168. * mufer (HMOD ) potentiel scalaire on a donne MU(H)
  169. U1_FER='REDU' U1_T MAI_FERi ;
  170. DERIV= ( 'GRAD' MOD_FERi U1_FER) ;
  171. DAX= 'EXCO' 'T,X' DERIV 'SCAL';
  172. DAY= 'EXCO' 'T,Y' DERIV 'SCAL';
  173. DAX= DAX 'CHAN' 'TYPE' 'SCALAIRE';
  174. DAY= DAY 'CHAN' 'TYPE' 'SCALAIRE';
  175.  
  176. 'SI' AXI ;
  177. RFERi = (COOR 1 DERIV ) ** -1. ;
  178. DAX = DAX * RFERi;
  179. DAY = DAY * RFERi;
  180.  
  181. 'FINSI' ;
  182.  
  183. 'SI' ('EXISTE' DERIV 'T,Z' ) ;
  184. DAZ= 'EXCO' 'T,Z' DERIV 'SCAL';
  185. DAZ= DAZ 'CHAN' 'TYPE' 'SCALAIRE';
  186. BB= (( DAY * DAY ) + ( DAX * DAX ) +( DAZ * DAZ )) ** .5 ;
  187. 'SINON' ;
  188. BB= ((( DAY * DAY ) + ( DAX * DAX ) ) ** .5 ) ;
  189. 'FINSI' ;
  190. BMAX= 'MAXIMUM' BB ;BMIN= 'MINI' BB ;
  191. 'MESS' IFOIS MOESP ' B ou H max min ' BMAX BMIN ;
  192. *==============================================================
  193. * reactualisation des permeabilites sur les sous modeles
  194. *==============================================================
  195. 'SI' ORTT ;
  196. LIS_TE1 = EXTR EV1 ABSC ; LIS_TE2 = EXTR EV2 ABSC ;
  197. LIS_CO1 = EXTR EV1 ORDO ; LIS_CO2 = EXTR EV2 ORDO ;
  198. K1 = 'CHAN' 'NOEUD' ('IPOL' BB LIS_TE1 LIS_CO1) MOD_FERi ;
  199. K2 = 'CHAN' 'NOEUD' ('IPOL' BB LIS_TE2 LIS_CO2) MOD_FERi ;
  200. 'SI' ('EXISTE' DERIV 'T,Z' ) ;
  201. MAT_FERi= 'MATE' MOD_FERi DIRECTION DIR1 DIR2 PARALLELE
  202. 'K1' K1 'K2' K2 'K3' K2 ;
  203. 'SINON' ;
  204. * orthoptrope 2D
  205. 'SI' AXI ;
  206. RFERL= 'CHAN' 'NOEUD' MOD_FERi RFERI ;
  207. MAT_FERi= 'MATE' MOD_FERi DIRECTION DIR1
  208. 'K1' ( K1 * RFERL )
  209. 'K2' ( K2 * RFERL ) ;
  210. 'SINON' ;
  211. MAT_FERi= 'MATE' MOD_FERi DIRECTION DIR1
  212. 'K1' K1 'K2' K2 ;
  213. 'FINSI' ;
  214. 'FINSI' ;
  215. 'SINON' ;
  216. * isotrope
  217. LIS_TE1 = EXTR EV1 ABSC ;
  218. LIS_CO1 = EXTR EV1 ORDO ;
  219. K1 = 'CHAN' 'NOEUD' ('IPOL' BB LIS_TE1 LIS_CO1) MOD_FERi ;
  220. 'SI' AXI ;
  221. RFERL= 'CHAN' 'NOEUD' MOD_FERi RFERI ;
  222. MAT_FERi = 'MATE' MOD_FERi 'K' ( K1 * RFERL ) ;
  223. 'SINON' ;
  224. MAT_FERi= 'MATE' MOD_FERi 'K' K1 ;
  225. 'FINSI' ;
  226. 'FINSI' ;
  227. ******** 'FINSI' ;
  228. 'SI' (OME < 1. ) ;
  229. KLAST = STN.'KLAST' ;
  230. MAT_FERi = COLI MAT_FERi OME KLAST (1. - OME ) ;
  231. 'FINSI' ;
  232. * on stoke la derniere carte de mu
  233. STN.'KLAST' = MAT_FERi ;
  234. * sommation sur les sous objets
  235. 'SI' ( 'EGA' i 1 ) ;
  236. OBJM_FER = MOD_FERi ;
  237. CHAM_CND = MAT_FERi ;
  238. 'SINON' ;
  239. CHAM_CND = CHAM_CND ET MAT_FERi ;
  240. OBJM_FER = OBJM_FER ET MOD_FERI ;
  241. 'FINSI' ;
  242. 'FIN' BOUPERM ;
  243. *******************
  244.  
  245. CND2 = 'CONDUCTIVITE' OBJM_FER CHAM_CND ;
  246. RR2= CND2 'ET' RIG_CON ;
  247. RESID= ( FF1 - ( RR2 * U1_T ) ) 'ENLEVER' 'FLX' ;
  248. *
  249. * tests de convergence
  250. *
  251. RESID= RESID 'NOMC' 'SCAL';
  252. NORES= 'XTX' RESID ** .5 ;
  253. ERRMAX= 'MAXI' ( 'ABS' RESID ) ;
  254. MAXA= 'MAXI' U1_T ;MIXA= 'MINI' U1_T ;
  255. 'DETR' RESID ;
  256. 'MESS' IFOIS MAXA MIXA DAN ;
  257. *
  258. *
  259. 'SI' (( NUM_ITE 'EGA' NBRE_ITE ) 'OU'
  260. ( IFOIS 'EGA' 1 ) );
  261. *****************************************************************
  262. * --- REACTUALISATION DE LA MATRICE DE CONDUCTIVITE
  263. *****************************************************************
  264. MOESP='REA' ;
  265. * CI= ('LUMP' RR2 ) * VEC1 ; C2= ('LUMP' RR2 ( 'MOTS' T )) * VEC1;
  266. * CI = (C2 - CI ) 'NOMC' 'SCAL';
  267. 'SI' (( 'EXISTE' ETAB 'BLOQUE') ET ( EGA IVAL 2 ));
  268. RIG1 = RR2 'ET' MAT_BLO ;
  269. 'SINON';
  270. RIG1 = RR2 ;
  271. 'FINSI' ;
  272. * mess ' avant resou 1 ' ;
  273. 'SI' ( 'EXIST' ETAB 'GRAD' ) ;
  274. U2 = 'RESOUDRE' 'GRAD' RIG1 FF1 ;
  275. 'SINON' ;
  276. U2 = 'RESOUDRE' RIG1 FF1 ;
  277. 'FINSI' ;
  278. * mess 'apres resou 1 ' ;
  279. NUM_ITE = 0 ;
  280. 'SINON' ;
  281. *****************************************************************
  282. * --- RE-EQUILIBRAGE DU SECOND MEMBRE
  283. *****************************************************************
  284. MOESP=' ' ;
  285. FF2 = ( RIG1 * U1_T ) - ( RR2 * U1_T ) ;
  286. FF3 = FF1 + FF2 ;
  287. *mess ' avant resou reequilibrage ' ;
  288. 'SI' ( EXISTE ETAB 'GRAD' ) ;
  289. U2 = 'RESOUDRE' 'GRAD' RIG1 FF3 ;
  290. 'SINON' ;
  291. U2 = 'RESOUDRE' RIG1 FF3 ;
  292. 'FINSI' ;
  293. *mess 'apres resou reequilibrage ';
  294. * 'DETR' CND2 ;'DETR' RR1 ; 'DETR' RR2 ;
  295. 'FINSI' ;
  296.  
  297. *****************************************************************
  298. *****************************************************************
  299. U2_T = 'EXCO' U2 'T' 'NOID' 'T' ;
  300. *
  301. 'SI' ( NIV_MESS '>EG' 2 ) ;
  302. 'SAUTER' 1 'LIGNE' ;
  303. 'MESS' 'CHAMP THERMIQUE A L ITERATION :' IFOIS ;
  304. 'LISTE' U2_T ;
  305. 'FINSI' ;
  306. *
  307. CDIF= U2_T - U1_T ;
  308. DAN= ('XTX' CDIF) / ( 'XTX' U1_T) ;
  309. DAN = DAN ** .5 ;
  310. *
  311. * 'SI' ( ERROR < EPSILON ) ;
  312. 'SI' ( DAN < EPSILON ) ;
  313. CONVERGE = VRAI ;
  314. 'SINON' ;
  315. CONVERGE = FAUX ;
  316. 'FINSI' ;
  317. *
  318. *--- LE CRITERE DE CONVERGENCE EST-IL SATISFAIT ?
  319. 'MENAGE' ;
  320.  
  321. 'SI' CONVERGE ;
  322. 'SI' ( NIV_MESS '>EG' 1 ) ;
  323. * 'SAUTER' 1 'LIGNE' ;
  324. 'MESS' 'CONVERGENCE A L ITERATION :' IFOIS ;
  325. 'MESS' 'CRITERE DE CONVERGENCE :' EPSILON ;
  326. 'FINSI' ;
  327. 'QUITTER' BOUC_1 ;
  328. 'FINSI' ;
  329. U1_T = U2_T ;
  330. 'SI' ( 'EGA' IFOIS ITER_MAX ) ;
  331. * 'SAUTER' 1 'LIGNE' ;
  332. 'MESS' 'PAS DE CONVERGENCE A L ITERATION :' ITER_MAX ;
  333. ETAB.'CONV' = CONVERGE ;
  334. 'QUITTER' BOUC_1 ;
  335. 'FINSI' ;
  336. * ON FAIT LE MENAGE
  337. 'FIN' BOUC_1 ;
  338. ETAB.'NBITER'= IFOIS;
  339. *
  340. *--- ARCHIVAGE DES RESULTATS DANS "ETAB"
  341. *
  342. *ETAB.'KLAST'= EXCO 'SCAL' KLAST 'K' ;
  343. ETAB.'POTENTIEL' = U2_T ;
  344. * ETAB.'CI'= CI ;
  345. 'SI' ( NIV_MESS '>EG' 1 ) ;
  346. 'SAUTER' 1 'LIGNE' ;
  347. 'MESS' '*** FIN DE LA PROCEDURE "MAG_NLIN" ***' ;
  348. 'FINSI' ;
  349. 'FIN' PROC ;
  350. 'FINPROC' ETAB ;
  351.  

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