16#include <Eq_rayo_semi_transp.h>
17#include <Pb_rayo_semi_transp.h>
18#include <Matrice_Morse_Sym.h>
19#include <Champ_Uniforme.h>
20#include <Matrice_Bloc.h>
21#include <Discret_Thyd.h>
22#include <Fluide_base.h>
36 rayo_solv_->resoudre(temps);
58 if (mot ==
"conditions_limites|boundary_conditions")
63 else if (mot ==
"solveur")
65 Cerr <<
"Reading and typing of the radiation equation solver :" << finl;
66 Nom nom_solveur(
"Solv_");
69 nom_solveur += type_solv_sys;
70 Cerr <<
"Name of the radiation equation solver : " << nom_solveur << finl;
73 solveur_.nommer(
"solveur_irradiance");
87 le_dom_Cl_dis->les_conditions_limites(i)->associer_fr_dis_base(la_fr_dis);
91 Cerr <<
"Reading and typing of the diffusion operator of equation " <<
que_suis_je() << finl;
94 if (
fluide().is_rayo_semi_transp())
96 if (
fluide().is_longueur_rayo_discretised())
100 Cerr <<
"Error in Eq_rayo_semi_transp::completer." << finl;
101 Cerr <<
"You may not have discretized the problem of type Pb_Couple_rayo_semi_transp." << finl;
107 Cerr <<
"Error : the radiative properties of the incompressible fluid have not" << finl;
108 Cerr <<
"been defined while a semi transparent radiation problem is used." << finl;
109 Cerr <<
"The fields kappa and indice which respectively define the absoption coefficient" << finl;
110 Cerr <<
"and the refraction index must be added to the fluid properties." << finl;
115 Cerr <<
"Error while reading the Radiation equation. Your fluid is of type " <<
fluide().
que_suis_je() << finl;
116 Cerr <<
"Currently only fluid of type Fluide_base can be considered with the semi transparent radiation model." << finl;
130 rayo_solv_->assembler_matrice();
140 if (
fluide().is_rayo_semi_transp())
144 le_fluide_ = un_fluide;
148 Cerr <<
"Error : the radiative properties of the incompressible fluid have not" << finl;
149 Cerr <<
"been defined while a semi transparent radiation problem is used." << finl;
150 Cerr <<
"The fields kappa and indice which respectively define the absoption coefficient" << finl;
151 Cerr <<
"and the refraction index must be added to the fluid properties." << finl;
156 Cerr <<
"Error while reading the Radiation equation. Your fluid is of type " <<
fluide().
que_suis_je() << finl;
157 Cerr <<
"Currently only fluid of type Fluide_base can be considered with the semi transparent radiation model." << finl;
170 Cerr <<
"You forgot to associate the fluid to the problem named " <<
probleme().
le_nom() << finl;
173 return le_fluide_.valeur();
186 Cerr <<
"You forgot to associate the fluid to the problem named " <<
probleme().
le_nom() << finl;
189 return le_fluide_.valeur();
208 Cerr <<
"Error for Eq_rayo_semi_transp::operateur(int i)" << finl;
210 Cerr <<
"and you are trying to access the " << i <<
" th one." << finl;
232 Cerr <<
"Error for Eq_rayo_semi_transp::operateur(int i)" << finl;
234 Cerr <<
"and you are trying to access the " << i <<
" th one." << finl;
242 if (opt == DESCRIPTION)
252 Cerr <<
"Radiation equation discretisation" << finl;
260 if (discr ==
"VEFPreP1B") discr =
"VEF";
262 rayo_solv_.typer(type);
263 rayo_solv_->associer_equation_rayo(*
this);
273 return pb_rayo_semi_transp_->discretisation();
285 const int n1 = rayo_solv_->nb_colonnes_tot();
286 const int n2 = rayo_solv_->nb_colonnes();
299 DoubleTab ligne_tmp(n1);
300 for (
int i = 0; i < n2; i++)
309 for (k = tab1RR(i) - 1; k < tab1RR(i + 1) - 1; k++)
310 coeffRR[k] = ligne_tmp(tab2RR[k] - 1);
313 for (k = tab1RV(i) - 1; k < tab1RV(i + 1) - 1; k++)
314 coeffRV[k] = ligne_tmp(n2 + tab2RV[k] - 1);
320 const int n1 = rayo_solv_->nb_colonnes_tot();
321 const int n2 = rayo_solv_->nb_colonnes();
327 matrice_tmp.typer(
"Matrice_Bloc");
330 matrice.
get_bloc(0, 0).typer(
"Matrice_Morse_Sym");
331 matrice.
get_bloc(0, 1).typer(
"Matrice_Morse");
343 IntVect compteur_MBrr(n2);
344 IntVect compteur_MBrv(n2);
351 for (iligne = 0; iligne < n2; iligne++)
354 for (k = tab1(iligne) - 1; k < tab1(iligne + 1) - 1; k++)
356 jcolonne = tab2(k) - 1;
360 if ((jcolonne >= iligne) && (jcolonne < n2))
363 compteur_MBrr(iligne)++;
369 compteur_MBrv(iligne)++;
377 for (
int i = 0; i < n2; i++)
379 tab1RR(i + 1) = compteur_MBrr(i) + tab1RR(i);
380 tab1RV(i + 1) = compteur_MBrv(i) + tab1RV(i);
387 int compteurRR, compteurRV;
388 for (iligne = 0; iligne < n2; iligne++)
391 compteurRR = tab1RR(iligne) - 1;
392 compteurRV = tab1RV(iligne) - 1;
393 for (k = tab1(iligne) - 1; k < tab1(iligne + 1) - 1; k++)
395 jcolonne = tab2(k) - 1;
399 if ((jcolonne >= iligne) && (jcolonne < n2))
402 tab2RR(compteurRR) = tab2(k);
409 tab2RV(compteurRV) = tab2(k) - n2;
classe Discret_Thyd Cette classe est la classe de base representant une discretisation
classe Discretisation_base Cette classe represente un schema de discretisation en espace,...
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
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
const Frontiere_dis_base & frontiere_dis(const Nom &) const
Renvoie la frontiere de Nom nom.
Une entree dont la source est une chaine de caracteres.
Class defining operators and methods for all reading operation in an input flow (file,...
Milieu_base & milieu() override
Renvoie le milieu physique de l'equation (le Fluide_base upcaste en Milieu_base).
void associer_milieu_base(const Milieu_base &) override
Associe un milieu physique a l'equation.
void set_param(Param &titi) const override
int lire_motcle_non_standard(const Motcle &, Entree &) override
Lecture des parametres de type non simple d'un objet_U a partir d'un flot d'entree.
void associer_pb_base(const Probleme_base &pb) override
S'associe au Probleme passe en parametre.
void dimensionner_Mat_Bloc_Morse_Sym(Matrice &matrice_tmp)
void completer() override
Complete la construction (initialisation) des objets associes a l'equation.
void discretiser() override
Discretise l'equation.
bool initTimeStep(double dt) override
Allocation et initialisation de l'inconnue et des CLs jusqu'a present+dt.
Matrice_Morse la_matrice_
void associer_fluide(const Fluide_base &un_fluide)
void Mat_Morse_to_Mat_Bloc(Matrice &matrice_tmp)
void get_noms_champs_postraitables(Noms &nom, Option opt=NONE) const override
const Operateur & operateur(int) const override
Renvoie l'operateur specifie par son index: renvoie terme_diffusif si i = 0.
Operateur_Diff terme_diffusif_
const Discretisation_base & discretisation() const
Renvoie la discretisation associee a l'equation.
int nombre_d_operateurs() const override
classe Equation_base Le role d'une equation est le calcul d'un ou plusieurs champs....
virtual int verif_Cl() const
Verifie la compatibilite des conditions limites avec l'equation.
virtual void associer_pb_base(const Probleme_base &)
S'associe au Probleme passe en parametre.
virtual Entree & lire_cl(Entree &)
Lecture des conditions limites sur un flot d'entree.
virtual void completer()
Complete la construction (initialisation) des objets associes a l'equation.
Probleme_base & probleme()
Renvoie le probleme associe a l'equation.
virtual void associer_sch_tps_base(const Schema_Temps_base &)
S'associe au schema_en_temps.
Schema_Temps_base & schema_temps()
Renvoie le schema en temps associe a l'equation.
virtual bool initTimeStep(double dt)
Allocation et initialisation de l'inconnue et des CLs jusqu'a present+dt.
virtual void discretiser()
Discretise l'equation.
Champs_compris champs_compris_
Domaine_dis_base & domaine_dis()
Renvoie le domaine discretise associe a l'equation.
classe Fluide_base Cette classe represente un d'un fluide incompressible ainsi que
classe Frontiere_dis_base Classe representant une frontiere discretisee.
virtual void dimensionner(int N, int M)
virtual const Matrice & get_bloc(int i, int j) const
Classe Matrice_Morse_Sym Represente une matrice M (creuse) symetrique stockee au format Morse.
Classe Matrice_Morse Represente une matrice M (creuse), non necessairement carree.
void dimensionner(int n, _SIZE_ nnz)
Size the matrix with n lines and n columns and nnz zero-values coefficients.
Classe Matrice Classe generique de la hierarchie des matrices.
classe Milieu_base Cette classe est la base de la hierarchie des milieux (physiques)
Une chaine de caractere (Nom) en majuscules.
class Nom Une chaine de caractere pour nommer les objets de TRUST
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 Operateur Classe generique de la hierarchie des operateurs.
Helper class to factorize the readOn method of Objet_U classes.
void ajouter_non_std(const char *keyword, const Objet_U *value, Param::Nature nat=Param::OPTIONAL)
Register a keyword handled by Objet_U::lire_motcle_non_standard.
Le Pb_rayo_semi_transp est un Probleme_base qui a 4 particularites : * Son equation doit etre typee e...
const Nom & le_nom() const override
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
const Schema_Temps_base & schema_temps() const
Renvoie le schema en temps associe 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.