-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDPMWrapper.cpp
More file actions
194 lines (191 loc) · 10.1 KB
/
Copy pathDPMWrapper.cpp
File metadata and controls
194 lines (191 loc) · 10.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
//
// Author: Francesco Arceri
// Date: 10-03-2021
//
// FUNCTION DECLARATIONS
#include "include/DPM2D.h"
#include <vector>
#include <tuple>
#include <functional>
#include <utility>
#include <pybind11/pybind11.h>
#include <pybind11/stl.h>
#include <pybind11/numpy.h>
namespace py = pybind11;
PYBIND11_MODULE(libPyDPM, m) {
m.doc() = "libPyDPM Python interface to CUDA deformable particle packing code";
py::class_<DPM2D>(m, "DPM2D")
.def(py::init<int, int, int>(), py::arg("nParticles"), py::arg("dim"), py::arg("nVertexPerParticle"))
.def("initParticleVariables", &DPM2D::initParticleVariables)
.def("initParticleDynamicalVariables", &DPM2D::initParticleDynamicalVariables)
.def("initRotationalVariables", &DPM2D::initRotationalVariables)
.def("initVertexVariables", &DPM2D::initVertexVariables)
.def("initDynamicalVariables", &DPM2D::initDynamicalVariables)
.def("initDeltaVariables", &DPM2D::initDeltaVariables)
.def("initContacts", &DPM2D::initContacts)
.def("initNeighbors", &DPM2D::initNeighbors)
.def("initParticleNeighbors", &DPM2D::initParticleNeighbors)
.def("initParticleIdList", &DPM2D::initParticleIdList)
//**************************** setters and getters ***************************//
.def("setDimBlock", &DPM2D::setDimBlock)
.def("getDimBlock", &DPM2D::getDimBlock)
.def("setNDim", &DPM2D::setNDim)
.def("getNDim", &DPM2D::getNDim)
.def("setNumParticles", &DPM2D::setNumParticles)
.def("getNumParticles", &DPM2D::getNumParticles)
.def("setNumVertices", &DPM2D::setNumVertices)
.def("getNumVertices", &DPM2D::getNumVertices)
.def("setNumVertexPerParticle", &DPM2D::setNumVertexPerParticle)
.def("getNumVertexPerParticle", &DPM2D::getNumVertexPerParticle)
.def("setNumVertexInParticleList", &DPM2D::setNumVertexInParticleList)
.def("getNumVertexInParticleList", &DPM2D::getNumVertexInParticleList)
.def("setLengthScale", &DPM2D::setLengthScale)
.def("setSphericalLengthScale", &DPM2D::setSphericalLengthScale)
.def("setLengthScaleToOne", &DPM2D::setLengthScaleToOne)
.def("setBoxSize", &DPM2D::setBoxSize)
.def("getBoxSize", &DPM2D::getBoxSize)
.def("setVertexRadii", &DPM2D::setVertexRadii)
.def("getVertexRadii", &DPM2D::getVertexRadii)
.def("getMaxRadius", &DPM2D::getMaxRadius)
.def("setRestAreas", &DPM2D::setRestAreas)
.def("getRestAreas", &DPM2D::getRestAreas)
.def("setRestLengths", &DPM2D::setRestLengths)
.def("getRestLengths", &DPM2D::getRestLengths)
.def("setRestAngles", &DPM2D::setRestAngles)
.def("getRestAngles", &DPM2D::getRestAngles)
.def("getSegmentLengths", &DPM2D::getSegmentLengths)
.def("setAreas", &DPM2D::setAreas)
.def("getAreas", &DPM2D::getAreas)
.def("getPerimeters", &DPM2D::getPerimeters)
//void DPM2D::calcParticlesShape()
//void DPM2D::calcParticlesPositions()
.def("setDefaultParticleRadii", &DPM2D::setDefaultParticleRadii)
.def("setParticleRadii", &DPM2D::setParticleRadii)
.def("getParticleRadii", &DPM2D::getParticleRadii)
.def("setParticlePositions", &DPM2D::setParticlePositions)
.def("getParticlePositions", &DPM2D::getParticlePositions)
.def("getPBCParticlePositions", &DPM2D::getPBCParticlePositions)
.def("setParticleVelocities", &DPM2D::setParticleVelocities)
.def("getParticleVelocities", &DPM2D::getParticleVelocities)
.def("setParticleForces", &DPM2D::setParticleForces)
.def("getParticleForces", &DPM2D::getParticleForces)
.def("getMeanParticleSize", &DPM2D::getMeanParticleSize)
.def("setParticleAngles", &DPM2D::setParticleAngles)
.def("getParticleAngles", &DPM2D::getParticleAngles)
.def("setVertexPositions", &DPM2D::setVertexPositions)
.def("getVertexPositions", &DPM2D::getVertexPositions)
.def("setVertexVelocities", &DPM2D::setVertexVelocities)
.def("getVertexVelocities", &DPM2D::getVertexVelocities)
.def("setVertexForces", &DPM2D::setVertexForces)
.def("getVertexForces", &DPM2D::getVertexForces)
.def("setVertexTorques", &DPM2D::setVertexTorques)
.def("getVertexTorques", &DPM2D::getVertexTorques)
.def("getStressTensor", &DPM2D::getStressTensor)
.def("getPerParticleStressTensor", &DPM2D::getPerParticleStressTensor)
.def("getPressure", &DPM2D::getPressure)
.def("getTotalForceMagnitude", &DPM2D::getTotalForceMagnitude)
.def("getMaxUnbalancedForce", &DPM2D::getMaxUnbalancedForce)
.def("getMaxNeighborList", &DPM2D::getMaxNeighborList)
.def("getNeighbors", &DPM2D::getNeighbors)
.def("getContacts", &DPM2D::getContacts)
//DPM2D::printNeighbors()
//DPM2D::printContacts()
.def("getPotentialEnergy", &DPM2D::getPotentialEnergy)
.def("getKineticEnergy", &DPM2D::getKineticEnergy)
.def("getTemperature", &DPM2D::getTemperature)
.def("getParticleEnergy", &DPM2D::getParticleEnergy)
.def("getPhi", &DPM2D::getPhi)
.def("getPreferredPhi", &DPM2D::getPreferredPhi)
.def("getParticlePhi", &DPM2D::getParticlePhi)
.def("getVertexMSD", &DPM2D::getVertexMSD)
.def("getParticleMSD", &DPM2D::getParticleMSD)
.def("getWaveNumber", &DPM2D::getWaveNumber)
.def("getVertexISF", &DPM2D::getVertexISF)
.def("getParticleISF", &DPM2D::getParticleISF)
.def("getHexaticOrderParameter", &DPM2D::getHexaticOrderParameter)
.def("getAreaFluctuation", &DPM2D::getAreaFluctuation)
//************************ initilization functions ***************************//
.def("setMonoSizeDistribution", &DPM2D::setMonoSizeDistribution)
//void DPM2D::setBiSizeDistribution();
.def("setPolyRandomSoftParticles", &DPM2D::setPolyRandomSoftParticles)
.def("setPolySizeDistribution", &DPM2D::setPolySizeDistribution)
.def("setSinusoidalRestAngles", &DPM2D::setSinusoidalRestAngles)
.def("setRandomParticles", &DPM2D::setRandomParticles)
.def("initVerticesOnParticles", &DPM2D::initVerticesOnParticles)
.def("scaleVertices", &DPM2D::scaleVertices)
.def("scaleParticles", &DPM2D::scaleParticles)
.def("scaleSoftParticles", &DPM2D::scaleSoftParticles)
.def("scaleParticleVelocity", &DPM2D::scaleParticleVelocity)
.def("translateVertices", &DPM2D::translateVertices)
.def("rotateVertices", &DPM2D::rotateVertices)
.def("computeParticleAngleFromVel", &DPM2D::computeParticleAngleFromVel)
//*************************** force and energy *******************************//
.def("setSpringConstants", &DPM2D::setSpringConstants)
.def("setAttractionConstants", &DPM2D::setAttractionConstants)
.def("setTimeScale", &DPM2D::setTimeScale)
.def("setTimeStep", &DPM2D::setTimeStep)
.def("calcForceEnergy", &DPM2D::calcForceEnergy)
.def("calcVertexForceAngAcc", &DPM2D::calcVertexForceAngAcc)
.def("calcRigidForceEnergy", &DPM2D::calcRigidForceEnergy)
.def("calcVertexForceTorque", &DPM2D::calcVertexForceTorque)
.def("calcRigidForceTorque", &DPM2D::calcRigidForceTorque)
.def("calcStressTensor", &DPM2D::calcStressTensor)
.def("calcPerParticleStressTensor", &DPM2D::calcPerParticleStressTensor)
.def("calcNeighborForces", &DPM2D::calcNeighborForces)
.def("calcParticleNeighbors", &DPM2D::calcParticleNeighbors)
.def("calcContacts", &DPM2D::calcContacts)
.def("getContactVectors", &DPM2D::getContactVectors)
.def("calcNeighborList", &DPM2D::calcNeighborList)
//DPM2D::syncNeighborsToDevice()
//************************* particle functions *******************************//
.def("calcParticleForceEnergy", &DPM2D::calcParticleForceEnergy)
.def("makeExternalParticleForce", &DPM2D::makeExternalParticleForce)
.def("addExternalParticleForce", &DPM2D::addExternalParticleForce)
.def("getParticleMaxUnbalancedForce", &DPM2D::getParticleMaxUnbalancedForce)
.def("getRigidMaxUnbalancedForce", &DPM2D::getRigidMaxUnbalancedForce)
.def("calcParticleStressTensor", &DPM2D::calcParticleStressTensor)
.def("getParticlePressure", &DPM2D::getParticlePressure)
.def("getParticleEnergy", &DPM2D::getParticleEnergy)
.def("getParticleKineticEnergy", &DPM2D::getParticleKineticEnergy)
.def("getParticleTemperature", &DPM2D::getParticleTemperature)
.def("getParticleNeighbors", &DPM2D::getParticleNeighbors)
.def("calcParticleNeighborList", &DPM2D::calcParticleNeighborList)
//DPM2D::syncParticleNeighborsToDevice()
//************************** minimizer functions *****************************//
.def("initFIRE", &DPM2D::initFIRE)
.def("setParticleMassFIRE", &DPM2D::setParticleMassFIRE)
.def("particleFIRELoop", &DPM2D::particleFIRELoop)
.def("vertexFIRELoop", &DPM2D::vertexFIRELoop)
.def("initRigidFIRE", &DPM2D::initRigidFIRE)
.def("rigidFIRELoop", &DPM2D::rigidFIRELoop)
//********************* deformable particles integrators *********************//
.def("initNVE", &DPM2D::initNVE)
.def("NVELoop", &DPM2D::NVELoop)
.def("initBrownian", &DPM2D::initBrownian)
.def("brownianLoop", &DPM2D::brownianLoop)
.def("initActiveBrownian", &DPM2D::initActiveBrownian)
.def("activeBrownianLoop", &DPM2D::activeBrownianLoop)
.def("initActiveBrownianDampedL0", &DPM2D::initActiveBrownianDampedL0)
.def("ActiveBrownianDampedL0Loop", &DPM2D::ActiveBrownianDampedL0Loop)
//************************* soft particle simulators *************************//
.def("initSoftParticleLangevin", &DPM2D::initSoftParticleLangevin)
.def("softParticleLangevinLoop", &DPM2D::softParticleLangevinLoop)
.def("initSoftParticleActiveLangevin", &DPM2D::initSoftParticleActiveLangevin)
.def("softParticleActiveLangevinLoop", &DPM2D::softParticleActiveLangevinLoop)
.def("initSoftParticleNVE", &DPM2D::initSoftParticleNVE)
.def("softParticleNVELoop", &DPM2D::softParticleNVELoop)
.def("initSoftParticleBrownian", &DPM2D::initSoftParticleBrownian)
.def("softParticleBrownianLoop", &DPM2D::softParticleBrownianLoop)
.def("initSoftParticleActiveBrownian", &DPM2D::initSoftParticleActiveBrownian)
.def("softParticleBrownianLoop", &DPM2D::softParticleActiveBrownianLoop)
.def("initSoftParticleBAB", &DPM2D::initSoftParticleBAB)
.def("softParticleBABLoop", &DPM2D::softParticleBABLoop)
//************************* rigid particle simulators ************************//
.def("initRigidActiveBrownian", &DPM2D::initRigidBrownian)
.def("rigidBrownianLoop", &DPM2D::rigidBrownianLoop)
.def("initRigidRotActiveBrownian", &DPM2D::initRigidRotActiveBrownian)
.def("rigidRotActiveBrownianLoop", &DPM2D::rigidRotActiveBrownianLoop)
.def("initRigidActiveBrownian", &DPM2D::initRigidActiveBrownian)
.def("rigidActiveBrownianLoop", &DPM2D::rigidActiveBrownianLoop)
;
}