Skip to content

Commit

Permalink
Merge pull request #7 from gismo/pybind11
Browse files Browse the repository at this point in the history
Binding shell assembler and material matrices to Python
  • Loading branch information
hverhelst authored Jan 6, 2022
2 parents 1e7dc7a + 5ef166d commit db667ba
Show file tree
Hide file tree
Showing 16 changed files with 647 additions and 3 deletions.
5 changes: 3 additions & 2 deletions examples/example_shell3D.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ int main(int argc, char *argv[])
gsInfo << "Patches: "<< mp.nPatches() <<", degree: "<< dbasis.minCwiseDegree() <<"\n";
gsInfo << dbasis.basis(0)<<"\n";


//! [Set boundary conditions]
gsBoundaryConditions<> bc;
bc.setGeoMap(mp);
Expand Down Expand Up @@ -136,9 +137,9 @@ int main(int argc, char *argv[])
bc.addCondition(boundary::west, condition_type::dirichlet, 0, 0 ,false,i);
}

pressure = -1;
// pressure = -1;
refPoint<<0.5,0.5;
// tmp << 0,0,-1;
tmp << 0,0,-1;

}
else if (testCase == 1)
Expand Down
56 changes: 56 additions & 0 deletions gsKLShell.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
#include <gsCore/gsTemplateTools.h>

#include <gsKLShell/gsMaterialMatrixBase.h>
#include <gsKLShell/gsMaterialMatrixBaseDim.h>

#include <gsKLShell/gsMaterialMatrixLinear.h>
#include <gsKLShell/gsMaterialMatrix.h>

#include <gsKLShell/gsThinShellAssembler.h>


namespace gismo
{

#ifdef GISMO_BUILD_PYBIND11

namespace py = pybind11;

void pybind11_init_gsKLShell(py::module &m)
{
gismo::pybind11_init_gsMaterialMatrixBase( m );

gismo::pybind11_init_gsMaterialMatrixBaseDim2( m );
gismo::pybind11_init_gsMaterialMatrixBaseDim3( m );

gismo::pybind11_init_gsMaterialMatrixLinear2( m );
gismo::pybind11_init_gsMaterialMatrixLinear3( m );

gismo::pybind11_init_gsMaterialMatrixNH2i( m );
gismo::pybind11_init_gsMaterialMatrixNH2c( m );

gismo::pybind11_init_gsMaterialMatrixNH3i( m );
gismo::pybind11_init_gsMaterialMatrixNH3c( m );

gismo::pybind11_init_gsMaterialMatrixMR2i( m );
gismo::pybind11_init_gsMaterialMatrixMR2c( m );

gismo::pybind11_init_gsMaterialMatrixMR3i( m );
gismo::pybind11_init_gsMaterialMatrixMR3c( m );

gismo::pybind11_init_gsMaterialMatrixOG2i( m );
gismo::pybind11_init_gsMaterialMatrixOG2c( m );

gismo::pybind11_init_gsMaterialMatrixOG3i( m );
gismo::pybind11_init_gsMaterialMatrixOG3c( m );

gismo::pybind11_init_gsThinShellAssemblerBase( m );

gismo::pybind11_init_gsThinShellAssembler2( m );
gismo::pybind11_init_gsThinShellAssembler3( m );
gismo::pybind11_init_gsThinShellAssembler3nb( m );
}

#endif
}

25 changes: 25 additions & 0 deletions gsMaterialMatrix.h
Original file line number Diff line number Diff line change
Expand Up @@ -1194,6 +1194,31 @@ class gsMaterialMatrix : public gsMaterialMatrixBaseDim<dim,T>
}
};

#ifdef GISMO_BUILD_PYBIND11

/**
* @brief Initializes the Python wrapper for the class: gsMaterialMatrixLinear
*/
void pybind11_init_gsMaterialMatrixNH2i(pybind11::module &m);
void pybind11_init_gsMaterialMatrixNH2c(pybind11::module &m);

void pybind11_init_gsMaterialMatrixNH3i(pybind11::module &m);
void pybind11_init_gsMaterialMatrixNH3c(pybind11::module &m);

void pybind11_init_gsMaterialMatrixMR2i(pybind11::module &m);
void pybind11_init_gsMaterialMatrixMR2c(pybind11::module &m);

void pybind11_init_gsMaterialMatrixMR3i(pybind11::module &m);
void pybind11_init_gsMaterialMatrixMR3c(pybind11::module &m);

void pybind11_init_gsMaterialMatrixOG2i(pybind11::module &m);
void pybind11_init_gsMaterialMatrixOG2c(pybind11::module &m);

void pybind11_init_gsMaterialMatrixOG3i(pybind11::module &m);
void pybind11_init_gsMaterialMatrixOG3c(pybind11::module &m);

#endif // GISMO_BUILD_PYBIND11

} // namespace


Expand Down
39 changes: 39 additions & 0 deletions gsMaterialMatrix2dComp_.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,44 @@ namespace gismo

// OG
CLASS_TEMPLATE_INST gsMaterialMatrix<2,real_t,34,true>;

#ifdef GISMO_BUILD_PYBIND11

namespace py = pybind11;

void pybind11_init_gsMaterialMatrixNH2c(py::module &m)
{
using Base = gsMaterialMatrixBaseDim<2,real_t>;
using Class = gsMaterialMatrix<2,real_t,11,true>;
py::class_<Class,Base>(m, "gsMaterialNH2c")

// Constructors
.def(py::init<gsFunctionSet<real_t>&,gsFunction<real_t>&>())
;
}

void pybind11_init_gsMaterialMatrixMR2c(py::module &m)
{
using Base = gsMaterialMatrixBaseDim<2,real_t>;
using Class = gsMaterialMatrix<2,real_t,13,true>;
py::class_<Class,Base>(m, "gsMaterialMR2c")

// Constructors
.def(py::init<gsFunctionSet<real_t>&,gsFunction<real_t>&>())
;
}

void pybind11_init_gsMaterialMatrixOG2c(py::module &m)
{
using Base = gsMaterialMatrixBaseDim<2,real_t>;
using Class = gsMaterialMatrix<2,real_t,34,true>;
py::class_<Class,Base>(m, "gsMaterialOG2c")

// Constructors
.def(py::init<gsFunctionSet<real_t>&,gsFunction<real_t>&>())
;
}

#endif
}

40 changes: 40 additions & 0 deletions gsMaterialMatrix2dIncomp_.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,45 @@ namespace gismo

// OG
CLASS_TEMPLATE_INST gsMaterialMatrix<2,real_t,34,false>;

#ifdef GISMO_BUILD_PYBIND11

namespace py = pybind11;

void pybind11_init_gsMaterialMatrixNH2i(py::module &m)
{
using Base = gsMaterialMatrixBaseDim<2,real_t>;
using Class = gsMaterialMatrix<2,real_t,11,false>;
py::class_<Class,Base>(m, "gsMaterialNH2i")

// Constructors
.def(py::init<gsFunctionSet<real_t>&,gsFunction<real_t>&>())
;
}

void pybind11_init_gsMaterialMatrixMR2i(py::module &m)
{
using Base = gsMaterialMatrixBaseDim<2,real_t>;
using Class = gsMaterialMatrix<2,real_t,13,false>;
py::class_<Class,Base>(m, "gsMaterialMR2i")

// Constructors
.def(py::init<gsFunctionSet<real_t>&,gsFunction<real_t>&>())
;
}

void pybind11_init_gsMaterialMatrixOG2i(py::module &m)
{
using Base = gsMaterialMatrixBaseDim<2,real_t>;
using Class = gsMaterialMatrix<2,real_t,34,false>;
py::class_<Class,Base>(m, "gsMaterialOG2i")

// Constructors
.def(py::init<gsFunctionSet<real_t>&,gsFunction<real_t>&>())
;
}

#endif

}

39 changes: 39 additions & 0 deletions gsMaterialMatrix3dComp_.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,44 @@ namespace gismo
// OG
CLASS_TEMPLATE_INST gsMaterialMatrix<3,real_t,34,true>;

#ifdef GISMO_BUILD_PYBIND11

namespace py = pybind11;

void pybind11_init_gsMaterialMatrixNH3c(py::module &m)
{
using Base = gsMaterialMatrixBaseDim<3,real_t>;
using Class = gsMaterialMatrix<3,real_t,11,true>;
py::class_<Class,Base>(m, "gsMaterialNH3c")

// Constructors
.def(py::init<gsFunctionSet<real_t>&,gsFunction<real_t>&>())
;
}

void pybind11_init_gsMaterialMatrixMR3c(py::module &m)
{
using Base = gsMaterialMatrixBaseDim<3,real_t>;
using Class = gsMaterialMatrix<3,real_t,13,true>;
py::class_<Class,Base>(m, "gsMaterialMR3c")

// Constructors
.def(py::init<gsFunctionSet<real_t>&,gsFunction<real_t>&>())
;
}

void pybind11_init_gsMaterialMatrixOG3c(py::module &m)
{
using Base = gsMaterialMatrixBaseDim<3,real_t>;
using Class = gsMaterialMatrix<3,real_t,34,true>;
py::class_<Class,Base>(m, "gsMaterialOG3c")

// Constructors
.def(py::init<gsFunctionSet<real_t>&,gsFunction<real_t>&>())
;
}

#endif

}

39 changes: 39 additions & 0 deletions gsMaterialMatrix3dIncomp_.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,44 @@ namespace gismo
// OG
CLASS_TEMPLATE_INST gsMaterialMatrix<3,real_t,34,false>;

#ifdef GISMO_BUILD_PYBIND11

namespace py = pybind11;

void pybind11_init_gsMaterialMatrixNH3i(py::module &m)
{
using Base = gsMaterialMatrixBaseDim<3,real_t>;
using Class = gsMaterialMatrix<3,real_t,11,false>;
py::class_<Class,Base>(m, "gsMaterialNH3i")

// Constructors
.def(py::init<gsFunctionSet<real_t>&,gsFunction<real_t>&>())
;
}

void pybind11_init_gsMaterialMatrixMR3i(py::module &m)
{
using Base = gsMaterialMatrixBaseDim<3,real_t>;
using Class = gsMaterialMatrix<3,real_t,13,false>;
py::class_<Class,Base>(m, "gsMaterialMR3i")

// Constructors
.def(py::init<gsFunctionSet<real_t>&,gsFunction<real_t>&>())
;
}

void pybind11_init_gsMaterialMatrixOG3i(py::module &m)
{
using Base = gsMaterialMatrixBaseDim<3,real_t>;
using Class = gsMaterialMatrix<3,real_t,34,false>;
py::class_<Class,Base>(m, "gsMaterialOG3i")

// Constructors
.def(py::init<gsFunctionSet<real_t>&,gsFunction<real_t>&>())
;
}

#endif

}

9 changes: 9 additions & 0 deletions gsMaterialMatrixBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -198,4 +198,13 @@ class gsMaterialMatrixBase
const gsFunctionSet<T> * m_defpatches;
};

#ifdef GISMO_BUILD_PYBIND11

/**
* @brief Initializes the Python wrapper for the class: gsMaterialMatrixBase
*/
void pybind11_init_gsMaterialMatrixBase(pybind11::module &m);

#endif // GISMO_BUILD_PYBIND11

} // namespace
10 changes: 10 additions & 0 deletions gsMaterialMatrixBaseDim.h
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,16 @@ class gsMaterialMatrixBaseDim : public gsMaterialMatrixBase<T>

};

#ifdef GISMO_BUILD_PYBIND11

/**
* @brief Initializes the Python wrapper for the class: gsMaterialMatrixBaseDim
*/
void pybind11_init_gsMaterialMatrixBaseDim2(pybind11::module &m);
void pybind11_init_gsMaterialMatrixBaseDim3(pybind11::module &m);

#endif // GISMO_BUILD_PYBIND11

} // namespace

#ifndef GISMO_BUILD_LIB
Expand Down
48 changes: 48 additions & 0 deletions gsMaterialMatrixBase_.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,53 @@ namespace gismo

CLASS_TEMPLATE_INST gsMaterialMatrixBaseDim<2,real_t>;
CLASS_TEMPLATE_INST gsMaterialMatrixBaseDim<3,real_t>;

#ifdef GISMO_BUILD_PYBIND11

namespace py = pybind11;

void pybind11_init_gsMaterialMatrixBase(py::module &m)
{
using Class = gsMaterialMatrixBase<real_t>;
py::class_<Class>(m, "gsMaterialMatrixBase")

// Member functions
.def("setOptions", &Class::setOptions, "Sets the options")
.def("density_into", &Class::density_into, "Computes the density into a matrix")
.def("stretch_into", &Class::stretch_into, "Computes the stretches into a matrix")
.def("stretchDir_into", &Class::stretchDir_into, "Computes the stretch directions into a matrix")
.def("thickness_into", &Class::thickness_into, "Computes the thickness into a matrix")
.def("transform_into", &Class::transform_into, "Computes the stretch transformation into a matrix")
.def("eval3D_matrix", &Class::eval3D_matrix, "Evaluates the material matrix")
.def("eval3D_vector", &Class::eval3D_vector, "Evaluates the stress vector")
.def("eval3D_pstress", &Class::eval3D_pstress, "Evaluates the principal stress vector")

.def("setYoungsModulus", &Class::setYoungsModulus, "Sets the Young's Modulus")
.def("setPoissonsRatio", &Class::setPoissonsRatio, "Sets the Poisson's Ratio")
.def("setRatio" , &Class::setRatio , "Sets the Ratio for MR model")
.def("setMu" , &Class::setMu , "Sets the Mu_i for OG model")
.def("setAlpha" , &Class::setAlpha , "Sets the Alpha_i for OG model")
.def("setDensity" , &Class::setDensity , "Sets the Density")
;
}

void pybind11_init_gsMaterialMatrixBaseDim2(py::module &m)
{
using Base = gsMaterialMatrixBase<real_t>;
using Class = gsMaterialMatrixBaseDim<2,real_t>;
py::class_<Class,Base>(m, "gsMaterialMatrixBaseDim2")
;
}

void pybind11_init_gsMaterialMatrixBaseDim3(py::module &m)
{
using Base = gsMaterialMatrixBase<real_t>;
using Class = gsMaterialMatrixBaseDim<3,real_t>;
py::class_<Class,Base>(m, "gsMaterialMatrixBaseDim3")
;
}

#endif

}

10 changes: 10 additions & 0 deletions gsMaterialMatrixLinear.h
Original file line number Diff line number Diff line change
Expand Up @@ -315,6 +315,16 @@ class gsMaterialMatrixLinear : public gsMaterialMatrixBaseDim<dim,T>

};

#ifdef GISMO_BUILD_PYBIND11

/**
* @brief Initializes the Python wrapper for the class: gsMaterialMatrixLinear
*/
void pybind11_init_gsMaterialMatrixLinear2(pybind11::module &m);
void pybind11_init_gsMaterialMatrixLinear3(pybind11::module &m);

#endif // GISMO_BUILD_PYBIND11

} // namespace


Expand Down
Loading

0 comments on commit db667ba

Please sign in to comment.