PeriDyno 1.0.0
Loading...
Searching...
No Matches
SemiAnalyticalSurfaceTensionModel.cpp
Go to the documentation of this file.
2
3#include "ParticleSystem/Module/ParticleIntegrator.h"
7
8#include "Collision/NeighborPointQuery.h"
11//#include "ParticleShifting.h"
14
15namespace dyno
16{
18
19 template<typename TDataType>
21 : GroupModule()
22 {
23 this->varSmoothingLength()->setValue(Real(0.012));//0.006
24
25 //integrator
26 auto integrator = std::make_shared<ParticleIntegrator<TDataType>>();
27 this->inTimeStep()->connect(integrator->inTimeStep());
28 this->inPosition()->connect(integrator->inPosition());
29 this->inVelocity()->connect(integrator->inVelocity());
30 this->pushModule(integrator);
31
32 //neighbor query
33 auto nbrQuery =std::make_shared<NeighborPointQuery<TDataType>>();
34 this->varSmoothingLength()->connect(nbrQuery->inRadius());
35 this->inPosition()->connect(nbrQuery->inPosition());
36 this->pushModule(nbrQuery);
37
38 //triangle neighbor
39 auto nbrQueryTri = std::make_shared<NeighborTriangleQuery<TDataType>>();
40 this->varSmoothingLength()->connect(nbrQueryTri->inRadius());
41 this->inPosition()->connect(nbrQueryTri->inPosition());
42 this->inTriangleSet()->connect(nbrQueryTri->inTriangleSet());
43 this->pushModule(nbrQueryTri);
44
45 //mesh collision
46 auto meshCollision = std::make_shared<TriangularMeshConstraint<TDataType>>();
47 this->inTimeStep()->connect(meshCollision->inTimeStep());
48 this->inPosition()->connect(meshCollision->inPosition());
49 this->inVelocity()->connect(meshCollision->inVelocity());
50// this->inTriangleVer()->connect(meshCollision->inTriangleVertex());
51// this->inTriangleInd()->connect(meshCollision->inTriangleIndex());
52 this->inTriangleSet()->connect(meshCollision->inTriangleSet());
53 nbrQueryTri->outNeighborIds()->connect(meshCollision->inTriangleNeighborIds());
54 this->pushModule(meshCollision);
55
56 //viscosity
57 auto viscosity = std::make_shared<ImplicitViscosity<TDataType>>();
58 viscosity->varViscosity()->setValue(Real(0.5));//0.5
59 this->inTimeStep()->connect(viscosity->inTimeStep());
60 this->varSmoothingLength()->connect(viscosity->inSmoothingLength());
61 this->inPosition()->connect(viscosity->inPosition());
62 this->inVelocity()->connect(viscosity->inVelocity());
63 nbrQuery->outNeighborIds()->connect(viscosity->inNeighborIds());
64 this->pushModule(viscosity);
65
66 //particle shifting
67 auto pshiftModule = std::make_shared<SemiAnalyticalParticleShifting<TDataType>>();
68 this->inTimeStep()->connect(pshiftModule->inTimeStep());
69 this->inPosition()->connect(pshiftModule->inPosition());
70 this->inVelocity()->connect(pshiftModule->inVelocity());
71 nbrQuery->outNeighborIds()->connect(pshiftModule->inNeighborIds());
72 this->inTriangleSet()->connect(pshiftModule->inTriangleSet());
73 nbrQueryTri->outNeighborIds()->connect(pshiftModule->inNeighborTriIds());
74 this->varSurfaceTension()->connect(pshiftModule->varSurfaceTension());
75 this->varAdhesionIntensity()->connect(pshiftModule->varAdhesionIntensity());
76 this->varRestDensity()->connect(pshiftModule->varRestDensity());
77 this->pushModule(pshiftModule);
78 }
79
81}
#define DEFINE_CLASS(name)
Definition Object.h:140
#define IMPLEMENT_TCLASS(name, T1)
Definition Object.h:103
void pushModule(std::shared_ptr< Module > m)
Semi-Analytical Surface Tension Model for Free Surface Flows.
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25