BinKinematics (Binary Kinematics) class

Contents

Description

This is a value heterogeneous super-class for the definition of the kinematics for binary interactions between elements.

It deals with the calculation of distances, relative positions and velocities, and contact geometry.

This super-class defines abstract methods that must be implemented in the derived sub-classes:

classdef BinKinematics < matlab.mixin.Heterogeneous & matlab.mixin.Copyable

Constant values

    properties (Constant = true, Access = public)
        % General types of binary kinematics
        PARTICLE_PARTICLE = uint8(1);
        PARTICLE_WALL     = uint8(2);

        % Specific types of binary kinematics between same particles
        SPHERE_SPHERE     = uint8(1);
        CYLINDER_CYLINDER = uint8(2);

        % Specific types of binary kinematics between particles and walls
        SPHERE_WALL_LINE     = uint8(3);
        SPHERE_WALL_CIRCLE   = uint8(4);
        CYLINDER_WALL_LINE   = uint8(5);
        CYLINDER_WALL_CIRCLE = uint8(6);
    end

Public properties

    properties (SetAccess = public, GetAccess = public)
        % Identification
        gen_type uint8 = uint8.empty;   % flag for general type of binary kinematics
        spc_type uint8 = uint8.empty;   % flag for specific type of binary kinematics

        % Relative position
        dir   double = double.empty;   % direction vector between centroids
        dist  double = double.empty;   % distance between centroids
        distc double = double.empty;   % corrected distance between centroids (consistent with adjusted contact radius)
        separ double = double.empty;   % separation between surfaces

        % Relative velocities
        vel_trl double = double.empty;   % relative translational velocity at contact point
        vel_rot double = double.empty;   % relative velocity at contact point due to rotation only
        vel_ang double = double.empty;   % relative angular velocity

        % Normal overlap parameters
        dir_n  double = double.empty;   % unit direction vector
        ovlp_n double = double.empty;   % overlap
        vel_n  double = double.empty;   % overlap rate of change

        % Tangent overlap parameters
        dir_t  double = double.empty;   % unit direction vector
        ovlp_t double = double.empty;   % overlap
        vel_t  double = double.empty;   % overlap rate of change

        % Contact parameters
        is_contact     logical = logical.empty;   % flag for contact interaction
        v0_n           double  = double.empty;    % initial (impact) normal velocity
        contact_start  double  = double.empty;    % starting time
        contact_time   double  = double.empty;    % duration since starting time
        contact_radius double  = double.empty;    % contact radius

        % Others
        vedge double = double.empty;   % edge of neighboring cells of voronoi diagram
    end

Constructor method

    methods
        function this = BinKinematics(gen_type,spc_type)
            if (nargin > 0)
                this.gen_type = gen_type;
                this.spc_type = spc_type;
            end
        end
    end

Default sub-class definition

    methods (Static, Access = protected)
        function defaultObject = getDefaultScalarElement
            defaultObject = BinKinematics_SphereSphere;
        end
    end

Abstract methods: implemented in derived sub-classes

    methods (Abstract)
        %------------------------------------------------------------------
        setEffParams(this,interact);

        %------------------------------------------------------------------
        this = setRelPos(this,element1,element2);

        %------------------------------------------------------------------
        this = setOverlaps(this,interact,time_step);

        %------------------------------------------------------------------
        this = setContactArea(this,interact);

        %------------------------------------------------------------------
        this = setVoronoiEdge(this,drv,interact);

        %------------------------------------------------------------------
        addContactForceNormalToParticles(this,interact);

        %------------------------------------------------------------------
        addContactForceTangentToParticles(this,interact);

        %------------------------------------------------------------------
        addContactTorqueTangentToParticles(this,interact);

        %------------------------------------------------------------------
        addRollResistTorqueToParticles(this,interact);

        %------------------------------------------------------------------
        addDirectConductionToParticles(this,interact);

        %------------------------------------------------------------------
        addIndirectConductionToParticles(this,interact);
    end

Public methods

    methods
        %------------------------------------------------------------------
        function this = setInitContactParams(this,time)
            this.is_contact    = true;
            this.contact_start = time;
            this.v0_n          = this.vel_n;
        end

        %------------------------------------------------------------------
        function this = setInitNoncontactParams(this)
            this.is_contact     = false;
            this.ovlp_n         = 0;
            this.ovlp_t         = 0;
            this.contact_time   = 0;
            this.contact_radius = 0;
        end
    end
end