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

Method spreadQ

src/IB/IBInterpolantMethod.cpp:583–617  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

581} // spreadForce
582
583void
584IBInterpolantMethod::spreadQ(double data_time)
585{
586 int finest_ln = d_hierarchy->getFinestLevelNumber();
587 Pointer<PatchLevel<NDIM>> finest_level = d_hierarchy->getPatchLevel(finest_ln);
588 const IntVector<NDIM>& ratio = finest_level->getRatio();
589 Pointer<CartesianGridGeometry<NDIM>> grid_geom = d_hierarchy->getGridGeometry();
590 const double* dx0 = grid_geom->getDx();
591 std::array<double, NDIM> dx;
592 PetscScalar vol = 1.0;
593 for (unsigned i = 0; i < NDIM; ++i)
594 {
595 dx[i] = dx0[i] / ratio(i);
596 vol *= dx[i];
597 }
598
599 std::vector<Pointer<LData>>* X_data;
600 getPositionData(&X_data, data_time);
601 std::vector<Pointer<LData>>* Q_data;
602
603 for (auto& Q_pair : d_Q_current_data)
604 {
605 const std::string& name = Q_pair.first;
606 int q_data_idx = d_q_interp_idx[name];
607 zeroOutEulerianData(name, q_data_idx);
608
609 getQData(name, &Q_data, data_time);
610 Vec l_data_vec = (*Q_data)[finest_ln]->getVec();
611 VecScale(l_data_vec, vol);
612 d_l_data_manager->spread(q_data_idx, *Q_data, *X_data, (RobinPhysBdryPatchStrategy*)nullptr);
613 VecScale(l_data_vec, 1.0 / vol);
614 }
615
616 return;
617} // spreadQ
618
619void
620IBInterpolantMethod::copyEulerianDataToIntegrator(double data_time)

Callers 1

Calls 4

getPatchLevelMethod · 0.80
getVecMethod · 0.80
getFinestLevelNumberMethod · 0.45
spreadMethod · 0.45

Tested by

no test coverage detected