Skip to content

Commit

Permalink
minor
Browse files Browse the repository at this point in the history
  • Loading branch information
Franguuuu committed Sep 2, 2024
1 parent a31e1a4 commit 32f67a7
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 22 deletions.
62 changes: 40 additions & 22 deletions src/shared/geometries/level_set.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,15 @@ MultilevelLevelSet::MultilevelLevelSet(
FinishDataPackages finish_data_packages{*mesh_data_set_[0], shape_, kernel_, global_h_ratio};
initialize_data_in_a_cell.exec();
finish_data_packages.exec();
probe_signed_distance_set_.push_back(
probe_signed_distance_vector_keeper_
.template createPtr<MeshCalculateDynamics<Real, ProbeSignedDistance>>(*mesh_data_set_[0]));
probe_normal_direction_set_.push_back(
probe_normal_direction_vector_keeper_
.template createPtr<MeshCalculateDynamics<Vecd, ProbeNormalDirection>>(*mesh_data_set_[0]));
probe_level_set_gradient_set_.push_back(
probe_level_set_gradient_vector_keeper_
.template createPtr<MeshCalculateDynamics<Vecd, ProbeLevelSetGradient>>(*mesh_data_set_[0]));

for (size_t level = 1; level != total_levels_; ++level)
{
Expand All @@ -46,7 +55,20 @@ MultilevelLevelSet::MultilevelLevelSet(
FinishDataPackages finish_data_packages{*mesh_data_set_[level], shape_, kernel_, global_h_ratio};
initialize_data_in_a_cell_from_coarse.exec();
finish_data_packages.exec();

probe_signed_distance_set_.push_back(
probe_signed_distance_vector_keeper_
.template createPtr<MeshCalculateDynamics<Real, ProbeSignedDistance>>(*mesh_data_set_[level]));
probe_normal_direction_set_.push_back(
probe_normal_direction_vector_keeper_
.template createPtr<MeshCalculateDynamics<Vecd, ProbeNormalDirection>>(*mesh_data_set_[level]));
probe_level_set_gradient_set_.push_back(
probe_level_set_gradient_vector_keeper_
.template createPtr<MeshCalculateDynamics<Vecd, ProbeLevelSetGradient>>(*mesh_data_set_[level]));
}

clean_interface = new CleanInterface{*mesh_data_set_.back(), kernel_, global_h_ratio_vec_.back()};
correct_topology = new CorrectTopology{*mesh_data_set_.back(), kernel_, global_h_ratio_vec_.back()};
}
//=================================================================================================//
MultilevelLevelSet::MultilevelLevelSet(
Expand All @@ -71,6 +93,19 @@ MultilevelLevelSet::MultilevelLevelSet(
FinishDataPackages finish_data_packages{*mesh_data_set_[0], shape_, kernel_, global_h_ratio};
initialize_data_in_a_cell_from_coarse.exec();
finish_data_packages.exec();

probe_signed_distance_set_.push_back(
probe_signed_distance_vector_keeper_
.template createPtr<MeshCalculateDynamics<Real, ProbeSignedDistance>>(*mesh_data_set_[0]));
probe_normal_direction_set_.push_back(
probe_normal_direction_vector_keeper_
.template createPtr<MeshCalculateDynamics<Vecd, ProbeNormalDirection>>(*mesh_data_set_[0]));
probe_level_set_gradient_set_.push_back(
probe_level_set_gradient_vector_keeper_
.template createPtr<MeshCalculateDynamics<Vecd, ProbeLevelSetGradient>>(*mesh_data_set_[0]));

clean_interface = new CleanInterface{*mesh_data_set_.back(), kernel_, global_h_ratio_vec_.back()};
correct_topology = new CorrectTopology{*mesh_data_set_.back(), kernel_, global_h_ratio_vec_.back()};
}
//=================================================================================================//
size_t MultilevelLevelSet::getCoarseLevel(Real h_ratio)
Expand All @@ -87,32 +122,27 @@ size_t MultilevelLevelSet::getCoarseLevel(Real h_ratio)
//=================================================================================================//
void MultilevelLevelSet::cleanInterface(Real small_shift_factor)
{
CleanInterface clean_interface{*mesh_data_set_.back(), kernel_, global_h_ratio_vec_.back()};
clean_interface.exec(small_shift_factor);
clean_interface->exec(small_shift_factor);
}
//=============================================================================================//
void MultilevelLevelSet::correctTopology(Real small_shift_factor)
{
CorrectTopology correct_topology{*mesh_data_set_.back(), kernel_, global_h_ratio_vec_.back()};
correct_topology.exec(small_shift_factor);
correct_topology->exec(small_shift_factor);
}
//=============================================================================================//
Real MultilevelLevelSet::probeSignedDistance(const Vecd &position)
{
MeshCalculateDynamics<Real, ProbeSignedDistance> probe_signed_distance{*mesh_data_set_[getProbeLevel(position)]};
return probe_signed_distance.exec(position);
return probe_signed_distance_set_[getProbeLevel(position)]->exec(position);
}
//=============================================================================================//
Vecd MultilevelLevelSet::probeNormalDirection(const Vecd &position)
{
MeshCalculateDynamics<Vecd, ProbeNormalDirection> probe_normal_direction{*mesh_data_set_[getProbeLevel(position)]};
return probe_normal_direction.exec(position);
return probe_normal_direction_set_[getProbeLevel(position)]->exec(position);
}
//=============================================================================================//
Vecd MultilevelLevelSet::probeLevelSetGradient(const Vecd &position)
{
MeshCalculateDynamics<Vecd, ProbeLevelSetGradient> probe_levelset_gradient{*mesh_data_set_[getProbeLevel(position)]};
return probe_levelset_gradient.exec(position);
return probe_level_set_gradient_set_[getProbeLevel(position)]->exec(position);
}
//=============================================================================================//
size_t MultilevelLevelSet::getProbeLevel(const Vecd &position)
Expand All @@ -125,12 +155,6 @@ size_t MultilevelLevelSet::getProbeLevel(const Vecd &position)
return 0;
}
//=================================================================================================//
Real MultilevelLevelSet::probeKernelIntegral(const Vecd &position)
{
MeshCalculateDynamics<Real, ProbeKernelIntegral> refine_probe{*mesh_data_set_[0]};
return refine_probe.exec(position);
}
//=================================================================================================//
Real MultilevelLevelSet::probeKernelIntegral(const Vecd &position, Real h_ratio)
{
if(mesh_data_set_.size() == 1){
Expand All @@ -148,12 +172,6 @@ Real MultilevelLevelSet::probeKernelIntegral(const Vecd &position, Real h_ratio)
return alpha * coarse_level_value + (1.0 - alpha) * fine_level_value;
}
//=================================================================================================//
Vecd MultilevelLevelSet::probeKernelGradientIntegral(const Vecd &position)
{
MeshCalculateDynamics<Vecd, ProbeKernelGradientIntegral> refine_probe{*mesh_data_set_[0]};
return refine_probe.exec(position);
}
//=================================================================================================//
Vecd MultilevelLevelSet::probeKernelGradientIntegral(const Vecd &position, Real h_ratio)
{
if(mesh_data_set_.size() == 1){
Expand Down
9 changes: 9 additions & 0 deletions src/shared/geometries/level_set.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,16 @@ class MultilevelLevelSet : public BaseMeshField
size_t total_levels_; /**< level 0 is the coarsest */
StdVec<Real> global_h_ratio_vec_;
StdVec<MeshWithGridDataPackagesType *> mesh_data_set_;
StdVec<MeshCalculateDynamics<Real, ProbeSignedDistance> *> probe_signed_distance_set_;
StdVec<MeshCalculateDynamics<Vecd, ProbeNormalDirection> *> probe_normal_direction_set_;
StdVec<MeshCalculateDynamics<Vecd, ProbeLevelSetGradient> *> probe_level_set_gradient_set_;
UniquePtrsKeeper<MeshWithGridDataPackagesType> mesh_data_ptr_vector_keeper_;
UniquePtrsKeeper<MeshCalculateDynamics<Real, ProbeSignedDistance>> probe_signed_distance_vector_keeper_;
UniquePtrsKeeper<MeshCalculateDynamics<Vecd, ProbeNormalDirection>> probe_normal_direction_vector_keeper_;
UniquePtrsKeeper<MeshCalculateDynamics<Vecd, ProbeLevelSetGradient>> probe_level_set_gradient_vector_keeper_;

CleanInterface *clean_interface;
CorrectTopology *correct_topology;
};
} // namespace SPH
#endif // LEVEL_SET_H

0 comments on commit 32f67a7

Please sign in to comment.