16#include <Solveur_Newmark.h>
17#include <Equation_Navier_Cauchy.h>
55 les_mots[1] =
"gamma";
56 les_mots[2] =
"alpha";
59 int rang = les_mots.
search(motlu);
79 Cerr <<
"Keyword : " << motlu <<
" is not understood in " <<
que_suis_je() << finl;
90 Cerr <<
que_suis_je() <<
" cannot be used with equation type " << eqn.
que_suis_je() <<
". Expected Equation_Navier_Cauchy." << finl;
94 DoubleTab u_old(current);
114 const double a0 = 1.0 / (beta_ * dt * dt);
115 const double a1 = gamma_ / (beta_ * dt);
123 for (
int i = 0; i < N; i++)
124 u_pred_.addr()[i] = eqn.
inconnue().
passe().
addr()[i] + dt * v_n_.addr()[i] + dt * dt * (0.5 - beta_) * a_n_.addr()[i];
126 for (
int i = 0; i < N; i++)
127 v_pred_.addr()[i] = v_n_.addr()[i] + dt * (1.0 - gamma_) * a_n_.addr()[i];
133 const double dt_eff = 1.0 / a0;
142 DoubleTrav rhs(current);
144 statistics().begin_count(STD_COUNTERS::matrix_assembly,statistics().get_last_opened_counter_level()+1);
146 statistics().end_count(STD_COUNTERS::matrix_assembly);
159 const double dt_eff_C_mat = 1.0 / (a1 * alpha_);
163 DoubleTrav w(current);
165 for (
int i = 0; i < N; i++)
166 w.
addr()[i] = a1 * u_pred_.addr()[i] - v_pred_.addr()[i];
167 const double dt_eff_C_rhs = 1.0 / alpha_;
180 for (
int i = 0; i < N; i++)
181 a_kp1_.addr()[i] = a0 * (current.
addr()[i] - u_pred_.addr()[i]);
183 for (
int i = 0; i < N; i++)
184 v_kp1_.addr()[i] = v_pred_.addr()[i] + gamma_ * dt * a_kp1_.addr()[i];
187 DoubleTab dudt(current);
189 double dudt_norme = mp_norme_vect(dudt);
192 const bool converge = (dudt_norme < seuil_convg);
193 Cout << eqn.
que_suis_je() << (converge ?
" is " :
" is not ") <<
"converged at the implicit iteration " << nb_iter <<
" ( ||uk-uk-1|| = " << dudt_norme << (converge ?
"<" :
">") <<
" implicit threshold " << seuil_convg <<
" )" << finl;
198 return converge ? 1 : 0;
DoubleTab & passe(int i=1) override
Renvoie les valeurs du champs a l'instant t-i.
Class defining operators and methods for all reading operation in an input flow (file,...
Navier–Cauchy equation for small-strain linear elasticity.
classe Equation_base Le role d'une equation est le calcul d'un ou plusieurs champs....
Solveur_Masse_base & solv_masse()
Renvoie le solveur de masse associe a l'equation.
virtual void valider_iteration()
methode virtuelle permettant de corriger l'onconnue lors d'iterations implicites par exemple K-eps do...
virtual const Champ_Inc_base & inconnue() const =0
virtual void assembler(Matrice_Morse &mat_morse, const DoubleTab &present, DoubleTab &secmem)
virtual void modifier_pour_Cl(Matrice_Morse &mat_morse, DoubleTab &secmem) const
virtual void dimensionner_matrice(Matrice_Morse &mat_morse)
Classe Matrice_Morse Represente une matrice M (creuse), non necessairement carree.
Une chaine de caractere (Nom) en majuscules.
Un tableau d'objets de la classe Motcle.
int search(const Motcle &t) const
const Nom & que_suis_je() const
renvoie la chaine identifiant la classe.
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
double & seuil_convergence_implicite()
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
class SolveurSys Un SolveurSys represente n'importe qu'elle classe
int resoudre_systeme(const Matrice_Base &matrice, const DoubleVect &secmem, DoubleVect &solution)
Parametre_implicite & get_and_set_parametre_implicite(Equation_base &eqn)
virtual Matrice_Base & ajouter_masse(double dt, Matrice_Base &matrice, int penalisation=1) const
Newmark time integration scheme for linear elasticity.
Entree & lire(const Motcle &, Entree &) override
bool iterer_eqn(Equation_base &equation, const DoubleTab &inconnue, DoubleTab &result, double dt, int numero_iteration, int &ok) override
class Solveur_non_lineaire
Classe de base des flux de sortie.
_SIZE_ dimension_tot(int) const override
_SIZE_ size_totale() const