14#include "arcane/materials/internal/MaterialModifierOperation.h"
16#include "arcane/utils/ITraceMng.h"
17#include "arcane/utils/FatalErrorException.h"
19#include "arcane/utils/IMemoryRessourceMng.h"
21#include "arcane/core/ItemPrinter.h"
22#include "arcane/core/ItemGroup.h"
23#include "arcane/core/IItemFamily.h"
24#include "arcane/core/materials/IMeshMaterial.h"
25#include "arcane/core/materials/internal/IMeshComponentInternal.h"
27#include "arcane/materials/internal/MeshMaterialVariableIndexer.h"
38MaterialModifierOperation::
39MaterialModifierOperation()
47MaterialModifierOperation::
48MaterialModifierOperation(IMeshMaterial* mat, SmallSpan<const Int32> ids,
bool is_add)
49: MaterialModifierOperation()
53 m_ids.resize(ids.size());
54 MemoryUtils::copy<Int32>(m_ids, ids);
70Int32 MaterialModifierOperation::
71_checkMaterialPresence(MaterialModifierOperation* operation)
87 if (presence_flags[lid]) {
89 <<
" is present several times in add/remove list for material mat=" << name;
92 presence_flags[lid] =
true;
95 if (operation->
isAdd()) {
96 for (
Int32 lid : mat_local_ids) {
97 if (presence_flags[lid]) {
99 <<
" is already in material mat=" << name;
105 for (
Int32 lid : mat_local_ids) {
106 presence_flags[lid] =
false;
110 if (presence_flags[lid]) {
112 <<
" is not in material mat=" << name;
133void MaterialModifierOperation::
134_filterValidIds(MaterialModifierOperation* operation,
Int32Array& valid_ids)
137 const bool do_add = operation->
isAdd();
150 if (!presence_flags[lid]) {
151 unique_occurence_lids.
add(lid);
152 presence_flags[lid] =
true;
159 for (
Int32 lid : mat_local_ids) {
160 if (presence_flags[lid]) {
168 for (
Int32 lid : mat_local_ids)
169 presence_flags[lid] =
false;
171 for (
Int32 lid : unique_occurence_lids) {
172 if (presence_flags[lid]) {
179 tm->
info(4) <<
"FILTERED_IDS n=" << valid_ids.
size() <<
" ids=" << valid_ids;
185void MaterialModifierOperation::
189 const bool filter_invalid =
true;
192 if (filter_invalid) {
195 m_ids.swap(filtered_ids);
198 ARCANE_FATAL(
"Invalid values for adding items in material name={0} nb_error={1}",
199 m_mat->name(), nb_error);
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Fonctions de gestion mémoire et des allocateurs.
Integer size() const
Nombre d'éléments du vecteur.
void clear()
Supprime les éléments du tableau.
void reserve(Int64 new_capacity)
Réserve le mémoire pour new_capacity éléments.
void add(ConstReferenceType val)
Ajoute l'élément val à la fin du tableau.
Interface d'une famille d'entités.
virtual Int32 maxLocalId() const =0
Interface du gestionnaire de traces.
virtual TraceMessage info()=0
Flot pour un message d'information.
IItemFamily * itemFamily() const
Famille d'entité à laquelle appartient ce groupe (0 pour le group nul)
Vue sur une liste pour obtenir des informations sur les entités.
Classe utilitaire pour imprimer les infos sur une entité.
virtual MeshMaterialVariableIndexer * variableIndexer() const =0
Indexeur pour accéder aux variables partielles.
virtual String name() const =0
Nom du composant.
virtual CellGroup cells() const =0
Groupe des mailles de ce matériau.
virtual ITraceMng * traceMng()=0
Gestionnaire de trace associé.
virtual IMeshComponentInternal * _internalApi()=0
API interne.
Interface d'un matériau d'un maillage.
IMeshMaterial * material() const
Matériau dont on souhaite ajouter/supprimer des mailles.
bool isAdd() const
Indique si l'opération consiste à ajouter ou supprimer des mailles du matériau.
static Int32 _checkMaterialPresence(MaterialModifierOperation *operation)
Vérifie si les mailles ids sont déjà dans le matériau mat.
static void _filterValidIds(MaterialModifierOperation *operation, Int32Array &valid_ids)
Filtre le tableau des mailles ids pour qu'il soit valide.
SmallSpan< const Int32 > ids() const
Liste des localId() des mailles à ajouter/supprimer.
Indexer pour les variables materiaux.
Vue d'un tableau d'éléments de type T.
Chaîne de caractères unicode.
Vecteur 1D de données avec sémantique par valeur (style STL).
Active toujours les traces dans les parties Arcane concernant les matériaux.
IMemoryAllocator * getDefaultDataAllocator()
Allocateur par défaut pour les données.
Int32 Integer
Type représentant un entier.
Array< Int32 > Int32Array
Tableau dynamique à une dimension d'entiers 32 bits.
std::int32_t Int32
Type entier signé sur 32 bits.