* MAG_NLIN PROCEDUR FANDEUR 14/10/10 21:15:16 8178 ********************************************************************* * estimation de mu aux points de gauss * multi-materiaux ferro_magnetiques * materiaux isotropes ou orthotropes ********************************************************************* *----------------------------------------------------------------------* * * * * PB MAGNETOSTATIQUE 2D ou 3D * --------------- * * * * RESOLUTION D'UN PROBLEME DE MAGNETOSTATIQUE NON-LINEAIRE * * EN REGIME PERMANENT,A L'AIDE DE LA METHODE DU POINT FIXE * * ETAB, TABLE CONTENANT EN ENTREE : * * OBLIGATOIRE * * INDICE 'SOUSTYPE' THERMIQUE * * INDICE 'AXI ' LOGIQUE VRAI EN 2D SI AXISYM ( PLAN DEFAUT) * * * * INDICE 'TABNUSEC' TABLE DES MATERIAUX FER INDICEE /MODELE * * OPTIONNEL * * INDICE 'CRITERE' CRITERE DE CONVERGENCE (10E-5 PAR DEFAUT) * * INDICE 'OME' POUR 2D UNIQUEMENT * * COEFF AMORTISSEMENT OSCI 0< OME < 1. * * * * INDICE 'NITER' REACTUALISATION DE LA CONDUCTIVITE TOUTES * * LES NITER ITERATIONS (NITER=1 PAR DEFAUT) * * INDICE 'NIVEAU' NIVEAU DE MESSAGES (NIVEAU=0 PAR DEFAUT) * * INDICE 'ITERMAX' NOMBRE D'ITERATIONS MAXIMUM * * (ITERMAX=10 PAR DEFAUT) * ************************************************************************ * arguments fabriques dans les passages soit ds pot_vect ou pot_scal * * INDICE 'FLUX' FLUX EQUIVALENTS * * INDICE 'BLOQUE' MATRICE DE BLOCAGE (CREEE PAR "BLOQUE") * * INDICE 'IMPOSE' VALEURS IMPOSEES (CREE PAR "DEPI") * * INDICE 'RIGCON ' RAIDEUR CONSTANTE * * INDICE 'RIGFER ' RAIDEUR VARIABLE * * ETAB CONTENANT EN SORTIE : * * * * INDICE 'POTENTIEL' POTENTIEL RESULTAT * *----------------------------------------------------------------------* 'REPETER' PROC 1 ; 'SI' ( 'NEG' ( ETAB.'SOUSTYPE' ) 'THERMIQUE' ) ; 'MESS' 'SOUS TYPAGE INCORRECT DE LA TABLE EN ENTREE|' ; 'QUITTER' PROC ; 'FINSI' ; 'SI' ( 'EXISTE' ETAB 'NIVEAU' ) ; NIV_MESS = ETAB.'NIVEAU' ; 'SINON' ; NIV_MESS = 0 ; 'FINSI' ; 'SI' ( NIV_MESS '>EG' 1 ) ; 'SAUTER' 1 'LIGNE' ; * *--- RECUPERATION DE L'INFORMATION CONTENUE DANS "ETAB" * * pour le 3D les blocages sont deja dans la matrice RIGCON 'SI' (('EXISTE' ETAB 'BLOQUE' ) ET ('EGA' IVAL 2 )) ; MAT_BLO = ETAB.'BLOQUE'; 'FINSI'; RIG_CON = ETAB.'RIGCON'; 'SI' ( 'EXISTE' ETAB 'IMPOSE' ); VAL_IMPO = ETAB.'IMPOSE' ; 'FINSI' ; 'FINSI' ; *************** *--- Lecture de MU=MU(B) mu secant suprimee *************** 'SI' ( 'EXISTE' ETAB 'TABNUSEC' ) ; TA_NUSEC = ETAB.'TABNUSEC' ; 'SINON' ; 'FINSI' ; AXI = FAUX ; 'SI' ( 'EXISTE' ETAB 'AXI') ; AXI = ETAB.'AXI' ; 'FINSI' ; *MAIL_CHP= FER 'ET' ( 'EXTRA' RIG_CON 'MAIL' ); QTE_FLUX = ETAB.'RHS' ; 'MENAGE' ; 'SI' ( 'EXISTE' ETAB 'CRITERE' ) ; EPSILON = ETAB.'CRITERE' ; 'SINON' ; EPSILON = 1.E-5 ; 'FINSI' ; 'SI' ( 'EXISTE' ETAB 'NITER' ) ; NBRE_ITE = ETAB.'NITER' ; 'SI' ( NIV_MESS '>EG' 1 ) ; 'SAUTER' 1 'LIGNE' ; 'MESS' 'REACTUALISATION DE LA MATRICE DE CONDUCTIVITE A L ENTREE ' 'PUIS TOUTES LES ' NBRE_ITE 'ITERATIONS' ; 'FINSI' ; 'SINON' ; NBRE_ITE = 1 ; 'FINSI' ; 'SI' ( 'EXISTE' ETAB 'ITERMAX' ) ; ITER_MAX = ETAB.'ITERMAX' ; 'SINON' ; ITER_MAX = 10 ; 'FINSI' ; ************************** 'SI' ( 'EXISTE' ETAB 'IMPOSE'); FF1 = QTE_FLUX 'ET' VAL_IMPO ; 'SINON'; FF1 = QTE_FLUX; 'FINSI'; 'SI' ('EXISTE' ETAB 'OME') ; OME= ETAB.'OME' ; 'FINSI' ; 'SI' ('NON' ( 'EXISTE' ETAB 'POTENTIEL')) ; 'SINON' ; 'FINSI' ; 'SI' ( NIV_MESS '>EG' 2 ) ; 'SAUTER' 1 'LIGNE' ; 'MESS' 'CHAMP THERMIQUE AVANT ITERATION ' ; 'LISTE' U1_T ; 'FINSI' ; DAN= 1.; * MOESP='REA' ; * * *********************************************************** *--- ... ITERATIONS ... *********************************************************** NUM_ITE = 0 ; IFOIS = 0 ; 'MESS' IFOIS MAXA MIXA DAN ; 'REPETER' BOUC_1 ; NUM_ITE = NUM_ITE + 1 ; IFOIS = IFOIS + 1 ; * i = 0 ; ******************* 'REPETER' BOUPERM NPERM ; i = i + 1 ; MOD_FERi = INDE_TAB.i ; STN = TA_NUSEC.MOD_FERi ; ORTT = FAUX ; 'SI' ('EXISTE' STN 'EV2' ) ; ORTT = VRAI ; EV2 = STN.'EV2' ; DIR2 = STN.'DIR2' ; EV1 = STN.'EV1' ; DIR1 = STN.'DIR1' ; 'SINON' ; EV1 = STN.'EV1' ; 'FINSI' ; MAI_FERi = EXTRAIRE MOD_FERi 'MAIL' ; * calcul du champ dans le fer -----> modif de mufer * mufer (BMOD ) potentiel vecteur on a donne MU(B) * mufer (HMOD ) potentiel scalaire on a donne MU(H) 'SI' AXI ; DAX = DAX * RFERi; DAY = DAY * RFERi; 'FINSI' ; 'SI' ('EXISTE' DERIV 'T,Z' ) ; BB= (( DAY * DAY ) + ( DAX * DAX ) +( DAZ * DAZ )) ** .5 ; 'SINON' ; BB= ((( DAY * DAY ) + ( DAX * DAX ) ) ** .5 ) ; 'FINSI' ; *============================================================== * reactualisation des permeabilites sur les sous modeles *============================================================== 'SI' ORTT ; 'SI' ('EXISTE' DERIV 'T,Z' ) ; MAT_FERi= 'MATE' MOD_FERi DIRECTION DIR1 DIR2 PARALLELE 'K1' K1 'K2' K2 'K3' K2 ; 'SINON' ; * orthoptrope 2D 'SI' AXI ; MAT_FERi= 'MATE' MOD_FERi DIRECTION DIR1 'K1' ( K1 * RFERL ) 'K2' ( K2 * RFERL ) ; 'SINON' ; MAT_FERi= 'MATE' MOD_FERi DIRECTION DIR1 'K1' K1 'K2' K2 ; 'FINSI' ; 'FINSI' ; 'SINON' ; * isotrope 'SI' AXI ; 'SINON' ; 'FINSI' ; 'FINSI' ; ******** 'FINSI' ; 'SI' (OME < 1. ) ; KLAST = STN.'KLAST' ; 'FINSI' ; * on stoke la derniere carte de mu STN.'KLAST' = MAT_FERi ; * sommation sur les sous objets 'SI' ( 'EGA' i 1 ) ; OBJM_FER = MOD_FERi ; CHAM_CND = MAT_FERi ; 'SINON' ; CHAM_CND = CHAM_CND ET MAT_FERi ; OBJM_FER = OBJM_FER ET MOD_FERI ; 'FINSI' ; 'FIN' BOUPERM ; ******************* CND2 = 'CONDUCTIVITE' OBJM_FER CHAM_CND ; RR2= CND2 'ET' RIG_CON ; RESID= ( FF1 - ( RR2 * U1_T ) ) 'ENLEVER' 'FLX' ; * * tests de convergence * 'DETR' RESID ; 'MESS' IFOIS MAXA MIXA DAN ; * * 'SI' (( NUM_ITE 'EGA' NBRE_ITE ) 'OU' ( IFOIS 'EGA' 1 ) ); ***************************************************************** * --- REACTUALISATION DE LA MATRICE DE CONDUCTIVITE ***************************************************************** MOESP='REA' ; * CI= ('LUMP' RR2 ) * VEC1 ; C2= ('LUMP' RR2 ( 'MOTS' T )) * VEC1; * CI = (C2 - CI ) 'NOMC' 'SCAL'; 'SI' (( 'EXISTE' ETAB 'BLOQUE') ET ( EGA IVAL 2 )); RIG1 = RR2 'ET' MAT_BLO ; 'SINON'; RIG1 = RR2 ; 'FINSI' ; * mess ' avant resou 1 ' ; 'SINON' ; U2 = 'RESOUDRE' RIG1 FF1 ; 'FINSI' ; * mess 'apres resou 1 ' ; NUM_ITE = 0 ; 'SINON' ; ***************************************************************** * --- RE-EQUILIBRAGE DU SECOND MEMBRE ***************************************************************** MOESP=' ' ; FF2 = ( RIG1 * U1_T ) - ( RR2 * U1_T ) ; FF3 = FF1 + FF2 ; *mess ' avant resou reequilibrage ' ; 'SINON' ; U2 = 'RESOUDRE' RIG1 FF3 ; 'FINSI' ; *mess 'apres resou reequilibrage '; * 'DETR' CND2 ;'DETR' RR1 ; 'DETR' RR2 ; 'FINSI' ; ***************************************************************** ***************************************************************** * 'SI' ( NIV_MESS '>EG' 2 ) ; 'SAUTER' 1 'LIGNE' ; 'MESS' 'CHAMP THERMIQUE A L ITERATION :' IFOIS ; 'LISTE' U2_T ; 'FINSI' ; * CDIF= U2_T - U1_T ; DAN = DAN ** .5 ; * * 'SI' ( ERROR < EPSILON ) ; 'SI' ( DAN < EPSILON ) ; CONVERGE = VRAI ; 'SINON' ; CONVERGE = FAUX ; 'FINSI' ; * *--- LE CRITERE DE CONVERGENCE EST-IL SATISFAIT ? 'MENAGE' ; 'SI' CONVERGE ; 'SI' ( NIV_MESS '>EG' 1 ) ; * 'SAUTER' 1 'LIGNE' ; 'MESS' 'CONVERGENCE A L ITERATION :' IFOIS ; 'MESS' 'CRITERE DE CONVERGENCE :' EPSILON ; 'FINSI' ; 'QUITTER' BOUC_1 ; 'FINSI' ; U1_T = U2_T ; 'SI' ( 'EGA' IFOIS ITER_MAX ) ; * 'SAUTER' 1 'LIGNE' ; 'MESS' 'PAS DE CONVERGENCE A L ITERATION :' ITER_MAX ; 'QUITTER' BOUC_1 ; 'FINSI' ; * ON FAIT LE MENAGE 'FIN' BOUC_1 ; ETAB.'NBITER'= IFOIS; * *--- ARCHIVAGE DES RESULTATS DANS "ETAB" * *ETAB.'KLAST'= EXCO 'SCAL' KLAST 'K' ; ETAB.'POTENTIEL' = U2_T ; * ETAB.'CI'= CI ; 'SI' ( NIV_MESS '>EG' 1 ) ; 'SAUTER' 1 'LIGNE' ; 'FINSI' ; 'FIN' PROC ; 'FINPROC' ETAB ;
© Cast3M 2003 - Tous droits réservés.
Mentions légales