48 const auto dim =
data.dimension();
49 const auto dt =
data.currentDt();
52 tf::Taskflow taskflow;
54 taskflow.for_each_index(
55 (std::size_t) 0,
data.numPdForceNodes(), (std::size_t) 1,
56 [&
data, dim, dt](std::size_t II) {
57 const auto i = data.pdForceNode(II);
58 const auto rho = data.getDensity(i);
59 auto &v = data.getV(i);
60 auto &u = data.getU(i);
61 auto &x = data.getX(i);
62 const auto &f = data.getF(i);
64 for (int dof = 0; dof < dim; dof++) {
65 if (data.isDofFree(i, dof)) {
66 v[dof] += (dt / rho) * f[dof];
67 u[dof] += dt * v[dof];
68 x[dof] += dt * v[dof];
72 data.setVMag(i, v.length());
76 executor.run(taskflow).get();
80 const auto dim =
data.dimension();
81 const auto dt =
data.currentDt();
84 tf::Taskflow taskflow;
86 taskflow.for_each_index(
87 (std::size_t) 0,
data.numPdForceNodes(), (std::size_t) 1,
88 [&
data, dim, dt](std::size_t II) {
89 const auto i = data.pdForceNode(II);
90 const auto rho = data.getDensity(i);
91 auto &v = data.getV(i);
92 auto &u = data.getU(i);
93 auto &x = data.getX(i);
94 const auto &f = data.getF(i);
96 for (int dof = 0; dof < dim; dof++) {
97 if (data.isDofFree(i, dof)) {
98 v[dof] += 0.5 * (dt / rho) * f[dof];
99 u[dof] += dt * v[dof];
100 x[dof] += dt * v[dof];
104 data.setVMag(i, v.length());
108 executor.run(taskflow).get();
112 const auto dim =
data.dimension();
113 const auto dt =
data.currentDt();
116 tf::Taskflow taskflow;
118 taskflow.for_each_index(
119 (std::size_t) 0,
data.numPdForceNodes(), (std::size_t) 1,
120 [&
data, dim, dt](std::size_t II) {
121 const auto i = data.pdForceNode(II);
122 const auto rho = data.getDensity(i);
123 auto &v = data.getV(i);
124 const auto &f = data.getF(i);
126 for (int dof = 0; dof < dim; dof++) {
127 if (data.isDofFree(i, dof)) {
128 v[dof] += 0.5 * (dt / rho) * f[dof];
132 data.setVMag(i, v.length());
136 executor.run(taskflow).get();