PeriDyno 1.0.0
Loading...
Searching...
No Matches
ContactRule.h
Go to the documentation of this file.
1
16#pragma once
17#include "Collision/CollisionDetectionBroadPhase.h"
18#include "Topology/TriangleSet.h"
20#include "Module.h"
22
23namespace dyno
24{
25 template<typename TDataType> class CollisionDetectionBroadPhase;
26
27 template<typename TDataType>
29 {
30 DECLARE_TCLASS(ContactRule, TDataType)
31 public:
32 typedef typename TDataType::Real Real;
33 typedef typename TDataType::Coord Coord;
34
36
37 virtual ~ContactRule();
38
39 void constrain() override;
40
41 void initCCDBroadPhase(); // One should call it AT LEAST ONCE to initial data 'mBroadPhaseCD' before update the model to get inState or outState updated.
42 void setContactMaxIte(int ite) {
43 this->ContactMaxIte = ite;
44 }
45 public:
47
48 DEF_VAR(Real, Xi, Real(0.15), "Thickness");
49
50 DEF_VAR(Real, S, Real(0.1), "Refactor s");
51
52 DEF_VAR_IN(Real, Unit, "Maximum primitive size (edge length)");
53
54 DEF_ARRAY_IN(Coord, OldPosition, DeviceType::GPU, "Old Vertex Position");
55
56 DEF_ARRAY_IN(Coord, NewPosition, DeviceType::GPU, "New Vertex Position");
57
58 DEF_ARRAY_IN(Coord, Velocity, DeviceType::GPU, "Particle velocity");
59
60 DEF_VAR_IN(Real, TimeStep, "");
61
62 public:
63 DEF_ARRAY_OUT(Coord, ContactForce, DeviceType::GPU, "Contact Force");
64 DEF_ARRAY_OUT(Real, Weight, DeviceType::GPU, "Weight");
66 private:
67 std::shared_ptr<CollisionDetectionBroadPhase<TDataType>> mBroadPhaseCD;
73 int ContactMaxIte = 150;
74 };
75}
#define DECLARE_TCLASS(name, T1)
Definition Object.h:87
virtual ~ContactRule()
DEF_ARRAY_OUT(Real, Weight, DeviceType::GPU, "Weight")
DEF_INSTANCE_IN(TriangleSet< TDataType >, TriangularMesh, "")
DArrayList< Coord > secondTri
Definition ContactRule.h:69
DArrayList< Coord > firstTri
Definition ContactRule.h:68
DArray< Real > Weight
Definition ContactRule.h:72
DArray< uint > trueContactCnt
Definition ContactRule.h:71
DEF_VAR(Real, S, Real(0.1), "Refactor s")
DArrayList< int > trueContact
Definition ContactRule.h:70
void constrain() override
DEF_ARRAY_IN(Coord, NewPosition, DeviceType::GPU, "New Vertex Position")
DEF_VAR_IN(Real, TimeStep, "")
void setContactMaxIte(int ite)
Definition ContactRule.h:42
DEF_VAR_IN(Real, Unit, "Maximum primitive size (edge length)")
DEF_ARRAY_IN(Coord, Velocity, DeviceType::GPU, "Particle velocity")
DEF_ARRAY_IN(Coord, OldPosition, DeviceType::GPU, "Old Vertex Position")
TDataType::Real Real
Definition ContactRule.h:32
DEF_ARRAY_OUT(Coord, ContactForce, DeviceType::GPU, "Contact Force")
DEF_VAR(Real, Xi, Real(0.15), "Thickness")
std::shared_ptr< CollisionDetectionBroadPhase< TDataType > > mBroadPhaseCD
Definition ContactRule.h:67
void initCCDBroadPhase()
TDataType::Coord Coord
Definition ContactRule.h:33
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25
Array< T, DeviceType::GPU > DArray
Definition Array.inl:89
ArrayList< ElementType, DeviceType::GPU > DArrayList
Definition ArrayList.inl:83