16#include <Echange_contact_PolyMAC_HFV.h>
17#include <Schema_Euler_Implicite.h>
18#include <Op_Diff_PolyMAC_HFV_Elem.h>
19#include <Op_Diff_PolyMAC_HFV_Elem.h>
20#include <Champ_Elem_PolyMAC_HFV.h>
21#include <Champ_front_calc.h>
22#include <Champ_Uniforme.h>
23#include <Equation_base.h>
24#include <Probleme_base.h>
25#include <Domaine_PolyMAC_HFV.h>
26#include <Milieu_base.h>
32using namespace MEDCoupling;
41 if (
app_domains.size() == 0)
app_domains = { Motcle(
"Thermique"), Motcle(
"Neutronique"), Motcle(
"fraction_massique"), Motcle(
"indetermine") };
47 le_champ_front.typer(
"Ch_front_var_instationnaire_dep");
61 int i_op = -1, o_i_op = -1, i;
65 for (i = 0; i < o_eqn.nombre_d_operateurs(); i++)
77 const DoubleTab& xv = domaine.xv(), &o_xv = o_domaine.xv();
79 int i, f, o_f, nf_tot = fvf->nb_faces_tot(), o_nf_tot =
o_fvf->nb_faces_tot(), d, D =
dimension;
82 DoubleTrav xvf(nf_tot, D), o_xvf(o_nf_tot, D);
83 for (i = 0; i < nf_tot; i++)
84 for (d = 0; d < D; d++) xvf(i, d) = xv( fvf->num_face(i), d);
85 for (i = 0; i < o_nf_tot; i++)
86 for (d = 0; d < D; d++) o_xvf(i, d) = o_xv(
o_fvf->num_face(i), d);
89 MCAuto<DataArrayDouble> fdad(DataArrayDouble::New()), o_fdad(DataArrayDouble::New());
90 fdad->useExternalArrayWithRWAccess(xvf.addr(), nf_tot, D), o_fdad->useExternalArrayWithRWAccess(o_xvf.
addr(), o_nf_tot, D);
92 MCAuto<DataArrayIdType> f_idx(nf_tot && o_nf_tot ? o_fdad->findClosestTupleId(fdad) :
nullptr);
94 for (i = 0; i < nf_tot; i++)
96 f = fvf->num_face(i), o_f = o_nf_tot ?
o_fvf->num_face((
int)(f_idx->getIJ(i, 0))) : -1;
97 double d2 = o_f >= 0 ? domaine.dot(&xv(f, 0), &xv(f, 0), &o_xv(o_f, 0), &o_xv(o_f, 0)) : 1e8;
98 if (d2 < 1e-12)
f_dist(i) = o_f;
100 if (i < fvf->nb_faces() && d2 >= 1e-12)
101 Process::exit(
Nom(
"Echange_contact_PolyMAC_HFV: missing opposite faces detected between ") + fvf->
le_nom() +
" and " +
o_fvf->le_nom()
102 +
" ! Have you used Decouper_multi?");
106 Process::exit(
"Echange_contact_PolyMAC_HFV : MEDCoupling is required!");
classe Champ_front_calc Classe derivee de Champ_front_var qui represente les
const Frontiere_dis_base & front_dis() const
Renvoie la frontiere discretisee correspondante au domaine sur lequel prend la trace.
void creer(const Nom &, const Nom &, const Motcle &)
Cree l'objet Champ_front_calc representant la trace d'un champ inconnue sur une frontiere a partir de...
const Equation_base & equation() const
Renvoie l'equation associee a l'inconnue dont on prend la trace.
Domaine_Cl_dis_base & domaine_Cl_dis()
Renvoie le domaine des conditions aux limites discretisee dont l'objet fait partie.
std::vector< Motcle > app_domains
virtual Frontiere_dis_base & frontiere_dis()
Renvoie la frontiere discretisee a laquelle les conditions aux limites s'appliquent.
int rang_frontiere(const Nom &)
Classe Echange_externe_impose: Cette classe represente le cas particulier de la classe.
virtual Champ_front_base & T_ext()
Renvoie le champ T_ext de temperature imposee a la frontiere.
Class defining operators and methods for all reading operation in an input flow (file,...
classe Equation_base Le role d'une equation est le calcul d'un ou plusieurs champs....
virtual int nombre_d_operateurs() const =0
Probleme_base & probleme()
Renvoie le probleme associe a l'equation.
virtual const Operateur & operateur(int) const =0
Domaine_dis_base & domaine_dis()
Renvoie le domaine discretise associe a l'equation.
virtual void fixer_nb_comp(int i)
Fixe le nombre de composantes du champ.
const Equation_base & equation() const
Renvoie la reference sur l'equation pointe par MorEqn::mon_equation.
class Nom Une chaine de caractere pour nommer les objets de TRUST
const Nom & le_nom() const override
Renvoie *this;.
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 const Nom & le_nom() const
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
virtual Operateur_base & l_op_base()=0
const Nom & le_nom() const override
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Classe de base des flux de sortie.