mirror of
https://github.com/JuliaFEM/JuliaFEM.jl.git
synced 2026-09-26 20:01:32 +00:00
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.
This commit is contained in:
@@ -45,6 +45,9 @@ using JuliaFEM.Testing
|
||||
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()
|
||||
|
||||
@@ -38,8 +38,9 @@ using JuliaFEM
|
||||
update!(bc.elements[1], "displacement 2", 0.0)
|
||||
update!(bc.elements[2], "displacement 1", 0.0)
|
||||
|
||||
solver = Solver(Linear, block, traction, bc)
|
||||
solver()
|
||||
solver = Solver(Linear, "solve 2d linear elasticity problem")
|
||||
add_problems!(solver, [block, traction, bc])
|
||||
solve!(solver, 0.0)
|
||||
|
||||
f = 288.0
|
||||
g = 576.0
|
||||
|
||||
@@ -32,9 +32,9 @@ using JuliaFEM.Testing
|
||||
update!(bc_elements_bottom, "displacement 2", 0.0)
|
||||
push!(bc_sym, bc_elements_left..., bc_elements_bottom...)
|
||||
|
||||
solver = NonlinearSolver("solve block problem")
|
||||
push!(solver, block, bc_sym)
|
||||
solver()
|
||||
solver = Solver(Nonlinear, "solve block problem")
|
||||
add_problems!(solver, [block, bc_sym])
|
||||
solve!(solver, 0.0)
|
||||
|
||||
# from code aster
|
||||
u3_expected = [-4.92316106779943E-01, 7.96321884292103E-01]
|
||||
|
||||
+1
-1
@@ -46,7 +46,7 @@ using JuliaFEM.Testing
|
||||
gradT(X) = [2*X[1] 4*X[2]]
|
||||
X = [0.5, 0.5]
|
||||
gradT1 = gradT(X)
|
||||
gradT2 = field("temperature", X, solver.time, Val{:Grad})
|
||||
gradT2 = field("temperature", X, 0.0, Val{:Grad})
|
||||
info("gradT1 = $gradT1, gradT2 = $gradT2")
|
||||
# [1.1666666666666625 1.5000000000000018] quite big difference ..?
|
||||
@test isapprox(gradT1, gradT2; rtol=25.0e-2)
|
||||
|
||||
+5
-13
@@ -26,20 +26,16 @@ using DataFrames
|
||||
push!(bc, boundary_element)
|
||||
solver = Solver(Linear, problem, bc)
|
||||
|
||||
solver.time = 0.0
|
||||
|
||||
empty!(problem.assembly)
|
||||
solver()
|
||||
solve!(solver, 0.0)
|
||||
@test isapprox(solver("temperature", 0.0)[3], 1.0)
|
||||
|
||||
empty!(problem.assembly)
|
||||
solver()
|
||||
@test isapprox(solver("temperature", 0.0)[3], 1.0)
|
||||
|
||||
solver.time = 1.0
|
||||
|
||||
empty!(problem.assembly)
|
||||
solver()
|
||||
solve!(solver, 1.0)
|
||||
@test isapprox(solver("temperature", 1.0)[3], 2.0)
|
||||
|
||||
empty!(problem.assembly)
|
||||
@@ -69,24 +65,20 @@ end
|
||||
push!(bc, boundary_element)
|
||||
solver = Solver(Nonlinear, problem, bc)
|
||||
|
||||
solver.time = 0.0
|
||||
|
||||
empty!(problem.assembly)
|
||||
solver()
|
||||
solve!(solver, 0.0)
|
||||
@test isapprox(solver("temperature", 0.0)[3], 1.0)
|
||||
|
||||
empty!(problem.assembly)
|
||||
solver()
|
||||
@test isapprox(solver("temperature", 0.0)[3], 1.0)
|
||||
|
||||
solver.time = 1.0
|
||||
|
||||
empty!(problem.assembly)
|
||||
solver()
|
||||
solve!(solver, 1.0)
|
||||
@test isapprox(solver("temperature", 1.0)[3], 2.0)
|
||||
|
||||
empty!(problem.assembly)
|
||||
solver()
|
||||
solve!(solver, 1.0)
|
||||
@test isapprox(solver("temperature", 1.0)[3], 2.0)
|
||||
|
||||
end
|
||||
|
||||
@@ -144,7 +144,6 @@ numéro fréquence (HZ) norme d'erreur
|
||||
|
||||
solver = Solver(Modal, body, fixed1, fixed2)
|
||||
solver.properties.nev = 5
|
||||
solver.xdmf = Xdmf()
|
||||
solver()
|
||||
freqs_jf = sqrt.(solver.properties.eigvals)/(2.0*pi)
|
||||
# with Tet4 elements
|
||||
|
||||
@@ -11,7 +11,7 @@ datadir = first(splitext(basename(@__FILE__)))
|
||||
function get_model()
|
||||
meshfile = joinpath(datadir, "block_2d.med")
|
||||
mesh = aster_read_mesh(meshfile)
|
||||
println(mesh.nodes[1])
|
||||
#error("mesh has $(length(mesh.nodes)) nodes")
|
||||
|
||||
upper = Problem(mesh, Elasticity, "UPPER", 2)
|
||||
lower = Problem(mesh, Elasticity, "LOWER", 2)
|
||||
@@ -59,6 +59,8 @@ end
|
||||
|
||||
solver = get_model()
|
||||
interface = solver["interface"]
|
||||
interface.assembly.u = zeros(48)
|
||||
interface.assembly.la = zeros(48)
|
||||
upper = solver["UPPER"]
|
||||
lower = solver["LOWER"]
|
||||
for body in [upper, lower]
|
||||
@@ -70,8 +72,7 @@ end
|
||||
|
||||
for time in [0.0, 1/3, 2/3, 1.0]
|
||||
interface.properties.iteration = 1
|
||||
solver.time = time
|
||||
solver()
|
||||
solve!(solver, time)
|
||||
end
|
||||
|
||||
node_ids, displacement = get_nodal_vector(interface.elements, "displacement", 1.0)
|
||||
|
||||
@@ -69,7 +69,7 @@ end
|
||||
|
||||
@testset "small sliding contact patch test, tet4 + standard basis" begin
|
||||
solver = get_model(tet4_meshfile)
|
||||
solver.xdmf = Xdmf("contact_sl_lin_disp_results"; overwrite=true)
|
||||
add_results_writer!(solver, Xdmf("contact_sl_lin_disp_results"; overwrite=true))
|
||||
interface = solver["LOWER_TO_UPPER"]
|
||||
interface.properties.dual_basis = false
|
||||
solver()
|
||||
@@ -91,7 +91,7 @@ end
|
||||
|
||||
@testset "small sliding contact patch test, tet4 + dual basis" begin
|
||||
solver = get_model(tet4_meshfile)
|
||||
solver.xdmf = Xdmf("contact_dl_lin_disp_results"; overwrite=true)
|
||||
add_results_writer!(solver, Xdmf("contact_dl_lin_disp_results"; overwrite=true))
|
||||
interface = solver["LOWER_TO_UPPER"]
|
||||
interface.properties.dual_basis = true
|
||||
solver()
|
||||
@@ -106,7 +106,7 @@ end
|
||||
|
||||
@testset "small sliding contact patch test, tet10 + standard basis" begin
|
||||
solver = get_model(tet10_meshfile)
|
||||
solver.xdmf = Xdmf("contact_sl_quad_disp_results"; overwrite=true)
|
||||
add_results_writer!(solver, Xdmf("contact_sl_quad_disp_results"; overwrite=true))
|
||||
interface = solver["LOWER_TO_UPPER"]
|
||||
interface.properties.dual_basis = false
|
||||
solver()
|
||||
@@ -121,7 +121,7 @@ end
|
||||
|
||||
@testset "small sliding contact patch test, tet10 + dual basis, alpha=0.2" begin
|
||||
solver = get_model(tet10_meshfile)
|
||||
solver.xdmf = Xdmf("contact_dl_quad_disp_results"; overwrite=true)
|
||||
add_results_writer!(solver, Xdmf("contact_dl_quad_disp_results"; overwrite=true))
|
||||
interface = solver["LOWER_TO_UPPER"]
|
||||
interface.properties.dual_basis = true
|
||||
interface.properties.alpha = 0.2
|
||||
|
||||
@@ -38,7 +38,7 @@ tet10_meshfile = "test_problems_mortar_3d/tet10.inp"
|
||||
|
||||
JuliaFEM.diagnose_interface(interface, 0.0)
|
||||
solver = LinearSolver(upper, lower, bc_upper, bc_lower, interface)
|
||||
solver.xdmf = Xdmf("sl_lin_temp_results")
|
||||
add_results_writer!(solver, Xdmf("sl_lin_temp_results"; overwrite=true))
|
||||
|
||||
solver()
|
||||
|
||||
@@ -92,7 +92,7 @@ end
|
||||
|
||||
JuliaFEM.diagnose_interface(interface, 0.0)
|
||||
solver = LinearSolver(upper, lower, bc_upper, bc_lower, interface)
|
||||
solver.xdmf = Xdmf("dl_lin_temp_results")
|
||||
add_results_writer!(solver, Xdmf("dl_lin_temp_results"; overwrite=true))
|
||||
|
||||
solver()
|
||||
|
||||
@@ -138,7 +138,7 @@ end
|
||||
# JuliaFEM.diagnose_interface(interface, 0.0)
|
||||
|
||||
solver = LinearSolver(upper, lower, bc_upper, bc_lower, interface)
|
||||
solver.xdmf = Xdmf("sl_quad_temp_results")
|
||||
add_results_writer!(solver, Xdmf("sl_quad_temp_results"; overwrite=true))
|
||||
solver()
|
||||
|
||||
node_ids, temperature = get_nodal_vector(interface.elements, "temperature", 0.0)
|
||||
@@ -185,7 +185,7 @@ end
|
||||
interface.properties.alpha = 0.2
|
||||
|
||||
solver = LinearSolver(upper, lower, bc_upper, bc_lower, interface)
|
||||
solver.xdmf = Xdmf("dl_quad_temp_results")
|
||||
add_results_writer!(solver, Xdmf("dl_quad_temp_results"; overwrite=true))
|
||||
solver()
|
||||
|
||||
node_ids, temperature = get_nodal_vector(interface.elements, "temperature", 0.0)
|
||||
@@ -257,7 +257,7 @@ end
|
||||
interface.properties.dual_basis = false
|
||||
|
||||
solver = LinearSolver(upper, lower, bc_upper, bc_lower, bc_sym13, bc_sym23, interface)
|
||||
solver.xdmf = Xdmf("sl_lin_disp_results")
|
||||
add_results_writer!(solver, Xdmf("sl_lin_disp_results"; overwrite=true))
|
||||
solver()
|
||||
|
||||
node_ids, displacement = get_nodal_vector(interface.elements, "displacement", 0.0)
|
||||
@@ -319,7 +319,7 @@ end
|
||||
interface.properties.dual_basis = true
|
||||
|
||||
solver = LinearSolver(upper, lower, bc_upper, bc_lower, bc_sym13, bc_sym23, interface)
|
||||
solver.xdmf = Xdmf("dl_lin_disp_results")
|
||||
add_results_writer!(solver, Xdmf("dl_lin_disp_results"; overwrite=true))
|
||||
solver()
|
||||
|
||||
node_ids, displacement = get_nodal_vector(interface.elements, "displacement", 0.0)
|
||||
@@ -382,7 +382,7 @@ end
|
||||
interface.properties.dual_basis = false
|
||||
|
||||
solver = LinearSolver(upper, lower, bc_upper, bc_lower, bc_sym13, bc_sym23, interface)
|
||||
solver.xdmf = Xdmf("sl_quad_disp_results")
|
||||
add_results_writer!(solver, Xdmf("sl_quad_disp_results"; overwrite=true))
|
||||
solver()
|
||||
|
||||
node_ids, displacement = get_nodal_vector(interface.elements, "displacement", 0.0)
|
||||
@@ -447,7 +447,7 @@ end
|
||||
interface.properties.alpha = 0.2
|
||||
|
||||
solver = LinearSolver(upper, lower, bc_upper, bc_lower, bc_sym13, bc_sym23, interface)
|
||||
solver.xdmf = Xdmf("dl_quad_disp_results")
|
||||
add_results_writer!(solver, Xdmf("dl_quad_disp_results"; overwrite=true))
|
||||
solver()
|
||||
|
||||
node_ids, displacement = get_nodal_vector(interface.elements, "displacement", 0.0)
|
||||
|
||||
@@ -68,7 +68,8 @@ datadir = first(splitext(basename(@__FILE__)))
|
||||
|
||||
solver = NonlinearSolver(upper, lower, bc_upper, bc_lower, bc_sym13, bc_sym23, interface)
|
||||
|
||||
solver.xdmf = Xdmf("contact_two_blocks_postprocess"; overwrite=true)
|
||||
xdmf = Xdmf("contact_two_blocks_postprocess"; overwrite=true)
|
||||
add_results_writer!(solver, xdmf)
|
||||
solver()
|
||||
|
||||
node_ids, displacement = get_nodal_vector(interface.elements, "displacement", 0.0)
|
||||
|
||||
Reference in New Issue
Block a user