Arcane  4.1.12.0
Developer documentation
Loading...
Searching...
No Matches
GhostLayerMng.cc
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/* GhostLayerMng.cc (C) 2000-2022 */
9/* */
10/* Mesh ghost layer manager. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/utils/ArcanePrecomp.h"
15
16#include "arcane/utils/ArgumentException.h"
17#include "arcane/utils/ValueConvert.h"
18#include "arcane/utils/PlatformUtils.h"
19
20#include "arcane/mesh/GhostLayerMng.h"
21
22#include <algorithm>
23
24/*---------------------------------------------------------------------------*/
25/*---------------------------------------------------------------------------*/
26
27namespace Arcane::mesh
28{
29
30/*---------------------------------------------------------------------------*/
31/*---------------------------------------------------------------------------*/
32
33GhostLayerMng::
34GhostLayerMng(ITraceMng* tm)
35: TraceAccessor(tm)
36, m_nb_ghost_layer(1)
37, m_builder_version(3)
38{
39 if (auto v = Convert::Type<Int32>::tryParseFromEnvironment("ARCANE_NB_GHOSTLAYER", true))
40 m_nb_ghost_layer = std::clamp(v.value(), 1, 256);
41
42 _initBuilderVersion();
43}
44
45/*---------------------------------------------------------------------------*/
46/*---------------------------------------------------------------------------*/
47
48void GhostLayerMng::
49setNbGhostLayer(Integer n)
50{
51 if (n < 0)
52 ARCANE_THROW(ArgumentException, "Bad number of ghost layer '{0}'<0", n);
53 m_nb_ghost_layer = n;
54}
55
56/*---------------------------------------------------------------------------*/
57/*---------------------------------------------------------------------------*/
58
59Integer GhostLayerMng::
60nbGhostLayer() const
61{
62 return m_nb_ghost_layer;
63}
64
65/*---------------------------------------------------------------------------*/
66/*---------------------------------------------------------------------------*/
67
68void GhostLayerMng::
69setBuilderVersion(Integer n)
70{
71 if (n < 2 || n > 4)
72 ARCANE_THROW(ArgumentException, "Bad value for builder version '{0}'. valid values are 2, 3 or 4.", n);
73 m_builder_version = n;
74}
75
76/*---------------------------------------------------------------------------*/
77/*---------------------------------------------------------------------------*/
78
79void GhostLayerMng::
80_initBuilderVersion()
81{
82 // The default version is 2.
83 // Version 1 no longer exists.
84 // Version 3 is operational and more extensible than 2.
85 // Version 4 is like version 3 but allows being called
86 // even if there are already ghost cell layers.
87 // If OK for IFP, the default version should be set to 3 or 4. However,
88 // the case of AMR meshes still needs to be handled
89 Integer default_version = 2;
90 Integer version = default_version;
91 String version_str = platform::getEnvironmentVariable("ARCANE_GHOSTLAYER_VERSION");
92 if (!version_str.null()) {
93 if (builtInGetValue(version, version_str)) {
94 pwarning() << "Bad value for 'ARCANE_GHOSTLAYER_VERSION'";
95 }
96 if (version < 2 || version > 4)
97 version = default_version;
98 }
99 m_builder_version = version;
100}
101
102/*---------------------------------------------------------------------------*/
103/*---------------------------------------------------------------------------*/
104
105Integer GhostLayerMng::
106builderVersion() const
107{
108 return m_builder_version;
109}
110
111/*---------------------------------------------------------------------------*/
112/*---------------------------------------------------------------------------*/
113
114} // End namespace Arcane::mesh
115
116/*---------------------------------------------------------------------------*/
117/*---------------------------------------------------------------------------*/
#define ARCANE_THROW(exception_class,...)
Macro for throwing an exception with formatting.
bool null() const
Returns true if the string is null.
Definition String.cc:306
String getEnvironmentVariable(const String &name)
Environment variable named name.
Int32 Integer
Type representing an integer.