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..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,12 +74,14 @@ 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); }; 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 +93,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) { @@ -110,16 +112,13 @@ 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); - virtual void updateSpeciesDiffusion(size_t particle_i, Real dt); public: typedef BaseInnerRelation BodyRelationType; 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 @@ -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); }; /** @@ -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 5f7f3a7760..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,45 +42,44 @@ 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 -DiffusionRelaxationInner:: - DiffusionRelaxationInner(BaseInnerRelation &inner_relation) - : BaseDiffusionRelaxation(inner_relation.getSPHBody()), - DataDelegateInner(inner_relation), - kernel_gradient_(this->particles_) {} +} //=================================================================================================// -template -void DiffusionRelaxationInner:: - initializeDiffusionChangeRate(size_t particle_i) +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])[particle_i] = 0; + (*this->diffusion_dt_[m])[index_i] = 0; } } //=================================================================================================// -template -void DiffusionRelaxationInner:: - getDiffusionChangeRate(size_t particle_i, size_t particle_j, Vecd &e_ij, Real surface_area_ij) +template +void BaseDiffusionRelaxation::update(size_t index_i, Real dt) { for (size_t m = 0; m < this->all_diffusions_.size(); ++m) { - Real diff_coff_ij = - this->all_diffusions_[m]->getInterParticleDiffusionCoff(particle_i, particle_j, e_ij); - StdLargeVec &gradient_species = *this->gradient_species_[m]; - Real phi_ij = gradient_species[particle_i] - gradient_species[particle_j]; - (*this->diffusion_dt_[m])[particle_i] += diff_coff_ij * phi_ij * surface_area_ij; + (*this->diffusion_species_[m])[index_i] += dt * (*this->diffusion_dt_[m])[index_i]; } } //=================================================================================================// template +DiffusionRelaxationInner:: + DiffusionRelaxationInner(BaseInnerRelation &inner_relation) + : BaseDiffusionRelaxation(inner_relation.getSPHBody()), + DataDelegateInner(inner_relation), + kernel_gradient_(this->particles_) {} +//=================================================================================================// +template void DiffusionRelaxationInner:: - updateSpeciesDiffusion(size_t particle_i, Real dt) + getDiffusionChangeRate(size_t particle_i, size_t particle_j, Vecd &e_ij, Real surface_area_ij) { for (size_t m = 0; m < this->all_diffusions_.size(); ++m) { - (*this->diffusion_species_[m])[particle_i] += dt * (*this->diffusion_dt_[m])[particle_i]; + Real diff_coff_ij = + this->all_diffusions_[m]->getInterParticleDiffusionCoff(particle_i, particle_j, e_ij); + StdLargeVec &gradient_species = *this->gradient_species_[m]; + Real phi_ij = gradient_species[particle_i] - gradient_species[particle_j]; + (*this->diffusion_dt_[m])[particle_i] += diff_coff_ij * phi_ij * 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]; @@ -104,13 +101,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 +321,13 @@ void InitializationRK:: } //=================================================================================================// template -void SecondStageRK2:: - updateSpeciesDiffusion(size_t particle_i, Real dt) +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])[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]; } } //=================================================================================================// 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); } }