* PASAPAS PROCEDUR MB234859 23/01/09 21:15:05 11548 'MESS' ************************************************************************ * * * * *** PRECED objet de type TABLE * * C'est une table donnant , les arguments d'entrees, les * * options, puis les resultats des pas precedents * * * * Etat initial au debut du pas de temps decrit par le MCHELM WTAB.ETAT1* * champs de materiaux : * * WTAB.'MAT_REF' materiau etat a la temperature de REFERENCE * * WTAB.'MAT0' materiau etat debut de calcul * * WTAB.'MAT1' materiau fin du pas de temps * * * ************************************************************************ **************** I PARTIE ****************************************** *---------- attribution des valeurs par defaut et verifs elementaires PAS_DEFA PRECED ; *-------- initialisation du pas precedent si besoin et creation des tables de sorties. PAS_INIT PRECED ; WTAB = PRECED.'WTABLE' ; conti = PRECED.'CONTINUATION'; estim = PRECED.'ESTIMATION' ; * WTAB.'GE0_DEB'=WTAB.'FOR0'; 'SI'( WTAB.'GRANDS_DEPLACEMENTS' 'OU' WTAB.'FEFP_FORMULATION'); WTAB.'GE0_DEB'= 'FORME' conti . 'DEPLACEMENTS'; 'FINSI'; 'FINSI'; 'FORM' WTAB.'FOR0'; *--------- quel est le delta-temps du dernier pas calcule ? --------- DELTAN = 0.D0 ; WTAB.'DT' = DELTAN ; 'SINON'; DELTAN= WTAB.'DT'; 'FINSI'; *------------Appel a une procedure utilisateur PERSO1 'SI' WTAB.'PROCEDURE_PERSO1'; PRECED.'PERSO1_APPEL' = 1 ; PERSO1 PRECED ; WTAB.'ARRET' = PRECED.'ARRET' ; 'FINSI' ; 'FINSI'; * ------------Appel a une procedure utilisateur REEV_MEC 'SI' WTAB.'PROCEDURE_REEV_MEC' ; REEV_MEC PRECED 0 ; 'FINSI' ; * ------------Appel a une procedure utilisateur REEV_THE 'SI' WTAB.'PROCEDURE_REEV_THE' ; REEV_THE PRECED 0 ; 'FINSI' ; *--------- initialisation ETAT ET MATERIAUX WTAB.'ETAT1' = WTAB.'ETAT0' ; WTAB.'MAT1' = WTAB.'MAT0' ; *--------- initialisation deformation thermique de reference 'SI' WTAB.'FOR_MECA' ; 'SI' (WTAB.'CHAR_THE' 'OU' WTAB.'FOR_THER' ) ; 'SI' ('EGA' WTAB.'ETREF' 'INCONNU'); 'FINS' ; * 'FINS'; WTAB.'ETHER1' = ETT0 - WTAB.'ETREF' ; * 'SI' WTAB.'POR1'; 'FINS' ; 'FINS' ; 'FINS' ; ************************** II PARTIE ************************* ****************************************************************** ******************* boucle sur les pas de temps ***************** ****************************************************************** * ------------quelques initialisations de l'algorithme PASFINAL = 0 ; IPAS = 0 ; ICHG = 0 ; IAUTO = 1 ; IREREDU = VRAI; TEMP0 = WTAB.'TEMPS0'; ISAUV = VRAI; 'SI' ( DTV '<' 1.e-15 ); 'SI' WTAB.'FREQUENTIEL' ; DTV = 1.e-14 ; 'SINON' ; 'FINSI'; 'FINSI'; WTAB.'ARRET' = FAUX; WTAB.'AUTODEUX'= FAUX; DT_AVANT = DTV ; WTAB.'NOMBRE_ITERATIONS'=12; * Attention Bizarre : RFROT est initialise ici et utilise dans UNPAS ???? RFROT=0; *---------- debut boucle sur pas de temps 'REPETER' BEXTERN ; * * ----- Determiner le nouvel instant a calculer TI * ICHG=ICHG + 1; WTAB.'ICHG'= ICHG; 'SI' ( ICHG '>' NPAS) ; 'QUITTER' BEXTERN; 'FINSI'; TI = 'EXTRAIRE' WTAB.'TEMPS_CALCULES' ICHG ; TIV=TI; 'SI' (WTAB.'FREQUENTIEL') ; 'SI' (TI '<' TEMP0 ) ; 'ITERER' BEXTERN ; 'FINSI' ; 'SINON' ; ITERTPS = (TI '<' TEMP0 ) 'OU' (TI 'EGA' PRECED.'TEMPS'. 0) ; 'SI' ('NON' WTAB.'REEQUILIBRAGE') ; ITERTPS = ITERTPS 'OU' ('EGA' TI TEMP0) ; 'FINSI'; 'SI' ITERTPS ; 'ITERER' BEXTERN ; 'FINSI'; 'FINSI'; * * ----- Ajustement du pas en fonction du nb d iteration du pas precedent * PASFINAL=PASFINAL+1; 'SI' WTAB.'PAS_AJUSTE'; DTV=DT_AVANT; 'SI' (WTAB.'NOMBRE_ITERATIONS' > 20); DTV=DTV'/' (2. ** 0.5); 'FINSI'; 'SI' (WTAB.'NOMBRE_ITERATIONS' < 7); 'SI' IREREDU; DTV=DTV '*' (2. ** 0.5); 'FINSI'; 'FINSI'; DT_AVANT= DTV; IREREDU=VRAI; 'SINON'; DTV=0.0000000001D0* DT_AVANT; DT_AVANT= DT_AVANT /2.; IREREDU=FAUX; 'FINSI'; TTI = DTV* 1.0000000001 + TEMP0; 'SI' ( TTI '<EG' TIV ); TI=TTI; PASFINAL=0; 'FINSI'; 'FINSI'; * estim.'TEMPS'=TI; 'SI' (PASFINAL '>EG' 1.5) ; DT_AVANT= TI-TEMP0; 'FINSI'; WTAB.'T_FINAL'= TI; WTAB.'DT_INIT' = TI-TEMP0; 'SI'((WTAB.'CONSOLIDATION' 'OU' WTAB.'DYNAMIQUE') 'ET' (WTAB.'DT_INIT' 'EGA' 0.)); 'ITERER' BEXTERN; 'FINSI'; WTAB.'DT'= WTAB.'DT_INIT'; * * ----- Compteur IPAS des pas de temps calcules IPAS = IPAS + 1; WTAB.'PAS'=IPAS; * ----- Mise a jour du modele si chargement de type MODE : 'SI' (WTAB.'CHAR_MODE') ; MOD1P = WTAB.'MODELE' ; WTAB.'MODELE' = MODEVOL1 ; 'SI' (WTAB.'CHAR_MATE') ; WTAB.'CARACTERISTIQUES' = MATEVOL1 ; 'FINSI' ; PAS_MODL PRECED ; * MaJ table rayonnement : 'SI' WTAB.'RAYO' ; 'FINSI' ; * On sauvegarde les modeles successifs pour analyse resultats : ESTIM.'MODELES' = WTAB.'MODELE' ; * Initialisation TINI si thermique : 'SI' (WTAB.'THE1') ; MODX = WTAB.'MOD_COND' ; * Adapation du modele : transport de la solution 'SI' ((WTAB.'ADAP_MODE') 'ET' ('NON' (TI '<' (WTAB.'TPS1_ADAP')))) ; IADAP1 = (WTAB.'INDI_ADAP') + 1 ; WTAB.'INDI_ADAP' = IADAP1 ; 'SINON' ; 'FINSI' ; *erre 21 ; * Projection du champ de temperature sur la partie adaptee : WTAB.'TET1' = CHT1P ; * Calcul de la capacite courante sur la partie adaptee : WTAB.'CAPA_COURANTE' = CAPA1P ; 'FINSI' ; * Calcul temperature dans partie ajoutee du modele : * Quantite de chaleur sur geometrie GEO1P : * Quantite de chaleur dans ajout : * Calcul T sur GEO1 : CAPA1 = (WTAB.'CAPA_COURANTE') et CAPAX ; CHQX1 = CAPA1 * CHTX1; * CHT2 = reso (lump CAPA1) (CHQ1P + CHQX) ; mess '############ avec RESO' ; *si (ipas > 10) ; erre 21 ; fins ; WTAB.'TET1' = CHT1 ; *List ((resu (CHQ1P + CHQX)) maxi abs) ; *List ((resu (CAPA1*CHT1)) maxi abs) ; *trac CHT1 GEO1 ; 'FINSI' ; 'FINSI' ; * Initialisation PROPORTIONS_PHASES si metallurgie : 'SI' WTAB.'FOR_METALLU' ; CHMET0 = ESTIM.'PROPORTIONS_PHASES' ; CHMET1 = CHMET1 + (CMP1 + 1.D0); CHMET1 = CHMET0 'ET' CHMET1 ; *trac CHMET1 MODX ; 'FINSI' ; 'FINS' ; 'FINSI' ; * ----- Mise a jour blocages passes dans chargement * Cas BLOCAGES_MECANIQUES (BLOM) : 'SI' (WTAB.'CHAR_BLOM') ; WTAB.'BLOCAGES_MECANIQUES' = BLOM1 ; * MAJ Operateur Resolution : WTAB.'RRRR' = RRRR 'ET' BLOM1 ; 'FINSI' ; 'FINSI' ; * Cas BLOCAGES_THERMIQUES (BLOT) : 'SI' (WTAB.'CHAR_BLOT') ; WTAB.'BLOCAGES_THERMIQUES' = BLOT1 ; 'FINSI' ; * Cas BLOCAGES_DIFFUSIONS (BLOD) : 'SI' (WTAB.'CHAR_BLOD') ; WTAB.'BLOCAGES_DIFFUSIONS' = BLOD1 ; 'FINSI' ; * ----- On se place dans la configuration deformee 'SI'( WTAB.'GRANDS_DEPLACEMENTS' 'OU' WTAB.'FEFP_FORMULATION'); 'SI' (WTAB.'RECALCUL'); 'FORM' WTAB.'GE0_DEB'; 'FINSI'; 'FINSI'; 'FINSI'; *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ *++++++++++++++++++ BOUCLE interne de bouclage mec_ther ++++++++++++++ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ I_BOTH = 0 ; 'REPETER' BO_BOTH WTAB.'BOU_METH' ; I_BOTH = I_BOTH + 1 ; * * re-initialisation de WTAB.'CHARGEMENT' en tete de boucle mec-ther * 'SI' WTAB.'CONVERGENCE_MEC_THE' ; WTAB.'CHARGEMENT' = WTAB . 'CHARGEMENT_I' ; 'FINSI'; * *####################################################################### *#################### CALCUL D'UN PAS SI THERMIQUE ##################### *####################################################################### 'SI' (WTAB.'FOR_THER' 'OU' WTAB.'FOR_DIFF') ; 'SI' WTAB.'FOR_MECA' ; *---------- en cas de convergence mecanique thermique 'SI' (I_BOTH > 1) ; *---------- reprise de la configuration meca de la derniere estimation * du pas present si coherence mecanique/thermique WTAB .'RECARI' = VRAI ; WTAB .'RECADET' = VRAI ; WTAB.'REA_GEOM' = VRAI ; 'FORM' estim.'FOR' ; 'FINSI'; 'FINSI' ; 'FINSI' ; 'SI' (TI 'NEG' TEMP0); 'SI' ('NON' ('EXISTE' PRECED 'PAS_MAX')); 'SINON'; 'SI' ((TEMP0 + PRECED.'PAS_MAX') '>EG' TI); 'SINON'; WTAB.'TEM_CALC' = 'PROG' TEMP0 'PAS' PRECED.'PAS_MAX' TI; 'FINSI'; 'FINSI'; * * ----- Appel a la procedure thermique (lineaire ou nonlineaire) ---- * 'SI' ('NON' WTAB.'COUPLAGE'); 'MENAGE'; 'FINSI'; 'SI' ('EGA' WTAB.'PROCEDURE_THERMIQUE' 'NONLINEAIRE'); 'FINSI'; 'SI' ('EGA' WTAB.'PROCEDURE_THERMIQUE' 'LINEAIRE'); 'FINSI'; 'SI' ('EGA' WTAB.'PROCEDURE_THERMIQUE' 'DUPONT'); 'FINSI'; * Verification d'une erreur en sortie 'SI' CHTER.'ERREUR'; 'ERREUR' ' '; 'FINSI'; * Modele Metallurgique (T.L. en juin 2018) 'SI' WTAB.'FOR_METALLU' ; estim.'PROPORTIONS_PHASES' = CHTER.'PROPORTIONS_PHASES' ; 'FINSI'; 'SI' WTAB.'PHASE'; WTAB.'PROPPHAS' = CHTER.'PROPPHAS' ; estim.'PROPORTIONS_PHASE'= CHTER.'PROPPHAS' ; 'FINSI' ; 'SI' WTAB.'FOR_THER' ; WTAB.'TET2'=CHTER.'INITIAL(2)' ; WTAB.'CLIT'=CHTER.'CLIT' ; 'SI' ('EGA' WTAB.'PROCEDURE_THERMIQUE' 'NONLINEAIRE') ; 'SI' ('NEG' WTAB.'RIBLO_T' 'INCONNU'); WTAB.'RIBLO_T' = CHTER.'RIBLO_T' ; WTAB.'LISEA_T' = CHTER.'LISEA_T' ; 'FINSI' ; 'FINSI' ; 'SI' WTAB.'RAYO' ; WTAB.'RAYONNEMENT' = CHTER.'RAYONNEMENT' ; 'FINSI' ; 'FINSI' ; 'SI' WTAB.'FOR_DIFF' ; WTAB.'CO2' =CHTER.'CO2'; WTAB.'CLID'=CHTER.'CLID' ; 'FINSI' ; 'SI' WTAB.'FOR_THER' ; estim.'TEMPERATURES' = WTAB.'TET2' ; 'FINSI'; 'SI' WTAB.'FOR_DIFF' ; estim.'CONCENTRATIONS' = WTAB.'CO2' ; 'FINSI' ; *** Reevaluation des donnees du calcul dependant de la temperature 'SI' WTAB.'PROCEDURE_REEV_THE' ; REEV_THE PRECED 1 ; 'FINSI' ; 'FINS'; *-----convergence mecanique thermique : reprise configuration ------ *---------- du pas precedent pour refaire la mecanique ------------- 'SI'( WTAB.'GRANDS_DEPLACEMENTS' 'OU' WTAB.'FEFP_FORMULATION'); 'FORM' WTAB.'GE0_DEB'; 'FINSI' ; 'FINSI' ; *################## fin du calcul d'un pas thermique ################# *####################################################################### *#################### CALCUL D'UN PAS SI MECANIQUE ##################### *####################################################################### 'SI' WTAB.'FOR_MECA' ; 'MESSAGE' ' Numero du pas : ' IPAS ' Indice d evolution : ' ICHG ' -> temps :' TI; *--------------------- calcul de la temperature --------------------- * CB215821 : On met la thermique dans le Chargement pour 'TIRER' le chargement * au bon instant dans UNPAS pour la MECANIQUE * Il faudra faire de meme avec la MECANIQUE si la THERMIQUE en depend * 'SI' WTAB.'FOR_THER'; * THTA1='TABLE'; * THTA2='TABLE'; * THTA1.0=TEMP0; * THTA1.1=TI; * THTA2.0= conti.'TEMPERATURES' 'ENLE' 'LX' ; * THTA2.1= estim.'TEMPERATURES' 'ENLE' 'LX' ; * CHTH='CHAR' 'T' THTA1 THTA2; * CHASANST= WTAB.'CHARGEMENT' 'ENLE' 'T'; * WTAB.'CHARGEMENT'= CHASANST 'ET' CHTH; * 'FINSI'; 'SI' WTAB.'CHAR_THE'; 'FINSI'; *------- Caracteristiques initiales en cas de grands deplacements ----- 'SI' WTAB.'ITCAR'; 'FINSI'; 'FINSI'; ************************************************************************ **************** APPEL A UNPAS ******************************** ************************************************************************ 'MENA' ; *---------- Mise a jour du MODELE du PAS precedent --------------- WTAB.'MO_TOT_PREC' = TT.'MO_TOT_PREC' ; *---------- retour a la configuration initiale ------------------- 'SI' (WTAB.'GRANDS_DEPLACEMENTS' 'OU' WTAB.'FEFP_FORMULATION'); 'FORM' WTAB.'FOR0'; 'FINSI'; *------- test si on a converge * en dynamique et en poreux on garde le PRECED.FREA1 du dernier pas * converge (dans le cas ou on voudrait continuer le calcul) * 'SI' WTAB.'DYNAMIQUE' ; WTAB.'FREA1' = F1 ; 'FINSI'; * 'SI' WTAB.'CONSOLIDATION' ;WTAB.'FREA1' = FF1 ; 'FINSI'; 'ERREUR' 997 ; 'FINSI'; * Remplissage de la table ESTIMATION : champs en fin de pas DEP0= conti.'DEPLACEMENTS'; * DEP = ENLEVER DEP0 'LX'; estim.'DEPLACEMENTS'= TT.'ZU1' ; * 'DETRUIRE' DEP; estim.'DEFORMATIONS'= TT.'DEFF'; estim.'CONTRAINTES' = TT.'SIGF' ; estim.'DFGRAD' = TT.'DFGRAD'; 'SI' WTAB.'IPLAVI' ; estim.'VARIABLES_INTERNES' = TT.'VARF'; estim.'DEFORMATIONS_INELASTIQUES' = TT.'DFPF'; 'FINSI' ; 'SI' WTAB.'GRANDS_DEPLACEMENTS' ; estim.'FOR' = TT.'FOR' ; 'FINSI' ; 'SI' WTAB . 'DYNAMIQUE' ; estim.'VITESSES' = TT.'VITI' ; estim.'ACCELERATIONS' = TT.'ACCEI' ; 'FINSI'; * 'SI' WTAB .'ITCAR'; * estim.'CARA_ACTU' = TT.'CARA' ; * 'FINSI'; *** Reevaluation des donnees du calcul dependant de la mecanique 'SI' WTAB.'PROCEDURE_REEV_MEC' ; REEV_MEC PRECED 1; 'FINSI' ; 'FINSI'; *####################################################################### *################### FIN DU CALCUL D'UN PAS MECANIQUE ################## *####################################################################### *** *** Test de la convergence mecanique thermique *** 'SI' WTAB.'CONVERGENCE_MEC_THE' ; * je cherche la convergence thermo-mecanique : je dois au moins * calculer deux fois mon probleme 'SI' (I_BOTH > 1) ; * Test sur toutes les composantes (notamment, si DIFFUSION) CHT1 = WTAB . 'THER_COURANT' ; DUABS2 = 'ABS' (WTAB.'THER_COURANTP' - CHT1) ; CRICOH1 = 0. ; 'REPE' BINCO1 NBINCO1 ; 'SI' (NORMI1 '<EG' (1.E-14 * MDUABSI1)) ; NORMI1 = 1. ; 'FINS' ; CRICOHI1 = MDUABSI1 / NORMI1 ; 'SI' (CRICOHI1 '>' CRICOH1) ; CRICOH1 = CRICOHI1 ; 'FINS' ; 'FIN' BINCO1 ; WTAB.'CONV_THMEC' = CRICOH1 '<' (WTAB . 'CRITERE_COHERENCE') ; * Fin de boucle Si ne converge Pas 'SI'('NON' WTAB.'CONV_THMEC') ; 'SI' (I_BOTH >EG WTAB.'BOU_METH'); 'MESS' 'PAS DE COHERENCE TROUVEE MECANIQUE THERMIQUE' ; 'ERREUR' 999; 'FINSI' ; 'FINSI' ; 'SINON' ; * je suis sur la premiere boucle de convergence thermomecanique WTAB.'CONV_THMEC' = FAUX ; 'FINSI' ; * THER_COURANTPrecedent dans WTAB pour test CONVERGENCE_MEC_THE WTAB . 'THER_COURANTP' = WTAB . 'THER_COURANT' ; 'SINON' ; * ici je ne cherche pas la convergence thermomecanique WTAB.'CONV_THMEC' = VRAI ; 'FINSI' ; 'SI' (WTAB.'CONV_THMEC') ; 'QUITTER' BO_BOTH ; 'FINSI' ; FORME WTAB.'GE0_DEB'; 'FINSI' ; 'FIN' BO_BOTH ; *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ *++++++++++++++++ fin de boucle interne de convergence mec_ther ++++++++ *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ *----- Preparation du pas suivant : Thermique et Diffusion 'SI' WTAB.'FOR_THER'; WTAB.'TET2' = estim.'TEMPERATURES' ; WTAB.'TET1'=WTAB.'TET2'; 'SI' ('EGA' WTAB.'PROCEDURE_THERMIQUE' 'DUPONT'); WTAB.'TET0' = WTAB.'TET1' ; WTAB.'VIEUXPAS' = WTAB.'NOUV_PAS' ; WTAB.'RELAXATION_DUPONT' = CHTER.'RELAXATION_DUPONT'; WTAB.'TET1' = CHTER.'INITIAL(1)'; 'FINSI' ; 'FINSI'; 'FINSI' ; 'SI' WTAB.'FOR_DIFF'; WTAB.'CO1' = WTAB.'CO2' ; WTAB.'CO2' = estim.'CONCENTRATIONS' ; 'FINSI' ; *----- Preparation du pas suivant : Mecanique 'SI' WTAB.'FOR_MECA' ; 'SI' ('EXISTE' TT 'SECOND_MEMBRE'); WTAB . 'SECOND_MEMBRE' = TT . 'SECOND_MEMBRE' ; 'FINSI' ; 'SI' ('EXISTE' TT 'SUCCES'); WTAB . 'SUCCES' = TT . 'SUCCES' ; 'FINSI' ; 'SI' ('EXISTE' TT 'AUTOCOEF'); WTAB . 'AUTOCOEF' = TT . 'AUTOCOEF' ; 'FINSI' ; 'SI' ('EXISTE' TT 'AUTOREDU'); WTAB . 'AUTOREDU' = TT . 'AUTOREDU' ; 'FINSI' ; 'SI' ('EXISTE' TT 'AUTORED1'); WTAB . 'AUTORED1' = TT . 'AUTORED1' ; 'FINSI' ; 'SI' ('EXISTE' TT 'RIBLO_M'); WTAB . 'RIBLO_M' = TT . 'RIBLO_M' ; WTAB . 'LISEA_M' = TT . 'LISEA_M' ; 'FINSI' ; 'SI' ('EXISTE' TT 'INCREMENT'); WTAB . 'INCREMENT' = TT . 'INCREMENT' ; 'FINSI' ; 'SI' ('EXISTE' TT 'INITEMPS'); WTAB . 'INITEMPS' = TT . 'INITEMPS' ; 'FINSI' ; 'SI' ('EXISTE' TT 'DT'); WTAB . 'DT' = TT . 'DT' ; 'FINSI' ; 'SI' ('EXISTE' TT 'NBPLAS'); WTAB . 'NBPLAS' = TT . 'NBPLAS' ; 'FINSI' ; 'SI' ('EXISTE' TT 'NOMBRE_ITERATIONS'); WTAB . 'NOMBRE_ITERATIONS' = TT . 'NOMBRE_ITERATIONS' ; 'FINSI' ; 'SI' ('EXISTE' TT 'FFROT'); WTAB . 'FFROT' = TT . 'FFROT' ; 'FINSI' ; 'SI' ('EXISTE' TT 'RESIDU'); WTAB . 'RESIDU' = TT . 'RESIDU' ; 'FINSI' ; 'SI' ('EXISTE' TT 'FNONL'); WTAB . 'FNONL' = TT . 'FNONL' ; 'FINSI' ; 'SI' ('EXISTE' TT 'DTPREC'); WTAB . 'DTPREC' = TT . 'DTPREC' ; 'FINSI' ; * SP : Modification de WTAB.'TET2' suite a appel a UNPAS * CB : SI (IPILOT) ==> TET2 est TIRE entre TEMPS0 et TI 'SI' ('EXISTE' TT 'TET2'); WTAB . 'TET2' = TT . 'TET2' ; 'FINSI' ; 'SI' ('EXISTE' TT 'XDENO'); WTAB . 'XDENO' = TT . 'XDENO' ; 'FINSI' ; 'SI' ('EXISTE' TT 'XDENOM'); WTAB . 'XDENOM' = TT . 'XDENOM' ; 'FINSI' ; 'SI' ('EXISTE' TT 'LASTKTAN'); WTAB . 'LASTKTAN' = TT . 'LASTKTAN' ; 'FINSI' ; 'SI' ('EXISTE' TT 'DFGRAD'); WTAB . 'DFGRAD'= TT .'DFGRAD'; 'FINSI' ; WTAB.'ETHER1'= TT.'ETHER2'; WTAB.'ETHER2'= TT.'ETHER2'; 'FINSI'; WTAB.'MSRTHER1'= TT.'MSRTHER2'; WTAB.'MSRTHER2'= TT.'MSRTHER2'; 'FINSI'; WTAB.'DEFOR1'= TT.'DEFOR2'; WTAB.'DEFOR2'= TT.'DEFOR2'; 'FINSI'; WTAB.'ETAT1'= TT.'ETAT2'; 'FINSI'; * fin des reactualisations. *--------------------------- deplacement ------------------------------ TT.'DEPTOT' = estim.'DEPLACEMENTS' ; *-------------------- forces de reaction ------------------------------ *------------------ deformation d'origine thermique ------------------ 'SI' WTAB.'CHAR_THE'; WTAB.'ETHER2' = TT.'ETHER2' ; 'SI' WTAB.'POR1' ; WTAB.'MSRTHER2' = TT.'MSRTHER2'; 'FINSI'; 'FINSI'; *------- en dynamique : vitesse, forces de reactions, operateur ------- 'SI' WTAB . 'DYNAMIQUE' ; 'SI' WTAB . 'LIAISON_PERSISTANTE' ; * corection des vitesses pour avoir des vitesses relatives nulles * aux points qui sont en contact TT.'VITI' = TT.'VITI' + TT.'VAUX' ; 'SINON' ; * forces d'acceleration et d'amortissement a la fin du pas * * en cas d'appuis unilateraux avec choc elastique essai de corriger * les vitesses fournies par le schema TT.'VITI'= VITEUNIL TT.'ZRAIDV' WTAB.'MASSE' TT.'VITI' tt.'DEPT' DEP0 WTAB.'DT' WTAB.'SECOND_MEMBRE' WTAB; 'FINSI' ; 'SI' ( 'NEG' WTAB.'REAPREC' 'INCONNU'); 'FINSI' ; 'SINON'; 'FINSI'; estim.'VITESSES' = TT.'VITI' ; 'FINSI'; *---------- en consolidation : operateur ------------------------------ 'SI' WTAB . 'CONSOLIDATION' ; WTAB.'OPERATEUR' = ROP; 'FINSI'; *-------------------------- configuration ----------------------------- 'SI' WTAB.'GRANDS_DEPLACEMENTS' ; WTAB.'RECALCUL'= VRAI ; WTAB.'GE0_DEB' = TT.'FOR' ; 'SI' WTAB.'ITCAR' ; 'FINSI' ; 'FINSI'; 'FORM' WTAB.'FOR0'; *********************************************************************** 'SI' ('ET' (WTAB.'FEFP_FORMULATION') (WTAB.'UPDATE_LAGRANGIAN')) ; * tc 'SI' ( 'NEG' WTAB.'FOR' 'INCONNU'); DETR GEOM1; 'FINSI'; WTAB.'GE0_DEB' = TT.'FOR' ; WTAB.'RECALCUL'=VRAI; 'FINSI'; ************************************************************************ *--------------------- destruction de l operateur ---------------------- 'SI' (WTAB . 'RECADET') ; * 'DETR' RH 'ELEM'; 'OUBLIER' ROP; 'FINSI'; *----------------------------- temps initial -------------------------- DT2 =( TI - TEMP0)/10000.; TEMP0 = ( TI - TEMP0) * WTAB.'AUTOCOEF' + TEMP0; WTAB.'TEMPS0' = TEMP0; 'SINON'; TEMP0=TI; WTAB.'TEMPS0' = TEMP0; 'FINSI'; *----------------- Appel a une procedure personnelle ------------------- 'SI' (WTAB.'PROCEDURE_PERSO1'); PRECED.'PERSO1_APPEL' = 2 ; PERSO1 PRECED; WTAB . 'ARRET' = PRECED . 'ARRET' ; 'FINSI' ; TEMP0 = WTAB.'TEMPS0' ; 'FINSI'; *----------------- On redefinit WTAB.'CHARGEMENT_I' ------------------ 'SI' WTAB.'CONVERGENCE_MEC_THE' ; WTAB.'CHARGEMENT_I' = WTAB.'CHARGEMENT' ; 'FINSI'; 'FINSI'; *++++++++++++++++++ fin preparation pas suivant mecanique +++++ *################## Sauvegarde ############################### 'SI' ('NON' WTAB.'FOR_MECA') ; DT2 =( TI - TEMP0)/10000.; TEMP0=TI; WTAB.'TEMPS0' = TEMP0; TT = 'TABLE' ; 'FINSI'; * pour ne pas sauvegarder la matrice de raideur si on doit la recalculer 'SI' WTAB.'RECARI' ; PRECED.'WTABLE'= WTAB ; PRECED.'ESTIMATION'=estim ; 'FINSI'; 'FINSI'; 'FINSI'; *-- remplissage de la table de continuation et des tables de resultats *-- s'il faut garder les resultats, sauvegarde incrementale et *-- fantomisation si economique ******************************************* ***** cas du pilotage automatique ******* ******************************************* 'SI' WTAB . 'AUTOMATIQUE'; IAUTO=IAUTO+1; 'SI' ((WTAB . 'AUTOCOEF' 'EGA' 0.9999999D0) 'OU' (TEMP0 '>EG' TI)) ; TEMP0=TI; 'MESS' ' Objectif atteint '; 'MESS' ' '; WTAB.'AUTODEUX' = FAUX ; WTAB.AUTORED1 = 0 ; WTAB.AUTOREDU = 1. ; IAUTO=1; 'SINON'; 'MESS' ' '; 'SI' ( IAUTO >EG WTAB.'AUTOPAS'); 'ERREUR' 1000; * 'MESS' 'Pilotage non converge apres ' IAUTO ' pas.'; 'FINSI'; WTAB.'AUTODEUX'=VRAI;ICHG=ICHG - 1; 'FINSI'; 'FINSI'; * 'SI'(WTAB.'CHAR_THE' 'OU' WTAB.'FOR_THER'); WTAB.'TET1'=WTAB.'TET2'; 'SI' WTAB.'FOR_MECA'; WTAB.'ETHER1' =WTAB.'ETHER2'; 'FINSI'; 'SI' WTAB.'POR1'; WTAB.'MSRTHER1'=WTAB.'MSRTHER2'; 'FINSI'; 'FINSI' ; 'SI' WTAB.'CHAR_DEFI' ; WTAB.'DEFOR1'=WTAB.'DEFOR2';'FINSI'; 'SI' WTAB.'FOR_DIFF' ; WTAB.'CO1' =WTAB.'CO2' ;'FINSI' ; ************************************************************************ ****** cas de la convergence forcee ************************************************************************ 'SI' WTAB.'PAS_AJUSTE'; 'FINSI'; 'SI' WTAB.'ARRET'; 'QUITTER' BEXTERN; 'FINSI'; ************************************************************************ *************** FIN DE LA BOUCLE SUR LES PAS DE TEMPS ****************** ************************************************************************ 'FIN' BEXTERN; ************************************************************************ 'SI' ('NEG' WTAB.'AMORTISSEMENT' 'INCONNU'); WTAB.'AMORTISSEMENT' = TOTO ; 'FINSI'; 'OUBL' WTAB 'GE0_DEB' ; 'FINSI' ; * on tue WTAB.'MAT1' s'il existe car il peut etre tres gourmand en place 'MESS' ' '; 'MESS' * ************************************************************************ * * pour forcer le calcul de la rigidite si on rappele pasapas WTAB1= 'ENLEVER' WTAB 'RRRR'; PRECED .'WTABLE'= WTAB1; 'FINSI'; * Typage de la table en sortie de PASAPAS ; 'FINPROC' PRECED ;
© Cast3M 2003 - Tous droits réservés.
Mentions légales