ContactMechanicsClass Module



Contents


Derived Types

type, public :: ContactMechanics_

Components

TypeVisibility AttributesNameInitial
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(:)
real(kind=real64), public, allocatable:: YoungModulusList(:,:)
real(kind=real64), public, allocatable:: PoissonRatioList(:,:)
real(kind=real64), public, allocatable:: 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 :: 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

Subroutines

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

Arguments

Type IntentOptional AttributesName
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 AttributesName
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 AttributesName
class(ContactMechanics_), intent(inout), target:: obj

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

call f%write(A_ij)

Read more…

Arguments

Type IntentOptional AttributesName
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 AttributesName
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 AttributesName
class(ContactMechanics_), intent(inout) :: obj
logical, intent(in), optional :: WeakCoupling
logical, intent(in), optional :: StrongCoupling

public subroutine ImportContactMechanics(obj)

Arguments

Type IntentOptional AttributesName
class(ContactMechanics_), intent(inout) :: obj

public subroutine deployContactMechanics(obj, IfaceObj)

Arguments

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

public subroutine ContactSearch(obj)

Arguments

Type IntentOptional AttributesName
class(ContactMechanics_), intent(inout) :: obj

public subroutine GetActiveContactElement(obj)

Arguments

Type IntentOptional AttributesName
class(ContactMechanics_), intent(inout) :: obj

public subroutine GetActiveNTS(obj)

Arguments

Type IntentOptional AttributesName
class(ContactMechanics_), intent(inout) :: obj

public subroutine GetNormalGap(xs, xm, gap)

Arguments

Type IntentOptional AttributesName
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 AttributesName
class(ContactMechanics_), intent(inout) :: obj
logical, intent(in), optional :: Stick
logical, intent(in), optional :: StickSlip

public subroutine getKcmatStick(obj)

Arguments

Type IntentOptional AttributesName
class(ContactMechanics_), intent(inout) :: obj

public subroutine getKcmatStickSlip(obj)

Arguments

Type IntentOptional AttributesName
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 AttributesName
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 AttributesName
class(ContactMechanics_), intent(inout) :: obj

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

Arguments

Type IntentOptional AttributesName
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 AttributesName
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 AttributesName
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 AttributesName
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 AttributesName
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 AttributesName
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 AttributesName
class(ContactMechanics_), intent(inout) :: obj

public subroutine ls_nts_materialCM(obj)

Arguments

Type IntentOptional AttributesName
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 AttributesName
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 AttributesName
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 AttributesName
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 AttributesName
class(ContactMechanics_), intent(inout) :: obj

public subroutine setPenaltyParaCM(obj, para)

Arguments

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

public subroutine updateContactStressCM(obj)

Arguments

Type IntentOptional AttributesName
class(ContactMechanics_), intent(inout) :: obj

public subroutine getGapCM(obj)

Arguments

Type IntentOptional AttributesName
class(ContactMechanics_), intent(inout) :: obj

public subroutine getForceCM(obj)

Arguments

Type IntentOptional AttributesName
class(ContactMechanics_), intent(inout) :: obj

public subroutine exportForceAsTractionCM(obj)

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

Read more…

Arguments

Type IntentOptional AttributesName
class(ContactMechanics_), intent(inout) :: obj

public subroutine updateTimestepContact(obj, timestep)

Arguments

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

public subroutine getDispBoundCM(obj)

Arguments

Type IntentOptional AttributesName
class(ContactMechanics_), intent(inout) :: obj

public subroutine ls_add_duCM(obj)

Arguments

Type IntentOptional AttributesName
class(ContactMechanics_), intent(inout) :: obj

public subroutine getTracBoundCM(obj, dim_num)

Arguments

Type IntentOptional AttributesName
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 AttributesName
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 AttributesName
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 AttributesName
class(ContactMechanics_), intent(in) :: Obj

public subroutine setYoungModulus(Obj, YoungModulus, DomainID)

Arguments

Type IntentOptional AttributesName
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 AttributesName
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 AttributesName
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 AttributesName
class(ContactMechanics_), intent(inout) :: obj

public subroutine solveCM(obj, Algorithm)

update displacement udate traction force

Arguments

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