mirror of
https://github.com/JuliaFEM/JuliaFEM.jl.git
synced 2026-08-14 08:04:19 +00:00
72 lines
2.4 KiB
Julia
72 lines
2.4 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.Test
|
|
|
|
#= TODO: Fix test
|
|
|
|
facts("test interpolation of fields") do
|
|
|
|
# interpolation of field in spatial domain
|
|
N = Basis((xi) -> [0.5*(1.0-xi[1]), 0.5*(1.0+xi[1])])
|
|
u = Field(0.0, [0.0, 1.0])
|
|
@fact interpolate(N, u, [0.0]) --> 0.5
|
|
|
|
# interpolation of fieldset in time domain
|
|
u1 = Field(0.0, [0.0, 1.0])
|
|
u2 = Field(1.0, [1.0, 2.0])
|
|
u = FieldSet("displacement", [u1, u2])
|
|
@fact interpolate(u, 0.5).values --> [0.5, 1.5]
|
|
@fact interpolate(u, 0.5).time --> 0.5
|
|
|
|
# interpolation of fieldset is defined for every time value:
|
|
u1 = Field(0.0, [0.0, 0.0])
|
|
u2 = Field(1.0, [1.0, 2.0])
|
|
u3 = Field(2.0, [0.5, 1.5])
|
|
u = FieldSet("displacement", [u1, u2, u3])
|
|
@fact interpolate(u, -1.0).values --> [0.0, 0.0] # "out of range -" -> first known value
|
|
@fact interpolate(u, 0.0).values --> [0.0, 0.0]
|
|
@fact interpolate(u, 1.0).values --> [1.0, 2.0]
|
|
@fact interpolate(u, 2.0).values --> [0.5, 1.5]
|
|
@fact interpolate(u, 3.0).values --> [0.5, 1.5] # "out of range +" -> last known value
|
|
@fact interpolate(u, 0.5).values --> [0.5, 1.0]
|
|
@fact interpolate(u, 1.5).values --> [0.75, 1.75]
|
|
# use Inf to get very first or last value of field
|
|
@fact interpolate(u, -Inf).values --> [0.0, 0.0]
|
|
@fact interpolate(u, +Inf).values --> [0.5, 1.5]
|
|
|
|
# multidimensional interpolation with and without derivatives
|
|
h(xi) = [
|
|
(1-xi[1])*(1-xi[2])/4
|
|
(1+xi[1])*(1-xi[2])/4
|
|
(1+xi[1])*(1+xi[2])/4
|
|
(1-xi[1])*(1+xi[2])/4]
|
|
dh(xi) = [
|
|
-(1-xi[2])/4.0 -(1-xi[1])/4.0
|
|
(1-xi[2])/4.0 -(1+xi[1])/4.0
|
|
(1+xi[2])/4.0 (1+xi[1])/4.0
|
|
-(1+xi[2])/4.0 (1-xi[1])/4.0]
|
|
N = Basis(h, dh)
|
|
|
|
X = Field(0.0, Vector[[0.0, 0.0], [1.0, 0.0], [1.0, 1.0], [0.0, 1.0]])
|
|
|
|
# get midpoint of field in spatial domain
|
|
@fact interpolate(N, X, [0.0, 0.0]) --> [0.5, 0.5]
|
|
|
|
# interpolate of scalar field -> scalar
|
|
H = Field(0.0, 6.0)
|
|
@fact interpolate(N, H, [0.0, 0.0]) --> 6.0
|
|
|
|
# multiplying scalar field with a vector -> vector
|
|
# this is actually not so good idea...
|
|
#h(xi) = [1/2*(1-xi[1]), 1/2*(1+xi[1])]
|
|
#dh(xi) = [-1/2 1/2]'
|
|
#N = Basis(h, dh)
|
|
#f = Field(0.0, 100.0)
|
|
#@fact interpolate(N, f, [0.0]) --> [50.0, 50.0]
|
|
|
|
end
|
|
|
|
=#
|