source: XIOS/trunk/src/fortran/icdata.cpp @ 314

Last change on this file since 314 was 314, checked in by ymipsl, 12 years ago

Removing obsolete files and some cleaning...

YM

File size: 8.2 KB
Line 
1/* ************************************************************************** *
2 *      Copyright © IPSL/LSCE, XMLIOServer, Avril 2010 - Octobre 2011         *
3 * ************************************************************************** */
4
5#include <boost/multi_array.hpp>
6#include <boost/shared_ptr.hpp>
7#include <string>
8#include <iostream>
9
10
11#include "xmlioserver.hpp"
12#include "oasis_cinterface.hpp"
13
14#include "attribute_template_impl.hpp"
15#include "object_template_impl.hpp"
16#include "group_template_impl.hpp"
17
18#include "icutil.hpp"
19#include "cxios.hpp"
20#include "client_ym.hpp"
21#include "field.hpp"
22
23extern "C"
24{
25// /////////////////////////////// Définitions ////////////////////////////// //
26
27   // ----------------------- Redéfinition de types ----------------------------
28   
29   typedef enum { NETCDF4 = 0 } XFileType;
30   
31   typedef xmlioserver::tree::CContext * XContextPtr;
32
33   // -------------------- Traitement des données ------------------------------
34   void cxios_init_server(void)
35   {
36     CXios::initServerSide();     
37   }
38
39   void cxios_init_client(const char * client_id , int len_client_id, MPI_Fint* f_local_comm, MPI_Fint* f_return_comm )
40   {
41      std::string str; 
42      MPI_Comm local_comm ;
43      MPI_Comm return_comm ;
44     
45      if (!cstr2string(client_id, len_client_id, str)) return;
46     
47      int initialized ;
48      MPI_Initialized(&initialized) ;
49      if (initialized) local_comm=MPI_Comm_f2c(*f_local_comm) ;
50      else local_comm=MPI_COMM_NULL ;
51      CXios::initClientSide(str,local_comm,return_comm);
52      *f_return_comm=MPI_Comm_c2f(return_comm) ;
53   }
54
55   void cxios_context_initialize(const char * context_id , int len_context_id, MPI_Fint* f_comm)
56   {
57     std::string str; 
58     MPI_Comm comm ;
59     
60     if (!cstr2string(context_id, len_context_id, str)) return;
61     comm=MPI_Comm_f2c(*f_comm) ;
62     ym::CClient::registerContext(context_id,comm) ;
63   }
64 
65    void cxios_context_close_definition()
66   {
67     boost::shared_ptr<CContext> context =
68            CObjectFactory::GetObject<CContext>(CObjectFactory::GetCurrentContextId());
69     context->closeDefinition() ;
70   } 
71
72   void cxios_context_finalize()
73   {
74     boost::shared_ptr<CContext> context =
75            CObjectFactory::GetObject<CContext>(CObjectFactory::GetCurrentContextId());
76     context->finalize() ;
77   }
78   
79   void cxios_finalize()
80   {
81     CXios::clientFinalize() ;
82   }
83
84 
85   
86   // ---------------------- Ecriture des données ------------------------------
87   
88   void cxios_write_data_k81(const char * fieldid, int fieldid_size, double * data_k8, int data_Xsize)
89   {
90      std::string fieldid_str;
91      boost::shared_ptr<CContext> context =
92      CObjectFactory::GetObject<CContext>(CObjectFactory::GetCurrentContextId());
93      boost::shared_ptr<data::CDataTreatment> dtreat = context->getDataTreatment();
94      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 
95     
96//      boost::const_multi_array_ref<double, 1> array_(data_k8,
97//          boost::extents [data_Xsize],
98//          boost::fortran_storage_order());
99      ARRAY(double, 1) data(new CArray<double, 1>(boost::extents [data_Xsize]));
100      std::copy(data_k8, &(data_k8[data->num_elements()]), data->data());
101     
102//      dtreat->write_data(fieldid_str, data);
103      CField::get(fieldid)->setData(data) ;
104   }
105   
106   void cxios_write_data_k82(const char * fieldid, int fieldid_size, double * data_k8, int data_Xsize, int data_Ysize)
107   {
108      std::string fieldid_str;
109      boost::shared_ptr<CContext> context =
110      CObjectFactory::GetObject<CContext>(CObjectFactory::GetCurrentContextId());
111      boost::shared_ptr<data::CDataTreatment> dtreat = context->getDataTreatment();
112      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
113     
114//      boost::const_multi_array_ref<double, 2> array_(data_k8,
115//          boost::extents [data_Xsize][data_Ysize],
116//          boost::fortran_storage_order());
117      ARRAY(double, 2) data(new CArray<double, 2>(boost::extents [data_Xsize][data_Ysize]));
118      std::copy(data_k8, &(data_k8[data->num_elements()]), data->data());
119//      dtreat->write_data(fieldid_str, data);
120      CField::get(fieldid)->setData(data) ;
121   }
122   
123   void cxios_write_data_k83(const char * fieldid, int fieldid_size, double * data_k8, int data_Xsize, int data_Ysize, int data_Zsize)
124   {
125      std::string fieldid_str;
126      boost::shared_ptr<CContext> context =
127      CObjectFactory::GetObject<CContext>(CObjectFactory::GetCurrentContextId());
128      boost::shared_ptr<data::CDataTreatment> dtreat = context->getDataTreatment();
129      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 
130     
131//      boost::const_multi_array_ref<double, 3> array_(data_k8,
132//          boost::extents [data_Xsize][data_Ysize][data_Zsize],
133//          boost::fortran_storage_order());
134      ARRAY(double, 3) data(new CArray<double, 3>(boost::extents [data_Xsize][data_Ysize][data_Zsize]));
135      std::copy(data_k8, &(data_k8[data->num_elements()]), data->data());
136//      dtreat->write_data(fieldid_str, data);
137      CField::get(fieldid)->setData(data) ;
138
139   }
140   
141   void cxios_write_data_k41(const char * fieldid, int fieldid_size, float * data_k4, int data_Xsize)
142   {
143      std::string fieldid_str;
144      boost::shared_ptr<CContext> context =
145      CObjectFactory::GetObject<CContext>(CObjectFactory::GetCurrentContextId());
146      boost::shared_ptr<data::CDataTreatment> dtreat = context->getDataTreatment();
147      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 
148     
149//      boost::const_multi_array_ref<float, 1> array_(data_k4,
150//          boost::extents [data_Xsize],
151//          boost::fortran_storage_order());
152//      ARRAY(float, 1) data(new CArray<float, 1>(boost::extents [data_Xsize]));
153//      std::copy(data_k4, &(data_k4[data->num_elements()]), data->data());
154//      dtreat->write_data(fieldid_str, data);
155      ARRAY(double, 1) data(new CArray<double, 1>(boost::extents [data_Xsize]));
156      double* ptr_data=data->data() ; 
157      for(int i=0;i<data->num_elements();i++) ptr_data[i]=data_k4[i];
158      CField::get(fieldid)->setData(data) ;
159   }
160   
161   void cxios_write_data_k42(const char * fieldid, int fieldid_size, float * data_k4, int data_Xsize, int data_Ysize)
162   {
163      std::string fieldid_str;
164      boost::shared_ptr<CContext> context =
165      CObjectFactory::GetObject<CContext>(CObjectFactory::GetCurrentContextId());
166      boost::shared_ptr<data::CDataTreatment> dtreat = context->getDataTreatment();
167      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 
168     
169//      boost::const_multi_array_ref<float, 2> array_(data_k4,
170//          boost::extents [data_Xsize][data_Ysize],
171//          boost::fortran_storage_order());
172//      ARRAY(float, 2) data(new CArray<float, 2>(boost::extents [data_Xsize][data_Ysize]));
173//      std::copy(data_k4, &(data_k4[data->num_elements()]), data->data());
174//      dtreat->write_data(fieldid_str, data);
175      ARRAY(double, 2) data(new CArray<double, 2>(boost::extents [data_Xsize][data_Ysize]));
176      double* ptr_data=data->data() ; 
177      for(int i=0;i<data->num_elements();i++) ptr_data[i]=data_k4[i];
178      CField::get(fieldid)->setData(data) ;
179   }
180   
181   void cxios_write_data_k43(const char * fieldid, int fieldid_size, float * data_k4, int data_Xsize, int data_Ysize, int data_Zsize)
182   {
183      std::string fieldid_str;
184      boost::shared_ptr<CContext> context =
185      CObjectFactory::GetObject<CContext>(CObjectFactory::GetCurrentContextId());
186      boost::shared_ptr<data::CDataTreatment> dtreat = context->getDataTreatment();
187      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 
188     
189//      boost::const_multi_array_ref<float, 3> array_(data_k4,
190//          boost::extents [data_Xsize][data_Ysize][data_Zsize],
191//          boost::fortran_storage_order());
192//      ARRAY(float, 3) data(new CArray<float, 3>(boost::extents [data_Xsize][data_Ysize][data_Zsize]));
193//      std::copy(data_k4, &(data_k4[data->num_elements()]), data->data());
194//      dtreat->write_data(fieldid_str, data);
195      ARRAY(double, 3) data(new CArray<double, 3>(boost::extents [data_Xsize][data_Ysize][data_Zsize]));
196      double* ptr_data=data->data() ; 
197      for(int i=0;i<data->num_elements();i++) ptr_data[i]=data_k4[i];
198      CField::get(fieldid)->setData(data) ;
199    } 
200
201} // extern "C"
Note: See TracBrowser for help on using the repository browser.