source: XMLIO_V2/dev/common/src/xmlio/node/grid.hpp @ 266

Last change on this file since 266 was 266, checked in by hozdoba, 13 years ago

Corrections après tests sur titane

File size: 4.8 KB
Line 
1#ifndef __XMLIO_CGrid__
2#define __XMLIO_CGrid__
3
4/// xmlioserver headers ///
5#include "xmlioserver_spl.hpp"
6#include "group_factory.hpp"
7
8#include "declare_group.hpp"
9#include "domain.hpp"
10#include "axis.hpp"
11
12namespace xmlioserver {
13namespace tree {
14   
15   /// ////////////////////// Déclarations ////////////////////// ///
16
17   class CGridGroup;
18   class CGridAttributes;
19   class CGrid;
20
21   ///--------------------------------------------------------------
22
23   // Declare/Define CGridAttribute
24   BEGIN_DECLARE_ATTRIBUTE_MAP(CGrid)
25#  include "grid_attribute.conf"
26   END_DECLARE_ATTRIBUTE_MAP(CGrid)
27
28   ///--------------------------------------------------------------
29
30   class CGrid
31      : public CObjectTemplate<CGrid>
32      , public CGridAttributes
33   {
34         /// typedef ///
35         typedef CObjectTemplate<CGrid>   SuperClass;
36         typedef CGridAttributes SuperClassAttribute;
37
38      public :
39
40         typedef CGridAttributes RelAttributes;
41         typedef CGridGroup      RelGroup;
42
43         /// Constructeurs ///
44         CGrid(void);
45         explicit CGrid(const StdString & id);
46         CGrid(const CGrid & grid);       // Not implemented yet.
47         CGrid(const CGrid * const grid); // Not implemented yet.
48
49         /// Traitements ///
50         void solveReference(void);
51
52         virtual void toBinary  (StdOStream & os) const;
53         virtual void fromBinary(StdIStream & is);
54
55         /// Tests ///
56         bool hasAxis(void) const;
57
58      public :
59
60         /// Accesseurs ///
61         const std::deque<ARRAY(int, 1)> & getStoreIndex(void) const;
62         const std::deque<ARRAY(int, 1)> & getOutIIndex(void)  const;
63         const std::deque<ARRAY(int, 1)> & getOutJIndex(void)  const;
64         const std::deque<ARRAY(int, 1)> & getOutLIndex(void)  const;
65
66         const boost::shared_ptr<CAxis>   getRelAxis  (void) const;
67         const boost::shared_ptr<CDomain> getRelDomain(void) const;
68
69         StdSize getDimension(void) const;
70         
71         StdSize getLocalSize(void) const;
72         StdSize getGlobalSize(void) const;
73         std::vector<StdSize> getLocalShape(void) const;
74         std::vector<StdSize> getGlobalShape(void) const;
75
76         /// Entrées-sorties de champs ///
77         template <StdSize n>
78            void inputField(const ARRAY(double, n) field, ARRAY(double, 1) stored) const;
79           
80         void inputFieldServer(const std::deque<ARRAY(double, 1)> storedClient,
81                                                ARRAY(double, 1)  storedServer) const;
82
83         template <StdSize n>
84            void outputField(const ARRAY(double, 1) stored,  ARRAY(double, n) field) const;
85
86         /// Destructeur ///
87         virtual ~CGrid(void);
88
89      public :
90
91         /// Accesseurs statiques ///
92         static StdString GetName(void);
93         static StdString GetDefName(void);
94         
95         static ENodeType GetType(void);
96
97         /// Instanciateurs Statiques ///
98         static boost::shared_ptr<CGrid>
99            CreateGrid(boost::shared_ptr<CDomain> domain);
100         static boost::shared_ptr<CGrid>
101            CreateGrid(boost::shared_ptr<CDomain> domain, boost::shared_ptr<CAxis> axis);
102
103      protected :
104
105         /// Entrées-sorties de champs (interne) ///
106         void storeField_arr(const double * const data, ARRAY(double, 1) stored) const;
107
108         /// Traitements protégés ///
109         void computeIndexServer(void);
110         void computeIndex(void);
111         void solveDomainRef(void);
112         void solveAxisRef(void);
113
114      public:
115
116         /// Propriétés privées ///
117         bool withAxis ;
118         bool isChecked;
119
120         boost::shared_ptr<CAxis>   axis ;
121         boost::shared_ptr<CDomain> domain ;
122
123         std::deque<ARRAY(int, 1)> storeIndex ;
124         std::deque<ARRAY(int, 1)> out_i_index ;
125         std::deque<ARRAY(int, 1)> out_j_index ;
126         std::deque<ARRAY(int, 1)> out_l_index ;
127
128   }; // class CGrid
129
130   ///--------------------------------------------------------------
131
132   template <StdSize n>
133      void CGrid::inputField(const  ARRAY(double, n) field, ARRAY(double, 1) stored) const
134   {
135      if (this->getGlobalSize() != field->num_elements())
136         ERROR("CGrid::inputField(const  ARRAY(double, n) field, ARRAY(double, 1) stored)",
137                << "[ Taille des données attendue = " << this->getGlobalSize()       << ", "
138                << "Taille des données reçue = "      << field->num_elements() << " ] "
139                << "Le tableau de données n'a pas la bonne taille !") ;
140      this->storeField_arr(field->data(), stored) ;
141   }
142
143   ///--------------------------------------------------------------
144
145   // Declare/Define CGridGroup and CGridDefinition
146   DECLARE_GROUP(CGrid);
147
148   ///--------------------------------------------------------------
149
150} // namespace tree
151} // namespace xmlioserver
152
153#endif // __XMLIO_CGrid__
Note: See TracBrowser for help on using the repository browser.