ContactMechanicsClass Module



Derived Types

type, public ::  ContactMechanics_

Components

Type Visibility Attributes Name Initial
type(FEMDomainp_), public, allocatable :: FEMDomains(:)
type(LinearSolver_), public :: solver
integer(kind=int32), public, allocatable :: contactlist(:,:)
real(kind=real64), public, allocatable :: YoungModulus(:)
real(kind=real64), public, allocatable :: PoissonRatio(:)
real(kind=real64), public, allocatable :: Density(:)
type(Dictionary_), public :: YoungModulusList
type(Dictionary_), public :: PoissonRatioList
type(Dictionary_), public :: DensityList
real(kind=real64), public, allocatable :: Displacement(:)
real(kind=real64), public, allocatable :: TractionForce(:,:)
logical, public :: initialized = .false.
real(kind=real64), public :: gravity(1:3) = [0.0d0, 0.0d0, -9.810d0]
real(kind=real64), public :: penalty = 100000.0d0
type(FEMDomain_), public, pointer :: FEMDomain1
type(FEMDomain_), public, pointer :: FEMDomain2
type(FEMIface_), public, pointer :: FEMIface
real(kind=real64), public, allocatable :: NTSGap(:,:)
real(kind=real64), public, allocatable :: NTSGzi(:,:)
real(kind=real64), public :: penaltypara = dble(1.0e+5)
real(kind=real64), public :: FrictionalCoefficient = 0.30d0
real(kind=real64), public :: Cohesion = 0.0d0
real(kind=real64), public :: Tolerance = dble(1.0e-10)
real(kind=real64), public, allocatable :: Domain1Force(:,:)
real(kind=real64), public, allocatable :: Domain2Force(:,:)
real(kind=real64), public, allocatable :: KcontactEBE(:,:,:)
real(kind=real64), public, allocatable :: KcontactGlo(:,:)
real(kind=real64), public, allocatable :: FcontactEBE(:,:)
real(kind=real64), public, allocatable :: FcontactGlo(:)
real(kind=real64), public, allocatable :: DispVecEBE(:,:)
real(kind=real64), public, allocatable :: DispVecGlo(:)
real(kind=real64), public, allocatable :: NTSvariables(:,:)
real(kind=real64), public, allocatable :: ContactMatPara(:,:)
real(kind=real64), public, allocatable :: GloNodCoord(:,:)
integer(kind=int32), public, allocatable :: u_nod_x(:)
integer(kind=int32), public, allocatable :: u_nod_y(:)
integer(kind=int32), public, allocatable :: u_nod_z(:)
real(kind=real64), public, allocatable :: du_nod_dis_x(:)
real(kind=real64), public, allocatable :: du_nod_dis_y(:)
real(kind=real64), public, allocatable :: du_nod_dis_z(:)
real(kind=real64), public, allocatable :: u_nod_dis_x(:)
real(kind=real64), public, allocatable :: u_nod_dis_y(:)
real(kind=real64), public, allocatable :: u_nod_dis_z(:)
real(kind=real64), public, allocatable :: duvec(:)
real(kind=real64), public, allocatable :: uvec(:)
real(kind=real64), public, allocatable :: dfvec(:)
real(kind=real64), public, allocatable :: fvec(:)
integer(kind=int32), public, allocatable :: NTSMaterial(:)
integer(kind=int32), public, allocatable :: StickOrSlip(:)
integer(kind=int32), public :: step = 0
integer(kind=int32), public :: itr_contact = 0
integer(kind=int32), public :: itr = 0
integer(kind=int32), public :: BiCG_ItrMax = 10000
integer(kind=int32), public :: NR_ItrMax = 100
integer(kind=int32), public :: control = 1
integer(kind=int32), public :: TimeStep = 100
integer(kind=int32), public, allocatable :: nts_elem_nod(:,:)
integer(kind=int32), public, allocatable :: old_nts_elem_nod(:,:)
integer(kind=int32), public, allocatable :: surface_nod(:)
integer(kind=int32), public, allocatable :: sur_nod_inf(:,:)
real(kind=real64), public, allocatable :: nod_coord(:,:)
real(kind=real64), public, allocatable :: old_nod_coord(:,:)
real(kind=real64), public, allocatable :: elem_nod(:,:)
integer(kind=int32), public, allocatable :: nts_mat(:)
integer(kind=int32), public, allocatable :: sur_inf_mat(:,:)
integer(kind=int32), public, allocatable :: contact_mat(:,:)
real(kind=real64), public, allocatable :: contact_mat_para(:,:)
integer(kind=int32), public, allocatable :: active_nts(:)
real(kind=real64), public, allocatable :: k_contact(:,:)
real(kind=real64), public, allocatable :: fvec_contact(:)
real(kind=real64), public, allocatable :: nts_amo(:,:)
integer(kind=int32), public, allocatable :: stick_slip(:)
integer(kind=int32), public, allocatable :: old_stick_slip(:)
real(kind=real64), public, allocatable :: old_nts_amo(:,:)
real(kind=real64), public, allocatable :: kmat(:,:)
real(kind=real64), public, allocatable :: gvec(:)
real(kind=real64), public, allocatable :: rvec(:)
real(kind=real64), public, allocatable :: K_total(:,:)
real(kind=real64), public, allocatable :: initial_duvec(:)
real(kind=real64), public, allocatable :: dduvec(:)
real(kind=real64), public, allocatable :: dduvec_nr(:)

Type-Bound Procedures

procedure, public :: Init => InitializeContactMechanics
procedure, public :: setup => runCM
procedure, public :: run => runCM
procedure, public :: solve => solveCM
procedure, public :: updateMesh => updateMeshContactMechanics
procedure, public :: fix => fixContactMechanics
procedure, public :: setDensity
procedure, public :: setYoungModulus
procedure, public :: setPoissonRatio
procedure, public :: properties => propertiesCM
procedure, public :: property => propertiesCM
procedure, public :: showProperty => showPropertyCM
procedure, public :: remove => removeContactMechanics
procedure, public :: Update => UpdateContactConfiguration
procedure, public :: Import => ImportContactMechanics
procedure, public :: deploy => deployContactMechanics
procedure, public :: ContactSearch
procedure, public :: getKcmat
procedure, public :: getKcmatStick
procedure, public :: getKcmatStickSlip
procedure, public :: getAllCoordinate => getAllCoordinateContactMechanics
procedure, public :: getDisplacement => getDisplacementContactMechanics
procedure, public :: getStress => getStressContactMechanics
procedure, public :: get => getStressContactMechanics
procedure, public :: setPenaltyParameter => setPenaltyParaCM
procedure, public :: updateContactStress => updateContactStressCM
procedure, public :: updateTimestep => updateTimestepContact
procedure, public :: getGap => getGapCM
procedure, public :: getForce => getForceCM
procedure, public :: exportForceAsTraction => exportForceAsTractionCM
procedure, public :: getDispBound => getDispBoundCM
procedure, public :: getTracBound => getTracBoundCM
procedure, public :: ls_add_du => ls_add_duCM
procedure, public :: ls_nts_generate => ls_nts_generateCM
procedure, public :: ls_nts_material => ls_nts_materialCM
procedure, public :: ls_get_stabilized_nts => ls_get_stabilized_ntsCM
procedure, public :: ls_check_active => ls_check_active_CM

Functions

public function getDisplacementContactMechanics(obj, DomainID) result(displacement)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(in), target :: obj
integer(kind=int32), intent(in), optional :: DomainID

Return Value real(kind=real64), allocatable, (:,:)

public function getAllCoordinateContactMechanics(obj, DomainID) result(Coordinate)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(in), target :: obj
integer(kind=int32), intent(in), optional :: DomainID

Return Value real(kind=real64), allocatable, (:,:)

public function getStressContactMechanics(obj, DomainID) result(Stress)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(in), target :: obj
integer(kind=int32), intent(in) :: DomainID

Return Value real(kind=real64), allocatable, (:,:,:,:)


Subroutines

public subroutine InitializeContactMechanics(obj, femdomains, femdomainsp, ContactList, femdomain1, femdomain2, AllYoungModulus, AllPoissonRatio, AllDensity)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(inout) :: obj
type(FEMDomain_), intent(in), optional, target :: femdomains(:)
type(FEMDomainp_), intent(in), optional, target :: femdomainsp(:)
integer(kind=int32), intent(in), optional :: ContactList(:,:)
type(FEMDomain_), intent(in), optional, target :: femdomain1
type(FEMDomain_), intent(in), optional, target :: femdomain2
real(kind=real64), intent(in), optional :: AllYoungModulus
real(kind=real64), intent(in), optional :: AllPoissonRatio
real(kind=real64), intent(in), optional :: AllDensity

public subroutine fixContactMechanics(Obj, direction, disp, DomainID, x_min, x_max, y_min, y_max, z_min, z_max, NodeIDs, reduction)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(inout) :: Obj
character(len=1), intent(in) :: direction
real(kind=real64), intent(in) :: disp
integer(kind=int32), intent(in) :: DomainID
real(kind=real64), intent(in), optional :: x_min
real(kind=real64), intent(in), optional :: x_max
real(kind=real64), intent(in), optional :: y_min
real(kind=real64), intent(in), optional :: y_max
real(kind=real64), intent(in), optional :: z_min
real(kind=real64), intent(in), optional :: z_max
integer(kind=int32), intent(in), optional :: NodeIDs(:)
real(kind=real64), intent(in), optional :: reduction

public subroutine updateMeshContactMechanics(obj)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(inout), target :: obj

public subroutine runCM(obj, penaltyparameter, debug, GaussPointProjection)

call f%write(A_ij)

Read more…

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(inout), target :: obj
real(kind=real64), intent(in), optional :: penaltyparameter
logical, intent(in), optional :: debug
logical, intent(in), optional :: GaussPointProjection

public subroutine propertiesCM(obj, config, penalty, gravity)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(inout) :: obj
character(len=*), intent(in), optional :: config
real(kind=real64), intent(in), optional :: penalty
real(kind=real64), intent(in), optional :: gravity(3)

public subroutine UpdateContactConfiguration(obj, WeakCoupling, StrongCoupling)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(inout) :: obj
logical, intent(in), optional :: WeakCoupling
logical, intent(in), optional :: StrongCoupling

public subroutine ImportContactMechanics(obj)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(inout) :: obj

public subroutine deployContactMechanics(obj, IfaceObj)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(inout) :: obj
class(FEMIface_), intent(in), target :: IfaceObj

public subroutine ContactSearch(obj)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(inout) :: obj

public subroutine GetActiveContactElement(obj)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(inout) :: obj

public subroutine GetActiveNTS(obj)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(inout) :: obj

public subroutine GetNormalGap(xs, xm, gap)

Arguments

Type IntentOptional Attributes Name
real(kind=real64), intent(in) :: xs(:)
real(kind=real64), intent(in) :: xm(:,:)
real(kind=real64), intent(out) :: gap

public subroutine getKcmat(obj, Stick, StickSlip)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(inout) :: obj
logical, intent(in), optional :: Stick
logical, intent(in), optional :: StickSlip

public subroutine getKcmatStick(obj)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(inout) :: obj

public subroutine getKcmatStickSlip(obj)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(inout) :: obj

public subroutine state_stick(j, nod_max, old_nod_coord, nts_elem_nod, active_nts, nts_amo, k_contact, nts_mat, contact_mat_para, uvec, fvec_contact, stick_slip)

+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: j
integer, intent(in) :: nod_max
real(kind=real64), intent(in) :: old_nod_coord(:,:)
integer, intent(in) :: nts_elem_nod(:,:)
integer, intent(in) :: active_nts(:)
real(kind=real64), intent(inout) :: nts_amo(:,:)
real(kind=real64), intent(inout) :: k_contact(:,:)
integer, intent(in) :: nts_mat(:)
real(kind=real64), intent(in) :: contact_mat_para(:,:)
real(kind=real64), intent(in) :: uvec(:)
real(kind=real64), intent(inout) :: fvec_contact(:)
integer, intent(inout) :: stick_slip(:)

public subroutine ls_check_active_CM(obj)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(inout) :: obj

public subroutine check_gn(j, nts_elem_nod, check_active_nts, nod_coord)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: j
integer, intent(in) :: nts_elem_nod(:,:)
integer :: check_active_nts(:)
real(kind=real64), intent(in) :: nod_coord(:,:)

public subroutine update_friction(j, nod_max, nod_coord, nts_elem_nod, active_nts, surface_nod, sur_nod_inf, nts_amo, k_contact, uvec, duvec, fvec_contact, stick_slip, contact_mat_para, nts_mat, itr_contact)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: j
integer, intent(in) :: nod_max
real(kind=real64), intent(in) :: nod_coord(:,:)
integer, intent(in) :: nts_elem_nod(:,:)
integer, intent(in) :: active_nts(:)
integer, intent(in) :: surface_nod(:)
integer, intent(in) :: sur_nod_inf(:,:)
real(kind=real64), intent(inout) :: nts_amo(:,:)
real(kind=real64), intent(inout) :: k_contact(:,:)
real(kind=real64), intent(in) :: uvec(:)
real(kind=real64), intent(in) :: duvec(:)
real(kind=real64), intent(inout) :: fvec_contact(:)
integer, intent(inout) :: stick_slip(:)
real(kind=real64), intent(in) :: contact_mat_para(:,:)
integer, intent(in) :: nts_mat(:)
integer, intent(in) :: itr_contact

public subroutine update_res_grad_c_i(j, nod_max, old_nod_coord, nts_elem_nod, active_nts, nts_amo, k_contact, uvec, duvec, fvec_contact, stick_slip, contact_mat_para, nts_mat)

+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: j
integer, intent(in) :: nod_max
real(kind=real64), intent(in) :: old_nod_coord(:,:)
integer, intent(in) :: nts_elem_nod(:,:)
integer, intent(in) :: active_nts(:)
real(kind=real64), intent(inout) :: nts_amo(:,:)
real(kind=real64), intent(inout) :: k_contact(:,:)
real(kind=real64), intent(in) :: uvec(:)
real(kind=real64), intent(in) :: duvec(:)
real(kind=real64), intent(inout) :: fvec_contact(:)
integer, intent(inout) :: stick_slip(:)
real(kind=real64), intent(in) :: contact_mat_para(:,:)
integer, intent(in) :: nts_mat(:)

public subroutine update_res_grad_c(j, nod_max, old_nod_coord, nts_elem_nod, active_nts, nts_amo, k_contact, uvec, duvec, fvec_contact, stick_slip, contact_mat_para, nts_mat)

+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: j
integer, intent(in) :: nod_max
real(kind=real64), intent(in) :: old_nod_coord(:,:)
integer, intent(in) :: nts_elem_nod(:,:)
integer, intent(in) :: active_nts(:)
real(kind=real64), intent(inout) :: nts_amo(:,:)
real(kind=real64), intent(inout) :: k_contact(:,:)
real(kind=real64), intent(in) :: uvec(:)
real(kind=real64), intent(in) :: duvec(:)
real(kind=real64), intent(inout) :: fvec_contact(:)
integer, intent(inout) :: stick_slip(:)
real(kind=real64), intent(in) :: contact_mat_para(:,:)
integer, intent(in) :: nts_mat(:)

public subroutine disp_rvec(u_nod_x, u_nod_y, rvec)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: u_nod_x(:)
integer, intent(in) :: u_nod_y(:)
real(kind=real64), intent(inout) :: rvec(:)

public subroutine get_beta_st_nts(nts_ID, nts_elem_nod, nod_coord, beta)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nts_ID
integer, intent(in) :: nts_elem_nod(:,:)
real(kind=real64), intent(in) :: nod_coord(:,:)
integer, intent(out) :: beta

public subroutine ls_nts_generateCM(obj)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(inout) :: obj

public subroutine ls_nts_materialCM(obj)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(inout) :: obj

public subroutine save_nts_element(nts_elem_nod, nts_amo, old_nts_elem_nod, old_nts_amo, surface_nod, sur_nod_inf, stick_slip, old_stick_slip)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nts_elem_nod(:,:)
real(kind=real64), intent(in) :: nts_amo(:,:)
integer, intent(inout), allocatable :: old_nts_elem_nod(:,:)
real(kind=real64), intent(inout), allocatable :: old_nts_amo(:,:)
integer, intent(in) :: surface_nod(:)
integer, intent(in) :: sur_nod_inf(:,:)
integer, intent(in) :: stick_slip(:)
integer, intent(inout), allocatable :: old_stick_slip(:)

public subroutine get_next_segment(surface_nod, sur_nod_inf, shift, old_master, master1, master2)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: surface_nod(:)
integer, intent(in) :: sur_nod_inf(:,:)
integer, intent(in) :: shift
integer, intent(in) :: old_master
integer, intent(out) :: master1
integer, intent(out) :: master2

public subroutine load_nts_element(nts_elem_nod, nts_amo, old_nts_elem_nod, old_nts_amo, stick_slip, old_stick_slip)

Arguments

Type IntentOptional Attributes Name
integer, intent(inout) :: nts_elem_nod(:,:)
real(kind=real64), intent(inout) :: nts_amo(:,:)
integer, intent(in) :: old_nts_elem_nod(:,:)
real(kind=real64), intent(in) :: old_nts_amo(:,:)
integer, intent(inout) :: stick_slip(:)
integer, intent(in) :: old_stick_slip(:)

public subroutine ls_get_stabilized_ntsCM(obj)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(inout) :: obj

public subroutine setPenaltyParaCM(obj, para)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(inout) :: obj
real(kind=real64), intent(in) :: para

public subroutine updateContactStressCM(obj)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(inout) :: obj

public subroutine getGapCM(obj)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(inout) :: obj

public subroutine getForceCM(obj)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(inout) :: obj

public subroutine exportForceAsTractionCM(obj)

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Read more…

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(inout) :: obj

public subroutine updateTimestepContact(obj, timestep)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(inout) :: obj
integer, intent(in), optional :: timestep

public subroutine getDispBoundCM(obj)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(inout) :: obj

public subroutine ls_add_duCM(obj)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(inout) :: obj

public subroutine getTracBoundCM(obj, dim_num)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(inout) :: obj
integer(kind=int32), intent(in), optional :: dim_num

public subroutine displace_nr(Kmat, rvec, u_nod_x, u_nod_dis_x, u_nod_y, u_nod_dis_y)

Arguments

Type IntentOptional Attributes Name
real(kind=8), intent(inout) :: Kmat(:,:)
real(kind=8), intent(inout) :: rvec(:)
integer, intent(in) :: u_nod_x(:)
real(kind=8), intent(in) :: u_nod_dis_x(:)
integer, intent(in) :: u_nod_y(:)
real(kind=8), intent(in) :: u_nod_dis_y(:)

public subroutine displace(Kmat, Bvec, u_nod_x, u_nod_dis_x, u_nod_y, u_nod_dis_y)

Arguments

Type IntentOptional Attributes Name
real(kind=8), intent(inout) :: Kmat(:,:)
real(kind=8), intent(inout) :: Bvec(:)
integer, intent(in) :: u_nod_x(:)
real(kind=8), intent(in) :: u_nod_dis_x(:)
integer, intent(in) :: u_nod_y(:)
real(kind=8), intent(in) :: u_nod_dis_y(:)

public subroutine showPropertyCM(Obj)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(in) :: Obj

public subroutine setYoungModulus(Obj, YoungModulus, DomainID)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(inout) :: Obj
real(kind=real64), intent(in) :: YoungModulus
integer(kind=int32), intent(in), optional :: DomainID

public subroutine setPoissonRatio(Obj, PoissonRatio, DomainID)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(inout) :: Obj
real(kind=real64), intent(in) :: PoissonRatio
integer(kind=int32), intent(in), optional :: DomainID

public subroutine setDensity(Obj, density, DomainID)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(inout) :: Obj
real(kind=real64), intent(in) :: density
integer(kind=int32), intent(in), optional :: DomainID

public subroutine removeContactMechanics(obj)

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(inout) :: obj

public subroutine solveCM(obj, Algorithm)

update displacement udate traction force

Arguments

Type IntentOptional Attributes Name
class(ContactMechanics_), intent(inout), target :: obj
character(len=*), intent(in) :: Algorithm