2016-05-24 08:01:41 +03:00
|
|
|
# This file is a part of JuliaFEM.
|
|
|
|
|
# License is MIT: see https://github.com/JuliaFEM/JuliaFEM.jl/blob/master/LICENSE.md
|
|
|
|
|
|
2018-09-06 12:08:16 +03:00
|
|
|
using JuliaFEM, Test
|
2016-05-24 08:01:41 +03:00
|
|
|
|
2018-09-06 12:08:16 +03:00
|
|
|
function calc_model(mesh_name; with_volume_load=false)
|
2017-08-05 04:17:44 -04:00
|
|
|
meshfile = @__DIR__()*"/testdata/3d_block.med"
|
2016-07-03 21:16:03 +03:00
|
|
|
mesh = aster_read_mesh(meshfile, mesh_name)
|
2016-05-24 08:01:41 +03:00
|
|
|
|
2016-07-03 21:16:03 +03:00
|
|
|
block = Problem(Elasticity, "BLOCK", 3)
|
2016-05-24 08:01:41 +03:00
|
|
|
block.properties.finite_strain = false
|
2016-06-19 20:01:37 +03:00
|
|
|
block.properties.geometric_stiffness = false
|
2016-05-24 08:01:41 +03:00
|
|
|
|
2018-09-06 12:08:16 +03:00
|
|
|
block_elements = create_elements(mesh, "BLOCK")
|
|
|
|
|
update!(block_elements, "youngs modulus", 288.0)
|
|
|
|
|
update!(block_elements, "poissons ratio", 1/3)
|
|
|
|
|
with_volume_load && update!(block_elements, "displacement load 3", 576.0)
|
|
|
|
|
add_elements!(block, block_elements)
|
|
|
|
|
|
|
|
|
|
traction_elements = create_elements(mesh, "LOAD")
|
|
|
|
|
update!(traction_elements, "displacement traction force 3", 288.0)
|
|
|
|
|
add_elements!(block, traction_elements)
|
2016-05-24 08:01:41 +03:00
|
|
|
|
|
|
|
|
bc = Problem(Dirichlet, "symmetry boundary condition", 3, "displacement")
|
2016-07-03 21:16:03 +03:00
|
|
|
symyz = create_elements(mesh, "SYMYZ")
|
|
|
|
|
symxz = create_elements(mesh, "SYMXZ")
|
|
|
|
|
symxy = create_elements(mesh, "SYMXY")
|
2016-05-24 08:01:41 +03:00
|
|
|
update!(symyz, "displacement 1", 0.0)
|
|
|
|
|
update!(symxz, "displacement 2", 0.0)
|
|
|
|
|
update!(symxy, "displacement 3", 0.0)
|
2018-09-06 12:08:16 +03:00
|
|
|
add_elements!(bc, symyz, symxz, symxy)
|
2016-05-24 08:01:41 +03:00
|
|
|
|
2018-09-06 12:08:16 +03:00
|
|
|
analysis = Analysis(Linear)
|
|
|
|
|
add_problems!(analysis, block, bc)
|
|
|
|
|
run!(analysis)
|
2016-07-03 21:16:03 +03:00
|
|
|
|
2018-09-06 12:08:16 +03:00
|
|
|
u = block("displacement", 0.0)
|
|
|
|
|
max_u = maximum(maximum(ui for ui in values(u)))
|
|
|
|
|
return max_u
|
2016-05-24 08:01:41 +03:00
|
|
|
end
|
|
|
|
|
|
2016-05-25 02:44:04 +03:00
|
|
|
|
2018-09-06 12:08:16 +03:00
|
|
|
# 3d block HEX8
|
|
|
|
|
max_u = calc_model("BLOCK_HEX8"; with_volume_load=true)
|
|
|
|
|
@test isapprox(max_u, 2.0)
|
2016-05-24 19:05:25 +03:00
|
|
|
|
2018-09-06 12:08:16 +03:00
|
|
|
# 3d block TET4
|
|
|
|
|
max_u = calc_model("BLOCK_TET4"; with_volume_load=false)
|
|
|
|
|
@test isapprox(max_u, 1.0)
|
2016-07-03 21:16:03 +03:00
|
|
|
|
2018-09-06 12:08:16 +03:00
|
|
|
# 3d block TET10
|
|
|
|
|
max_u = calc_model("BLOCK_TET10"; with_volume_load=false)
|
|
|
|
|
@test isapprox(max_u, 1.0)
|