Skip to content

Commit

Permalink
renaming as repulsion factor
Browse files Browse the repository at this point in the history
  • Loading branch information
WeiyiVirtonomy committed Jul 23, 2024
1 parent 85761d8 commit a7697c8
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,20 @@ RepulsionForce<Contact<Inner<>>>::
: RepulsionForce<Base, DataDelegateInner>(self_contact_relation, "SelfRepulsionForce"),
ForcePrior(particles_, "SelfRepulsionForce"),
solid_(DynamicCast<Solid>(this, sph_body_.getBaseMaterial())),
self_repulsion_density_(*particles_->getVariableDataByName<Real>("SelfRepulsionDensity")),
self_repulsion_factor_(*particles_->getVariableDataByName<Real>("SelfRepulsionFactor")),
vel_(*particles_->getVariableDataByName<Vecd>("Velocity")),
contact_impedance_(sqrt(solid_.ReferenceDensity() * solid_.ContactStiffness())) {}
//=================================================================================================//
void RepulsionForce<Contact<Inner<>>>::interaction(size_t index_i, Real dt)
{
Real p_i = self_repulsion_density_[index_i] * solid_.ContactStiffness();
Real p_i = self_repulsion_factor_[index_i] * solid_.ContactStiffness();
Vecd force = Vecd::Zero();
const Neighborhood &inner_neighborhood = inner_configuration_[index_i];
for (size_t n = 0; n != inner_neighborhood.current_size_; ++n)
{
size_t index_j = inner_neighborhood.j_[n];
const Vecd &e_ij = inner_neighborhood.e_ij_[n];
Real p_star = 0.5 * (p_i + self_repulsion_density_[index_j] * solid_.ContactStiffness());
Real p_star = 0.5 * (p_i + self_repulsion_factor_[index_j] * solid_.ContactStiffness());
Real impedance_p = 0.5 * contact_impedance_ * (vel_[index_i] - vel_[index_j]).dot(-e_ij);
// force to mimic pressure
force -= 2.0 * (p_star + impedance_p) * e_ij * inner_neighborhood.dW_ij_[n] * Vol_[index_j];
Expand All @@ -35,15 +35,15 @@ RepulsionForce<Contact<>>::RepulsionForce(BaseContactRelation &solid_body_contac
: RepulsionForce<Base, DataDelegateContact>(solid_body_contact_relation, "RepulsionForce"),
ForcePrior(particles_, "RepulsionForce"),
solid_(DynamicCast<Solid>(this, sph_body_.getBaseMaterial())),
repulsion_density_(*particles_->getVariableDataByName<Real>("RepulsionDensity"))
repulsion_factor_(*particles_->getVariableDataByName<Real>("RepulsionFactor"))
{
const Real contact_stiffness_1 = solid_.ContactStiffness();

for (size_t k = 0; k != contact_particles_.size(); ++k)
{
contact_solids_.push_back(&DynamicCast<Solid>(this, contact_bodies_[k]->getBaseMaterial()));
contact_Vol_.push_back(contact_particles_[k]->getVariableDataByName<Real>("VolumetricMeasure"));
contact_contact_density_.push_back(contact_particles_[k]->getVariableDataByName<Real>("RepulsionDensity"));
contact_repulsion_factor_.push_back(contact_particles_[k]->getVariableDataByName<Real>("RepulsionFactor"));

const Real contact_stiffness_k = contact_solids_[k]->ContactStiffness();
contact_stiffness_ave_.push_back(2 * contact_stiffness_1 * contact_stiffness_k / (contact_stiffness_1 + contact_stiffness_k));
Expand All @@ -52,13 +52,13 @@ RepulsionForce<Contact<>>::RepulsionForce(BaseContactRelation &solid_body_contac
//=================================================================================================//
void RepulsionForce<Contact<>>::interaction(size_t index_i, Real dt)
{
Real sigma_i = repulsion_density_[index_i];
Real sigma_i = repulsion_factor_[index_i];
Vecd force = Vecd::Zero();
for (size_t k = 0; k < contact_configuration_.size(); ++k)
{
Vecd force_k = Vecd::Zero();

StdLargeVec<Real> &contact_density_k = *(contact_contact_density_[k]);
StdLargeVec<Real> &contact_density_k = *(contact_repulsion_factor_[k]);
StdLargeVec<Real> &Vol_k = *(contact_Vol_[k]);

Neighborhood &contact_neighborhood = (*contact_configuration_[k])[index_i];
Expand All @@ -80,7 +80,7 @@ RepulsionForce<Contact<Wall>>::RepulsionForce(BaseContactRelation &solid_body_co
: RepulsionForce<Base, DataDelegateContact>(solid_body_contact_relation, "RepulsionForce"),
ForcePrior(particles_, "RepulsionForce"),
solid_(DynamicCast<Solid>(this, sph_body_.getBaseMaterial())),
repulsion_density_(*particles_->getVariableDataByName<Real>("RepulsionDensity"))
repulsion_factor_(*particles_->getVariableDataByName<Real>("RepulsionFactor"))
{
for (size_t k = 0; k < this->contact_configuration_.size(); ++k)
{
Expand All @@ -90,7 +90,7 @@ RepulsionForce<Contact<Wall>>::RepulsionForce(BaseContactRelation &solid_body_co
//=================================================================================================//
void RepulsionForce<Contact<Wall>>::interaction(size_t index_i, Real dt)
{
Real p_i = repulsion_density_[index_i] * solid_.ContactStiffness();
Real p_i = repulsion_factor_[index_i] * solid_.ContactStiffness();
/** Contact interaction. */
Vecd force = Vecd::Zero();
for (size_t k = 0; k < contact_configuration_.size(); ++k)
Expand All @@ -117,7 +117,7 @@ RepulsionForce<Wall, Contact<>>::RepulsionForce(BaseContactRelation &solid_body_
{
contact_solids_.push_back(&DynamicCast<Solid>(this, contact_bodies_[k]->getBaseMaterial()));
contact_Vol_.push_back(contact_particles_[k]->getVariableDataByName<Real>("VolumetricMeasure"));
contact_contact_density_.push_back(contact_particles_[k]->getVariableDataByName<Real>("RepulsionDensity"));
contact_repulsion_factor_.push_back(contact_particles_[k]->getVariableDataByName<Real>("RepulsionFactor"));
}
}
//=================================================================================================//
Expand All @@ -127,7 +127,7 @@ void RepulsionForce<Wall, Contact<>>::interaction(size_t index_i, Real dt)
for (size_t k = 0; k < contact_configuration_.size(); ++k)
{
StdLargeVec<Real> &Vol_k = *(contact_Vol_[k]);
StdLargeVec<Real> &contact_density_k = *(contact_contact_density_[k]);
StdLargeVec<Real> &contact_density_k = *(contact_repulsion_factor_[k]);
Solid *solid_k = contact_solids_[k];

Neighborhood &contact_neighborhood = (*contact_configuration_[k])[index_i];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ class RepulsionForce<Contact<Inner<>>> : public RepulsionForce<Base, DataDelegat

protected:
Solid &solid_;
StdLargeVec<Real> &self_repulsion_density_;
StdLargeVec<Real> &self_repulsion_factor_;
StdLargeVec<Vecd> &vel_;
Real contact_impedance_;
};
Expand All @@ -84,10 +84,10 @@ class RepulsionForce<Contact<>> : public RepulsionForce<Base, DataDelegateContac

protected:
Solid &solid_;
StdLargeVec<Real> &repulsion_density_;
StdLargeVec<Real> &repulsion_factor_;
StdVec<Solid *> contact_solids_;
StdVec<Real> contact_stiffness_ave_;
StdVec<StdLargeVec<Real> *> contact_contact_density_, contact_Vol_;
StdVec<StdLargeVec<Real> *> contact_repulsion_factor_, contact_Vol_;
};
using ContactForce = RepulsionForce<Contact<>>;

Expand All @@ -101,7 +101,7 @@ class RepulsionForce<Contact<Wall>> : public RepulsionForce<Base, DataDelegateCo

protected:
Solid &solid_;
StdLargeVec<Real> &repulsion_density_;
StdLargeVec<Real> &repulsion_factor_;
StdVec<StdLargeVec<Real> *> contact_Vol_;
};
using ContactForceFromWall = RepulsionForce<Contact<Wall>>;
Expand All @@ -117,7 +117,7 @@ class RepulsionForce<Wall, Contact<>> : public RepulsionForce<Base, DataDelegate

protected:
StdVec<Solid *> contact_solids_;
StdVec<StdLargeVec<Real> *> contact_contact_density_, contact_Vol_;
StdVec<StdLargeVec<Real> *> contact_repulsion_factor_, contact_Vol_;
};
using ContactForceToWall = RepulsionForce<Wall, Contact<>>;
} // namespace solid_dynamics
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ namespace solid_dynamics
//=================================================================================================//
RepulsionDensitySummation<Inner<>>::
RepulsionDensitySummation(SelfSurfaceContactRelation &self_contact_relation)
: RepulsionDensitySummation<Base, DataDelegateInner>(self_contact_relation, "SelfRepulsionDensity")
: RepulsionDensitySummation<Base, DataDelegateInner>(self_contact_relation, "SelfRepulsionFactor")
{
Real dp_1 = self_contact_relation.getSPHBody().sph_adaptation_->ReferenceSpacing();
offset_W_ij_ = self_contact_relation.getSPHBody().sph_adaptation_->getKernel()->W(dp_1, ZeroVecd);
Expand All @@ -22,12 +22,12 @@ void RepulsionDensitySummation<Inner<>>::interaction(size_t index_i, Real dt)
Real corrected_W_ij = std::max(inner_neighborhood.W_ij_[n] - offset_W_ij_, Real(0));
sigma += corrected_W_ij * particles_->ParticleVolume(inner_neighborhood.j_[n]);
}
repulsion_density_[index_i] = sigma;
repulsion_factor_[index_i] = sigma;
}
//=================================================================================================//
RepulsionDensitySummation<Contact<>>::
RepulsionDensitySummation(SurfaceContactRelation &solid_body_contact_relation)
: RepulsionDensitySummation<Base, DataDelegateContact>(solid_body_contact_relation, "RepulsionDensity")
: RepulsionDensitySummation<Base, DataDelegateContact>(solid_body_contact_relation, "RepulsionFactor")
{
}
//=================================================================================================//
Expand All @@ -44,11 +44,11 @@ void RepulsionDensitySummation<Contact<>>::interaction(size_t index_i, Real dt)
sigma += contact_neighborhood.W_ij_[n] * contact_particles_[k]->ParticleVolume(contact_neighborhood.j_[n]);
}
}
repulsion_density_[index_i] = sigma;
repulsion_factor_[index_i] = sigma;
};
//=================================================================================================//
ShellContactDensity::ShellContactDensity(ShellSurfaceContactRelation &solid_body_contact_relation)
: RepulsionDensitySummation<Base, DataDelegateContact>(solid_body_contact_relation, "RepulsionDensity"),
: RepulsionDensitySummation<Base, DataDelegateContact>(solid_body_contact_relation, "RepulsionFactor"),
solid_(DynamicCast<Solid>(this, sph_body_.getBaseMaterial())),
kernel_(solid_body_contact_relation.getSPHBody().sph_adaptation_->getKernel()),
particle_spacing_(solid_body_contact_relation.getSPHBody().sph_adaptation_->ReferenceSpacing())
Expand Down Expand Up @@ -97,11 +97,11 @@ void ShellContactDensity::interaction(size_t index_i, Real dt)
// to maintain enough contact pressure to prevent penetration while also maintaining stability.
contact_density_i += heuristic_limiter * sigma * calibration_factor_[k];
}
repulsion_density_[index_i] = contact_density_i;
repulsion_factor_[index_i] = contact_density_i;
}
//=================================================================================================//
ShellSelfContactDensitySummation::ShellSelfContactDensitySummation(ShellSelfContactRelation &self_contact_relation)
: RepulsionDensitySummation<Base, DataDelegateInner>(self_contact_relation, "SelfRepulsionDensity")
: RepulsionDensitySummation<Base, DataDelegateInner>(self_contact_relation, "SelfRepulsionFactor")
{
}
//=================================================================================================//
Expand All @@ -111,7 +111,7 @@ void ShellSelfContactDensitySummation::interaction(size_t index_i, Real dt)
const Neighborhood &inner_neighborhood = inner_configuration_[index_i];
for (size_t n = 0; n != inner_neighborhood.current_size_; ++n)
sigma += inner_neighborhood.W_ij_[n] * particles_->ParticleVolume(inner_neighborhood.j_[n]);
repulsion_density_[index_i] = sigma;
repulsion_factor_[index_i] = sigma;
}
//=================================================================================================//
} // namespace solid_dynamics
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,11 @@ class RepulsionDensitySummation<Base, DataDelegationType>
template <class BaseRelationType>
RepulsionDensitySummation(BaseRelationType &base_relation, const std::string &variable_name)
: LocalDynamics(base_relation.getSPHBody()), DataDelegationType(base_relation),
repulsion_density_(*this->particles_->template registerSharedVariable<Real>(variable_name)){};
repulsion_factor_(*this->particles_->template registerSharedVariable<Real>(variable_name)){};
virtual ~RepulsionDensitySummation(){};

protected:
StdLargeVec<Real> &repulsion_density_;
StdLargeVec<Real> &repulsion_factor_;
};

template <>
Expand Down
2 changes: 1 addition & 1 deletion tests/2d_examples/test_2d_self_contact/self_contact.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ int main(int ac, char *av[])
//-----------------------------------------------------------------------------
IOEnvironment io_environment(sph_system);
BodyStatesRecordingToVtp write_beam_states(beam_body);
write_beam_states.addToWrite<Real>(beam_body, "SelfRepulsionDensity");
write_beam_states.addToWrite<Real>(beam_body, "SelfRepulsionFactor");
RegressionTestDynamicTimeWarping<ObservedQuantityRecording<Vecd>>
write_beam_tip_displacement("Position", beam_observer_contact);
//-----------------------------------------------------------------------------
Expand Down

0 comments on commit a7697c8

Please sign in to comment.