Skip to content

Commit

Permalink
all compiled
Browse files Browse the repository at this point in the history
  • Loading branch information
Xiangyu-Hu committed Jul 13, 2024
1 parent d44708f commit ba69ad2
Show file tree
Hide file tree
Showing 15 changed files with 119 additions and 119 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ class ComputeTotalErrorOrPositiveParameter
public DataDelegateSimple
{
protected:
StdLargeVec<Real> &variable_;
Real *variable_;

public:
ComputeTotalErrorOrPositiveParameter(DynamicsIdentifier &identifier, const std::string &variable_name)
Expand All @@ -74,7 +74,7 @@ class ComputeMaximumError
public DataDelegateSimple
{
protected:
StdLargeVec<Real> &variable_;
Real *variable_;

public:
ComputeMaximumError(DynamicsIdentifier &identifier, const std::string &variable_name)
Expand Down Expand Up @@ -107,7 +107,7 @@ class ThermalConductivityConstraint
protected:
Real initial_thermal_conductivity_;
Real new_average_thermal_conductivity_;
StdLargeVec<Real> &local_diffusivity_;
Real *local_diffusivity_;
void update(size_t index_i, Real dt = 0.0);
};
} // namespace SPH
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,29 +11,29 @@
namespace SPH
{
//=================================================================================================//
template <typename VariableType>
OptimizationBySplittingAlgorithmBase<VariableType>::
template <typename DataType>
OptimizationBySplittingAlgorithmBase<DataType>::
OptimizationBySplittingAlgorithmBase(BaseInnerRelation &inner_relation, const std::string &variable_name)
: LocalDynamics(inner_relation.getSPHBody()), DataDelegateInner(inner_relation),
diffusion_(DynamicCast<LocalIsotropicDiffusion>(this, sph_body_.getBaseMaterial())),
Vol_(this->particles_->template getVariableDataByName<Real>("VolumetricMeasure")),
mass_(this->particles_->template getVariableDataByName<Real>("Mass")),
normal_vector_(this->particles_->template getVariableDataByName<Vecd>("NormalDirection")),
variable_(*(this->particles_->template registerSharedVariable<VariableType>(variable_name))),
heat_flux_(*(this->particles_->template registerSharedVariable<Real>("HeatFlux"))),
heat_source_(*(this->particles_->template registerSharedVariable<Real>("HeatSource"))),
splitting_index_(*(this->particles_->template registerSharedVariable<int>("SplittingIndex"))),
species_modified_(*(this->particles_->template registerSharedVariable<Real>("SpeciesModified"))),
species_recovery_(*(this->particles_->template registerSharedVariable<Real>("SpeciesRecovery"))),
parameter_recovery_(*(this->particles_->template registerSharedVariable<Real>("ParameterRecovery"))),
eta_regularization_(*(this->particles_->template registerSharedVariable<Real>("EtaRegularization"))),
residual_T_local_(*(this->particles_->template registerSharedVariable<Real>("ResidualTLocal"))),
residual_T_global_(*(this->particles_->template registerSharedVariable<Real>("ResidualTGlobal"))),
residual_k_local_(*(this->particles_->template registerSharedVariable<Real>("ResidualKLocal"))),
residual_k_global_(*(this->particles_->template registerSharedVariable<Real>("ResidualKGlobal"))),
variation_local_(*(this->particles_->template registerSharedVariable<Real>("VariationLocal"))),
variation_global_(*(this->particles_->template registerSharedVariable<Real>("VariationGlobal"))),
residual_after_splitting_(*(this->particles_->template registerSharedVariable<Real>("ResidualAfterSplitting")))
variable_(this->particles_->template registerSharedVariable<DataType>(variable_name)),
heat_flux_(this->particles_->template registerSharedVariable<Real>("HeatFlux")),
heat_source_(this->particles_->template registerSharedVariable<Real>("HeatSource")),
splitting_index_(this->particles_->template registerSharedVariable<int>("SplittingIndex")),
species_modified_(this->particles_->template registerSharedVariable<Real>("SpeciesModified")),
species_recovery_(this->particles_->template registerSharedVariable<Real>("SpeciesRecovery")),
parameter_recovery_(this->particles_->template registerSharedVariable<Real>("ParameterRecovery")),
eta_regularization_(this->particles_->template registerSharedVariable<Real>("EtaRegularization")),
residual_T_local_(this->particles_->template registerSharedVariable<Real>("ResidualTLocal")),
residual_T_global_(this->particles_->template registerSharedVariable<Real>("ResidualTGlobal")),
residual_k_local_(this->particles_->template registerSharedVariable<Real>("ResidualKLocal")),
residual_k_global_(this->particles_->template registerSharedVariable<Real>("ResidualKGlobal")),
variation_local_(this->particles_->template registerSharedVariable<Real>("VariationLocal")),
variation_global_(this->particles_->template registerSharedVariable<Real>("VariationGlobal")),
residual_after_splitting_(this->particles_->template registerSharedVariable<Real>("ResidualAfterSplitting"))
{
this->particles_->template addVariableToWrite<Real>("HeatFlux");
this->particles_->template addVariableToWrite<Real>("HeatSource");
Expand All @@ -52,21 +52,21 @@ OptimizationBySplittingAlgorithmBase<VariableType>::
this->particles_->template addVariableToRestart<Real>("ThermalConductivity");
}
//=================================================================================================//
template <typename VariableType>
RegularizationByDiffusionAnalogy<VariableType>::
template <typename DataType>
RegularizationByDiffusionAnalogy<DataType>::
RegularizationByDiffusionAnalogy(BaseInnerRelation &inner_relation, const std::string &variable_name,
Real initial_eta, Real variation)
: OptimizationBySplittingAlgorithmBase<VariableType>(inner_relation, variable_name),
: OptimizationBySplittingAlgorithmBase<DataType>(inner_relation, variable_name),
initial_eta_(initial_eta), maximum_variation_(variation), averaged_variation_(variation) {}
//=================================================================================================//
template <typename VariableType>
ErrorAndParameters<VariableType> RegularizationByDiffusionAnalogy<VariableType>::
template <typename DataType>
ErrorAndParameters<DataType> RegularizationByDiffusionAnalogy<DataType>::
computeVariationAndParameters(size_t index_i, Real dt)
{
Real Vol_i = this->Vol_[index_i];
Real mass_i = this->mass_[index_i];
VariableType &variable_i = this->variable_[index_i];
ErrorAndParameters<VariableType> error_and_parameters;
DataType &variable_i = this->variable_[index_i];
ErrorAndParameters<DataType> error_and_parameters;
Neighborhood &inner_neighborhood = this->inner_configuration_[index_i];
for (size_t n = 0; n != inner_neighborhood.current_size_; ++n)
{
Expand All @@ -78,7 +78,7 @@ ErrorAndParameters<VariableType> RegularizationByDiffusionAnalogy<VariableType>:
// this->eta_regularization_[index_i] = initial_eta_ * abs(this->variation_local_[index_i] + TinyReal) / abs(maximum_variation_);
this->eta_regularization_[index_i] = initial_eta_; // uniform coefficient.

VariableType variable_derivative = (variable_i - this->variable_[index_j]);
DataType variable_derivative = (variable_i - this->variable_[index_j]);
Real parameter_b = 2.0 * this->eta_regularization_[index_i] * dW_ijV_j * Vol_i * dt / r_ij_;

error_and_parameters.error_ -= variable_derivative * parameter_b;
Expand All @@ -89,20 +89,20 @@ ErrorAndParameters<VariableType> RegularizationByDiffusionAnalogy<VariableType>:
return error_and_parameters;
}
//=================================================================================================//
template <typename VariableType>
void RegularizationByDiffusionAnalogy<VariableType>::
updateStatesByVariation(size_t index_i, Real dt, const ErrorAndParameters<VariableType> &error_and_parameters)
template <typename DataType>
void RegularizationByDiffusionAnalogy<DataType>::
updateStatesByVariation(size_t index_i, Real dt, const ErrorAndParameters<DataType> &error_and_parameters)
{
Real parameter_l = error_and_parameters.a_ * error_and_parameters.a_ + error_and_parameters.c_;
VariableType parameter_k = error_and_parameters.error_ / (parameter_l + TinyReal);
DataType parameter_k = error_and_parameters.error_ / (parameter_l + TinyReal);
this->variable_[index_i] += parameter_k * error_and_parameters.a_;
if (this->variable_[index_i] < 0.1)
{
this->variable_[index_i] = 0.1;
} // set lower bound.

Real Vol_i = this->Vol_[index_i];
VariableType &variable_i = this->variable_[index_i];
DataType &variable_i = this->variable_[index_i];
Neighborhood &inner_neighborhood = this->inner_configuration_[index_i];
for (size_t n = 0; n != inner_neighborhood.current_size_; ++n)
{
Expand All @@ -113,8 +113,8 @@ void RegularizationByDiffusionAnalogy<VariableType>::
Real parameter_b = 2.0 * this->eta_regularization_[index_i] * dW_ijV_j * Vol_i * dt / r_ij;

// predicted quantity at particle j
VariableType variable_j = this->variable_[index_j] - parameter_k * parameter_b;
VariableType variable_derivative = (variable_i - variable_j);
DataType variable_j = this->variable_[index_j] - parameter_k * parameter_b;
DataType variable_derivative = (variable_i - variable_j);

// exchange in conservation form
this->variable_[index_j] -= variable_derivative * parameter_b / this->mass_[index_j];
Expand All @@ -125,27 +125,27 @@ void RegularizationByDiffusionAnalogy<VariableType>::
}
}
//=================================================================================================//
template <typename VariableType>
void RegularizationByDiffusionAnalogy<VariableType>::interaction(size_t index_i, Real dt)
template <typename DataType>
void RegularizationByDiffusionAnalogy<DataType>::interaction(size_t index_i, Real dt)
{
ErrorAndParameters<VariableType> error_and_parameters = computeVariationAndParameters(index_i, dt);
ErrorAndParameters<DataType> error_and_parameters = computeVariationAndParameters(index_i, dt);
updateStatesByVariation(index_i, dt, error_and_parameters);
this->variation_local_[index_i] = error_and_parameters.error_ / dt / this->eta_regularization_[index_i];
}
//=================================================================================================//
template <typename VariableType>
UpdateRegularizationVariation<VariableType>::
template <typename DataType>
UpdateRegularizationVariation<DataType>::
UpdateRegularizationVariation(BaseInnerRelation &inner_relation, const std::string &variable_name)
: OptimizationBySplittingAlgorithmBase<VariableType>(inner_relation, variable_name){};
: OptimizationBySplittingAlgorithmBase<DataType>(inner_relation, variable_name){};
//=================================================================================================//
template <typename VariableType>
ErrorAndParameters<VariableType> UpdateRegularizationVariation<VariableType>::
template <typename DataType>
ErrorAndParameters<DataType> UpdateRegularizationVariation<DataType>::
computeVariationAndParameters(size_t index_i, Real dt)
{
Real Vol_i = this->Vol_[index_i];
Real mass_i = this->mass_[index_i];
VariableType &variable_i = this->variable_[index_i];
ErrorAndParameters<VariableType> error_and_parameters;
DataType &variable_i = this->variable_[index_i];
ErrorAndParameters<DataType> error_and_parameters;

Neighborhood &inner_neighborhood = this->inner_configuration_[index_i];
for (size_t n = 0; n != inner_neighborhood.current_size_; ++n)
Expand All @@ -154,7 +154,7 @@ ErrorAndParameters<VariableType> UpdateRegularizationVariation<VariableType>::
Real dW_ijV_j = inner_neighborhood.dW_ij_[n] * this->Vol_[index_j];
Real r_ij = inner_neighborhood.r_ij_[n];

VariableType variable_derivative = (variable_i - this->variable_[index_j]);
DataType variable_derivative = (variable_i - this->variable_[index_j]);
Real parameter_b = 2.0 * this->eta_regularization_[index_i] * dW_ijV_j * Vol_i * dt / r_ij;

error_and_parameters.error_ -= variable_derivative * parameter_b;
Expand All @@ -165,10 +165,10 @@ ErrorAndParameters<VariableType> UpdateRegularizationVariation<VariableType>::
return error_and_parameters;
}
//=================================================================================================//
template <typename VariableType>
void UpdateRegularizationVariation<VariableType>::interaction(size_t index_i, Real dt)
template <typename DataType>
void UpdateRegularizationVariation<DataType>::interaction(size_t index_i, Real dt)
{
ErrorAndParameters<VariableType> error_and_parameters = this->computeVariationAndParameters(index_i, dt);
ErrorAndParameters<DataType> error_and_parameters = this->computeVariationAndParameters(index_i, dt);
this->variation_global_[index_i] = error_and_parameters.error_ / dt / this->eta_regularization_[index_i];
}
//=================================================================================================//
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,27 +41,27 @@ namespace SPH
* @class TemperatureSplittingByPDEInner
* @brief The temperature on each particle will be modified innerly to satisfy the PDEs.
*/
template <typename VariableType>
template <typename DataType>
class TemperatureSplittingByPDEInner
: public OptimizationBySplittingAlgorithmBase<VariableType>
: public OptimizationBySplittingAlgorithmBase<DataType>
{
public:
TemperatureSplittingByPDEInner(BaseInnerRelation &inner_relation, const std::string &variable_name);
virtual ~TemperatureSplittingByPDEInner(){};

protected:
virtual ErrorAndParameters<VariableType> computeErrorAndParameters(size_t index_i, Real dt = 0.0);
virtual void updateStatesByError(size_t index_i, Real dt, const ErrorAndParameters<VariableType> &error_and_parameters);
virtual ErrorAndParameters<DataType> computeErrorAndParameters(size_t index_i, Real dt = 0.0);
virtual void updateStatesByError(size_t index_i, Real dt, const ErrorAndParameters<DataType> &error_and_parameters);
virtual void interaction(size_t index_i, Real dt = 0.0) override;
};

/**
* @class TemperatureSplittingByPDEWithBoundary
* @brief The temperature on each particle will be modified with boundary to satisfy the PDEs.
*/
template <typename VariableType>
template <typename DataType>
class TemperatureSplittingByPDEWithBoundary
: public TemperatureSplittingByPDEInner<VariableType>,
: public TemperatureSplittingByPDEInner<DataType>,
public DataDelegateContactOnly
{
public:
Expand All @@ -71,10 +71,10 @@ class TemperatureSplittingByPDEWithBoundary
virtual ~TemperatureSplittingByPDEWithBoundary(){};

protected:
StdVec<StdLargeVec<VariableType> *> boundary_variable_;
StdVec<DataType *> boundary_variable_;
StdVec<Real *> boundary_heat_flux_, boundary_Vol_;
StdVec<Vecd *> boundary_normal_vector_;
virtual ErrorAndParameters<VariableType> computeErrorAndParameters(size_t index_i, Real dt = 0.0) override;
virtual ErrorAndParameters<DataType> computeErrorAndParameters(size_t index_i, Real dt = 0.0) override;
};

/**
Expand All @@ -86,7 +86,7 @@ class UpdateTemperaturePDEResidual : public TemperatureSplittingType
{
public:
template <typename... Args>
UpdateTemperaturePDEResidual(Args &&... args);
UpdateTemperaturePDEResidual(Args &&...args);
virtual ~UpdateTemperaturePDEResidual(){};

protected:
Expand Down
Loading

0 comments on commit ba69ad2

Please sign in to comment.