2016-07-07 18:04:09 +03:00
|
|
|
|
# This file is a part of JuliaFEM.
|
|
|
|
|
|
# License is MIT: see https://github.com/JuliaFEM/JuliaFEM.jl/blob/master/LICENSE.md
|
2016-07-10 04:26:21 +03:00
|
|
|
|
|
2018-09-06 12:08:16 +03:00
|
|
|
|
using JuliaFEM, LinearAlgebra, Statistics, Test
|
2016-07-07 18:04:09 +03:00
|
|
|
|
|
2018-05-03 15:37:37 +03:00
|
|
|
|
mesh = aster_read_mesh(@__DIR__()*"/testdata/primitives.med", "CYLINDER_20_TET4")
|
2018-09-06 12:08:16 +03:00
|
|
|
|
problem_elements = create_elements(mesh, "CYLINDER")
|
|
|
|
|
|
update!(problem_elements, "thermal conductivity", 200.0)
|
|
|
|
|
|
outer_elements = create_elements(mesh, "FACE2", "FACE3")
|
|
|
|
|
|
update!(outer_elements, "external temperature", 20.0)
|
|
|
|
|
|
update!(outer_elements, "heat transfer coefficient", 1.0)
|
2018-05-03 15:37:37 +03:00
|
|
|
|
#midline = Problem(Heat, "midline of rod", 1)
|
|
|
|
|
|
#midline.elements = create_elements(mesh, "INNER_LINE")
|
2018-09-06 12:08:16 +03:00
|
|
|
|
boundary_elements = create_elements(mesh, "FACE1")
|
|
|
|
|
|
update!(boundary_elements, "temperature 1", 100.0)
|
|
|
|
|
|
|
|
|
|
|
|
problem = Problem(Heat, "rod of length 20", 1)
|
|
|
|
|
|
add_elements!(problem, problem_elements)
|
|
|
|
|
|
outer = Problem(Heat, "outer surface", 1)
|
|
|
|
|
|
add_elements!(outer, outer_elements)
|
2018-05-03 15:37:37 +03:00
|
|
|
|
boundary = Problem(Dirichlet, "homogeneous dirichlet boundary", 1, "temperature")
|
2018-09-06 12:08:16 +03:00
|
|
|
|
add_elements!(boundary, boundary_elements)
|
|
|
|
|
|
|
|
|
|
|
|
analysis = Analysis(Linear)
|
|
|
|
|
|
add_problems!(analysis, problem, outer, boundary)
|
|
|
|
|
|
run!(analysis)
|
2016-07-07 18:04:09 +03:00
|
|
|
|
|
2018-05-03 15:37:37 +03:00
|
|
|
|
# Analytical solution
|
|
|
|
|
|
L = 20
|
|
|
|
|
|
k = 200.0
|
|
|
|
|
|
Tu = 20.0
|
|
|
|
|
|
h = 1.0
|
|
|
|
|
|
P = 2*pi
|
|
|
|
|
|
A = pi
|
|
|
|
|
|
α = h
|
|
|
|
|
|
β = sqrt((h*P)/(k*A))
|
|
|
|
|
|
T0 = 100.0
|
|
|
|
|
|
C = [1.0 1.0; (α+k*β)*exp(β*L) (α-k*β)*exp(-β*L)] \ [T0-Tu, 0]
|
2016-07-07 18:04:09 +03:00
|
|
|
|
|
2018-05-03 15:37:37 +03:00
|
|
|
|
T_diff = []
|
2018-09-06 12:08:16 +03:00
|
|
|
|
for x in range(0, stop=20)
|
|
|
|
|
|
T_FEM = problem("temperature", [x, 0.0, 0.0], 0.0)[1]
|
2018-05-03 15:37:37 +03:00
|
|
|
|
T_ACC = dot(C, [exp(β*x), exp(-β*x)]) + Tu
|
|
|
|
|
|
push!(T_diff, norm(T_FEM - T_ACC))
|
2016-07-07 18:04:09 +03:00
|
|
|
|
end
|
2018-09-06 12:08:16 +03:00
|
|
|
|
@debug("mean diff on heat problem", mean(T_diff))
|
2016-07-07 18:04:09 +03:00
|
|
|
|
|
2018-05-03 15:37:37 +03:00
|
|
|
|
@test mean(T_diff) < 1.2 # mean diff = 1.14
|