13#include "arcane/cartesianmesh/CartesianPatchGroup.h"
15#include "arcane/cartesianmesh/internal/CartesianMeshPatch.h"
16#include "arcane/core/IMesh.h"
17#include "arcane/core/IParallelMng.h"
18#include "arccore/trace/ITraceMng.h"
20#include "arcane/cartesianmesh/ICartesianMeshNumberingMng.h"
38void CartesianPatchGroup::
43 auto* cdi =
new CartesianMeshPatch(m_cmesh, nextIndexForNewPatch()+1);
44 m_amr_patch_cell_groups.add(cell_group);
45 _addPatchInstance(
makeRef(cdi));
46 m_cmesh->traceMng()->info() <<
"m_amr_patch_cell_groups : " << m_amr_patch_cell_groups.size()
47 <<
" -- m_amr_patches : " << m_amr_patches.size()
48 <<
" -- m_amr_patches_pointer : " << m_amr_patches_pointer.size()
49 <<
" -- cell_group name : " << m_amr_patch_cell_groups[nextIndexForNewPatch()-1].name()
50 <<
" -- index : " << nextIndexForNewPatch()-1
58 return m_amr_patches.size();
64 return m_amr_patches[index];
70 return CartesianMeshPatchListView{m_amr_patches_pointer};
77 ARCANE_FATAL(
"You cannot get cells of ground patch with this method");
79 return m_amr_patch_cell_groups[index-1];
83void CartesianPatchGroup::
86 m_amr_patch_cell_groups.clear();
87 m_amr_patches_pointer.clear();
88 m_amr_patches.clear();
92void CartesianPatchGroup::
95 if (m_patches_to_delete.contains(index)) {
101 if (index < 1 || index >= m_amr_patch_cell_groups.size()) {
105 m_patches_to_delete.add(index);
108void CartesianPatchGroup::
111 for (
CellGroup cells : m_amr_patch_cell_groups) {
112 cells.removeItems(cells_local_id);
116void CartesianPatchGroup::
119 UniqueArray<Integer> size_of_patches_before(m_amr_patch_cell_groups.size());
120 for (
Integer i = 0; i < m_amr_patch_cell_groups.size(); ++i) {
121 size_of_patches_before[i] = m_amr_patch_cell_groups[i].size();
125 for (
CellGroup cells : m_amr_patch_cell_groups) {
126 cells.removeItems(cells_local_id);
129 UniqueArray<Integer> size_of_patches_after(m_amr_patch_cell_groups.size());
130 for (
Integer i = 0; i < m_amr_patch_cell_groups.size(); ++i) {
131 size_of_patches_after[i] = m_amr_patch_cell_groups[i].size();
135 altered_patches.clear();
136 for (
Integer i = 0; i < size_of_patches_after.size(); ++i) {
137 if (size_of_patches_before[i] != size_of_patches_after[i]) {
138 altered_patches.add(i+1);
143void CartesianPatchGroup::
144applyPatchEdit(
bool remove_empty_patches)
146 _removeMultiplePatches(m_patches_to_delete);
147 m_patches_to_delete.clear();
149 if (remove_empty_patches) {
150 UniqueArray<Integer> size_of_patches(m_amr_patch_cell_groups.size());
151 for (
Integer i = 0; i < m_amr_patch_cell_groups.size(); ++i) {
152 size_of_patches[i] = m_amr_patch_cell_groups[i].size();
155 for (
Integer i = 0; i < size_of_patches.size(); ++i) {
156 if (size_of_patches[i] == 0) {
157 m_patches_to_delete.add(i+1);
160 _removeMultiplePatches(m_patches_to_delete);
161 m_patches_to_delete.clear();
181void CartesianPatchGroup::
182updateLevelsBeforeCoarsen()
184 for (ICartesianMeshPatch* patch : m_amr_patches_pointer) {
185 patch->setLevel(patch->level() + 1);
190nextIndexForNewPatch(){
191 return m_amr_patch_cell_groups.size();
194void CartesianPatchGroup::
197 m_amr_patches.add(v);
198 m_amr_patches_pointer.add(v.get());
201void CartesianPatchGroup::
204 m_amr_patch_cell_groups.remove(index-1);
205 m_amr_patches_pointer.remove(index);
206 m_amr_patches.remove(index);
208void CartesianPatchGroup::
212 for (
const Integer index : indexes) {
213 _removeOnePatch(index - count);
218void CartesianPatchGroup::
221 if (!m_amr_patches.empty())
return;
222 _addPatchInstance(
makeRef(
new CartesianMeshPatch(m_cmesh, -1)));
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Vue sur une liste de patchs.
Vue constante d'un tableau de type T.
Référence à une instance.
Vecteur 1D de données avec sémantique par référence.
ItemGroupT< Cell > CellGroup
Groupe de mailles.
@ ReduceMax
Maximum des valeurs.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.
auto makeRef(InstanceType *t) -> Ref< InstanceType >
Créé une référence sur un pointeur.