Files
JuliaFEM.jl/test/test_contact_2d_finite_sliding.jl
T
Jukka Aho dce7472cda Make JuliaFEM to use Analysis type from FEMBase
`Analysis` is basically doing same than `Solver` before, but has a
slighly simpler structure and is more general.
2018-01-29 23:13:41 +07:00

74 lines
2.9 KiB
Julia

# 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]
nnodes = length(mesh.nodes)
contact.assembly.u = zeros(2*nnodes)
contact.assembly.la = zeros(2*nnodes)
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
=#