From a042e83c1d11f0742e8cf9d220fb5a0d43617345 Mon Sep 17 00:00:00 2001 From: Xiangyu Hu Date: Thu, 27 Jul 2023 20:01:50 +0200 Subject: [PATCH 1/4] use update directly --- .../diffusion_dynamics.h | 4 ++-- .../diffusion_dynamics.hpp | 21 ++++++------------- 2 files changed, 8 insertions(+), 17 deletions(-) diff --git a/src/shared/particle_dynamics/diffusion_reaction_dynamics/diffusion_dynamics.h b/src/shared/particle_dynamics/diffusion_reaction_dynamics/diffusion_dynamics.h index cfbcaa5234..0e71eb443c 100644 --- a/src/shared/particle_dynamics/diffusion_reaction_dynamics/diffusion_dynamics.h +++ b/src/shared/particle_dynamics/diffusion_reaction_dynamics/diffusion_dynamics.h @@ -112,7 +112,6 @@ class DiffusionRelaxationInner KernelGradientType kernel_gradient_; void initializeDiffusionChangeRate(size_t particle_i); void getDiffusionChangeRate(size_t particle_i, size_t particle_j, Vecd &e_ij, Real surface_area_ij); - virtual void updateSpeciesDiffusion(size_t particle_i, Real dt); public: typedef BaseInnerRelation BodyRelationType; @@ -258,7 +257,6 @@ class SecondStageRK2 : public FirstStageType { protected: StdVec> &diffusion_species_s_; - virtual void updateSpeciesDiffusion(size_t particle_i, Real dt) override; public: template @@ -267,6 +265,8 @@ class SecondStageRK2 : public FirstStageType : FirstStageType(body_relation, std::forward(contact_args)...), diffusion_species_s_(diffusion_species_s){}; virtual ~SecondStageRK2(){}; + + void update(size_t index_i, Real dt = 0.0); }; /** diff --git a/src/shared/particle_dynamics/diffusion_reaction_dynamics/diffusion_dynamics.hpp b/src/shared/particle_dynamics/diffusion_reaction_dynamics/diffusion_dynamics.hpp index 5f7f3a7760..d825837d67 100644 --- a/src/shared/particle_dynamics/diffusion_reaction_dynamics/diffusion_dynamics.hpp +++ b/src/shared/particle_dynamics/diffusion_reaction_dynamics/diffusion_dynamics.hpp @@ -75,12 +75,11 @@ void DiffusionRelaxationInner:: } //=================================================================================================// template -void DiffusionRelaxationInner:: - updateSpeciesDiffusion(size_t particle_i, Real dt) +void DiffusionRelaxationInner::update(size_t index_i, Real dt) { for (size_t m = 0; m < this->all_diffusions_.size(); ++m) { - (*this->diffusion_species_[m])[particle_i] += dt * (*this->diffusion_dt_[m])[particle_i]; + (*this->diffusion_species_[m])[index_i] += dt * (*this->diffusion_dt_[m])[index_i]; } } //=================================================================================================// @@ -104,13 +103,6 @@ void DiffusionRelaxationInner:: } } //=================================================================================================// -template -void DiffusionRelaxationInner:: - update(size_t index_i, Real dt) -{ - updateSpeciesDiffusion(index_i, dt); -} -//=================================================================================================// template BaseDiffusionRelaxationContact:: BaseDiffusionRelaxationContact(BaseContactRelation &contact_relation) @@ -331,14 +323,13 @@ void InitializationRK:: } //=================================================================================================// template -void SecondStageRK2:: - updateSpeciesDiffusion(size_t particle_i, Real dt) +void SecondStageRK2::update(size_t index_i, Real dt) { for (size_t m = 0; m < this->all_diffusions_.size(); ++m) { - (*this->diffusion_species_[m])[particle_i] = - 0.5 * diffusion_species_s_[m][particle_i] + - 0.5 * ((*this->diffusion_species_[m])[particle_i] + dt * (*this->diffusion_dt_[m])[particle_i]); + (*this->diffusion_species_[m])[index_i] = + 0.5 * diffusion_species_s_[m][index_i] + + 0.5 * ((*this->diffusion_species_[m])[index_i] + dt * (*this->diffusion_dt_[m])[index_i]); } } //=================================================================================================// From acc2105081d65919c77063afb7895e5764c9beff Mon Sep 17 00:00:00 2001 From: Xiangyu Hu Date: Thu, 27 Jul 2023 20:07:08 +0200 Subject: [PATCH 2/4] use first stage update --- .../diffusion_reaction_dynamics/diffusion_dynamics.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/shared/particle_dynamics/diffusion_reaction_dynamics/diffusion_dynamics.hpp b/src/shared/particle_dynamics/diffusion_reaction_dynamics/diffusion_dynamics.hpp index d825837d67..ef5ca74c7f 100644 --- a/src/shared/particle_dynamics/diffusion_reaction_dynamics/diffusion_dynamics.hpp +++ b/src/shared/particle_dynamics/diffusion_reaction_dynamics/diffusion_dynamics.hpp @@ -325,11 +325,11 @@ void InitializationRK:: template void SecondStageRK2::update(size_t index_i, Real dt) { + FirstStageType::update(index_i, dt); for (size_t m = 0; m < this->all_diffusions_.size(); ++m) { - (*this->diffusion_species_[m])[index_i] = - 0.5 * diffusion_species_s_[m][index_i] + - 0.5 * ((*this->diffusion_species_[m])[index_i] + dt * (*this->diffusion_dt_[m])[index_i]); + (*this->diffusion_species_[m])[index_i] = 0.5 * diffusion_species_s_[m][index_i] + + 0.5 * (*this->diffusion_species_[m])[index_i]; } } //=================================================================================================// From 39a6482f2e43c46fe285476d9e9c121440ecacf3 Mon Sep 17 00:00:00 2001 From: Xiangyu Hu Date: Thu, 27 Jul 2023 20:14:57 +0200 Subject: [PATCH 3/4] move update to base --- .../diffusion_dynamics.h | 6 +++--- .../diffusion_dynamics.hpp | 21 ++++++++++--------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/shared/particle_dynamics/diffusion_reaction_dynamics/diffusion_dynamics.h b/src/shared/particle_dynamics/diffusion_reaction_dynamics/diffusion_dynamics.h index 0e71eb443c..572ad44b18 100644 --- a/src/shared/particle_dynamics/diffusion_reaction_dynamics/diffusion_dynamics.h +++ b/src/shared/particle_dynamics/diffusion_reaction_dynamics/diffusion_dynamics.h @@ -74,12 +74,13 @@ class BaseDiffusionRelaxation explicit BaseDiffusionRelaxation(SPHBody &sph_body); virtual ~BaseDiffusionRelaxation(){}; StdVec &AllDiffusions() { return material_.AllDiffusions(); }; + void update(size_t index_i, Real dt = 0.0); }; class KernelGradientInner { public: - KernelGradientInner(BaseParticles *inner_particles){}; + explicit KernelGradientInner(BaseParticles *inner_particles){}; Vecd operator()(size_t index_i, size_t index_j, Real dW_ijV_j, const Vecd &e_ij) { return dW_ijV_j * e_ij; @@ -91,7 +92,7 @@ class CorrectedKernelGradientInner StdLargeVec &B_; public: - CorrectedKernelGradientInner(BaseParticles *inner_particles) + explicit CorrectedKernelGradientInner(BaseParticles *inner_particles) : B_(*inner_particles->getVariableByName("CorrectionMatrix")){}; Vecd operator()(size_t index_i, size_t index_j, Real dW_ijV_j, const Vecd &e_ij) { @@ -118,7 +119,6 @@ class DiffusionRelaxationInner explicit DiffusionRelaxationInner(BaseInnerRelation &inner_relation); virtual ~DiffusionRelaxationInner(){}; inline void interaction(size_t index_i, Real dt = 0.0); - void update(size_t index_i, Real dt = 0.0); }; class KernelGradientContact diff --git a/src/shared/particle_dynamics/diffusion_reaction_dynamics/diffusion_dynamics.hpp b/src/shared/particle_dynamics/diffusion_reaction_dynamics/diffusion_dynamics.hpp index ef5ca74c7f..d7bf2c42cd 100644 --- a/src/shared/particle_dynamics/diffusion_reaction_dynamics/diffusion_dynamics.hpp +++ b/src/shared/particle_dynamics/diffusion_reaction_dynamics/diffusion_dynamics.hpp @@ -42,7 +42,17 @@ BaseDiffusionRelaxation:: std::string &diffusion_species_name = all_species_names[diffusion_species_indexes[i]]; diffusion_dt_[i] = this->particles_->template registerSharedVariable(diffusion_species_name + "ChangeRate"); } -} //=================================================================================================// +} +//=================================================================================================// +template +void BaseDiffusionRelaxation::update(size_t index_i, Real dt) +{ + for (size_t m = 0; m < this->all_diffusions_.size(); ++m) + { + (*this->diffusion_species_[m])[index_i] += dt * (*this->diffusion_dt_[m])[index_i]; + } +} +//=================================================================================================// template DiffusionRelaxationInner:: DiffusionRelaxationInner(BaseInnerRelation &inner_relation) @@ -75,15 +85,6 @@ void DiffusionRelaxationInner:: } //=================================================================================================// template -void DiffusionRelaxationInner::update(size_t index_i, Real dt) -{ - for (size_t m = 0; m < this->all_diffusions_.size(); ++m) - { - (*this->diffusion_species_[m])[index_i] += dt * (*this->diffusion_dt_[m])[index_i]; - } -} -//=================================================================================================// -template void DiffusionRelaxationInner:: interaction(size_t index_i, Real dt) { From c200d5877ab23e0b7c349bd26d2a7a5a10f66361 Mon Sep 17 00:00:00 2001 From: Xiangyu Hu Date: Thu, 27 Jul 2023 20:35:50 +0200 Subject: [PATCH 4/4] to test all --- .../diffusion_dynamics.h | 6 ++--- .../diffusion_dynamics.hpp | 23 ++++++++----------- .../diffusion_NeumannBC.h | 6 +++-- .../diffusion_RobinBC.h | 17 +++++++------- 4 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/shared/particle_dynamics/diffusion_reaction_dynamics/diffusion_dynamics.h b/src/shared/particle_dynamics/diffusion_reaction_dynamics/diffusion_dynamics.h index 572ad44b18..3d76f945de 100644 --- a/src/shared/particle_dynamics/diffusion_reaction_dynamics/diffusion_dynamics.h +++ b/src/shared/particle_dynamics/diffusion_reaction_dynamics/diffusion_dynamics.h @@ -74,6 +74,7 @@ class BaseDiffusionRelaxation explicit BaseDiffusionRelaxation(SPHBody &sph_body); virtual ~BaseDiffusionRelaxation(){}; StdVec &AllDiffusions() { return material_.AllDiffusions(); }; + void initialization(size_t index_i, Real dt = 0.0); void update(size_t index_i, Real dt = 0.0); }; @@ -111,7 +112,6 @@ class DiffusionRelaxationInner { protected: KernelGradientType kernel_gradient_; - void initializeDiffusionChangeRate(size_t particle_i); void getDiffusionChangeRate(size_t particle_i, size_t particle_j, Vecd &e_ij, Real surface_area_ij); public: @@ -280,8 +280,8 @@ class DiffusionRelaxationRK2 : public BaseDynamics protected: StdVec> diffusion_species_s_; /**< Intermediate state */ SimpleDynamics> rk2_initialization_; - InteractionWithUpdate rk2_1st_stage_; - InteractionWithUpdate> rk2_2nd_stage_; + Dynamics1Level rk2_1st_stage_; + Dynamics1Level> rk2_2nd_stage_; StdVec all_diffusions_; public: diff --git a/src/shared/particle_dynamics/diffusion_reaction_dynamics/diffusion_dynamics.hpp b/src/shared/particle_dynamics/diffusion_reaction_dynamics/diffusion_dynamics.hpp index d7bf2c42cd..1e016e65f0 100644 --- a/src/shared/particle_dynamics/diffusion_reaction_dynamics/diffusion_dynamics.hpp +++ b/src/shared/particle_dynamics/diffusion_reaction_dynamics/diffusion_dynamics.hpp @@ -42,7 +42,16 @@ BaseDiffusionRelaxation:: std::string &diffusion_species_name = all_species_names[diffusion_species_indexes[i]]; diffusion_dt_[i] = this->particles_->template registerSharedVariable(diffusion_species_name + "ChangeRate"); } -} +} +//=================================================================================================// +template +void BaseDiffusionRelaxation::initialization(size_t index_i, Real dt) +{ + for (size_t m = 0; m < this->all_diffusions_.size(); ++m) + { + (*this->diffusion_dt_[m])[index_i] = 0; + } +} //=================================================================================================// template void BaseDiffusionRelaxation::update(size_t index_i, Real dt) @@ -61,16 +70,6 @@ DiffusionRelaxationInner:: kernel_gradient_(this->particles_) {} //=================================================================================================// template -void DiffusionRelaxationInner:: - initializeDiffusionChangeRate(size_t particle_i) -{ - for (size_t m = 0; m < this->all_diffusions_.size(); ++m) - { - (*this->diffusion_dt_[m])[particle_i] = 0; - } -} -//=================================================================================================// -template void DiffusionRelaxationInner:: getDiffusionChangeRate(size_t particle_i, size_t particle_j, Vecd &e_ij, Real surface_area_ij) { @@ -89,8 +88,6 @@ void DiffusionRelaxationInner:: interaction(size_t index_i, Real dt) { Neighborhood &inner_neighborhood = this->inner_configuration_[index_i]; - - initializeDiffusionChangeRate(index_i); for (size_t n = 0; n != inner_neighborhood.current_size_; ++n) { size_t index_j = inner_neighborhood.j_[n]; diff --git a/tests/2d_examples/test_2d_diffusion_NeumannBC/diffusion_NeumannBC.h b/tests/2d_examples/test_2d_diffusion_NeumannBC/diffusion_NeumannBC.h index 54cb41eb1d..6c73c8c6bf 100644 --- a/tests/2d_examples/test_2d_diffusion_NeumannBC/diffusion_NeumannBC.h +++ b/tests/2d_examples/test_2d_diffusion_NeumannBC/diffusion_NeumannBC.h @@ -129,7 +129,8 @@ class DirichletWallBoundaryInitialCondition size_t phi_; public: - DirichletWallBoundaryInitialCondition(SolidBody &diffusion_body) : DiffusionReactionInitialCondition(diffusion_body) + explicit DirichletWallBoundaryInitialCondition(SolidBody &diffusion_body) + : DiffusionReactionInitialCondition(diffusion_body) { phi_ = particles_->diffusion_reaction_material_.AllSpeciesIndexMap()["Phi"]; } @@ -157,7 +158,8 @@ class NeumannWallBoundaryInitialCondition StdLargeVec &heat_flux_; public: - NeumannWallBoundaryInitialCondition(SolidBody &diffusion_body) : DiffusionReactionInitialCondition(diffusion_body), + explicit NeumannWallBoundaryInitialCondition(SolidBody &diffusion_body) + : DiffusionReactionInitialCondition(diffusion_body), heat_flux_(*(particles_->getVariableByName("HeatFlux"))) { phi_ = particles_->diffusion_reaction_material_.AllSpeciesIndexMap()["Phi"]; diff --git a/tests/2d_examples/test_2d_diffusion_RobinBC/diffusion_RobinBC.h b/tests/2d_examples/test_2d_diffusion_RobinBC/diffusion_RobinBC.h index c9d8073ae8..343d019e95 100644 --- a/tests/2d_examples/test_2d_diffusion_RobinBC/diffusion_RobinBC.h +++ b/tests/2d_examples/test_2d_diffusion_RobinBC/diffusion_RobinBC.h @@ -129,7 +129,8 @@ class DirichletWallBoundaryInitialCondition size_t phi_; public: - DirichletWallBoundaryInitialCondition(SolidBody &diffusion_body) : DiffusionReactionInitialCondition(diffusion_body) + explicit DirichletWallBoundaryInitialCondition(SolidBody &diffusion_body) + : DiffusionReactionInitialCondition(diffusion_body) { phi_ = particles_->diffusion_reaction_material_.AllSpeciesIndexMap()["Phi"]; } @@ -158,9 +159,10 @@ class RobinWallBoundaryInitialCondition Real &T_infinity_; public: - RobinWallBoundaryInitialCondition(SolidBody &diffusion_body) : DiffusionReactionInitialCondition(diffusion_body), - convection_(*(this->particles_->template getVariableByName("Convection"))), - T_infinity_(*(this->particles_->template getGlobalVariableByName("T_infinity"))) + explicit RobinWallBoundaryInitialCondition(SolidBody &diffusion_body) + : DiffusionReactionInitialCondition(diffusion_body), + convection_(*(this->particles_->template getVariableByName("Convection"))), + T_infinity_(*(this->particles_->template getGlobalVariableByName("T_infinity"))) { phi_ = particles_->diffusion_reaction_material_.AllSpeciesIndexMap()["Phi"]; } @@ -200,7 +202,7 @@ class DiffusionBodyRelaxation class TemperatureObserverParticleGenerator : public ObserverParticleGenerator { public: - TemperatureObserverParticleGenerator(SPHBody &sph_body) : ObserverParticleGenerator(sph_body) + explicit TemperatureObserverParticleGenerator(SPHBody &sph_body) : ObserverParticleGenerator(sph_body) { /** A line of measuring points at the middle line. */ size_t number_of_observation_points = 5; @@ -209,9 +211,8 @@ class TemperatureObserverParticleGenerator : public ObserverParticleGenerator for (size_t i = 0; i < number_of_observation_points; ++i) { - Vec2d point_coordinate(0.5 * L, range_of_measure * Real(i) / - Real(number_of_observation_points - 1) + - start_of_measure); + Vec2d point_coordinate( + 0.5 * L, range_of_measure * Real(i) / Real(number_of_observation_points - 1) + start_of_measure); positions_.push_back(point_coordinate); } }