module ContactDiffusionClass use, intrinsic :: iso_fortran_env use MathClass use FEMIfaceClass use FEMDomainClass use FiniteDeformationClass implicit none type :: ContactDiffusion_ ! Modern type(FEMDomainp_), allocatable :: FEMDomains(:) type(LinearSolver_) :: solver integer(int32), allocatable :: contactlist(:, :) real(real64), allocatable :: YoungModulus(:) real(real64), allocatable :: PoissonRatio(:) real(real64), allocatable :: Density(:) real(real64), allocatable :: YoungModulusList(:, :) real(real64), allocatable :: PoissonRatioList(:, :) real(real64), allocatable :: DensityList(:, :) logical :: initialized = .false. real(real64) :: gravity(1:3) = [0.0d0, 0.0d0, -9.810d0] real(real64) :: penalty = 100000.0d0 contains procedure :: Init => InitializeContactDiffusion procedure :: setup => runContactDiffusion procedure :: fix => fixContactDiffusion procedure :: solve => solveContactDiffusion end type contains ! ############################################################### subroutine InitializeContactDiffusion(obj) class(ContactDiffusion_), intent(inout) :: obj end subroutine ! ############################################################### ! ############################################################### subroutine runContactDiffusion(obj) class(ContactDiffusion_), intent(inout) :: obj end subroutine ! ############################################################### ! ############################################################### subroutine fixContactDiffusion(obj) class(ContactDiffusion_), intent(inout) :: obj end subroutine ! ############################################################### ! ############################################################### subroutine solveContactDiffusion(obj) class(ContactDiffusion_), intent(inout) :: obj end subroutine ! ############################################################### end module ContactDiffusionClass