* TRANSIT0 PROCEDUR FANDEUR 14/10/10 21:15:27 8178
*----------------------------------------------------------------------*
* PROCEDURE TRANSIT0 MARS 91 *
* *
* calcul d'un increment de solution en thermique non-lineaire *
* stationnaire par la methode des residus
* *
* INSPIREE DE INCREME + TRANSIT1
*----------------------------------------------------------------------*
* *
* ETAB, TABLE CONTENANT EN ENTREE : *
* ------------------------------- *
* INDICE 'SOUSTYPE' THERMIQUE *
* INDICE 'MAILLAGE' MAILLAGE DE BASE *
* INDICE 'COQUE' TYPE D'ELEMENT COQUE
* INDICE 'EPAI' EPAISSEUR DE LA COQUE
* INDICE 'BLOCAGE' MATRICE DE BLOCAGE (CREEE PAR "BLOQUE") *
* INDICE 'IMPOSE' VALEURS IMPOSEES (CREE PAR "DEPI") *
* INDICE 'CONDUCTIVITE' VALEUR INITIALE DE LA CONDUCTIVITE *
* INDICE 'EVOCOND' EVOLUTION DE LA CONDUCTIVITE DU MATERIAU *
* EN FONCTION DE LA TEMPERATURE : K(T) *
* INDICE 'FLUX' FLUX EQUIVALENTS *
* INDICE 'CRITERE' CRITERE DE CONVERGENCE *
* (10E-5 PAR DEFAUT) *
* INDICE 'NITER' REACTUALISATION DE LA CONDUCTIVITE TOUTES *
* LES NITER ITERATIONS ( 10 PAR DEFAUT) *
* INDICE 'NIVEAU' NIVEAU DE MESSAGES (NIVEAU=0 PAR DEFAUT) *
* INDICE 'ACCELERATION' FREQUENCE DES ACCELERATIONS (2 PAR DEFAUT)
* INDICE 'MAXITERATION' NOMBRE D'ITERATIONS MAXIMUM (30 PAR DEFAUT)
* *
* ETAB CONTENANT EN SORTIE : *
* ------------------------ *
* INDICE 'TEMPERATURE' CHAMP DE TEMPERATURE RESULTAT *
* *
*----------------------------------------------------------------------*
'SI' ( 'NEG' ( ETAB.'SOUSTYPE' ) 'THERMIQUE' ) ;
'MESS' 'SOUS TYPAGE INCORRECT DE LA TABLE EN ENTREE ' ;
'FINSI' ;
'SI' ( 'EXISTE' ETAB 'NIVEAU' ) ;
NIV_MESS = ETAB.'NIVEAU' ;
'SINON' ;
NIV_MESS = 0 ;
'FINSI' ;
'SI' ( NIV_MESS '>EG' 1 ) ;
'SAUTER' 1 'LIGNE' ;
'FINSI' ;
*
*--- RECUPERATION DE L'INFORMATION CONTENUE DANS "ETAB"
*
'SI' ('EXISTE' ETAB 'COQUE') ;
TYP_COQ = ETAB.'COQUE' ;
'SI' ( 'EXISTE' ETAB 'EPAI' ) ;
EP = ETAB.'EPAI' ;
'SINON' ;
'SAUTER' 1 'LIGNE' ;
'FINSI' ;
'FINSI' ;
*
OBJ_MAI = ETAB.'MAILLAGE' ;
VAL_COND = ETAB.'CONDUCTIVITE' ;
ZCLIM = ETAB.'BLOCAGE' ;
*
'SI' ( 'EXISTE' ETAB 'IMPOSE' ) ;
VAL_IMPO = ETAB.'IMPOSE' ;
ZFEXT2 = ZFEXT2 ET VAL_IMPO ;
'FINSI';
*
ZFEXT2 = ZFEXT2 ET QTE_FLUX ;
'FINSI';
*
'SI' ( 'EXISTE' ETAB 'EVOCOND' ) ;
EVO_COND = ETAB.'EVOCOND' ;
LIS_COND = 'EXTRAIRE' EVO_COND 'CONDUCTIVITE' ;
LIS_TEMP = 'EXTRAIRE' EVO_COND 'TEMPERATURE' ;
'FINSI' ;
*
'SI' ( 'EXISTE' ETAB 'CRITERE' ) ;
ZPREC = ETAB.'CRITERE' ;
'SINON' ;
ZPREC = 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 TOUTES '
'LES ' NBRE_ITE 'ITERATIONS' ;
'FINSI' ;
'SINON' ;
NBRE_ITE = 10;
'FINSI' ;
*
'SI' ( 'EXISTE' ETAB 'MAXITERATION' ) ;
ZMAXIT = ETAB.'MAXITERATION' ;
'SINON' ;
ZMAXIT = 30 ;
'FINSI' ;
*
'SI' ( 'EXISTE' ETAB 'ACCELERATION' ) ;
ZNACCE = ETAB.'ACCELERATION' ;
'SINON' ;
ZNACCE = 2 ;
'FINSI' ;
*
* CREATION DE L'OBJET MODELE ET DU CHAMP DE MATERIAU
*
'SI' ('EXISTE' ETAB 'COQUE' ) ;
'SINON' ;
'FINSI';
*
* CALCUL DE L'OPERATEUR
*
CND1 = 'CONDUCTIVITE' ZOBMOD ZMAT ;
ZRAID = CND1 ET ZCLIM ;
*
*
********************
******************** initialisation et reprise des valeurs des tables
********************
ETAB.'INCREMENT' = ZFEXT2 ;
*
*
* ---------------------------------
* ! QUELQUES INITIALISATIONS !
* ---------------------------------
IT= 0 ;
ZICONV = VRAI;
MMC = 0 ;
MM1 = 1 ;
MM2 = 1 ;
*
******************** calcul de la partie constante du second membre
******************** ZFP1 est cense contenir : F0 + 4/DT*M*V0 - B0*SIG0
******************** + 2/DT*C*X0
ZFCONSTA = COPIER ZFEXT2;
ZFEXT = ZFCONSTA 'ENLEVER' 'FLX';
******************** mise a jour des jeux
ZZD = 'ENLEVER' ZU1 'LX';
ZMU= ZZD * ZCLIM;
ZFPLU= ZMU + ZF1 ;
ZFPLO=COPIER ZF1 ;
'DETR' ZF1 ;
*
ZITAC= 0 ;
IPREM = VRAI ;
******* initialisation acceleration de convergence
******* on peut mettre n'importe quoi
******* c'est pour ne pas faire de tests dans la boucle
acfp1 = zfconsta ;
acfp2 = zfconsta ;
acfp3 = zfconsta ;
acdep1 = zfconsta ;
acdep2 = zfconsta ;
acdep3 = zfconsta ;
********* la il ne faut pas mettre n'importe quoi
fcorf = zmu ;
********************
******************** DEBUT DES ITERATIONS
********************
'REPETER' ETIQ ;
IT= IT + 1 ;
ZITAC = ZITAC + 1 ;
********************CALCUL DE L INCREMENT DE L INCREMENT DE SOLUTION
ZDF = ZFCONSTA - ZFPLU;
ZTEM1 = 'RESOU' ZRAID ZDF;
******************** on ajoute l increment de deplacement au precedent
'SI' IPREM ;
ZTEMT = 'COPIER' ZTEM1 ;
******************** initialisation des messages
'MESS' ' iteration critere ' ;
*
'SINON';
ZTEM=ZTEMT 'ENLEVER' 'LX' ;
'DETR' ZTEMT ;
ZTEM2 = ZTEM + ZTEM1 ;
'DETR' ZTEM ;
ZTEMT = ZTEM2 ;
'FINSI' ;
correc = 'ACT3' acdep3 acdep2 acdep1 ztemt
acfp3 acfp2 acfp1 (zdf - fcorf) ;
'DETRUIRE' acdep3 ; 'DETRUIRE' acfp3;
acdep3 = acdep2 ; acdep2 = acdep1 ; acdep1 = ztemt ;
ztem2 = ztemt - correc;
ztemt = ztem2;
'SINON';
si (it > 3); 'DETRUIRE' acdep3 ; 'DETRUIRE' acfp3; finsi;
acdep3 = acdep2 ; acdep2 = acdep1 ; acdep1 = 'COPIER' ztemt 'GEOM' ;
'FINSI';
acfp3 = acfp2 ; acfp2 = acfp1 ;
acfp1 = zdf - fcorf ;
'DETRUIRE' fcorf;
********************
******************** calcul de fcorf= lambda*m force de reaction
******************** fcoru = u * m depi (flx)
********************
ZDETOT = ZZD + ZTEMT;
FCORF = 'ENLEVER' FCOR 'FLX';
'DETR' FCOR ;
*----------------------------------------------------------------
******************** preparation des tests de convergence.on calcule la
******************** plus grande composante de delta f + freac(sans flx)
FEQUI = ZFEXT - FCORF;
'DETR' ZFAU1;
*
MM2=MM1 * 1;
MM1 = MMC * 1 ;
*
******************** FORCES QUI VARIENT
********************
*
'SI' ('EXISTE' ETAB 'COQUE' ) ;
U1_TM = (U1_T1 + U1_T2 + U1_T3)/3.0 ;
'SINON' ;
'FINSI' ;
'SI' ('EXISTE' ETAB 'COQUE') ;
MA1 = 'EXTRAIRE' K2 'MAIL' 'NOMU' ;
ZMAT2 = CHAM_CN1 'ET' CHAM_CN2 ;
'SINON' ;
'FINSI' ;
*
CND2 = 'CONDUCTIVITE' ZOBMOD ZMAT2 ;
FEQU2 = CND2 * ZTEMT ;
*
'FINSI';
*
********************
******************** test de convergence
********************
*
RESIDU = FEQUI - FEQU2;
'DETR' RESIDU ;
XCONV = XNUM / XDENO ;
'MESS' IT XCONV ;
'SI' ( IT > 1 ) ;
'SI' ( XCONV < ZPREC ) ;
'DETR' FEQU2 ;
'QUITTE' ETIQ ;
'FINSI';
'FINSI';
'FINSI';
'SI'(IT '>EG' ZMAXIT );
ZICONV = FAUX;
'DETR' FEQU2 ;
'QUITTER' ETIQ;
'FINSI' ;
ZFPLU = FCORU + FEQU2 ;
'DETR' FCORU ;
*
* CHANGEMENT D'OPERATEUR
*
ZITAC = 0;
'DETR' ZRAID;
ZRAID =CND2 'ET' ZCLIM ;
'FINSI' ;
********************
******************** fin de boucle
********************
IPREM = FAUX;
'FIN' ETIQ ;
********************
********************
********************
******************** quelques destructions supplementaires
'DETR' ZZD ;
'DETR' ZFPLO;
*
ETAB.'TEMPERATURE' = ZTEMT;
'DETR' ZTEM1;
'FINPROC' ;
					© Cast3M 2003 - Tous droits réservés.
					Mentions légales