Arcane  v3.16.0.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
MeshGeneratorService.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 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/* MeshGeneratorService.cc (C) 2000-2020 */
9/* */
10/* Service de génération de maillage. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/utils/PlatformUtils.h"
15#include "arcane/utils/ScopedPtr.h"
16
17#include "arcane/IMeshReader.h"
18#include "arcane/ISubDomain.h"
19#include "arcane/XmlNode.h"
20#include "arcane/Service.h"
21#include "arcane/IParallelMng.h"
22#include "arcane/IPrimaryMesh.h"
23#include "arcane/MeshVariable.h"
24#include "arcane/ItemPrinter.h"
25#include "arcane/FactoryService.h"
26#include "arcane/AbstractService.h"
27
28#include "arcane/std/SodMeshGenerator.h"
29#include "arcane/std/SimpleMeshGenerator.h"
30#include "arcane/std/CartesianMeshGenerator.h"
31
32/*---------------------------------------------------------------------------*/
33/*---------------------------------------------------------------------------*/
34
35ARCANE_BEGIN_NAMESPACE
36
37/*---------------------------------------------------------------------------*/
38/*---------------------------------------------------------------------------*/
42class MeshGeneratorService
43: public AbstractService
44, public IMeshReader
45{
46 public:
47 MeshGeneratorService(const ServiceBuildInfo& sbi);
48 public:
49 virtual void build() {}
50 public:
51 virtual bool allowExtension(const String& str)
52 {
53 return str.null();
54 }
55 virtual eReturnType readMeshFromFile(IPrimaryMesh* mesh,
56 const XmlNode& mesh_node,
57 const String& file_name,
58 const String& dirname,
59 bool use_internal_partition);
60};
61
62/*---------------------------------------------------------------------------*/
63/*---------------------------------------------------------------------------*/
64
65MeshGeneratorService::
66MeshGeneratorService(const ServiceBuildInfo& sbi)
67: AbstractService(sbi)
68{
69}
70
71
72/*---------------------------------------------------------------------------*/
73/*---------------------------------------------------------------------------*/
74
77 const XmlNode& mesh_node,
78 const String& filename,
79 const String& dirname,
80 bool use_internal_partition)
81{
82 ARCANE_UNUSED(filename);
83 ARCANE_UNUSED(dirname);
84 ARCANE_UNUSED(use_internal_partition);
85
86 String meshclass = platform::getEnvironmentVariable("ARCANE_MESHGENERATOR");
87 String meshgen_ustr("meshgenerator");
88 XmlNode gen_node;
90
91 //msg->warning() << "USING MESHGENERATOR !!\n";
92 if (!meshclass.null()){
93 gen_node = mesh_node.childWithNameAttr(meshgen_ustr,meshclass);
94 info() << "Using ARCANE_MESHGENERATOR";
95 }else{
96 gen_node = mesh_node.child(meshgen_ustr);
97 }
98 if (gen_node.null()) return RTIrrelevant;
99 XmlNode node;
100 // Recherche du 'cartesian' mesh generator
101 if (node.null()){
102 node = gen_node.child("cartesian");
103 if (!node.null())
104 generator = new CartesianMeshGenerator(mesh);
105 }
106 // Recherche du 'sod' mesh generator
107 if (node.null()){
108 node = gen_node.child("sod");
109 if (!node.null())
110 generator = new SodMeshGenerator(mesh, node.attr("zyx").valueAsBoolean());
111 }
112 // Recherche du 'simple' mesh generator
113 if (node.null()){
114 node = gen_node.child("simple");
115 if (!node.null())
116 generator = new SimpleMeshGenerator(mesh);
117 }
118 if (!generator.get()){
119 warning() << "Type de générateur de maillage inconnu.";
120 return RTIrrelevant;
121 }
122 if (generator->readOptions(node))
123 return RTError;
124 if (generator->generateMesh())
125 return RTError;
126 return RTOk;
127}
128
129/*---------------------------------------------------------------------------*/
130/*---------------------------------------------------------------------------*/
131
133
134/*---------------------------------------------------------------------------*/
135/*---------------------------------------------------------------------------*/
136
137ARCANE_END_NAMESPACE
138
139/*---------------------------------------------------------------------------*/
140/*---------------------------------------------------------------------------*/
#define ARCANE_REGISTER_SUB_DOMAIN_FACTORY(aclass, ainterface, aname)
Enregistre un service de fabrique pour la classe aclass.
AbstractService(const ServiceBuildInfo &)
Constructeur à partir d'un ServiceBuildInfo.
Interface du service gérant la lecture d'un maillage.
Definition IMeshReader.h:37
eReturnType
Types des codes de retour d'une lecture ou écriture.
Definition IMeshReader.h:42
@ RTIrrelevant
Non concerné par l'opération. Cela signifie que le format de fichier ne correspond pas à ce lecteur o...
Definition IMeshReader.h:50
@ RTError
Erreur lors de l'opération.
Definition IMeshReader.h:44
@ RTOk
Opération effectuée avec succès.
Definition IMeshReader.h:43
Service de génération de maillages.
virtual eReturnType readMeshFromFile(IPrimaryMesh *mesh, const XmlNode &mesh_node, const String &file_name, const String &dirname, bool use_internal_partition)
Lit un maillage à partir d'un fichier.
virtual void build()
Construction de niveau build du service.
virtual bool allowExtension(const String &str)
Vérifie si le service supporte les fichiers avec l'extension str.
T * get() const
Retourne l'objet référé par l'instance.
Definition Ptr.h:121
Encapsulation d'un pointeur qui se détruit automatiquement.
Definition ScopedPtr.h:44
Structure contenant les informations pour créer un service.
Génèrateur simple de chaque type d'entité de maillage.
Génèrateur de maillage pour un tube à choc.
Chaîne de caractères unicode.
bool null() const
Retourne true si la chaîne est nulle.
Definition String.cc:304
TraceMessage info() const
Flot pour un message d'information.
TraceMessage warning() const
Flot pour un message d'avertissement.
Noeud d'un arbre DOM.
Definition XmlNode.h:51
XmlNode attr(const String &name, bool throw_exception=false) const
Retourne l'attribut de nom name.
Definition XmlNode.cc:248
XmlNode childWithNameAttr(const String &elem_name, const String &attr_value) const
Retourne le fils de ce noeud ayant pour nom elem_name et un attribut de nom "name" avec pour valeur a...
Definition XmlNode.cc:500
XmlNode child(const String &name) const
Noeud fils de celui-ci de nom name.
Definition XmlNode.cc:64
bool null() const
Vrai si le noeud est nul.
Definition XmlNode.h:294
bool valueAsBoolean(bool throw_exception=false) const
Valeur du noeud convertie en booléan.
Definition XmlNode.cc:412
ARCCORE_BASE_EXPORT String getEnvironmentVariable(const String &name)
Variable d'environnement du nom name.