mirror of
https://github.com/JuliaFEM/JuliaFEM.jl.git
synced 2026-09-19 17:58:53 +00:00
40 lines
1.5 KiB
Julia
40 lines
1.5 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: get_basis, grad, FieldSet, Field, Quad4
|
|
using FactCheck
|
|
|
|
|
|
facts("basic continuum interpolations") do
|
|
|
|
element = Quad4([1, 2, 3, 4])
|
|
|
|
element["geometry"] = Vector[[0.0, 0.0], [1.0, 0.0], [1.0, 1.0], [0.0, 1.0]]
|
|
element["temperature"] = ([0.0, 0.0, 0.0, 0.0], [1.0, 2.0, 3.0, 4.0])
|
|
element["displacement"] = (
|
|
Vector[[0.0, 0.0], [0.0, 0.0], [0.00, 0.0], [0.0, 0.0]],
|
|
Vector[[0.0, 0.0], [0.0, 0.0], [0.25, 0.0], [0.0, 0.0]])
|
|
|
|
# from my old home works
|
|
basis = get_basis(element)
|
|
dbasis = grad(basis)
|
|
@fact basis("geometry", [0.0, 0.0], 1.0) + basis("displacement", [0.0, 0.0], 1.0) --> [9/16, 1/2]
|
|
gradu = dbasis("displacement", [0.0, 0.0], 1.0)
|
|
epsilon = 1/2*(gradu + gradu')
|
|
rotation = 1/2*(gradu - gradu')
|
|
X = basis("geometry", [0.0, 0.0], 1.0)
|
|
k = 0.25
|
|
epsilon_wanted = [X[2]*k 1/2*X[1]*k; 1/2*X[1]*k 0]
|
|
rotation_wanted = [0 k/2*X[1]; -k/2*X[1] 0]
|
|
@fact epsilon --> roughly(epsilon_wanted)
|
|
@fact rotation --> roughly(rotation_wanted)
|
|
F = I + gradu
|
|
@fact F --> [X[2]*k+1 X[1]*k; 0 1]
|
|
C = F'*F
|
|
@fact C --> [(X[2]*k+1)^2 (X[2]*k+1)*X[1]*k; (X[2]*k+1)*X[1]*k X[1]^2*k^2+1]
|
|
E = 1/2*(F'*F - I)
|
|
@fact E --> [1/2*(X[2]*k + 1)^2-1/2 1/2*(X[2]*k+1)*X[1]*k; 1/2*(X[2]*k + 1)*X[1]*k 1/2*X[1]^2*k^2]
|
|
U = 1/sqrt(trace(C) + 2*sqrt(det(C)))*(C + sqrt(det(C))*I)
|
|
#@fact U --> roughly([1.24235 0.13804; 0.13804 1.02149])
|
|
end
|