| 243 | } // postprocessIntegrateData |
| 244 | |
| 245 | void |
| 246 | GeneralizedIBMethod::interpolateVelocity(const int u_data_idx, |
| 247 | const std::vector<Pointer<CoarsenSchedule<NDIM>>>& u_synch_scheds, |
| 248 | const std::vector<Pointer<RefineSchedule<NDIM>>>& u_ghost_fill_scheds, |
| 249 | const double data_time) |
| 250 | { |
| 251 | // Interpolate the linear velocities. |
| 252 | IBMethod::interpolateVelocity(u_data_idx, u_synch_scheds, u_ghost_fill_scheds, data_time); |
| 253 | |
| 254 | // Interpolate the angular velocities. |
| 255 | std::vector<Pointer<LData>>* W_data = nullptr; |
| 256 | if (IBTK::rel_equal_eps(data_time, d_current_time)) |
| 257 | { |
| 258 | W_data = &d_W_current_data; |
| 259 | } |
| 260 | else if (IBTK::rel_equal_eps(data_time, d_half_time)) |
| 261 | { |
| 262 | TBOX_ERROR(d_object_name << "::interpolateVelocity():\n" |
| 263 | << " time-stepping type MIDPOINT_RULE not supported by " |
| 264 | "class GeneralizedIBMethod;\n" |
| 265 | << " use TRAPEZOIDAL_RULE instead.\n"); |
| 266 | } |
| 267 | else if (IBTK::rel_equal_eps(data_time, d_new_time)) |
| 268 | { |
| 269 | W_data = &d_W_new_data; |
| 270 | } |
| 271 | TBOX_ASSERT(W_data); |
| 272 | |
| 273 | Pointer<Variable<NDIM>> u_var = d_ib_solver->getVelocityVariable(); |
| 274 | Pointer<CellVariable<NDIM, double>> u_cc_var = u_var; |
| 275 | Pointer<SideVariable<NDIM, double>> u_sc_var = u_var; |
| 276 | if (u_cc_var) |
| 277 | { |
| 278 | Pointer<CellVariable<NDIM, double>> w_cc_var = d_w_var; |
| 279 | getHierarchyMathOps()->curl(d_w_idx, w_cc_var, u_data_idx, u_cc_var, nullptr, data_time); |
| 280 | } |
| 281 | else if (u_sc_var) |
| 282 | { |
| 283 | Pointer<SideVariable<NDIM, double>> w_sc_var = d_w_var; |
| 284 | getHierarchyMathOps()->curl(d_w_idx, w_sc_var, u_data_idx, u_sc_var, nullptr, data_time); |
| 285 | } |
| 286 | else |
| 287 | { |
| 288 | TBOX_ERROR(d_object_name << "::interpolateVelocity():\n" |
| 289 | << " unsupported velocity data centering" << std::endl); |
| 290 | } |
| 291 | std::vector<Pointer<LData>>* X_LE_data; |
| 292 | bool* X_LE_needs_ghost_fill; |
| 293 | getLECouplingPositionData(&X_LE_data, &X_LE_needs_ghost_fill, data_time); |
| 294 | getVelocityHierarchyDataOps()->scale(d_w_idx, 0.5, d_w_idx); |
| 295 | d_l_data_manager->interp(d_w_idx, |
| 296 | *W_data, |
| 297 | *X_LE_data, |
| 298 | std::vector<Pointer<CoarsenSchedule<NDIM>>>(), |
| 299 | getGhostfillRefineSchedules(d_object_name + "::w"), |
| 300 | data_time); |
| 301 | resetAnchorPointValues(*W_data, |
| 302 | /*coarsest_ln*/ 0, |
nothing calls this directly
no test coverage detected