| 581 | } // spreadForce |
| 582 | |
| 583 | void |
| 584 | IBInterpolantMethod::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 | |
| 619 | void |
| 620 | IBInterpolantMethod::copyEulerianDataToIntegrator(double data_time) |
no test coverage detected