mirror of
https://github.com/JuliaFEM/JuliaFEM.jl.git
synced 2026-09-19 17:58:53 +00:00
fields, solvers
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
# https://github.com/JuliaFEM/JuliaFEM.jl/blob/master/notebooks/2015-06-14-data-structures.ipynb
|
||||
|
||||
abstract Field
|
||||
|
||||
abstract DiscreteField <: Field
|
||||
abstract ContinuousField <: Field
|
||||
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
# This file is a part of JuliaFEM.
|
||||
# License is MIT: see https://github.com/JuliaFEM/JuliaFEM.jl/blob/master/LICENSE.md
|
||||
|
||||
# https://github.com/JuliaFEM/JuliaFEM.jl/blob/master/notebooks/2015-06-14-data-structures.ipynb
|
||||
|
||||
abstract AbstractField
|
||||
|
||||
abstract Discrete <: AbstractField
|
||||
abstract Continuous <: AbstractField
|
||||
abstract Constant <: AbstractField
|
||||
abstract Variable <: AbstractField
|
||||
abstract TimeVariant <: AbstractField
|
||||
abstract TimeInvariant <: AbstractField
|
||||
|
||||
type Field{A<:Union{Discrete,Continuous}, B<:Union{Constant,Variable}, C<:Union{TimeVariant,TimeInvariant}}
|
||||
data
|
||||
end
|
||||
|
||||
# Different field combinations
|
||||
typealias DCTI Field{Discrete, Constant, TimeInvariant}
|
||||
typealias DVTI Field{Discrete, Variable, TimeInvariant}
|
||||
typealias DCTV Field{Discrete, Constant, TimeVariant}
|
||||
typealias DVTV Field{Discrete, Variable, TimeVariant}
|
||||
typealias CCTI Field{Continuous, Constant, TimeInvariant}
|
||||
typealias CVTI Field{Continuous, Variable, TimeInvariant} # can be used to interpolate in spatial dimension
|
||||
typealias CCTV Field{Continuous, Constant, TimeVariant} # can be used to interpolate in time
|
||||
typealias CVTV Field{Continuous, Variable, TimeVariant}
|
||||
|
||||
# Basic data structure for discrete field
|
||||
type Increment{T}
|
||||
time :: Float64
|
||||
data :: T
|
||||
end
|
||||
|
||||
typealias VectorIncrement Increment{Vector}
|
||||
|
||||
function Base.getindex{T}(increment::Increment{Vector{T}}, i::Int64)
|
||||
return increment.data[i]
|
||||
end
|
||||
|
||||
# Basic data structure for continuous field
|
||||
type Basis
|
||||
basis :: Function
|
||||
dbasis :: Function
|
||||
end
|
||||
|
||||
# Functions simplifying definition of fields.
|
||||
|
||||
"""
|
||||
All other data than vectors are considered as constant time invariant fields.
|
||||
"""
|
||||
function Field(data)
|
||||
DCTI(data)
|
||||
end
|
||||
|
||||
"""
|
||||
Vector data is considered as variable field time invariant field.
|
||||
"""
|
||||
function Field(data::Vector)
|
||||
DVTI(data)
|
||||
end
|
||||
|
||||
"""
|
||||
Data given in (time, value) pairs, where value is not vector, is considered as
|
||||
constant time variant field.
|
||||
"""
|
||||
function Field{T}(data::Pair{Float64, T}...)
|
||||
increments = [Increment{T}(d[1], d[2]) for d in data]
|
||||
DCTV(increments)
|
||||
end
|
||||
|
||||
"""
|
||||
Data given in (time, value) pairs, where value is a vector, is considered as
|
||||
variable time variant field.
|
||||
"""
|
||||
function Field{T}(data::Pair{Float64, Vector{T}}...)
|
||||
increments = [Increment{Vector{T}}(d[1], d[2]) for d in data]
|
||||
DVTV(increments)
|
||||
end
|
||||
|
||||
""" Special case, constant time-variant vector, converted automatically. """
|
||||
function Base.convert{T}(::Type{DCTV}, data::Pair{Float64, Vector{T}}...)
|
||||
increments = [Increment(d[1], d[2]) for d in data]
|
||||
DCTV(increments)
|
||||
end
|
||||
|
||||
## Other field related functions
|
||||
|
||||
function Base.getindex(field::DVTV, i::Int64)
|
||||
return field.data[i]
|
||||
end
|
||||
|
||||
|
||||
### FIELDSET ###
|
||||
|
||||
typealias FieldSet Dict{ASCIIString, Field}
|
||||
+2
-2
@@ -86,8 +86,8 @@ function Base.push!(solver::Solver, problem::Problem)
|
||||
end
|
||||
|
||||
""" Get all problems assigned to solver. """
|
||||
function get_problems(s::Solver)
|
||||
return s.problems
|
||||
function get_problems(solver::Solver)
|
||||
return solver.problems
|
||||
end
|
||||
|
||||
## SimpleSolver -- tiny direct demo solver
|
||||
|
||||
Reference in New Issue
Block a user