# This file is a part of JuliaFEM. # License is MIT: see https://github.com/JuliaFEM/JuliaFEM.jl/blob/master/LICENSE.md using JuliaFEM using JuliaFEM.Preprocess using JuliaFEM.Postprocess using JuliaFEM.Testing @testset "2d curved block with frictionless finite sliding contact using forwarddiff" begin meshfile = @__DIR__() * "/testdata/block_2d_curved.med" mesh = aster_read_mesh(meshfile) upper = Problem(Elasticity, "upper", 2) upper.properties.formulation = :plane_stress upper.properties.finite_strain = true upper.properties.geometric_stiffness = true upper.elements = create_elements(mesh, "UPPER") update!(upper, "youngs modulus", 96.0) update!(upper, "poissons ratio", 1/3) lower = Problem(Elasticity, "lower", 2) lower.properties.formulation = :plane_stress lower.properties.finite_strain = true lower.properties.geometric_stiffness = true lower.elements = create_elements(mesh, "LOWER") update!(lower, "youngs modulus", 96.0) update!(lower, "poissons ratio", 1/3) bc_upper = Problem(Dirichlet, "upper boundary", 2, "displacement") bc_upper.elements = create_elements(mesh, "UPPER_TOP") update!(bc_upper, "displacement 1", 0.0) update!(bc_upper, "displacement 2", -0.15) bc_lower = Problem(Dirichlet, "lower boundary", 2, "displacement") bc_lower.elements = create_elements(mesh, "LOWER_BOTTOM") update!(bc_lower, "displacement 1", 0.0) update!(bc_lower, "displacement 2", 0.0) contact = Problem(Contact, "contact between upper and lower block", 2, "displacement") contact.properties.rotate_normals = true contact.properties.finite_sliding = true contact.properties.friction = false contact.properties.use_forwarddiff = true contact_slave_elements = create_elements(mesh, "LOWER_TOP") contact_master_elements = create_elements(mesh, "UPPER_BOTTOM") update!(contact_slave_elements, "master elements", contact_master_elements) contact.elements = [contact_master_elements; contact_slave_elements] solver = NonlinearSolver(upper, lower, bc_upper, bc_lower, contact) solver() normu = norm(contact.assembly.u) info("displacement vector norm = $normu") @test isapprox(normu, 0.4974792662500015; atol=1.0e-5) end #= TODO: Fix test, this is not converging @testset "project from master to slave" begin el = Element(Seg2, [1, 2]) x1 = DVTI(Vector{Float64}[ [ 0.07406987526791842, 0.6628967239474994], [-0.24633092752656838, 0.4732606367688589]]) n1 = DVTI(Vector{Float64}[ [0.40398625635635355, 0.9147650543583191], [-0.5093430176405901, 0.860563588807229]]) x2 = [0.5049198709043257, 0.27765317280577695] xi = project_from_master_to_slave(el, x1, n1, x2; debug=true) info("xi = $xi") end =#