* 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