Arcane  4.1.12.0
Developer documentation
Loading...
Searching...
No Matches
CartesianMeshGenerator.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* CartesianMeshGenerator.cc (C) 2000-2023 */
9/* */
10/* Cartesian mesh generation service. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_STD_CARTESIAN_MESHGENERATOR_H
13#define ARCANE_STD_CARTESIAN_MESHGENERATOR_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/TraceAccessor.h"
18#include "arcane/utils/Array.h"
19
20#include "arcane/std/IMeshGenerator.h"
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24
25namespace Arcane
26{
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31
33{
34 public:
35
36 int m_mesh_dimension = -1;
37 Real3 m_origine; // mesh origin
38 RealUniqueArray m_bloc_lx; // lengths in x
39 RealUniqueArray m_bloc_ly; // lengths in y
40 RealUniqueArray m_bloc_lz; // lengths in z
41 Int32UniqueArray m_bloc_nx; // number of cells per block in x
42 Int32UniqueArray m_bloc_ny; // number of cells per block in y
43 Int32UniqueArray m_bloc_nz; // number of cells per block in z
44 RealUniqueArray m_bloc_px; // progressions per block in x
45 RealUniqueArray m_bloc_py; // progressions per block in y
46 RealUniqueArray m_bloc_pz; // progressions per block in z
47 Integer m_nsdx = 0; // number of sub-domains in x
48 Integer m_nsdy = 0; // number of sub-domains in y
49 Integer m_nsdz = 0; // number of sub-domains in z
56
57 public:
58
59 void readOptionsFromXml(XmlNode cartesian_node);
60};
61
62/*---------------------------------------------------------------------------*/
63/*---------------------------------------------------------------------------*/
64
65class CartesianMeshGenerator
66: public TraceAccessor
67, public IMeshGenerator
68{
69 public:
70
71 explicit CartesianMeshGenerator(IPrimaryMesh* mesh);
72
73 public:
74
75 IntegerConstArrayView communicatingSubDomains() const override
76 {
77 return m_communicating_sub_domains;
78 }
79 bool readOptions(XmlNode node) override;
80 bool generateMesh() override;
81 void setBuildInfo(const CartesianMeshGeneratorBuildInfo& build_info);
82
83 private:
84
85 int sdXOffset();
86 int sdYOffset();
87 int sdZOffset();
88 int sdXOffset(int);
89 int sdYOffset(int);
90 int sdZOffset(int);
91 Int32 ownXNbCell();
92 Int32 ownYNbCell();
93 Int32 ownZNbCell();
94 Int32 ownXNbCell(int);
95 Int32 ownYNbCell(int);
96 Int32 ownZNbCell(int);
97
98 private:
99
100 Real nxDelta(Real, int);
101 Real nyDelta(Real, int);
102 Real nzDelta(Real, int);
103 Real xDelta(int);
104 Real yDelta(int);
105 Real zDelta(int);
106
107 private:
108
109 void xScan(const Int64, Int32Array&, Int32Array&, Int64Array&,
111 void yScan(const Integer, Int32Array&, Int32Array&, Int64Array&,
113 void zScan(const Int64, Int32Array&, Int32Array&, Int64Array&,
115
116 private:
117
118 IPrimaryMesh* m_mesh;
119 Int32 m_my_mesh_part;
120 UniqueArray<Int32> m_communicating_sub_domains;
121 int m_mesh_dimension = -1;
122 ICartesianMeshGenerationInfo* m_generation_info = nullptr;
123
124 private:
125
127 RealUniqueArray m_bloc_ox; // block origin in x
128 RealUniqueArray m_bloc_oy; // block origin lengths in y
129 RealUniqueArray m_bloc_oz; // block origin lengths in z
130 Real3 m_l; // lengths in x, y, and z
131 Integer m_nx = 0; // number of cells in x
132 Integer m_ny = 0; // number of cells in y
133 Integer m_nz = 0; // number of cells in z
134
135 private:
136
137 bool _readOptions();
138};
139
140/*---------------------------------------------------------------------------*/
141/*---------------------------------------------------------------------------*/
142
143} // End namespace Arcane
144
145/*---------------------------------------------------------------------------*/
146/*---------------------------------------------------------------------------*/
147
148#endif
Int32 m_face_numbering_version
Version of the face numbering algorithm.
Int32 m_edge_numbering_version
Version of the edge numbering algorithm.
bool m_is_generate_sod_groups
Indicates whether groups are generated for an SOD test case.
Brief: Cartesian mesh generation information.
Interface of a mesh generator.
Class managing a 3-dimensional real vector.
Definition Real3.h:132
TraceAccessor(ITraceMng *m)
Constructs an accessor via the trace manager m.
1D data vector with value semantics (STL style).
Node of a DOM tree.
Definition XmlNode.h:51
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
Array< Int64 > Int64Array
Dynamic one-dimensional array of 64-bit integers.
Definition UtilsTypes.h:125
std::int64_t Int64
Signed integer type of 64 bits.
Int32 Integer
Type representing an integer.
UniqueArray< Int32 > Int32UniqueArray
Dynamic 1D array of 32-bit integers.
Definition UtilsTypes.h:341
UniqueArray< Real > RealUniqueArray
Dynamic 1D array of reals.
Definition UtilsTypes.h:349
double Real
Type representing a real number.
Array< Int32 > Int32Array
Dynamic one-dimensional array of 32-bit integers.
Definition UtilsTypes.h:127
ConstArrayView< Integer > IntegerConstArrayView
C equivalent of a 1D array of integers.
Definition UtilsTypes.h:486
std::int32_t Int32
Signed integer type of 32 bits.