16#include <Domaine_Cl_dis_base.h>
17#include <Champ_Uniforme.h>
19#include <Source_Qdm_EF.h>
20#include <Equation_base.h>
21#include <Probleme_base.h>
22#include <Domaine_Cl_EF.h>
23#include <Domaine_EF.h>
37 la_source_lu.typer(type);
38 Champ_Don_base& ch_source_lu = ref_cast(Champ_Don_base,la_source_lu.valeur());
40 const int nb_comp = ch_source_lu.
nb_comp();
44 Cerr <<
"Erreur a la lecture du terme source de type " <<
que_suis_je() << finl;
45 Cerr <<
"le champ source doit avoir " <<
dimension <<
" composantes" << finl;
50 la_source_lu->fixer_nb_comp(nb_comp);
51 if (ch_source_lu.
le_nom()==
"anonyme") ch_source_lu.
nommer(
"Source_Qdm");
53 for (
int n = 0; n < nb_comp; n++) la_source_lu->fixer_nom_compo(n, ch_source_lu.
le_nom() + (nb_comp > 1 ? Nom(n) :
""));
54 for (
int n = 0; n < nb_comp; n++) la_source->fixer_nom_compo(n, ch_source_lu.
le_nom() + (nb_comp > 1 ? Nom(n) :
""));
58 la_source->valeurs() = 0.;
59 la_source->affecter(ch_source_lu);
79 const Domaine_EF& domaine_EF = le_dom_EF.valeur();
84 const DoubleTab& IPhi_thilde=domaine_EF.
IPhi_thilde();
89 const DoubleTab& tab_source=la_source->valeurs();
90 for (
int num_elem=0; num_elem<nb_elems; num_elem++)
91 for (
int comp=0; comp<ncomp; comp++)
95 if (!is_source_unif) cc=num_elem;
96 sourcel=tab_source(cc,comp);
97 for (
int i=0; i<nb_som_elem; i++)
101 resu(elems(num_elem,i),comp)+=sourcel*IPhi_thilde(num_elem,i);
116 la_source_lu->mettre_a_jour(temps);
117 la_source->affecter(la_source_lu.valeur());
129 if (motlu==
"source_qdm" && !champ_source_qdm_)
131 Motcle directive(
"champ_elem");
134 noms[0]=
"source_qdm";
135 Noms unites(nb_comp);
145 if (nom ==
"source_qdm" && champ_source_qdm_)
158 if (nom ==
"source_qdm" && champ_source_qdm_)
166 if (nom==
"source_qdm")
168 if (!champ_source_qdm_)
169 throw std::runtime_error(std::string(
"Field ") + nom.
getString() + std::string(
" not found !"));
171 int is_source_unif=0;
176 DoubleTab& valeurs = champ_source_qdm_->valeurs();
178 const DoubleTab& tab_source=la_source->valeurs();
182 for (
int num_el=0; num_el<nb_elem; num_el++)
186 if (!is_source_unif) cc=num_el;
187 valeurs(num_el,k)=tab_source(cc,k);
191 champ_source_qdm_->mettre_a_jour(
equation().probleme().schema_temps().temps_courant());
203 noms_compris.add(
"source_qdm");
204 if (opt==DESCRIPTION)
205 Cerr<<
" Source_Qdm_EF : "<< noms_compris <<finl;
207 nom.add(noms_compris);
classe Champ_base Cette classe est la base de la hierarchie des champs.
void nommer_completer_champ_physique(const Domaine_dis_base &domaine_vdf, const Nom &nom_champ, const Nom &unite, Champ_base &champ, const Probleme_base &pbi) const
void discretiser_champ(const Motcle &directive, const Domaine_dis_base &z, const Nom &nom, const Nom &unite, int nb_comp, int nb_pas_dt, double temps, OWN_PTR(Champ_Inc_base)&champ, const Nom &sous_type=NOM_VIDE) const
int nb_som_elem() const
Renvoie le nombre de sommets des elements geometriques constituants le domaine.
int_t nb_elem_tot() const
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
const DoubleTab & IPhi_thilde() const
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
const Domaine & domaine() const
Class defining operators and methods for all reading operation in an input flow (file,...
const Discretisation_base & discretisation() const
Renvoie la discretisation associee a l'equation.
Probleme_base & probleme()
Renvoie le probleme associe a l'equation.
const Nom & le_nom() const override
Renvoie le nom du champ.
void nommer(const Nom &) override
Donne un nom au champ.
virtual int nb_comp() const
const Equation_base & equation() const
Renvoie la reference sur l'equation pointe par MorEqn::mon_equation.
Une chaine de caractere (Nom) en majuscules.
const std::string & getString() const
Un tableau de chaine de caracteres (VECT(Nom)).
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.
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
const Discretisation_base & discretisation() const
Renvoie la discretisation associee au probleme.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Classe de base des flux de sortie.
OBS_PTR(Domaine_EF) le_dom_EF
const Champ_base & get_champ(const Motcle &nom) const override
void creer_champ(const Motcle &motlu) override
bool has_champ(const Motcle &nom, OBS_PTR(Champ_base) &ref_champ) const override
DoubleTab & calculer(DoubleTab &) const override
DoubleTab & ajouter(DoubleTab &) const override
void get_noms_champs_postraitables(Noms &nom, Option opt=NONE) const override
void associer_domaines(const Domaine_dis_base &, const Domaine_Cl_dis_base &) override
void associer_pb(const Probleme_base &) override
void mettre_a_jour(double) override
DOES NOTHING - to override in derived classes.
classe Source_base Un objet Source_base est un terme apparaissant au second membre d'une
Champs_compris champs_compris_
bool has_champ(const Motcle &nom, OBS_PTR(Champ_base) &ref_champ) const override
void get_noms_champs_postraitables(Noms &nom, Option opt=NONE) const override
_SIZE_ size_array() const
_SIZE_ dimension(int d) const
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")