KratosMultiphysics
KRATOS Multiphysics (Kratos) is a framework for building parallel, multi-disciplinary simulation software, aiming at modularity, extensibility, and high performance. Kratos is written in C++, and counts with an extensive Python interface.
DEM_D_Conical_damage_CL.h
Go to the documentation of this file.
1 //Authors: J. Irazabal (CIMNE)
2 // Date: November 2016
3 
4 #if !defined(DEM_D_CONICAL_DAMAGE_CL_H_INCLUDED)
5 #define DEM_D_CONICAL_DAMAGE_CL_H_INCLUDED
6 
7 #include <string>
8 #include <iostream>
9 
10 // Project includes
14 
15 namespace Kratos {
16 
17  class SphericParticle;
18 
19  class KRATOS_API(DEM_APPLICATION) DEM_D_Conical_damage : public DEM_D_Hertz_viscous_Coulomb {
20 
21  public:
22 
24 
26 
28 
29  void Check(Properties::Pointer pProp) const override;
30 
31  std::string GetTypeOfLaw() override;
32 
33  DEMDiscontinuumConstitutiveLaw::Pointer Clone() const override;
34 
35  std::unique_ptr<DEMDiscontinuumConstitutiveLaw> CloneUnique() override;
36 
37  void InitializeDependentContact(double equiv_radius,
38  const double equiv_level_of_fouling,
39  const double equiv_young,
40  const double equiv_shear,
41  const double indentation);
42 
43  void DamageContact(ContactInfoSphericParticle* const element1,
44  ContactInfoSphericParticle* const element2,
45  double& equiv_radius,
46  const double equiv_level_of_fouling,
47  const double equiv_young,
48  const double equiv_shear,
49  double& indentation,
50  const double normal_contact_force);
51 
52  void InitializeDependentContactWithFEM(double effective_radius,
53  const double equiv_level_of_fouling,
54  const double equiv_young,
55  const double equiv_shear,
56  const double indentation);
57 
58  void DamageContactWithFEM(ContactInfoSphericParticle* const element,
59  Condition* const wall,
60  double& effective_radius,
61  const double equiv_level_of_fouling,
62  const double equiv_young,
63  const double equiv_shear,
64  double& indentation,
65  const double normal_contact_force);
66 
67  void CalculateForces(const ProcessInfo& r_process_info,
68  const double OldLocalElasticContactForce[3],
69  double LocalElasticContactForce[3],
70  double LocalDeltDisp[3],
71  double LocalRelVel[3],
72  double indentation,
73  double previous_indentation,
74  double ViscoDampingLocalContactForce[3],
75  double& cohesive_force,
76  SphericParticle* element1,
77  SphericParticle* element2,
78  bool& sliding,
79  double LocalCoordSystem[3][3]) override;
80 
81  void CalculateForcesWithFEM(const ProcessInfo& r_process_info,
82  const double OldLocalElasticContactForce[3],
83  double LocalElasticContactForce[3],
84  double LocalDeltDisp[3],
85  double LocalRelVel[3],
86  double indentation,
87  double previous_indentation,
88  double ViscoDampingLocalContactForce[3],
89  double& cohesive_force,
90  SphericParticle* const element,
91  Condition* const wall,
92  bool& sliding) override;
93 
94  void CalculateTangentialForce(const double normal_contact_force,
95  const double OldLocalElasticContactForce[3],
96  double LocalElasticContactForce[3],
97  double ViscoDampingLocalContactForce[3],
98  const double LocalDeltDisp[3],
99  const double LocalRelVel[3],
100  bool& sliding,
101  ContactInfoSphericParticle* const element1,
102  ContactInfoSphericParticle* const element2,
103  const double original_equiv_radius,
104  const double equiv_young,
105  double indentation,
106  double previous_indentation,
107  double& AuxElasticShearForce,
108  double& MaximumAdmisibleShearForce);
109 
110  void CalculateTangentialForceWithFEM(const double normal_contact_force,
111  const double OldLocalElasticContactForce[3],
112  double LocalElasticContactForce[3],
113  double ViscoDampingLocalContactForce[3],
114  const double LocalDeltDisp[3],
115  const double LocalReltVel[3],
116  bool& sliding,
118  Condition* const wall,
119  const double effective_radius,
120  const double original_effective_young,
121  double indentation,
122  double previous_indentation,
123  double& AuxElasticShearForce,
124  double& MaximumAdmisibleShearForce);
125 
126  void CalculateViscoDampingForce(double LocalRelVel[3],
127  double ViscoDampingLocalContactForce[3],
128  ContactInfoSphericParticle* const element1,
129  ContactInfoSphericParticle* const element2);
130 
131  void CalculateViscoDampingForceWithFEM(double LocalRelVel[3],
132  double ViscoDampingLocalContactForce[3],
134  Condition* const wall);
135 
137 
144 
145  private:
146 
147  friend class Serializer;
148 
149  virtual void save(Serializer& rSerializer) const override {
151  }
152 
153  virtual void load(Serializer& rSerializer) override {
155  }
156 
157  }; //class DEM_D_Conical_damage
158 
159 } /* namespace Kratos.*/
160 #endif /* DEM_D_CONICAL_DAMAGE_CL_H_INCLUDED defined */
Base class for all Conditions.
Definition: condition.h:59
Definition: contact_info_spheric_particle.h:19
Definition: DEM_D_Conical_damage_CL.h:19
~DEM_D_Conical_damage()
Definition: DEM_D_Conical_damage_CL.h:27
KRATOS_CLASS_POINTER_DEFINITION(DEM_D_Conical_damage)
DEM_D_Conical_damage()
Definition: DEM_D_Conical_damage_CL.h:25
Definition: DEM_D_Hertz_viscous_Coulomb_CL.h:15
void CalculateInelasticViscodampingEnergyFEM(double &inelastic_viscodamping_energy, double ViscoDampingLocalContactForce[3], double LocalDeltDisp[3])
Definition: DEM_D_Hertz_viscous_Coulomb_CL.cpp:389
void CalculateInelasticFrictionalEnergyFEM(double &inelastic_frictional_energy, double &AuxElasticShearForce, double LocalElasticContactForce[3])
Definition: DEM_D_Hertz_viscous_Coulomb_CL.cpp:383
void CalculateElasticEnergyDEM(double &elastic_energy, double indentation, double LocalElasticContactForce[3])
Definition: DEM_D_Hertz_viscous_Coulomb_CL.cpp:355
virtual double CalculateNormalForce(const double indentation)
Definition: DEM_discontinuum_constitutive_law.cpp:81
void CalculateElasticEnergyFEM(double &elastic_energy, double indentation, double LocalElasticContactForce[3])
Definition: DEM_D_Hertz_viscous_Coulomb_CL.cpp:375
void CalculateInelasticViscodampingEnergyDEM(double &inelastic_viscodamping_energy, double ViscoDampingLocalContactForce[3], double LocalDeltDisp[3])
Definition: DEM_D_Hertz_viscous_Coulomb_CL.cpp:369
void CalculateInelasticFrictionalEnergyDEM(double &inelastic_frictional_energy, double &AuxElasticShearForce, double LocalElasticContactForce[3])
Definition: DEM_D_Hertz_viscous_Coulomb_CL.cpp:363
Definition: DEM_discontinuum_constitutive_law.h:22
ProcessInfo holds the current value of different solution parameters.
Definition: process_info.h:59
The serialization consists in storing the state of an object into a storage format like data file or ...
Definition: serializer.h:123
Definition: spheric_particle.h:31
#define KRATOS_SERIALIZE_SAVE_BASE_CLASS(Serializer, BaseType)
Definition: define.h:812
#define KRATOS_SERIALIZE_LOAD_BASE_CLASS(Serializer, BaseType)
Definition: define.h:815
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
def load(f)
Definition: ode_solve.py:307
Definition: mesh_converter.cpp:33