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

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

suppress old fortran interface

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