PeriDyno 1.0.0
Loading...
Searching...
No Matches
SemiAnalyticalIncompressibleFluidModel.cpp
Go to the documentation of this file.
1
9
10#include "ParticleSystem/Module/ParticleIntegrator.h"
12
13#include "Collision/NeighborPointQuery.h"
15
17#include "Node.h"
18
19namespace dyno {
20
22
23 template <typename TDataType>
25 : GroupModule()
26 , m_restRho(Real(1000))
27 , m_pNum(0)
28 {
29 m_smoothing_length.setValue(Real(0.015));
30
31 m_nbrQueryPoint = std::make_shared<NeighborPointQuery<TDataType>>();
32 m_smoothing_length.connect(m_nbrQueryPoint->inRadius());
33 m_particle_position.connect(m_nbrQueryPoint->inPosition());
34
35 //m_nbrQueryPoint->initialize();
36
37 m_integrator = std::make_shared<ParticleIntegrator<TDataType>>();
38 m_particle_position.connect(m_integrator->inPosition());
39 m_particle_velocity.connect(m_integrator->inVelocity());
40 //m_integrator->initialize();
41
43 m_smoothing_length.connect(m_nbrQueryTri->inRadius());
44 this->m_particle_position.connect(m_nbrQueryTri->inPosition());
45// this->m_triangle_vertex.connect(m_nbrQueryTri->inTriPosition());
46// this->m_triangle_index.connect(m_nbrQueryTri->inTriangles());
47 this->inTriangleSet()->connect(m_nbrQueryTri->inTriangleSet());
48
49 //m_nbrQueryTri->initialize();
50
51 m_visModule = std::make_shared<ImplicitViscosity<TDataType>>();
52 m_visModule->varViscosity()->setValue(Real(1));
53 m_smoothing_length.connect(m_visModule->inSmoothingLength());
54 this->m_particle_position.connect(m_visModule->inPosition());
55 this->m_particle_velocity.connect(m_visModule->inVelocity());
56 m_nbrQueryPoint->outNeighborIds()->connect(m_visModule->inNeighborIds());
57 //m_visModule->initialize();
58
59 printf("finished initialize fluid viscosity\n");
60
62 m_flip.resize(m_particle_velocity.size());
63
65 this->m_particle_position.connect(m_meshCollision->inPosition());
66 this->m_particle_velocity.connect(m_meshCollision->inVelocity());
67// this->m_triangle_vertex.connect(m_meshCollision->inTriangleVertex());
68// this->m_triangle_index.connect(m_meshCollision->inTriangleIndex());
69 this->inTriangleSet()->connect(m_meshCollision->inTriangleSet());
70 m_nbrQueryTri->outNeighborIds()->connect(m_meshCollision->inTriangleNeighborIds());
71 //pReduce = Reduction<Real>::Create(m_velocity_mod.size());
72
73 printf("finished initialize mesh collision\n");
74
75 m_pbdModule = std::make_shared<SemiAnalyticalIncompressibilityModule<TDataType>>();
76 m_smoothing_length.connect(&m_pbdModule->m_smoothing_length);
77
78 m_particle_velocity.connect(&m_pbdModule->m_particle_velocity);
79
80 m_particle_mass.connect(&m_pbdModule->m_particle_mass);
81 this->m_particle_attribute.connect(&m_pbdModule->m_particle_attribute);
82
83 this->m_particle_position.connect(&m_pbdModule->m_particle_position);
84
85 this->m_triangle_vertex.connect(&m_pbdModule->m_triangle_vertex);
86 this->m_triangle_vertex_old.connect(&m_pbdModule->m_triangle_vertex_old);
87
88 this->m_triangle_vertex_mass.connect(&m_pbdModule->m_triangle_vertex_mass);
89
90 this->m_triangle_index.connect(&m_pbdModule->m_triangle_index);
91
92 m_nbrQueryPoint->outNeighborIds()->connect(m_pbdModule->inNeighborParticleIds());
93 m_flip.connect(&m_pbdModule->m_flip);
94 m_nbrQueryTri->outNeighborIds()->connect(m_pbdModule->inNeighborTriangleIds());
95 m_pbdModule->initialize();
96 }
97
98 template <typename TDataType>
100 {
101 //return;
102 // if (first == 1)
103 // {
104 //
105 // m_nbrQueryTri = this->getParent()->addComputeModule<NeighborQuery<TDataType>>("neighborhood3");
106 // m_smoothing_length.connect(m_nbrQueryTri->m_radius);
107 // this->m_particle_position.connect(m_nbrQueryTri->m_position);
108 // this->m_triangle_vertex.connect(m_nbrQueryTri->m_TriPos);
109 // this->m_triangle_index.connect(m_nbrQueryTri->m_triangls);
110 // m_nbrQueryTri->initialize();
111 // m_nbrQueryTri->m_neighborhood.connect(m_pbdModule->m_neighborhood_triangles);
112 //
113 // m_pbdModule->initialize_();
114 // first = 0;
115 // return;
116 //
117 // }
118
119 m_velocity_mod.resize(m_particle_velocity.size());
120 m_flip.resize(m_particle_velocity.size());
121 m_flip.getData().reset();
122
123 //m_integrator->begin();
124
125 m_integrator->update();
126
127 m_nbrQueryPoint->update();
128
129 m_nbrQueryTri->update();
130
131 m_meshCollision->update();
132
133 m_visModule->update();
134
135 m_pbdModule->update();
136 }
137
139} // namespace dyno
#define DEFINE_CLASS(name)
Definition Object.h:140
#define IMPLEMENT_TCLASS(name, T1)
Definition Object.h:103
This class implements an implicit solver for artificial viscosity based on the XSPH method.
std::shared_ptr< TriangularMeshConstraint< TDataType > > m_meshCollision
used to handel the collision between triangles and particles
std::shared_ptr< NeighborTriangleQuery< TDataType > > m_nbrQueryTri
neighbor list for particle-triangle
std::shared_ptr< ImplicitViscosity< TDataType > > m_visModule
viscosity
std::shared_ptr< ParticleIntegrator< TDataType > > m_integrator
integrator, update particle velocity and position
std::shared_ptr< SemiAnalyticalIncompressibilityModule< TDataType > > m_pbdModule
semi-analytical projection-based fluid model
std::shared_ptr< NeighborPointQuery< TDataType > > m_nbrQueryPoint
neighbor list for particle pairs
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25