Skip to content

Commit 842a8a5

Browse files
committed
5,run
1 parent 7ee1f6c commit 842a8a5

2 files changed

Lines changed: 18 additions & 13 deletions

File tree

simulators/5_mov_dirichlet/src/SpringEnergy.cu

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,12 @@ T SpringEnergy<T, dim>::val()
8383
{
8484

8585
int idx = device_DBC(i);
86-
Eigen::Matrix<T, dim, 1> diff;
86+
T d = 0;
8787
for (int j = 0; j < dim; ++j)
8888
{
89-
diff(j) = device_x(idx * dim + j) - device_DBC_target(i*dim + j);
89+
d += (device_x(idx * dim + j) - device_DBC_target(i * dim + j)) * (device_x(idx * dim + j) - device_DBC_target(i * dim + j));
9090
}
91-
device_val(i) = 0.5 * k * device_m(idx) * diff.dot(diff); })
91+
device_val(i) = 0.5 * k *d; })
9292
.wait();
9393

9494
return devicesum(device_val);
@@ -110,15 +110,10 @@ const DeviceBuffer<T> &SpringEnergy<T, dim>::grad()
110110
{
111111

112112
int idx = device_DBC(i);
113-
Eigen::Matrix<T, dim, 1> grad;
114113
for (int j = 0; j < dim; ++j)
115114
{
116-
grad(j) = device_x(idx * dim + j) - device_DBC_target(i*dim + j);
117-
}
118-
grad *= k * device_m(idx);
119-
for (int j = 0; j < dim; ++j)
120-
{
121-
device_grad(idx * dim + j) = grad(j);
115+
device_grad(idx * dim + j) = (device_x(idx * dim + j) - device_DBC_target(i * dim + j))* k * device_m(idx);
116+
printf("grad[%d] = %f\n", idx * dim + j, device_grad(idx * dim + j));
122117
} })
123118
.wait();
124119

simulators/5_mov_dirichlet/src/simulator.cu

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ MovDirichletSimulator<T, dim>::Impl::Impl(T rho, T side_len, T initial_stretch,
6767
DBC_limit.push_back(0);
6868
DBC_limit.push_back(-0.6);
6969
DBC_v.push_back(0);
70-
DBC_v.push_back(-0.5);
70+
DBC_v.push_back(-1);
7171
DBC_stiff = 10;
7272
x.push_back(0);
7373
x.push_back(side_len * 0.6);
@@ -256,7 +256,7 @@ void MovDirichletSimulator<T, dim>::Impl::draw()
256256
}
257257

258258
// Draw masses as circles
259-
for (int i = 0; i < (x.size() - 1) / dim; ++i)
259+
for (int i = 0; i < (x.size()) / dim; ++i)
260260
{
261261
sf::CircleShape circle(radius); // Set a fixed radius for each mass
262262
circle.setFillColor(sf::Color::Red);
@@ -276,7 +276,17 @@ T MovDirichletSimulator<T, dim>::Impl::IP_val()
276276
template <typename T, int dim>
277277
DeviceBuffer<T> MovDirichletSimulator<T, dim>::Impl::IP_grad()
278278
{
279-
return add_vector<T>(add_vector<T>(add_vector<T>(add_vector<T>(add_vector<T>(inertialenergy.grad(), massspringenergy.grad(), 1.0, h * h), gravityenergy.grad(), 1.0, h * h), barrierenergy.grad(), 1.0, h * h), frictionenergy.grad(), 1.0, h * h), springenergy.grad(), 1.0, 1.0);
279+
return add_vector<T>(add_vector<T>(add_vector<T>(add_vector<T>(add_vector<T>(inertialenergy.grad(),
280+
massspringenergy.grad(), 1.0, h * h),
281+
gravityenergy.grad(), 1.0, h * h),
282+
barrierenergy.grad(), 1.0, h * h),
283+
frictionenergy.grad(), 1.0, h * h),
284+
springenergy.grad(), 1.0, 1.0);
285+
// return add_vector<T>(add_vector<T>(add_vector<T>(add_vector<T>(inertialenergy.grad(),
286+
// massspringenergy.grad(), 1.0, h * h),
287+
// gravityenergy.grad(), 1.0, h * h),
288+
// barrierenergy.grad(), 1.0, h * h),
289+
// frictionenergy.grad(), 1.0, h * h);
280290
}
281291

282292
template <typename T, int dim>

0 commit comments

Comments
 (0)