14#include "arcane/utils/ArcanePrecomp.h"
16#include "arcane/utils/ScopedPtr.h"
17#include "arcane/utils/StringBuilder.h"
18#include "arcane/utils/FatalErrorException.h"
20#include "arcane/ItemGroup.h"
21#include "arcane/Item.h"
22#include "arcane/IXmlDocumentHolder.h"
23#include "arcane/XmlNode.h"
24#include "arcane/XmlNodeList.h"
25#include "arcane/IParallelMng.h"
26#include "arcane/IIOMng.h"
27#include "arcane/Timer.h"
28#include "arcane/IMesh.h"
30#include "arcane/cea/LimaCutInfosReader.h"
48, m_parallel_mng(parallel_mng)
64 std::istringstream istr(buf);
86 _readUniqueIndex(nodes_id,cells_id,dir_name);
106void LimaCutInfosReader::
118 if ((!is_parallel) || (is_parallel && nb_rank==1)){
119 for( Integer i=0, n=nodes_id.
size(); i<n; ++i )
121 for( Integer i=0, n=cells_id.
size(); i<n; ++i )
126 ScopedPtrT<IXmlDocumentHolder> doc_holder;
127 StringBuilder correspondance_filename;
128 if (!dir_name.
empty()){
129 correspondance_filename += dir_name;
130 correspondance_filename +=
"/";
132 correspondance_filename +=
"Correspondances";
136 Timer::Sentry sentry(&time_to_read);
140 if (!doc_holder.get())
141 ARCANE_FATAL(
"Invalid correspondance file '{0}'",correspondance_filename);
143 info() <<
"Time to read (unit: second) 'Correspondances' file: "
144 << time_to_read.lastActivationTime();
146 XmlNode root_element = doc_holder->documentNode().documentElement();
149 _readUniqueIndexFromXml(nodes_id,cells_id,root_element,0);
152 Timer::Sentry sentry(&time_to_read);
156 UniqueArray<Integer> other_sizes(2);
157 for( Int32 i=1; i<nb_rank; ++i ){
158 pm->
recv(other_sizes,i);
159 other_nodes_id.resize(other_sizes[0]);
160 other_cells_id.resize(other_sizes[1]);
161 _readUniqueIndexFromXml(other_nodes_id,other_cells_id,root_element,i);
162 pm->send(other_nodes_id,i);
163 pm->send(other_cells_id,i);
166 info() <<
"Time to transfert values: "
167 << time_to_read.lastActivationTime();
173 mesh_element_size[0] = nodes_id.
size();
174 mesh_element_size[1] = cells_id.
size();
175 pm->send(mesh_element_size,0);
176 pm->
recv(nodes_id,0);
177 pm->
recv(cells_id,0);
194void LimaCutInfosReader::
196 XmlNode root_element,Int32 comm_rank)
199 XmlNodeList cpu_list = root_element.children(String(
"cpu"));
201 String ustr_buf(String::fromNumber(comm_rank));
204 for( Integer i=0, s=cpu_list.size(); i<s; ++i ){
205 String id_str = cpu_list[i].attrValue(us_id);
208 if (id_str==ustr_buf){
209 cpu_elem = cpu_list[i];
214 ARCANE_FATAL(
"No element <cpu[@id=\"{0}\"]>",comm_rank);
215 XmlNode node_elem = cpu_elem.child(
"noeuds");
216 if (node_elem.null())
218 XmlNode cell_elem = cpu_elem.child(
"mailles");
219 if (cell_elem.null())
224 String ustr_value = node_elem.value();
225 Integer nb_read = _readList(nodes_id,ustr_value.localstr());
226 Integer expected_size = nodes_id.size();
227 if (nb_read!=expected_size)
228 ARCANE_FATAL(
"Bad number of nodes rank={0} nb_read={1} expected={2}",
229 comm_rank,nb_read,expected_size);
234 String ustr_value = cell_elem.value();
235 Integer nb_read = _readList(cells_id,ustr_value.localstr());
236 Integer expected_size = cells_id.size();
237 if (nb_read!=expected_size)
238 ARCANE_FATAL(
"Bad number of cells rank={0} nb_read={1} expected={2}",
239 comm_rank,nb_read,expected_size);
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
virtual IXmlDocumentHolder * parseXmlFile(const String &filename, const String &schemaname=String())=0
Lit et analyse le fichier XML filename.
Interface du gestionnaire de parallélisme pour un sous-domaine.
virtual Int32 commRank() const =0
Rang de cette instance dans le communicateur.
virtual void recv(ArrayView< char > values, Int32 rank)=0
virtual Int32 commSize() const =0
Nombre d'instance dans le communicateur.
virtual IIOMng * ioMng() const =0
Gestionnaire des entrées/sorties.
virtual ITimerMng * timerMng() const =0
Gestionnaire de timers.
virtual bool isParallel() const =0
Retourne true si l'exécution est parallèle.
virtual void barrier()=0
Effectue une barière.
void readItemsUniqueId(Int64ArrayView nodes_id, Int64ArrayView cells_id, const String &dir_name)
Construit les structures internes du maillage.
@ TimerReal
Timer utilisant le temps réel.
Vue modifiable d'un tableau d'un type T.
constexpr Integer size() const noexcept
Retourne la taille du tableau.
Chaîne de caractères unicode.
bool empty() const
Vrai si la chaîne est vide (nulle ou "")
Classe d'accès aux traces.
TraceMessage info() const
Flot pour un message d'information.
UniqueArray< Int64 > Int64UniqueArray
Tableau dynamique à une dimension d'entiers 64 bits.
ArrayView< Integer > IntegerArrayView
Equivalent C d'un tableau à une dimension d'entiers.
ArrayView< Int64 > Int64ArrayView
Equivalent C d'un tableau à une dimension d'entiers 64 bits.
Int32 Integer
Type représentant un entier.