Files
JuliaFEM.jl/src/types.jl
T

86 lines
2.5 KiB
Julia
Raw Normal View History

2015-08-16 13:33:02 +03:00
# This file is a part of JuliaFEM.
# License is MIT: see https://github.com/JuliaFEM/JuliaFEM.jl/blob/master/LICENSE.md
2015-12-23 17:39:53 +02:00
typealias Node Vector{Float64}
2015-11-05 10:20:00 +02:00
function ForwardDiff.derivative{T}(f::Function, S::Matrix{T}, args...)
shape = size(S)
wrapper(S::Vector) = f(reshape(S, shape))
deriv = ForwardDiff.gradient(wrapper, vec(S), args...)
return reshape(deriv, shape)
end
2015-10-21 07:24:19 +03:00
"""
Integration point
2015-11-05 10:20:00 +02:00
xi
2015-10-21 07:24:19 +03:00
(dimensionless) coordinates of integration point
2015-11-05 10:20:00 +02:00
weight
integration weight
fields
FieldSet what can be used to store internal variables, stress, strain, ...
2015-10-21 07:24:19 +03:00
"""
2015-12-04 07:27:40 +02:00
immutable IntegrationPoint
2015-10-30 12:40:56 +02:00
xi :: Vector
2015-10-21 07:24:19 +03:00
weight :: Float64
fields :: Dict{ASCIIString, Field}
changed :: Bool
2015-10-21 07:24:19 +03:00
end
2015-11-05 10:20:00 +02:00
2015-10-21 07:24:19 +03:00
function IntegrationPoint(xi, weight)
return IntegrationPoint(xi, weight, FieldSet(), false)
2015-10-21 07:24:19 +03:00
end
function setindex!{T<:ForwardDiff.ForwardDiffNumber}(ip::IntegrationPoint, data::Array{T,2}, field_name::ASCIIString)
data = ForwardDiff.get_value(data)
setindex!(ip, data, field_name)
end
function setindex!(ip::IntegrationPoint, data, field_name)
ip.fields[field_name] = Field(data)
ip.changed = true
end
function getindex(ip::IntegrationPoint, field_name::ASCIIString)
ip.fields[field_name]
end
function convert(::Type{Number}, ip::IntegrationPoint)
2015-11-05 10:20:00 +02:00
return ip.xi
end
2015-11-11 00:52:16 +02:00
function call(field::CVTI, ip::IntegrationPoint)
2015-11-21 18:23:41 +02:00
return call(field, ip.xi)
2015-11-11 00:52:16 +02:00
end
function call(basis::CVTI, field::DCTI, ip::IntegrationPoint)
2015-11-21 18:23:41 +02:00
call(basis, field, ip.xi)
2015-11-11 00:52:16 +02:00
end
function call(basis::CVTI, field::DVTI, ip::IntegrationPoint, ::Type{Val{:grad}})
2015-11-21 18:23:41 +02:00
call(basis, field, ip.xi, Val{:grad})
2015-11-11 00:52:16 +02:00
end
function call(basis::CVTI, field::DVTI, ip::IntegrationPoint)
2015-11-21 18:23:41 +02:00
call(basis, field, ip.xi)
2015-11-11 00:52:16 +02:00
end
2015-11-21 18:23:41 +02:00
function call(basis::CVTI, geometry::DVTI, field::Union{DCTI, DVTI}, ip::IntegrationPoint, ::Type{Val{:grad}})
2015-11-21 18:23:41 +02:00
call(basis, geometry, field, ip.xi, Val{:grad})
end
#function Base.call(basis::Basis, increment::Increment, ip::IntegrationPoint)
# return call(basis, increment, ip.xi)
#end
#function Base.call(basis::Basis, increment::Increment, ip::IntegrationPoint, ::Type{Val{:grad}})
# return call(basis, increment, ip.xi, Val{:grad})
#end
#function Base.call(basis::Basis, field::Field, ip::IntegrationPoint, ::Type{Val{:grad}})
# return call(basis, field, ip.xi, Val{:grad})
#end
#function Base.call(basis::Basis, geometry::Increment, field::Increment, ip::IntegrationPoint, ::Type{Val{:grad}})
# return call(basis, geometry, field, ip.xi, Val{:grad})
#end
#function Base.call(basis::Basis, field::Field, ip::IntegrationPoint)
# return call(basis, field, ip.xi)
#end