void DEM_Dempack::GetContactArea(const double radius, const double other_radius, const Vector& vector_of_initial_areas, const int neighbour_position, double& calculation_area) { CalculateContactArea(radius, other_radius, calculation_area); }
double DEM_Dempack_dev::CalculateContactArea(double radius, double other_radius, Vector& v) { double a = 0.0; CalculateContactArea(radius, other_radius, a); unsigned int old_size = v.size(); v.resize(old_size + 1); v[old_size]=a; return a; }
void DEM_Dempack_dev::GetContactArea(const double radius, const double other_radius, const Vector& vector_of_initial_areas, const int neighbour_position, double& calculation_area) { if (vector_of_initial_areas.size()) calculation_area = vector_of_initial_areas[neighbour_position]; else CalculateContactArea(radius, other_radius, calculation_area); //CalculateContactArea(radius, other_radius, calculation_area); }
double DEM_Dempack::LocalMaxSearchDistance(const int i, SphericContinuumParticle* element1, SphericContinuumParticle* element2) { Properties& element1_props = element1->GetProperties(); Properties& element2_props = element2->GetProperties(); double mDamageMaxDisplacementFactor; double mTensionLimit; // calculation of equivalent young modulus double myYoung = element1->GetYoung(); double other_young = element2->GetYoung(); double equiv_young = 2.0 * myYoung * other_young / (myYoung + other_young); const double my_radius = element1->GetRadius(); const double other_radius = element2->GetRadius(); double calculation_area = 0; CalculateContactArea(my_radius, other_radius, calculation_area); double radius_sum = my_radius + other_radius; double initial_delta = element1->GetInitialDelta(i); double initial_dist = radius_sum - initial_delta; // calculation of elastic constants double kn_el = equiv_young * calculation_area / initial_dist; if (&element1_props == &element2_props) { mDamageMaxDisplacementFactor = element1_props[DAMAGE_FACTOR]; mTensionLimit = element1_props[CONTACT_SIGMA_MIN]*1e6; } else { mDamageMaxDisplacementFactor = 0.5*(element1_props[DAMAGE_FACTOR] + element2_props[DAMAGE_FACTOR]); mTensionLimit = 0.5*1e6*(element1_props[CONTACT_SIGMA_MIN] + element2_props[CONTACT_SIGMA_MIN]); } const double Ntstr_el = mTensionLimit * calculation_area; double u1 = Ntstr_el / kn_el; double u2 = u1 * (1 + mDamageMaxDisplacementFactor)*10; return u2; }