-
Notifications
You must be signed in to change notification settings - Fork 24
Expand file tree
/
Copy pathSolidCRKSPH.hh
More file actions
129 lines (107 loc) · 5.48 KB
/
Copy pathSolidCRKSPH.hh
File metadata and controls
129 lines (107 loc) · 5.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
//---------------------------------Spheral++----------------------------------//
// SolidCRKSPHHydroBase -- The CRKSPH/ACRKSPH solid material hydrodynamic package for Spheral++.
//
// Created by JMO, Fri Jul 30 11:07:33 PDT 2010
//----------------------------------------------------------------------------//
#ifndef __Spheral_SolidCRKSPHHydroBase_hh__
#define __Spheral_SolidCRKSPHHydroBase_hh__
#include "CRKSPH/CRKSPH.hh"
#include <string>
namespace Spheral {
template<typename Dimension>
class SolidCRKSPH: public CRKSPH<Dimension> {
public:
//--------------------------- Public Interface ---------------------------//
using Scalar = typename Dimension::Scalar;
using Vector = typename Dimension::Vector;
using Tensor = typename Dimension::Tensor;
using SymTensor = typename Dimension::SymTensor;
using ThirdRankTensor = typename Dimension::ThirdRankTensor;
using FourthRankTensor = typename Dimension::FourthRankTensor;
using FifthRankTensor = typename Dimension::FifthRankTensor;
using PairAccelerationsType = PairwiseField<Dimension, Vector, 1u>;
using ConstBoundaryIterator = typename Physics<Dimension>::ConstBoundaryIterator;
// Constructors.
SolidCRKSPH(DataBase<Dimension>& dataBase,
ArtificialViscosityHandle<Dimension>& Q,
const RKOrder order,
const double cfl,
const bool useVelocityMagnitudeForDt,
const bool compatibleEnergyEvolution,
const bool evolveTotalEnergy,
const bool XSPH,
const MassDensityType densityUpdate,
const double epsTensile,
const double nTensile,
const bool damageRelieveRubble);
// No default constructor, copying, or assignment.
SolidCRKSPH() = delete;
SolidCRKSPH(const SolidCRKSPH&) = delete;
SolidCRKSPH& operator=(const SolidCRKSPH&) = delete;
// Destructor.
virtual ~SolidCRKSPH();
// Tasks we do once on problem startup.
virtual
void initializeProblemStartupDependencies(DataBase<Dimension>& dataBase,
State<Dimension>& state,
StateDerivatives<Dimension>& derivatives) override;
// Register the state Hydro expects to use and evolve.
virtual
void registerState(DataBase<Dimension>& dataBase,
State<Dimension>& state) override;
// Register the derivatives/change fields for updating state.
virtual
void registerDerivatives(DataBase<Dimension>& dataBase,
StateDerivatives<Dimension>& derivs) override;
// Evaluate the derivatives for the principle hydro variables:
// mass density, velocity, and specific thermal energy.
virtual
void evaluateDerivatives(const Scalar time,
const Scalar dt,
const DataBase<Dimension>& dataBase,
const State<Dimension>& state,
StateDerivatives<Dimension>& derivatives) const override;
template<typename QType>
void evaluateDerivativesImpl(const Scalar time,
const Scalar dt,
const DataBase<Dimension>& dataBase,
const State<Dimension>& state,
StateDerivatives<Dimension>& derivatives,
const QType& Q) const;
// Apply boundary conditions to the physics specific fields.
virtual
void applyGhostBoundaries(State<Dimension>& state,
StateDerivatives<Dimension>& derivs) override;
// Enforce boundary conditions for the physics specific fields.
virtual
void enforceBoundaries(State<Dimension>& state,
StateDerivatives<Dimension>& derivs) override;
// The state field lists we're maintaining.
const FieldList<Dimension, SymTensor>& DdeviatoricStressDt() const { return mDdeviatoricStressDt; }
const FieldList<Dimension, Scalar>& bulkModulus() const { return mBulkModulus; }
const FieldList<Dimension, Scalar>& shearModulus() const { return mShearModulus; }
const FieldList<Dimension, Scalar>& yieldStrength() const { return mYieldStrength; }
const FieldList<Dimension, Scalar>& plasticStrain0() const { return mPlasticStrain0; }
// Control whether allow damaged material to have stress relieved.
bool damageRelieveRubble() const { return mDamageRelieveRubble; }
void damageRelieveRubble(bool x) { mDamageRelieveRubble = x; }
//****************************************************************************
// Methods required for restarting.
virtual std::string label() const override { return "SolidCRKSPH"; }
virtual void dumpState(FileIO& file, const std::string& pathName) const override;
virtual void restoreState(const FileIO& file, const std::string& pathName) override;
//****************************************************************************
protected:
//--------------------------- Protected Interface ---------------------------//
bool mDamageRelieveRubble;
private:
//--------------------------- Private Interface ---------------------------//
// Some internal scratch fields.
FieldList<Dimension, SymTensor> mDdeviatoricStressDt;
FieldList<Dimension, Scalar> mBulkModulus;
FieldList<Dimension, Scalar> mShearModulus;
FieldList<Dimension, Scalar> mYieldStrength;
FieldList<Dimension, Scalar> mPlasticStrain0;
};
}
#endif