MCPcopy Create free account
hub / github.com/IBAMR/IBAMR / interpolateVelocity

Method interpolateVelocity

src/IB/GeneralizedIBMethod.cpp:245–305  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

243} // postprocessIntegrateData
244
245void
246GeneralizedIBMethod::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,

Callers

nothing calls this directly

Calls 5

rel_equal_epsFunction · 0.85
getVelocityVariableMethod · 0.45
curlMethod · 0.45
interpMethod · 0.45
getFinestLevelNumberMethod · 0.45

Tested by

no test coverage detected