9#ifndef model_CrossSlipModels_H
10#define model_CrossSlipModels_H
20#include <LatticeModule.h>
36 typedef std::tuple<std::shared_ptr<NetworkNodeType>,std::shared_ptr<NetworkNodeType>,size_t,
size_t>
CrossSlipTupleType;
47 virtual std::optional<ThermalCrossSlipEvent>
sampleBranch(
const std::vector<const NetworkLinkType*>&,
const double) {
return std::nullopt; }
59 typedef std::tuple<std::shared_ptr<NetworkNodeType>,std::shared_ptr<NetworkNodeType>,size_t,
size_t>
CrossSlipTupleType;
107 typedef std::tuple<std::shared_ptr<NetworkNodeType>,std::shared_ptr<NetworkNodeType>,size_t,
size_t>
CrossSlipTupleType;
110 std::random_device
rd;
112 std::uniform_real_distribution<>
dist;
130 std::optional<ThermalCrossSlipEvent>
sampleBranch(
const std::vector<const NetworkLinkType*>& links,
const double dt)
override;
139 const double& Vec)
const;
std::tuple< std::shared_ptr< NetworkNodeType >, std::shared_ptr< NetworkNodeType >, size_t, size_t > CrossSlipTupleType
std::pair< bool, std::pair< int, int > > isCrossSlipLink(const NetworkLinkType &link) override
AthermalCrossSlipModel(const DefectiveCrystalTraitsIO &traitsIO)
std::deque< CrossSlipTupleType > CrossSlipContainerType
void addToCrossSlip(const NetworkLinkType &link, CrossSlipContainerType &crossSlipDeq) override
TraitsType::NetworkLinkType NetworkLinkType
TraitsType::NetworkNodeType NetworkNodeType
TypeTraits< DislocationNetwork< dim > > TraitsType
const double sinCrossSlip
std::tuple< std::shared_ptr< NetworkNodeType >, std::shared_ptr< NetworkNodeType >, size_t, size_t > CrossSlipTupleType
virtual std::pair< bool, std::pair< int, int > > isCrossSlipLink(const NetworkLinkType &link)=0
virtual bool isThermal() const
virtual std::optional< ThermalCrossSlipEvent > sampleBranch(const std::vector< const NetworkLinkType * > &, const double)
std::pair< bool, int > isBaseCrossSlipLink(const NetworkLinkType &link, const bool enforceRemeshLength=true) const
TraitsType::NetworkNodeType NetworkNodeType
BaseCrossSlipModel(const DefectiveCrystalTraitsIO &traitsIO)
std::deque< CrossSlipTupleType > CrossSlipContainerType
TraitsType::NetworkLinkType NetworkLinkType
virtual ~BaseCrossSlipModel()=default
virtual void addToCrossSlip(const NetworkLinkType &link, CrossSlipContainerType &crossSlipDeq)=0
const double crossSlipDeg
TypeTraits< DislocationNetwork< dim > > TraitsType
DislocationSegment< dim > NetworkLinkType
DislocationNode< dim > NetworkNodeType
const bool enablePyramidalSlipSystems
bool isThermal() const override
std::pair< bool, std::pair< int, int > > isCrossSlipLink(const NetworkLinkType &link) override
double crossSlipRateKernel(const int &k, const NetworkLinkType &link, const SlipSystem &css, const double &w, const double &L, const double &dE, const double &Veg, const double &Vsc, const double &Vec) const
TraitsType::NetworkNodeType NetworkNodeType
std::optional< ThermalCrossSlipEvent > sampleBranch(const std::vector< const NetworkLinkType * > &links, const double dt) override
TypeTraits< DislocationNetwork< dim > > TraitsType
std::map< int, double > targetRates(const NetworkLinkType &link) const
const bool enableBasalSlipSystems
std::deque< CrossSlipTupleType > CrossSlipContainerType
double nucleationLength(const NetworkLinkType &link) const
std::tuple< std::shared_ptr< NetworkNodeType >, std::shared_ptr< NetworkNodeType >, size_t, size_t > CrossSlipTupleType
void addToCrossSlip(const NetworkLinkType &link, CrossSlipContainerType &crossSlipDeq) override
const bool enablePrismaticSlipSystems
TraitsType::NetworkLinkType NetworkLinkType
std::uniform_real_distribution dist
EscaigCrossSlipModelHEX(const PolycrystallineMaterialBase &material, const DefectiveCrystalTraitsIO &traitsIO)