Changeset 9796d0a for python/lib


Ignore:
Timestamp:
09/25/17 19:20:08 (7 years ago)
Author:
Hal Finkel <hfinkel@…>
Branches:
master, pympi
Children:
56b997e
Parents:
b02d091
git-author:
Hal Finkel <hfinkel@…> (09/25/17 19:20:08)
git-committer:
Hal Finkel <hfinkel@…> (09/25/17 19:20:08)
Message:

Add support for float4 (and similar) to Python bindings

Location:
python/lib
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • python/lib/gio.cxx

    rbd84570 r9796d0a  
    4343#include <iostream> 
    4444 
    45   void read_gio_float(char* file_name, char* var_name, float* data){ 
    46     read_gio<float>(file_name,var_name,data); 
     45  void read_gio_float(char* file_name, char* var_name, float* data, int field_count){ 
     46    read_gio<float>(file_name,var_name,data,field_count); 
    4747  } 
    48   void read_gio_double(char* file_name, char* var_name, double* data){ 
    49     read_gio<double>(file_name,var_name,data); 
     48  void read_gio_double(char* file_name, char* var_name, double* data, int field_count){ 
     49    read_gio<double>(file_name,var_name,data,field_count); 
    5050  } 
    51   void read_gio_int32(char* file_name, char* var_name, int* data){ 
    52     read_gio<int>(file_name,var_name,data); 
     51  void read_gio_int32(char* file_name, char* var_name, int* data, int field_count){ 
     52    read_gio<int>(file_name,var_name,data,field_count); 
    5353  } 
    54   void read_gio_int64(char* file_name, char* var_name, int64_t* data){ 
    55     read_gio<int64_t>(file_name,var_name,data); 
     54  void read_gio_int64(char* file_name, char* var_name, int64_t* data, int field_count){ 
     55    read_gio<int64_t>(file_name,var_name,data,field_count); 
    5656  } 
    5757   
     
    7777      gio::GenericIO::VariableInfo vinfo = VI[i]; 
    7878      if(vinfo.Name == var_name){ 
    79         if(vinfo.IsFloat && vinfo.Size == 4) 
     79        if(vinfo.IsFloat && vinfo.ElementSize == 4) 
    8080          return float_type; 
    81         else if(vinfo.IsFloat && vinfo.Size == 8) 
     81        else if(vinfo.IsFloat && vinfo.ElementSize == 8) 
    8282          return double_type; 
    83         else if(!vinfo.IsFloat && vinfo.Size == 4) 
     83        else if(!vinfo.IsFloat && vinfo.ElementSize == 4) 
    8484          return int32_type; 
    85         else if(!vinfo.IsFloat && vinfo.Size == 8) 
     85        else if(!vinfo.IsFloat && vinfo.ElementSize == 8) 
    8686          return int64_type; 
    8787        else 
     
    9191    return var_not_found; 
    9292       
     93  } 
     94 
     95  int get_variable_field_count(char* file_name,char* var_name){ 
     96   gio::GenericIO reader(file_name); 
     97   std::vector<gio::GenericIO::VariableInfo> VI; 
     98   reader.openAndReadHeader(gio::GenericIO::MismatchAllowed); 
     99   reader.getVariableInfo(VI); 
     100 
     101   int num =VI.size(); 
     102    for(int i =0;i<num;++i){ 
     103      gio::GenericIO::VariableInfo vinfo = VI[i]; 
     104      if(vinfo.Name == var_name) { 
     105        return vinfo.Size/vinfo.ElementSize; 
     106      } 
     107    } 
     108    return 0; 
    93109  } 
    94110 
     
    110126    else 
    111127      std::cout<<"[i"; 
    112     std::cout<<" "<<vinfo.Size*8<<"] "; 
     128    int NumElements = vinfo.Size/vinfo.ElementSize; 
     129    std::cout<<" "<<vinfo.ElementSize*8; 
     130    if (NumElements > 1) 
     131      std::cout<<"x"<<NumElements; 
     132    std::cout<<"] "; 
    113133    std::cout<<vinfo.Name<<std::endl; 
    114134  } 
  • python/lib/gio.h

    rbd84570 r9796d0a  
    4646 
    4747template <class T> 
    48 void read_gio(char* file_name, std::string var_name, T*& data){ 
     48void read_gio(char* file_name, std::string var_name, T*& data, int field_count){ 
    4949  gio::GenericIO reader(file_name); 
    5050  reader.openAndReadHeader(gio::GenericIO::MismatchAllowed); 
     
    5757      max_size = rank_size[i]; 
    5858  } 
    59   T* rank_data = new T[max_size+reader.requestedExtraSpace()/sizeof(T)]; 
     59  T* rank_data = new T[max_size*field_count+reader.requestedExtraSpace()/sizeof(T)]; 
    6060  int64_t offset =0; 
    61   reader.addVariable(var_name,rank_data,true); 
     61  reader.addScalarizedVariable(var_name,rank_data,field_count, 
     62                               gio::GenericIO::VarHasExtraSpace); 
    6263  for(int i=0;i<num_ranks;++i){ 
    6364    reader.readData(i,false); 
    64     std::copy(rank_data,rank_data+rank_size[i],data+offset); 
    65     offset +=rank_size[i]; 
     65    std::copy(rank_data,rank_data+rank_size[i]*field_count,data+offset); 
     66    offset +=rank_size[i]*field_count; 
    6667  } 
    6768  delete [] rank_data; 
     
    7071extern "C" int64_t get_elem_num(char* file_name); 
    7172 
    72 extern "C" void read_gio_float (char* file_name, char* var_name, float* data); 
    73 extern "C" void read_gio_double(char* file_name, char* var_name, double* data); 
    74 extern "C" void read_gio_int32 (char* file_name, char* var_name, int* data);  
    75 extern "C" void read_gio_int64 (char* file_name, char* var_name, int64_t* data); 
     73extern "C" void read_gio_float (char* file_name, char* var_name, float* data, int field_count); 
     74extern "C" void read_gio_double(char* file_name, char* var_name, double* data, int field_count); 
     75extern "C" void read_gio_int32 (char* file_name, char* var_name, int* data, int field_count);  
     76extern "C" void read_gio_int64 (char* file_name, char* var_name, int64_t* data, int field_count); 
    7677enum var_type{ 
    7778  float_type=0, 
     
    8384}; 
    8485extern "C" var_type get_variable_type(char* file_name,char* var_name); 
     86extern "C" int get_variable_field_count(char* file_name,char* var_name); 
    8587extern "C" void inspect_gio(char* file_name); 
Note: See TracChangeset for help on using the changeset viewer.