Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
HyodaCell.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 * Hyoda.cc (C) 2000-2012 *
9 * *
10 * Service de debugger hybrid. *
11 *****************************************************************************/
12#include "arcane/IMesh.h"
13#include "arcane/IApplication.h"
14#include "arcane/IParallelMng.h"
15#include "arcane/FactoryService.h"
16#include "arcane/ServiceFinder2.h"
17#include "arcane/SharedVariable.h"
18#include "arcane/CommonVariables.h"
19#include "arcane/utils/ScopedPtr.h"
20#include "arcane/AbstractService.h"
22#include "arcane/utils/IOnlineDebuggerService.h"
23#include "arcane/ITransferValuesParallelOperation.h"
24
25#include "arcane/hyoda/HyodaArc.h"
26
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30
31ARCANE_BEGIN_NAMESPACE
32
33/*---------------------------------------------------------------------------*/
34/*---------------------------------------------------------------------------*/
35
36
37
38/******************************************************************************
39 * Fonction de remplissage de la zone de donnée dumpée par le debugger
40 *****************************************************************************/
41void Hyoda::fetch_and_fill_data_to_be_dumped(ISubDomain* sd, UniqueIdType target_cell_uid){
42
43 debug()<<"[fetch_and_fill_data_to_be_dumped] Fill data that will be broadcasted back in hook";
44 m_data->global_iteration=(Int64)sd->commonVariables().globalIteration();
45 m_data->global_time=sd->commonVariables().globalTime();
46 m_data->global_deltat=sd->commonVariables().globalDeltaT();
47 m_data->global_cpu_time=sd->commonVariables().globalCPUTime();
48
49 SharedVariableNodeReal3 nodes_coords = sd->defaultMesh()->sharedNodesCoordinates();
50 ItemInternalList cells = sd->defaultMesh()->cellFamily()->itemsInternal();
51 LocalIdType target_cell_lid=targetCellIdToLocalId(sd, target_cell_uid);
52
53 Cell focused_cell;
54 if (target_cell_lid==NULL_ITEM_ID){
55 debug()<<"[Hyoda::fetch_and_fill_data_to_be_dumped] NULL_ITEM_ID";
56 focused_cell=cells[0]; // On met n'importe quoi, ce ne sera pas utilisé (faut que cela soit possible)
57 }else{
58 debug()<<"[Hyoda::fetch_and_fill_data_to_be_dumped] lid "<<target_cell_lid<<" (uid="<<target_cell_uid<<")";
59 focused_cell=cells[target_cell_lid];
60 }
61
62 // En séquentiel, on affiche directement, on est sûr de l'avoir
63 int i=0;
64 ENUMERATE_NODE(inode,focused_cell.nodes()){
65 Real3 coord = nodes_coords[inode];
66 m_data->coords[i][0] = coord.x;
67 m_data->coords[i][1] = coord.y;
68 m_data->coords[i][2] = coord.z;
69 debug()<<"[Hyoda::fetch_and_fill_data_to_be_dumped] node ("
70 << m_data->coords[i][0] << ","
71 << m_data->coords[i][1] << ","
72 << m_data->coords[i][2] << ")"
73 ;
74 i+=1;
75 }
76
77 if (!sd->parallelMng()->isParallel()) return;
78
79 // En parallele, on va envoyer à celui où est accroché gdbserver
80
81 if ((target_cell_lid!=NULL_ITEM_ID) // J'ai la maille
82 && (sd->parallelMng()->commRank()==m_gdbserver_rank)){ // et le serveur => rien à faire d'autre
83 debug()<<"[Hyoda::fetch_and_fill_data_to_be_dumped] CELL and SERVER";
84 return;
85 }
86
87 if (target_cell_lid!=NULL_ITEM_ID){ // J'ai la maille, pas le serveur = je SEND
88 debug()<<"[Hyoda::fetch_and_fill_data_to_be_dumped] SENDing CELL";;
89 Real3UniqueArray cell_nodes_coords(focused_cell.nbNode());
90 int i=0;
91 ENUMERATE_NODE(inode,focused_cell.nodes()){
92 Real3 coord = nodes_coords[inode];
93 cell_nodes_coords[i].x=coord.x;
94 cell_nodes_coords[i].y=coord.y;
95 cell_nodes_coords[i].z=coord.z;
96 //debug()<<"\t[Hyoda::fetch_and_fill_data_to_be_dumped] Filling coord #"<<i;
97 i+=1;
98 }
99 sd->parallelMng()->send(cell_nodes_coords.constView(),m_gdbserver_rank);
100 return;
101 }
102
103
104 if (sd->parallelMng()->commRank()==m_gdbserver_rank){ // Si c'est moi qui ai gdbserver, je RECV
105 debug()<<"[Hyoda::fetch_and_fill_data_to_be_dumped] SERVEUR: recv from"<<m_data->target_cell_rank;
106 Real3UniqueArray cell_nodes_coords(m_data->target_cell_nb_nodes);
107 sd->parallelMng()->recv(cell_nodes_coords,m_data->target_cell_rank);
108 for(int i=0;i<m_data->target_cell_nb_nodes;i++){
109 m_data->coords[i][0] = cell_nodes_coords[i].x;
110 m_data->coords[i][1] = cell_nodes_coords[i].y;
111 m_data->coords[i][2] = cell_nodes_coords[i].z;
112 }
113 }
114}
115
116
117/*---------------------------------------------------------------------------*/
118/*---------------------------------------------------------------------------*/
119
120ARCANE_END_NAMESPACE
121
122/*---------------------------------------------------------------------------*/
123/*---------------------------------------------------------------------------*/
124
Fichier de configuration d'Arcane.
#define ENUMERATE_NODE(name, group)
Enumérateur générique d'un groupe de noeuds.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
UniqueArray< Real3 > Real3UniqueArray
Tableau dynamique à une dimension de vecteurs de rang 3.
Definition UtilsTypes.h:529
ConstArrayView< ItemInternal * > ItemInternalList
Type de la liste interne des entités.
Definition ItemTypes.h:466
SharedMeshVariableScalarRefT< Node, Real3 > SharedVariableNodeReal3
Grandeur au noeud de type coordonnées.
Int32 LocalIdType
Type des entiers utilisés pour stocker les identifiants locaux des entités.