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.
sintering_continuum.h
Go to the documentation of this file.
1 // Kratos Multi-Physics - ThermalDEM Application
2 //
3 // License: BSD License
4 // Kratos default license: kratos/license.txt
5 //
6 // Main authors: Rafael Rangel (rrangel@cimne.upc.edu)
7 //
8 
9 /*
10  By Rafael Rangel (2022):
11  This class was brought from the DEMApp and was originally called DEM_sintering_continuum_CL.
12  It is intended to be used with the sintering continuun particle, which also came from the DEMApp.
13 */
14 
15 #if !defined(SINTERING_CONTINUUM_H_INCLUDED)
16 #define SINTERING_CONTINUUM_H_INCLUDED
17 
18 // System includes
19 #include <string>
20 #include <iostream>
21 #include <cmath>
22 
23 // External includes
27 
28 // Project includes
30 
31 namespace Kratos
32 {
33  class KRATOS_API(THERMAL_DEM_APPLICATION) SinteringContinuum : public DEM_KDEM {
34 
35  // Forward decalrations
36  typedef DEM_KDEM BaseClassType;
37 
38  public:
39 
40  // Pointer definition
42 
43  // Constructor / Destructor
46 
47  // Public methods
48  DEMContinuumConstitutiveLaw::Pointer Clone() const override;
49 
50  void GetContactArea(const double radius,
51  const double other_radius,
52  const Vector& vector_of_initial_areas,
53  const int neighbour_position,
54  double& calculation_area) override;
55 
56  void CalculateElasticConstants(double& kn_el,
57  double& kt_el,
58  double initial_dist,
59  double equiv_young,
60  double equiv_poisson,
61  double calculation_area,
62  SphericContinuumParticle* element1,
63  SphericContinuumParticle* element2,
64  double indentation) override;
65 
66  void CalculateSinteringForces(const ProcessInfo& r_process_info,
67  const double OldLocalElasticContactForce[3],
68  double LocalElasticContactForce[3],
69  const double rel_vel,
70  const double indentation,
71  double& sintering_displ,
72  double& sinter_driv_force,
73  SphericContinuumParticle* element1,
74  SphericContinuumParticle* element2,
75  double ViscoDampingLocalContactForce[3]);
76 
77  void CalculateForcesOfSintering(const ProcessInfo& r_process_info,
78  const double OldLocalElasticContactForce[3],
79  double LocalElasticContactForce[3],
80  const double rel_vel,
81  const double indentation,
82  double& sintering_displ,
83  double& sinter_driv_force,
84  SphericContinuumParticle* element1,
85  SphericContinuumParticle* element2,
86  double ViscoDampingLocalContactForce[3]);
87 
88  void CalculateDampingCoeff(double& equiv_visco_damp_coeff_normal,
89  double kn,
90  SphericContinuumParticle* const element1,
91  SphericContinuumParticle* const element2);
92 
93  void CalculateForces(const ProcessInfo& r_process_info,
94  double OldLocalElasticContactForce[3],
95  double LocalElasticContactForce[3],
96  double LocalElasticExtraContactForce[3],
97  double LocalCoordSystem[3][3],
98  double LocalDeltDisp[3],
99  const double kn_el,
100  const double kt_el,
101  double& contact_sigma,
102  double& contact_tau,
103  double& failure_criterion_state,
104  double equiv_young,
105  double equiv_shear,
106  double indentation,
107  double calculation_area,
108  double& acumulated_damage,
109  SphericContinuumParticle* element1,
110  SphericContinuumParticle* element2,
111  int i_neighbour_count,
112  int time_steps,
113  bool& sliding,
114  double &equiv_visco_damp_coeff_normal,
115  double &equiv_visco_damp_coeff_tangential,
116  double LocalRelVel[3],
117  double ViscoDampingLocalContactForce[3]) override;
118 
119  void CalculateNormalForcesAfterSintering(double LocalElasticContactForce[3], // HERTZIAN CL
120  const double kn_el,
121  double indentation,
122  double calculation_area,
123  SphericContinuumParticle* element1,
124  SphericContinuumParticle* element2,
125  int i_neighbour_count);
126 
127  void InitializeContact(SphericContinuumParticle* const element1,
128  SphericContinuumParticle* const element2,
129  double& indentation,
130  double& minimal_radius,
131  double& kn,
132  double sintering_displ);
133 
134  // void ComputeParticleRotationalMoments(SphericContinuumParticle* element,
135  // SphericContinuumParticle* neighbor,
136  // double equiv_young,
137  // double distance,
138  // double calculation_area,
139  // double LocalCoordSystem[3][3],
140  // double ElasticLocalRotationalMoment[3],
141  // double ViscoLocalRotationalMoment[3],
142  // double equiv_poisson,
143  // double indentation) override;
144 
145  private:
146 
147  friend class Serializer;
148 
149  virtual void save(Serializer& rSerializer) const override{
151  //rSerializer.save("MyMemberName",myMember);
152  }
153 
154  virtual void load(Serializer& rSerializer) override{
156  //rSerializer.load("MyMemberName",myMember);
157  }
158 
159  }; // class SinteringContinuum
160 } // namespace Kratos
161 
162 #endif // SINTERING_CONTINUUM_H_INCLUDED defined
Definition: DEM_KDEM_CL.h:11
Definition: DEM_continuum_constitutive_law.h:23
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: sintering_continuum.h:33
KRATOS_CLASS_POINTER_DEFINITION(SinteringContinuum)
SinteringContinuum()
Definition: sintering_continuum.h:44
~SinteringContinuum()
Definition: sintering_continuum.h:45
Definition: spheric_continuum_particle.h:26
#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
float radius
Definition: mesh_to_mdpa_converter.py:18
def load(f)
Definition: ode_solve.py:307