Mechanics of Defect Evolution Library
Loading...
Searching...
No Matches
pyMoDELib.cxx
Go to the documentation of this file.
1/* This file is part of MODEL, the Mechanics Of Defect Evolution Library.
2 *
3 * Copyright (C) 2017 by Giacomo Po <gpo@ucla.edu>.
4 *
5 * model is distributed without any warranty under the
6 * GNU General Public License (GPL) v2 <http://www.gnu.org/licenses/>.
7 */
8
9#ifndef model_pyMoDELib_cpp_
10#define model_pyMoDELib_cpp_
11
12#ifdef _MODEL_PYBIND11_
13#include <DislocationNetwork.h>
17#include <pybind11/pybind11.h>
18#include <pybind11/eigen.h>
19#include <pybind11/stl.h>
20#include <pybind11/complex.h>
21#include <pybind11/functional.h>
22#include <pybind11/chrono.h>
23#include <pybind11/stl_bind.h>
24#include <pybind11/numpy.h>
25#endif
26
27#include <Eigen/Dense>
28#include <string>
29#include <vector>
30#include <set>
31#include <memory>
32#include <map>
33
34#include <InterpolantBase.h>
35#include <LagrangeInterpolant.h>
36#include <LinearInterpolant.h>
38#include <SimplicialMesh.h>
41#include <BCClattice.h>
42#include <FCClattice.h>
43#include <HEXlattice.h>
44#include <Polycrystal.h>
56//#include <DislocationMobilityBCC.h>
57//#include <DislocationMobilityFCC.h>
58//#include <DislocationMobilityPy.h>
59#include <GlidePlaneNoiseBase.h>
60#include <PeriodicLatticeInterpolant.h>
61
62using namespace model;
63// https://pybind11.readthedocs.io/en/stable/advanced/cast/eigen.html
64// https://pybind11.readthedocs.io/en/stable/advanced/classes.html
65
66typedef Eigen::Matrix<double,3,1> VectorDim;
67typedef Eigen::Matrix<double,3,3> MatrixDim;
73
74#ifdef _MODEL_PYBIND11_
75
76PYBIND11_MAKE_OPAQUE(std::map<typename LoopNodeType::KeyType,const std::weak_ptr<LoopNodeType>>);
77PYBIND11_MAKE_OPAQUE(std::map<typename LoopType::KeyType,const std::weak_ptr<LoopType>>);
78PYBIND11_MAKE_OPAQUE(std::vector<MeshedDislocationLoop>);
79PYBIND11_MAKE_OPAQUE(GlidePlaneNoiseBase<1>); // opaque: pybind11 is not going to try to guess the data type for python
81
82//PYBIND11_MAKE_OPAQUE(std::vector<std::shared_ptr<GlidePlaneBase>>);
83//PYBIND11_MAKE_OPAQUE(std::vector<std::shared_ptr<SlipSystem>>);
84//PYBIND11_MAKE_OPAQUE(std::map<size_t,std::shared_ptr<SecondPhase<3>>>);
85
89//PYBIND11_MAKE_OPAQUE(std::map<const GlidePlaneBase*,std::shared_ptr<GammaSurface>>);
90
91
92#include "MeshBindings.h"
93
95{
96 namespace py=pybind11;
97
98
99 py::class_<ExtrapolationMethod>(m, "ExtrapolationMethod")
100 .def(py::init<>())
101 .def(py::init<const int&,const double&>())
102 .def_readwrite("type", &ExtrapolationMethod::type)
103 .def_readwrite("period", &ExtrapolationMethod::period)
104 ;
105
106 py::class_<InterpolantBase>(m, "InterpolantBase")
107 .def("f", &InterpolantBase::f)
108// .def("atPeriodic", &InterpolantBase::atPeriodic)
109 .def_readwrite("extrapolation", &InterpolantBase::extrapolation)
110 ;
111
112 py::class_<LagrangeInterpolant,InterpolantBase>(m, "LagrangeInterpolant")
113 .def(py::init<const InterpolantBase::MatrixType&,const ExtrapolationMethod&>())
114 ;
115
116 py::class_<LinearInterpolant,InterpolantBase>(m, "LinearInterpolant")
117 .def(py::init<const InterpolantBase::MatrixType&,const ExtrapolationMethod&>())
118 ;
119
120 py::class_<GlidePlaneNoiseBase<1>, std::shared_ptr<GlidePlaneNoiseBase<1>>>(m, "GlidePlaneNoiseBase1")
121 .def(py::init<const std::string&, const int&,
124 const Eigen::Matrix<double,2,2>&>())
125 .def("averageNoiseCorrelation", &GlidePlaneNoiseBase<1>::averageNoiseCorrelation)
126 .def("sampleAverageNoise", &GlidePlaneNoiseBase<1>::sampleAverageNoise)
127 ;
128
129 // Bind MDStackingFaultNoise
130 py::class_<MDStackingFaultNoise, GlidePlaneNoiseBase<1>, std::shared_ptr<MDStackingFaultNoise>>(m, "MDStackingFaultNoise")
131 .def(py::init<
133 const std::string&,
134 const std::string&,
135 const int&,
138 const Eigen::Matrix<double, 2, 2>&
139 >())
140 ;
141
142 py::class_<GlidePlaneNoiseBase<2>, std::shared_ptr<GlidePlaneNoiseBase<2>>>(m, "GlidePlaneNoiseBase2")
143 .def(py::init<const std::string&, const int&,
146 const Eigen::Matrix<double,2,2>&>())
147 .def("averageNoiseCorrelation", &GlidePlaneNoiseBase<2>::averageNoiseCorrelation)
148 .def("sampleAverageNoise", &GlidePlaneNoiseBase<2>::sampleAverageNoise)
149 ;
150
151 // Bind MDSolidSolutionNoise
152 py::class_<MDSolidSolutionNoise, GlidePlaneNoiseBase<2>, std::shared_ptr<MDSolidSolutionNoise>>(m, "MDSolidSolutionNoise")
153 .def(py::init<
155 const std::string&,
156 const std::string&,
157 const std::string&,
158 const int&,
161 const Eigen::Matrix<double, 2, 2>&,
162 const double&
163 >())
164 ;
165
166 // Bind AnalyticalSolidSolutionNoise
167 py::class_<AnalyticalSolidSolutionNoise, GlidePlaneNoiseBase<2>,std::shared_ptr<AnalyticalSolidSolutionNoise>>(m, "AnalyticalSolidSolutionNoise")
168 // Constructor
169 .def(py::init<
170 const std::string&,
171 const int&,
174 const Eigen::Matrix<double, 2, 2>&,
175 const double&,
176 const double&,
177 const double&
178 >())
179 ;
180
181 py::class_<DefectiveCrystalTraitsIO>(m,"DefectiveCrystalTraitsIO")
182 .def(py::init<const std::string&>())
183 .def_readonly("simulationFolder", &DefectiveCrystalTraitsIO::simulationFolder)
184 .def_readonly("inputFilesFolder", &DefectiveCrystalTraitsIO::inputFilesFolder)
185 .def_readonly("configFolder", &DefectiveCrystalTraitsIO::configFolder)
186 .def_readonly("auxFolder", &DefectiveCrystalTraitsIO::auxFolder)
187 .def_readonly("fFolder", &DefectiveCrystalTraitsIO::fFolder)
188 .def_readonly("dcFile", &DefectiveCrystalTraitsIO::dcFile)
189 .def_readonly("fFile", &DefectiveCrystalTraitsIO::fFile)
190 .def_readonly("flabFile", &DefectiveCrystalTraitsIO::flabFile)
191 .def_readonly("polyFile", &DefectiveCrystalTraitsIO::polyFile)
192 .def_readonly("materialFile", &DefectiveCrystalTraitsIO::materialFile)
193 .def_readonly("microstructureFile", &DefectiveCrystalTraitsIO::microstructureFile)
194 .def_readonly("meshFile", &DefectiveCrystalTraitsIO::meshFile)
195 ;
196
197 py::class_<DefectiveCrystalParameters>(m,"DefectiveCrystalParameters")
198 .def(py::init<const std::string&>())
199 .def_readwrite("runID", &DefectiveCrystalParameters::runID)
200 .def_readonly("useFEM", &DefectiveCrystalParameters::useFEM)
201 .def_readonly("traitsIO", &DefectiveCrystalParameters::traitsIO)
202 ;
203
204
205 bindMesh3(m);
206 bindMesh2(m);
207 bindMesh1(m);
208 // Compatibility aliases for existing scripts.
209 m.attr("SimplicialMesh")=m.attr("SimplicialMesh3");
210 m.attr("SimplexReader")=m.attr("SimplexReader3");
211 m.attr("Polyhedron0")=m.attr("Polyhedron30");
212 m.attr("Polyhedron1")=m.attr("Polyhedron31");
213 m.attr("Polyhedron2")=m.attr("Polyhedron32");
214 m.attr("Polyhedron3")=m.attr("Polyhedron33");
215
216 py::class_<PolycrystallineMaterialBase>(m,"PolycrystallineMaterialBase")
217 .def(py::init<const std::string&,const double&>())
218 .def_readonly("T", &PolycrystallineMaterialBase::T)
219 .def_readonly("Tm", &PolycrystallineMaterialBase::Tm)
220 .def_readonly("mu_SI", &PolycrystallineMaterialBase::mu_SI)
221 .def_readonly("nu", &PolycrystallineMaterialBase::nu)
222 .def_readonly("E_SI", &PolycrystallineMaterialBase::E_SI)
223 .def_readonly("rho_SI", &PolycrystallineMaterialBase::rho_SI)
224 .def_readonly("cs_SI", &PolycrystallineMaterialBase::cs_SI)
225 .def_readonly("b_SI", &PolycrystallineMaterialBase::b_SI)
226 .def_readonly("materialName", &PolycrystallineMaterialBase::materialName)
227 .def_readonly("materialFile", &PolycrystallineMaterialBase::materialFile)
228 .def_readonly("crystalStructure", &PolycrystallineMaterialBase::crystalStructure)
229 ;
230
231 py::class_<StressStraight<3,double>>(m,"StressStraight")
232 .def(py::init<const PolycrystallineMaterialBase&,const VectorDim&,const VectorDim&, const VectorDim&,
233 const double&>())
235 ;
236
237
238
239// py::class_<BCClattice<3>>(m,"BCClattice")
240// .def(py::init<const MatrixDim&,const PolycrystallineMaterialBase&>())
241// ;
242//
243// py::class_<FCClattice<3>>(m,"FCClattice")
244// .def(py::init<const MatrixDim&,const PolycrystallineMaterialBase&>())
245// ;
246//
247// py::class_<HEXlattice<3>>(m,"HEXlattice")
248// .def(py::init<const MatrixDim&,const PolycrystallineMaterialBase&>())
249// ;
250
251 py::class_<std::map<std::pair<size_t,size_t>,const std::shared_ptr<GrainBoundary<3>>>>(m,"GrainBoundaryMap")
252 .def(py::init<>())
253 ;
254
255 py::class_<Lattice<3>>(m,"Lattice")
256 .def(py::init<const typename Lattice<3>::MatrixDimD&,const typename Lattice<3>::MatrixDimD&>())
257 ;
258
259 py::class_<LatticeVector<3>>(m,"LatticeVector")
260 .def(py::init<const typename LatticeVector<3>::VectorDimD&,const typename LatticeVector<3>::LatticeType&>())
261 .def(py::init<const typename LatticeVector<3>::LatticeType&>())
262 .def("cartesian",&LatticeVector<3>::cartesian)
263 ;
264
265 py::class_<LatticeDirection<3>,LatticeVector<3>>(m,"LatticeDirection")
266 .def(py::init<const LatticeVector<3>&>())
267// .def(py::init<const typename LatticeVector<3>::LatticeType&>())
268 ;
269
270
271 py::class_<PeriodicLatticeInterpolant<2>,std::shared_ptr<PeriodicLatticeInterpolant<2>>>(m,"PeriodicLatticeInterpolant")
272 .def_readonly("A", &PeriodicLatticeInterpolant<2>::A)
273 .def_readonly("B", &PeriodicLatticeInterpolant<2>::B)
274 .def_readonly("waveVectors", &PeriodicLatticeInterpolant<2>::waveVectors)
275 .def_readonly("points", &PeriodicLatticeInterpolant<2>::points)
276 ;
277
278 py::class_<GammaSurface,PeriodicLatticeInterpolant<2>,std::shared_ptr<GammaSurface>>(m,"GammaSurface")
279 .def(py::init<const Eigen::Matrix<double,2,2>&,
280 const Eigen::Matrix<double,Eigen::Dynamic,2>&,
281 const Eigen::Matrix<double,Eigen::Dynamic,3>&,
282 const int&,
283 const std::vector<Eigen::Matrix<double,2,1>>&>())
284 .def("misfitEnergy", &GammaSurface::misfitEnergy)
285
286 ;
287
288 py::class_<GlidePlaneBase,std::shared_ptr<GlidePlaneBase>>(m,"GlidePlaneBase")
289 .def(py::init<const LatticeVector<3>&,const LatticeVector<3>&,const std::shared_ptr<GammaSurface>&>()) // THIS GIVES ERROR
290 .def("misfitEnergy", &GlidePlaneBase::misfitEnergy)
291 .def("localSlipVector", &GlidePlaneBase::localSlipVector)
292 .def_readonly("primitiveVectors", &GlidePlaneBase::primitiveVectors)
293 .def_readonly("gammaSurface", &GlidePlaneBase::gammaSurface)
294 ;
295
296 py::class_<GlidePlane<3>,std::shared_ptr<GlidePlane<3>>>(m,"GlidePlane")
297 .def("planeBaseID", &GlidePlane<3>::planeBaseID)
298 ;
299
300 py::class_<SlipSystem,std::shared_ptr<SlipSystem>>(m,"SlipSystem")
301// .def(py::init<const GlidePlaneBase&,const RationalLatticeDirection<3>&,const std::shared_ptr<DislocationMobilityBase>&,const std::shared_ptr<GlidePlaneNoise>&>())
302 .def_readonly("unitNormal", &SlipSystem::unitNormal)
303 .def_readonly("unitSlip", &SlipSystem::unitSlip)
304 .def("velocity", &SlipSystem::velocity)
305 ;
306
307// py::bind_map<std::map<const GlidePlaneBase*,std::shared_ptr<GammaSurface>>>(m, "GammaSurfaceMap");
308 py::class_<SecondPhase<3>,std::shared_ptr<SecondPhase<3>>>(m,"SecondPhase")
309// .def(py::init<const GlidePlaneBase&,const RationalLatticeDirection<3>&,const std::shared_ptr<DislocationMobilityBase>&,const std::shared_ptr<GlidePlaneNoise>&>())
310 .def_readonly("name", &SecondPhase<3>::name)
311// .def("misfitEnergy", &SecondPhase<3>::misfitEnergy)
312// .def("misfitEnergy", static_cast<double (SecondPhase<3>::*)(Eigen::Ref<const Eigen::Matrix<double,3,1>>,const size_t&) const>(&SecondPhase<3>::misfitEnergy))
313// .def_readonly("gsMap", &SecondPhase<3>::gsMap)
314 .def("misfitEnergy",static_cast<double (SecondPhase<3>::*)(const Eigen::Matrix<double,3,1>&,const size_t&) const>(&SecondPhase<3>::misfitEnergy))
315 .def("gammaSurface", &SecondPhase<3>::gammaSurface)
316 ;
317
318 // py::bind_vector<std::vector<std::shared_ptr<GlidePlaneBase>>>(m, "GlidePlaneBasePtrVector"); // THIS GIVES ERROR
319 // py::bind_vector<std::vector<std::shared_ptr<SlipSystem>>>(m, "SlipSystemPtrVector");
320 // py::bind_map<std::map<size_t,std::shared_ptr<SecondPhase<3>>>>(m, "SecondPhasePtrMap");
321
322
323 py::bind_map<typename TypeTraits<SingleCrystalBase<3>>::PlaneNormalContainerType>(m, "GlidePlaneBasePtrMap"); // THIS GIVES ERROR
324 py::bind_map<typename TypeTraits<SingleCrystalBase<3>>::SlipSystemContainerType>(m, "SlipSystemPtrMap");
325 py::bind_map<typename TypeTraits<SingleCrystalBase<3>>::SecondPhaseContainerType>(m, "SecondPhasePtrMap");
326
327
328
329 py::class_<SingleCrystalBase<3>,Lattice<3>>(m,"SingleCrystalBase")
330// py::class_<SingleCrystalBase<3>,Lattice<3>,std::vector<std::shared_ptr<GlidePlaneBase>>,std::vector<std::shared_ptr<SlipSystem>>,std::map<size_t,std::shared_ptr<SecondPhase<3>>>>(m,"SingleCrystalBase")
331 .def(py::init<const PolycrystallineMaterialBase&,const MatrixDim&>())
332// .def(py::init<const BCClattice<3>&>())
333// .def(py::init<const FCClattice<3>&>())
334// .def(py::init<const HEXlattice<3>&>())
335 .def("planeNormals", &SingleCrystalBase<3>::planeNormals)
336 .def("slipSystems", &SingleCrystalBase<3>::slipSystems)
337 .def("secondPhases", &SingleCrystalBase<3>::secondPhases)
338 .def("planeBase", &SingleCrystalBase<3>::planeBase)
339 .def("slipSystem", &SingleCrystalBase<3>::slipSystem)
340 .def("secondPhase", &SingleCrystalBase<3>::secondPhase)
341 ;
342
343 py::class_<Grain<3>,std::shared_ptr<Grain<3>>>(m,"Grain")
344 .def(py::init<const Polyhedron<3,3>&,const PolycrystallineMaterialBase&,const std::string& >())
345// .def_readonly("grainID", &Grain<3>::grainID)
346 ;
347
348 py::class_<Polycrystal<3>,PolycrystallineMaterialBase>(m,"Polycrystal")
349 .def(py::init<const std::string&,const SimplicialMesh<3>&>())
350 .def("randomPoint", &Polycrystal<3>::randomPoint)
351 .def_readonly("grains", &Polycrystal<3>::grains)
352 .def("grain", &Polycrystal<3>::grain)
353 ;
354
355 py::class_<PeriodicGlidePlane<3>,std::shared_ptr<PeriodicGlidePlane<3>>>(m,"PeriodicGlidePlane")
356 .def_readonly("referencePlane", &PeriodicGlidePlane<3>::referencePlane)
357 .def("findPatch", &PeriodicGlidePlane<3>::findPatch)
358 ;
359 py::class_<DislocationDynamicsBase<3>,std::shared_ptr<DislocationDynamicsBase<3>>>(m,"DislocationDynamicsBase")
360 .def_readonly("EwaldLength", &DislocationDynamicsBase<3>::EwaldLength)
361 .def("glidePlane", [](DislocationDynamicsBase<3>& base, const Eigen::Vector3d& point,
362 const Eigen::Vector3d& normal, size_t grainID)
363 {
364 const auto grain=base.polyOwner->grain(grainID);
365 return base.glidePlaneFactory.getFromKey(GlidePlaneKey<3>(point,grain->reciprocalLatticeDirection(normal)));
366 }, py::keep_alive<0,1>())
367 .def("periodicGlidePlane", [](DislocationDynamicsBase<3>& base, const Eigen::Vector3d& point,
368 const Eigen::Vector3d& normal, size_t grainID)
369 {
370 const auto grain=base.polyOwner->grain(grainID);
371 return base.periodicGlidePlaneFactory.getFromKey(GlidePlaneKey<3>(point,grain->reciprocalLatticeDirection(normal)));
372 }, py::keep_alive<0,1>())
373 .def("glidePlaneCount", [](const DislocationDynamicsBase<3>& base)
374 {
375 return base.glidePlaneFactory.glidePlanes().size();
376 })
377 .def("periodicGlidePlaneCount", [](const DislocationDynamicsBase<3>& base)
378 {
379 return base.periodicGlidePlaneFactory.periodicGlidePlanes().size();
380 })
381 ;
382 py::class_<ClusterDynamicsBase<3>,std::shared_ptr<ClusterDynamicsBase<3>>>(m,"ClusterDynamicsBase")
383 .def_readonly("useClusterDynamicsFEM", &ClusterDynamicsBase<3>::useClusterDynamicsFEM)
384 .def("equilibriumMobileConcentration", &ClusterDynamicsBase<3>::equilibriumMobileConcentration)
385 .def("boundaryMobileConcentration", &ClusterDynamicsBase<3>::boundaryMobileConcentration)
386 .def("dislocationMobileConcentration", &ClusterDynamicsBase<3>::dislocationMobileConcentration)
387 .def("clusterRadius", &ClusterDynamicsBase<3>::clusterRadius)
388 .def("clusterDensity", &ClusterDynamicsBase<3>::clusterDensity)
389 .def("getDlocal", &ClusterDynamicsBase<3>::getDlocal)
390 .def("getR1", &ClusterDynamicsBase<3>::getR1)
391 .def("getR2", &ClusterDynamicsBase<3>::getR2)
392 .def("getInvD", &ClusterDynamicsBase<3>::getInvD)
393 .def("getDetD", &ClusterDynamicsBase<3>::getDetD)
394 .def("sigmoid", &ClusterDynamicsBase<3>::sigmoid)
395 .def("rpyr", &ClusterDynamicsBase<3>::rpyr)
396 .def("rloop", &ClusterDynamicsBase<3>::rloop)
397 .def("sigmoidalVectorInterpolation", &ClusterDynamicsBase<3>::sigmoidalVectorInterpolation)
398 .def("sigmoidalMatrixInterpolation", &ClusterDynamicsBase<3>::sigmoidalMatrixInterpolation)
399 .def("sigmoidalPlotVectorInterpolation", &ClusterDynamicsBase<3>::sigmoidalPlotVectorInterpolation)
400 .def_readonly("D", &ClusterDynamicsBase<3>::D)
401 .def_readonly("G", &ClusterDynamicsBase<3>::G)
402 .def_readonly("T", &ClusterDynamicsBase<3>::T)
403 ;
404 py::class_<ElasticDeformationBase<3>,std::shared_ptr<ElasticDeformationBase<3>>>(m,"ElasticDeformationBase")
405 .def_readonly("useElasticDeformationFEM", &ElasticDeformationBase<3>::useElasticDeformationFEM)
406 .def_readonly("inertiaReliefPenaltyFactor", &ElasticDeformationBase<3>::inertiaReliefPenaltyFactor)
407 ;
408
409 py::class_<DefectiveCrystalBase<3>,std::shared_ptr<DefectiveCrystalBase<3>>>(m,"DefectiveCrystalBase")
410 .def(py::init<const std::string&>())
411 .def_property_readonly("mesh", [](const DefectiveCrystalBase<3>& base) -> const SimplicialMesh<3>&
412 {
413 return base.mesh;
414 }, py::return_value_policy::reference_internal)
415 .def_property_readonly("poly", [](const DefectiveCrystalBase<3>& base) -> const Polycrystal<3>&
416 {
417 return base.poly;
418 }, py::return_value_policy::reference_internal)
419 .def_readonly("activePhysics", &DefectiveCrystalBase<3>::activePhysics)
420 .def("hasPhysics", &DefectiveCrystalBase<3>::hasPhysics)
421 .def("periodicCoordinates", &DefectiveCrystalBase<3>::periodicCoordinates)
422 .def_readonly("periodicLatticeBasis", &DefectiveCrystalBase<3>::periodicLatticeBasis)
423 .def_readonly("periodicLatticeReciprocalBasis", &DefectiveCrystalBase<3>::periodicLatticeReciprocalBasis)
424 .def_readonly("periodicImageSize", &DefectiveCrystalBase<3>::periodicImageSize)
425 .def_readonly("periodicShifts", &DefectiveCrystalBase<3>::periodicShifts)
426 .def_readonly("dislocationDynamicsBase", &DefectiveCrystalBase<3>::dislocationDynamicsBase)
427 .def_readonly("clusterDynamicsBase", &DefectiveCrystalBase<3>::clusterDynamicsBase)
428 .def_readonly("elasticDeformationBase", &DefectiveCrystalBase<3>::elasticDeformationBase)
429 .def("dislocationDynamics", &DefectiveCrystalBase<3>::dislocationDynamics, py::return_value_policy::reference_internal)
430 .def("clusterDynamics", &DefectiveCrystalBase<3>::clusterDynamics, py::return_value_policy::reference_internal)
431 .def("elasticDeformation", &DefectiveCrystalBase<3>::elasticDeformation, py::return_value_policy::reference_internal)
432 .def_readonly("simulationParameters", &DefectiveCrystalBase<3>::simulationParameters)
433 ;
434
435 py::class_<MicrostructureBase<3>>(m,"MicrostructureBase")
436 .def("displacement", static_cast<Eigen::Matrix<double,Eigen::Dynamic,3> (MicrostructureBase<3>::*)(Eigen::Ref<const Eigen::Matrix<double,Eigen::Dynamic,3>>) const>(&MicrostructureBase<3>::displacement))
437 .def("stress", static_cast<std::vector<Eigen::Matrix<double,3,3>> (MicrostructureBase<3>::*)(Eigen::Ref<const Eigen::Matrix<double,Eigen::Dynamic,3>>) const>(&MicrostructureBase<3>::stress))
438 ;
439
440 py::class_<MicrostructureContainer<3>,MicrostructureBase<3>>(m,"MicrostructureContainer",py::multiple_inheritance())
441 .def(py::init<DefectiveCrystalBase<3>&>(), py::keep_alive<1,2>())
442 ;
443
444 // LoopNode
445 py::bind_map<std::map<typename LoopNodeType::KeyType,const std::weak_ptr<LoopNodeType>>>(m, "LoopNodeWeakPtrMap");
446
447 py::class_<WeakPtrFactory<DislocationNetworkType,LoopNodeType>
448 /* */,std::map<typename LoopNodeType::KeyType,const std::weak_ptr<LoopNodeType>>
449 /* */>(m,"LoopNodeWeakPtrFactory")
450 .def(py::init<>())
451 .def("getRef",&WeakPtrFactory<DislocationNetworkType,LoopNodeType>::getRef,pybind11::return_value_policy::reference)
452 ;
453
454 py::class_<LoopNodeType
455 /* */ >(m,"LoopNode")
457 const std::shared_ptr<LoopType>&,
458 const std::shared_ptr<NetworkNodeType>&,
460 const std::shared_ptr<PeriodicPlanePatch<3>>&,
461 const std::pair<const std::shared_ptr<PeriodicPlaneEdge<3>>,const std::shared_ptr<PeriodicPlaneEdge<3>>>&>())
462 ;
463
464 //Loop
465 py::bind_vector<std::vector<MeshedDislocationLoop>>(m, "MeshedDislocationLoopVector");
466
467 py::bind_map<std::map<typename LoopType::KeyType,const std::weak_ptr<LoopType>>>(m, "LoopWeakPtrMap");
468
469 py::class_<WeakPtrFactory<DislocationNetworkType,LoopType>
470 /* */,std::map<typename LoopType::KeyType,const std::weak_ptr<LoopType>>
471 /* */>(m,"LoopWeakPtrFactory")
472 .def(py::init<>())
473 .def("getRef",&WeakPtrFactory<DislocationNetworkType,LoopType>::getRef,pybind11::return_value_policy::reference)
474 ;
475
476 py::class_<LoopType
477 /* */ >(m,"Loop")
478 .def(py::init<DislocationNetworkType* const,
479 const VectorDim&,
480 const std::shared_ptr<GlidePlaneType>&>())
481 .def("solidAngle",&LoopType::solidAngle)
482 .def("meshed",&LoopType::meshed)
483 .def("slippedArea",&LoopType::slippedArea)
484 .def_readonly("glidePlane", &LoopType::glidePlane)
485 .def("averagePlasticDistortion",&LoopType::averagePlasticDistortion)
486 ;
487
488 py::class_<MeshedDislocationLoop
489 /* */ >(m,"MeshedDislocationLoop")
490// .def(py::init<const VectorDim&,
491// const DefectiveCrystalBase<3>&,
492// const GlidePlane<3>&,const std::vector<Eigen::Matrix<double,3,1>>&,
493// const double&,const double&>())
495 .def("plasticDisplacement",&MeshedDislocationLoop::plasticDisplacement)
496 .def("plasticDisplacementKernel",&MeshedDislocationLoop::plasticDisplacementKernel)
497 .def_readwrite("points", &MeshedDislocationLoop::points)
498 .def_readwrite("triangles", &MeshedDislocationLoop::triangles)
499 ;
500
501 py::class_<LoopNetwork<DislocationNetworkType>
504 /* */ >(m,"LoopNetwork",py::multiple_inheritance())
505 .def(py::init<>())
506 .def("loops", static_cast<const WeakPtrFactory<DislocationNetworkType,LoopType>& (LoopNetwork<DislocationNetworkType>::*)()const>(&LoopNetwork<DislocationNetworkType>::loops),pybind11::return_value_policy::reference)
507 .def("loopNodes", static_cast<const WeakPtrFactory<DislocationNetworkType,LoopNodeType>& (LoopNetwork<DislocationNetworkType>::*)()const>(&LoopNetwork<DislocationNetworkType>::loopNodes),pybind11::return_value_policy::reference)
508 ;
509
510 py::class_<DislocationNetworkType
512 /* */,LoopNetwork<DislocationNetworkType>>(m,"DislocationNetwork")
513 .def(py::init<MicrostructureContainer<3>&>(), py::keep_alive<1,2>())
514 .def("networkLength",&DislocationNetworkType::networkLength)
515 ;
516
517 py::class_<DefectiveCrystal<3>
519 /* */>(m,"DefectiveCrystal")
520 .def(py::init<DefectiveCrystalBase<3>&>(), py::keep_alive<1,2>())
521 .def("initializeConfiguration", static_cast<void (DefectiveCrystal<3>::*)(const DefectiveCrystalConfigIO<3>&)>(&DefectiveCrystal<3>::initializeConfiguration))
522 .def("dislocationNetwork", &DefectiveCrystal<3>::dislocationNetwork,pybind11::return_value_policy::reference)
523 .def("runSingleStep",&DefectiveCrystal<3>::runSingleStep)
524 .def("runSteps",&DefectiveCrystal<3>::runSteps)
525 ;
526
527 py::class_<DefectiveCrystalConfigIO<3>
528 /* */>(m,"DefectiveCrystalConfigIO")
529 .def(py::init<const std::string&>(), py::arg("folderName")="config")
531 ;
532
533 py::class_<MicrostructureGenerator
534 /* */>(m,"MicrostructureGenerator")
535 .def(py::init<DefectiveCrystalBase<3>&>(), py::keep_alive<1,2>())
536 .def_readonly("configIO", &MicrostructureGenerator::configIO)
537 .def("addShearLoopDensity", &MicrostructureGenerator::addShearLoopDensity)
538 .def("addShearLoopIndividual", &MicrostructureGenerator::addShearLoopIndividual)
539 .def("addPeriodicDipoleDensity", &MicrostructureGenerator::addPeriodicDipoleDensity)
540 .def("addPeriodicDipoleIndividual", &MicrostructureGenerator::addPeriodicDipoleIndividual)
541 .def("addPrismaticLoopDensity", &MicrostructureGenerator::addPrismaticLoopDensity)
542 .def("addPrismaticLoopIndividual", &MicrostructureGenerator::addPrismaticLoopIndividual)
543 .def("addFrankLoopsDensity", &MicrostructureGenerator::addFrankLoopsDensity)
544 .def("addFrankLoopsIndividual", &MicrostructureGenerator::addFrankLoopsIndividual)
545 .def("addStackingFaultTetrahedraDensity", &MicrostructureGenerator::addStackingFaultTetrahedraDensity)
546 .def("addStackingFaultTetrahedraIndividual", &MicrostructureGenerator::addStackingFaultTetrahedraIndividual)
547 .def("addSphericalInclusionDensity", &MicrostructureGenerator::addSphericalInclusionDensity)
548 .def("addSphericalInclusionIndividual", &MicrostructureGenerator::addSphericalInclusionIndividual)
549 .def("addEllipsoidalInclusionDensity", &MicrostructureGenerator::addEllipsoidalInclusionDensity)
550 .def("addEllipsoidalInclusionIndividual", &MicrostructureGenerator::addEllipsoidalInclusionIndividual)
551 .def("addPolyhedronInclusionIndividual", &MicrostructureGenerator::addPolyhedronInclusionIndividual)
552 .def("writeConfigFiles", &MicrostructureGenerator::writeConfigFiles)
553 ;
554
556 /* */>(m,"ShearLoopDensitySpecification")
557 .def(py::init<>())
558 .def(py::init<const std::string&>())
559 .def_readwrite("targetDensity_SI", &ShearLoopDensitySpecification::targetDensity_SI)
560 .def_readwrite("numberOfSides", &ShearLoopDensitySpecification::numberOfSides)
561 .def_readwrite("radiusDistributionMean_SI", &ShearLoopDensitySpecification::radiusDistributionMean_SI)
562 .def_readwrite("radiusDistributionStd_SI", &ShearLoopDensitySpecification::radiusDistributionStd_SI)
563 .def_readwrite("allowedGrainIDs", &ShearLoopDensitySpecification::allowedGrainIDs)
564 .def_readwrite("allowedSlipSystemIDs", &ShearLoopDensitySpecification::allowedSlipSystemIDs)
565 ;
566
568 /* */>(m,"ShearLoopIndividualSpecification")
569 .def(py::init<>())
570 .def(py::init<const std::string&>())
571 .def_readwrite("slipSystemIDs", &ShearLoopIndividualSpecification::slipSystemIDs)
572 .def_readwrite("loopRadii", &ShearLoopIndividualSpecification::loopRadii)
573 .def_property( "loopCenters",
574 [](const ShearLoopIndividualSpecification& self )
575 {// Getter
576 return self.loopCenters;
577 },
578 []( ShearLoopIndividualSpecification& self, const Eigen::Ref<const Eigen::Matrix<double,Eigen::Dynamic,3>>& val )
579 {// Setter
580 self.loopCenters = val;
581 }
582 )
583 .def_readwrite("loopSides", &ShearLoopIndividualSpecification::loopSides)
584 ;
585
587 /* */>(m,"PeriodicDipoleDensitySpecification")
588 .def(py::init<>())
589 .def(py::init<const std::string&>())
590 .def_readwrite("targetDensity", &PeriodicDipoleDensitySpecification::targetDensity)
591 ;
592
594 /* */>(m,"PeriodicDipoleIndividualSpecification")
595 .def(py::init<>())
596 .def(py::init<const std::string&>())
597 .def_readwrite("slipSystemIDs", &PeriodicDipoleIndividualSpecification::slipSystemIDs)
598 .def_readwrite("exitFaceIDs", &PeriodicDipoleIndividualSpecification::exitFaceIDs)
599 .def_property( "dipoleCenters",
601 {// Getter
602 return self.dipoleCenters;
603 },
604 []( PeriodicDipoleIndividualSpecification& self, const Eigen::Ref<const Eigen::Matrix<double,Eigen::Dynamic,3>>& val )
605 {// Setter
606 self.dipoleCenters = val;
607 }
608 )
609 .def_readwrite("dipoleHeights", &PeriodicDipoleIndividualSpecification::dipoleHeights)
610 .def_readwrite("nodesPerLine", &PeriodicDipoleIndividualSpecification::nodesPerLine)
611 .def_readwrite("glideSteps", &PeriodicDipoleIndividualSpecification::glideSteps)
612 ;
613
615 /* */>(m,"PrismaticLoopDensitySpecification")
616 .def(py::init<>())
617 .def(py::init<const std::string&>())
618 .def_readwrite("targetDensity", &PrismaticLoopDensitySpecification::targetDensity)
619 .def_readwrite("radiusDistributionMean", &PrismaticLoopDensitySpecification::radiusDistributionMean)
620 .def_readwrite("radiusDistributionStd", &PrismaticLoopDensitySpecification::radiusDistributionStd)
621 .def_readwrite("allowedGrainIDs", &PrismaticLoopDensitySpecification::allowedGrainIDs)
622 .def_readwrite("allowedSlipSystemIDs", &PrismaticLoopDensitySpecification::allowedSlipSystemIDs)
623 ;
624
626 /* */>(m,"PrismaticLoopIndividualSpecification")
627 .def(py::init<>())
628 .def(py::init<const std::string&>())
629 .def_readwrite("slipSystemIDs", &PrismaticLoopIndividualSpecification::slipSystemIDs)
630 .def_readwrite("loopRadii", &PrismaticLoopIndividualSpecification::loopRadii)
631 .def_property( "loopCenters",
633 {// Getter
634 return self.loopCenters;
635 },
636 []( PrismaticLoopIndividualSpecification& self, const Eigen::Ref<const Eigen::Matrix<double,Eigen::Dynamic,3>>& val )
637 {// Setter
638 self.loopCenters = val;
639 }
640 )
641 .def_readwrite("glideSteps", &PrismaticLoopIndividualSpecification::glideSteps)
642 ;
643
645 /* */>(m,"FrankLoopsDensitySpecification")
646 .def(py::init<>())
647 .def(py::init<const std::string&>())
648 .def_readwrite("targetDensity", &FrankLoopsDensitySpecification::targetDensity)
649 .def_readwrite("numberOfSides", &FrankLoopsDensitySpecification::numberOfSides)
650 .def_readwrite("radiusDistributionMean", &FrankLoopsDensitySpecification::radiusDistributionMean)
651 .def_readwrite("radiusDistributionStd", &FrankLoopsDensitySpecification::radiusDistributionStd)
652 .def_readwrite("areVacancyLoops", &FrankLoopsDensitySpecification::areVacancyLoops)
653 .def_readwrite("allowedGrainIDs", &FrankLoopsDensitySpecification::allowedGrainIDs)
654 .def_readwrite("allowedPlaneIDs", &FrankLoopsDensitySpecification::allowedPlaneIDs)
655
656 ;
657
659 /* */>(m,"FrankLoopsIndividualSpecification")
660 .def(py::init<>())
661 .def(py::init<const std::string&>())
662 .def_readwrite("planeIDs", &FrankLoopsIndividualSpecification::planeIDs)
663 .def_readwrite("loopRadii", &FrankLoopsIndividualSpecification::loopRadii)
664 .def_property( "loopCenters",
665 [](const FrankLoopsIndividualSpecification& self )
666 {// Getter
667 return self.loopCenters;
668 },
669 []( FrankLoopsIndividualSpecification& self, const Eigen::Ref<const Eigen::Matrix<double,Eigen::Dynamic,3>>& val )
670 {// Setter
671 self.loopCenters = val;
672 }
673 )
674 .def_readwrite("loopSides", &FrankLoopsIndividualSpecification::loopSides)
675 .def_readwrite("isVacancyLoop", &FrankLoopsIndividualSpecification::isVacancyLoop)
676 ;
677
679 /* */>(m,"PlanarLoopIndividualSpecification")
680 .def(py::init<>())
681 .def(py::init<const std::string&>())
682 .def_readwrite("burgers", &PlanarLoopIndividualSpecification::burgers)
683 .def_readwrite("normal", &PlanarLoopIndividualSpecification::normal)
684 .def_property( "loopPoints",
685 [](const PlanarLoopIndividualSpecification& self )
686 {// Getter
687 return self.loopPoints;
688 },
689 []( PlanarLoopIndividualSpecification& self, const Eigen::Ref<const Eigen::Matrix<double,Eigen::Dynamic,3>>& val )
690 {// Setter
691 self.loopPoints = val;
692 }
693 )
694 .def_readwrite("allowOutside", &PlanarLoopIndividualSpecification::allowOutside)
695 .def_readwrite("allowOverlap", &PlanarLoopIndividualSpecification::allowOverlap)
696 ;
697
699 /* */>(m,"StackingFaultTetrahedraDensitySpecification")
700 .def(py::init<>())
701 .def(py::init<const std::string&>())
702 .def_readwrite("targetDensity", &StackingFaultTetrahedraDensitySpecification::targetDensity)
703 .def_readwrite("sizeDistributionMean", &StackingFaultTetrahedraDensitySpecification::sizeDistributionMean)
704 .def_readwrite("sizeDistributionStd", &StackingFaultTetrahedraDensitySpecification::sizeDistributionStd)
705 ;
706
708 /* */>(m,"StackingFaultTetrahedraIndividualSpecification")
709 .def(py::init<>())
710 .def(py::init<const std::string&>())
714 .def_property( "basePoints",
716 {// Getter
717 return self.basePoints;
718 },
719 []( StackingFaultTetrahedraIndividualSpecification& self, const Eigen::Ref<const Eigen::Matrix<double,Eigen::Dynamic,3>>& val )
720 {// Setter
721 self.basePoints = val;
722 }
723 )
724 ;
725
727 /* */>(m,"SphericalInclusionDensitySpecification")
728 .def(py::init<>())
729 .def(py::init<const std::string&>())
730 .def_readwrite("targetDensity", &SphericalInclusionDensitySpecification::targetDensity)
731 .def_readwrite("diameterLognormalDistribution_M", &SphericalInclusionDensitySpecification::diameterLognormalDistribution_M)
732 .def_readwrite("diameterLognormalDistribution_S", &SphericalInclusionDensitySpecification::diameterLognormalDistribution_S)
733 .def_readwrite("diameterLognormalDistribution_A", &SphericalInclusionDensitySpecification::diameterLognormalDistribution_A)
734 .def_property( "crystalEigenDistortion",
736 {// Getter
737 return self.crystalEigenDistortion;
738 },
739 []( SphericalInclusionDensitySpecification& self, const Eigen::Ref<const Eigen::Matrix<double,1,3*3>>& val )
740 {// Setter
741 self.crystalEigenDistortion = val;
742 }
743 )
744 .def_property( "patternVector_SI",
746 {// Getter
747 return self.patternVector_SI;
748 },
749 []( SphericalInclusionDensitySpecification& self, const Eigen::Ref<const Eigen::Matrix<double,1,3>>& val )
750 {// Setter
751 self.patternVector_SI = val;
752 }
753 )
754 .def_readwrite("allowOverlap", &SphericalInclusionDensitySpecification::allowOverlap)
755 .def_readwrite("allowOutside", &SphericalInclusionDensitySpecification::allowOutside)
756 .def_readwrite("velocityReductionFactor", &SphericalInclusionDensitySpecification::velocityReductionFactor)
757 .def_readwrite("phaseID", &SphericalInclusionDensitySpecification::phaseID)
758 ;
759
761 /* */>(m,"SphericalInclusionIndividualSpecification")
762 .def(py::init<>())
763 .def(py::init<const std::string&>())
764 .def_readwrite("radii_SI", &SphericalInclusionIndividualSpecification::radii_SI)
765 .def_property( "centers",
767 {// Getter
768 return self.centers;
769 },
770 []( SphericalInclusionIndividualSpecification& self, const Eigen::Ref<const Eigen::Matrix<double,Eigen::Dynamic,3>>& val )
771 {// Setter
772 self.centers = val;
773 }
774 )
775 .def_property( "crystalEigenDistortions",
777 {// Getter
778 return self.crystalEigenDistortions;
779 },
780 []( SphericalInclusionIndividualSpecification& self, const Eigen::Ref<const Eigen::Matrix<double,Eigen::Dynamic,3*3>>& val )
781 {// Setter
782 self.crystalEigenDistortions = val;
783 }
784 )
785 .def_readwrite("velocityReductionFactors", &SphericalInclusionIndividualSpecification::velocityReductionFactors)
786 .def_readwrite("phaseIDs", &SphericalInclusionIndividualSpecification::phaseIDs)
787 .def_readwrite("allowOverlap", &SphericalInclusionIndividualSpecification::allowOverlap)
788 .def_readwrite("allowOutside", &SphericalInclusionIndividualSpecification::allowOutside)
789 ;
790
791 py::class_<EllipsoidalInclusionDensitySpecification>(m,"EllipsoidalInclusionDensitySpecification")
792 .def(py::init<>())
793 .def(py::init<const std::string&>())
794 .def_readwrite("targetDensity", &EllipsoidalInclusionDensitySpecification::targetDensity)
795 .def_readwrite("crystalAxes", &EllipsoidalInclusionDensitySpecification::crystalAxes)
796 .def_readwrite("axesLognormalDistributionMean_SI", &EllipsoidalInclusionDensitySpecification::axesLognormalDistributionMean_SI)
797 .def_readwrite("axesLognormalDistributionStd_SI", &EllipsoidalInclusionDensitySpecification::axesLognormalDistributionStd_SI)
798 .def_readwrite("crystalEigenDistortion", &EllipsoidalInclusionDensitySpecification::crystalEigenDistortion)
799 .def_readwrite("patternVector_SI", &EllipsoidalInclusionDensitySpecification::patternVector_SI)
800 .def_readwrite("allowOverlap", &EllipsoidalInclusionDensitySpecification::allowOverlap)
801 .def_readwrite("allowOutside", &EllipsoidalInclusionDensitySpecification::allowOutside)
802 .def_readwrite("velocityReductionFactor", &EllipsoidalInclusionDensitySpecification::velocityReductionFactor)
803 .def_readwrite("phaseID", &EllipsoidalInclusionDensitySpecification::phaseID)
804 .def_readwrite("maxAttempts", &EllipsoidalInclusionDensitySpecification::maxAttempts)
805 ;
806
807 py::class_<EllipsoidalInclusionIndividualSpecification>(m,"EllipsoidalInclusionIndividualSpecification")
808 .def(py::init<>())
809 .def(py::init<const std::string&>())
811 .def_readwrite("crystalAxes_SI", &EllipsoidalInclusionIndividualSpecification::crystalAxes_SI)
812 .def_readwrite("crystalEigenDistortion", &EllipsoidalInclusionIndividualSpecification::crystalEigenDistortion)
813 .def_readwrite("velocityReductionFactor", &EllipsoidalInclusionIndividualSpecification::velocityReductionFactor)
815 .def_readwrite("allowOverlap", &EllipsoidalInclusionIndividualSpecification::allowOverlap)
816 .def_readwrite("allowOutside", &EllipsoidalInclusionIndividualSpecification::allowOutside)
817 ;
818
820 /* */>(m,"PolyhedronInclusionIndividualSpecification")
821 .def(py::init<>())
822 .def(py::init<const std::string&>())
824 .def_property( "X0",
826 {// Getter
827 return self.X0;
828 },
829 []( PolyhedronInclusionIndividualSpecification& self, const Eigen::Ref<const Eigen::Matrix<double,Eigen::Dynamic,3>>& val )
830 {// Setter
831 self.X0 = val;
832 }
833 )
834 .def_property( "F",
836 {// Getter
837 return self.F;
838 },
839 []( PolyhedronInclusionIndividualSpecification& self, const Eigen::Ref<const Eigen::Matrix<double,3,3>>& val )
840 {// Setter
841 self.F = val;
842 }
843 )
844 .def_property( "crystalEigenDistortion",
846 {// Getter
847 return self.crystalEigenDistortion;
848 },
849 []( PolyhedronInclusionIndividualSpecification& self, const Eigen::Ref<const Eigen::Matrix<double,1,3*3>>& val )
850 {// Setter
851 self.crystalEigenDistortion = val;
852 }
853 )
854 .def_readwrite("velocityReductionFactor", &PolyhedronInclusionIndividualSpecification::velocityReductionFactor)
856 ;
857
858
859 py::class_<DislocationMobility,std::shared_ptr<DislocationMobility>>(m,"DislocationMobility")
860 .def("velocity", static_cast<double (DislocationMobility::*)(const Eigen::Matrix<double,3,3>&,const Eigen::Matrix<double,3,1>&,const Eigen::Matrix<double,3,1>&,const Eigen::Matrix<double,3,1>&,const double&) const>(&DislocationMobility::velocity))
861 ;
862
863 py::class_<DislocationMobilityBase,std::shared_ptr<DislocationMobilityBase>>(m,"DislocationMobilityBase")
864 .def("velocity", static_cast<double (DislocationMobilityBase::*)(const Eigen::Matrix<double,3,3>&,const Eigen::Matrix<double,3,1>&,const Eigen::Matrix<double,3,1>&,const double&) const>(&DislocationMobilityBase::velocity))
865 ;
866
867 py::class_<DislocationMobilitySelector>(m,"DislocationMobilitySelector")
868 .def(py::init<>())
870 .def("getMobilityBase",&DislocationMobilitySelector::getMobilityBase)
871 ;
872
873 py::class_<DislocationMobilityViscousDrag,DislocationMobilityBase,std::shared_ptr<DislocationMobilityViscousDrag>>(m,"DislocationMobilityViscousDrag")
874// .def(py::init<const PolycrystallineMaterialBase&>())
875// .def("velocity", static_cast<double (DislocationMobilityFCC::*)(const Eigen::Matrix<double,3,3>&,const Eigen::Matrix<double,3,1>&,const Eigen::Matrix<double,3,1>&,const Eigen::Matrix<double,3,1>&,const double&)>(&DislocationMobilityFCC::velocity))
876 ;
877
878 py::class_<DislocationMobilityKinkPair,DislocationMobilityBase,std::shared_ptr<DislocationMobilityKinkPair>>(m,"DislocationMobilityKinkPair")
879// .def(py::init<const PolycrystallineMaterialBase&>())
880// .def("velocity", static_cast<double (DislocationMobilityFCC::*)(const Eigen::Matrix<double,3,3>&,const Eigen::Matrix<double,3,1>&,const Eigen::Matrix<double,3,1>&,const Eigen::Matrix<double,3,1>&,const double&)>(&DislocationMobilityFCC::velocity))
881 ;
882
883
884// py::class_<DislocationMobilityBCC,DislocationMobilityBase>(m,"DislocationMobilityBCC")
885// .def(py::init<const PolycrystallineMaterialBase&>())
887// ;
888
889// py::class_<DislocationMobilityFCC,DislocationMobilityBase>(m,"DislocationMobilityFCC")
890// .def(py::init<const PolycrystallineMaterialBase&>())
892// ;
893
894// py::class_<DislocationMobilityPy>(m,"DislocationMobilityPy")
895// .def(py::init<const PolycrystallineMaterialBase&>())
896// .def("velocity", static_cast<double (DislocationMobilityPy::*)(const Eigen::Matrix<double,3,3>&,const Eigen::Matrix<double,3,1>&,const Eigen::Matrix<double,3,1>&,const Eigen::Matrix<double,3,1>&,const double&)>(&DislocationMobilityPy::velocity))
897// ;
898
899
900
901
902
903}
904#endif
905
906
907int main(int argc, char** argv)
908{
909 return 0;
910}
911
912#endif
void bindMesh2(pybind11::module_ &)
void bindMesh3(pybind11::module_ &)
void bindMesh1(pybind11::module_ &)
void initializeConfiguration(const DefectiveCrystalConfigIO< dim > &configIO)
const DislocationNetwork< _dim > & dislocationNetwork() const
std::tuple< double, double, double, double > networkLength() const
double f(const double &x) const
ExtrapolationMethod extrapolation
Eigen::Matrix< double, dim, dim > MatrixDimD
Eigen::Matrix< double, dim, 1 > VectorDimD
const LoopContainerType & loops() const
Definition LoopNetwork.h:98
const LoopNodeContainerType & loopNodes() const
void addFrankLoopsIndividual(const FrankLoopsIndividualSpecification &spec)
void addPrismaticLoopIndividual(const PrismaticLoopIndividualSpecification &spec)
void addSphericalInclusionIndividual(const SphericalInclusionIndividualSpecification &spec)
void addSphericalInclusionDensity(const SphericalInclusionDensitySpecification &spec)
void addPeriodicDipoleDensity(const PeriodicDipoleDensitySpecification &spec)
void addEllipsoidalInclusionIndividual(const EllipsoidalInclusionIndividualSpecification &spec)
void addStackingFaultTetrahedraDensity(const StackingFaultTetrahedraDensitySpecification &spec)
DefectiveCrystalConfigIO< 3 > configIO
void addPrismaticLoopDensity(const PrismaticLoopDensitySpecification &spec)
void addStackingFaultTetrahedraIndividual(const StackingFaultTetrahedraIndividualSpecification &spec)
void addFrankLoopsDensity(const FrankLoopsDensitySpecification &spec)
void addEllipsoidalInclusionDensity(const EllipsoidalInclusionDensitySpecification &spec)
void addPolyhedronInclusionIndividual(const PolyhedronInclusionIndividualSpecification &spec)
void addPeriodicDipoleIndividual(const PeriodicDipoleIndividualSpecification &spec)
void addShearLoopDensity(const ShearLoopDensitySpecification &spec)
void addShearLoopIndividual(const ShearLoopIndividualSpecification &spec)
std::pair< VectorDim, bool > findPatch(const VectorLowerDim &, const VectorDim &)
const std::shared_ptr< GlidePlane< dim > > referencePlane
const std::shared_ptr< GrainType > & grain(const size_t &k) const
const std::map< size_t, std::shared_ptr< Grain< dim > > > grains
Definition Polycrystal.h:56
VectorDim randomPoint() const
MatrixDim stress(const VectorDim &x) const
auto def(const std::shared_ptr< T > &x)
Definition TrialDef.h:64
LatticePlaneKey< dim > GlidePlaneKey
DislocationNetwork< 3 > DislocationNetworkType
Definition pyMoDELib.cxx:69
GlidePlane< 3 > GlidePlaneType
Definition pyMoDELib.cxx:68
PYBIND11_MAKE_OPAQUE(std::map< typename LoopNodeType::KeyType, const std::weak_ptr< LoopNodeType > >)
PYBIND11_MODULE(pyMoDELib, m)
Definition pyMoDELib.cxx:94
Eigen::VectorXd periodicCoordinates(const VectorDim &x) const
DefectiveCrystalParameters simulationParameters
const std::vector< std::string > activePhysics
const Eigen::Matrix< double, dim, Eigen::Dynamic > periodicLatticeBasis
const std::vector< int > periodicImageSize
ElasticDeformationBase< dim > & elasticDeformation() const
const std::shared_ptr< ElasticDeformationBase< dim > > elasticDeformationBase
const std::shared_ptr< ClusterDynamicsBase< dim > > clusterDynamicsBase
const std::vector< VectorDim > periodicShifts
const Eigen::Matrix< double, dim, Eigen::Dynamic > periodicLatticeReciprocalBasis
DislocationDynamicsBase< dim > & dislocationDynamics() const
const std::shared_ptr< DislocationDynamicsBase< dim > > dislocationDynamicsBase
ClusterDynamicsBase< dim > & clusterDynamics() const
const DefectiveCrystalTraitsIO traitsIO
virtual double velocity(const MatrixDim &S, const VectorDim &b, const VectorDim &n, const double &T, const double &dL, const double &dt, const std::shared_ptr< StochasticForceGenerator > &sfg) const =0
virtual double velocity(const MatrixDim &S, const VectorDim &b, const VectorDim &, const VectorDim &n, const double &T, const double &dL, const double &dt, const std::shared_ptr< StochasticForceGenerator > &sfg) const =0
std::shared_ptr< DislocationMobilityBase > getMobilityBase(const PolycrystallineMaterialBase &material, const std::string &tag) const
std::shared_ptr< DislocationMobility > getMobility(const PolycrystallineMaterialBase &material, const std::string &tag) const
double misfitEnergy(const VectorLowerDim &b) const
const std::pair< LatticeDirectionType, LatticeDirectionType > primitiveVectors
VectorLowerDimD localSlipVector(const VectorDimD &b) const
const std::shared_ptr< GammaSurface > gammaSurface
double misfitEnergy(const VectorDimD &b) const
int planeBaseID() const
std::vector< std::vector< double > > sampleAverageNoise(const int &reps) const
std::vector< std::vector< double > > averageNoiseCorrelation(const int &reps) const
double solidAngle(const VectorDim &x, const size_t &triID) const
VectorDim plasticDisplacementKernel(const Eigen::Ref< const VectorDim > &x) const
Eigen::Matrix< double, Eigen::Dynamic, 3 > plasticDisplacement(Eigen::Ref< const Eigen::Matrix< double, Eigen::Dynamic, 3 > >) const
std::deque< Eigen::Vector3i > triangles
virtual VectorDim displacement(const VectorDim &, const NodeType *const, const ElementType *const, const SimplexDim *const) const =0
virtual MatrixDim stress(const VectorDim &, const NodeType *const, const ElementType *const, const SimplexDim *const) const =0
Eigen::Array< double, 3, 1 > GridSpacingType
Definition NoiseTraits.h:22
Eigen::Array< int, 3, 1 > GridSizeType
Definition NoiseTraits.h:21
const Eigen::Matrix< double, Eigen::Dynamic, dim+1 > points
const Eigen::Matrix< double, Eigen::Dynamic, dim > waveVectors
const std::string name
Definition SecondPhase.h:29
std::shared_ptr< GammaSurface > gammaSurface(const size_t &) const
double misfitEnergy(const VectorDim &s, const GlidePlaneBase *const gpb) const
Eigen::Matrix< double, Eigen::Dynamic, 3 > loopCenters
const PlaneNormalContainerType & planeNormals() const
const SecondPhase< dim > & secondPhase(const size_t &) const
const SlipSystemContainerType & slipSystems() const
const SlipSystem & slipSystem(const size_t &) const
const GlidePlaneBase & planeBase(const size_t &) const
const SecondPhaseContainerType & secondPhases() const
const VectorDim unitNormal
Definition SlipSystem.h:30
double velocity(const MatrixDim &S, const VectorDim &xi, const double &T) const
const VectorDim unitSlip
Definition SlipSystem.h:31
const ValueType & getRef(const KeyType &key) const
void argv
void b int argc
void t struct mesh * m