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"
47: TraceAccessor(parallel_mng->traceMng())
48, m_parallel_mng(parallel_mng)
64 std::istringstream istr(buf);
86 _readUniqueIndex(nodes_id,cells_id,dir_name);
106void LimaCutInfosReader::
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);
137 IXmlDocumentHolder* doc = pm->
ioMng()->parseXmlFile(correspondance_filename);
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.
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.
Référence à une instance.
Chaîne de caractères unicode.
bool empty() const
Vrai si la chaîne est vide (nulle ou "")
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.