SPHinXsys  alpha version
solid_particles.h
Go to the documentation of this file.
1 /* -------------------------------------------------------------------------*
2  * SPHinXsys *
3  * --------------------------------------------------------------------------*
4  * SPHinXsys (pronunciation: s'finksis) is an acronym from Smoothed Particle *
5  * Hydrodynamics for industrial compleX systems. It provides C++ APIs for *
6  * physical accurate simulation and aims to model coupled industrial dynamic *
7  * systems including fluid, solid, multi-body dynamics and beyond with SPH *
8  * (smoothed particle hydrodynamics), a meshless computational method using *
9  * particle discretization. *
10  * *
11  * SPHinXsys is partially funded by German Research Foundation *
12  * (Deutsche Forschungsgemeinschaft) DFG HU1527/6-1, HU1527/10-1 *
13  * and HU1527/12-1. *
14  * *
15  * Portions copyright (c) 2017-2020 Technical University of Munich and *
16  * the authors' affiliations. *
17  * *
18  * Licensed under the Apache License, Version 2.0 (the "License"); you may *
19  * not use this file except in compliance with the License. You may obtain a *
20  * copy of the License at http://www.apache.org/licenses/LICENSE-2.0. *
21  * *
22  * --------------------------------------------------------------------------*/
29 #ifndef SOLID_PARTICLES_H
30 #define SOLID_PARTICLES_H
31 
32 #include "elastic_solid.h"
33 #include "base_particles.h"
34 #include "base_particles.hpp"
35 
37 namespace SPH
38 {
39  //----------------------------------------------------------------------
40  // preclaimed classes
41  //----------------------------------------------------------------------
42  class Solid;
43  class ElasticSolid;
44 
50  {
51  public:
52  SolidParticles(SPHBody &sph_body, Solid *solid);
53  virtual ~SolidParticles(){};
54 
61  virtual Vecd getKernelGradient(size_t index_i, size_t index_j, Real dW_ij, Vecd &e_ij) override;
63  virtual StdLargeVec<Vecd> *AverageVelocity() { return &vel_; };
65  virtual StdLargeVec<Vecd> *AverageAcceleration() { return &acc_; };
66 
67  virtual void initializeOtherVariables() override;
68 
69  virtual SolidParticles *ThisObjectPtr() override { return this; };
70  };
71 
77  {
78  public:
79  ElasticSolidParticles(SPHBody &sph_body, ElasticSolid *elastic_solid);
80  virtual ~ElasticSolidParticles(){};
81 
84  //----------------------------------------------------------------------
85  // for fluid-structure interaction (FSI)
86  //----------------------------------------------------------------------
90  // STRAIN
91  Matd getGreenLagrangeStrain(size_t particle_i);
93  Vecd getPrincipalStrains(size_t particle_i);
95  Real getVonMisesStrain(size_t particle_i);
97  Real getVonMisesStrainDynamic(size_t particle_i, Real poisson);
98 
100  StdLargeVec<Real> getVonMisesStrainVector(std::string strain_measure = "static");
102  Real getVonMisesStrainMax(std::string strain_measure = "static");
103  Real getPrincipalStrainMax();
104 
105  // STRESS
106  Matd getStressCauchy(size_t particle_i);
107  Matd getStressPK2(size_t particle_i);
109  Vecd getPrincipalStresses(size_t particle_i);
111  Real getVonMisesStress(size_t particle_i);
112 
116  Real getVonMisesStressMax();
117  Real getPrincipalStressMax();
118 
120  Vecd displacement(size_t particle_i);
121  StdLargeVec<Vecd> getDisplacement();
122  Real getMaxDisplacement();
123 
125  Vecd normal(size_t particle_i);
126  StdLargeVec<Vecd> getNormal();
127 
129  std::string stress_measure_;
130 
132  virtual StdLargeVec<Vecd> *AverageVelocity() { return &vel_ave_; };
135 
136  virtual void initializeOtherVariables() override;
137  virtual ElasticSolidParticles *ThisObjectPtr() override { return this; };
138 
139  protected:
140  ElasticSolid *elastic_solid_;
141  };
142 
148  {
149  public:
150  ShellParticles(SPHBody &sph_body, ElasticSolid *elastic_solid);
151  virtual ~ShellParticles(){};
152 
153  Real thickness_ref_;
156  //----------------------------------------------------------------------
157  // extra generalized coordinates in global coordinate
158  //----------------------------------------------------------------------
162  //----------------------------------------------------------------------
163  // extra generalized coordinate and velocity in local coordinate
164  //----------------------------------------------------------------------
168  //----------------------------------------------------------------------
169  // extra deformation and deformation rate in local coordinate
170  //----------------------------------------------------------------------
173  //----------------------------------------------------------------------
174  // extra stress for pair interaction in global coordinate
175  //----------------------------------------------------------------------
180  virtual Real ParticleVolume(size_t index_i) { return Vol_[index_i] * thickness_[index_i]; }
181  virtual Real ParticleMass(size_t index_i) { return mass_[index_i] * thickness_[index_i]; }
182 
183  virtual void initializeOtherVariables() override;
184  virtual ShellParticles *ThisObjectPtr() override { return this; };
185  };
186 }
187 #endif // SOLID_PARTICLES_H
StdLargeVec< Vecd > vel_ave_
Definition: solid_particles.h:87
StdLargeVec< Real > getVonMisesStressVector()
Definition: solid_particles.cpp:187
Particles with essential (geometric and kinematic) data. There are three types of particles, all par...
Definition: base_particles.h:81
A group of particles with elastic body particle data.
Definition: solid_particles.h:76
Vecd getPrincipalStrains(size_t particle_i)
Definition: solid_particles.cpp:82
StdLargeVec< Vecd > pos0_
Definition: solid_particles.h:53
StdLargeVec< Vecd > dpseudo_n_d2t_
Definition: solid_particles.h:161
Real getVonMisesStress(size_t particle_i)
Definition: solid_particles.cpp:114
StdLargeVec< Matd > dF_bending_dt_
Definition: solid_particles.h:172
StdLargeVec< Vecd > rotation_
Definition: solid_particles.h:165
StdLargeVec< Real > mass_
Definition: base_particles.h:97
Base class of all solid materials.
Definition: base_material.h:113
StdLargeVec< Vecd > dangular_vel_dt_
Definition: solid_particles.h:167
virtual StdLargeVec< Vecd > * AverageAcceleration()
Definition: solid_particles.h:65
virtual Vecd getKernelGradient(size_t index_i, size_t index_j, Real dW_ij, Vecd &e_ij) override
Definition: solid_particles.cpp:36
StdLargeVec< Vecd > global_shear_stress_
Definition: solid_particles.h:176
virtual StdLargeVec< Vecd > * AverageAcceleration()
Definition: solid_particles.h:134
virtual void initializeOtherVariables() override
Definition: solid_particles.cpp:20
StdLargeVec< Real > thickness_
Definition: solid_particles.h:155
Real getPrincipalStressMax()
Definition: solid_particles.cpp:175
Real getVonMisesStrain(size_t particle_i)
Definition: solid_particles_supplementary.cpp:13
A group of particles with solid body particle data.
Definition: solid_particles.h:49
StdLargeVec< Vecd > vel_
Definition: base_particles.h:91
Vecd getPrincipalStresses(size_t particle_i)
Definition: solid_particles.cpp:100
StdLargeVec< Real > getVonMisesStrainVector(std::string strain_measure="static")
Definition: solid_particles.cpp:128
StdLargeVec< Matd > F_
Definition: solid_particles.h:80
virtual void initializeOtherVariables() override
Definition: solid_particles.cpp:267
virtual void initializeOtherVariables() override
Definition: solid_particles.cpp:46
A group of particles with shell particle data.
Definition: solid_particles.h:147
StdLargeVec< Matd > B_
Definition: solid_particles.h:58
StdLargeVec< Matd > transformation_matrix_
Definition: solid_particles.h:154
StdLargeVec< Vecd > acc_ave_
Definition: solid_particles.h:88
StdLargeVec< Real > Vol_
Definition: base_particles.h:95
Abstract class for a generalized elastic solid.
Definition: elastic_solid.h:44
StdLargeVec< Vecd > n_
Definition: solid_particles.h:56
StdLargeVec< Matd > dF_dt_
Definition: solid_particles.h:83
StdLargeVec< Vecd > acc_
Definition: base_particles.h:92
virtual StdLargeVec< Vecd > * AverageVelocity()
Definition: solid_particles.h:63
Matd getGreenLagrangeStrain(size_t particle_i)
Definition: solid_particles.cpp:76
StdLargeVec< Vecd > angular_vel_
Definition: solid_particles.h:166
StdLargeVec< Vecd > dpseudo_n_dt_
Definition: solid_particles.h:160
This is the base class of SPH particles. The basic data of the particles is saved in separated large ...
StdLargeVec< Matd > global_stress_
Definition: solid_particles.h:177
Real getMaxDisplacement()
Definition: solid_particles.cpp:230
This is the implementation of the template functions in base_particles.h.
SPHBody is a base body with basic data and functions. Its derived class can be a real fluid body...
Definition: base_body.h:61
This is the base class of particle generator, which generates particles with given positions and volu...
std::string stress_measure_
Definition: solid_particles.h:129
virtual StdLargeVec< Vecd > * AverageVelocity()
Definition: solid_particles.h:132
Real getVonMisesStrainDynamic(size_t particle_i, Real poisson)
Definition: solid_particles_supplementary.cpp:31
These are classes for define properties of elastic solid materials. These classes are based on isotro...
StdLargeVec< Vecd > pseudo_n_
Definition: solid_particles.h:159
StdLargeVec< Matd > F_bending_
Definition: solid_particles.h:171
StdLargeVec< Vecd > n0_
Definition: solid_particles.h:57
Matd getStressPK2(size_t particle_i)
Definition: solid_particles.cpp:95
StdLargeVec< Matd > global_moment_
Definition: solid_particles.h:178
Definition: solid_body_supplementary.cpp:9