Ignore:
Timestamp:
10/16/12 13:04:44 (12 years ago)
Author:
ymipsl
Message:

Major Update

  • redesign Type and attribute manipulation
  • add enumerate type and attribute
  • use blitz class array instead of boost class array

YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/interface/c_attr/icdomain_attr.cpp

    r352 r369  
    1111#include "icutil.hpp" 
    1212#include "timer.hpp" 
    13 #include "domain.hpp" 
     13#include "node_type.hpp" 
    1414 
    1515extern "C" 
     
    3333  void cxios_set_domain_data_i_index(domain_Ptr domain_hdl, int* data_i_index, int extent1) 
    3434  { 
    35      CTimer::get("XIOS").resume(); 
    36     ARRAY(int,1) array_tmp(new CArray<int,1>(boost::extents[extent1])); 
    37     std::copy(data_i_index, &(data_i_index[array_tmp->num_elements()]), array_tmp->data()); 
    38     domain_hdl->data_i_index.setValue(array_tmp); 
     35    CTimer::get("XIOS").resume(); 
     36    CArray<int,1> tmp(data_i_index,shape(extent1),neverDeleteData) ; 
     37    domain_hdl->data_i_index.reference(tmp.copy()); 
    3938    domain_hdl->sendAttributToServer(domain_hdl->data_i_index); 
    4039  } 
     
    4241  void cxios_get_domain_data_i_index(domain_Ptr domain_hdl, int* data_i_index, int extent1) 
    4342  { 
    44     if (!array_copy(domain_hdl->data_i_index.getValue(), data_i_index, extent1)) 
    45      ERROR("void cxios_set_domain_data_i_index(domain_Ptr domain_hdl, int* data_i_index, int extent1)",<<"Output array size is not conform to array size attribute") ; 
     43    CArray<int,1> tmp(data_i_index,shape(extent1),neverDeleteData) ; 
     44    tmp=domain_hdl->data_i_index ; 
    4645     CTimer::get("XIOS").suspend(); 
    4746  } 
     
    6463  void cxios_set_domain_data_j_index(domain_Ptr domain_hdl, int* data_j_index, int extent1) 
    6564  { 
    66      CTimer::get("XIOS").resume(); 
    67     ARRAY(int,1) array_tmp(new CArray<int,1>(boost::extents[extent1])); 
    68     std::copy(data_j_index, &(data_j_index[array_tmp->num_elements()]), array_tmp->data()); 
    69     domain_hdl->data_j_index.setValue(array_tmp); 
     65    CTimer::get("XIOS").resume(); 
     66    CArray<int,1> tmp(data_j_index,shape(extent1),neverDeleteData) ; 
     67    domain_hdl->data_j_index.reference(tmp.copy()); 
    7068    domain_hdl->sendAttributToServer(domain_hdl->data_j_index); 
    7169  } 
     
    7371  void cxios_get_domain_data_j_index(domain_Ptr domain_hdl, int* data_j_index, int extent1) 
    7472  { 
    75     if (!array_copy(domain_hdl->data_j_index.getValue(), data_j_index, extent1)) 
    76      ERROR("void cxios_set_domain_data_j_index(domain_Ptr domain_hdl, int* data_j_index, int extent1)",<<"Output array size is not conform to array size attribute") ; 
     73    CArray<int,1> tmp(data_j_index,shape(extent1),neverDeleteData) ; 
     74    tmp=domain_hdl->data_j_index ; 
    7775     CTimer::get("XIOS").suspend(); 
    7876  } 
     
    212210  void cxios_set_domain_latvalue(domain_Ptr domain_hdl, double* latvalue, int extent1) 
    213211  { 
    214      CTimer::get("XIOS").resume(); 
    215     ARRAY(double,1) array_tmp(new CArray<double,1>(boost::extents[extent1])); 
    216     std::copy(latvalue, &(latvalue[array_tmp->num_elements()]), array_tmp->data()); 
    217     domain_hdl->latvalue.setValue(array_tmp); 
     212    CTimer::get("XIOS").resume(); 
     213    CArray<double,1> tmp(latvalue,shape(extent1),neverDeleteData) ; 
     214    domain_hdl->latvalue.reference(tmp.copy()); 
    218215    domain_hdl->sendAttributToServer(domain_hdl->latvalue); 
    219216  } 
     
    221218  void cxios_get_domain_latvalue(domain_Ptr domain_hdl, double* latvalue, int extent1) 
    222219  { 
    223     if (!array_copy(domain_hdl->latvalue.getValue(), latvalue, extent1)) 
    224      ERROR("void cxios_set_domain_latvalue(domain_Ptr domain_hdl, double* latvalue, int extent1)",<<"Output array size is not conform to array size attribute") ; 
     220    CArray<double,1> tmp(latvalue,shape(extent1),neverDeleteData) ; 
     221    tmp=domain_hdl->latvalue ; 
    225222     CTimer::get("XIOS").suspend(); 
    226223  } 
     
    248245  void cxios_set_domain_lonvalue(domain_Ptr domain_hdl, double* lonvalue, int extent1) 
    249246  { 
    250      CTimer::get("XIOS").resume(); 
    251     ARRAY(double,1) array_tmp(new CArray<double,1>(boost::extents[extent1])); 
    252     std::copy(lonvalue, &(lonvalue[array_tmp->num_elements()]), array_tmp->data()); 
    253     domain_hdl->lonvalue.setValue(array_tmp); 
     247    CTimer::get("XIOS").resume(); 
     248    CArray<double,1> tmp(lonvalue,shape(extent1),neverDeleteData) ; 
     249    domain_hdl->lonvalue.reference(tmp.copy()); 
    254250    domain_hdl->sendAttributToServer(domain_hdl->lonvalue); 
    255251  } 
     
    257253  void cxios_get_domain_lonvalue(domain_Ptr domain_hdl, double* lonvalue, int extent1) 
    258254  { 
    259     if (!array_copy(domain_hdl->lonvalue.getValue(), lonvalue, extent1)) 
    260      ERROR("void cxios_set_domain_lonvalue(domain_Ptr domain_hdl, double* lonvalue, int extent1)",<<"Output array size is not conform to array size attribute") ; 
     255    CArray<double,1> tmp(lonvalue,shape(extent1),neverDeleteData) ; 
     256    tmp=domain_hdl->lonvalue ; 
    261257     CTimer::get("XIOS").suspend(); 
    262258  } 
     
    265261  void cxios_set_domain_mask(domain_Ptr domain_hdl, bool* mask, int extent1, int extent2) 
    266262  { 
    267      CTimer::get("XIOS").resume(); 
    268     ARRAY(bool,2) array_tmp(new CArray<bool,2>(boost::extents[extent1][extent2])); 
    269     std::copy(mask, &(mask[array_tmp->num_elements()]), array_tmp->data()); 
    270     domain_hdl->mask.setValue(array_tmp); 
     263    CTimer::get("XIOS").resume(); 
     264    CArray<bool,2> tmp(mask,shape(extent1,extent2),neverDeleteData) ; 
     265    domain_hdl->mask.reference(tmp.copy()); 
    271266    domain_hdl->sendAttributToServer(domain_hdl->mask); 
    272267  } 
     
    274269  void cxios_get_domain_mask(domain_Ptr domain_hdl, bool* mask, int extent1, int extent2) 
    275270  { 
    276     if (!array_copy(domain_hdl->mask.getValue(), mask, extent1, extent2)) 
    277      ERROR("void cxios_set_domain_mask(domain_Ptr domain_hdl, bool* mask, int extent1, int extent2)",<<"Output array size is not conform to array size attribute") ; 
     271    CArray<bool,2> tmp(mask,shape(extent1,extent2),neverDeleteData) ; 
     272    tmp=domain_hdl->mask ; 
    278273     CTimer::get("XIOS").suspend(); 
    279274  } 
Note: See TracChangeset for help on using the changeset viewer.