9#ifndef _model_DislocationMobilityPy_cpp_
10#define _model_DislocationMobilityPy_cpp_
17#ifdef _MODEL_PYBIND11_
27 const std::string moduleStem(modulePath.stem().string());
28 const std::string moduleDir(modulePath.parent_path().string());
29 std::cout<<
"moduleStem="<<moduleStem<<std::endl;
30 std::cout<<
"moduleDir="<<moduleDir<<std::endl;
31 pybind11::module sys = pybind11::module::import(
"sys");
32 pybind11::list path = sys.attr(
"path");
33 path.append(moduleDir);
34 pyModule = pybind11::module::import(moduleStem.c_str());
44 const std::shared_ptr<StochasticForceGenerator>& )
const
46 Eigen::MatrixXd stress(
S*
mu_SI*1
e-9);
47 Eigen::VectorXd burgers(
b);
48 Eigen::VectorXd tangent(
xi);
49 Eigen::VectorXd normal(n);
54 pybind11::object mobilitySolver =
pyModule.attr(
"MobilitySolver")();
55 double qpPythonVelocity = mobilitySolver.attr(
"velocityPy")(stress, burgers, tangent, normal,
temp, dL, dt).cast<double>();
56 return qpPythonVelocity*100/
cs;
58 catch (
const pybind11::error_already_set&
e)
60 std::cerr <<
"Python error: " <<
e.what() << std::endl;
70 ,kB(kB_SI/material.mu_SI/std::pow(material.b_SI,3))
71 ,mu_SI(material.mu_SI)
74 ,pyModuleName(pyModuleName_in)
85 const std::shared_ptr<StochasticForceGenerator>& )
const
87 throw std::runtime_error(
"DislocationMobilityPy used without pybind11");
Eigen::Matrix< double, 3, 1 > VectorDim
Eigen::Matrix< double, 3, 3 > MatrixDim
DislocationMobility(const std::string &name_in)
Eigen::Matrix< double, 3, 3 > MatrixDim
double velocity(const MatrixDim &S, const VectorDim &b, const VectorDim &xi, const VectorDim &n, const double &T, const double &dL, const double &dt, const std::shared_ptr< StochasticForceGenerator > &sfg) const override
DislocationMobilityPy(const PolycrystallineMaterialBase &material, const std::string &pyModuleName_in)
pybind11::module pyModule
static constexpr double kB_SI
const std::string pyModuleName
Eigen::Matrix< double, 3, 1 > VectorDim