2015-10-09 23:45:28 +03:00
|
|
|
# This file is a part of JuliaFEM.
|
|
|
|
|
# License is MIT: see https://github.com/JuliaFEM/JuliaFEM.jl/blob/master/LICENSE.md
|
|
|
|
|
|
2015-11-27 10:10:00 +02:00
|
|
|
abstract DirichletProblem <: AbstractProblem
|
2015-10-09 23:45:28 +03:00
|
|
|
|
2015-11-27 10:10:00 +02:00
|
|
|
function DirichletProblem(parent_field_name, parent_field_dim, dim=1, elements=[])
|
|
|
|
|
return BoundaryProblem{DirichletProblem}(parent_field_name, parent_field_dim, dim, elements)
|
2015-10-09 23:45:28 +03:00
|
|
|
end
|
|
|
|
|
|
2015-11-27 15:06:55 +02:00
|
|
|
function assemble!(assembly::Assembly, problem::BoundaryProblem{DirichletProblem}, element::Element, time::Number)
|
2015-11-18 01:19:04 +02:00
|
|
|
|
2015-11-27 10:10:00 +02:00
|
|
|
# get dimension and name of PARENT field
|
|
|
|
|
field_dim = problem.parent_field_dim
|
|
|
|
|
field_name = problem.parent_field_name
|
2015-10-27 06:37:58 +02:00
|
|
|
|
2015-11-23 03:17:15 +02:00
|
|
|
gdofs = get_gdofs(element, field_dim)
|
2015-12-10 23:00:05 +02:00
|
|
|
for ip in get_integration_points(element, Val{2})
|
2015-11-27 10:10:00 +02:00
|
|
|
w = ip.weight * det(element, ip, time)
|
|
|
|
|
N = element(ip, time)
|
2015-11-23 03:17:15 +02:00
|
|
|
A = w*N'*N
|
|
|
|
|
|
|
|
|
|
if haskey(element, field_name)
|
2015-11-27 10:10:00 +02:00
|
|
|
# add all dimensions at once if defined element["blaa"] = 0.0
|
2015-11-23 03:17:15 +02:00
|
|
|
for i=1:field_dim
|
|
|
|
|
g = element(field_name, ip, time)
|
|
|
|
|
ldofs = gdofs[i:field_dim:end]
|
|
|
|
|
add!(assembly.stiffness_matrix, ldofs, ldofs, A)
|
|
|
|
|
add!(assembly.force_vector, ldofs, w*g*N')
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
for i=1:field_dim
|
2015-11-27 10:10:00 +02:00
|
|
|
# add per dof if defined element["blaa 1"] = 1.0, element["blaa 2"] = 0.0 etc.
|
2015-11-23 03:17:15 +02:00
|
|
|
if haskey(element, field_name*" $i")
|
|
|
|
|
g = element(field_name*" $i", ip, time)
|
|
|
|
|
ldofs = gdofs[i:field_dim:end]
|
|
|
|
|
add!(assembly.stiffness_matrix, ldofs, ldofs, A)
|
|
|
|
|
add!(assembly.force_vector, ldofs, w*g*N')
|
|
|
|
|
end
|
|
|
|
|
end
|
2015-10-27 06:37:58 +02:00
|
|
|
end
|
2015-10-09 23:45:28 +03:00
|
|
|
end
|
|
|
|
|
|