Ejemplo n.º 1
0
    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);        
    }
Ejemplo n.º 2
0
 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;
 }
Ejemplo n.º 3
0
 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);
 }
Ejemplo n.º 4
0
    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;

    }