Skip to content
Snippets Groups Projects
Commit ebf24974 authored by wgodoy's avatar wgodoy
Browse files

Returning a VariablePy object with DefineVariable

parent 4df1c4f0
No related branches found
No related tags found
1 merge request!8Integrate groupless
...@@ -12,8 +12,8 @@ BOOST_INC:= /usr/include/boost ...@@ -12,8 +12,8 @@ BOOST_INC:= /usr/include/boost
BOOST_LIBLOC:= /lib/x86_64-linux-gnu/ BOOST_LIBLOC:= /lib/x86_64-linux-gnu/
# location of ADIOS include and lib # location of ADIOS include and lib
ADIOS_INC:= /home/wfg/workspace/ADIOSPP/include ADIOS_INC:= /home/wgodoy/workspace/ADIOSPP/include
ADIOS_LIB:= /home/wfg/workspace/ADIOSPP/lib ADIOS_LIB:= /home/wgodoy/workspace/ADIOSPP/lib
ADIOSPy_INC:=./include ADIOSPy_INC:=./include
CFLAGS:=-c -Wall -fPIC -O0 -g -std=c++11 CFLAGS:=-c -Wall -fPIC -O0 -g -std=c++11
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include "ADIOS.h" #include "ADIOS.h"
#include "adiosPyFunctions.h" //ListToVector, VectorToList #include "adiosPyFunctions.h" //ListToVector, VectorToList
#include "VariablePy.h"
namespace adios namespace adios
...@@ -30,7 +31,7 @@ public: ...@@ -30,7 +31,7 @@ public:
void HelloMPI( ); ///< says hello from rank/size for testing void HelloMPI( ); ///< says hello from rank/size for testing
std::string DefineVariableDouble( const std::string name, VariablePy<double>& DefineVariableDouble( const std::string name,
const boost::python::list localDimensionsPy = boost::python::list(), const boost::python::list localDimensionsPy = boost::python::list(),
const boost::python::list globalDimensionsPy = boost::python::list(), const boost::python::list globalDimensionsPy = boost::python::list(),
const boost::python::list globalOffsetsPy = boost::python::list() ); const boost::python::list globalOffsetsPy = boost::python::list() );
...@@ -42,7 +43,7 @@ public: ...@@ -42,7 +43,7 @@ public:
void SetVariableLocalDimensions( const std::string name, const boost::python::list list ); void SetVariableLocalDimensions( const std::string name, const boost::python::list list );
boost::python::list GetVariableLocalDimensions( const std::string name ); std::vector<std::size_t> GetVariableLocalDimensions( const std::string name );
private: private:
......
/*
* VariablePy.h
*
* Created on: Mar 13, 2017
* Author: wgodoy
*/
#ifndef VARIABLEPY_H_
#define VARIABLEPY_H_
#include "core/Variable.h"
#include "adiosPyFunctions.h"
namespace adios
{
template< class T>
class VariablePy : public Variable<T>
{
public:
VariablePy<T>( const std::string name, const Dims dimensions, const Dims globalDimensions, const Dims globalOffsets,
const bool debugMode ):
Variable<T>( name, dimensions, globalDimensions, globalOffsets, debugMode )
{ }
~VariablePy( )
{ }
void SetLocalDimensions( const boost::python::list list )
{
this->m_Dimensions = ListToVector( list );
}
std::vector<std::size_t> GetLocalDimensions( )
{
return this->m_Dimensions;
}
};
}
#endif /* BINDINGS_PYTHON_INCLUDE_VARIABLEPY_H_ */
...@@ -35,10 +35,13 @@ std::string ADIOSPy::DefineVariableFloat( const std::string name, const boost::p ...@@ -35,10 +35,13 @@ std::string ADIOSPy::DefineVariableFloat( const std::string name, const boost::p
} }
std::string ADIOSPy::DefineVariableDouble( const std::string name, const boost::python::list localDimensionsPy, VariablePy<double>& ADIOSPy::DefineVariableDouble( const std::string name, const boost::python::list localDimensionsPy,
const boost::python::list globalDimensionsPy, const boost::python::list globalOffsetsPy ) const boost::python::list globalDimensionsPy, const boost::python::list globalOffsetsPy )
{ {
return DefineVariablePy<double>( name, localDimensionsPy, globalDimensionsPy, globalOffsetsPy );
Variable<double>& var = DefineVariable<double>( name, ListToVector( localDimensionsPy ), ListToVector( globalDimensionsPy ), ListToVector( globalOffsetsPy ) );
VariablePy<double>& varPy = *reinterpret_cast<VariablePy<double>*>( &var );
return varPy;
} }
...@@ -100,7 +103,8 @@ void ADIOSPy::SetVariableLocalDimensions( const std::string name, const boost::p ...@@ -100,7 +103,8 @@ void ADIOSPy::SetVariableLocalDimensions( const std::string name, const boost::p
} }
boost::python::list ADIOSPy::GetVariableLocalDimensions( const std::string name ) //boost::python::list ADIOSPy::GetVariableLocalDimensions( const std::string name )
std::vector<std::size_t> ADIOSPy::GetVariableLocalDimensions( const std::string name )
{ {
auto itVar = m_Variables.find( name ); auto itVar = m_Variables.find( name );
CheckVariableName( itVar, name, " in SetVariableLocalDimensions\n" ); CheckVariableName( itVar, name, " in SetVariableLocalDimensions\n" );
...@@ -157,8 +161,8 @@ boost::python::list ADIOSPy::GetVariableLocalDimensions( const std::string name ...@@ -157,8 +161,8 @@ boost::python::list ADIOSPy::GetVariableLocalDimensions( const std::string name
else if( type == GetType<std::complex<long double>>() ) else if( type == GetType<std::complex<long double>>() )
dims = GetVariable<std::complex<long double>>( name ).m_Dimensions; dims = GetVariable<std::complex<long double>>( name ).m_Dimensions;
//return dims; return dims;
return VectorToList( dims ); //return VectorToList( dims );
} }
......
...@@ -38,11 +38,18 @@ BOOST_PYTHON_MODULE( ADIOSPy ) ...@@ -38,11 +38,18 @@ BOOST_PYTHON_MODULE( ADIOSPy )
//classes //classes
boost::python::class_<adios::ADIOSPy>("ADIOS", boost::python::no_init ) boost::python::class_<adios::ADIOSPy>("ADIOS", boost::python::no_init )
.def("HelloMPI", &adios::ADIOSPy::HelloMPI ) .def("HelloMPI", &adios::ADIOSPy::HelloMPI )
.def("DefineVariableDouble", &adios::ADIOSPy::DefineVariableDouble, d_overloads() ) .def("DefineVariableDouble", &adios::ADIOSPy::DefineVariableDouble,
boost::python::return_value_policy<boost::python::reference_existing_object>(), d_overloads() )
.def("DefineVariableFloat", &adios::ADIOSPy::DefineVariableFloat, f_overloads() ) .def("DefineVariableFloat", &adios::ADIOSPy::DefineVariableFloat, f_overloads() )
.def("SetVariableLocalDimensions", &adios::ADIOSPy::SetVariableLocalDimensions ) .def("SetVariableLocalDimensions", &adios::ADIOSPy::SetVariableLocalDimensions )
.def("GetVariableLocalDimensions", &adios::ADIOSPy::GetVariableLocalDimensions ) .def("GetVariableLocalDimensions", &adios::ADIOSPy::GetVariableLocalDimensions )
; ;
//classes
boost::python::class_<adios::VariablePy<double>>("VariableDouble", boost::python::no_init )
.def("SetLocalDimensions", &adios::VariablePy<double>::SetLocalDimensions )
.def("GetLocalDimensions", &adios::VariablePy<double>::GetLocalDimensions )
;
} }
...@@ -11,24 +11,30 @@ adios.HelloMPI( ) ...@@ -11,24 +11,30 @@ adios.HelloMPI( )
lDims = [10, 11, 12] lDims = [10, 11, 12]
Nx = 1 Nx = 1
print lDims ioMyDoubles = adios.DefineVariableDouble( "ioMyDoubles", lDims, [], [] )
print lDims[0]
ioMyDoubles = adios.DefineVariableDouble( "ioMyDoubles", lDims )
ioMyFloats = adios.DefineVariableFloat( "ioMyFloats", [Nx] )
print "My ADIOS Variable Double " + ioMyDoubles dims = ioMyDoubles.GetLocalDimensions( )
print "My ADIOS Variable Float " + ioMyFloats print "Old Dimensions"
for dim in dims:
print dim
dims = adios.GetVariableLocalDimensions( ioMyDoubles ) ioMyDoubles.SetLocalDimensions( [20,20,20] )
print "Old Dimensions "
print dims
lDims = [20,20,20] dims = ioMyDoubles.GetLocalDimensions( )
adios.SetVariableLocalDimensions( ioMyDoubles, lDims )
dims = adios.GetVariableLocalDimensions( ioMyDoubles )
print "New Dimensions " print "New Dimensions "
print dims for dim in dims:
print dim
# dims = adios.GetVariableLocalDimensions( ioMyDoubles )
#
# lDims = [20,20,20]
# adios.SetVariableLocalDimensions( ioMyDoubles, lDims )
#
# dims = adios.GetVariableLocalDimensions( ioMyDoubles )
# print "New Dimensions "
# for dim in dims:
# print dim
# bpWriter = adios.Open( ) # bpWriter = adios.Open( )
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment