14#include "arcane/utils/TraceAccessor.h"
15#include "arcane/utils/NotImplementedException.h"
16#include "arcane/utils/AutoDestroyUserData.h"
17#include "arcane/utils/IUserDataList.h"
18#include "arcane/utils/Ref.h"
19#include "arcane/utils/ScopedPtr.h"
20#include "arcane/utils/PlatformUtils.h"
23#include "arcane/core/IMesh.h"
24#include "arcane/core/ItemPrinter.h"
25#include "arcane/core/IItemFamily.h"
26#include "arcane/core/IParallelMng.h"
27#include "arcane/core/VariableTypes.h"
28#include "arcane/core/Properties.h"
29#include "arcane/core/IMeshModifier.h"
30#include "arcane/core/MeshStats.h"
31#include "arcane/core/ICartesianMeshGenerationInfo.h"
32#include "arcane/core/MeshEvents.h"
33#include "arcane/core/MeshKind.h"
34#include "arcane/core/internal/IMeshInternal.h"
36#include "arcane/cartesianmesh/ICartesianMesh.h"
37#include "arcane/cartesianmesh/CartesianConnectivity.h"
38#include "arcane/cartesianmesh/CartesianMeshRenumberingInfo.h"
39#include "arcane/cartesianmesh/CartesianMeshCoarsening.h"
40#include "arcane/cartesianmesh/CartesianMeshCoarsening2.h"
41#include "arcane/cartesianmesh/CartesianMeshPatchListView.h"
42#include "arcane/cartesianmesh/internal/CartesianMeshPatch.h"
43#include "arcane/cartesianmesh/internal/ICartesianMeshInternal.h"
45#include "arcane/cartesianmesh/internal/CartesianMeshUniqueIdRenumbering.h"
46#include "arcane/cartesianmesh/v2/CartesianMeshUniqueIdRenumberingV2.h"
48#include "arcane/cartesianmesh/CartesianMeshAMRPatchMng.h"
49#include "arcane/core/IGhostLayerMng.h"
78 :
public ICartesianMeshInternal
91 return m_cartesian_mesh->_createCartesianMeshCoarsening2();
97 void initCartesianMeshAMRPatchMng()
override
119 void build()
override;
129 return m_all_items_direction_info->cellDirection(
dir);
134 return m_all_items_direction_info->cellDirection(
idir);
139 return m_all_items_direction_info->faceDirection(
dir);
144 return m_all_items_direction_info->faceDirection(
idir);
149 return m_all_items_direction_info->nodeDirection(
dir);
154 return m_all_items_direction_info->nodeDirection(
idir);
163 return m_connectivity;
166 Int32
nbPatch()
const override {
return m_amr_patches.size(); }
186 ICartesianMeshInternal*
_internalApi()
override {
return &m_internal_api; }
196 InternalApi m_internal_api;
199 Int32 m_local_face_direction[3] = { -1, -1, -1 };
200 IMesh* m_mesh =
nullptr;
201 Ref<CartesianMeshPatch> m_all_items_direction_info;
202 CartesianConnectivity m_connectivity;
203 UniqueArray<CartesianConnectivity::Index> m_nodes_to_cell_storage;
204 UniqueArray<CartesianConnectivity::Index> m_cells_to_node_storage;
205 UniqueArray<CartesianConnectivity::Permutation> m_permutation_storage;
206 bool m_is_amr =
false;
208 UniqueArray<CellGroup> m_amr_patch_cell_groups;
209 UniqueArray<Ref<CartesianMeshPatch>> m_amr_patches;
210 UniqueArray<ICartesianMeshPatch*> m_amr_patches_pointer;
211 ScopedPtrT<Properties> m_properties;
213 EventObserverPool m_event_pool;
214 bool m_is_mesh_event_added =
false;
215 Int64 m_mesh_timestamp = 0;
220 void _computeMeshDirection(CartesianMeshPatch& cdi,
eMeshDirection dir,
224 void _applyRefine(ConstArrayView<Int32> cells_local_id);
225 void _removeCellsInPatches(ConstArrayView<Int32> const_array_view);
226 void _applyCoarse(ConstArrayView<Int32> cells_local_id);
227 void _addPatch(
const CellGroup& parent_group);
228 void _saveInfosInProperties();
230 std::tuple<CellGroup, NodeGroup>
231 _buildPatchGroups(
const CellGroup& cells, Integer patch_level);
232 void _refinePatch(Real3 position, Real3 length,
bool is_3d);
233 void _coarseZone(Real3 position, Real3 length,
bool is_3d);
234 void _cellsInZone(Real3 position, Real3 length,
bool is_3d, UniqueArray<Int32>& cells_local_id);
235 void _checkNeedComputeDirections();
236 void _checkAddObservableMeshChanged();
237 void _addPatchInstance(
const Ref<CartesianMeshPatch>& v)
239 m_amr_patches.add(v);
240 m_amr_patches_pointer.add(v.get());
247extern "C++" ICartesianMesh*
248arcaneCreateCartesianMesh(IMesh* mesh)
250 auto* cm =
new CartesianMeshImpl(mesh);
259CartesianMeshImpl(IMesh* mesh)
260: TraceAccessor(mesh->traceMng())
261, m_internal_api(this)
266, m_amr_type(mesh->meshKind().meshAMRKind())
268 if (m_amr_type == eMeshAMRKind::PatchCartesianMeshOnly)
269 m_internal_api.initCartesianMeshAMRPatchMng();
271 m_all_items_direction_info = makeRef(
new CartesianMeshPatch(
this,-1));
272 _addPatchInstance(m_all_items_direction_info);
278void CartesianMeshImpl::
281 m_properties =
new Properties(*(
mesh()->properties()),
"CartesianMesh");
286const Int32 SERIALIZE_VERSION = 1;
292void CartesianMeshImpl::
293_checkNeedComputeDirections()
296 if (m_mesh_timestamp!=new_timestamp){
297 info() <<
"Mesh timestamp has changed (old=" << m_mesh_timestamp <<
" new=" << new_timestamp <<
")";
305void CartesianMeshImpl::
306_saveInfosInProperties()
309 m_properties->set(
"Version",SERIALIZE_VERSION);
312 UniqueArray<String> patch_group_names;
313 for(
const CellGroup& x : m_amr_patch_cell_groups ){
314 patch_group_names.add(x.name());
316 m_properties->set(
"PatchGroupNames",patch_group_names);
325 info() <<
"Creating 'CartesianMesh' infos from dump";
328 Int32 v = m_properties->getInt32(
"Version");
329 if (v!=SERIALIZE_VERSION)
330 ARCANE_FATAL(
"Bad serializer version: trying to read from incompatible checkpoint v={0} expected={1}",
331 v,SERIALIZE_VERSION);
337 m_amr_patch_cell_groups.clear();
343 m_amr_patch_cell_groups.add(group);
352void CartesianMeshImpl::
353_checkAddObservableMeshChanged()
355 if (m_is_mesh_event_added)
357 m_is_mesh_event_added =
true;
360 auto f1 = [&](
const MeshEventArgs&){ this->_checkNeedComputeDirections(); };
370 info() <<
"CartesianMesh: computeDirections()";
373 _checkAddObservableMeshChanged();
375 m_amr_patches.clear();
376 m_amr_patches_pointer.clear();
377 _addPatchInstance(m_all_items_direction_info);
379 m_is_amr = m_mesh->isAmrActivated();
420 info(4) <<
"Cartesian mesh compute directions is_amr=" << m_is_amr;
422 for( Integer i=0; i<
nb_node; ++i ){
427 bool is_3d = m_mesh->dimension() == 3;
437 for (Integer i = 0; i <
nb_face; ++i) {
463 info(4) <<
"Advance in direction X -> " <<
next_face_x;
464 info(4) <<
"Advance in direction Y -> " <<
next_face_y;
465 info(4) <<
"Advance in direction Z -> " <<
next_face_z;
471 for (Integer i = 0; i <
nb_face; ++i) {
491 info(4) <<
"Advance in direction X -> " <<
next_face_x;
492 info(4) <<
"Advance in direction Y -> " <<
next_face_y;
496 info() <<
"Informations from IMesh properties:";
498 auto*
cmgi = ICartesianMeshGenerationInfo::getReference(m_mesh,
true);
500 info() <<
"GlobalNbCell = " <<
cmgi->globalNbCells();
501 info() <<
"OwnNbCell: " <<
cmgi->ownNbCells();
502 info() <<
"SubDomainOffset: " <<
cmgi->subDomainOffsets();
503 info() <<
"OwnCellOffset: " <<
cmgi->ownCellOffsets();
508 auto x = _buildPatchGroups(
mesh()->allLevelCells(0),0);
529 cdm._internalSetOffsetAndNbCellInfos(
cmgi->globalNbCells()[
idir],
cmgi->ownNbCells()[
idir],
533 info() <<
"Compute cartesian connectivity";
535 m_permutation_storage.resize(1);
536 m_permutation_storage[0].compute();
537 m_nodes_to_cell_storage.resize(
mesh()->nodeFamily()->maxLocalId());
538 m_cells_to_node_storage.resize(
mesh()->cellFamily()->maxLocalId());
539 m_connectivity._setStorage(m_nodes_to_cell_storage,m_cells_to_node_storage,&m_permutation_storage[0]);
544 for(
const CellGroup& cells : m_amr_patch_cell_groups ){
546 info() <<
"AMR Patch name=" << cells.name() <<
" size=" << cells.size() <<
" index=" <<
patch_index;
548 _addPatchInstance(makeRef(
cdi));
560 _saveInfosInProperties();
566std::tuple<CellGroup,NodeGroup> CartesianMeshImpl::
596void CartesianMeshImpl::
600 IItemFamily* cell_family = m_mesh->cellFamily();
601 IItemFamily* face_family = m_mesh->faceFamily();
602 IItemFamily* node_family = m_mesh->nodeFamily();
604 Int32 max_cell_id = cell_family->maxLocalId();
605 Int32 max_face_id = face_family->maxLocalId();
606 Int32 max_node_id = node_family->maxLocalId();
608 CellDirectionMng& cell_dm = cdi.cellDirection(dir);
609 cell_dm._internalResizeInfos(max_cell_id);
611 FaceDirectionMng& face_dm = cdi.faceDirection(dir);
612 face_dm._internalResizeInfos(max_face_id);
614 NodeDirectionMng& node_dm = cdi.nodeDirection(dir);
615 node_dm._internalResizeInfos(max_node_id);
618 info(4) <<
"COMPUTE DIRECTION dir=" << dir;
620 Int32 prev_local_face = -1;
621 Int32 next_local_face = m_local_face_direction[dir];
622 Integer mesh_dim = m_mesh->dimension();
625 prev_local_face = (next_local_face + 2) % 4;
626 else if (mesh_dim==3)
627 prev_local_face = (next_local_face + 3) % 6;
629 cell_dm._internalSetLocalFaceIndex(next_local_face,prev_local_face);
633 std::set<Int32> cells_set;
635 cells_set.insert(icell.itemLocalId());
642 Int32 my_level = cell.level();
643 Face next_face = cell.face(next_local_face);
644 Cell next_cell = next_face.backCell()==cell ? next_face.frontCell() : next_face.backCell();
645 if (cells_set.find(next_cell.localId())==cells_set.end())
647 else if (next_cell.level()!=my_level)
650 Face prev_face = cell.face(prev_local_face);
651 Cell prev_cell = prev_face.backCell()==cell ? prev_face.frontCell() : prev_face.backCell();
652 if (cells_set.find(prev_cell.localId())==cells_set.end())
654 else if (prev_cell.level()!=my_level)
656 cell_dm.m_infos_view[icell.itemLocalId()] = CellDirectionMng::ItemDirectionInfo(next_cell,prev_cell);
658 cell_dm._internalComputeInnerAndOuterItems(all_cells);
659 face_dm._internalComputeInfos(cell_dm,cells_center,faces_center);
660 node_dm._internalComputeInfos(cell_dm,all_nodes,cells_center);
666void CartesianMeshImpl::
667_refinePatch(Real3 position,Real3 length,
bool is_3d)
669 UniqueArray<Int32> cells_local_id;
670 _cellsInZone(position, length, is_3d, cells_local_id);
672 _applyRefine(cells_local_id);
673 _saveInfosInProperties();
679void CartesianMeshImpl::
680_coarseZone(Real3 position, Real3 length,
bool is_3d)
682 UniqueArray<Int32> cells_local_id;
683 _cellsInZone(position, length, is_3d, cells_local_id);
685 _applyCoarse(cells_local_id);
686 _saveInfosInProperties();
692void CartesianMeshImpl::
693_cellsInZone(Real3 position, Real3 length,
bool is_3d, UniqueArray<Int32>& cells_local_id)
699 Real3 min_pos = position;
700 Real3 max_pos = min_pos + length;
701 cells_local_id.clear();
705 for (NodeLocalId inode : cell.nodeIds())
706 center += nodes_coord[inode];
707 center /= cell.nbNode();
708 bool is_inside_x = center.x > min_pos.x && center.x < max_pos.x;
709 bool is_inside_y = center.y > min_pos.y && center.y < max_pos.y;
710 bool is_inside_z = (center.z > min_pos.z && center.z < max_pos.z) || !is_3d;
711 if (is_inside_x && is_inside_y && is_inside_z) {
712 cells_local_id.add(icell.itemLocalId());
723 info() <<
"REFINEMENT 2D position=" << position <<
" length=" << length;
735 info() <<
"REFINEMENT 3D position=" << position <<
" length=" << length;
736 _refinePatch(position,length,
true);
745 info() <<
"COARSEN 2D position=" << position <<
" length=" << length;
757 info() <<
"COARSEN 3D position=" << position <<
" length=" << length;
758 _coarseZone(position, length,
true);
768 ARCANE_FATAL(
"You cannot reduce number of ghost layer of level 0 with this method");
816 for (Integer i = 0; i < cell.nbHChildren(); ++i) {
818 cell_lid2[cell.level()].add(cell.hChild(i).localId());
860 min = std::min(min,
nlevel);
861 max = std::max(max,
nlevel);
875 Integer
new_level = ((min == max) ? min + 1 : max);
897 ARCANE_FATAL(
"Error in ghost layer counter algo. Report it plz.");
902 for (Integer i =
level_max - 1; i >= 0; --i) {
904 if (m_mesh->parallelMng()->reduce(Parallel::ReduceMax,
cell_lid2[i].size()) == 0) {
909 m_mesh->modifier()->flagCellToCoarsen(
cell_lid2[i]);
910 m_mesh->modifier()->coarsenItemsV2(
false);
921void CartesianMeshImpl::
925 Integer index = m_amr_patch_cell_groups.size();
936void CartesianMeshImpl::
939 Integer index = m_amr_patch_cell_groups.size();
942 String children_group_name = String(
"CartesianMeshPatchCells")+index;
943 UniqueArray<Int32> children_local_id;
946 for(Integer k=0; k<c.nbHChildren(); ++k ){
947 Cell child = c.hChild(k);
948 children_local_id.add(child.localId());
951 IItemFamily* cell_family = m_mesh->cellFamily();
952 CellGroup children_cells = cell_family->createGroup(children_group_name,children_local_id,
true);
953 m_amr_patch_cell_groups.add(children_cells);
959void CartesianMeshImpl::
960_removeCellsInPatches(ConstArrayView<Int32> const_array_view)
962 for (
CellGroup cells : m_amr_patch_cell_groups) {
966 IParallelMng* pm = m_mesh->parallelMng();
968 auto new_end = std::remove_if(m_amr_patch_cell_groups.begin(), m_amr_patch_cell_groups.end(),
969 [&pm](
const CellGroup& cells) { return pm->reduce(Parallel::ReduceMax, cells.size()) == 0; });
971 m_amr_patch_cell_groups.resize(new_end - m_amr_patch_cell_groups.begin());
977void CartesianMeshImpl::
978_applyRefine(ConstArrayView<Int32> cells_local_id)
980 IItemFamily* cell_family = m_mesh->cellFamily();
981 Integer nb_cell = cells_local_id.size();
982 info(4) <<
"Local_NbCellToRefine = " << nb_cell;
983 Integer index = m_amr_patch_cell_groups.size();
984 String parent_group_name = String(
"CartesianMeshPatchParentCells")+index;
985 CellGroup parent_cells = cell_family->createGroup(parent_group_name,cells_local_id,
true);
987 IParallelMng* pm = m_mesh->parallelMng();
988 Int64 total_nb_cell = pm->reduce(Parallel::ReduceSum,nb_cell);
989 info(4) <<
"Global_NbCellToRefine = " << total_nb_cell;
990 if (total_nb_cell==0)
993 if(m_amr_type == eMeshAMRKind::Cell) {
994 debug() <<
"Refine with modifier() (for all mesh types)";
995 m_mesh->modifier()->flagCellToRefine(cells_local_id);
996 m_mesh->modifier()->adapt();
998 else if(m_amr_type == eMeshAMRKind::PatchCartesianMeshOnly) {
999 debug() <<
"Refine with specific refiner (for cartesian mesh only)";
1001 m_internal_api.cartesianMeshAMRPatchMng()->flagCellToRefine(cells_local_id);
1002 m_internal_api.cartesianMeshAMRPatchMng()->refine();
1004 else if(m_amr_type == eMeshAMRKind::Patch) {
1005 ARCANE_FATAL(
"General patch AMR is not implemented. Please use PatchCartesianMeshOnly (3)");
1012 MeshStats ms(
traceMng(),m_mesh,m_mesh->parallelMng());
1015 _addPatch(parent_cells);
1021void CartesianMeshImpl::
1022_applyCoarse(ConstArrayView<Int32> cells_local_id)
1024 Integer nb_cell = cells_local_id.size();
1025 info(4) <<
"Local_NbCellToCoarsen = " << nb_cell;
1027 IParallelMng* pm = m_mesh->parallelMng();
1028 Int64 total_nb_cell = pm->reduce(Parallel::ReduceSum, nb_cell);
1029 info(4) <<
"Global_NbCellToCoarsen = " << total_nb_cell;
1030 if (total_nb_cell == 0)
1033 _removeCellsInPatches(cells_local_id);
1035 if (m_amr_type == eMeshAMRKind::Cell) {
1036 debug() <<
"Coarse with modifier() (for all mesh types)";
1037 m_mesh->modifier()->flagCellToCoarsen(cells_local_id);
1038 m_mesh->modifier()->coarsenItemsV2(
true);
1040 else if (m_amr_type == eMeshAMRKind::PatchCartesianMeshOnly) {
1041 ARCANE_NOT_YET_IMPLEMENTED(
"Patch AMR for Cartesian only is not implemented yet");
1043 else if (m_amr_type == eMeshAMRKind::Patch) {
1044 ARCANE_FATAL(
"General patch AMR is not implemented. Please use PatchCartesianMeshOnly (3)");
1051 MeshStats ms(
traceMng(), m_mesh, m_mesh->parallelMng());
1062 info(4) <<
"Check valid CartesianMesh";
1064 for( Integer i=0; i<
nb_patch; ++i ){
1076 auto*
cmgi = ICartesianMeshGenerationInfo::getReference(m_mesh,
true);
1081 ARCANE_FATAL(
"Invalid value '{0}' for renumberFaceMethod(). Valid values are 0 or 1",
1089 ARCANE_FATAL(
"Invalid value '{0}' for renumberPatchMethod(). Valid values are 0, 1, 2, 3 or 4",
1097 warning() <<
"The patch method 2 is experimental!";
1103 if (v.isSortAfterRenumbering()){
1104 info() <<
"Compacting and Sorting after renumbering";
1105 m_mesh->nodeFamily()->compactItems(
true);
1106 m_mesh->faceFamily()->compactItems(
true);
1107 m_mesh->cellFamily()->compactItems(
true);
1125_createCartesianMeshCoarsening2()
1141 const char* name =
"CartesianMesh";
1150 ARCANE_FATAL(
"The mesh {0} is not yet created",
h.meshName());
1156 mk.setMeshStructure(eMeshStructure::Cartesian);
1157 mesh->_internalApi()->setMeshKind(
mk);
1164 return adud->data();
#define ARCANE_THROW(exception_class,...)
Macro pour envoyer une exception avec formattage.
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Fichier contenant les mécanismes de gestion des évènements.
Informations de connectivité d'un maillage cartésien.
Déraffine un maillage cartésien par 2.
Déraffine un maillage cartésien par 2.
Infos spécifiques à un maillage cartésien.
void refinePatch3D(Real3 position, Real3 length) override
Raffine en 3D un bloc du maillage cartésien.
Int32 nbPatch() const override
Nombre de patchs du maillage.
Integer reduceNbGhostLayers(Integer level, Integer target_nb_ghost_layers) override
Méthode permettant de supprimer une ou plusieurs couches de mailles fantômes sur un niveau de raffine...
ITraceMng * traceMng() const override
Gestionnaire de trace associé.
CellDirectionMng cellDirection(Integer idir) override
Liste des mailles dans la direction dir (0, 1 ou 2)
void recreateFromDump() override
Recalcule les informations de cartésiennes après une reprise.
void computeDirections() override
Calcule les infos pour les accès par direction.
FaceDirectionMng faceDirection(Integer idir) override
Liste des faces dans la direction dir (0, 1 ou 2)
NodeDirectionMng nodeDirection(Integer idir) override
Liste des noeuds dans la direction dir (0, 1 ou 2)
void checkValid() const override
Effectue des vérifications sur la validité de l'instance.
IMesh * mesh() const override
Maillage associé à ce maillage cartésien.
FaceDirectionMng faceDirection(eMeshDirection dir) override
Liste des faces dans la direction dir.
NodeDirectionMng nodeDirection(eMeshDirection dir) override
Liste des noeuds dans la direction dir.
void refinePatch2D(Real2 position, Real2 length) override
Raffine en 2D un bloc du maillage cartésien.
ICartesianMeshPatch * patch(Int32 index) const override
Retourne le index-ième patch du maillage.
void coarseZone2D(Real2 position, Real2 length) override
Dé-raffine en 2D un bloc du maillage cartésien.
void renumberItemsUniqueId(const CartesianMeshRenumberingInfo &v) override
Renumérote les uniqueId() des entités.
ICartesianMeshInternal * _internalApi() override
API interne à Arcane.
void coarseZone3D(Real3 position, Real3 length) override
Dé-raffine en 3D un bloc du maillage cartésien.
Ref< CartesianMeshCoarsening > createCartesianMeshCoarsening() override
Créé une instance pour gérer le déraffinement du maillage.
CartesianPatch amrPatch(Int32 index) const override
Retourne le index-ième patch du maillage.
CellDirectionMng cellDirection(eMeshDirection dir) override
Liste des mailles dans la direction dir.
CartesianMeshPatchListView patches() const override
Vue sur la liste des patchs.
CartesianConnectivity connectivity() override
Informations sur la connectivité
Vue sur une liste de patchs.
Informations pour la renumérotation.
Patch AMR d'un maillage cartésien.
Infos sur les mailles d'une direction spécifique X,Y ou Z d'un maillage structuré.
Vue sur les informations des mailles.
Infos sur les face d'une direction spécifique X,Y ou Z d'un maillage structuré.
Interface d'un patch AMR d'un maillage cartésien.
Interface d'un maillage cartésien.
static ICartesianMesh * getReference(const MeshHandleOrMesh &mesh, bool create=true)
Récupère ou créé la référence associée à mesh.
virtual IMesh * mesh() const =0
Maillage associé à ce maillage cartésien.
Interface d'une famille d'entités.
virtual Int64 timestamp()=0
Compteur indiquant le temps de dernière modification du maillage.
virtual EventObservable< const MeshEventArgs & > & eventObservable(eMeshEventType type)=0
Observable pour un évènement.
Interface d'une liste qui gère des données utilisateurs.
Interface pour une donnée utilisateur attachée à un autre objet.
Classe de base d'une vue sur une connectivité non structurée.
NodeGroup nodeGroup() const
Groupe des noeuds des éléments de ce groupe.
void removeItems(Int32ConstArrayView items_local_id, bool check_if_present=true)
Supprime des entités.
ItemVectorView view() const
Vue sur les entités du groupe.
IItemFamily * itemFamily() const
Famille d'entité à laquelle appartient ce groupe (0 pour le group nul)
bool null() const
true is le groupe est le groupe nul
Classe utilitaire pour imprimer les infos sur une entité.
Vue sur un tableau typé d'entités.
Int32ConstArrayView localIds() const
Tableau des numéros locaux des entités.
Int32 nbNode() const
Nombre de noeuds de l'entité
NodeLocalIdView nodeIds() const
Liste des noeuds de l'entité
Arguments des évènements sur le maillage.
Classe de compatibilité pour contenir un MeshHandle ou un IMesh*.
Caractéristiques d'un maillage.
Infos sur les noeuds d'une direction spécifique X,Y ou Z d'un maillage structuré.
Classe gérant un vecteur de réel de dimension 2.
Classe gérant un vecteur de réel de dimension 3.
Paramètres nécessaires à la construction d'une variable.
Interface du gestionnaire de traces.
Référence à une instance.
InstanceType * get() const
Instance associée ou nullptr si aucune.
Chaîne de caractères unicode.
ItemGroupT< Cell > CellGroup
Groupe de mailles.
ItemGroupT< Node > NodeGroup
Groupe de noeuds.
MeshVariableScalarRefT< Cell, Real3 > VariableCellReal3
Grandeur au centre des mailles de type coordonnées.
MeshVariableScalarRefT< Node, Real3 > VariableNodeReal3
Grandeur au noeud de type coordonnées.
MeshVariableScalarRefT< Face, Real3 > VariableFaceReal3
Grandeur aux faces de type coordonnées.
Int32 toInt32(Real r)
Converti un Real en Int32.
IMemoryAllocator * getDefaultDataAllocator()
Allocateur par défaut pour les données.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
bool arcaneIsCheck()
Vrai si on est en mode vérification.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
eMeshDirection
Type de la direction pour un maillage structuré
@ EndPrepareDump
Evènement envoyé à la fin de prepareForDump()
eMeshAMRKind
Type de maillage AMR.
Int32 Integer
Type représentant un entier.
Real y
deuxième composante du couple
Real x
première composante du couple