Arcane  v3.15.0.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
Utilisation pour les matériaux

L'utilisation de l'API accélérateur pour les matériaux est similaire à l'utilisation sur les entités du maillage. La macro RUNCOMMAND_MAT_ENUMERATE() permet d'itérer sur un milieu IMeshEnvironment ou un matériau IMeshMaterial.

Les valeurs possibles pour cette macro sont:

Type d'itérationValeur de l'itérateur Type du conteneur

Description

EnvAndGlobalCell EnvAndGlobalCellIteratorValue IMeshEnvironment
EnvCellVectorView

Itération sur un milieu permettant de récupérer pour chaque itération le numéro local de la maille milieu, l'index de l'itération et le numéro local de la maille globale associée

MatAndGlobalCell MatAndGlobalCellIteratorValue IMeshMaterial
MatCellVectorView

Itération sur un matériau permettant de récupérer pour chaque itération le numéro local de la maille matériau, l'index de l'itération et le numéro local de la maille globale associée

AllEnvCell AllEnvCell AllEnvCellVectorView

Itération sur les AllEnvCell

EnvCell EnvCellLocalId IMeshEnvironment
EnvCellVectorView

Itération sur un milieu permettant de récupérer pour chaque itération uniquement le numéro local de la maille milieu

MatCell MatCellLocalId IMeshMaterial
MatCellVectorView

Itération sur un matériau permettant de récupérer pour chaque itération uniquement le numéro local de la maille matériau

Si on souhaite uniquement accéder aux numéros locaux des mailles matériaux ou milieux il est préférable pour des raisons de performance d'utiliser la version avec EnvCell ou MatCell comme type d'itérateur.

Voici un exemple de code pour itérer sur une maille milieu avec l'information de l'index de l'itération et de la maille globale associée

Int32 nb_cell = env1->cells().size();
Arcane::NumArray<Int32, MDDim1> cells_local_id(nb_cell);
{
auto queue = makeQueue(m_runner);
auto command = makeCommand(queue);
auto cells_local_id_view = viewOut(command, cells_local_id);
auto out_mat_a = viewOut(command, mat_a);
command << RUNCOMMAND_MAT_ENUMERATE(EnvAndGlobalCell, iter, m_env1)
{
EnvAndGlobalCellIteratorValue evi = iter; // Valeur de l'itérateur
auto [iter_mvi, iter_cid] = evi();
EnvCellLocalId mvi = iter_mvi; // Numéro local de la maille milieu
Arcane::CellLocalId cid = iter_cid; // Numéro de la maille globale de la maille milieu courante
Int32 iter_index = evi.index(); // Index de l'itération
cells_local_id_view[iter_index] = cid;
out_mat_a[mvi] = 1.2;
};
}
#define RUNCOMMAND_MAT_ENUMERATE(ConstituentItemNameType, iter_name, env_or_mat_container,...)
Macro pour itérer sur un matériau ou un milieu.
Integer size() const
Nombre d'éléments du groupe.
Definition ItemGroup.h:88
virtual CellGroup cells() const =0
Groupe des mailles de ce matériau.
Tableaux multi-dimensionnels pour les types numériques accessibles sur accélérateurs.
CellMaterialVariableScalarRef< Real > MaterialVariableCellReal
Variable matériau de type #Real

Voici un autre exemple pour itérer sur les AllEnvCell et récupérer les informations sur les milieux et matériaux présents dans chaque AllEnvCell

Arcane::Materials::AllEnvCellVectorView all_env_view = m_mm_mng->view(allCells());
auto cmd = makeCommand(queue);
auto in_b = viewIn(cmd, m_mat_b);
auto out_c = viewOut(cmd, m_mat_c);
auto in_c_g = viewIn(cmd, m_mat_c.globalVariable());
auto out_a_g = viewOut(cmd, m_mat_a);
cmd << RUNCOMMAND_MAT_ENUMERATE(AllEnvCell, all_env_cell_iter, all_env_view)
{
Arcane::Materials::AllEnvCell all_env_cell = all_env_cell_iter;
Arcane::CellLocalId cid = all_env_cell.globalCellId();
Real sum2 = 0.0;
for (Arcane::Materials::EnvCell ev : all_env_cell.subEnvItems()) {
sum2 += in_b[ev] + in_b[cid];
}
Real sum3 = 0.0;
if (all_env_cell.nbEnvironment() > 1) {
for (Arcane::Materials::EnvCell ev : all_env_cell.subEnvItems()) {
Real contrib2 = (in_b[ev] + in_b[all_env_cell]) - (sum2 + 1.);
out_c[ev] = contrib2 * in_c_g[cid];
sum3 += contrib2;
}
}
out_a_g[cid] = sum3;
};
Maille arcane avec info matériaux et milieux.
__host__ __device__ Int32 nbEnvironment() const
Nombre de milieux présents dans la maille.
__host__ __device__ CellLocalId globalCellId() const
localId() de la maille globale
Maille arcane d'un milieu.