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

Last change on this file since 286 was 286, checked in by ymipsl, 13 years ago

reprise en main de la version de H. Ozdoba. Correction de différentes erreurs de conception et bug.
Version NEMO operationnel en client/server, interoperabilita avec OASIS, reconstition de fichiers via netcdf4/HDF5

YM

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         StdSize  getDataSize(void) const;
74         std::vector<StdSize> getLocalShape(void) const;
75         std::vector<StdSize> getGlobalShape(void) const;
76
77         /// Entrées-sorties de champs ///
78         template <StdSize n>
79            void inputField(const ARRAY(double, n) field, ARRAY(double, 1) stored) const;
80           
81         void inputFieldServer(const std::deque<ARRAY(double, 1)> storedClient,
82                                                ARRAY(double, 1)  storedServer) const;
83
84         template <StdSize n>
85            void outputField(const ARRAY(double, 1) stored,  ARRAY(double, n) field) const;
86
87         /// Destructeur ///
88         virtual ~CGrid(void);
89
90      public :
91
92         /// Accesseurs statiques ///
93         static StdString GetName(void);
94         static StdString GetDefName(void);
95         
96         static ENodeType GetType(void);
97
98         /// Instanciateurs Statiques ///
99         static boost::shared_ptr<CGrid>
100            CreateGrid(boost::shared_ptr<CDomain> domain);
101         static boost::shared_ptr<CGrid>
102            CreateGrid(boost::shared_ptr<CDomain> domain, boost::shared_ptr<CAxis> axis);
103
104      protected :
105
106         /// Entrées-sorties de champs (interne) ///
107         void storeField_arr(const double * const data, ARRAY(double, 1) stored) const;
108
109         /// Traitements protégés ///
110         void computeIndexServer(void);
111         void computeIndex(void);
112         void solveDomainRef(void);
113         void solveAxisRef(void);
114
115      public:
116
117         /// Propriétés privées ///
118         bool withAxis ;
119         bool isChecked;
120
121         boost::shared_ptr<CAxis>   axis ;
122         boost::shared_ptr<CDomain> domain ;
123
124         std::deque<ARRAY(int, 1)> storeIndex ;
125         std::deque<ARRAY(int, 1)> out_i_index ;
126         std::deque<ARRAY(int, 1)> out_j_index ;
127         std::deque<ARRAY(int, 1)> out_l_index ;
128
129   }; // class CGrid
130
131   ///--------------------------------------------------------------
132
133   template <StdSize n>
134      void CGrid::inputField(const  ARRAY(double, n) field, ARRAY(double, 1) stored) const
135   {
136      if (this->getDataSize() != field->num_elements())
137         ERROR("CGrid::inputField(const  ARRAY(double, n) field, ARRAY(double, 1) stored)",
138                << "[ Taille des données attendue = " << this->getDataSize()       << ", "
139                << "Taille des données reçue = "      << field->num_elements() << " ] "
140                << "Le tableau de données n'a pas la bonne taille !") ;
141      this->storeField_arr(field->data(), stored) ;
142   }
143
144   ///--------------------------------------------------------------
145
146   // Declare/Define CGridGroup and CGridDefinition
147   DECLARE_GROUP(CGrid);
148
149   ///--------------------------------------------------------------
150
151} // namespace tree
152} // namespace xmlioserver
153
154#endif // __XMLIO_CGrid__
Note: See TracBrowser for help on using the repository browser.