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/icdomaingroup_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_domaingroup_data_i_index(domaingroup_Ptr domaingroup_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     domaingroup_hdl->data_i_index.setValue(array_tmp); 
     35    CTimer::get("XIOS").resume(); 
     36    CArray<int,1> tmp(data_i_index,shape(extent1),neverDeleteData) ; 
     37    domaingroup_hdl->data_i_index.reference(tmp.copy()); 
    3938    domaingroup_hdl->sendAttributToServer(domaingroup_hdl->data_i_index); 
    4039  } 
     
    4241  void cxios_get_domaingroup_data_i_index(domaingroup_Ptr domaingroup_hdl, int* data_i_index, int extent1) 
    4342  { 
    44     if (!array_copy(domaingroup_hdl->data_i_index.getValue(), data_i_index, extent1)) 
    45      ERROR("void cxios_set_domaingroup_data_i_index(domaingroup_Ptr domaingroup_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=domaingroup_hdl->data_i_index ; 
    4645     CTimer::get("XIOS").suspend(); 
    4746  } 
     
    6463  void cxios_set_domaingroup_data_j_index(domaingroup_Ptr domaingroup_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     domaingroup_hdl->data_j_index.setValue(array_tmp); 
     65    CTimer::get("XIOS").resume(); 
     66    CArray<int,1> tmp(data_j_index,shape(extent1),neverDeleteData) ; 
     67    domaingroup_hdl->data_j_index.reference(tmp.copy()); 
    7068    domaingroup_hdl->sendAttributToServer(domaingroup_hdl->data_j_index); 
    7169  } 
     
    7371  void cxios_get_domaingroup_data_j_index(domaingroup_Ptr domaingroup_hdl, int* data_j_index, int extent1) 
    7472  { 
    75     if (!array_copy(domaingroup_hdl->data_j_index.getValue(), data_j_index, extent1)) 
    76      ERROR("void cxios_set_domaingroup_data_j_index(domaingroup_Ptr domaingroup_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=domaingroup_hdl->data_j_index ; 
    7775     CTimer::get("XIOS").suspend(); 
    7876  } 
     
    231229  void cxios_set_domaingroup_latvalue(domaingroup_Ptr domaingroup_hdl, double* latvalue, int extent1) 
    232230  { 
    233      CTimer::get("XIOS").resume(); 
    234     ARRAY(double,1) array_tmp(new CArray<double,1>(boost::extents[extent1])); 
    235     std::copy(latvalue, &(latvalue[array_tmp->num_elements()]), array_tmp->data()); 
    236     domaingroup_hdl->latvalue.setValue(array_tmp); 
     231    CTimer::get("XIOS").resume(); 
     232    CArray<double,1> tmp(latvalue,shape(extent1),neverDeleteData) ; 
     233    domaingroup_hdl->latvalue.reference(tmp.copy()); 
    237234    domaingroup_hdl->sendAttributToServer(domaingroup_hdl->latvalue); 
    238235  } 
     
    240237  void cxios_get_domaingroup_latvalue(domaingroup_Ptr domaingroup_hdl, double* latvalue, int extent1) 
    241238  { 
    242     if (!array_copy(domaingroup_hdl->latvalue.getValue(), latvalue, extent1)) 
    243      ERROR("void cxios_set_domaingroup_latvalue(domaingroup_Ptr domaingroup_hdl, double* latvalue, int extent1)",<<"Output array size is not conform to array size attribute") ; 
     239    CArray<double,1> tmp(latvalue,shape(extent1),neverDeleteData) ; 
     240    tmp=domaingroup_hdl->latvalue ; 
    244241     CTimer::get("XIOS").suspend(); 
    245242  } 
     
    267264  void cxios_set_domaingroup_lonvalue(domaingroup_Ptr domaingroup_hdl, double* lonvalue, int extent1) 
    268265  { 
    269      CTimer::get("XIOS").resume(); 
    270     ARRAY(double,1) array_tmp(new CArray<double,1>(boost::extents[extent1])); 
    271     std::copy(lonvalue, &(lonvalue[array_tmp->num_elements()]), array_tmp->data()); 
    272     domaingroup_hdl->lonvalue.setValue(array_tmp); 
     266    CTimer::get("XIOS").resume(); 
     267    CArray<double,1> tmp(lonvalue,shape(extent1),neverDeleteData) ; 
     268    domaingroup_hdl->lonvalue.reference(tmp.copy()); 
    273269    domaingroup_hdl->sendAttributToServer(domaingroup_hdl->lonvalue); 
    274270  } 
     
    276272  void cxios_get_domaingroup_lonvalue(domaingroup_Ptr domaingroup_hdl, double* lonvalue, int extent1) 
    277273  { 
    278     if (!array_copy(domaingroup_hdl->lonvalue.getValue(), lonvalue, extent1)) 
    279      ERROR("void cxios_set_domaingroup_lonvalue(domaingroup_Ptr domaingroup_hdl, double* lonvalue, int extent1)",<<"Output array size is not conform to array size attribute") ; 
     274    CArray<double,1> tmp(lonvalue,shape(extent1),neverDeleteData) ; 
     275    tmp=domaingroup_hdl->lonvalue ; 
    280276     CTimer::get("XIOS").suspend(); 
    281277  } 
     
    284280  void cxios_set_domaingroup_mask(domaingroup_Ptr domaingroup_hdl, bool* mask, int extent1, int extent2) 
    285281  { 
    286      CTimer::get("XIOS").resume(); 
    287     ARRAY(bool,2) array_tmp(new CArray<bool,2>(boost::extents[extent1][extent2])); 
    288     std::copy(mask, &(mask[array_tmp->num_elements()]), array_tmp->data()); 
    289     domaingroup_hdl->mask.setValue(array_tmp); 
     282    CTimer::get("XIOS").resume(); 
     283    CArray<bool,2> tmp(mask,shape(extent1,extent2),neverDeleteData) ; 
     284    domaingroup_hdl->mask.reference(tmp.copy()); 
    290285    domaingroup_hdl->sendAttributToServer(domaingroup_hdl->mask); 
    291286  } 
     
    293288  void cxios_get_domaingroup_mask(domaingroup_Ptr domaingroup_hdl, bool* mask, int extent1, int extent2) 
    294289  { 
    295     if (!array_copy(domaingroup_hdl->mask.getValue(), mask, extent1, extent2)) 
    296      ERROR("void cxios_set_domaingroup_mask(domaingroup_Ptr domaingroup_hdl, bool* mask, int extent1, int extent2)",<<"Output array size is not conform to array size attribute") ; 
     290    CArray<bool,2> tmp(mask,shape(extent1,extent2),neverDeleteData) ; 
     291    tmp=domaingroup_hdl->mask ; 
    297292     CTimer::get("XIOS").suspend(); 
    298293  } 
Note: See TracChangeset for help on using the changeset viewer.