14#include "arcane/cartesianmesh/internal/AMRPatchPositionLevelGroup.h"
16#include "arcane/cartesianmesh/AMRPatchPosition.h"
29AMRPatchPositionLevelGroup::
30AMRPatchPositionLevelGroup(
Integer max_level)
31: m_max_level(max_level)
32, m_patches(max_level+1)
38AMRPatchPositionLevelGroup::
39~AMRPatchPositionLevelGroup()
45Integer AMRPatchPositionLevelGroup::
54ConstArrayView<AMRPatchPosition> AMRPatchPositionLevelGroup::
57 return m_patches[level];
63void AMRPatchPositionLevelGroup::
64addPatch(AMRPatchPosition patch)
66 m_patches[patch.level()].add(patch);
72void AMRPatchPositionLevelGroup::
73fusionPatches(Integer level)
75 fusionPatches(m_patches[level],
true);
81void AMRPatchPositionLevelGroup::
82fusionPatches(UniqueArray<AMRPatchPosition>& patch_position,
bool remove_null)
95 std::stable_sort(patch_position.begin(), patch_position.end(),
96 [](
const AMRPatchPosition& a,
const AMRPatchPosition& b) {
97 return a.nbCells() < b.nbCells();
100 for (Integer p0 = 0; p0 < patch_position.size(); ++p0) {
101 AMRPatchPosition& patch_fusion_0 = patch_position[p0];
102 if (patch_fusion_0.isNull())
105 for (Integer p1 = p0 + 1; p1 < patch_position.size(); ++p1) {
106 AMRPatchPosition& patch_fusion_1 = patch_position[p1];
107 if (patch_fusion_1.isNull())
121 if (patch_fusion_0.fusion(patch_fusion_1)) {
124 patch_fusion_1.setLevel(-2);
135 for (Integer i = 0; i < patch_position.size(); ++i) {
136 if (patch_position[i].isNull()) {
137 patch_position.remove(i);
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.