Interact class

Contents

Description

This is a handle heterogeneous super-class for the definition of binary interactions between elements (particle-particle and particle-wall).

It stores the effective properties of the interaction and contains handles to specific interaction models for kinematics, force and heat transfer.

classdef Interact < handle & matlab.mixin.Copyable

Public properties

    properties (SetAccess = public, GetAccess = public)
        % Members
        elem1;   % handle to object of the 1st interaction element (defines the sign convection)
        elem2;   % handle to object of the 2nd interaction element

        % Behavior flags
        insulated logical = logical.empty;   % flag for insulated interaction (no heat exchange)

        % Effective parameters
        eff_radius  double = double.empty;
        eff_mass    double = double.empty;
        eff_young   double = double.empty;
        eff_young0  double = double.empty;
        eff_shear   double = double.empty;
        eff_conduct double = double.empty;

        % Average parameters
        avg_poisson double = double.empty;   % Simple average of Poisson ratios
        avg_conduct double = double.empty;   % Weighted average of particles conductivity (not considering wall)

        % Mechanical interaction models (value class objects)
        kinemat BinKinematics = BinKinematics.empty;   % general binary kinematics (always exist)
        cforcen ContactForceN = ContactForceN.empty;   % contact force normal (may be empty)
        cforcet ContactForceT = ContactForceT.empty;   % contact force tangent (may be empty)
        rollres RollResist    = RollResist.empty;      % rolling resistance (may be empty)
        corarea AreaCorrect   = AreaCorrect.empty;     % contact area correction (may be empty)

        % Thermal interaction models (value class objects)
        dconduc ConductionDirect   = ConductionDirect.empty;     % direct thermal conduction
        iconduc ConductionIndirect = ConductionIndirect.empty;   % indirect thermal conduction
    end

Constructor method

    methods
        function this = Interact()

        end
    end

Public methods

    methods
        %------------------------------------------------------------------
        function setFixParamsTherm(this,drv)
            if (this.insulated)
                return;
            end
            if (~isempty(this.dconduc) && this.kinemat.is_contact)
                this.dconduc = this.dconduc.setFixParams(this);
            end
            if (~isempty(this.iconduc))
                this.iconduc = this.iconduc.setFixParams(this,drv);
            end
        end

        %------------------------------------------------------------------
        function setCteParamsMech(this)
            if (~isempty(this.cforcen))
                this.cforcen = this.cforcen.setCteParams(this);
            end
            if (~isempty(this.cforcet))
                this.cforcet = this.cforcet.setCteParams(this);
            end
            if (~isempty(this.rollres))
                this.rollres = this.rollres.setCteParams(this);
            end
        end

        %------------------------------------------------------------------
        function setCteParamsTherm(this,drv)
            if (this.insulated)
                return;
            end
            if (~isempty(this.dconduc) && this.kinemat.is_contact)
                this.dconduc = this.dconduc.setCteParams(this);
            end
            if (~isempty(this.iconduc))
                this.iconduc = this.iconduc.setCteParams(this,drv);
            end
        end

        %------------------------------------------------------------------
        function evalResultsMech(this)
            if (~isempty(this.cforcen))
                this.cforcen = this.cforcen.evalForce(this);
                this.kinemat.addContactForceNormalToParticles(this);
            end
            if (~isempty(this.cforcet))
                this.cforcet = this.cforcet.evalForce(this);
                this.kinemat.addContactForceTangentToParticles(this);
                this.kinemat.addContactTorqueTangentToParticles(this);
            end
            if (~isempty(this.rollres))
                this.rollres = this.rollres.evalTorque(this);
                this.kinemat.addRollResistTorqueToParticles(this);
            end
        end

        %------------------------------------------------------------------
        function evalResultsTherm(this,drv)
            if (this.insulated)
                return;
            end
            if (~isempty(this.dconduc) && this.kinemat.is_contact)
                this.dconduc = this.dconduc.evalHeatRate(this);
                this.kinemat.addDirectConductionToParticles(this);
            end
            if (~isempty(this.iconduc))
                this.iconduc = this.iconduc.evalHeatRate(this,drv);
                this.kinemat.addIndirectConductionToParticles(this);
            end
        end
    end
end