From 8069e652209f5d7bbe0987ecac1e862a7c771e7e Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Mon, 20 Mar 2017 15:54:43 +0100 Subject: [PATCH 01/44] rename boundary to face --- src/JuAFEM.jl | 16 +- src/boundary_integrals.jl | 150 ------------------ src/common_values.jl | 22 +-- src/deprecations.jl | 4 +- src/face_integrals.jl | 150 ++++++++++++++++++ src/{boundary_values.jl => face_values.jl} | 116 +++++++------- src/grid.jl | 66 +++++--- src/grid_generators.jl | 128 +++++++-------- src/interpolations.jl | 44 ++--- src/quadrature.jl | 6 +- test/runtests.jl | 2 +- ...t_boundaryvalues.jl => test_facevalues.jl} | 44 ++--- test/test_utils.jl | 48 +++--- 13 files changed, 410 insertions(+), 386 deletions(-) delete mode 100644 src/boundary_integrals.jl create mode 100644 src/face_integrals.jl rename src/{boundary_values.jl => face_values.jl} (55%) rename test/{test_boundaryvalues.jl => test_facevalues.jl} (69%) diff --git a/src/JuAFEM.jl b/src/JuAFEM.jl index d422ca0049..2d0817eb8e 100644 --- a/src/JuAFEM.jl +++ b/src/JuAFEM.jl @@ -15,13 +15,13 @@ import WriteVTK: vtk_grid, vtk_point_data, DatasetFile export start_assemble, assemble!, end_assemble export CellValues, CellScalarValues, CellVectorValues -export BoundaryValues, BoundaryScalarValues, BoundaryVectorValues +export FaceValues, FaceScalarValues, FaceVectorValues export ScalarValues, VectorValues export reinit!, shape_value, shape_gradient, shape_symmetric_gradient, shape_divergence, getdetJdV, getquadrule, getfunctioninterpolation, getgeometryinterpolation, function_value, function_gradient, function_symmetric_gradient, function_divergence, spatial_coordinate -export getboundarynumber +export getfacenumber export Interpolation, getdim, getrefshape, getorder, getnbasefunctions, getnquadpoints export Lagrange, Serendipity, RefTetrahedron, RefCube export QuadratureRule, getweights, getpoints @@ -38,24 +38,24 @@ immutable RefTetrahedron <: AbstractRefShape end immutable RefCube <: AbstractRefShape end """ -Abstract type which has `CellValues` and `BoundaryValues` as subtypes +Abstract type which has `CellValues` and `FaceValues` as subtypes """ @compat abstract type Values{dim, T, FS, GS} end @compat abstract type CellValues{dim, T, FS, GS} <: Values{dim, T, FS, GS} end -@compat abstract type BoundaryValues{dim, T, FS, GS} <: Values{dim, T, FS, GS} end +@compat abstract type FaceValues{dim, T, FS, GS} <: Values{dim, T, FS, GS} end include("interpolations.jl") include("quadrature.jl") include("cell_values.jl") -include("boundary_values.jl") +include("face_values.jl") -@compat const ScalarValues{dim, T, FS, GS} = Union{CellScalarValues{dim, T, FS, GS}, BoundaryScalarValues{dim, T, FS, GS}} -@compat const VectorValues{dim, T, FS, GS} = Union{CellVectorValues{dim, T, FS, GS}, BoundaryVectorValues{dim, T, FS, GS}} +@compat const ScalarValues{dim, T, FS, GS} = Union{CellScalarValues{dim, T, FS, GS}, FaceScalarValues{dim, T, FS, GS}} +@compat const VectorValues{dim, T, FS, GS} = Union{CellVectorValues{dim, T, FS, GS}, FaceVectorValues{dim, T, FS, GS}} include("common_values.jl") include("assembler.jl") -include("boundary_integrals.jl") +include("face_integrals.jl") include("grid.jl") include("grid_generators.jl") include("VTK.jl") diff --git a/src/boundary_integrals.jl b/src/boundary_integrals.jl deleted file mode 100644 index 600e461367..0000000000 --- a/src/boundary_integrals.jl +++ /dev/null @@ -1,150 +0,0 @@ -################## -# All 1D RefCube # -################## -function create_boundary_quad_rule{T, shape <: RefCube}(quad_rule::QuadratureRule{0, shape, T}, ::Interpolation{1, shape}) - w = getweights(quad_rule) - boundary_quad_rule = QuadratureRule{1, shape, T}[] - - # Boundary 1 - new_points = [Vec{1, T}((-one(T),))] # ξ = -1 - push!(boundary_quad_rule, QuadratureRule{1, shape, T}(w, new_points)) - # Boundary 2 - new_points = [Vec{1, T}((one(T),))] # ξ = 1 - push!(boundary_quad_rule, QuadratureRule{1, shape, T}(w, new_points)) - - return boundary_quad_rule -end - -detJ_boundary{T}(::Tensor{2, 1, T}, ::Interpolation{1, RefCube}, ::Int) = one(T) - -################## -# All 2D RefCube # -################## -function create_boundary_quad_rule{T, shape <: RefCube}(quad_rule::QuadratureRule{1, shape, T}, ::Interpolation{2, shape}) - w = getweights(quad_rule) - p = getpoints(quad_rule) - n_points = length(w) - boundary_quad_rule = QuadratureRule{2, shape, T}[] - - # Boundary 1 - new_points = [Vec{2, T}((p[i][1], -one(T))) for i in 1:n_points] # ξ = t, η = -1 - push!(boundary_quad_rule, QuadratureRule{2, shape, T}(w, new_points)) - # Boundary 2 - new_points = [Vec{2, T}((one(T), p[i][1])) for i in 1:n_points] # ξ = 1, η = t - push!(boundary_quad_rule, QuadratureRule{2, shape, T}(w, new_points)) - # Boundary 3 - new_points = [Vec{2, T}((p[i][1], one(T))) for i in 1:n_points] # ξ = t, η = 1 - push!(boundary_quad_rule, QuadratureRule{2, shape, T}(w, new_points)) - # Boundary 4 - new_points = [Vec{2, T}((-one(T), p[i][1])) for i in 1:n_points] # ξ = -1, η = t - push!(boundary_quad_rule, QuadratureRule{2, shape, T}(w, new_points)) - - return boundary_quad_rule -end - -function detJ_boundary(J::Tensor{2, 2}, ::Interpolation{2, RefCube}, boundary::Int) - boundary == 1 && return sqrt(J[1,1]^2 + J[2,1]^2) - boundary == 2 && return sqrt(J[1,2]^2 + J[2,2]^2) - boundary == 3 && return sqrt(J[1,1]^2 + J[2,1]^2) - boundary == 4 && return sqrt(J[1,2]^2 + J[2,2]^2) -end - -######################### -# All RefTetrahedron 2D # -######################### -function create_boundary_quad_rule{T, shape <: RefTetrahedron}(quad_rule::QuadratureRule{1, shape, T}, ::Interpolation{2, shape}) - w = getweights(quad_rule) - p = getpoints(quad_rule) - n_points = length(w) - boundary_quad_rule = QuadratureRule{2, shape, T}[] - - # Boundary 1 - new_points = [Vec{2, T}((p[i][1], one(T)-p[i][1])) for i in 1:n_points] # ξ = t, η = 1-t - push!(boundary_quad_rule, QuadratureRule{2, shape, T}(w, new_points)) - # Boundary 2 - new_points = [Vec{2, T}((zero(T), p[i][1])) for i in 1:n_points] # ξ = 0, η = t - push!(boundary_quad_rule, QuadratureRule{2, shape, T}(w, new_points)) - # Boundary 3 - new_points = [Vec{2, T}((p[i][1], zero(T))) for i in 1:n_points] # ξ = t, η = 0 - push!(boundary_quad_rule, QuadratureRule{2, shape, T}(w, new_points)) - - return boundary_quad_rule -end - -function detJ_boundary(J::Tensor{2, 2}, ::Interpolation{2, RefTetrahedron}, boundary::Int) - boundary == 1 && return sqrt((J[1,1] - J[1,2])^2 + (J[2,1] - J[2,2])^2) - boundary == 2 && return sqrt(J[1,2]^2 + J[2,2]^2) - boundary == 3 && return sqrt(J[1,1]^2 + J[2,1]^2) -end - -################## -# All RefCube 3D # -################## -function create_boundary_quad_rule{T, shape <: RefCube}(quad_rule::QuadratureRule{2, shape, T}, ::Interpolation{3, shape}) - w = getweights(quad_rule) - p = getpoints(quad_rule) - n_points = length(w) - boundary_quad_rule = QuadratureRule{3, shape, T}[] - - # Boundary 1 - new_points = [Vec{3, T}((p[i][1], p[i][2], -one(T))) for i in 1:n_points] # ξ = t, η = s, ζ = -1 - push!(boundary_quad_rule, QuadratureRule{3, shape, T}(w, new_points)) - # Boundary 2 - new_points = [Vec{3, T}((p[i][1], -one(T), p[i][2])) for i in 1:n_points] # ξ = t, η = -1, ζ = s - push!(boundary_quad_rule, QuadratureRule{3, shape, T}(w, new_points)) - # Boundary 3 - new_points = [Vec{3, T}((one(T), p[i][1], p[i][2])) for i in 1:n_points] # ξ = 1, η = t, ζ = s - push!(boundary_quad_rule, QuadratureRule{3, shape, T}(w, new_points)) - # Boundary 4 - new_points = [Vec{3, T}((p[i][1], one(T), p[i][2])) for i in 1:n_points] # ξ = t, η = 1, ζ = s - push!(boundary_quad_rule, QuadratureRule{3, shape, T}(w, new_points)) - # Boundary 5 - new_points = [Vec{3, T}((-one(T), p[i][1], p[i][2])) for i in 1:n_points] # ξ = -1, η = t, ζ = s - push!(boundary_quad_rule, QuadratureRule{3, shape, T}(w, new_points)) - # Boundary 6 - new_points = [Vec{3, T}((p[i][1], p[i][2], one(T))) for i in 1:n_points] # ξ = t, η = s, ζ = 1 - push!(boundary_quad_rule, QuadratureRule{3, shape, T}(w, new_points)) - - return boundary_quad_rule -end - -function detJ_boundary(J::Tensor{2, 3}, ::Interpolation{3, RefCube}, boundary::Int) - boundary == 1 && return norm(J[:,1] × J[:,2]) - boundary == 2 && return norm(J[:,1] × J[:,3]) - boundary == 3 && return norm(J[:,2] × J[:,3]) - boundary == 4 && return norm(J[:,1] × J[:,3]) - boundary == 5 && return norm(J[:,2] × J[:,3]) - boundary == 6 && return norm(J[:,1] × J[:,2]) -end - -######################### -# All RefTetrahedron 3D # -######################### -function create_boundary_quad_rule{T, shape <: RefTetrahedron}(quad_rule::QuadratureRule{2, shape, T}, ::Interpolation{3, shape}) - w = getweights(quad_rule) - p = getpoints(quad_rule) - n_points = length(w) - boundary_quad_rule = QuadratureRule{3, shape, T}[] - - # Boundary 1 - new_points = [Vec{3, T}((p[i][1], p[i][2], zero(T))) for i in 1:n_points] # ξ = t, η = s, ζ = 0 - push!(boundary_quad_rule, QuadratureRule{3, shape, T}(w, new_points)) - # Boundary 2 - new_points = [Vec{3, T}((p[i][1], zero(T), p[i][2])) for i in 1:n_points] # ξ = t, η = 0, ζ = s - push!(boundary_quad_rule, QuadratureRule{3, shape, T}(w, new_points)) - # Boundary 3 - new_points = [Vec{3, T}((p[i][1], p[i][2], one(T)-p[i][1]-p[i][2])) for i in 1:n_points] # ξ = t, η = s, ζ = 1-t-s - push!(boundary_quad_rule, QuadratureRule{3, shape, T}(w, new_points)) - # Boundary 4 - new_points = [Vec{3, T}((zero(T), p[i][1], p[i][2])) for i in 1:n_points] # ξ = 0, η = t, ζ = s - push!(boundary_quad_rule, QuadratureRule{3, shape, T}(w, new_points)) - - return boundary_quad_rule -end - -function detJ_boundary(J::Tensor{2, 3}, ::Interpolation{3, RefTetrahedron}, boundary::Int) - boundary == 1 && return norm(J[:,1] × J[:,2]) - boundary == 2 && return norm(J[:,1] × J[:,3]) - boundary == 3 && return norm((J[:,1]-J[:,3]) × (J[:,2]-J[:,3])) - boundary == 4 && return norm(J[:,2] × J[:,3]) -end diff --git a/src/common_values.jl b/src/common_values.jl index bd1f468626..061dfb81d5 100644 --- a/src/common_values.jl +++ b/src/common_values.jl @@ -1,17 +1,17 @@ # Common methods for all `Values` objects """ -Updates a `CellValues`/`BoundaryValues` object for a cell or boundary. +Updates a `CellValues`/`FaceValues` object for a cell or face. ```julia reinit!{dim, T}(cv::CellValues{dim}, x::Vector{Vec{dim, T}}) -reinit!{dim, T}(bv::BoundaryValues{dim}, x::Vector{Vec{dim, T}}, boundary::Int) +reinit!{dim, T}(bv::FaceValues{dim}, x::Vector{Vec{dim, T}}, face::Int) ``` **Arguments:** -* `cv`/`bv`: the `CellValues`/`BoundaryValues` object +* `cv`/`bv`: the `CellValues`/`FaceValues` object * `x`: a `Vector` of `Vec`, one for each nodal position in the element. -* `boundary`: an integer to specify which boundary of the cell +* `face`: an integer to specify which face of the cell **Result** @@ -37,7 +37,7 @@ The quadrature rule for the `Values` type. """ getquadrule(cv::CellValues) = cv.quad_rule -getquadrule(bv::BoundaryValues) = bv.quad_rule[bv.current_boundary[]] +getquadrule(bv::FaceValues) = bv.quad_rule[bv.current_face[]] """ The number of quadrature points for the `Values` type. @@ -94,14 +94,14 @@ The product between the determinant of the Jacobian and the quadrature point wei **Details:** -This value is typically used when one integrates a function on a finite element cell or boundary as +This value is typically used when one integrates a function on a finite element cell or face as ``\\int\\limits_\\Omega f(\\mathbf{x}) d \\Omega \\approx \\sum\\limits_{q = 1}^{n_q} f(\\mathbf{x}_q) \\det(J(\\mathbf{x})) w_q`` ``\\int\\limits_\\Gamma f(\\mathbf{x}) d \\Gamma \\approx \\sum\\limits_{q = 1}^{n_q} f(\\mathbf{x}_q) \\det(J(\\mathbf{x})) w_q`` """ @inline getdetJdV(cv::CellValues, q_point::Int) = cv.detJdV[q_point] -@inline getdetJdV(bv::BoundaryValues, q_point::Int) = bv.detJdV[q_point, bv.current_boundary[]] +@inline getdetJdV(bv::FaceValues, q_point::Int) = bv.detJdV[q_point, bv.current_face[]] """ Computes the value of the shape function @@ -112,16 +112,16 @@ Gets the values of the shape function for a given quadrature point and base_func """ @inline shape_value(cv::CellValues, q_point::Int, base_func::Int) = cv.N[base_func, q_point] -@inline shape_value(bv::BoundaryValues, q_point::Int, base_func::Int) = bv.N[base_func, q_point, bv.current_boundary[]] +@inline shape_value(bv::FaceValues, q_point::Int, base_func::Int) = bv.N[base_func, q_point, bv.current_face[]] @inline geometric_value(cv::CellValues, q_point::Int, base_func::Int) = cv.M[base_func, q_point] -@inline geometric_value(bv::BoundaryValues, q_point::Int, base_func::Int) = bv.M[base_func, q_point, bv.current_boundary[]] +@inline geometric_value(bv::FaceValues, q_point::Int, base_func::Int) = bv.M[base_func, q_point, bv.current_face[]] """ Get the gradient of the shape functions for a given quadrature point and base function """ @inline shape_gradient(cv::CellValues, q_point::Int, base_func::Int) = cv.dNdx[base_func, q_point] -@inline shape_gradient(bv::BoundaryValues, q_point::Int, base_func::Int) = bv.dNdx[base_func, q_point, bv.current_boundary[]] +@inline shape_gradient(bv::FaceValues, q_point::Int, base_func::Int) = bv.dNdx[base_func, q_point, bv.current_face[]] """ Get the symmetric gradient of the shape functions for a given quadrature point and base function @@ -133,7 +133,7 @@ const shape_derivative = shape_gradient Get the divergence of the shape functions for a given quadrature point and base function """ @inline shape_divergence(cv::CellScalarValues, q_point::Int, base_func::Int) = sum(cv.dNdx[base_func, q_point]) -@inline shape_divergence(bv::BoundaryScalarValues, q_point::Int, base_func::Int) = sum(bv.dNdx[base_func, q_point, bv.current_boundary[]]) +@inline shape_divergence(bv::FaceScalarValues, q_point::Int, base_func::Int) = sum(bv.dNdx[base_func, q_point, bv.current_face[]]) """ diff --git a/src/deprecations.jl b/src/deprecations.jl index ef51c916fd..1f5ffbcc2a 100644 --- a/src/deprecations.jl +++ b/src/deprecations.jl @@ -50,11 +50,11 @@ export Dim @deprecate functionspace_n_dim getdim @deprecate functionspace_ref_shape getrefshape @deprecate functionspace_order getorder -@deprecate n_boundaries getnboundaries +@deprecate n_boundaries getnfaces @deprecate functionspace_lower_dim getlowerdim @deprecate functionspace_lower_order getlowerorder @deprecate n_basefunctions getnbasefunctions -@deprecate n_boundarynodes getnboundarynodes +@deprecate n_boundarynodes getnfacenodes @deprecate points getpoints @deprecate weights getweights diff --git a/src/face_integrals.jl b/src/face_integrals.jl new file mode 100644 index 0000000000..0976e94701 --- /dev/null +++ b/src/face_integrals.jl @@ -0,0 +1,150 @@ +################## +# All 1D RefCube # +################## +function create_face_quad_rule{T, shape <: RefCube}(quad_rule::QuadratureRule{0, shape, T}, ::Interpolation{1, shape}) + w = getweights(quad_rule) + face_quad_rule = QuadratureRule{1, shape, T}[] + + # Face 1 + new_points = [Vec{1, T}((-one(T),))] # ξ = -1 + push!(face_quad_rule, QuadratureRule{1, shape, T}(w, new_points)) + # Face 2 + new_points = [Vec{1, T}((one(T),))] # ξ = 1 + push!(face_quad_rule, QuadratureRule{1, shape, T}(w, new_points)) + + return face_quad_rule +end + +detJ_face{T}(::Tensor{2, 1, T}, ::Interpolation{1, RefCube}, ::Int) = one(T) + +################## +# All 2D RefCube # +################## +function create_face_quad_rule{T, shape <: RefCube}(quad_rule::QuadratureRule{1, shape, T}, ::Interpolation{2, shape}) + w = getweights(quad_rule) + p = getpoints(quad_rule) + n_points = length(w) + face_quad_rule = QuadratureRule{2, shape, T}[] + + # Face 1 + new_points = [Vec{2, T}((p[i][1], -one(T))) for i in 1:n_points] # ξ = t, η = -1 + push!(face_quad_rule, QuadratureRule{2, shape, T}(w, new_points)) + # Face 2 + new_points = [Vec{2, T}((one(T), p[i][1])) for i in 1:n_points] # ξ = 1, η = t + push!(face_quad_rule, QuadratureRule{2, shape, T}(w, new_points)) + # Face 3 + new_points = [Vec{2, T}((p[i][1], one(T))) for i in 1:n_points] # ξ = t, η = 1 + push!(face_quad_rule, QuadratureRule{2, shape, T}(w, new_points)) + # Face 4 + new_points = [Vec{2, T}((-one(T), p[i][1])) for i in 1:n_points] # ξ = -1, η = t + push!(face_quad_rule, QuadratureRule{2, shape, T}(w, new_points)) + + return face_quad_rule +end + +function detJ_face(J::Tensor{2, 2}, ::Interpolation{2, RefCube}, face::Int) + face == 1 && return sqrt(J[1,1]^2 + J[2,1]^2) + face == 2 && return sqrt(J[1,2]^2 + J[2,2]^2) + face == 3 && return sqrt(J[1,1]^2 + J[2,1]^2) + face == 4 && return sqrt(J[1,2]^2 + J[2,2]^2) +end + +######################### +# All RefTetrahedron 2D # +######################### +function create_face_quad_rule{T, shape <: RefTetrahedron}(quad_rule::QuadratureRule{1, shape, T}, ::Interpolation{2, shape}) + w = getweights(quad_rule) + p = getpoints(quad_rule) + n_points = length(w) + face_quad_rule = QuadratureRule{2, shape, T}[] + + # Face 1 + new_points = [Vec{2, T}((p[i][1], one(T)-p[i][1])) for i in 1:n_points] # ξ = t, η = 1-t + push!(face_quad_rule, QuadratureRule{2, shape, T}(w, new_points)) + # Face 2 + new_points = [Vec{2, T}((zero(T), p[i][1])) for i in 1:n_points] # ξ = 0, η = t + push!(face_quad_rule, QuadratureRule{2, shape, T}(w, new_points)) + # Face 3 + new_points = [Vec{2, T}((p[i][1], zero(T))) for i in 1:n_points] # ξ = t, η = 0 + push!(face_quad_rule, QuadratureRule{2, shape, T}(w, new_points)) + + return face_quad_rule +end + +function detJ_face(J::Tensor{2, 2}, ::Interpolation{2, RefTetrahedron}, face::Int) + face == 1 && return sqrt((J[1,1] - J[1,2])^2 + (J[2,1] - J[2,2])^2) + face == 2 && return sqrt(J[1,2]^2 + J[2,2]^2) + face == 3 && return sqrt(J[1,1]^2 + J[2,1]^2) +end + +################## +# All RefCube 3D # +################## +function create_face_quad_rule{T, shape <: RefCube}(quad_rule::QuadratureRule{2, shape, T}, ::Interpolation{3, shape}) + w = getweights(quad_rule) + p = getpoints(quad_rule) + n_points = length(w) + face_quad_rule = QuadratureRule{3, shape, T}[] + + # Face 1 + new_points = [Vec{3, T}((p[i][1], p[i][2], -one(T))) for i in 1:n_points] # ξ = t, η = s, ζ = -1 + push!(face_quad_rule, QuadratureRule{3, shape, T}(w, new_points)) + # Face 2 + new_points = [Vec{3, T}((p[i][1], -one(T), p[i][2])) for i in 1:n_points] # ξ = t, η = -1, ζ = s + push!(face_quad_rule, QuadratureRule{3, shape, T}(w, new_points)) + # Face 3 + new_points = [Vec{3, T}((one(T), p[i][1], p[i][2])) for i in 1:n_points] # ξ = 1, η = t, ζ = s + push!(face_quad_rule, QuadratureRule{3, shape, T}(w, new_points)) + # Face 4 + new_points = [Vec{3, T}((p[i][1], one(T), p[i][2])) for i in 1:n_points] # ξ = t, η = 1, ζ = s + push!(face_quad_rule, QuadratureRule{3, shape, T}(w, new_points)) + # Face 5 + new_points = [Vec{3, T}((-one(T), p[i][1], p[i][2])) for i in 1:n_points] # ξ = -1, η = t, ζ = s + push!(face_quad_rule, QuadratureRule{3, shape, T}(w, new_points)) + # Face 6 + new_points = [Vec{3, T}((p[i][1], p[i][2], one(T))) for i in 1:n_points] # ξ = t, η = s, ζ = 1 + push!(face_quad_rule, QuadratureRule{3, shape, T}(w, new_points)) + + return face_quad_rule +end + +function detJ_face(J::Tensor{2, 3}, ::Interpolation{3, RefCube}, face::Int) + face == 1 && return norm(J[:,1] × J[:,2]) + face == 2 && return norm(J[:,1] × J[:,3]) + face == 3 && return norm(J[:,2] × J[:,3]) + face == 4 && return norm(J[:,1] × J[:,3]) + face == 5 && return norm(J[:,2] × J[:,3]) + face == 6 && return norm(J[:,1] × J[:,2]) +end + +######################### +# All RefTetrahedron 3D # +######################### +function create_face_quad_rule{T, shape <: RefTetrahedron}(quad_rule::QuadratureRule{2, shape, T}, ::Interpolation{3, shape}) + w = getweights(quad_rule) + p = getpoints(quad_rule) + n_points = length(w) + face_quad_rule = QuadratureRule{3, shape, T}[] + + # Face 1 + new_points = [Vec{3, T}((p[i][1], p[i][2], zero(T))) for i in 1:n_points] # ξ = t, η = s, ζ = 0 + push!(face_quad_rule, QuadratureRule{3, shape, T}(w, new_points)) + # Face 2 + new_points = [Vec{3, T}((p[i][1], zero(T), p[i][2])) for i in 1:n_points] # ξ = t, η = 0, ζ = s + push!(face_quad_rule, QuadratureRule{3, shape, T}(w, new_points)) + # Face 3 + new_points = [Vec{3, T}((p[i][1], p[i][2], one(T)-p[i][1]-p[i][2])) for i in 1:n_points] # ξ = t, η = s, ζ = 1-t-s + push!(face_quad_rule, QuadratureRule{3, shape, T}(w, new_points)) + # Face 4 + new_points = [Vec{3, T}((zero(T), p[i][1], p[i][2])) for i in 1:n_points] # ξ = 0, η = t, ζ = s + push!(face_quad_rule, QuadratureRule{3, shape, T}(w, new_points)) + + return face_quad_rule +end + +function detJ_face(J::Tensor{2, 3}, ::Interpolation{3, RefTetrahedron}, face::Int) + face == 1 && return norm(J[:,1] × J[:,2]) + face == 2 && return norm(J[:,1] × J[:,3]) + face == 3 && return norm((J[:,1]-J[:,3]) × (J[:,2]-J[:,3])) + face == 4 && return norm(J[:,2] × J[:,3]) +end diff --git a/src/boundary_values.jl b/src/face_values.jl similarity index 55% rename from src/boundary_values.jl rename to src/face_values.jl index 4e00c0b2fa..83ac906212 100644 --- a/src/boundary_values.jl +++ b/src/face_values.jl @@ -1,19 +1,19 @@ -# Defines BoundaryScalarValues and BoundaryVectorValues and common methods +# Defines FaceScalarValues and FaceVectorValues and common methods """ -A `BoundaryValues` object facilitates the process of evaluating values of shape functions, gradients of shape functions, -values of nodal functions, gradients and divergences of nodal functions etc. on the finite element boundary. There are -two different types of `BoundaryValues`: `BoundaryScalarValues` and `BoundaryVectorValues`. As the names suggest, -`BoundaryScalarValues` utilizes scalar shape functions and `BoundaryVectorValues` utilizes vectorial shape functions. -For a scalar field, the `BoundaryScalarValues` type should be used. For vector field, both subtypes can be used. +A `FaceValues` object facilitates the process of evaluating values of shape functions, gradients of shape functions, +values of nodal functions, gradients and divergences of nodal functions etc. on the faces of finite elements. There are +two different types of `FaceValues`: `FaceScalarValues` and `FaceVectorValues`. As the names suggest, +`FaceScalarValues` utilizes scalar shape functions and `FaceVectorValues` utilizes vectorial shape functions. +For a scalar field, the `FaceScalarValues` type should be used. For vector field, both subtypes can be used. **Constructors:** -Note: The quadrature rule for the boundary should be given with one dimension lower. I.e. for a 3D case, the quadrature rule +Note: The quadrature rule for the face should be given with one dimension lower. I.e. for a 3D case, the quadrature rule should be in 2D. ```julia -BoundaryScalarValues([::Type{T}], quad_rule::QuadratureRule, func_interpol::Interpolation, [geom_interpol::Interpolation]) -BoundaryVectorValues([::Type{T}], quad_rule::QuadratureRule, func_interpol::Interpolation, [geom_interpol::Interpolation]) +FaceScalarValues([::Type{T}], quad_rule::QuadratureRule, func_interpol::Interpolation, [geom_interpol::Interpolation]) +FaceVectorValues([::Type{T}], quad_rule::QuadratureRule, func_interpol::Interpolation, [geom_interpol::Interpolation]) ``` **Arguments:** @@ -26,7 +26,7 @@ BoundaryVectorValues([::Type{T}], quad_rule::QuadratureRule, func_interpol::Inte **Common methods:** * [`reinit!`](@ref) -* [`getboundarynumber`](@ref) +* [`getfacenumber`](@ref) * [`getnquadpoints`](@ref) * [`getquadrule`](@ref) * [`getfunctioninterpolation`](@ref) @@ -44,10 +44,10 @@ BoundaryVectorValues([::Type{T}], quad_rule::QuadratureRule, func_interpol::Inte * [`function_divergence`](@ref) * [`spatial_coordinate`](@ref) """ -BoundaryValues +FaceValues -# BoundaryScalarValues -immutable BoundaryScalarValues{dim, T <: Real, FIP <: Interpolation, GIP <: Interpolation, shape <: AbstractRefShape} <: BoundaryValues{dim, T, FIP, GIP} +# FaceScalarValues +immutable FaceScalarValues{dim, T <: Real, FIP <: Interpolation, GIP <: Interpolation, shape <: AbstractRefShape} <: FaceValues{dim, T, FIP, GIP} N::Array{T, 3} dNdx::Array{Vec{dim, T}, 3} dNdξ::Array{Vec{dim, T}, 3} @@ -57,15 +57,15 @@ immutable BoundaryScalarValues{dim, T <: Real, FIP <: Interpolation, GIP <: Inte M::Array{T, 3} dMdξ::Array{Vec{dim, T}, 3} geom_interpol::GIP - current_boundary::Ref{Int} + current_face::Ref{Int} end -BoundaryScalarValues{dim_qr, FIP <: Interpolation, GIP <: Interpolation}(quad_rule::QuadratureRule{dim_qr}, func_interpol::FIP, geom_interpol::GIP=func_interpol) = - BoundaryScalarValues(Float64, quad_rule, func_interpol, geom_interpol) +FaceScalarValues{dim_qr, FIP <: Interpolation, GIP <: Interpolation}(quad_rule::QuadratureRule{dim_qr}, func_interpol::FIP, geom_interpol::GIP=func_interpol) = + FaceScalarValues(Float64, quad_rule, func_interpol, geom_interpol) -getnbasefunctions(bvv::BoundaryScalarValues) = getnbasefunctions(bvv.func_interpol) +getnbasefunctions(bvv::FaceScalarValues) = getnbasefunctions(bvv.func_interpol) -function BoundaryScalarValues{dim_qr, T, FIP <: Interpolation, GIP <: Interpolation, shape <: AbstractRefShape}( +function FaceScalarValues{dim_qr, T, FIP <: Interpolation, GIP <: Interpolation, shape <: AbstractRefShape}( ::Type{T}, quad_rule::QuadratureRule{dim_qr, shape}, func_interpol::FIP, geom_interpol::GIP=func_interpol) @assert getdim(func_interpol) == getdim(geom_interpol) @@ -73,8 +73,8 @@ function BoundaryScalarValues{dim_qr, T, FIP <: Interpolation, GIP <: Interpolat n_qpoints = length(getweights(quad_rule)) dim = dim_qr + 1 - boundary_quad_rule = create_boundary_quad_rule(quad_rule, func_interpol) - n_bounds = length(boundary_quad_rule) + face_quad_rule = create_face_quad_rule(quad_rule, func_interpol) + n_bounds = length(face_quad_rule) # Function interpolation n_func_basefuncs = getnbasefunctions(func_interpol) @@ -87,7 +87,7 @@ function BoundaryScalarValues{dim_qr, T, FIP <: Interpolation, GIP <: Interpolat M = zeros(T, n_geom_basefuncs, n_qpoints, n_bounds) dMdξ = zeros(Vec{dim, T}, n_geom_basefuncs, n_qpoints, n_bounds) - for k in 1:n_bounds, (i, ξ) in enumerate(boundary_quad_rule[k].points) + for k in 1:n_bounds, (i, ξ) in enumerate(face_quad_rule[k].points) value!(func_interpol, view(N, :, i, k), ξ) derivative!(func_interpol, view(dNdξ, :, i, k), ξ) value!(geom_interpol, view(M, :, i, k), ξ) @@ -96,11 +96,11 @@ function BoundaryScalarValues{dim_qr, T, FIP <: Interpolation, GIP <: Interpolat detJdV = zeros(T, n_qpoints, n_bounds) - BoundaryScalarValues(N, dNdx, dNdξ, detJdV, boundary_quad_rule, func_interpol, M, dMdξ, geom_interpol, Ref(0)) + FaceScalarValues(N, dNdx, dNdξ, detJdV, face_quad_rule, func_interpol, M, dMdξ, geom_interpol, Ref(0)) end -# BoundaryVectorValues -immutable BoundaryVectorValues{dim, T <: Real, FIP <: Interpolation, GIP <: Interpolation, shape <: AbstractRefShape, M} <: BoundaryValues{dim, T, FIP, GIP} +# FaceVectorValues +immutable FaceVectorValues{dim, T <: Real, FIP <: Interpolation, GIP <: Interpolation, shape <: AbstractRefShape, M} <: FaceValues{dim, T, FIP, GIP} N::Array{Vec{dim, T}, 3} dNdx::Array{Tensor{2, dim, T, M}, 3} dNdξ::Array{Tensor{2, dim, T, M}, 3} @@ -110,15 +110,15 @@ immutable BoundaryVectorValues{dim, T <: Real, FIP <: Interpolation, GIP <: Inte M::Array{T, 3} dMdξ::Array{Vec{dim, T}, 3} geom_interpol::GIP - current_boundary::Ref{Int} + current_face::Ref{Int} end -BoundaryVectorValues{dim_qr, FIP <: Interpolation, GIP <: Interpolation}(quad_rule::QuadratureRule{dim_qr}, func_interpol::FIP, geom_interpol::GIP=func_interpol) = - BoundaryVectorValues(Float64, quad_rule, func_interpol, geom_interpol) +FaceVectorValues{dim_qr, FIP <: Interpolation, GIP <: Interpolation}(quad_rule::QuadratureRule{dim_qr}, func_interpol::FIP, geom_interpol::GIP=func_interpol) = + FaceVectorValues(Float64, quad_rule, func_interpol, geom_interpol) -getnbasefunctions{dim}(bvv::BoundaryVectorValues{dim}) = getnbasefunctions(bvv.func_interpol) * dim +getnbasefunctions{dim}(bvv::FaceVectorValues{dim}) = getnbasefunctions(bvv.func_interpol) * dim -function BoundaryVectorValues{dim_qr, T, FIP <: Interpolation, GIP <: Interpolation, shape <: AbstractRefShape}( +function FaceVectorValues{dim_qr, T, FIP <: Interpolation, GIP <: Interpolation, shape <: AbstractRefShape}( ::Type{T}, quad_rule::QuadratureRule{dim_qr, shape}, func_interpol::FIP, geom_interpol::GIP=func_interpol) @assert getdim(func_interpol) == getdim(geom_interpol) @@ -126,8 +126,8 @@ function BoundaryVectorValues{dim_qr, T, FIP <: Interpolation, GIP <: Interpolat n_qpoints = length(getweights(quad_rule)) dim = dim_qr + 1 - boundary_quad_rule = create_boundary_quad_rule(quad_rule, func_interpol) - n_bounds = length(boundary_quad_rule) + face_quad_rule = create_face_quad_rule(quad_rule, func_interpol) + n_bounds = length(face_quad_rule) # Function interpolation n_func_basefuncs = getnbasefunctions(func_interpol) * dim @@ -143,7 +143,7 @@ function BoundaryVectorValues{dim_qr, T, FIP <: Interpolation, GIP <: Interpolat for k in 1:n_bounds N_temp = zeros(getnbasefunctions(func_interpol)) dNdξ_temp = zeros(Vec{dim, T}, getnbasefunctions(func_interpol)) - for (i, ξ) in enumerate(boundary_quad_rule[k].points) + for (i, ξ) in enumerate(face_quad_rule[k].points) value!(func_interpol, N_temp, ξ) derivative!(func_interpol, dNdξ_temp, ξ) basefunc_count = 1 @@ -166,17 +166,17 @@ function BoundaryVectorValues{dim_qr, T, FIP <: Interpolation, GIP <: Interpolat detJdV = zeros(T, n_qpoints, n_bounds) - BoundaryVectorValues(N, dNdx, dNdξ, detJdV, boundary_quad_rule, func_interpol, M, dMdξ, geom_interpol, Ref(0)) + FaceVectorValues(N, dNdx, dNdξ, detJdV, face_quad_rule, func_interpol, M, dMdξ, geom_interpol, Ref(0)) end -function reinit!{dim, T}(bv::BoundaryValues{dim}, x::AbstractVector{Vec{dim, T}}, boundary::Int) +function reinit!{dim, T}(bv::FaceValues{dim}, x::AbstractVector{Vec{dim, T}}, face::Int) n_geom_basefuncs = getnbasefunctions(getgeometryinterpolation(bv)) n_func_basefuncs = getnbasefunctions(getfunctioninterpolation(bv)) @assert length(x) == n_geom_basefuncs - isa(bv, BoundaryVectorValues) && (n_func_basefuncs *= dim) + isa(bv, FaceVectorValues) && (n_func_basefuncs *= dim) - bv.current_boundary[] = boundary - cb = getcurrentboundary(bv) + bv.current_face[] = face + cb = getcurrentface(bv) @inbounds for i in 1:length(getpoints(bv.quad_rule[cb])) w = getweights(bv.quad_rule[cb])[i] @@ -184,7 +184,7 @@ function reinit!{dim, T}(bv::BoundaryValues{dim}, x::AbstractVector{Vec{dim, T}} for j in 1:n_geom_basefuncs febv_J += x[j] ⊗ bv.dMdξ[j, i, cb] end - detJ = detJ_boundary(febv_J, getgeometryinterpolation(bv), cb) + detJ = detJ_face(febv_J, getgeometryinterpolation(bv), cb) detJ > 0.0 || throw(ArgumentError("detJ is not positive: detJ = $(detJ)")) bv.detJdV[i, cb] = detJ * w Jinv = inv(febv_J) @@ -195,54 +195,54 @@ function reinit!{dim, T}(bv::BoundaryValues{dim}, x::AbstractVector{Vec{dim, T}} end """ -The current active boundary of the `BoundaryValues` type. +The current active face of the `FaceValues` type. - getcurrentboundary(bv::BoundaryValues) + getcurrentface(bv::FaceValues) ** Arguments ** -* `bv`: the `BoundaryValues` object +* `bv`: the `FaceValues` object ** Results ** -* `::Int`: the current active boundary (from last `reinit!`). +* `::Int`: the current active face (from last `reinit!`). """ -getcurrentboundary(bv::BoundaryValues) = bv.current_boundary[] +getcurrentface(bv::FaceValues) = bv.current_face[] """ -The boundary number for a cell, typically used to get the boundary number which is needed -to `reinit!` a `BoundaryValues` object for boundary integration +The face number for a cell, typically used to get the face number which is needed +to `reinit!` a `FaceValues` object for face integration - getboundarynumber(boundary_nodes, cell_nodes, ip::Interpolation) + getfacenumber(face_nodes, cell_nodes, ip::Interpolation) ** Arguments ** -* `boundary_nodes`: the node numbers of the nodes on the boundary of the cell +* `face_nodes`: the node numbers of the nodes on the face of the cell * `cell_nodes`: the node numbers of the cell * `ip`: the `Interpolation` for the cell ** Results ** -* `::Int`: the corresponding boundary +* `::Int`: the corresponding face """ -function getboundarynumber(boundary_nodes::Vector{Int}, cell_nodes::Vector{Int}, ip::Interpolation) - @assert length(boundary_nodes) == getnboundarynodes(ip) +function getfacenumber(face_nodes::Vector{Int}, cell_nodes::Vector{Int}, ip::Interpolation) + @assert length(face_nodes) == getnfacenodes(ip) @assert length(cell_nodes) == getnbasefunctions(ip) - tmp = zeros(boundary_nodes) - for i in 1:length(boundary_nodes) - tmp[i] = findfirst(j -> j == boundary_nodes[i], cell_nodes) + tmp = zeros(face_nodes) + for i in 1:length(face_nodes) + tmp[i] = findfirst(j -> j == face_nodes[i], cell_nodes) end if 0 in tmp - throw(ArgumentError("at least one boundary node: $boundary_nodes not in cell nodes: $cell_nodes")) + throw(ArgumentError("at least one face node: $face_nodes not in cell nodes: $cell_nodes")) end sort!(tmp) - boundary_nodes_sorted = ntuple(i -> tmp[i], Val{getnboundarynodes(ip)}) - for (i, boundary) in enumerate(getboundarylist(ip)) - boundary_nodes_sorted == boundary && return i + face_nodes_sorted = ntuple(i -> tmp[i], Val{getnfacenodes(ip)}) + for (i, face) in enumerate(getfacelist(ip)) + face_nodes_sorted == face && return i end - throw(ArgumentError("invalid node numbers for boundary")) + throw(ArgumentError("invalid node numbers for face")) end diff --git a/src/grid.jl b/src/grid.jl index 3579f14174..25737c5d65 100644 --- a/src/grid.jl +++ b/src/grid.jl @@ -1,5 +1,5 @@ # Grid types -export Node, Cell, CellIndex, CellBoundary, CellBoundaryIndex, Grid +export Node, Cell, CellIndex, CellFace, CellFaceIndex, Grid # Cell type alias export Line, QuadraticLine, @@ -8,8 +8,8 @@ export Line, QuadraticLine, # Grid utilities export getcells, getncells, getnodes, getnnodes, getcelltype, - getcellset, getnodeset, getcellboundaryset, getcoordinates, getcoordinates!, - getcellsets, getnodesets, getcellboundarysets + getcellset, getnodeset, getcellfaceset, getcoordinates, getcoordinates!, + getcellsets, getnodesets, getcellfacesets export addnodeset!, addcellset! @@ -33,17 +33,37 @@ end (::Type{Cell{dim}}){dim,N}(nodes::NTuple{N}) = Cell{dim,N}(nodes) # Typealias for commonly used cells + +to_interpolation(c::Cell) = to_interpolation(typeof(c)) + +getfacelist(c::Cell) = getfacelist(typeof(c)) +getfacelist(c::Type{<:Cell}) = getfacelist(to_interpolation(c)) + +nfaces(c::Cell) = n_faces(typeof(c)) +nfaces(c::Type{<:Cell}) = length(getfacelist(c)) + @compat const Line = Cell{1, 2} +to_interpolation(::Type{Line}) = Lagrange{1, RefCube, 1} @compat const QuadraticLine = Cell{1, 3} +to_interpolation(::Type{QuadraticLine}) = Lagrange{1, RefCube, 2} + @compat const Triangle = Cell{2, 3} +to_interpolation(::Type{Triangle}) = Lagrange{2, RefTetrahedron, 1} @compat const QuadraticTriangle = Cell{2, 6} +to_interpolation(::Type{QuadraticTriangle}) = Lagrange{2, RefTetrahedron, 2} + @compat const Quadrilateral = Cell{2, 4} +to_interpolation(::Type{Quadrilateral}) = Lagrange{2, RefCube, 1} @compat const QuadraticQuadrilateral = Cell{2, 9} +to_interpolation(::Type{QuadraticQuadrilateral}) = Lagrange{2, RefCube, 2} @compat const Tetrahedron = Cell{3, 4} +to_interpolation(::Type{Tetrahedron}) = Lagrange{3, RefTetrahedron, 1} @compat const QuadraticTetrahedron = Cell{3, 10} # Function interpolation for this doesn't exist in JuAFEM yet + @compat const Hexahedron = Cell{3, 8} +to_interpolation(::Type{Hexahedron}) = Lagrange{3, RefCube, 1} @compat const QuadraticHexahedron = Cell{3, 20} # Function interpolation for this doesn't exist in JuAFEM yet """ @@ -54,16 +74,16 @@ immutable CellIndex end """ -A `CellBoundary` is a sub-domain of the boundary defined by the cell and the side. +A `CellFace` is a sub-domain of the face defined by the cell and the side. """ -immutable CellBoundary +immutable CellFace idx::Tuple{Int, Int} # cell and side end """ -A `CellBoundaryIndex` is returned when looping over cell boundaries of the grid. +A `CellFaceIndex` is returned when looping over cell faces of the grid. """ -@compat const CellBoundaryIndex = CellBoundary +@compat const CellFaceIndex = CellFace """ A `Grid` is a collection of `Cells` and `Node`s which covers the computational domain. @@ -71,18 +91,18 @@ A `Grid` is a collection of `Cells` and `Node`s which covers the computational d immutable Grid{dim, N, T <: Real} cells::Vector{Cell{dim, N}} nodes::Vector{Node{dim, T}} - cellboundaries::Vector{CellBoundary} + cellfaces::Vector{CellFace} cellsets::Dict{String, Vector{Int}} nodesets::Dict{String, Vector{Int}} - cellboundarysets::Dict{String, Vector{Int}} + cellfacesets::Dict{String, Vector{Int}} end function Grid{dim, N, T}(cells::Vector{Cell{dim, N}}, nodes::Vector{Node{dim, T}}; - cellboundaries::Vector{CellBoundary} = CellBoundary[], + cellfaces::Vector{CellFace} = CellFace[], cellsets::Dict{String, Vector{Int}}=Dict{String, Vector{Int}}(), nodesets::Dict{String, Vector{Int}}=Dict{String, Vector{Int}}(), - cellboundarysets::Dict{String, Vector{Int}}=Dict{String, Vector{Int}}()) - return Grid(cells, nodes, cellboundaries, cellsets, nodesets, cellboundarysets) + cellfacesets::Dict{String, Vector{Int}}=Dict{String, Vector{Int}}()) + return Grid(cells, nodes, cellfaces, cellsets, nodesets, cellfacesets) end ########################## @@ -99,10 +119,10 @@ end @inline getnodes(grid::Grid, set::String) = grid.nodes[grid.nodesets[set]] @inline getnnodes(grid::Grid) = length(grid.nodes) -@inline getboundaries(grid::Grid) = grid.cellboundaries -@inline getboundaries(grid::Grid, v::Vector{Int}) = grid.cellboundaries[v] -@inline getboundaries(grid::Grid, set::String) = grid.cellboundaries[grid.cellboundarysets[set]] -@inline getnboundaries(grid::Grid) = length(grid.cellboundaries) +@inline getfaces(grid::Grid) = grid.cellfaces +@inline getfaces(grid::Grid, v::Vector{Int}) = grid.cellfaces[v] +@inline getfaces(grid::Grid, set::String) = grid.cellfaces[grid.cellfacesets[set]] +@inline getnfaces(grid::Grid) = length(grid.cellfaces) @inline getcellset(grid::Grid, set::String) = grid.cellsets[set] @inline getcellsets(grid::Grid) = grid.cellsets @@ -110,9 +130,11 @@ end @inline getnodeset(grid::Grid, set::String) = grid.nodesets[set] @inline getnodesets(grid::Grid) = grid.nodesets -@inline getcellboundaryset(grid::Grid, set::String) = grid.cellboundarysets[set] -@inline getcellboundarysets(grid::Grid) = grid.cellboundarysets +@inline getcellFaceset(grid::Grid, set::String) = grid.cellfacesets[set] +@inline getcellfacesets(grid::Grid) = grid.cellfacesets +n_faces_per_cell(grid::Grid) = nfaces(eltype(grid.cells)) +getfacelist(grid::Grid) = getfacelist(eltype(grid.cells)) function addcellset!(grid::Grid, name::String, cellid::Vector{Int}) haskey(grid.cellsets, name) && throw(ArgumentError("There already exists a cellset with the name: $name")) @@ -154,7 +176,7 @@ Updates the coordinate vector for a cell getcoordinates!(x::Vector{Vec}, grid::Grid, cell::Int) getcoordinates!(x::Vector{Vec}, grid::Grid, cell::CellIndex) - getcoordinates!(x::Vector{Vec}, grid::Grid, boundary::CellBoundaryIndex) + getcoordinates!(x::Vector{Vec}, grid::Grid, face::CellFaceIndex) ** Arguments ** @@ -174,14 +196,14 @@ Updates the coordinate vector for a cell end end @inline getcoordinates!{dim, T, N}(x::Vector{Vec{dim, T}}, grid::Grid{dim, N, T}, cell::CellIndex) = getcoordinates!(x, grid, cell.idx) -@inline getcoordinates!{dim, T, N}(x::Vector{Vec{dim, T}}, grid::Grid{dim, N, T}, boundary::CellBoundaryIndex) = getcoordinates!(x, grid, boundary.idx[1]) +@inline getcoordinates!{dim, T, N}(x::Vector{Vec{dim, T}}, grid::Grid{dim, N, T}, face::CellFaceIndex) = getcoordinates!(x, grid, face.idx[1]) """ Returns a vector with the coordinates of the vertices of a cell getcoordinates(grid::Grid, cell::Int) getcoordinates(grid::Grid, cell::CellIndex) - getcoordinates(grid::Grid, boundary::CellBoundaryIndex) + getcoordinates(grid::Grid, face::CellFaceIndex) ** Arguments ** @@ -198,7 +220,7 @@ Returns a vector with the coordinates of the vertices of a cell return [grid.nodes[i].x for i in nodeidx]::Vector{Vec{dim, T}} end @inline getcoordinates(grid::Grid, cell::CellIndex) = getcoordinates(grid, cell.idx) -@inline getcoordinates(grid::Grid, boundary::CellBoundaryIndex) = getcoordinates(grid, boundary.idx[1]) +@inline getcoordinates(grid::Grid, face::CellFaceIndex) = getcoordinates(grid, face.idx[1]) # Iterate over cell vector Base.start{dim, N}(c::Vector{Cell{dim, N}}) = 1 diff --git a/src/grid_generators.jl b/src/grid_generators.jl index 2ecdc3f1b1..00d9a735a6 100644 --- a/src/grid_generators.jl +++ b/src/grid_generators.jl @@ -33,14 +33,14 @@ function generate_grid{T}(::Type{Line}, nel::NTuple{1, Int}, left::Vec{1, T}=Vec push!(cells, Line((i, i+1))) end - # Cell boundaries - cellbounds = CellBoundary[CellBoundary((1, 1)), - CellBoundary((nel_x, 2))] + # Cell faces + cellbounds = CellFace[CellFace((1, 1)), + CellFace((nel_x, 2))] - # Cell boundary sets + # Cell face sets cellboundsets = Dict("left" => [1], "right" => [2]) - return Grid(cells, nodes, cellboundaries=cellbounds, cellboundarysets=cellboundsets) + return Grid(cells, nodes, cellfaces=cellbounds, cellfacesets=cellboundsets) end # QuadraticLine @@ -61,14 +61,14 @@ function generate_grid{T}(::Type{QuadraticLine}, nel::NTuple{1, Int}, left::Vec{ push!(cells, QuadraticLine((2*i-1, 2*i+1, 2*i))) end - # Cell boundaries - cellbounds = CellBoundary[CellBoundary((1, 1)), - CellBoundary((nel_x, 2))] + # Cell faces + cellbounds = CellFace[CellFace((1, 1)), + CellFace((nel_x, 2))] - # Cell boundary sets + # Cell face sets cellboundsets = Dict("left" => [1], "right" => [2]) - return Grid(cells, nodes, cellboundaries=cellbounds, cellboundarysets=cellboundsets) + return Grid(cells, nodes, cellfaces=cellbounds, cellfacesets=cellboundsets) end # Quadrilateral @@ -92,14 +92,14 @@ function generate_grid{T}(::Type{Quadrilateral}, nel::NTuple{2, Int}, left::Vec{ push!(cells, Quadrilateral((node_array[i,j], node_array[i+1,j], node_array[i+1,j+1], node_array[i,j+1]))) end - # Cell boundaries + # Cell faces cell_array = reshape(collect(1:nel_tot),(nel_x, nel_y)) - cellbounds = CellBoundary[[CellBoundary((cl, 1)) for cl in cell_array[:,1]]; - [CellBoundary((cl, 2)) for cl in cell_array[end,:]]; - [CellBoundary((cl, 3)) for cl in cell_array[:,end]]; - [CellBoundary((cl, 4)) for cl in cell_array[1,:]]] + cellbounds = CellFace[[CellFace((cl, 1)) for cl in cell_array[:,1]]; + [CellFace((cl, 2)) for cl in cell_array[end,:]]; + [CellFace((cl, 3)) for cl in cell_array[:,end]]; + [CellFace((cl, 4)) for cl in cell_array[1,:]]] - # Cell boundary sets + # Cell face sets offset = 0 cellboundsets = Dict{String, Vector{Int}}() cellboundsets["bottom"] = (1:length(cell_array[:,1])) + offset; offset += length(cell_array[:,1]) @@ -107,7 +107,7 @@ function generate_grid{T}(::Type{Quadrilateral}, nel::NTuple{2, Int}, left::Vec{ cellboundsets["top"] = (1:length(cell_array[:,end])) + offset; offset += length(cell_array[:,end]) cellboundsets["left"] = (1:length(cell_array[1,:])) + offset; offset += length(cell_array[1,:]) - return Grid(cells, nodes, cellboundaries=cellbounds, cellboundarysets=cellboundsets) + return Grid(cells, nodes, cellfaces=cellbounds, cellfacesets=cellboundsets) end # QuadraticQuadrilateral @@ -133,14 +133,14 @@ function generate_grid{T}(::Type{QuadraticQuadrilateral}, nel::NTuple{2, Int}, l node_array[2*i,2*j]))) end - # Cell boundaries + # Cell faces cell_array = reshape(collect(1:nel_tot),(nel_x, nel_y)) - cellbounds = CellBoundary[[CellBoundary((cl, 1)) for cl in cell_array[:,1]]; - [CellBoundary((cl, 2)) for cl in cell_array[end,:]]; - [CellBoundary((cl, 3)) for cl in cell_array[:,end]]; - [CellBoundary((cl, 4)) for cl in cell_array[1,:]]] + cellbounds = CellFace[[CellFace((cl, 1)) for cl in cell_array[:,1]]; + [CellFace((cl, 2)) for cl in cell_array[end,:]]; + [CellFace((cl, 3)) for cl in cell_array[:,end]]; + [CellFace((cl, 4)) for cl in cell_array[1,:]]] - # Cell boundary sets + # Cell face sets offset = 0 cellboundsets = Dict{String, Vector{Int}}() cellboundsets["bottom"] = (1:length(cell_array[:,1])) + offset; offset += length(cell_array[:,1]) @@ -148,7 +148,7 @@ function generate_grid{T}(::Type{QuadraticQuadrilateral}, nel::NTuple{2, Int}, l cellboundsets["top"] = (1:length(cell_array[:,end])) + offset; offset += length(cell_array[:,end]) cellboundsets["left"] = (1:length(cell_array[1,:])) + offset; offset += length(cell_array[1,:]) - return Grid(cells, nodes, cellboundaries=cellbounds, cellboundarysets=cellboundsets) + return Grid(cells, nodes, cellfaces=cellbounds, cellfacesets=cellboundsets) end # Hexahedron @@ -174,16 +174,16 @@ function generate_grid{T}(::Type{Hexahedron}, nel::NTuple{3, Int}, left::Vec{3, node_array[i,j,k+1], node_array[i+1,j,k+1], node_array[i+1,j+1,k+1], node_array[i,j+1,k+1]))) end - # Cell boundaries + # Cell faces cell_array = reshape(collect(1:nel_tot),(nel_x, nel_y, nel_z)) - cellbounds = CellBoundary[[CellBoundary((cl, 1)) for cl in cell_array[:,:,1][:]]; - [CellBoundary((cl, 2)) for cl in cell_array[:,1,:][:]]; - [CellBoundary((cl, 3)) for cl in cell_array[end,:,:][:]]; - [CellBoundary((cl, 4)) for cl in cell_array[:,end,:][:]]; - [CellBoundary((cl, 5)) for cl in cell_array[1,:,:][:]]; - [CellBoundary((cl, 6)) for cl in cell_array[:,:,end][:]]] - - # Cell boundary sets + cellbounds = CellFace[[CellFace((cl, 1)) for cl in cell_array[:,:,1][:]]; + [CellFace((cl, 2)) for cl in cell_array[:,1,:][:]]; + [CellFace((cl, 3)) for cl in cell_array[end,:,:][:]]; + [CellFace((cl, 4)) for cl in cell_array[:,end,:][:]]; + [CellFace((cl, 5)) for cl in cell_array[1,:,:][:]]; + [CellFace((cl, 6)) for cl in cell_array[:,:,end][:]]] + + # Cell face sets offset = 0 cellboundsets = Dict{String, Vector{Int}}() cellboundsets["bottom"] = (1:length(cell_array[:,:,1][:])) + offset; offset += length(cell_array[:,:,1][:]) @@ -193,7 +193,7 @@ function generate_grid{T}(::Type{Hexahedron}, nel::NTuple{3, Int}, left::Vec{3, cellboundsets["left"] = (1:length(cell_array[1,:,:][:])) + offset; offset += length(cell_array[1,:,:][:]) cellboundsets["top"] = (1:length(cell_array[:,:,end][:])) + offset; offset += length(cell_array[:,:,end][:]) - return Grid(cells, nodes, cellboundaries=cellbounds, cellboundarysets=cellboundsets) + return Grid(cells, nodes, cellfaces=cellbounds, cellfacesets=cellboundsets) end # Triangle @@ -218,14 +218,14 @@ function generate_grid{T}(::Type{Triangle}, nel::NTuple{2, Int}, left::Vec{2, T} push!(cells, Triangle((node_array[i+1,j], node_array[i+1,j+1], node_array[i,j+1]))) # ◹ end - # Cell boundaries + # Cell faces cell_array = reshape(collect(1:nel_tot),(2, nel_x, nel_y)) - cellbounds = CellBoundary[[CellBoundary((cl, 1)) for cl in cell_array[1,:,1]]; - [CellBoundary((cl, 1)) for cl in cell_array[2,end,:]]; - [CellBoundary((cl, 2)) for cl in cell_array[2,:,end]]; - [CellBoundary((cl, 3)) for cl in cell_array[1,1,:]]] + cellbounds = CellFace[[CellFace((cl, 1)) for cl in cell_array[1,:,1]]; + [CellFace((cl, 1)) for cl in cell_array[2,end,:]]; + [CellFace((cl, 2)) for cl in cell_array[2,:,end]]; + [CellFace((cl, 3)) for cl in cell_array[1,1,:]]] - # Cell boundary sets + # Cell face sets offset = 0 cellboundsets = Dict{String, Vector{Int}}() cellboundsets["bottom"] = (1:length(cell_array[1,:,1])) + offset; offset += length(cell_array[1,:,1]) @@ -233,7 +233,7 @@ function generate_grid{T}(::Type{Triangle}, nel::NTuple{2, Int}, left::Vec{2, T} cellboundsets["top"] = (1:length(cell_array[2,:,end])) + offset; offset += length(cell_array[2,:,end]) cellboundsets["left"] = (1:length(cell_array[1,1,:])) + offset; offset += length(cell_array[1,1,:]) - return Grid(cells, nodes, cellboundaries=cellbounds, cellboundarysets=cellboundsets) + return Grid(cells, nodes, cellfaces=cellbounds, cellfacesets=cellboundsets) end # QuadraticTriangle @@ -260,14 +260,14 @@ function generate_grid{T}(::Type{QuadraticTriangle}, nel::NTuple{2, Int}, left:: node_array[2*i+1,2*j], node_array[2*i,2*j+1], node_array[2*i,2*j]))) # ◹ end - # Cell boundaries + # Cell faces cell_array = reshape(collect(1:nel_tot),(2, nel_x, nel_y)) - cellbounds = CellBoundary[[CellBoundary((cl, 1)) for cl in cell_array[1,:,1]]; - [CellBoundary((cl, 1)) for cl in cell_array[2,end,:]]; - [CellBoundary((cl, 2)) for cl in cell_array[2,:,end]]; - [CellBoundary((cl, 3)) for cl in cell_array[1,1,:]]] + cellbounds = CellFace[[CellFace((cl, 1)) for cl in cell_array[1,:,1]]; + [CellFace((cl, 1)) for cl in cell_array[2,end,:]]; + [CellFace((cl, 2)) for cl in cell_array[2,:,end]]; + [CellFace((cl, 3)) for cl in cell_array[1,1,:]]] - # Cell boundary sets + # Cell face sets offset = 0 cellboundsets = Dict{String, Vector{Int}}() cellboundsets["bottom"] = (1:length(cell_array[1,:,1])) + offset; offset += length(cell_array[1,:,1]) @@ -275,7 +275,7 @@ function generate_grid{T}(::Type{QuadraticTriangle}, nel::NTuple{2, Int}, left:: cellboundsets["top"] = (1:length(cell_array[2,:,end])) + offset; offset += length(cell_array[2,:,end]) cellboundsets["left"] = (1:length(cell_array[1,1,:])) + offset; offset += length(cell_array[1,1,:]) - return Grid(cells, nodes, cellboundaries=cellbounds, cellboundarysets=cellboundsets) + return Grid(cells, nodes, cellfaces=cellbounds, cellfacesets=cellboundsets) end # Tetrahedron @@ -306,22 +306,22 @@ function generate_grid{T}(::Type{Tetrahedron}, nel::NTuple{3, Int}, left::Vec{3, push!(cells, Tetrahedron((tmp[4], tmp[5], tmp[7], tmp[8]))) end - # Cell boundaries + # Cell faces cell_array = reshape(collect(1:nel_tot),(5, nel_x, nel_y, nel_z)) - cellbounds = CellBoundary[[CellBoundary((cl, 1)) for cl in cell_array[1,:,:,1][:]]; - [CellBoundary((cl, 1)) for cl in cell_array[2,:,:,1][:]]; - [CellBoundary((cl, 2)) for cl in cell_array[1,:,1,:][:]]; - [CellBoundary((cl, 1)) for cl in cell_array[4,:,1,:][:]]; - [CellBoundary((cl, 2)) for cl in cell_array[2,end,:,:][:]]; - [CellBoundary((cl, 4)) for cl in cell_array[4,end,:,:][:]]; - [CellBoundary((cl, 3)) for cl in cell_array[2,:,end,:][:]]; - [CellBoundary((cl, 4)) for cl in cell_array[5,:,end,:][:]]; - [CellBoundary((cl, 4)) for cl in cell_array[1,1,:,:][:]]; - [CellBoundary((cl, 2)) for cl in cell_array[5,1,:,:][:]]; - [CellBoundary((cl, 3)) for cl in cell_array[4,:,:,end][:]]; - [CellBoundary((cl, 3)) for cl in cell_array[5,:,:,end][:]]] - - # Cell boundary sets + cellbounds = CellFace[[CellFace((cl, 1)) for cl in cell_array[1,:,:,1][:]]; + [CellFace((cl, 1)) for cl in cell_array[2,:,:,1][:]]; + [CellFace((cl, 2)) for cl in cell_array[1,:,1,:][:]]; + [CellFace((cl, 1)) for cl in cell_array[4,:,1,:][:]]; + [CellFace((cl, 2)) for cl in cell_array[2,end,:,:][:]]; + [CellFace((cl, 4)) for cl in cell_array[4,end,:,:][:]]; + [CellFace((cl, 3)) for cl in cell_array[2,:,end,:][:]]; + [CellFace((cl, 4)) for cl in cell_array[5,:,end,:][:]]; + [CellFace((cl, 4)) for cl in cell_array[1,1,:,:][:]]; + [CellFace((cl, 2)) for cl in cell_array[5,1,:,:][:]]; + [CellFace((cl, 3)) for cl in cell_array[4,:,:,end][:]]; + [CellFace((cl, 3)) for cl in cell_array[5,:,:,end][:]]] + + # Cell face sets offset = 0 cellboundsets = Dict{String, Vector{Int}}() cellboundsets["bottom"] = (1:length([cell_array[1,:,:,1][:]; cell_array[2,:,:,1][:]])) + offset; offset += length([cell_array[1,:,:,1][:]; cell_array[2,:,:,1][:]]) @@ -331,5 +331,5 @@ function generate_grid{T}(::Type{Tetrahedron}, nel::NTuple{3, Int}, left::Vec{3, cellboundsets["left"] = (1:length([cell_array[1,1,:,:][:]; cell_array[5,1,:,:][:]])) + offset; offset += length([cell_array[1,1,:,:][:]; cell_array[5,1,:,:][:]]) cellboundsets["top"] = (1:length([cell_array[4,:,:,end][:]; cell_array[5,:,:,end][:]])) + offset; offset += length([cell_array[4,:,:,end][:]; cell_array[5,:,:,end][:]]) - return Grid(cells, nodes, cellboundaries=cellbounds, cellboundarysets=cellboundsets) + return Grid(cells, nodes, cellfaces=cellbounds, cellfacesets=cellboundsets) end diff --git a/src/interpolations.jl b/src/interpolations.jl index 7bc5b93464..0bb9f29ae7 100644 --- a/src/interpolations.jl +++ b/src/interpolations.jl @@ -88,9 +88,11 @@ end ##################### # Utility functions # ##################### -getnboundaries{dim}(::Interpolation{dim, RefCube}) = 2*dim -getnboundaries(::Interpolation{2, RefTetrahedron}) = 3 -getnboundaries(::Interpolation{3, RefTetrahedron}) = 4 +getnfaces{dim}(::Interpolation{dim, RefCube}) = 2*dim +getnfaces(::Interpolation{2, RefTetrahedron}) = 3 +getnfaces(::Interpolation{3, RefTetrahedron}) = 4 + +getfacelist(i::Interpolation) = getfacelist(typeof(i)) """ Returns the number of base functions for an [`Interpolation`](@ref) or `Values` object. @@ -109,8 +111,8 @@ getlowerorder{dim,shape,order}(::Lagrange{dim,shape,order}) = Lagrange{dim,shape # Lagrange dim 1 RefCube order 1 # ################################## getnbasefunctions(::Lagrange{1, RefCube, 1}) = 2 -getnboundarynodes(::Lagrange{1, RefCube, 1}) = 1 -getboundarylist(::Lagrange{1, RefCube, 1}) = ((1,),(2,)) +getnfacenodes(::Lagrange{1, RefCube, 1}) = 1 +getfacelist(::Type{Lagrange{1, RefCube, 1}}) = ((1,),(2,)) function value!(ip::Lagrange{1, RefCube, 1}, N::AbstractVector, ξ::Vec{1}) checkdim_value(ip, N, ξ) @@ -140,8 +142,8 @@ end # Lagrange dim 1 RefCube order 2 # ################################## getnbasefunctions(::Lagrange{1, RefCube, 2}) = 3 -getnboundarynodes(::Lagrange{1, RefCube, 2}) = 1 -getboundarylist(::Lagrange{1, RefCube, 2}) = ((1,),(2,)) +getnfacenodes(::Lagrange{1, RefCube, 2}) = 1 +getfacelist(::Type{Lagrange{1, RefCube, 2}}) = ((1,),(2,)) function value!(ip::Lagrange{1, RefCube, 2}, N::AbstractVector, ξ::Vec{1}) checkdim_value(ip, N, ξ) @@ -175,8 +177,8 @@ end # Lagrange dim 2 RefCube order 1 # ################################## getnbasefunctions(::Lagrange{2, RefCube, 1}) = 4 -getnboundarynodes(::Lagrange{2, RefCube, 1}) = 2 -getboundarylist(::Lagrange{2, RefCube, 1}) = ((1,2),(2,3),(3,4),(1,4)) +getnfacenodes(::Lagrange{2, RefCube, 1}) = 2 +getfacelist(::Type{Lagrange{2, RefCube, 1}}) = ((1,2),(2,3),(3,4),(1,4)) function value!(ip::Lagrange{2, RefCube, 1}, N::AbstractVector, ξ::Vec{2}) checkdim_value(ip, N, ξ) @@ -221,8 +223,8 @@ end # Lagrange dim 2 RefCube order 2 # ################################## getnbasefunctions(::Lagrange{2, RefCube, 2}) = 9 -getnboundarynodes(::Lagrange{2, RefCube, 2}) = 3 -getboundarylist(::Lagrange{2, RefCube, 2}) = ((1,2,5),(2,3,6),(3,4,7),(1,4,8)) +getnfacenodes(::Lagrange{2, RefCube, 2}) = 3 +getfacelist(::Type{Lagrange{2, RefCube, 2}}) = ((1,2,5),(2,3,6),(3,4,7),(1,4,8)) function value!(ip::Lagrange{2, RefCube, 2}, N::AbstractVector, ξ::Vec{2}) checkdim_value(ip, N, ξ) @@ -288,8 +290,8 @@ end ######################################### getnbasefunctions(::Lagrange{2, RefTetrahedron, 1}) = 3 getlowerdim{order}(::Lagrange{2, RefTetrahedron, order}) = Lagrange{1, RefCube, order}() -getnboundarynodes(::Lagrange{2, RefTetrahedron, 1}) = 2 -getboundarylist(::Lagrange{2, RefTetrahedron, 1}) = ((1,2),(2,3),(1,3)) +getnfacenodes(::Lagrange{2, RefTetrahedron, 1}) = 2 +getfacelist(::Type{Lagrange{2, RefTetrahedron, 1}}) = ((1,2),(2,3),(1,3)) function value!(ip::Lagrange{2, RefTetrahedron, 1}, N::AbstractVector, ξ::Vec{2}) checkdim_value(ip, N, ξ) @@ -322,8 +324,8 @@ end # Lagrange dim 2 RefTetrahedron order 2 # ######################################### getnbasefunctions(::Lagrange{2, RefTetrahedron, 2}) = 6 -getnboundarynodes(::Lagrange{2, RefTetrahedron, 2}) = 3 -getboundarylist(::Lagrange{2, RefTetrahedron, 2}) = ((1,2,4),(2,3,5),(1,3,6)) +getnfacenodes(::Lagrange{2, RefTetrahedron, 2}) = 3 +getfacelist(::Type{Lagrange{2, RefTetrahedron, 2}}) = ((1,2,4),(2,3,5),(1,3,6)) function value!(ip::Lagrange{2, RefTetrahedron, 2}, N::AbstractVector, ξ::Vec{2}) checkdim_value(ip, N, ξ) @@ -370,8 +372,8 @@ end # Lagrange dim 3 RefTetrahedron order 1 # ######################################### getnbasefunctions(::Lagrange{3, RefTetrahedron, 1}) = 4 -getnboundarynodes(::Lagrange{3, RefTetrahedron, 1}) = 3 -getboundarylist(::Lagrange{3, RefTetrahedron, 1}) = ((1,2,3),(1,2,4),(2,3,4),(1,3,4)) +getnfacenodes(::Lagrange{3, RefTetrahedron, 1}) = 3 +getfacelist(::Type{Lagrange{3, RefTetrahedron, 1}}) = ((1,2,3),(1,2,4),(2,3,4),(1,3,4)) function value!(ip::Lagrange{3, RefTetrahedron, 1}, N::AbstractVector, ξ::Vec{3}) checkdim_value(ip, N, ξ) @@ -407,8 +409,8 @@ end # Lagrange dim 3 RefCube order 1 # ################################## getnbasefunctions(::Lagrange{3, RefCube, 1}) = 8 -getnboundarynodes(::Lagrange{3, RefCube, 1}) = 4 -getboundarylist(::Lagrange{3, RefCube, 1}) = ((1,2,3,4),(1,2,5,6),(2,3,6,7),(3,4,7,8),(1,4,5,8),(5,6,7,8)) +getnfacenodes(::Lagrange{3, RefCube, 1}) = 4 +getfacelist(::Type{Lagrange{3, RefCube, 1}}) = ((1,2,3,4),(1,2,5,6),(2,3,6,7),(3,4,7,8),(1,4,5,8),(5,6,7,8)) function value!(ip::Lagrange{3, RefCube, 1}, N::AbstractVector, ξ::Vec{3}) checkdim_value(ip, N, ξ) @@ -463,8 +465,8 @@ immutable Serendipity{dim, shape, order} <: Interpolation{dim, shape, order} end getnbasefunctions(::Serendipity{2, RefCube, 2}) = 8 getlowerdim(::Serendipity{2, RefCube, 2}) = Lagrange{1, RefCube, 2}() getlowerorder(::Serendipity{2, RefCube, 2}) = Lagrange{2, RefCube, 1}() -getnboundarynodes(::Serendipity{2, RefCube, 2}) = 3 -getboundarylist(::Serendipity{2, RefCube, 2}) = ((1,2,5),(2,3,6),(3,4,7),(1,4,8)) +getnfacenodes(::Serendipity{2, RefCube, 2}) = 3 +getfacelist(::Type{Serendipity{2, RefCube, 2}}) = ((1,2,5),(2,3,6),(3,4,7),(1,4,8)) function value!(ip::Serendipity{2, RefCube, 2}, N::AbstractVector, ξ::Vec{2}) checkdim_value(ip, N, ξ) diff --git a/src/quadrature.jl b/src/quadrature.jl index 029110515a..0e95a97aea 100644 --- a/src/quadrature.jl +++ b/src/quadrature.jl @@ -16,7 +16,7 @@ There are different rules to determine the points and weights. In `JuAFEM` two d `:legendre` is used by default. In `JuAFEM`, the `QuadratureRule` type is mostly used as one of the components to create a [`CellValues`](@ref) -or [`BoundaryValues`](@ref) object. +or [`FaceValues`](@ref) object. **Constructor:** @@ -101,7 +101,7 @@ getpoints(qr::QuadratureRule) = qr.points (::Type{QuadratureRule{dim, shape}}){dim, shape}(order::Int) = QuadratureRule{dim, shape}(:legendre, order) -# Special case for boundary integration of 1D problems +# Special case for face integration of 1D problems function (::Type{QuadratureRule{0, RefCube}})(quad_type::Symbol, order::Int) w = Float64[1.0] p = Vec{0,Float64}[] @@ -158,7 +158,7 @@ for dim in (2, 3) end end -# Special version for boundary integration of triangles +# Special version for face integration of triangles function (::Type{QuadratureRule{1, RefTetrahedron}})(quad_type::Symbol, order::Int) if quad_type == :legendre p, weights = gausslegendre(order) diff --git a/test/runtests.jl b/test/runtests.jl index 13eab004e9..a1db5cdb84 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -6,7 +6,7 @@ using ForwardDiff include("test_utils.jl") include("test_interpolations.jl") include("test_cellvalues.jl") -include("test_boundaryvalues.jl") +include("test_facevalues.jl") include("test_quadrules.jl") include("test_assemble.jl") include("test_grid.jl") diff --git a/test/test_boundaryvalues.jl b/test/test_facevalues.jl similarity index 69% rename from test/test_boundaryvalues.jl rename to test/test_facevalues.jl index 51b4045d0b..164248dc66 100644 --- a/test/test_boundaryvalues.jl +++ b/test/test_facevalues.jl @@ -1,4 +1,4 @@ -@testset "BoundaryValues" begin +@testset "FaceValues" begin for (func_interpol, quad_rule) in ((Lagrange{1, RefCube, 1}(), QuadratureRule{0, RefCube}(2)), (Lagrange{1, RefCube, 2}(), QuadratureRule{0, RefCube}(2)), (Lagrange{2, RefCube, 1}(), QuadratureRule{1, RefCube}(2)), @@ -9,20 +9,20 @@ for (func_interpol, quad_rule) in ((Lagrange{1, RefCube, 1}(), QuadratureRule{0 (Serendipity{2, RefCube, 2}(), QuadratureRule{1, RefCube}(2)), (Lagrange{3, RefTetrahedron, 1}(), QuadratureRule{2, RefTetrahedron}(2))) - for fe_valtype in (BoundaryScalarValues, BoundaryVectorValues) + for fe_valtype in (FaceScalarValues, FaceVectorValues) bv = fe_valtype(quad_rule, func_interpol) ndim = getdim(func_interpol) n_basefuncs = getnbasefunctions(func_interpol) - fe_valtype == BoundaryScalarValues && @test getnbasefunctions(bv) == n_basefuncs - fe_valtype == BoundaryVectorValues && @test getnbasefunctions(bv) == n_basefuncs * getdim(func_interpol) + fe_valtype == FaceScalarValues && @test getnbasefunctions(bv) == n_basefuncs + fe_valtype == FaceVectorValues && @test getnbasefunctions(bv) == n_basefuncs * getdim(func_interpol) x = valid_coordinates(func_interpol) - boundary_nodes, cell_nodes = topology_test_nodes(func_interpol) - for boundary in 1:JuAFEM.getnboundaries(func_interpol) - reinit!(bv, x, boundary) - boundary_quad_rule = getquadrule(bv) - @test JuAFEM.getcurrentboundary(bv) == boundary + face_nodes, cell_nodes = topology_test_nodes(func_interpol) + for face in 1:JuAFEM.getnfaces(func_interpol) + reinit!(bv, x, face) + face_quad_rule = getquadrule(bv) + @test JuAFEM.getcurrentface(bv) == face # We test this by applying a given deformation gradient on all the nodes. # Since this is a linear deformation we should get back the exact values @@ -37,15 +37,15 @@ for (func_interpol, quad_rule) in ((Lagrange{1, RefCube, 1}(), QuadratureRule{0 end u_vector = reinterpret(Float64, u, (n_basefuncs*ndim,)) - for i in 1:length(getpoints(boundary_quad_rule)) + for i in 1:length(getpoints(face_quad_rule)) @test function_gradient(bv, i, u) ≈ H @test function_symmetric_gradient(bv, i, u) ≈ 0.5(H + H') @test function_divergence(bv, i, u) ≈ trace(H) function_value(bv, i, u) - if isa(bv, BoundaryScalarValues) + if isa(bv, FaceScalarValues) @test function_gradient(bv, i, u_scal) ≈ V function_value(bv, i, u_scal) - elseif isa(bv, BoundaryVectorValues) + elseif isa(bv, FaceVectorValues) @test function_gradient(bv, i, u_vector) ≈ function_gradient(bv, i, u) ≈ H @test function_value(bv, i, u_vector) ≈ function_value(bv, i, u) @test function_divergence(bv, i, u_vector) ≈ function_divergence(bv, i, u) ≈ trace(H) @@ -57,8 +57,8 @@ for (func_interpol, quad_rule) in ((Lagrange{1, RefCube, 1}(), QuadratureRule{0 for i in 1:getnquadpoints(bv) vol += getdetJdV(bv,i) end - x_boundary = x[[JuAFEM.getboundarylist(func_interpol)[boundary]...]] - @test vol ≈ calculate_volume(JuAFEM.getlowerdim(func_interpol), x_boundary) + x_face = x[[JuAFEM.getfacelist(func_interpol)[face]...]] + @test vol ≈ calculate_volume(JuAFEM.getlowerdim(func_interpol), x_face) # Test of utility functions @test getfunctioninterpolation(bv) == func_interpol @@ -66,26 +66,26 @@ for (func_interpol, quad_rule) in ((Lagrange{1, RefCube, 1}(), QuadratureRule{0 # Test quadrature rule after reinit! with ref. coords x = reference_coordinates(func_interpol) - reinit!(bv, x, boundary) + reinit!(bv, x, face) vol = 0.0 for i in 1:getnquadpoints(bv) vol += getdetJdV(bv, i) end - @test vol ≈ reference_volume(func_interpol, boundary) + @test vol ≈ reference_volume(func_interpol, face) # Test spatial coordinate (after reinit with ref.coords we should get back the quad_points) - for (i, qp_x) in enumerate(getpoints(boundary_quad_rule)) + for (i, qp_x) in enumerate(getpoints(face_quad_rule)) @test spatial_coordinate(bv, i, x) ≈ qp_x end end - # Test boundary number calculation - boundary_nodes, cell_nodes = topology_test_nodes(func_interpol) - for boundary in 1:JuAFEM.getnboundaries(func_interpol) - @test getboundarynumber(boundary_nodes[boundary], cell_nodes, func_interpol) == boundary + # Test face number calculation + face_nodes, cell_nodes = topology_test_nodes(func_interpol) + for face in 1:JuAFEM.getnfaces(func_interpol) + @test getfacenumber(face_nodes[face], cell_nodes, func_interpol) == face end - @test_throws ArgumentError getboundarynumber(boundary_nodes[JuAFEM.getnboundaries(func_interpol)+1], cell_nodes, func_interpol) + @test_throws ArgumentError getfacenumber(face_nodes[JuAFEM.getnfaces(func_interpol)+1], cell_nodes, func_interpol) end end diff --git a/test/test_utils.jl b/test/test_utils.jl index fa59d70543..ded39ff6d1 100644 --- a/test/test_utils.jl +++ b/test/test_utils.jl @@ -5,10 +5,10 @@ ##################################### reference_volume{dim}(::Interpolation{dim, RefCube}) = 2^dim reference_volume{dim}(::Interpolation{dim, RefTetrahedron}) = 1 / factorial(dim) -# For boundaries +# For faces reference_volume(fs::Interpolation, ::Int) = reference_volume(JuAFEM.getlowerdim(fs)) -reference_volume(fs::Interpolation{2, RefTetrahedron}, boundary::Int) = boundary == 1 ? sqrt(2) : 1.0 -reference_volume(fs::Interpolation{3, RefTetrahedron}, boundary::Int) = boundary == 3 ? sqrt(2 * 1.5) / 2.0 : 0.5 +reference_volume(fs::Interpolation{2, RefTetrahedron}, face::Int) = face == 1 ? sqrt(2) : 1.0 +reference_volume(fs::Interpolation{3, RefTetrahedron}, face::Int) = face == 3 ? sqrt(2 * 1.5) / 2.0 : 0.5 ########################################## # Coordinates for the reference elements # @@ -180,57 +180,57 @@ function calculate_volume{T}(::Serendipity{2, RefCube, 2}, x::Vector{Vec{2, T}}) return vol end -# For boundaries +# For faces function calculate_volume{order, T}(::Lagrange{0, RefCube, order}, ::Vector{Vec{1, T}}) return one(T) end #################################### -# For testing getboundarynumber() # +# For testing getfacenumber() # #################################### -# Last set of boundary nodes throws error +# Last set of face nodes throws error function topology_test_nodes(::Lagrange{1, RefCube, 1}) cell_nodes = [3,4] - boundary_nodes = [[3,], [4,], [1337,]] - return boundary_nodes, cell_nodes + face_nodes = [[3,], [4,], [1337,]] + return face_nodes, cell_nodes end function topology_test_nodes(::Lagrange{1, RefCube, 2}) cell_nodes = [3,4,8] - boundary_nodes = [[3,], [4,], [8,]] - return boundary_nodes, cell_nodes + face_nodes = [[3,], [4,], [8,]] + return face_nodes, cell_nodes end function topology_test_nodes(::Lagrange{2, RefCube, 1}) cell_nodes = [3,4,8,1] - boundary_nodes = [[3,4], [4,8], [8,1], [1,3], [3,1337]] - return boundary_nodes, cell_nodes + face_nodes = [[3,4], [4,8], [8,1], [1,3], [3,1337]] + return face_nodes, cell_nodes end function topology_test_nodes(::Lagrange{2, RefCube, 2}) cell_nodes = [3,4,8,1,2,5,6,7,9] - boundary_nodes = [[3,4,2], [4,8,5], [8,1,6], [1,3,7], [3,4,1337]] - return boundary_nodes, cell_nodes + face_nodes = [[3,4,2], [4,8,5], [8,1,6], [1,3,7], [3,4,1337]] + return face_nodes, cell_nodes end function topology_test_nodes(::Lagrange{2, RefTetrahedron, 1}) cell_nodes = [3,4,8] - boundary_nodes = [[3,4], [4,8], [8,3], [3,1337]] - return boundary_nodes, cell_nodes + face_nodes = [[3,4], [4,8], [8,3], [3,1337]] + return face_nodes, cell_nodes end function topology_test_nodes(::Lagrange{2, RefTetrahedron, 2}) cell_nodes = [3,4,8,1,2,5] - boundary_nodes = [[3,4,1], [4,8,2], [8,3,5], [3,4,1337]] - return boundary_nodes, cell_nodes + face_nodes = [[3,4,1], [4,8,2], [8,3,5], [3,4,1337]] + return face_nodes, cell_nodes end function topology_test_nodes(::Lagrange{3, RefCube, 1}) cell_nodes = [3,4,8,1,2,5,6,7] - boundary_nodes = [[3,4,8,1], [3,4,5,2], [4,8,6,5], [8,1,7,6], [1,3,2,7], [2,5,6,7], [3,4,8,1337]] - return boundary_nodes, cell_nodes + face_nodes = [[3,4,8,1], [3,4,5,2], [4,8,6,5], [8,1,7,6], [1,3,2,7], [2,5,6,7], [3,4,8,1337]] + return face_nodes, cell_nodes end function topology_test_nodes(::Serendipity{2, RefCube, 2}) cell_nodes = [3,4,8,1,2,5,6,7] - boundary_nodes = [[3,4,2], [4,8,5], [8,1,6], [1,3,7], [3,4,1337]] - return boundary_nodes, cell_nodes + face_nodes = [[3,4,2], [4,8,5], [8,1,6], [1,3,7], [3,4,1337]] + return face_nodes, cell_nodes end function topology_test_nodes(::Lagrange{3, RefTetrahedron, 1}) cell_nodes = [3,4,8,1] - boundary_nodes = [[3,4,8], [3,4,1], [4,8,1], [3,8,1], [1,4,1337]] - return boundary_nodes, cell_nodes + face_nodes = [[3,4,8], [3,4,1], [4,8,1], [3,8,1], [1,4,1337]] + return face_nodes, cell_nodes end From 53319204f78a5515d6e1746331577c2033445a1a Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Tue, 21 Mar 2017 13:12:18 +0100 Subject: [PATCH 02/44] fix docs --- docs/src/lib/maintypes.md | 2 +- docs/src/lib/utility_functions.md | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/src/lib/maintypes.md b/docs/src/lib/maintypes.md index fa104e123a..91133ec8ea 100644 --- a/docs/src/lib/maintypes.md +++ b/docs/src/lib/maintypes.md @@ -15,5 +15,5 @@ AbstractRefShape QuadratureRule Interpolation CellValues -BoundaryValues +FaceValues ``` diff --git a/docs/src/lib/utility_functions.md b/docs/src/lib/utility_functions.md index 52d4d066b2..5316f2c4b4 100644 --- a/docs/src/lib/utility_functions.md +++ b/docs/src/lib/utility_functions.md @@ -49,14 +49,14 @@ function_divergence spatial_coordinate ``` -## BoundaryValues +## FaceValues -All of the methods for [`CellValues`](@ref) apply for `BoundaryValues` as well. -In addition, there are some methods that are unique for `BoundaryValues`: +All of the methods for [`CellValues`](@ref) apply for `FaceValues` as well. +In addition, there are some methods that are unique for `FaecValues`: ```@docs -getboundarynumber -getcurrentboundary +getfacenumber +getcurrentface ``` ## Assembling From c7dcd9cc2436daa943130b0ce21bda9b0b8f0fb9 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Tue, 21 Mar 2017 13:39:53 +0100 Subject: [PATCH 03/44] fixes --- src/grid.jl | 26 +++++----- src/grid_generators.jl | 108 ++++++++++++++++++++--------------------- 2 files changed, 67 insertions(+), 67 deletions(-) diff --git a/src/grid.jl b/src/grid.jl index 25737c5d65..9c50a40a44 100644 --- a/src/grid.jl +++ b/src/grid.jl @@ -8,8 +8,8 @@ export Line, QuadraticLine, # Grid utilities export getcells, getncells, getnodes, getnnodes, getcelltype, - getcellset, getnodeset, getcellfaceset, getcoordinates, getcoordinates!, - getcellsets, getnodesets, getcellfacesets + getcellset, getnodeset, getboundaryet, getcoordinates, getcoordinates!, + getcellsets, getnodesets, getfacesets export addnodeset!, addcellset! @@ -91,18 +91,18 @@ A `Grid` is a collection of `Cells` and `Node`s which covers the computational d immutable Grid{dim, N, T <: Real} cells::Vector{Cell{dim, N}} nodes::Vector{Node{dim, T}} - cellfaces::Vector{CellFace} + boundary::Vector{CellFace} cellsets::Dict{String, Vector{Int}} nodesets::Dict{String, Vector{Int}} - cellfacesets::Dict{String, Vector{Int}} + facesets::Dict{String, Vector{Int}} end function Grid{dim, N, T}(cells::Vector{Cell{dim, N}}, nodes::Vector{Node{dim, T}}; - cellfaces::Vector{CellFace} = CellFace[], + boundary::Vector{CellFace} = CellFace[], cellsets::Dict{String, Vector{Int}}=Dict{String, Vector{Int}}(), nodesets::Dict{String, Vector{Int}}=Dict{String, Vector{Int}}(), - cellfacesets::Dict{String, Vector{Int}}=Dict{String, Vector{Int}}()) - return Grid(cells, nodes, cellfaces, cellsets, nodesets, cellfacesets) + facesets::Dict{String, Vector{Int}}=Dict{String, Vector{Int}}()) + return Grid(cells, nodes, boundary, cellsets, nodesets, facesets) end ########################## @@ -119,10 +119,10 @@ end @inline getnodes(grid::Grid, set::String) = grid.nodes[grid.nodesets[set]] @inline getnnodes(grid::Grid) = length(grid.nodes) -@inline getfaces(grid::Grid) = grid.cellfaces -@inline getfaces(grid::Grid, v::Vector{Int}) = grid.cellfaces[v] -@inline getfaces(grid::Grid, set::String) = grid.cellfaces[grid.cellfacesets[set]] -@inline getnfaces(grid::Grid) = length(grid.cellfaces) +@inline getfaces(grid::Grid) = grid.boundary +@inline getfaces(grid::Grid, v::Vector{Int}) = grid.boundary[v] +@inline getfaces(grid::Grid, set::String) = grid.boundary[grid.facesets[set]] +@inline getnfaces(grid::Grid) = length(grid.boundary) @inline getcellset(grid::Grid, set::String) = grid.cellsets[set] @inline getcellsets(grid::Grid) = grid.cellsets @@ -130,8 +130,8 @@ end @inline getnodeset(grid::Grid, set::String) = grid.nodesets[set] @inline getnodesets(grid::Grid) = grid.nodesets -@inline getcellFaceset(grid::Grid, set::String) = grid.cellfacesets[set] -@inline getcellfacesets(grid::Grid) = grid.cellfacesets +@inline getcellFaceset(grid::Grid, set::String) = grid.facesets[set] +@inline getfacesets(grid::Grid) = grid.facesets n_faces_per_cell(grid::Grid) = nfaces(eltype(grid.cells)) getfacelist(grid::Grid) = getfacelist(eltype(grid.cells)) diff --git a/src/grid_generators.jl b/src/grid_generators.jl index 00d9a735a6..94e19901cb 100644 --- a/src/grid_generators.jl +++ b/src/grid_generators.jl @@ -34,13 +34,13 @@ function generate_grid{T}(::Type{Line}, nel::NTuple{1, Int}, left::Vec{1, T}=Vec end # Cell faces - cellbounds = CellFace[CellFace((1, 1)), + boundary = CellFace[CellFace((1, 1)), CellFace((nel_x, 2))] # Cell face sets - cellboundsets = Dict("left" => [1], + facesets = Dict("left" => [1], "right" => [2]) - return Grid(cells, nodes, cellfaces=cellbounds, cellfacesets=cellboundsets) + return Grid(cells, nodes, boundary=boundary, facesets=facesets) end # QuadraticLine @@ -62,13 +62,13 @@ function generate_grid{T}(::Type{QuadraticLine}, nel::NTuple{1, Int}, left::Vec{ end # Cell faces - cellbounds = CellFace[CellFace((1, 1)), + boundary = CellFace[CellFace((1, 1)), CellFace((nel_x, 2))] # Cell face sets - cellboundsets = Dict("left" => [1], + facesets = Dict("left" => [1], "right" => [2]) - return Grid(cells, nodes, cellfaces=cellbounds, cellfacesets=cellboundsets) + return Grid(cells, nodes, boundary=boundary, facesets=facesets) end # Quadrilateral @@ -94,20 +94,20 @@ function generate_grid{T}(::Type{Quadrilateral}, nel::NTuple{2, Int}, left::Vec{ # Cell faces cell_array = reshape(collect(1:nel_tot),(nel_x, nel_y)) - cellbounds = CellFace[[CellFace((cl, 1)) for cl in cell_array[:,1]]; + boundary = CellFace[[CellFace((cl, 1)) for cl in cell_array[:,1]]; [CellFace((cl, 2)) for cl in cell_array[end,:]]; [CellFace((cl, 3)) for cl in cell_array[:,end]]; [CellFace((cl, 4)) for cl in cell_array[1,:]]] # Cell face sets offset = 0 - cellboundsets = Dict{String, Vector{Int}}() - cellboundsets["bottom"] = (1:length(cell_array[:,1])) + offset; offset += length(cell_array[:,1]) - cellboundsets["right"] = (1:length(cell_array[end,:])) + offset; offset += length(cell_array[end,:]) - cellboundsets["top"] = (1:length(cell_array[:,end])) + offset; offset += length(cell_array[:,end]) - cellboundsets["left"] = (1:length(cell_array[1,:])) + offset; offset += length(cell_array[1,:]) + facesets = Dict{String, Vector{Int}}() + facesets["bottom"] = (1:length(cell_array[:,1])) + offset; offset += length(cell_array[:,1]) + facesets["right"] = (1:length(cell_array[end,:])) + offset; offset += length(cell_array[end,:]) + facesets["top"] = (1:length(cell_array[:,end])) + offset; offset += length(cell_array[:,end]) + facesets["left"] = (1:length(cell_array[1,:])) + offset; offset += length(cell_array[1,:]) - return Grid(cells, nodes, cellfaces=cellbounds, cellfacesets=cellboundsets) + return Grid(cells, nodes, boundary=boundary, facesets=facesets) end # QuadraticQuadrilateral @@ -135,20 +135,20 @@ function generate_grid{T}(::Type{QuadraticQuadrilateral}, nel::NTuple{2, Int}, l # Cell faces cell_array = reshape(collect(1:nel_tot),(nel_x, nel_y)) - cellbounds = CellFace[[CellFace((cl, 1)) for cl in cell_array[:,1]]; + boundary = CellFace[[CellFace((cl, 1)) for cl in cell_array[:,1]]; [CellFace((cl, 2)) for cl in cell_array[end,:]]; [CellFace((cl, 3)) for cl in cell_array[:,end]]; [CellFace((cl, 4)) for cl in cell_array[1,:]]] # Cell face sets offset = 0 - cellboundsets = Dict{String, Vector{Int}}() - cellboundsets["bottom"] = (1:length(cell_array[:,1])) + offset; offset += length(cell_array[:,1]) - cellboundsets["right"] = (1:length(cell_array[end,:])) + offset; offset += length(cell_array[end,:]) - cellboundsets["top"] = (1:length(cell_array[:,end])) + offset; offset += length(cell_array[:,end]) - cellboundsets["left"] = (1:length(cell_array[1,:])) + offset; offset += length(cell_array[1,:]) + facesets = Dict{String, Vector{Int}}() + facesets["bottom"] = (1:length(cell_array[:,1])) + offset; offset += length(cell_array[:,1]) + facesets["right"] = (1:length(cell_array[end,:])) + offset; offset += length(cell_array[end,:]) + facesets["top"] = (1:length(cell_array[:,end])) + offset; offset += length(cell_array[:,end]) + facesets["left"] = (1:length(cell_array[1,:])) + offset; offset += length(cell_array[1,:]) - return Grid(cells, nodes, cellfaces=cellbounds, cellfacesets=cellboundsets) + return Grid(cells, nodes, boundary=boundary, facesets=facesets) end # Hexahedron @@ -176,7 +176,7 @@ function generate_grid{T}(::Type{Hexahedron}, nel::NTuple{3, Int}, left::Vec{3, # Cell faces cell_array = reshape(collect(1:nel_tot),(nel_x, nel_y, nel_z)) - cellbounds = CellFace[[CellFace((cl, 1)) for cl in cell_array[:,:,1][:]]; + boundary = CellFace[[CellFace((cl, 1)) for cl in cell_array[:,:,1][:]]; [CellFace((cl, 2)) for cl in cell_array[:,1,:][:]]; [CellFace((cl, 3)) for cl in cell_array[end,:,:][:]]; [CellFace((cl, 4)) for cl in cell_array[:,end,:][:]]; @@ -185,15 +185,15 @@ function generate_grid{T}(::Type{Hexahedron}, nel::NTuple{3, Int}, left::Vec{3, # Cell face sets offset = 0 - cellboundsets = Dict{String, Vector{Int}}() - cellboundsets["bottom"] = (1:length(cell_array[:,:,1][:])) + offset; offset += length(cell_array[:,:,1][:]) - cellboundsets["front"] = (1:length(cell_array[:,1,:][:])) + offset; offset += length(cell_array[:,1,:][:]) - cellboundsets["right"] = (1:length(cell_array[end,:,:][:])) + offset; offset += length(cell_array[end,:,:][:]) - cellboundsets["back"] = (1:length(cell_array[:,end,:][:])) + offset; offset += length(cell_array[:,end,:][:]) - cellboundsets["left"] = (1:length(cell_array[1,:,:][:])) + offset; offset += length(cell_array[1,:,:][:]) - cellboundsets["top"] = (1:length(cell_array[:,:,end][:])) + offset; offset += length(cell_array[:,:,end][:]) - - return Grid(cells, nodes, cellfaces=cellbounds, cellfacesets=cellboundsets) + facesets = Dict{String, Vector{Int}}() + facesets["bottom"] = (1:length(cell_array[:,:,1][:])) + offset; offset += length(cell_array[:,:,1][:]) + facesets["front"] = (1:length(cell_array[:,1,:][:])) + offset; offset += length(cell_array[:,1,:][:]) + facesets["right"] = (1:length(cell_array[end,:,:][:])) + offset; offset += length(cell_array[end,:,:][:]) + facesets["back"] = (1:length(cell_array[:,end,:][:])) + offset; offset += length(cell_array[:,end,:][:]) + facesets["left"] = (1:length(cell_array[1,:,:][:])) + offset; offset += length(cell_array[1,:,:][:]) + facesets["top"] = (1:length(cell_array[:,:,end][:])) + offset; offset += length(cell_array[:,:,end][:]) + + return Grid(cells, nodes, boundary=boundary, facesets=facesets) end # Triangle @@ -220,20 +220,20 @@ function generate_grid{T}(::Type{Triangle}, nel::NTuple{2, Int}, left::Vec{2, T} # Cell faces cell_array = reshape(collect(1:nel_tot),(2, nel_x, nel_y)) - cellbounds = CellFace[[CellFace((cl, 1)) for cl in cell_array[1,:,1]]; + boundary = CellFace[[CellFace((cl, 1)) for cl in cell_array[1,:,1]]; [CellFace((cl, 1)) for cl in cell_array[2,end,:]]; [CellFace((cl, 2)) for cl in cell_array[2,:,end]]; [CellFace((cl, 3)) for cl in cell_array[1,1,:]]] # Cell face sets offset = 0 - cellboundsets = Dict{String, Vector{Int}}() - cellboundsets["bottom"] = (1:length(cell_array[1,:,1])) + offset; offset += length(cell_array[1,:,1]) - cellboundsets["right"] = (1:length(cell_array[2,end,:])) + offset; offset += length(cell_array[2,end,:]) - cellboundsets["top"] = (1:length(cell_array[2,:,end])) + offset; offset += length(cell_array[2,:,end]) - cellboundsets["left"] = (1:length(cell_array[1,1,:])) + offset; offset += length(cell_array[1,1,:]) + facesets = Dict{String, Vector{Int}}() + facesets["bottom"] = (1:length(cell_array[1,:,1])) + offset; offset += length(cell_array[1,:,1]) + facesets["right"] = (1:length(cell_array[2,end,:])) + offset; offset += length(cell_array[2,end,:]) + facesets["top"] = (1:length(cell_array[2,:,end])) + offset; offset += length(cell_array[2,:,end]) + facesets["left"] = (1:length(cell_array[1,1,:])) + offset; offset += length(cell_array[1,1,:]) - return Grid(cells, nodes, cellfaces=cellbounds, cellfacesets=cellboundsets) + return Grid(cells, nodes, boundary=boundary, facesets=facesets) end # QuadraticTriangle @@ -262,20 +262,20 @@ function generate_grid{T}(::Type{QuadraticTriangle}, nel::NTuple{2, Int}, left:: # Cell faces cell_array = reshape(collect(1:nel_tot),(2, nel_x, nel_y)) - cellbounds = CellFace[[CellFace((cl, 1)) for cl in cell_array[1,:,1]]; + boundary = CellFace[[CellFace((cl, 1)) for cl in cell_array[1,:,1]]; [CellFace((cl, 1)) for cl in cell_array[2,end,:]]; [CellFace((cl, 2)) for cl in cell_array[2,:,end]]; [CellFace((cl, 3)) for cl in cell_array[1,1,:]]] # Cell face sets offset = 0 - cellboundsets = Dict{String, Vector{Int}}() - cellboundsets["bottom"] = (1:length(cell_array[1,:,1])) + offset; offset += length(cell_array[1,:,1]) - cellboundsets["right"] = (1:length(cell_array[2,end,:])) + offset; offset += length(cell_array[2,end,:]) - cellboundsets["top"] = (1:length(cell_array[2,:,end])) + offset; offset += length(cell_array[2,:,end]) - cellboundsets["left"] = (1:length(cell_array[1,1,:])) + offset; offset += length(cell_array[1,1,:]) + facesets = Dict{String, Vector{Int}}() + facesets["bottom"] = (1:length(cell_array[1,:,1])) + offset; offset += length(cell_array[1,:,1]) + facesets["right"] = (1:length(cell_array[2,end,:])) + offset; offset += length(cell_array[2,end,:]) + facesets["top"] = (1:length(cell_array[2,:,end])) + offset; offset += length(cell_array[2,:,end]) + facesets["left"] = (1:length(cell_array[1,1,:])) + offset; offset += length(cell_array[1,1,:]) - return Grid(cells, nodes, cellfaces=cellbounds, cellfacesets=cellboundsets) + return Grid(cells, nodes, boundary=boundary, facesets=facesets) end # Tetrahedron @@ -308,7 +308,7 @@ function generate_grid{T}(::Type{Tetrahedron}, nel::NTuple{3, Int}, left::Vec{3, # Cell faces cell_array = reshape(collect(1:nel_tot),(5, nel_x, nel_y, nel_z)) - cellbounds = CellFace[[CellFace((cl, 1)) for cl in cell_array[1,:,:,1][:]]; + boundary = CellFace[[CellFace((cl, 1)) for cl in cell_array[1,:,:,1][:]]; [CellFace((cl, 1)) for cl in cell_array[2,:,:,1][:]]; [CellFace((cl, 2)) for cl in cell_array[1,:,1,:][:]]; [CellFace((cl, 1)) for cl in cell_array[4,:,1,:][:]]; @@ -323,13 +323,13 @@ function generate_grid{T}(::Type{Tetrahedron}, nel::NTuple{3, Int}, left::Vec{3, # Cell face sets offset = 0 - cellboundsets = Dict{String, Vector{Int}}() - cellboundsets["bottom"] = (1:length([cell_array[1,:,:,1][:]; cell_array[2,:,:,1][:]])) + offset; offset += length([cell_array[1,:,:,1][:]; cell_array[2,:,:,1][:]]) - cellboundsets["front"] = (1:length([cell_array[1,:,1,:][:]; cell_array[4,:,1,:][:]])) + offset; offset += length([cell_array[1,:,1,:][:]; cell_array[4,:,1,:][:]]) - cellboundsets["right"] = (1:length([cell_array[2,end,:,:][:]; cell_array[4,end,:,:][:]])) + offset; offset += length([cell_array[2,end,:,:][:]; cell_array[4,end,:,:][:]]) - cellboundsets["back"] = (1:length([cell_array[2,:,end,:][:]; cell_array[5,:,end,:][:]])) + offset; offset += length([cell_array[2,:,end,:][:]; cell_array[5,:,end,:][:]]) - cellboundsets["left"] = (1:length([cell_array[1,1,:,:][:]; cell_array[5,1,:,:][:]])) + offset; offset += length([cell_array[1,1,:,:][:]; cell_array[5,1,:,:][:]]) - cellboundsets["top"] = (1:length([cell_array[4,:,:,end][:]; cell_array[5,:,:,end][:]])) + offset; offset += length([cell_array[4,:,:,end][:]; cell_array[5,:,:,end][:]]) - - return Grid(cells, nodes, cellfaces=cellbounds, cellfacesets=cellboundsets) + facesets = Dict{String, Vector{Int}}() + facesets["bottom"] = (1:length([cell_array[1,:,:,1][:]; cell_array[2,:,:,1][:]])) + offset; offset += length([cell_array[1,:,:,1][:]; cell_array[2,:,:,1][:]]) + facesets["front"] = (1:length([cell_array[1,:,1,:][:]; cell_array[4,:,1,:][:]])) + offset; offset += length([cell_array[1,:,1,:][:]; cell_array[4,:,1,:][:]]) + facesets["right"] = (1:length([cell_array[2,end,:,:][:]; cell_array[4,end,:,:][:]])) + offset; offset += length([cell_array[2,end,:,:][:]; cell_array[4,end,:,:][:]]) + facesets["back"] = (1:length([cell_array[2,:,end,:][:]; cell_array[5,:,end,:][:]])) + offset; offset += length([cell_array[2,:,end,:][:]; cell_array[5,:,end,:][:]]) + facesets["left"] = (1:length([cell_array[1,1,:,:][:]; cell_array[5,1,:,:][:]])) + offset; offset += length([cell_array[1,1,:,:][:]; cell_array[5,1,:,:][:]]) + facesets["top"] = (1:length([cell_array[4,:,:,end][:]; cell_array[5,:,:,end][:]])) + offset; offset += length([cell_array[4,:,:,end][:]; cell_array[5,:,:,end][:]]) + + return Grid(cells, nodes, boundary=boundary, facesets=facesets) end From d219820e6c2e09f42255340b1154189ed4cd22c0 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Tue, 21 Mar 2017 13:44:17 +0100 Subject: [PATCH 04/44] remove old stuff --- src/grid.jl | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/src/grid.jl b/src/grid.jl index 9c50a40a44..e43b04bbeb 100644 --- a/src/grid.jl +++ b/src/grid.jl @@ -33,37 +33,19 @@ end (::Type{Cell{dim}}){dim,N}(nodes::NTuple{N}) = Cell{dim,N}(nodes) # Typealias for commonly used cells - -to_interpolation(c::Cell) = to_interpolation(typeof(c)) - -getfacelist(c::Cell) = getfacelist(typeof(c)) -getfacelist(c::Type{<:Cell}) = getfacelist(to_interpolation(c)) - -nfaces(c::Cell) = n_faces(typeof(c)) -nfaces(c::Type{<:Cell}) = length(getfacelist(c)) - @compat const Line = Cell{1, 2} -to_interpolation(::Type{Line}) = Lagrange{1, RefCube, 1} @compat const QuadraticLine = Cell{1, 3} -to_interpolation(::Type{QuadraticLine}) = Lagrange{1, RefCube, 2} - @compat const Triangle = Cell{2, 3} -to_interpolation(::Type{Triangle}) = Lagrange{2, RefTetrahedron, 1} @compat const QuadraticTriangle = Cell{2, 6} -to_interpolation(::Type{QuadraticTriangle}) = Lagrange{2, RefTetrahedron, 2} @compat const Quadrilateral = Cell{2, 4} -to_interpolation(::Type{Quadrilateral}) = Lagrange{2, RefCube, 1} @compat const QuadraticQuadrilateral = Cell{2, 9} -to_interpolation(::Type{QuadraticQuadrilateral}) = Lagrange{2, RefCube, 2} @compat const Tetrahedron = Cell{3, 4} -to_interpolation(::Type{Tetrahedron}) = Lagrange{3, RefTetrahedron, 1} @compat const QuadraticTetrahedron = Cell{3, 10} # Function interpolation for this doesn't exist in JuAFEM yet @compat const Hexahedron = Cell{3, 8} -to_interpolation(::Type{Hexahedron}) = Lagrange{3, RefCube, 1} @compat const QuadraticHexahedron = Cell{3, 20} # Function interpolation for this doesn't exist in JuAFEM yet """ From 7ba63e318d3ffbf491aadfdc06bd337646342706 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Tue, 21 Mar 2017 13:46:44 +0100 Subject: [PATCH 05/44] fix name --- src/grid.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/grid.jl b/src/grid.jl index e43b04bbeb..736c183a7a 100644 --- a/src/grid.jl +++ b/src/grid.jl @@ -112,7 +112,7 @@ end @inline getnodeset(grid::Grid, set::String) = grid.nodesets[set] @inline getnodesets(grid::Grid) = grid.nodesets -@inline getcellFaceset(grid::Grid, set::String) = grid.facesets[set] +@inline getfaceset(grid::Grid, set::String) = grid.facesets[set] @inline getfacesets(grid::Grid) = grid.facesets n_faces_per_cell(grid::Grid) = nfaces(eltype(grid.cells)) From f8d07f2aeaa32b4c97a2dfbd9cab236dd0a19d3f Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Tue, 21 Mar 2017 13:51:20 +0100 Subject: [PATCH 06/44] stuff --- src/grid.jl | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/grid.jl b/src/grid.jl index 736c183a7a..ef90c9f96d 100644 --- a/src/grid.jl +++ b/src/grid.jl @@ -8,7 +8,7 @@ export Line, QuadraticLine, # Grid utilities export getcells, getncells, getnodes, getnnodes, getcelltype, - getcellset, getnodeset, getboundaryet, getcoordinates, getcoordinates!, + getcellset, getnodeset, getcoordinates, getcoordinates!, getcellsets, getnodesets, getfacesets export addnodeset!, addcellset! @@ -101,10 +101,8 @@ end @inline getnodes(grid::Grid, set::String) = grid.nodes[grid.nodesets[set]] @inline getnnodes(grid::Grid) = length(grid.nodes) -@inline getfaces(grid::Grid) = grid.boundary -@inline getfaces(grid::Grid, v::Vector{Int}) = grid.boundary[v] -@inline getfaces(grid::Grid, set::String) = grid.boundary[grid.facesets[set]] -@inline getnfaces(grid::Grid) = length(grid.boundary) +@inline getboundary(grid::Grid) = grid.boundary +@inline getboundary(grid::Grid, v::Vector{Int}) = grid.boundary[v] @inline getcellset(grid::Grid, set::String) = grid.cellsets[set] @inline getcellsets(grid::Grid) = grid.cellsets From 8f6c6d6d3f88528a3f290eec13d895d60c72592c Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Tue, 21 Feb 2017 22:35:44 +0100 Subject: [PATCH 07/44] grid stuff --- src/grid.jl | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/grid.jl b/src/grid.jl index ef90c9f96d..158f17f856 100644 --- a/src/grid.jl +++ b/src/grid.jl @@ -23,6 +23,7 @@ immutable Node{dim, T} x::Vec{dim, T} end Node{dim, T}(x::NTuple{dim, T}) = Node(Vec{dim, T}(x)) +getcoordinates(n::Node) = n.x """ A `Cell` is a sub-domain defined by a collection of `Node`s as it's vertices. @@ -70,7 +71,7 @@ A `CellFaceIndex` is returned when looping over cell faces of the grid. """ A `Grid` is a collection of `Cells` and `Node`s which covers the computational domain. """ -immutable Grid{dim, N, T <: Real} +type Grid{dim, N, T <: Real} cells::Vector{Cell{dim, N}} nodes::Vector{Node{dim, T}} boundary::Vector{CellFace} @@ -91,13 +92,13 @@ end # Grid utility functions # ########################## @inline getcells(grid::Grid) = grid.cells -@inline getcells(grid::Grid, v::Vector{Int}) = grid.cells[v] +@inline getcells(grid::Grid, v::Union{Int, Vector{Int}}) = grid.cells[v] @inline getcells(grid::Grid, set::String) = grid.cells[grid.cellsets[set]] @inline getncells(grid::Grid) = length(grid.cells) @inline getcelltype(grid::Grid) = eltype(grid.cells) @inline getnodes(grid::Grid) = grid.nodes -@inline getnodes(grid::Grid, v::Vector{Int}) = grid.nodes[v] +@inline getnodes(grid::Grid, v::Union{Int, Vector{Int}}) = grid.nodes[v] @inline getnodes(grid::Grid, set::String) = grid.nodes[grid.nodesets[set]] @inline getnnodes(grid::Grid) = length(grid.nodes) From 285b7c118901dea9921584c6ee49ee826f7235db Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Tue, 21 Mar 2017 13:47:03 +0100 Subject: [PATCH 08/44] rename boundary to face add face iterator remove the redundant face list fixup iterators remove stupid getface --- src/grid.jl | 45 ++++++++++++++++++++------- src/iterators.jl | 81 +++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 114 insertions(+), 12 deletions(-) diff --git a/src/grid.jl b/src/grid.jl index 158f17f856..850e9466ac 100644 --- a/src/grid.jl +++ b/src/grid.jl @@ -8,7 +8,7 @@ export Line, QuadraticLine, # Grid utilities export getcells, getncells, getnodes, getnnodes, getcelltype, - getcellset, getnodeset, getcoordinates, getcoordinates!, + getcellset, getnodeset, getfaceset, getcoordinates, getcoordinates!, getcellsets, getnodesets, getfacesets export addnodeset!, addcellset! @@ -34,19 +34,38 @@ end (::Type{Cell{dim}}){dim,N}(nodes::NTuple{N}) = Cell{dim,N}(nodes) # Typealias for commonly used cells + +to_interpolation(c::Cell) = to_interpolation(typeof(c)) + +getfacelist(c::Cell) = getfacelist(typeof(c)) +getfacelist(c::Type{<:Cell}) = getfacelist(to_interpolation(c)) + +nfaces(c::Cell) = n_faces(typeof(c)) +nfaces(c::Type{<:Cell}) = length(getfacelist(c)) + @compat const Line = Cell{1, 2} +to_interpolation(::Type{Line}) = Lagrange{1, RefCube, 1} @compat const QuadraticLine = Cell{1, 3} +to_interpolation(::Type{QuadraticLine}) = Lagrange{1, RefCube, 2} + @compat const Triangle = Cell{2, 3} +to_interpolation(::Type{Triangle}) = Lagrange{2, RefTetrahedron, 1} @compat const QuadraticTriangle = Cell{2, 6} +to_interpolation(::Type{QuadraticTriangle}) = Lagrange{2, RefTetrahedron, 2} + @compat const Quadrilateral = Cell{2, 4} +to_interpolation(::Type{Quadrilateral}) = Lagrange{2, RefCube, 1} @compat const QuadraticQuadrilateral = Cell{2, 9} +to_interpolation(::Type{QuadraticQuadrilateral}) = Lagrange{2, RefCube, 2} @compat const Tetrahedron = Cell{3, 4} +to_interpolation(::Type{Tetrahedron}) = Lagrange{3, RefTetrahedron, 1} @compat const QuadraticTetrahedron = Cell{3, 10} # Function interpolation for this doesn't exist in JuAFEM yet @compat const Hexahedron = Cell{3, 8} +to_interpolation(::Type{Hexahedron}) = Lagrange{3, RefCube, 1} @compat const QuadraticHexahedron = Cell{3, 20} # Function interpolation for this doesn't exist in JuAFEM yet """ @@ -74,18 +93,20 @@ A `Grid` is a collection of `Cells` and `Node`s which covers the computational d type Grid{dim, N, T <: Real} cells::Vector{Cell{dim, N}} nodes::Vector{Node{dim, T}} - boundary::Vector{CellFace} - cellsets::Dict{String, Vector{Int}} - nodesets::Dict{String, Vector{Int}} - facesets::Dict{String, Vector{Int}} + # Want fast lookup so use sets: + cellsets::Dict{String, Set{Int}} + nodesets::Dict{String, Set{Int}} + facesets::Dict{String, Set{Int}} + #boundaryfaces::Set{CellFace} end -function Grid{dim, N, T}(cells::Vector{Cell{dim, N}}, nodes::Vector{Node{dim, T}}; - boundary::Vector{CellFace} = CellFace[], - cellsets::Dict{String, Vector{Int}}=Dict{String, Vector{Int}}(), - nodesets::Dict{String, Vector{Int}}=Dict{String, Vector{Int}}(), - facesets::Dict{String, Vector{Int}}=Dict{String, Vector{Int}}()) - return Grid(cells, nodes, boundary, cellsets, nodesets, facesets) +function Grid{dim, N, T}(cells::Vector{Cell{dim, N}}, + nodes::Vector{Node{dim, T}}; + cellsets::Dict{String, Set{Int}}=Dict{String, Set{Int}}(), + nodesets::Dict{String, Set{Int}}=Dict{String, Set{Int}}(), + facesets::Dict{String, Set{Int}}=Dict{String, Set{Int}}(), + ) + return Grid(cells, nodes, cellsets, nodesets, facesets) end ########################## @@ -102,6 +123,8 @@ end @inline getnodes(grid::Grid, set::String) = grid.nodes[grid.nodesets[set]] @inline getnnodes(grid::Grid) = length(grid.nodes) +@inline getfaces(grid::Grid, set::String) = grid.cellfaces[grid.facesets[set]] +@inline getnfaces(grid::Grid) = getncells(grid) * n_faces_per_cell(grid) @inline getboundary(grid::Grid) = grid.boundary @inline getboundary(grid::Grid, v::Vector{Int}) = grid.boundary[v] diff --git a/src/iterators.jl b/src/iterators.jl index 95ff0e70ba..d2aa55b59a 100644 --- a/src/iterators.jl +++ b/src/iterators.jl @@ -1,6 +1,6 @@ # this file defines iterators used for looping over a grid -export CellIterator +export CellIterator, FaceIterator """ ```julia @@ -57,3 +57,82 @@ function reinit!{dim, N, T}(ci::CellIterator{dim, N, T}, i::Int) end @inline reinit!{dim, N, T}(cv::CellValues{dim, T}, ci::CellIterator{dim, N, T}) = reinit!(cv, ci.coords) + + +""" +```julia +FaceIterator(grid::Grid) +``` + +A `FaceIterator` is used to conveniently loop over all the faces in a grid. + +**Example:** + +```julia +for face in FaceIterator(grid) + coords = getcoordinates(face) # get the coordinates + nodes = getnodes(face) # get the node numbers + + reinit!(fv, face) # reinit! the FE-base with a FaceIterator +end +``` +""" + +immutable FaceIterator{dim, N, T} + grid::Grid{dim, N, T} + nodes_face::Vector{Int} + coords_cell::Vector{Vec{dim, T}} + coords_face::Vector{Vec{dim, T}} + current_face::Ref{Int} +end + +function FaceIterator{dim, N, T}(grid::Grid{dim, N, T}) + coords_cell = zeros(Vec{dim, T}, N) + n_vertices_face = length(getfacelist(grid)[1]) + nodes_face = zeros(Int, n_vertices_face) + coords_face = zeros(Vec{dim, T}, n_vertices_face) + return FaceIterator(grid, nodes_face, coords_cell, coords_face, Ref(1)) +end + +# iterator interface +# cell, face +Base.start(::FaceIterator) = (1, 1) +function Base.next{dim, N, T}(fi::FaceIterator{dim, N, T}, state) + cell, face = state + fi2 = reinit!(fi, cell, face) + fi.current_face[] = face + face += 1 + if face > n_faces_per_cell(fi.grid) + face = 1 + cell += 1 + end + (fi2, (cell, face)) +end + +Base.done(fi::FaceIterator, state) = state[1] > getncells(fi.grid) +Base.length(fi::FaceIterator) = getncells(fi.grid) * n_faces_per_cell(grid) + +Base.iteratorsize{dim, N, T}(::Type{FaceIterator{dim, N, T}}) = Base.HasLength() # this is default in Base +Base.iteratoreltype{dim, N, T}(::Type{FaceIterator{dim, N, T}}) = Base.HasEltype() # this is default in Base +Base.eltype{dim, N, T}(::Type{FaceIterator{dim, N, T}}) = FaceIterator{dim, N, T} + +# utility +@inline getnodes(fi::FaceIterator) = fi.nodes_face +@inline getcoordinates(fi::FaceIterator) = fi.coords_face + +function reinit!{dim, N, T}(fi::FaceIterator{dim, N, T}, cell::Int, face::Int) + nodeids = fi.grid.cells[cell].nodes + @inbounds for j = 1:N + nodeid = nodeids[j] + fi.coords_cell[j] = fi.grid.nodes[nodeid].x + end + + @inbounds for (j, v) in enumerate(getfacelist(fi.grid)[fi.current_face[]]) + nodeid = nodeids[v] + fi.coords_face[j] = fi.grid.nodes[nodeid].x + fi.nodes_face[j] = nodeid + end + return fi +end + +@inline reinit!{dim, N, T}(fv::FaceValues{dim, T}, fi::FaceIterator{dim, N, T}) = reinit!(fv, fi.coords_cell, fi.current_face[]) From d660d4864feeeceea75594f0f255dd3339cfd8a5 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Wed, 22 Mar 2017 09:37:11 +0100 Subject: [PATCH 09/44] move files update for file move --- src/{ => Export}/VTK.jl | 0 src/{ => FEValues}/cell_values.jl | 0 src/{ => FEValues}/common_values.jl | 5 + src/{ => FEValues}/face_integrals.jl | 0 src/{ => FEValues}/face_values.jl | 0 src/{ => Grid}/grid.jl | 108 +++++---- src/{ => Grid}/grid_generators.jl | 208 ++++++++++-------- src/JuAFEM.jl | 29 ++- .../gaussquad_tet_table.jl | 0 .../gaussquad_tri_table.jl | 0 src/{ => Quadrature}/quadrature.jl | 4 +- 11 files changed, 205 insertions(+), 149 deletions(-) rename src/{ => Export}/VTK.jl (100%) rename src/{ => FEValues}/cell_values.jl (100%) rename src/{ => FEValues}/common_values.jl (98%) rename src/{ => FEValues}/face_integrals.jl (100%) rename src/{ => FEValues}/face_values.jl (100%) rename src/{ => Grid}/grid.jl (68%) rename src/{ => Grid}/grid_generators.jl (51%) rename src/{quadrature_tables => Quadrature}/gaussquad_tet_table.jl (100%) rename src/{quadrature_tables => Quadrature}/gaussquad_tri_table.jl (100%) rename src/{ => Quadrature}/quadrature.jl (98%) diff --git a/src/VTK.jl b/src/Export/VTK.jl similarity index 100% rename from src/VTK.jl rename to src/Export/VTK.jl diff --git a/src/cell_values.jl b/src/FEValues/cell_values.jl similarity index 100% rename from src/cell_values.jl rename to src/FEValues/cell_values.jl diff --git a/src/common_values.jl b/src/FEValues/common_values.jl similarity index 98% rename from src/common_values.jl rename to src/FEValues/common_values.jl index 061dfb81d5..a5dc528455 100644 --- a/src/common_values.jl +++ b/src/FEValues/common_values.jl @@ -1,4 +1,9 @@ # Common methods for all `Values` objects + +@compat const ScalarValues{dim, T, FS, GS} = Union{CellScalarValues{dim, T, FS, GS}, FaceScalarValues{dim, T, FS, GS}} +@compat const VectorValues{dim, T, FS, GS} = Union{CellVectorValues{dim, T, FS, GS}, FaceVectorValues{dim, T, FS, GS}} + + """ Updates a `CellValues`/`FaceValues` object for a cell or face. diff --git a/src/face_integrals.jl b/src/FEValues/face_integrals.jl similarity index 100% rename from src/face_integrals.jl rename to src/FEValues/face_integrals.jl diff --git a/src/face_values.jl b/src/FEValues/face_values.jl similarity index 100% rename from src/face_values.jl rename to src/FEValues/face_values.jl diff --git a/src/grid.jl b/src/Grid/grid.jl similarity index 68% rename from src/grid.jl rename to src/Grid/grid.jl index 850e9466ac..aa33bf8baf 100644 --- a/src/grid.jl +++ b/src/Grid/grid.jl @@ -1,5 +1,5 @@ # Grid types -export Node, Cell, CellIndex, CellFace, CellFaceIndex, Grid +export Node, Cell, CellIndex, CellFace, FaceIndex, Grid # Cell type alias export Line, QuadraticLine, @@ -9,7 +9,7 @@ export Line, QuadraticLine, # Grid utilities export getcells, getncells, getnodes, getnnodes, getcelltype, getcellset, getnodeset, getfaceset, getcoordinates, getcoordinates!, - getcellsets, getnodesets, getfacesets + getcellsets, getnodesets, getfacesets, onboundary export addnodeset!, addcellset! @@ -25,86 +25,97 @@ end Node{dim, T}(x::NTuple{dim, T}) = Node(Vec{dim, T}(x)) getcoordinates(n::Node) = n.x +#= +#A bit redundant but perhaps we want to put more in here: +immutable Face + onboundary::Bool +end +onboundary(f::Face) = f.onboundary +Face() = Face(false) +=# + """ A `Cell` is a sub-domain defined by a collection of `Node`s as it's vertices. """ -immutable Cell{dim, N} +immutable Cell{dim, N, M} nodes::NTuple{N, Int} + onboundary::NTuple{M, Bool} end -(::Type{Cell{dim}}){dim,N}(nodes::NTuple{N}) = Cell{dim,N}(nodes) + +onboundary(c::Cell, face::Int) = c.onboundary[face] + +(::Type{Cell{dim, N, M}}){dim, N, M}(nodes::NTuple{N}) = Cell{dim,N,M}(nodes, ntuple(i->false, Val{M})) +(::Type{Cell{dim, N, M}}){dim, N, M}(nodes::NTuple{N}, arr::AbstractArray{Bool}) = Cell{dim,N,M}(nodes, ntuple(i -> arr[i], Val{M})) + + +nfaces(c::Cell) = nfaces(typeof(c)) +nfaces{dim, N, M}(::Type{Cell{dim, N, M}}) = M # Typealias for commonly used cells to_interpolation(c::Cell) = to_interpolation(typeof(c)) getfacelist(c::Cell) = getfacelist(typeof(c)) -getfacelist(c::Type{<:Cell}) = getfacelist(to_interpolation(c)) +@compat getfacelist(c::Type{<:Cell}) = getfacelist(to_interpolation(c)) -nfaces(c::Cell) = n_faces(typeof(c)) -nfaces(c::Type{<:Cell}) = length(getfacelist(c)) -@compat const Line = Cell{1, 2} + +@compat const Line = Cell{1, 2, 2} to_interpolation(::Type{Line}) = Lagrange{1, RefCube, 1} -@compat const QuadraticLine = Cell{1, 3} +@compat const QuadraticLine = Cell{1, 3, 2} to_interpolation(::Type{QuadraticLine}) = Lagrange{1, RefCube, 2} -@compat const Triangle = Cell{2, 3} +@compat const Triangle = Cell{2, 3, 3} to_interpolation(::Type{Triangle}) = Lagrange{2, RefTetrahedron, 1} -@compat const QuadraticTriangle = Cell{2, 6} +@compat const QuadraticTriangle = Cell{2, 6, 3} to_interpolation(::Type{QuadraticTriangle}) = Lagrange{2, RefTetrahedron, 2} -@compat const Quadrilateral = Cell{2, 4} +@compat const Quadrilateral = Cell{2, 4, 4} to_interpolation(::Type{Quadrilateral}) = Lagrange{2, RefCube, 1} -@compat const QuadraticQuadrilateral = Cell{2, 9} +@compat const QuadraticQuadrilateral = Cell{2, 9, 4} to_interpolation(::Type{QuadraticQuadrilateral}) = Lagrange{2, RefCube, 2} -@compat const Tetrahedron = Cell{3, 4} +@compat const Tetrahedron = Cell{3, 4, 4} to_interpolation(::Type{Tetrahedron}) = Lagrange{3, RefTetrahedron, 1} -@compat const QuadraticTetrahedron = Cell{3, 10} # Function interpolation for this doesn't exist in JuAFEM yet +@compat const QuadraticTetrahedron = Cell{3, 10, 4} # Function interpolation for this doesn't exist in JuAFEM yet -@compat const Hexahedron = Cell{3, 8} +@compat const Hexahedron = Cell{3, 8, 6} to_interpolation(::Type{Hexahedron}) = Lagrange{3, RefCube, 1} -@compat const QuadraticHexahedron = Cell{3, 20} # Function interpolation for this doesn't exist in JuAFEM yet +@compat const QuadraticHexahedron = Cell{3, 20, 6} # Function interpolation for this doesn't exist in JuAFEM yet """ -A `CellIndex` is returned when looping over the cells in a grid. +A `CellIndex` wraps an Int and corresponds to a cell with that number in the mesh """ immutable CellIndex idx::Int end """ -A `CellFace` is a sub-domain of the face defined by the cell and the side. +A `FaceIndex` wraps an (Int, Int) and defines a face by pointing to a (cell, face). """ -immutable CellFace +immutable FaceIndex idx::Tuple{Int, Int} # cell and side end """ -A `CellFaceIndex` is returned when looping over cell faces of the grid. -""" -@compat const CellFaceIndex = CellFace - -""" -A `Grid` is a collection of `Cells` and `Node`s which covers the computational domain. +A `Grid` is a collection of `Cells` and `Node`s which covers the computational domain, together with Sets of cells, nodes and faces. """ -type Grid{dim, N, T <: Real} - cells::Vector{Cell{dim, N}} +type Grid{dim, N, T <: Real, M} + cells::Vector{Cell{dim, N, M}} nodes::Vector{Node{dim, T}} - # Want fast lookup so use sets: + # Sets cellsets::Dict{String, Set{Int}} nodesets::Dict{String, Set{Int}} - facesets::Dict{String, Set{Int}} - #boundaryfaces::Set{CellFace} + facesets::Dict{String, Set{Tuple{Int, Int}}} end -function Grid{dim, N, T}(cells::Vector{Cell{dim, N}}, +function Grid{dim, N, M, T}(cells::Vector{Cell{dim, N, M}}, nodes::Vector{Node{dim, T}}; cellsets::Dict{String, Set{Int}}=Dict{String, Set{Int}}(), nodesets::Dict{String, Set{Int}}=Dict{String, Set{Int}}(), - facesets::Dict{String, Set{Int}}=Dict{String, Set{Int}}(), + facesets::Dict{String, Set{Tuple{Int, Int}}}=Dict{String, Set{Tuple{Int, Int}}}(), ) return Grid(cells, nodes, cellsets, nodesets, facesets) end @@ -123,11 +134,6 @@ end @inline getnodes(grid::Grid, set::String) = grid.nodes[grid.nodesets[set]] @inline getnnodes(grid::Grid) = length(grid.nodes) -@inline getfaces(grid::Grid, set::String) = grid.cellfaces[grid.facesets[set]] -@inline getnfaces(grid::Grid) = getncells(grid) * n_faces_per_cell(grid) -@inline getboundary(grid::Grid) = grid.boundary -@inline getboundary(grid::Grid, v::Vector{Int}) = grid.boundary[v] - @inline getcellset(grid::Grid, set::String) = grid.cellsets[set] @inline getcellsets(grid::Grid) = grid.cellsets @@ -160,19 +166,25 @@ function addcellset!(grid::Grid, name::String, f::Function) nothing end -function addnodeset!(grid::Grid, name::String, nodeid::Vector{Int}) - haskey(grid.nodesets, name) && throw(ArgumentError("There already exists a nodeset with the name: $name")) - grid.nodesets[name] = copy(nodeid) - nothing + +_check_nodesetname(grid, name) = haskey(grid.nodesets, name) && throw(ArgumentError("There already exists a nodeset with the name: $name")) + + +addnodeset!(grid::Grid, name::String, nodeid::Vector{Int}) = addnodeset!(grid, name, Set{Int}(nodeid)) +function addnodeset!(grid::Grid, name::String, nodeid::Set{Int}) + _check_nodesetname(grid, name) + grid.nodesets[name] = nodeid + grid end function addnodeset!(grid::Grid, name::String, f::Function) - nodes = Int[] + _check_nodesetname(grid, name) + nodes = Set{Int}() for (i, n) in enumerate(getnodes(grid)) f(n.x) && push!(nodes, i) end grid.nodesets[name] = nodes - nothing + grid end """ @@ -180,7 +192,7 @@ Updates the coordinate vector for a cell getcoordinates!(x::Vector{Vec}, grid::Grid, cell::Int) getcoordinates!(x::Vector{Vec}, grid::Grid, cell::CellIndex) - getcoordinates!(x::Vector{Vec}, grid::Grid, face::CellFaceIndex) + getcoordinates!(x::Vector{Vec}, grid::Grid, face::FaceIndex) ** Arguments ** @@ -200,14 +212,14 @@ Updates the coordinate vector for a cell end end @inline getcoordinates!{dim, T, N}(x::Vector{Vec{dim, T}}, grid::Grid{dim, N, T}, cell::CellIndex) = getcoordinates!(x, grid, cell.idx) -@inline getcoordinates!{dim, T, N}(x::Vector{Vec{dim, T}}, grid::Grid{dim, N, T}, face::CellFaceIndex) = getcoordinates!(x, grid, face.idx[1]) +@inline getcoordinates!{dim, T, N}(x::Vector{Vec{dim, T}}, grid::Grid{dim, N, T}, face::FaceIndex) = getcoordinates!(x, grid, face.idx[1]) """ Returns a vector with the coordinates of the vertices of a cell getcoordinates(grid::Grid, cell::Int) getcoordinates(grid::Grid, cell::CellIndex) - getcoordinates(grid::Grid, face::CellFaceIndex) + getcoordinates(grid::Grid, face::FaceIndex) ** Arguments ** @@ -224,7 +236,7 @@ Returns a vector with the coordinates of the vertices of a cell return [grid.nodes[i].x for i in nodeidx]::Vector{Vec{dim, T}} end @inline getcoordinates(grid::Grid, cell::CellIndex) = getcoordinates(grid, cell.idx) -@inline getcoordinates(grid::Grid, face::CellFaceIndex) = getcoordinates(grid, face.idx[1]) +@inline getcoordinates(grid::Grid, face::FaceIndex) = getcoordinates(grid, face.idx[1]) # Iterate over cell vector Base.start{dim, N}(c::Vector{Cell{dim, N}}) = 1 diff --git a/src/grid_generators.jl b/src/Grid/grid_generators.jl similarity index 51% rename from src/grid_generators.jl rename to src/Grid/grid_generators.jl index 94e19901cb..e9d9c6dd4a 100644 --- a/src/grid_generators.jl +++ b/src/Grid/grid_generators.jl @@ -1,4 +1,21 @@ export generate_grid + +# Goes through `boundary` and updates the onboundary values for the +# cells that actually are on the boundary +function _apply_onboundary!{T}(::Type{T}, cells, boundary) + cells_new = T[] + isboundary = zeros(Bool, nfaces(T)) + for faceindex in boundary + fill!(isboundary, false) + cell, face = faceindex + c = cells[cell] + for i in 1:nfaces(T) + isboundary[i] = onboundary(c, i) | (face == i) + end + cells[cell] = T(c.nodes, isboundary) + end +end + """ `Grid` generator for a rectangle in 1, 2 and 3 dimensions. @@ -28,19 +45,23 @@ function generate_grid{T}(::Type{Line}, nel::NTuple{1, Int}, left::Vec{1, T}=Vec end # Generate cells + cells = Line[] for i in 1:nel_x push!(cells, Line((i, i+1))) end + # Cell faces - boundary = CellFace[CellFace((1, 1)), - CellFace((nel_x, 2))] + boundary = Vector([(1, 1), + (nel_x, 2)]) + + _apply_onboundary!(Line, cells, boundary) # Cell face sets - facesets = Dict("left" => [1], - "right" => [2]) - return Grid(cells, nodes, boundary=boundary, facesets=facesets) + facesets = Dict("left" => Set{Tuple{Int, Int}}([boundary[1]]), + "right" => Set{Tuple{Int, Int}}([boundary[2]])) + return Grid(cells, nodes, facesets=facesets) end # QuadraticLine @@ -62,13 +83,15 @@ function generate_grid{T}(::Type{QuadraticLine}, nel::NTuple{1, Int}, left::Vec{ end # Cell faces - boundary = CellFace[CellFace((1, 1)), - CellFace((nel_x, 2))] + boundary = Tuple{Int, Int}[(1, 1), + (nel_x, 2)] + + _apply_onboundary!(QuadraticLine, cells, boundary) # Cell face sets - facesets = Dict("left" => [1], - "right" => [2]) - return Grid(cells, nodes, boundary=boundary, facesets=facesets) + facesets = Dict("left" => Set{Tuple{Int, Int}}([boundary[1]]), + "right" => Set{Tuple{Int, Int}}([boundary[2]])) + return Grid(cells, nodes, facesets=facesets) end # Quadrilateral @@ -94,20 +117,22 @@ function generate_grid{T}(::Type{Quadrilateral}, nel::NTuple{2, Int}, left::Vec{ # Cell faces cell_array = reshape(collect(1:nel_tot),(nel_x, nel_y)) - boundary = CellFace[[CellFace((cl, 1)) for cl in cell_array[:,1]]; - [CellFace((cl, 2)) for cl in cell_array[end,:]]; - [CellFace((cl, 3)) for cl in cell_array[:,end]]; - [CellFace((cl, 4)) for cl in cell_array[1,:]]] + boundary = Tuple{Int, Int}[[(cl, 1) for cl in cell_array[:,1]]; + [(cl, 2) for cl in cell_array[end,:]]; + [(cl, 3) for cl in cell_array[:,end]]; + [(cl, 4) for cl in cell_array[1,:]]] + + _apply_onboundary!(Quadrilateral, cells, boundary) # Cell face sets offset = 0 - facesets = Dict{String, Vector{Int}}() - facesets["bottom"] = (1:length(cell_array[:,1])) + offset; offset += length(cell_array[:,1]) - facesets["right"] = (1:length(cell_array[end,:])) + offset; offset += length(cell_array[end,:]) - facesets["top"] = (1:length(cell_array[:,end])) + offset; offset += length(cell_array[:,end]) - facesets["left"] = (1:length(cell_array[1,:])) + offset; offset += length(cell_array[1,:]) + facesets = Dict{String, Set{Tuple{Int,Int}}}() + facesets["bottom"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[:,1]) + offset]); offset += length(cell_array[:,1]) + facesets["right"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[end,:]) + offset]); offset += length(cell_array[end,:]) + facesets["top"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[:,end]) + offset]); offset += length(cell_array[:,end]) + facesets["left"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[1,:]) + offset]); offset += length(cell_array[1,:]) - return Grid(cells, nodes, boundary=boundary, facesets=facesets) + return Grid(cells, nodes, facesets=facesets) end # QuadraticQuadrilateral @@ -135,20 +160,22 @@ function generate_grid{T}(::Type{QuadraticQuadrilateral}, nel::NTuple{2, Int}, l # Cell faces cell_array = reshape(collect(1:nel_tot),(nel_x, nel_y)) - boundary = CellFace[[CellFace((cl, 1)) for cl in cell_array[:,1]]; - [CellFace((cl, 2)) for cl in cell_array[end,:]]; - [CellFace((cl, 3)) for cl in cell_array[:,end]]; - [CellFace((cl, 4)) for cl in cell_array[1,:]]] + boundary = Tuple{Int, Int}[[(cl, 1) for cl in cell_array[:,1]]; + [(cl, 2) for cl in cell_array[end,:]]; + [(cl, 3) for cl in cell_array[:,end]]; + [(cl, 4) for cl in cell_array[1,:]]] + + _apply_onboundary!(QuadraticQuadrilateral, cells, boundary) # Cell face sets offset = 0 - facesets = Dict{String, Vector{Int}}() - facesets["bottom"] = (1:length(cell_array[:,1])) + offset; offset += length(cell_array[:,1]) - facesets["right"] = (1:length(cell_array[end,:])) + offset; offset += length(cell_array[end,:]) - facesets["top"] = (1:length(cell_array[:,end])) + offset; offset += length(cell_array[:,end]) - facesets["left"] = (1:length(cell_array[1,:])) + offset; offset += length(cell_array[1,:]) + facesets = Dict{String, Set{Tuple{Int,Int}}}() + facesets["bottom"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[:,1]) + offset]); offset += length(cell_array[:,1]) + facesets["right"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[end,:]) + offset]); offset += length(cell_array[end,:]) + facesets["top"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[:,end]) + offset]); offset += length(cell_array[:,end]) + facesets["left"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[1,:]) + offset]); offset += length(cell_array[1,:]) - return Grid(cells, nodes, boundary=boundary, facesets=facesets) + return Grid(cells, nodes, facesets=facesets) end # Hexahedron @@ -176,24 +203,26 @@ function generate_grid{T}(::Type{Hexahedron}, nel::NTuple{3, Int}, left::Vec{3, # Cell faces cell_array = reshape(collect(1:nel_tot),(nel_x, nel_y, nel_z)) - boundary = CellFace[[CellFace((cl, 1)) for cl in cell_array[:,:,1][:]]; - [CellFace((cl, 2)) for cl in cell_array[:,1,:][:]]; - [CellFace((cl, 3)) for cl in cell_array[end,:,:][:]]; - [CellFace((cl, 4)) for cl in cell_array[:,end,:][:]]; - [CellFace((cl, 5)) for cl in cell_array[1,:,:][:]]; - [CellFace((cl, 6)) for cl in cell_array[:,:,end][:]]] + boundary = Tuple{Int, Int}[[(cl, 1) for cl in cell_array[:,:,1][:]]; + [(cl, 2) for cl in cell_array[:,1,:][:]]; + [(cl, 3) for cl in cell_array[end,:,:][:]]; + [(cl, 4) for cl in cell_array[:,end,:][:]]; + [(cl, 5) for cl in cell_array[1,:,:][:]]; + [(cl, 6) for cl in cell_array[:,:,end][:]]] + + _apply_onboundary!(QuadraticQuadrilateral, cells, boundary) # Cell face sets offset = 0 - facesets = Dict{String, Vector{Int}}() - facesets["bottom"] = (1:length(cell_array[:,:,1][:])) + offset; offset += length(cell_array[:,:,1][:]) - facesets["front"] = (1:length(cell_array[:,1,:][:])) + offset; offset += length(cell_array[:,1,:][:]) - facesets["right"] = (1:length(cell_array[end,:,:][:])) + offset; offset += length(cell_array[end,:,:][:]) - facesets["back"] = (1:length(cell_array[:,end,:][:])) + offset; offset += length(cell_array[:,end,:][:]) - facesets["left"] = (1:length(cell_array[1,:,:][:])) + offset; offset += length(cell_array[1,:,:][:]) - facesets["top"] = (1:length(cell_array[:,:,end][:])) + offset; offset += length(cell_array[:,:,end][:]) - - return Grid(cells, nodes, boundary=boundary, facesets=facesets) + facesets = Dict{String, Set{Tuple{Int,Int}}}() + facesets["bottom"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[:,:,1][:]) + offset]); offset += length(cell_array[:,:,1][:]) + facesets["front"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[:,1,:][:]) + offset]); offset += length(cell_array[:,1,:][:]) + facesets["right"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[end,:,:][:]) + offset]); offset += length(cell_array[end,:,:][:]) + facesets["back"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[:,end,:][:]) + offset]); offset += length(cell_array[:,end,:][:]) + facesets["left"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[1,:,:][:]) + offset]); offset += length(cell_array[1,:,:][:]) + facesets["top"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[:,:,end][:]) + offset]); offset += length(cell_array[:,:,end][:]) + + return Grid(cells, nodes, facesets=facesets) end # Triangle @@ -220,20 +249,22 @@ function generate_grid{T}(::Type{Triangle}, nel::NTuple{2, Int}, left::Vec{2, T} # Cell faces cell_array = reshape(collect(1:nel_tot),(2, nel_x, nel_y)) - boundary = CellFace[[CellFace((cl, 1)) for cl in cell_array[1,:,1]]; - [CellFace((cl, 1)) for cl in cell_array[2,end,:]]; - [CellFace((cl, 2)) for cl in cell_array[2,:,end]]; - [CellFace((cl, 3)) for cl in cell_array[1,1,:]]] + boundary = Tuple{Int, Int}[[(cl, 1) for cl in cell_array[1,:,1]]; + [(cl, 1) for cl in cell_array[2,end,:]]; + [(cl, 2) for cl in cell_array[2,:,end]]; + [(cl, 3) for cl in cell_array[1,1,:]]] + + _apply_onboundary!(Triangle, cells, boundary) # Cell face sets offset = 0 - facesets = Dict{String, Vector{Int}}() - facesets["bottom"] = (1:length(cell_array[1,:,1])) + offset; offset += length(cell_array[1,:,1]) - facesets["right"] = (1:length(cell_array[2,end,:])) + offset; offset += length(cell_array[2,end,:]) - facesets["top"] = (1:length(cell_array[2,:,end])) + offset; offset += length(cell_array[2,:,end]) - facesets["left"] = (1:length(cell_array[1,1,:])) + offset; offset += length(cell_array[1,1,:]) + facesets = Dict{String, Set{Tuple{Int,Int}}}() + facesets["bottom"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[1,:,1]) + offset]); offset += length(cell_array[1,:,1]) + facesets["right"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[2,end,:]) + offset]); offset += length(cell_array[2,end,:]) + facesets["top"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[2,:,end]) + offset]); offset += length(cell_array[2,:,end]) + facesets["left"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[1,1,:]) + offset]); offset += length(cell_array[1,1,:]) - return Grid(cells, nodes, boundary=boundary, facesets=facesets) + return Grid(cells, nodes, facesets=facesets) end # QuadraticTriangle @@ -262,20 +293,22 @@ function generate_grid{T}(::Type{QuadraticTriangle}, nel::NTuple{2, Int}, left:: # Cell faces cell_array = reshape(collect(1:nel_tot),(2, nel_x, nel_y)) - boundary = CellFace[[CellFace((cl, 1)) for cl in cell_array[1,:,1]]; - [CellFace((cl, 1)) for cl in cell_array[2,end,:]]; - [CellFace((cl, 2)) for cl in cell_array[2,:,end]]; - [CellFace((cl, 3)) for cl in cell_array[1,1,:]]] + boundary = Tuple{Int, Int}[[(cl, 1) for cl in cell_array[1,:,1]]; + [(cl, 1) for cl in cell_array[2,end,:]]; + [(cl, 2) for cl in cell_array[2,:,end]]; + [(cl, 3) for cl in cell_array[1,1,:]]] + + _apply_onboundary!(QuadraticTriangle, cells, boundary) # Cell face sets offset = 0 - facesets = Dict{String, Vector{Int}}() - facesets["bottom"] = (1:length(cell_array[1,:,1])) + offset; offset += length(cell_array[1,:,1]) - facesets["right"] = (1:length(cell_array[2,end,:])) + offset; offset += length(cell_array[2,end,:]) - facesets["top"] = (1:length(cell_array[2,:,end])) + offset; offset += length(cell_array[2,:,end]) - facesets["left"] = (1:length(cell_array[1,1,:])) + offset; offset += length(cell_array[1,1,:]) + facesets = Dict{String, Set{Tuple{Int,Int}}}() + facesets["bottom"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[1,:,1]) + offset]); offset += length(cell_array[1,:,1]) + facesets["right"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[2,end,:]) + offset]); offset += length(cell_array[2,end,:]) + facesets["top"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[2,:,end]) + offset]); offset += length(cell_array[2,:,end]) + facesets["left"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[1,1,:]) + offset]); offset += length(cell_array[1,1,:]) - return Grid(cells, nodes, boundary=boundary, facesets=facesets) + return Grid(cells, nodes, facesets=facesets) end # Tetrahedron @@ -305,31 +338,32 @@ function generate_grid{T}(::Type{Tetrahedron}, nel::NTuple{3, Int}, left::Vec{3, push!(cells, Tetrahedron((tmp[2], tmp[5], tmp[6], tmp[7]))) push!(cells, Tetrahedron((tmp[4], tmp[5], tmp[7], tmp[8]))) end - # Cell faces cell_array = reshape(collect(1:nel_tot),(5, nel_x, nel_y, nel_z)) - boundary = CellFace[[CellFace((cl, 1)) for cl in cell_array[1,:,:,1][:]]; - [CellFace((cl, 1)) for cl in cell_array[2,:,:,1][:]]; - [CellFace((cl, 2)) for cl in cell_array[1,:,1,:][:]]; - [CellFace((cl, 1)) for cl in cell_array[4,:,1,:][:]]; - [CellFace((cl, 2)) for cl in cell_array[2,end,:,:][:]]; - [CellFace((cl, 4)) for cl in cell_array[4,end,:,:][:]]; - [CellFace((cl, 3)) for cl in cell_array[2,:,end,:][:]]; - [CellFace((cl, 4)) for cl in cell_array[5,:,end,:][:]]; - [CellFace((cl, 4)) for cl in cell_array[1,1,:,:][:]]; - [CellFace((cl, 2)) for cl in cell_array[5,1,:,:][:]]; - [CellFace((cl, 3)) for cl in cell_array[4,:,:,end][:]]; - [CellFace((cl, 3)) for cl in cell_array[5,:,:,end][:]]] + boundary = Tuple{Int, Int}[[(cl, 1) for cl in cell_array[1,:,:,1][:]]; + [(cl, 1) for cl in cell_array[2,:,:,1][:]]; + [(cl, 2) for cl in cell_array[1,:,1,:][:]]; + [(cl, 1) for cl in cell_array[4,:,1,:][:]]; + [(cl, 2) for cl in cell_array[2,end,:,:][:]]; + [(cl, 4) for cl in cell_array[4,end,:,:][:]]; + [(cl, 3) for cl in cell_array[2,:,end,:][:]]; + [(cl, 4) for cl in cell_array[5,:,end,:][:]]; + [(cl, 4) for cl in cell_array[1,1,:,:][:]]; + [(cl, 2) for cl in cell_array[5,1,:,:][:]]; + [(cl, 3) for cl in cell_array[4,:,:,end][:]]; + [(cl, 3) for cl in cell_array[5,:,:,end][:]]] + + _apply_onboundary!(Tetrahedron, cells, boundary) # Cell face sets offset = 0 - facesets = Dict{String, Vector{Int}}() - facesets["bottom"] = (1:length([cell_array[1,:,:,1][:]; cell_array[2,:,:,1][:]])) + offset; offset += length([cell_array[1,:,:,1][:]; cell_array[2,:,:,1][:]]) - facesets["front"] = (1:length([cell_array[1,:,1,:][:]; cell_array[4,:,1,:][:]])) + offset; offset += length([cell_array[1,:,1,:][:]; cell_array[4,:,1,:][:]]) - facesets["right"] = (1:length([cell_array[2,end,:,:][:]; cell_array[4,end,:,:][:]])) + offset; offset += length([cell_array[2,end,:,:][:]; cell_array[4,end,:,:][:]]) - facesets["back"] = (1:length([cell_array[2,:,end,:][:]; cell_array[5,:,end,:][:]])) + offset; offset += length([cell_array[2,:,end,:][:]; cell_array[5,:,end,:][:]]) - facesets["left"] = (1:length([cell_array[1,1,:,:][:]; cell_array[5,1,:,:][:]])) + offset; offset += length([cell_array[1,1,:,:][:]; cell_array[5,1,:,:][:]]) - facesets["top"] = (1:length([cell_array[4,:,:,end][:]; cell_array[5,:,:,end][:]])) + offset; offset += length([cell_array[4,:,:,end][:]; cell_array[5,:,:,end][:]]) - - return Grid(cells, nodes, boundary=boundary, facesets=facesets) + facesets = Dict{String, Set{Tuple{Int,Int}}}() + facesets["bottom"] = Set{Tuple{Int, Int}}(boundary[1:length([cell_array[1,:,:,1][:]; cell_array[2,:,:,1][:]]) + offset]); offset += length([cell_array[1,:,:,1][:]; cell_array[2,:,:,1][:]]) + facesets["front"] = Set{Tuple{Int, Int}}(boundary[1:length([cell_array[1,:,1,:][:]; cell_array[4,:,1,:][:]]) + offset]); offset += length([cell_array[1,:,1,:][:]; cell_array[4,:,1,:][:]]) + facesets["right"] = Set{Tuple{Int, Int}}(boundary[1:length([cell_array[2,end,:,:][:]; cell_array[4,end,:,:][:]]) + offset]); offset += length([cell_array[2,end,:,:][:]; cell_array[4,end,:,:][:]]) + facesets["back"] = Set{Tuple{Int, Int}}(boundary[1:length([cell_array[2,:,end,:][:]; cell_array[5,:,end,:][:]]) + offset]); offset += length([cell_array[2,:,end,:][:]; cell_array[5,:,end,:][:]]) + facesets["left"] = Set{Tuple{Int, Int}}(boundary[1:length([cell_array[1,1,:,:][:]; cell_array[5,1,:,:][:]]) + offset]); offset += length([cell_array[1,1,:,:][:]; cell_array[5,1,:,:][:]]) + facesets["top"] = Set{Tuple{Int, Int}}(boundary[1:length([cell_array[4,:,:,end][:]; cell_array[5,:,:,end][:]]) + offset]); offset += length([cell_array[4,:,:,end][:]; cell_array[5,:,:,end][:]]) + + return Grid(cells, nodes, facesets=facesets) end diff --git a/src/JuAFEM.jl b/src/JuAFEM.jl index 2d0817eb8e..724ee007ee 100644 --- a/src/JuAFEM.jl +++ b/src/JuAFEM.jl @@ -44,22 +44,27 @@ Abstract type which has `CellValues` and `FaceValues` as subtypes @compat abstract type CellValues{dim, T, FS, GS} <: Values{dim, T, FS, GS} end @compat abstract type FaceValues{dim, T, FS, GS} <: Values{dim, T, FS, GS} end - include("interpolations.jl") -include("quadrature.jl") -include("cell_values.jl") -include("face_values.jl") -@compat const ScalarValues{dim, T, FS, GS} = Union{CellScalarValues{dim, T, FS, GS}, FaceScalarValues{dim, T, FS, GS}} -@compat const VectorValues{dim, T, FS, GS} = Union{CellVectorValues{dim, T, FS, GS}, FaceVectorValues{dim, T, FS, GS}} +# Quadrature +include(joinpath("Quadrature", "quadrature.jl")) -include("common_values.jl") -include("assembler.jl") -include("face_integrals.jl") -include("grid.jl") -include("grid_generators.jl") -include("VTK.jl") +# FEValues +include(joinpath("FEValues","cell_values.jl")) +include(joinpath("FEValues","face_values.jl")) +include(joinpath("FEValues","common_values.jl")) +include(joinpath("FEValues","face_integrals.jl")) + +# Grid +include(joinpath("Grid", "grid.jl")) +include(joinpath("Grid", "grid_generators.jl")) + +# Export +include(joinpath("Export", "VTK.jl")) + +# Other include("iterators.jl") +include("assembler.jl") include("deprecations.jl") end # module diff --git a/src/quadrature_tables/gaussquad_tet_table.jl b/src/Quadrature/gaussquad_tet_table.jl similarity index 100% rename from src/quadrature_tables/gaussquad_tet_table.jl rename to src/Quadrature/gaussquad_tet_table.jl diff --git a/src/quadrature_tables/gaussquad_tri_table.jl b/src/Quadrature/gaussquad_tri_table.jl similarity index 100% rename from src/quadrature_tables/gaussquad_tri_table.jl rename to src/Quadrature/gaussquad_tri_table.jl diff --git a/src/quadrature.jl b/src/Quadrature/quadrature.jl similarity index 98% rename from src/quadrature.jl rename to src/Quadrature/quadrature.jl index 0e95a97aea..d640d56e14 100644 --- a/src/quadrature.jl +++ b/src/Quadrature/quadrature.jl @@ -1,5 +1,5 @@ -include("quadrature_tables/gaussquad_tri_table.jl") -include("quadrature_tables/gaussquad_tet_table.jl") +include("gaussquad_tri_table.jl") +include("gaussquad_tet_table.jl") import Base.Cartesian: @nloops, @nref, @ntuple, @nexprs From 33da0669d9408db7cc1bdbbb1fa1944f758e21a5 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Wed, 22 Mar 2017 09:51:18 +0100 Subject: [PATCH 10/44] use our names cells for vtk export --- src/Export/VTK.jl | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/Export/VTK.jl b/src/Export/VTK.jl index 98bbe1965e..1b8a23c775 100644 --- a/src/Export/VTK.jl +++ b/src/Export/VTK.jl @@ -91,17 +91,15 @@ getVTKtype(::Serendipity{2, RefCube, 2}) = VTKCellTypes.VTK_QUADRATIC_QUAD getVTKtype(::Lagrange{3, RefCube, 1}) = VTKCellTypes.VTK_HEXAHEDRON getVTKtype(::Lagrange{3, RefTetrahedron, 1}) = VTKCellTypes.VTK_TETRA -getVTKtype(::Type{Cell{1,2}}) = VTKCellTypes.VTK_LINE -getVTKtype(::Type{Cell{1,3}}) = VTKCellTypes.VTK_QUADRATIC_EDGE - -getVTKtype(::Type{Cell{2,4}}) = VTKCellTypes.VTK_QUAD -getVTKtype(::Type{Cell{2,9}}) = VTKCellTypes.VTK_BIQUADRATIC_QUAD -getVTKtype(::Type{Cell{2,3}}) = VTKCellTypes.VTK_TRIANGLE -getVTKtype(::Type{Cell{2,6}}) = VTKCellTypes.VTK_QUADRATIC_TRIANGLE -getVTKtype(::Type{Cell{2,8}}) = VTKCellTypes.VTK_QUADRATIC_QUAD - -getVTKtype(::Type{Cell{3,8}}) = VTKCellTypes.VTK_HEXAHEDRON -getVTKtype(::Type{Cell{3,4}}) = VTKCellTypes.VTK_TETRA +getVTKtype(::Type{Line}) = VTKCellTypes.VTK_LINE +getVTKtype(::Type{QuadraticLine}) = VTKCellTypes.VTK_QUADRATIC_EDGE +getVTKtype(::Type{Quadrilateral}) = VTKCellTypes.VTK_QUAD +# getVTKtype(::Type{QuadraticQuadrilateral}) = VTKCellTypes.VTK_BIQUADRATIC_QUAD +getVTKtype(::Type{Triangle}) = VTKCellTypes.VTK_TRIANGLE +getVTKtype(::Type{QuadraticTriangle}) = VTKCellTypes.VTK_QUADRATIC_TRIANGLE +getVTKtype(::Type{QuadraticQuadrilateral}) = VTKCellTypes.VTK_QUADRATIC_QUAD +getVTKtype(::Type{Hexahedron}) = VTKCellTypes.VTK_HEXAHEDRON +getVTKtype(::Type{Tetrahedron}) = VTKCellTypes.VTK_TETRA function vtk_grid{dim, N, T}(filename::AbstractString, grid::Grid{dim, N, T}) From ce33724955199d1faa4917dc2cc150e10b117a2b Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Wed, 22 Mar 2017 09:52:14 +0100 Subject: [PATCH 11/44] update iterator to hold the current cell and the M parameterization --- src/iterators.jl | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/src/iterators.jl b/src/iterators.jl index d2aa55b59a..9512222db9 100644 --- a/src/iterators.jl +++ b/src/iterators.jl @@ -20,34 +20,40 @@ for cell in CellIterator(grid) end ``` """ -immutable CellIterator{dim, N, T} - grid::Grid{dim, N, T} +immutable CellIterator{dim, N, T, M} + grid::Grid{dim, N, T, M} nodes::Vector{Int} coords::Vector{Vec{dim, T}} + current_cell::Ref{Cell{dim, N, M}} end -function CellIterator{dim, N, T}(grid::Grid{dim, N, T}) +function CellIterator{dim, N, T, M}(grid::Grid{dim, N, T, M}) nodes = zeros(Int, N) coords = zeros(Vec{dim, T}, N) - return CellIterator(grid, nodes, coords) + cell = Ref{Cell{dim, N, M}}() + return CellIterator(grid, nodes, coords, cell) end # iterator interface -Base.start(::CellIterator) = 1 -Base.next{dim, N, T}(ci::CellIterator{dim, N, T}, i) = (reinit!(ci, i), i+1) +Base.start(::CellIterator) = 1 +Base.next(ci::CellIterator, i) = (reinit!(ci, i), i+1) Base.done(ci::CellIterator, i) = i > getncells(ci.grid) -Base.length(ci::CellIterator) = getncells(ci.grid) +Base.length(ci::CellIterator) = getncells(ci.grid) -Base.iteratorsize{dim, N, T}(::Type{CellIterator{dim, N, T}}) = Base.HasLength() # this is default in Base -Base.iteratoreltype{dim, N, T}(::Type{CellIterator{dim, N, T}}) = Base.HasEltype() # this is default in Base -Base.eltype{dim, N, T}(::Type{CellIterator{dim, N, T}}) = CellIterator{dim, N, T} +Base.iteratorsize{T <: CellIterator}(::Type{T}) = Base.HasLength() # this is default in Base +Base.iteratoreltype{T <: CellIterator}(::Type{T}) = Base.HasEltype() # this is default in Base +Base.eltype{T <: CellIterator}(::Type{T}) = T # utility @inline getnodes(ci::CellIterator) = ci.nodes @inline getcoordinates(ci::CellIterator) = ci.coords +@inline nfaces(ci::CellIterator) = nfaces(eltype(ci.grid.cells)) +@inline onboundary(ci::CellIterator, face::Int) = onboundary(ci.current_cell[], face) + -function reinit!{dim, N, T}(ci::CellIterator{dim, N, T}, i::Int) +function reinit!{dim, N}(ci::CellIterator{dim, N}, i::Int) nodeids = ci.grid.cells[i].nodes + ci.current_cell[] = ci.grid.cells[i] @inbounds for j in 1:N nodeid = nodeids[j] ci.nodes[j] = nodeid @@ -57,7 +63,7 @@ function reinit!{dim, N, T}(ci::CellIterator{dim, N, T}, i::Int) end @inline reinit!{dim, N, T}(cv::CellValues{dim, T}, ci::CellIterator{dim, N, T}) = reinit!(cv, ci.coords) - +@inline reinit!{dim, N, T}(fv::FaceValues{dim, T}, ci::CellIterator{dim, N, T}, face::Int) = reinit!(fv, ci.coords, face) """ ```julia @@ -78,6 +84,7 @@ end ``` """ +#= immutable FaceIterator{dim, N, T} grid::Grid{dim, N, T} nodes_face::Vector{Int} @@ -134,5 +141,5 @@ function reinit!{dim, N, T}(fi::FaceIterator{dim, N, T}, cell::Int, face::Int) end return fi end +=# -@inline reinit!{dim, N, T}(fv::FaceValues{dim, T}, fi::FaceIterator{dim, N, T}) = reinit!(fv, fi.coords_cell, fi.current_face[]) From 558f2faf9f0e834c67d1788fa1ef986e07bda9bd Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Wed, 22 Mar 2017 09:52:23 +0100 Subject: [PATCH 12/44] remove some crap --- src/Grid/grid.jl | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/src/Grid/grid.jl b/src/Grid/grid.jl index aa33bf8baf..66e1a3c04f 100644 --- a/src/Grid/grid.jl +++ b/src/Grid/grid.jl @@ -9,7 +9,7 @@ export Line, QuadraticLine, # Grid utilities export getcells, getncells, getnodes, getnnodes, getcelltype, getcellset, getnodeset, getfaceset, getcoordinates, getcoordinates!, - getcellsets, getnodesets, getfacesets, onboundary + getcellsets, getnodesets, getfacesets, onboundary, nfaces export addnodeset!, addcellset! @@ -53,36 +53,21 @@ nfaces{dim, N, M}(::Type{Cell{dim, N, M}}) = M # Typealias for commonly used cells -to_interpolation(c::Cell) = to_interpolation(typeof(c)) - -getfacelist(c::Cell) = getfacelist(typeof(c)) -@compat getfacelist(c::Type{<:Cell}) = getfacelist(to_interpolation(c)) - - - @compat const Line = Cell{1, 2, 2} -to_interpolation(::Type{Line}) = Lagrange{1, RefCube, 1} @compat const QuadraticLine = Cell{1, 3, 2} -to_interpolation(::Type{QuadraticLine}) = Lagrange{1, RefCube, 2} @compat const Triangle = Cell{2, 3, 3} -to_interpolation(::Type{Triangle}) = Lagrange{2, RefTetrahedron, 1} @compat const QuadraticTriangle = Cell{2, 6, 3} -to_interpolation(::Type{QuadraticTriangle}) = Lagrange{2, RefTetrahedron, 2} @compat const Quadrilateral = Cell{2, 4, 4} -to_interpolation(::Type{Quadrilateral}) = Lagrange{2, RefCube, 1} @compat const QuadraticQuadrilateral = Cell{2, 9, 4} -to_interpolation(::Type{QuadraticQuadrilateral}) = Lagrange{2, RefCube, 2} @compat const Tetrahedron = Cell{3, 4, 4} -to_interpolation(::Type{Tetrahedron}) = Lagrange{3, RefTetrahedron, 1} @compat const QuadraticTetrahedron = Cell{3, 10, 4} # Function interpolation for this doesn't exist in JuAFEM yet @compat const Hexahedron = Cell{3, 8, 6} -to_interpolation(::Type{Hexahedron}) = Lagrange{3, RefCube, 1} @compat const QuadraticHexahedron = Cell{3, 20, 6} # Function interpolation for this doesn't exist in JuAFEM yet """ From e24147765c555d85d36ad3fc5227b9077f3206c1 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Thu, 23 Mar 2017 11:35:06 +0100 Subject: [PATCH 13/44] work --- src/Dofs/DirichletBoundaryConditions.jl | 177 +++++++++++++++++ src/Dofs/DofHandler.jl | 245 ++++++++++++++++++++++++ src/Grid/grid_generators.jl | 62 +++--- src/JuAFEM.jl | 6 +- src/assembler.jl | 118 ++++++++++++ src/iterators.jl | 36 ++-- test/REQUIRE | 2 + test/test_notebooks.jl | 1 + 8 files changed, 604 insertions(+), 43 deletions(-) create mode 100644 src/Dofs/DirichletBoundaryConditions.jl create mode 100644 src/Dofs/DofHandler.jl diff --git a/src/Dofs/DirichletBoundaryConditions.jl b/src/Dofs/DirichletBoundaryConditions.jl new file mode 100644 index 0000000000..3aea3506a3 --- /dev/null +++ b/src/Dofs/DirichletBoundaryConditions.jl @@ -0,0 +1,177 @@ +export DirichletBoundaryConditions, update!, apply!, add! + +""" + DirichletBoundaryConditions + +A dirichlet boundary conditions is a a boundary where a dof is fixed to take a certain value. +The struct `DirichletBoundaryConditions` represents a collection of such boundary conditions. + +It is created from a `DofHandler` + +```jldoctest dbc +julia> dbc = DirichletBoundaryConditions(dh) +``` + +Dirichlet boundary conditions are added to certain components of a field for a specific nodes of the grid. +A function is also given that should be of the form `(x,t) -> v` where `x` is the coordinate of the node, `t` is a +time parameter and `v` should be of the same length as the number of components the bc is applied to: + +```jldoctest +julia> addnodeset!(grid, "clamped", x -> norm(x[1]) ≈ 0.0); + +julia> nodes = grid.nodesets["clamped"] + +julia> push!(dbc, :temperature, nodes, (x,t) -> t * [x[2], 0.0, 0.0], [1, 2, 3]) +``` + +Boundary conditions are now updates by specifying a time: + +```jldoctest +julia> t = 1.0; + +julia> update!(dbc, t) +``` + +The boundary conditions can be applied to a vector with + +```jldoctest +julia> u = zeros(ndofs(dh)) + +julia> apply!(u, dbc) +``` + +""" +immutable DirichletBoundaryCondition + f::Function + nodes::Set{Int} + field::Symbol + components::Vector{Int} + idxoffset::Int +end + + +immutable DirichletBoundaryConditions{DH <: DofHandler} + bcs::Vector{DirichletBoundaryCondition} + dofs::Vector{Int} + values::Vector{Float64} + dh::DH + closed::Ref{Bool} +end + +function DirichletBoundaryConditions(dh::DofHandler) + @assert isclosed(dh) + DirichletBoundaryConditions(DirichletBoundaryCondition[], Int[], Float64[], dh, Ref(false)) +end + +function Base.show(io::IO, dbcs::DirichletBoundaryConditions) + println(io, "DirichletBoundaryConditions:") + if !isclosed(dbcs) + print(io, " Not closed!") + else + println(io, " BCs:") + for dbc in dbcs.bcs + println(io, " ", "Field: ", dbc.field, " ", "Components: ", dbc.components) + end + end +end + +isclosed(dbcs::DirichletBoundaryConditions) = dbcs.closed[] +dirichlet_dofs(dbcs::DirichletBoundaryConditions) = dbcs.dofs +free_dofs(dbcs::DirichletBoundaryConditions) = setdiff(dbcs.dh.dofs_nodes, dbcs.dofs) +function close!(dbcs::DirichletBoundaryConditions) + fill!(dbcs.values, NaN) + dbcs.closed[] = true + return dbcs +end + +function add!(dbcs::DirichletBoundaryConditions, field::Symbol, + nodes::Union{Set{Int}, Vector{Int}}, f::Function, component::Int=1) + add!(dbcs, field, nodes, f, [component]) +end + +function add!(dbcs::DirichletBoundaryConditions, field::Symbol, + nodes::Union{Set{Int}, Vector{Int}}, f::Function, components::Vector{Int}) + @assert field in dbcs.dh.field_names || error("Missing: $field") + for component in components + @assert 0 < component <= ndim(dbcs.dh, field) + end + + if length(nodes) == 0 + warn("Added Dirichlet BC to node set containing 9 nodes") + end + + dofs_bc = Int[] + offset = dof_offset(dbcs.dh, field) + for node in nodes + for component in components + push!(dofs_bc, dbcs.dh.dofs_nodes[offset + component, node]) + end + end + + n_bcdofs = length(dofs_bc) + + append!(dbcs.dofs, dofs_bc) + idxoffset = length(dbcs.values) + resize!(dbcs.values, length(dbcs.values) + n_bcdofs) + + push!(dbcs.bcs, DirichletBoundaryCondition(f, Set(nodes), field, components, idxoffset)) + +end + +function update!(dbcs::DirichletBoundaryConditions, time::Float64 = 0.0) + @assert dbcs.closed[] + bc_offset = 0 + for dbc in dbcs.bcs + # Function barrier + _update!(dbcs.values, dbc.f, dbc.nodes, dbc.field, + dbc.components, dbcs.dh, dbc.idxoffset, time) + end +end + +function _update!(values::Vector{Float64}, f::Function, nodes::Set{Int}, field::Symbol, + components::Vector{Int}, dh::DofHandler, idx_offset::Int, time::Float64) + mesh = dh.grid + offset = dof_offset(dh, field) + current_dof = 1 + for node in nodes + x = getcoordinates(getnodes(mesh, node)) + bc_value = f(x, time) + @assert length(bc_value) == length(components) + for i in 1:length(components) + values[current_dof + idx_offset] = bc_value[i] + current_dof += 1 + end + end +end + +function vtk_point_data(vtkfile, dbcs::DirichletBoundaryConditions) + unique_fields = [] + for dbc in dbcs.bcs + push!(unique_fields, dbc.field) + end + unique_fields = unique(unique_fields) + + for field in unique_fields + nd = ndim(dbcs.dh, field) + data = zeros(Float64, nd, getnnodes(dbcs.dh.grid)) + for dbc in dbcs.bcs + if dbc.field != field + continue + end + + for node in dbc.nodes + for component in dbc.components + data[component, node] = 1.0 + end + end + end + vtk_point_data(vtkfile, data, string(field)*"_bc") + end + return vtkfile +end + +function apply!(v::Vector, bc::DirichletBoundaryConditions) + @assert length(v) == ndofs(bc.dh) + v[bc.dofs] = bc.values + return v +end diff --git a/src/Dofs/DofHandler.jl b/src/Dofs/DofHandler.jl new file mode 100644 index 0000000000..4a49b0885c --- /dev/null +++ b/src/Dofs/DofHandler.jl @@ -0,0 +1,245 @@ +export DofHandler, push!, close!, ndofs, ndofs_per_cell, celldofs!, create_sparsity_pattern + +""" + DofHandler + +A `DofHandler` takes care of the degrees of freedom in the system. + +```jldoctest dh +julia> g = generate_grid(Tetrahedron, (2,2,2)); + +julia> dh = DofHandler(g) +``` + +We can now add fields of a certain name and dimension to the dofhandler: + +```jldoctest dh +julia> push!(dh, :temperature, 1); + +julia> push!(dh, :displacements, 3); +``` + +When we are done with adding the fields, we need to close it: + +```jldoctest dh +julia> close!(dh) +DofHandler + Fields: + temperature dim: 1 + displacements dim: 3 + Total dofs: 108 + Dofs per cell: 16 +``` + +Can now do queries: + +```jldoctest dh +julia> ndofs(dh) +108 + +julia> ndofs_per_cell(dh) +16 + +julia> global_dofs = zeros(Int, ndofs_per_cell(dh)) + +julia> dofs_cell!(global_dofs, dh, 3); + +julia> global_dofs +16-element Array{Int64,1}: + 13 + 37 + 53 + 6 + 7 + 8 + 14 + 15 + 16 + 38 + 39 + 40 + 54 + 55 + 56 +``` + +Can use it to export + +```jldoctest dh +julia> a = rand(ndofs(dh)) + +julia> vtkfile = vtk_grid(grid) + +julia> vtk_point_data(vtkfile +``` + +""" + +# TODO: Make this immutable +type DofHandler{dim, N, T, M} + dofs_nodes::Matrix{Int} + dofs_cells::Matrix{Int} # TODO <- Is this needed or just extract from dofs_nodes? + field_names::Vector{Symbol} + dof_dims::Vector{Int} + closed::Ref{Bool} + dofs_vec::Vector{Int} + grid::Grid{dim, N, T, M} +end + +function DofHandler(m::Grid) + DofHandler(Matrix{Int}(), Matrix{Int}(), Symbol[], Int[], Ref(false), Int[], m) +end + +function show(io::IO, dh::DofHandler) + println(io, "DofHandler") + println(io, " Fields:") + for i in 1:length(dh.field_names) + println(io, " ", dh.field_names[i], " dim: ", dh.dof_dims[i]) + end + if !isclosed(dh) + println(io, " Not closed!") + else + println(io, " Total dofs: ", ndofs(dh)) + print(io, " Dofs per cell: ", ndofs_per_cell(dh)) + end +end + +ndofs(dh::DofHandler) = length(dh.dofs_nodes) +ndofs_per_cell(dh::DofHandler) = size(dh.dofs_cells, 1) +isclosed(dh::DofHandler) = dh.closed[] +dofs_node(dh::DofHandler, i::Int) = dh.dof_nodes[:, i] + +function celldofs!(global_dofs::Vector{Int}, dh::DofHandler, i::Int) + @assert isclosed(dh) + @assert length(global_dofs) == ndofs_per_cell(dh) + @inbounds for j in 1:ndofs_per_cell(dh) + global_dofs[j] = dh.dofs_cells[j, i] + end + return global_dofs +end + +function push!(dh::DofHandler, names::Vector{Symbol}, dims) + @assert length(names) == length(dims) + for i in 1:length(names) + push!(dh, names[i], dims[i]) + end +end + +function push!(dh::DofHandler, name::Symbol, dim::Int) + @assert !isclosed(dh) + if name in dh.field_names + error("duplicate field name") + end + push!(dh.field_names, name) + push!(dh.dof_dims, dim) + append!(dh.dofs_vec, length(dh.dofs_vec)+1:length(dh.dofs_vec) + dim * getnnodes(dh.grid)) + return dh +end + +# Computes the number of dofs from which the field starts data +# For example [ux, uy, uz, T] --> dof_offset(dh, :temperature) = 4 +function dof_offset(dh::DofHandler, field_name::Symbol) + offset = 0 + i = 0 + for name in dh.field_names + i += 1 + if name == field_name + return offset + else + offset += dh.dof_dims[i] + end + end + error("unexisting field name $field_name among $(dh.field_names)") +end + +function ndim(dh::DofHandler, field_name::Symbol) + i = 0 + for name in dh.field_names + i += 1 + if name == field_name + return dh.dof_dims[i] + end + end + error("unexisting field name $field_name among $(dh.field_names)") +end + +function close!(dh::DofHandler) + @assert !isclosed(dh) + dh.dofs_nodes = reshape(dh.dofs_vec, (length(dh.dofs_vec) ÷ getnnodes(dh.grid), getnnodes(dh.grid))) + add_element_dofs!(dh) + dh.closed[] = true + return dh +end + +getnvertices{dim, N, M}(::Type{JuAFEM.Cell{dim, N, M}}) = N + +function add_element_dofs!(dh::DofHandler) + n_elements = getncells(dh.grid) + n_vertices = getnvertices(getcelltype(dh.grid)) + element_dofs = Int[] + ndofs = size(dh.dofs_nodes, 1) + for element in 1:n_elements + offset = 0 + for dim_doftype in dh.dof_dims + for node in getcells(dh.grid, element).nodes + for j in 1:dim_doftype + push!(element_dofs, dh.dofs_nodes[offset + j, node]) + end + end + offset += dim_doftype + end + end + dh.dofs_cells = reshape(element_dofs, (ndofs * n_vertices, n_elements)) +end + + +function create_sparsity_pattern(dh::DofHandler) + grid = dh.grid + n = ndofs_per_cell(dh) + N = n^2 * getncells(dh.grid) + I = Int[] + J = Int[] + sizehint!(I, N) + sizehint!(J, N) + global_dofs = zeros(Int, ndofs_per_cell(dh)) + for element_id in 1:getncells(grid) + celldofs!(global_dofs, dh, element_id) + @inbounds for j in 1:n + append!(I, global_dofs) + for i in 1:n + push!(J, global_dofs[j]) + end + end + end + V = zeros(length(I)) + K = sparse(I, J, V) + return K +end + + + +vtk_grid(filename::AbstractString, dh::DofHandler) = vtk_grid(filename, dh.grid) + +# Exports the FE field `u` to `vtkfile` +function vtk_grid(filename::AbstractString, dh::DofHandler, u::Vector) + vtkfile = vtk_grid(filename, dh) + vtk_point_data(vtkfile, dh, u) + return vtkfile +end + +function vtk_point_data(vtkfile, dh::DofHandler, u::Vector) + offset = 0 + for i in 1:length(dh.field_names) + ndim_field = dh.dof_dims[i] + space_dim = ndim_field == 2 ? 3 : ndim_field + data = zeros(space_dim, getnnodes(dh.grid)) + for j in 1:size(dh.dofs_nodes, 2) + for k in 1:ndim_field + data[k, j] = u[dh.dofs_nodes[k + offset, j]] + end + end + vtk_point_data(vtkfile, data, string(dh.field_names[i])) + offset += ndim_field + end + return vtkfile +end \ No newline at end of file diff --git a/src/Grid/grid_generators.jl b/src/Grid/grid_generators.jl index e9d9c6dd4a..19d5085c08 100644 --- a/src/Grid/grid_generators.jl +++ b/src/Grid/grid_generators.jl @@ -127,10 +127,10 @@ function generate_grid{T}(::Type{Quadrilateral}, nel::NTuple{2, Int}, left::Vec{ # Cell face sets offset = 0 facesets = Dict{String, Set{Tuple{Int,Int}}}() - facesets["bottom"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[:,1]) + offset]); offset += length(cell_array[:,1]) - facesets["right"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[end,:]) + offset]); offset += length(cell_array[end,:]) - facesets["top"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[:,end]) + offset]); offset += length(cell_array[:,end]) - facesets["left"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[1,:]) + offset]); offset += length(cell_array[1,:]) + facesets["bottom"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[:,1])) + offset]); offset += length(cell_array[:,1]) + facesets["right"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[end,:])) + offset]); offset += length(cell_array[end,:]) + facesets["top"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[:,end])) + offset]); offset += length(cell_array[:,end]) + facesets["left"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[1,:])) + offset]); offset += length(cell_array[1,:]) return Grid(cells, nodes, facesets=facesets) end @@ -170,10 +170,10 @@ function generate_grid{T}(::Type{QuadraticQuadrilateral}, nel::NTuple{2, Int}, l # Cell face sets offset = 0 facesets = Dict{String, Set{Tuple{Int,Int}}}() - facesets["bottom"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[:,1]) + offset]); offset += length(cell_array[:,1]) - facesets["right"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[end,:]) + offset]); offset += length(cell_array[end,:]) - facesets["top"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[:,end]) + offset]); offset += length(cell_array[:,end]) - facesets["left"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[1,:]) + offset]); offset += length(cell_array[1,:]) + facesets["bottom"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[:,1])) + offset]); offset += length(cell_array[:,1]) + facesets["right"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[end,:])) + offset]); offset += length(cell_array[end,:]) + facesets["top"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[:,end])) + offset]); offset += length(cell_array[:,end]) + facesets["left"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[1,:])) + offset]); offset += length(cell_array[1,:]) return Grid(cells, nodes, facesets=facesets) end @@ -215,12 +215,12 @@ function generate_grid{T}(::Type{Hexahedron}, nel::NTuple{3, Int}, left::Vec{3, # Cell face sets offset = 0 facesets = Dict{String, Set{Tuple{Int,Int}}}() - facesets["bottom"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[:,:,1][:]) + offset]); offset += length(cell_array[:,:,1][:]) - facesets["front"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[:,1,:][:]) + offset]); offset += length(cell_array[:,1,:][:]) - facesets["right"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[end,:,:][:]) + offset]); offset += length(cell_array[end,:,:][:]) - facesets["back"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[:,end,:][:]) + offset]); offset += length(cell_array[:,end,:][:]) - facesets["left"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[1,:,:][:]) + offset]); offset += length(cell_array[1,:,:][:]) - facesets["top"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[:,:,end][:]) + offset]); offset += length(cell_array[:,:,end][:]) + facesets["bottom"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[:,:,1][:]) + offset)]); offset += length(cell_array[:,:,1][:]) + facesets["front"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[:,1,:][:]) + offset)]); offset += length(cell_array[:,1,:][:]) + facesets["right"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[end,:,:][:]) + offset)]); offset += length(cell_array[end,:,:][:]) + facesets["back"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[:,end,:][:]) + offset)]); offset += length(cell_array[:,end,:][:]) + facesets["left"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[1,:,:][:]) + offset)]); offset += length(cell_array[1,:,:][:]) + facesets["top"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[:,:,end][:]) + offset)]); offset += length(cell_array[:,:,end][:]) return Grid(cells, nodes, facesets=facesets) end @@ -250,19 +250,19 @@ function generate_grid{T}(::Type{Triangle}, nel::NTuple{2, Int}, left::Vec{2, T} # Cell faces cell_array = reshape(collect(1:nel_tot),(2, nel_x, nel_y)) boundary = Tuple{Int, Int}[[(cl, 1) for cl in cell_array[1,:,1]]; - [(cl, 1) for cl in cell_array[2,end,:]]; - [(cl, 2) for cl in cell_array[2,:,end]]; - [(cl, 3) for cl in cell_array[1,1,:]]] + [(cl, 1) for cl in cell_array[2,end,:]]; + [(cl, 2) for cl in cell_array[2,:,end]]; + [(cl, 3) for cl in cell_array[1,1,:]]] _apply_onboundary!(Triangle, cells, boundary) # Cell face sets offset = 0 facesets = Dict{String, Set{Tuple{Int,Int}}}() - facesets["bottom"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[1,:,1]) + offset]); offset += length(cell_array[1,:,1]) - facesets["right"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[2,end,:]) + offset]); offset += length(cell_array[2,end,:]) - facesets["top"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[2,:,end]) + offset]); offset += length(cell_array[2,:,end]) - facesets["left"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[1,1,:]) + offset]); offset += length(cell_array[1,1,:]) + facesets["bottom"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[1,:,1])) + offset]); offset += length(cell_array[1,:,1]) + facesets["right"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[2,end,:])) + offset]); offset += length(cell_array[2,end,:]) + facesets["top"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[2,:,end])) + offset]); offset += length(cell_array[2,:,end]) + facesets["left"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[1,1,:])) + offset]); offset += length(cell_array[1,1,:]) return Grid(cells, nodes, facesets=facesets) end @@ -303,10 +303,10 @@ function generate_grid{T}(::Type{QuadraticTriangle}, nel::NTuple{2, Int}, left:: # Cell face sets offset = 0 facesets = Dict{String, Set{Tuple{Int,Int}}}() - facesets["bottom"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[1,:,1]) + offset]); offset += length(cell_array[1,:,1]) - facesets["right"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[2,end,:]) + offset]); offset += length(cell_array[2,end,:]) - facesets["top"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[2,:,end]) + offset]); offset += length(cell_array[2,:,end]) - facesets["left"] = Set{Tuple{Int, Int}}(boundary[1:length(cell_array[1,1,:]) + offset]); offset += length(cell_array[1,1,:]) + facesets["bottom"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[1,:,1])) + offset]); offset += length(cell_array[1,:,1]) + facesets["right"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[2,end,:])) + offset]); offset += length(cell_array[2,end,:]) + facesets["top"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[2,:,end])) + offset]); offset += length(cell_array[2,:,end]) + facesets["left"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[1,1,:])) + offset]); offset += length(cell_array[1,1,:]) return Grid(cells, nodes, facesets=facesets) end @@ -358,12 +358,12 @@ function generate_grid{T}(::Type{Tetrahedron}, nel::NTuple{3, Int}, left::Vec{3, # Cell face sets offset = 0 facesets = Dict{String, Set{Tuple{Int,Int}}}() - facesets["bottom"] = Set{Tuple{Int, Int}}(boundary[1:length([cell_array[1,:,:,1][:]; cell_array[2,:,:,1][:]]) + offset]); offset += length([cell_array[1,:,:,1][:]; cell_array[2,:,:,1][:]]) - facesets["front"] = Set{Tuple{Int, Int}}(boundary[1:length([cell_array[1,:,1,:][:]; cell_array[4,:,1,:][:]]) + offset]); offset += length([cell_array[1,:,1,:][:]; cell_array[4,:,1,:][:]]) - facesets["right"] = Set{Tuple{Int, Int}}(boundary[1:length([cell_array[2,end,:,:][:]; cell_array[4,end,:,:][:]]) + offset]); offset += length([cell_array[2,end,:,:][:]; cell_array[4,end,:,:][:]]) - facesets["back"] = Set{Tuple{Int, Int}}(boundary[1:length([cell_array[2,:,end,:][:]; cell_array[5,:,end,:][:]]) + offset]); offset += length([cell_array[2,:,end,:][:]; cell_array[5,:,end,:][:]]) - facesets["left"] = Set{Tuple{Int, Int}}(boundary[1:length([cell_array[1,1,:,:][:]; cell_array[5,1,:,:][:]]) + offset]); offset += length([cell_array[1,1,:,:][:]; cell_array[5,1,:,:][:]]) - facesets["top"] = Set{Tuple{Int, Int}}(boundary[1:length([cell_array[4,:,:,end][:]; cell_array[5,:,:,end][:]]) + offset]); offset += length([cell_array[4,:,:,end][:]; cell_array[5,:,:,end][:]]) + facesets["bottom"] = Set{Tuple{Int, Int}}(boundary[(1:length([cell_array[1,:,:,1][:]; cell_array[2,:,:,1][:]])) + offset]); offset += length([cell_array[1,:,:,1][:]; cell_array[2,:,:,1][:]]) + facesets["front"] = Set{Tuple{Int, Int}}(boundary[(1:length([cell_array[1,:,1,:][:]; cell_array[4,:,1,:][:]])) + offset]); offset += length([cell_array[1,:,1,:][:]; cell_array[4,:,1,:][:]]) + facesets["right"] = Set{Tuple{Int, Int}}(boundary[(1:length([cell_array[2,end,:,:][:]; cell_array[4,end,:,:][:]])) + offset]); offset += length([cell_array[2,end,:,:][:]; cell_array[4,end,:,:][:]]) + facesets["back"] = Set{Tuple{Int, Int}}(boundary[(1:length([cell_array[2,:,end,:][:]; cell_array[5,:,end,:][:]])) + offset]); offset += length([cell_array[2,:,end,:][:]; cell_array[5,:,end,:][:]]) + facesets["left"] = Set{Tuple{Int, Int}}(boundary[(1:length([cell_array[1,1,:,:][:]; cell_array[5,1,:,:][:]])) + offset]); offset += length([cell_array[1,1,:,:][:]; cell_array[5,1,:,:][:]]) + facesets["top"] = Set{Tuple{Int, Int}}(boundary[(1:length([cell_array[4,:,:,end][:]; cell_array[5,:,:,end][:]])) + offset]); offset += length([cell_array[4,:,:,end][:]; cell_array[5,:,:,end][:]]) return Grid(cells, nodes, facesets=facesets) end diff --git a/src/JuAFEM.jl b/src/JuAFEM.jl index 724ee007ee..591863a3e0 100644 --- a/src/JuAFEM.jl +++ b/src/JuAFEM.jl @@ -7,7 +7,7 @@ using Reexport @reexport using Tensors @reexport using WriteVTK -import Base: show +import Base: show, push! import WriteVTK: vtk_grid, vtk_point_data, DatasetFile # Utilities @@ -59,6 +59,10 @@ include(joinpath("FEValues","face_integrals.jl")) include(joinpath("Grid", "grid.jl")) include(joinpath("Grid", "grid_generators.jl")) +# Dofs +include(joinpath("Dofs", "DofHandler.jl")) +include(joinpath("Dofs", "DirichletBoundaryConditions.jl")) + # Export include(joinpath("Export", "VTK.jl")) diff --git a/src/assembler.jl b/src/assembler.jl index 57efc2810b..b7c4063bcb 100644 --- a/src/assembler.jl +++ b/src/assembler.jl @@ -64,3 +64,121 @@ function assemble!{T}(g::AbstractVector{T}, ge::AbstractVector{T}, edof::Abstrac g[edof[i]] += ge[i] end end + +immutable AssemblerSparsityPattern{Tv, Ti} + K::SparseMatrixCSC{Tv, Ti} + f::Vector{Tv} + tmpi::Vector{Int} + tmpf::Vector{Tv} +end + + +function start_assemble(K::SparseMatrixCSC, f::Vector=Float64[]) + AssemblerSparsityPattern(K, f, Int[], eltype(K)[]) +end + +assemble!(A::AssemblerSparsityPattern, Ke::AbstractMatrix, dofs::AbstractVector{Int}) = assemble!(A, eltype(Ke)[], Ke, dofs) +function assemble!(A::AssemblerSparsityPattern, fe::AbstractVector, Ke::AbstractMatrix, dofs::AbstractVector{Int}) + if length(fe) != 0 + assemble!(A.f, fe, dofs) + end + + K = A.K + tmpi = A.tmpi + tmpf = A.tmpf + @boundscheck checkbounds(K, dofs, dofs) + resize!(A.tmpi, length(dofs)) + resize!(A.tmpf, length(dofs)) + copy!(A.tmpf, dofs) + sortperm2!(tmpf, tmpi) + + current_col = 1 + @inbounds for col in dofs + current_idx = 1 + l = length(dofs) + for r in nzrange(K, col) + row = tmpi[current_idx] + if K.rowval[r] == dofs[row] + K.nzval[r] += Ke[row, current_col] + current_idx += 1 + end + current_idx > l && break + end + if current_idx <= l + error("some row indices were not found") + end + current_col += 1 + end +end + + +# Sort utilities + + +function sortperm2!(B, ii) + @inbounds for i = 1:length(B) + ii[i] = i + end + quicksort!(B, ii) + return +end # function mysortperm + +#---------------------------------------------------- + +function quicksort!(A, order, i=1,j=length(A)) + @inbounds if j > i + if j - i <= 12 + # Insertion sort for small groups is faster than Quicksort + InsertionSort!(A, order, i, j) + return A + end + + pivot = A[div(i+j,2)] + left, right = i, j + while left <= right + while A[left] < pivot + left += 1 + end + while A[right] > pivot + right -= 1 + end + if left <= right + A[left], A[right] = A[right], A[left] + order[left], order[right] = order[right], order[left] + + left += 1 + right -= 1 + end + end # left <= right + + quicksort!(A,order, i, right) + quicksort!(A,order, left,j) + end # j > i + + return A +end # function quicksort! + + +function InsertionSort!(A, order, ii=1, jj=length(A)) + @inbounds for i = ii+1 : jj + j = i - 1 + temp = A[i] + itemp = order[i] + + while true + if j == ii-1 + break + end + if A[j] <= temp + break + end + A[j+1] = A[j] + order[j+1] = order[j] + j -= 1 + end + + A[j+1] = temp + order[j+1] = itemp + end # i + return +end # function InsertionSort! \ No newline at end of file diff --git a/src/iterators.jl b/src/iterators.jl index 9512222db9..b7b85db9bd 100644 --- a/src/iterators.jl +++ b/src/iterators.jl @@ -24,16 +24,27 @@ immutable CellIterator{dim, N, T, M} grid::Grid{dim, N, T, M} nodes::Vector{Int} coords::Vector{Vec{dim, T}} - current_cell::Ref{Cell{dim, N, M}} -end + current_cellid::Ref{Int} + dh::DofHandler{dim, N, T, M} + + function CellIterator{dim, N, T, M}(dh::DofHandler{dim, N, T, M}) + nodes = zeros(Int, N) + coords = zeros(Vec{dim, T}, N) + cell = Ref(0) + return new(dh.grid, nodes, coords, Ref(0), dh) + end -function CellIterator{dim, N, T, M}(grid::Grid{dim, N, T, M}) - nodes = zeros(Int, N) - coords = zeros(Vec{dim, T}, N) - cell = Ref{Cell{dim, N, M}}() - return CellIterator(grid, nodes, coords, cell) + function CellIterator{dim, N, T, M}(grid::Grid{dim, N, T, M}) + nodes = zeros(Int, N) + coords = zeros(Vec{dim, T}, N) + cell = Ref(0) + return new(grid, nodes, coords, cell) + end end +CellIterator{dim, N, T, M}(grid::Grid{dim, N, T, M}) = CellIterator{dim,N,T,M}(grid) +CellIterator{dim, N, T, M}(dh::DofHandler{dim, N, T, M}) = CellIterator{dim,N,T,M}(dh) + # iterator interface Base.start(::CellIterator) = 1 Base.next(ci::CellIterator, i) = (reinit!(ci, i), i+1) @@ -48,12 +59,13 @@ Base.eltype{T <: CellIterator}(::Type{T}) = T @inline getnodes(ci::CellIterator) = ci.nodes @inline getcoordinates(ci::CellIterator) = ci.coords @inline nfaces(ci::CellIterator) = nfaces(eltype(ci.grid.cells)) -@inline onboundary(ci::CellIterator, face::Int) = onboundary(ci.current_cell[], face) - +@inline onboundary(ci::CellIterator, face::Int) = onboundary(ci.grid.cells[ci.current_cellid[]], face) +@inline cellid(ci::CellIterator) = ci.current_cellid[] +@inline celldofs!(v::Vector, ci::CellIterator) = celldofs!(v, ci.dh, ci.current_cellid[]) function reinit!{dim, N}(ci::CellIterator{dim, N}, i::Int) nodeids = ci.grid.cells[i].nodes - ci.current_cell[] = ci.grid.cells[i] + ci.current_cellid[] = i @inbounds for j in 1:N nodeid = nodeids[j] ci.nodes[j] = nodeid @@ -65,6 +77,8 @@ end @inline reinit!{dim, N, T}(cv::CellValues{dim, T}, ci::CellIterator{dim, N, T}) = reinit!(cv, ci.coords) @inline reinit!{dim, N, T}(fv::FaceValues{dim, T}, ci::CellIterator{dim, N, T}, face::Int) = reinit!(fv, ci.coords, face) + +#= """ ```julia FaceIterator(grid::Grid) @@ -84,7 +98,7 @@ end ``` """ -#= + immutable FaceIterator{dim, N, T} grid::Grid{dim, N, T} nodes_face::Vector{Int} diff --git a/test/REQUIRE b/test/REQUIRE index ef9042e943..def858001a 100644 --- a/test/REQUIRE +++ b/test/REQUIRE @@ -2,3 +2,5 @@ ForwardDiff SHA NBInclude Documenter +TimerOutputs +UnicodePlots \ No newline at end of file diff --git a/test/test_notebooks.jl b/test/test_notebooks.jl index eb25bc852e..eb95adbfb3 100644 --- a/test/test_notebooks.jl +++ b/test/test_notebooks.jl @@ -3,4 +3,5 @@ module TestStiffness using NBInclude nbinclude("../examples/stiffness_example.ipynb") + nbinclude("../examples/cantilever.ipynb") end \ No newline at end of file From 7eddaf22a9df9d3d2ac15b7a4fa26f1f1a9eabc9 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Thu, 23 Mar 2017 11:35:12 +0100 Subject: [PATCH 14/44] add notebook --- examples/cantilever.ipynb | 378 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 378 insertions(+) create mode 100644 examples/cantilever.ipynb diff --git a/examples/cantilever.ipynb b/examples/cantilever.ipynb new file mode 100644 index 0000000000..7d11492946 --- /dev/null +++ b/examples/cantilever.ipynb @@ -0,0 +1,378 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[1m\u001b[34mINFO: Recompiling stale cache file /home/kristoffer/.julia/lib/v0.5/JuAFEM.ji for module JuAFEM.\n", + "\u001b[0m" + ] + } + ], + "source": [ + "using JuAFEM\n", + "using Tensors\n", + "using TimerOutputs\n", + "using UnicodePlots\n", + "const to = TimerOutput();" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import Base.flatten" + ] + }, + { + "cell_type": "code", + "execution_count": 190, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "const dim = 3\n", + "corner1 = Vec{dim}((0.0, 0.0, 0.0))\n", + "corner2 = Vec{dim}((10.0, 1.0, 1.0))\n", + "grid = generate_grid(Tetrahedron, (120, 12, 12), corner1, corner2);\n", + "# Extract the left boundary\n", + "addnodeset!(grid, \"clamped\", x -> norm(x[1]) ≈ 0.0);" + ] + }, + { + "cell_type": "code", + "execution_count": 191, + "metadata": {}, + "outputs": [], + "source": [ + "# Interpolations and values\n", + "interpolation_space = Lagrange{dim, RefTetrahedron, 1}()\n", + "quadrature_rule = QuadratureRule{dim, RefTetrahedron}(1)\n", + "cellvalues = CellVectorValues(quadrature_rule, interpolation_space);\n", + "facevalues = FaceVectorValues(QuadratureRule{dim-1, RefTetrahedron}(1), interpolation_space);" + ] + }, + { + "cell_type": "code", + "execution_count": 215, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "DofHandler\n", + " Fields:\n", + " u dim: 3\n", + " Total dofs: 61347\n", + " Dofs per cell: 12" + ] + }, + "execution_count": 215, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# DofHandler\n", + "dh = DofHandler(grid)\n", + "push!(dh, :u, dim) # Add a displacement field\n", + "close!(dh)" + ] + }, + { + "cell_type": "code", + "execution_count": 193, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 1.163711 seconds (30 allocations: 523.239 MB, 12.85% gc time)\n" + ] + }, + { + "data": { + "text/plain": [ + "\u001b[1m\u001b[37m Sparsity Pattern\n", + "\u001b[0m\u001b[1m\u001b[37m ┌──────────────────────────────────────────┐\u001b[0m \n", + " \u001b[1m\u001b[37m1\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[31m> 0\u001b[0m\n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[31m⣤\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[34m< 0\u001b[0m\n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠹\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣆\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠛\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⢦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠳\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣤\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠹\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣆\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠛\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m61347\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + "\u001b[1m\u001b[37m └──────────────────────────────────────────┘\u001b[0m \n", + "\u001b[1m\u001b[37m 1\u001b[0m\u001b[1m\u001b[37m \u001b[0m\u001b[1m\u001b[37m 61347\n", + "\u001b[0m\u001b[1m\u001b[37m nz = 3094857\n", + "\u001b[0m" + ] + }, + "execution_count": 193, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "@time K = create_sparsity_pattern(dh);\n", + "fill!(K.nzval, 1.0);\n", + "spy(K)" + ] + }, + { + "cell_type": "code", + "execution_count": 194, + "metadata": {}, + "outputs": [], + "source": [ + "# Boundaryconditions\n", + "dbc = DirichletBoundaryConditions(dh)\n", + "# Add a homogenoush boundary condition on the \"clamped\" edge\n", + "add!(dbc, :u, getnodeset(grid, \"clamped\"), (x,t) -> [0.0, 0.0, 0.0], collect(1:dim))\n", + "close!(dbc)\n", + "t = 0.0\n", + "update!(dbc, t)" + ] + }, + { + "cell_type": "code", + "execution_count": 195, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING: Method definition δ(Any, Any) in module Main at In[175]:6 overwritten at In[195]:6.\n", + "WARNING: Method definition g(Any, Any, Any, Any) in module Main at In[175]:7 overwritten at In[195]:7.\n" + ] + } + ], + "source": [ + "# Create the stiffness tensor\n", + "E = 200e9\n", + "ν = 0.3\n", + "λ = E*ν / ((1+ν) * (1 - 2ν))\n", + "μ = E / (2(1+ν))\n", + "δ(i,j) = i == j ? 1.0 : 0.0\n", + "g(i,j,k,l) = λ*δ(i,j)*δ(k,l) + μ*(δ(i,k)*δ(j,l) + δ(i,l)*δ(j,k))\n", + "C = SymmetricTensor{4, dim}(g);" + ] + }, + { + "cell_type": "code", + "execution_count": 209, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING: Method definition doassemble(JuAFEM.CellVectorValues{#dim<:Any, T<:Real, FIP<:JuAFEM.Interpolation, GIP<:JuAFEM.Interpolation, shape<:JuAFEM.AbstractRefShape, M<:Any}, JuAFEM.FaceVectorValues{#dim<:Any, T<:Real, FIP<:JuAFEM.Interpolation, GIP<:JuAFEM.Interpolation, shape<:JuAFEM.AbstractRefShape, M<:Any}, Base.SparseArrays.SparseMatrixCSC, JuAFEM.Grid, JuAFEM.DofHandler, Tensors.SymmetricTensor{4, #dim<:Any, T<:Real, M<:Any}) in module Main at In[202]:3 overwritten at In[209]:3.\n" + ] + }, + { + "data": { + "text/plain": [ + "doassemble (generic function with 1 method)" + ] + }, + "execution_count": 209, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "function doassemble{dim}(cellvalues::CellVectorValues{dim}, facevalues::FaceVectorValues{dim}, \n", + " K::SparseMatrixCSC, grid::Grid, dh::DofHandler, C::SymmetricTensor{4, dim})\n", + " assem_strat = 1\n", + " n_basefuncs = getnbasefunctions(cellvalues)\n", + " global_dofs = zeros(Int, ndofs_per_cell(dh))\n", + "\n", + " fill!(K.nzval, 0.0)\n", + " f = zeros(ndofs(dh))\n", + " assembler = start_assemble(K, f)\n", + "\n", + " fe = zeros(n_basefuncs) # Local force vector\n", + " Ke = zeros(n_basefuncs, n_basefuncs) # Local stiffness mastrix\n", + " \n", + " t = Vec{3}((0.0, 1e8, 0.0)) # Traction vector\n", + " b = Vec{3}((0.0, 0.0, 0.0)) # Body force\n", + "\n", + " ɛ = [zero(SymmetricTensor{2, dim}) for i in 1:n_basefuncs]\n", + " @inbounds for (cellcount, cell) in enumerate(CellIterator(dh))\n", + " @timeit to \"assem\" begin\n", + " fill!(Ke, 0)\n", + " fill!(fe, 0)\n", + " \n", + " reinit!(cellvalues, cell)\n", + " for q_point in 1:getnquadpoints(cellvalues)\n", + " for i in 1:n_basefuncs\n", + " ɛ[i] = symmetric(shape_gradient(cellvalues, q_point, i)) \n", + " end\n", + " dΩ = getdetJdV(cellvalues, q_point)\n", + " for i in 1:n_basefuncs\n", + " δu = shape_value(cellvalues, q_point, i)\n", + " fe[i] += (δu ⋅ b) * dΩ\n", + " ɛC = ɛ[i] ⊡ C\n", + " for j in 1:n_basefuncs\n", + " Ke[i, j] += (ɛC ⊡ ɛ[j]) * dΩ\n", + " end\n", + " end\n", + " end\n", + " \n", + " for face in 1:nfaces(cell)\n", + " if onboundary(cell, face) && (cellcount, face) ∈ getfaceset(grid, \"right\")\n", + " reinit!(facevalues, cell, face)\n", + " for q_point in 1:getnquadpoints(facevalues)\n", + " dΓ = getdetJdV(facevalues, q_point)\n", + " for i in 1:n_basefuncs\n", + " δu = shape_value(facevalues, q_point, i)\n", + " fe[i] += (δu ⋅ t) * dΓ\n", + " end\n", + " end\n", + " end\n", + " end\n", + " celldofs!(global_dofs, cell)\n", + " assemble!(assembler, fe, Ke, global_dofs)\n", + " end # timer\n", + " end\n", + " #K = end_assemble(assembler)\n", + " return K, f\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": 214, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " \u001b[1m------------------------------------------------------------------\u001b[22m\n", + " Time Allocations \n", + " ---------------------- -----------------------\n", + " Tot / % measured: 252ms / 92.6% 32.7MiB / 86.5% \n", + "\n", + " Section ncalls time %tot avg alloc %tot avg\n", + " ------------------------------------------------------------------\n", + " assem 86.4k 233ms 100% 2.70μs 28.3MiB 100% 344B\n", + " \u001b[1m------------------------------------------------------------------\u001b[22m" + ] + } + ], + "source": [ + "reset_timer!(to)\n", + "K, f = doassemble(cellvalues, facevalues, K, grid, dh, C);\n", + "print_timer(to; linechars = :ascii)" + ] + }, + { + "cell_type": "code", + "execution_count": 183, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0.168582 seconds (85 allocations: 50.701 MB, 62.79% gc time)\n" + ] + } + ], + "source": [ + "# Account for boundary conditions and solve\n", + "u = zeros(ndofs(dh))\n", + "d_free = JuAFEM.free_dofs(dbc)\n", + "d_pres = dbc.dofs\n", + "@time u_free = cholfact(Symmetric(K[d_free, d_free])) \\ (f[d_free] - K[d_free, d_pres] * dbc.values)\n", + "u[d_free] = u_free \n", + "apply!(u, dbc);" + ] + }, + { + "cell_type": "code", + "execution_count": 184, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1-element Array{String,1}:\n", + " \"cantilever.vtu\"" + ] + }, + "execution_count": 184, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Save file\n", + "vtkfile = vtk_grid(\"cantilever\", dh, u)\n", + "vtk_save(vtkfile)" + ] + }, + { + "cell_type": "code", + "execution_count": 185, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cantilever successful\n" + ] + } + ], + "source": [ + "Base.Test.@test maximum(u) ≈ 1.919600482922295\n", + "println(\"Cantilever successful\")" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Julia 0.5.1", + "language": "julia", + "name": "julia-0.5" + }, + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "0.5.1" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} From 5d8d59d002d28e93a89bfc5e0cbee05f052b3fbf Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Thu, 23 Mar 2017 14:44:35 +0100 Subject: [PATCH 15/44] stuff --- examples/cantilever.ipynb | 138 +++++++++++------------- src/Dofs/DirichletBoundaryConditions.jl | 48 ++++++++- src/Dofs/DofHandler.jl | 11 +- src/Export/VTK.jl | 4 +- src/Grid/grid.jl | 2 - src/Grid/grid_generators.jl | 2 +- test/test_grid.jl | 4 +- 7 files changed, 123 insertions(+), 86 deletions(-) diff --git a/examples/cantilever.ipynb b/examples/cantilever.ipynb index 7d11492946..b789aaa69a 100644 --- a/examples/cantilever.ipynb +++ b/examples/cantilever.ipynb @@ -35,7 +35,7 @@ }, { "cell_type": "code", - "execution_count": 190, + "execution_count": 3, "metadata": { "scrolled": true }, @@ -44,14 +44,14 @@ "const dim = 3\n", "corner1 = Vec{dim}((0.0, 0.0, 0.0))\n", "corner2 = Vec{dim}((10.0, 1.0, 1.0))\n", - "grid = generate_grid(Tetrahedron, (120, 12, 12), corner1, corner2);\n", + "grid = generate_grid(Tetrahedron, (60, 6, 6), corner1, corner2);\n", "# Extract the left boundary\n", "addnodeset!(grid, \"clamped\", x -> norm(x[1]) ≈ 0.0);" ] }, { "cell_type": "code", - "execution_count": 191, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -64,7 +64,7 @@ }, { "cell_type": "code", - "execution_count": 215, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -73,11 +73,11 @@ "DofHandler\n", " Fields:\n", " u dim: 3\n", - " Total dofs: 61347\n", + " Total dofs: 8967\n", " Dofs per cell: 12" ] }, - "execution_count": 215, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -91,49 +91,49 @@ }, { "cell_type": "code", - "execution_count": 193, + "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - " 1.163711 seconds (30 allocations: 523.239 MB, 12.85% gc time)\n" + " 0.129785 seconds (30 allocations: 65.718 MB, 68.56% gc time)\n" ] }, { "data": { "text/plain": [ - "\u001b[1m\u001b[37m Sparsity Pattern\n", - "\u001b[0m\u001b[1m\u001b[37m ┌──────────────────────────────────────────┐\u001b[0m \n", - " \u001b[1m\u001b[37m1\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[31m> 0\u001b[0m\n", - " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[31m⣤\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[34m< 0\u001b[0m\n", - " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", - " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠹\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", - " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣆\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", - " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", - " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠛\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", - " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", - " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", - " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⢦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", - " \u001b[1m\u001b[37m\u001b[0m \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", - " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠳\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", - " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", - " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", - " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣤\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", - " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", - " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠹\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", - " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣆\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", - " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", - " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⡈\u001b[0m\u001b[1m\u001b[31m⠛\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", - " \u001b[1m\u001b[37m61347\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠈\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", - "\u001b[1m\u001b[37m └──────────────────────────────────────────┘\u001b[0m \n", - "\u001b[1m\u001b[37m 1\u001b[0m\u001b[1m\u001b[37m \u001b[0m\u001b[1m\u001b[37m 61347\n", - "\u001b[0m\u001b[1m\u001b[37m nz = 3094857\n", + "\u001b[1m\u001b[37m Sparsity Pattern\n", + "\u001b[0m\u001b[1m\u001b[37m ┌──────────────────────────────────────────┐\u001b[0m \n", + " \u001b[1m\u001b[37m1\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[31m> 0\u001b[0m\n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[34m< 0\u001b[0m\n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[31m⣄\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m8967\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠙\u001b[0m\u001b[1m\u001b[31m⢿\u001b[0m\u001b[1m\u001b[31m⣷\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + "\u001b[1m\u001b[37m └──────────────────────────────────────────┘\u001b[0m \n", + "\u001b[1m\u001b[37m 1\u001b[0m\u001b[1m\u001b[37m \u001b[0m\u001b[1m\u001b[37m 8967\n", + "\u001b[0m\u001b[1m\u001b[37m nz = 405333\n", "\u001b[0m" ] }, - "execution_count": 193, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -146,7 +146,7 @@ }, { "cell_type": "code", - "execution_count": 194, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -161,18 +161,9 @@ }, { "cell_type": "code", - "execution_count": 195, + "execution_count": 8, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING: Method definition δ(Any, Any) in module Main at In[175]:6 overwritten at In[195]:6.\n", - "WARNING: Method definition g(Any, Any, Any, Any) in module Main at In[175]:7 overwritten at In[195]:7.\n" - ] - } - ], + "outputs": [], "source": [ "# Create the stiffness tensor\n", "E = 200e9\n", @@ -186,23 +177,16 @@ }, { "cell_type": "code", - "execution_count": 209, + "execution_count": 9, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING: Method definition doassemble(JuAFEM.CellVectorValues{#dim<:Any, T<:Real, FIP<:JuAFEM.Interpolation, GIP<:JuAFEM.Interpolation, shape<:JuAFEM.AbstractRefShape, M<:Any}, JuAFEM.FaceVectorValues{#dim<:Any, T<:Real, FIP<:JuAFEM.Interpolation, GIP<:JuAFEM.Interpolation, shape<:JuAFEM.AbstractRefShape, M<:Any}, Base.SparseArrays.SparseMatrixCSC, JuAFEM.Grid, JuAFEM.DofHandler, Tensors.SymmetricTensor{4, #dim<:Any, T<:Real, M<:Any}) in module Main at In[202]:3 overwritten at In[209]:3.\n" - ] - }, { "data": { "text/plain": [ "doassemble (generic function with 1 method)" ] }, - "execution_count": 209, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -210,13 +194,14 @@ "source": [ "function doassemble{dim}(cellvalues::CellVectorValues{dim}, facevalues::FaceVectorValues{dim}, \n", " K::SparseMatrixCSC, grid::Grid, dh::DofHandler, C::SymmetricTensor{4, dim})\n", - " assem_strat = 1\n", - " n_basefuncs = getnbasefunctions(cellvalues)\n", - " global_dofs = zeros(Int, ndofs_per_cell(dh))\n", "\n", + " \n", " fill!(K.nzval, 0.0)\n", " f = zeros(ndofs(dh))\n", " assembler = start_assemble(K, f)\n", + " \n", + " n_basefuncs = getnbasefunctions(cellvalues)\n", + " global_dofs = zeros(Int, ndofs_per_cell(dh))\n", "\n", " fe = zeros(n_basefuncs) # Local force vector\n", " Ke = zeros(n_basefuncs, n_basefuncs) # Local stiffness mastrix\n", @@ -262,14 +247,13 @@ " assemble!(assembler, fe, Ke, global_dofs)\n", " end # timer\n", " end\n", - " #K = end_assemble(assembler)\n", " return K, f\n", "end" ] }, { "cell_type": "code", - "execution_count": 214, + "execution_count": 27, "metadata": {}, "outputs": [ { @@ -279,11 +263,11 @@ " \u001b[1m------------------------------------------------------------------\u001b[22m\n", " Time Allocations \n", " ---------------------- -----------------------\n", - " Tot / % measured: 252ms / 92.6% 32.7MiB / 86.5% \n", + " Tot / % measured: 27.1ms / 91.2% 4.32MiB / 87.0% \n", "\n", " Section ncalls time %tot avg alloc %tot avg\n", " ------------------------------------------------------------------\n", - " assem 86.4k 233ms 100% 2.70μs 28.3MiB 100% 344B\n", + " assem 10.8k 24.7ms 100% 2.29μs 3.76MiB 100% 365B\n", " \u001b[1m------------------------------------------------------------------\u001b[22m" ] } @@ -296,30 +280,34 @@ }, { "cell_type": "code", - "execution_count": 183, + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "# Modify K and f such that K \\ f gives correct boundary conditions\n", + "apply!(K, f, dbc)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - " 0.168582 seconds (85 allocations: 50.701 MB, 62.79% gc time)\n" + " 0.090020 seconds (65 allocations: 45.675 MB, 3.28% gc time)\n" ] } ], "source": [ - "# Account for boundary conditions and solve\n", - "u = zeros(ndofs(dh))\n", - "d_free = JuAFEM.free_dofs(dbc)\n", - "d_pres = dbc.dofs\n", - "@time u_free = cholfact(Symmetric(K[d_free, d_free])) \\ (f[d_free] - K[d_free, d_pres] * dbc.values)\n", - "u[d_free] = u_free \n", - "apply!(u, dbc);" + "@time u = cholfact(Symmetric(K)) \\ f;" ] }, { "cell_type": "code", - "execution_count": 184, + "execution_count": 30, "metadata": {}, "outputs": [ { @@ -329,7 +317,7 @@ " \"cantilever.vtu\"" ] }, - "execution_count": 184, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" } @@ -342,7 +330,7 @@ }, { "cell_type": "code", - "execution_count": 185, + "execution_count": 31, "metadata": {}, "outputs": [ { diff --git a/src/Dofs/DirichletBoundaryConditions.jl b/src/Dofs/DirichletBoundaryConditions.jl index 3aea3506a3..af155dde07 100644 --- a/src/Dofs/DirichletBoundaryConditions.jl +++ b/src/Dofs/DirichletBoundaryConditions.jl @@ -32,7 +32,7 @@ julia> t = 1.0; julia> update!(dbc, t) ``` -The boundary conditions can be applied to a vector with +The boundary conditions can be applied to a vector: ```jldoctest julia> u = zeros(ndofs(dh)) @@ -89,6 +89,7 @@ function add!(dbcs::DirichletBoundaryConditions, field::Symbol, add!(dbcs, field, nodes, f, [component]) end +# Adds a boundary condition function add!(dbcs::DirichletBoundaryConditions, field::Symbol, nodes::Union{Set{Int}, Vector{Int}}, f::Function, components::Vector{Int}) @assert field in dbcs.dh.field_names || error("Missing: $field") @@ -118,6 +119,7 @@ function add!(dbcs::DirichletBoundaryConditions, field::Symbol, end +# Updates the DBC's to the current time `time` function update!(dbcs::DirichletBoundaryConditions, time::Float64 = 0.0) @assert dbcs.closed[] bc_offset = 0 @@ -144,6 +146,8 @@ function _update!(values::Vector{Float64}, f::Function, nodes::Set{Int}, field:: end end +# Saves the dirichlet boundary conditions to a vtkfile. +# Values will have a 1 where bcs are active and 0 otherwise function vtk_point_data(vtkfile, dbcs::DirichletBoundaryConditions) unique_fields = [] for dbc in dbcs.bcs @@ -175,3 +179,45 @@ function apply!(v::Vector, bc::DirichletBoundaryConditions) v[bc.dofs] = bc.values return v end + +function apply!(K::SparseMatrixCSC, bc::DirichletBoundaryConditions) + @assert all(iszero, bc.values) + _apply(K, eltype(K)[], bc) +end + +function apply!(K::SparseMatrixCSC, f::AbstractVector, bc::DirichletBoundaryConditions) + @assert length(f) == size(K, 1) + @boundscheck checkbounds(K, bc.dofs, bc.dofs) + @boundscheck checkbounds(f, bc.dofs) + + m = meandiag(K) # Use the mean of the diagonal here to not ruin things for iterative solver + @inbounds for i in 1:length(bc.values) + d = bc.dofs[i] + v = bc.values[i] + + if v != 0 + for j in nzrange(K, d) + f[K.rowval[j]] -= v * K.nzval[j] + end + end + end + K[:, bc.dofs] = 0 + K[bc.dofs, :] = 0 + @inbounds for i in 1:length(bc.values) + d = bc.dofs[i] + v = bc.values[i] + K[d, d] = m + # We will only enter here with an empty f vector if we have assured that v == 0 for all dofs + if v != 0 + f[d] = v * m + end + end +end + +function meandiag(K::AbstractMatrix) + z = zero(eltype(K)) + for i in 1:size(K,1) + z += K[i,i] + end + return z / size(K,1) +end \ No newline at end of file diff --git a/src/Dofs/DofHandler.jl b/src/Dofs/DofHandler.jl index 4a49b0885c..b8f18ae6a9 100644 --- a/src/Dofs/DofHandler.jl +++ b/src/Dofs/DofHandler.jl @@ -75,7 +75,7 @@ julia> vtk_point_data(vtkfile """ -# TODO: Make this immutable +# TODO: Make this immutable? type DofHandler{dim, N, T, M} dofs_nodes::Matrix{Int} dofs_cells::Matrix{Int} # TODO <- Is this needed or just extract from dofs_nodes? @@ -87,7 +87,7 @@ type DofHandler{dim, N, T, M} end function DofHandler(m::Grid) - DofHandler(Matrix{Int}(), Matrix{Int}(), Symbol[], Int[], Ref(false), Int[], m) + DofHandler(Matrix{Int}(0, 0), Matrix{Int}(0, 0), Symbol[], Int[], Ref(false), Int[], m) end function show(io::IO, dh::DofHandler) @@ -109,6 +109,7 @@ ndofs_per_cell(dh::DofHandler) = size(dh.dofs_cells, 1) isclosed(dh::DofHandler) = dh.closed[] dofs_node(dh::DofHandler, i::Int) = dh.dof_nodes[:, i] +# Stores the dofs for the cell with number `i` into the vector `global_dofs` function celldofs!(global_dofs::Vector{Int}, dh::DofHandler, i::Int) @assert isclosed(dh) @assert length(global_dofs) == ndofs_per_cell(dh) @@ -118,6 +119,7 @@ function celldofs!(global_dofs::Vector{Int}, dh::DofHandler, i::Int) return global_dofs end +# Add a collection of fields function push!(dh::DofHandler, names::Vector{Symbol}, dims) @assert length(names) == length(dims) for i in 1:length(names) @@ -125,6 +127,7 @@ function push!(dh::DofHandler, names::Vector{Symbol}, dims) end end +# Add a field to the dofhandler ex `push!(dh, :u, 3)` function push!(dh::DofHandler, name::Symbol, dim::Int) @assert !isclosed(dh) if name in dh.field_names @@ -173,6 +176,7 @@ end getnvertices{dim, N, M}(::Type{JuAFEM.Cell{dim, N, M}}) = N +# Computes the "edof"-matrix function add_element_dofs!(dh::DofHandler) n_elements = getncells(dh.grid) n_vertices = getnvertices(getcelltype(dh.grid)) @@ -192,7 +196,8 @@ function add_element_dofs!(dh::DofHandler) dh.dofs_cells = reshape(element_dofs, (ndofs * n_vertices, n_elements)) end - +# Creates a sparsity pattern from the dofs in a dofhandler. +# Returns a sparse matrix with the correct pattern. function create_sparsity_pattern(dh::DofHandler) grid = dh.grid n = ndofs_per_cell(dh) diff --git a/src/Export/VTK.jl b/src/Export/VTK.jl index 1b8a23c775..aafa66ecef 100644 --- a/src/Export/VTK.jl +++ b/src/Export/VTK.jl @@ -94,12 +94,12 @@ getVTKtype(::Lagrange{3, RefTetrahedron, 1}) = VTKCellTypes.VTK_TETRA getVTKtype(::Type{Line}) = VTKCellTypes.VTK_LINE getVTKtype(::Type{QuadraticLine}) = VTKCellTypes.VTK_QUADRATIC_EDGE getVTKtype(::Type{Quadrilateral}) = VTKCellTypes.VTK_QUAD -# getVTKtype(::Type{QuadraticQuadrilateral}) = VTKCellTypes.VTK_BIQUADRATIC_QUAD getVTKtype(::Type{Triangle}) = VTKCellTypes.VTK_TRIANGLE getVTKtype(::Type{QuadraticTriangle}) = VTKCellTypes.VTK_QUADRATIC_TRIANGLE -getVTKtype(::Type{QuadraticQuadrilateral}) = VTKCellTypes.VTK_QUADRATIC_QUAD +getVTKtype(::Type{QuadraticQuadrilateral}) = VTKCellTypes.VTK_BIQUADRATIC_QUAD getVTKtype(::Type{Hexahedron}) = VTKCellTypes.VTK_HEXAHEDRON getVTKtype(::Type{Tetrahedron}) = VTKCellTypes.VTK_TETRA +getVTKtype(::Type{Cell{2,8,4}}) = VTKCellTypes.VTK_QUADRATIC_QUAD function vtk_grid{dim, N, T}(filename::AbstractString, grid::Grid{dim, N, T}) diff --git a/src/Grid/grid.jl b/src/Grid/grid.jl index 66e1a3c04f..6293367f2f 100644 --- a/src/Grid/grid.jl +++ b/src/Grid/grid.jl @@ -56,11 +56,9 @@ nfaces{dim, N, M}(::Type{Cell{dim, N, M}}) = M @compat const Line = Cell{1, 2, 2} @compat const QuadraticLine = Cell{1, 3, 2} - @compat const Triangle = Cell{2, 3, 3} @compat const QuadraticTriangle = Cell{2, 6, 3} - @compat const Quadrilateral = Cell{2, 4, 4} @compat const QuadraticQuadrilateral = Cell{2, 9, 4} diff --git a/src/Grid/grid_generators.jl b/src/Grid/grid_generators.jl index 19d5085c08..5ca18b2764 100644 --- a/src/Grid/grid_generators.jl +++ b/src/Grid/grid_generators.jl @@ -210,7 +210,7 @@ function generate_grid{T}(::Type{Hexahedron}, nel::NTuple{3, Int}, left::Vec{3, [(cl, 5) for cl in cell_array[1,:,:][:]]; [(cl, 6) for cl in cell_array[:,:,end][:]]] - _apply_onboundary!(QuadraticQuadrilateral, cells, boundary) + _apply_onboundary!(Hexahedron, cells, boundary) # Cell face sets offset = 0 diff --git a/test/test_grid.jl b/test/test_grid.jl index 5c1367acb8..08aff941d1 100644 --- a/test/test_grid.jl +++ b/test/test_grid.jl @@ -17,8 +17,8 @@ end # VTK types of different Cells. - for (dim, n) in ((1,2), (1,3), (2,4), (2,9), (3,8), (2,3), (2,6), (3,4), (2,8)) - @test getVTKtype(Cell{dim, n}).nodes == n + for (dim, n, m) in ((1,2,2), (1,3,2), (2,4,4), (2,9,4), (3,8,6), (2,3,3), (2,6,3), (3,4,4), (2,8,4)) + @test getVTKtype(Cell{dim, n, m}).nodes == n end end # of testset From 237a4bb7f6cf7774e3a1595ad73857c582ee9236 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Thu, 23 Mar 2017 16:01:18 +0100 Subject: [PATCH 16/44] fix generator for hexahedrons --- src/Grid/grid_generators.jl | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Grid/grid_generators.jl b/src/Grid/grid_generators.jl index 5ca18b2764..f1e7c189b6 100644 --- a/src/Grid/grid_generators.jl +++ b/src/Grid/grid_generators.jl @@ -215,12 +215,12 @@ function generate_grid{T}(::Type{Hexahedron}, nel::NTuple{3, Int}, left::Vec{3, # Cell face sets offset = 0 facesets = Dict{String, Set{Tuple{Int,Int}}}() - facesets["bottom"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[:,:,1][:]) + offset)]); offset += length(cell_array[:,:,1][:]) - facesets["front"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[:,1,:][:]) + offset)]); offset += length(cell_array[:,1,:][:]) - facesets["right"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[end,:,:][:]) + offset)]); offset += length(cell_array[end,:,:][:]) - facesets["back"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[:,end,:][:]) + offset)]); offset += length(cell_array[:,end,:][:]) - facesets["left"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[1,:,:][:]) + offset)]); offset += length(cell_array[1,:,:][:]) - facesets["top"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[:,:,end][:]) + offset)]); offset += length(cell_array[:,:,end][:]) + facesets["bottom"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[:,:,1][:])) + offset]); offset += length(cell_array[:,:,1][:]) + facesets["front"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[:,1,:][:])) + offset]); offset += length(cell_array[:,1,:][:]) + facesets["right"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[end,:,:][:])) + offset]); offset += length(cell_array[end,:,:][:]) + facesets["back"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[:,end,:][:])) + offset]); offset += length(cell_array[:,end,:][:]) + facesets["left"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[1,:,:][:])) + offset]); offset += length(cell_array[1,:,:][:]) + facesets["top"] = Set{Tuple{Int, Int}}(boundary[(1:length(cell_array[:,:,end][:])) + offset]); offset += length(cell_array[:,:,end][:]) return Grid(cells, nodes, facesets=facesets) end From 7c7c0bd50773a6cefc84368138bd9524e6f4fa5b Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Thu, 23 Mar 2017 16:04:34 +0100 Subject: [PATCH 17/44] update with a picture --- examples/cantilever.ipynb | 93 +++++++++++++++++++++++++-------------- 1 file changed, 59 insertions(+), 34 deletions(-) diff --git a/examples/cantilever.ipynb b/examples/cantilever.ipynb index b789aaa69a..01889d7f8e 100644 --- a/examples/cantilever.ipynb +++ b/examples/cantilever.ipynb @@ -1,19 +1,22 @@ { "cells": [ + { + "attachments": { + "cant.png": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA/MAAAIgCAIAAABGQ67BAAAgAElEQVR42uzdeZRcZZ0//s/d91q7lt67s4eYgAgMiwiDEkQIJMBIRAQUGQMDiIPOccHhuBw1gzIMKBiWGUWEwFeQTQUiKPyILAEEsofsvVVV1373/ffHrVSa7iRERQX5vA6HU/3UU7fuvV0N7/vU53kuEYYhIIQQQgghhN7lSDwFCCGEEEIIYbJHCCGEEEIIYbJHCCGEEEIIYbJHCCGEEEIIYbJHCCGEEEIIkz1CCCGEEEIIkz1CCCGEEEIIkz1CCCGEEEIIkz1CCCGEEEKY7BFCCCGEEEKY7BFCCCGEEEKY7BFCCCGEEEKY7BFCCCGEEMJkjxBCCCGEEMJkjxBCCCGEEMJkjxBCCCGEEMJkjxBCCCGEECZ7hBBCCCGEECZ7hBBCCCGEECZ7hBBCCCGEECZ7hBBCCCGEMNkjhBBCCCGEMNkjhBBCCCGEMNkjhBBCCCGEMNkjhBBCCCGEyR4hhBBCCCGEyR4hhBBCCCGEyR4hhBBCCCGEyR4hhBBCCCGEyR4hhBBCCCFM9gghhBBCCCFM9gghhBBCCCFM9gghhBBCCCFM9gghhBBCCGGyRwghhBBCCGGyRwghhBBCCGGyRwghhBBCCGGyRwghhBBCCJM9QgghhBBCCJM9QgghhBBCCJM9QgghhBBCCJM9QgghhBBCmOwRQgghhBBCmOwRQgghhBBCmOwRQgghhBBCmOwRQgghhBDCZI8QQgghhBDCZI8QQgghhBDCZI8QQgghhBDCZI8QQgghhBAme4QQQgghhBAme4QQQgghhBAme4QQQgghhBAme4QQQgghhBAme4QQQgghhDDZI4QQQgghhDDZI4QQQgghhDDZI4QQQgghhDDZI4QQQgghhMkeIYQQQgghhMkeIYQQQgghhMkeIYQQQgghhMkeIYQQQgghTPYIIYQQQgghTPYIIYQQQgghTPYIIYQQQgghTPYIIYQQQghhskcIIYQQQghhskcIIYQQQghhskcIIYQQQghhskcIIYQQQgiTPUIIIYQQQgiTPUIIIYQQQgiTPUIIIYQQQgiTPUIIIYTe8+bMmUMQBMuyhULhAN0KhQLLsgRBzJkz5x2yzxNb/ho7NvVdECZ7hBBCCKF3Ot/377jjjgN0uOOOO3zfxxOFMNkjhBBCCL2jnXbaaStWrPA8b5/Pep63YsWK008//R2yt4sWLfrkJz+JvzWEyR4hhBBCaLJly5YNDQ09+uij+3z2V7/61dDQ0KWXXvoO2dvrrrvurrvuwt8awmSPEEIIITTZKaec0t/ff/PNN+/z2VtuuWXatGkLFy58h+ztrbfe+r3vfQ9/awiTPUIIIYT+AR1guufBzC6lKOpzn/vcqlWrtmzZMumprVu3Pv7445/73OdIch8pyDCMb3/72x/+8IczmUwsFjvuuOPuvffefe5Ps9n82te+9qEPfSiRSKTT6Y997GPPPPPMpN2LXhWG4U033XTiiSfG4/E5c+YsXbr00UcfDcOwvanrr7/+K1/5CgD88Ic/JAgieqPNmzdHj3/yk5/8SWfDsqzly5cvXLgwn88rinL88cfffffdE9+urVwuX3311ccee6yiKF1dXaeddtqDDz64z54Ikz1CCCGE0N/NZz7zGYZhfvzjH09q//GPf8yy7Kc//empL3nhhRfmzZv39a9/3fO8Sy655IorruA4bunSpV/60pcm9Xz22WcPOeSQ73znO7FY7Kqrrrr44our1eqJJ574f//3f1M3e+65537jG9/o7+//8pe/fMwxxzz++OOLFi26+uqrp/Y88cQTb7nllltuuQUAstls9PiYY445+KN++eWX58+f/+Uvf9n3/UsuueSyyy4LguCTn/zkRRddNGnG8KOPPjp37twVK1bMnDnzq1/96ic+8Ynh4eElS5Z8/OMft20bPz/vViFCCCGE0DvM7Nmz95dSAGD27NkH88Jzzz03kUjout5+1jCMVCr1yU9+cuqmqtVqT08Px3EPPPDAxA0++uijgiBQFNXebLlc7uzsTCQSzzzzTLtbEAR33HEHwzATtxntzKGHHjo0NNTuuXv37nnz5kWXB/s72EnHeJBno1ar9ff3C4LwyCOPTNyxe+65J9qx9ka2bt0qy/Jxxx03NjbW7un7/k033QQAn/3sZ/ET+C6FY/YIIYQQ+se0bNmyer1+zz33tFvuu+++arW6z7mz3/rWt4aHh5cvX75kyZKJ7aeddtry5csnDnh/61vfGhsb++///u/jjz++3UgQxGc+85nLL7986pavv/76np6e9o+9vb3f/e53AWDFihVv7/F+/etf37Vr1/Llyycu+0MQxNKlS7/1rW9N7Pnv//7vHMc99NBD+Xy+3UiS5OWXX37VVVfdfvvt27Ztw8/PuxEme4QQQgj9YzrhhBPmzJlz8803t2vHb7755vnz5x977LFTOz/77LNROp/61EUXXTSxzH316tUURZ177rlTe1544YVTGw8//PBJLUceeSQADA0Nvb3H+9BDDxEEsc9Co8997nPtx2EYPvvssyeffPL4+PimKT72sY8BwP6WFULvcDSeAoQQQgi9M4VhOGnm6P6WqN8ngiCWLVt21VVXvfDCC0cfffQrr7zy4osv3nzzzfucjbpu3brOzk5FUaY+pShKPp8fGxuLfty0aVM+nxcEYWrPwcHBqY3xeHxSSyaTAYAD3yX3zzgbhUKhs7NTluWpr00kEp2dndEhlEqlarW6cuXKlStX7u+92geL3l1wzB4hhBBC7zgdHR0AUKvVJrUXi8U/aTsXXHCBIAjR8pc333yzLMvnn3/+Pnsmk8nR0dFGozH1qUajMTHpzpo1a3R0VFXVqT03bdq0zwuMSS3tqv2392zkcrn9HUK9Xm8fQiaTSSQSX/rSlw5Qro2rcGKyRwghhBB6e/T19QHAK6+8Mqk9Wlny4CWTyaVLl953331bt269++67zz///H2OygNAVJs+dS0dALjjjjsm/vjBD34wDMOf/OQnU3veeuutf8ezccYZZ8B+yvcnNpIkefzxx9933337vAZYsWLFwoULy+UyfgjflXAS8btOpWJs2VJ+/vmhX/96y113vXbDDc8tW/bIKafcOW/eD2Ox78Ri35k374ennHLnsmWP3HTTCw88sGH16t1bt1ZU1cZThxBC6N3iV7/6VZShJ65ss2HDhoGBATjotXEiL7zwAgBEi76/9tpr+1tYplwud3d3syx77733BkHQ7vPII48IghAtfj+xpyRJjz322MQlaG655ZZUKgVT1sZ5yzVt3nJtnIM8G7VabWBgYOoh3H///RzHRcvjRC1vvPGGLMsnnXTS6OjoxPe9++67WZZdtmwZfgLfpbDO/p3CNN1azarVzIn/3rGjXi7r1aoZ/VOpmNWq+ZabWr9+fP368antsszmclIuJ+dyUldXbMGC3KxZ6YGBxMBAAs8/Qgihd5RTTz116dKlK1eunDNnzsKFC6dNm7Z+/fqHH3548eLFO3fu/JM2deSRR77//e//4x//eOyxxy5YsGB/3dLp9P333/+JT3zi3HPPvemmm4477jiWZZ9//vlV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" + } + }, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![cant.png](attachment:cant.png)" + ] + }, { "cell_type": "code", "execution_count": 1, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[1m\u001b[34mINFO: Recompiling stale cache file /home/kristoffer/.julia/lib/v0.5/JuAFEM.ji for module JuAFEM.\n", - "\u001b[0m" - ] - } - ], + "outputs": [], "source": [ "using JuAFEM\n", "using Tensors\n", @@ -36,6 +39,29 @@ { "cell_type": "code", "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "hex = false\n", + "geoshape = hex ? Hexahedron : Tetrahedron\n", + "refshape = hex ? RefCube : RefTetrahedron\n", + "order = hex? 2 : 1" + ] + }, + { + "cell_type": "code", + "execution_count": 4, "metadata": { "scrolled": true }, @@ -44,27 +70,27 @@ "const dim = 3\n", "corner1 = Vec{dim}((0.0, 0.0, 0.0))\n", "corner2 = Vec{dim}((10.0, 1.0, 1.0))\n", - "grid = generate_grid(Tetrahedron, (60, 6, 6), corner1, corner2);\n", + "grid = generate_grid(geoshape, (60, 6, 6), corner1, corner2);\n", "# Extract the left boundary\n", "addnodeset!(grid, \"clamped\", x -> norm(x[1]) ≈ 0.0);" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# Interpolations and values\n", - "interpolation_space = Lagrange{dim, RefTetrahedron, 1}()\n", - "quadrature_rule = QuadratureRule{dim, RefTetrahedron}(1)\n", + "interpolation_space = Lagrange{dim, refshape, 1}()\n", + "quadrature_rule = QuadratureRule{dim, refshape}(order)\n", "cellvalues = CellVectorValues(quadrature_rule, interpolation_space);\n", - "facevalues = FaceVectorValues(QuadratureRule{dim-1, RefTetrahedron}(1), interpolation_space);" + "facevalues = FaceVectorValues(QuadratureRule{dim-1, refshape}(order), interpolation_space);" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -77,7 +103,7 @@ " Dofs per cell: 12" ] }, - "execution_count": 5, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -91,14 +117,14 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - " 0.129785 seconds (30 allocations: 65.718 MB, 68.56% gc time)\n" + " 0.228741 seconds (105.41 k allocations: 70.145 MB, 13.50% gc time)\n" ] }, { @@ -133,7 +159,7 @@ "\u001b[0m" ] }, - "execution_count": 26, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -146,7 +172,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -161,7 +187,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -177,7 +203,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -186,7 +212,7 @@ "doassemble (generic function with 1 method)" ] }, - "execution_count": 9, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -208,7 +234,6 @@ " \n", " t = Vec{3}((0.0, 1e8, 0.0)) # Traction vector\n", " b = Vec{3}((0.0, 0.0, 0.0)) # Body force\n", - "\n", " ɛ = [zero(SymmetricTensor{2, dim}) for i in 1:n_basefuncs]\n", " @inbounds for (cellcount, cell) in enumerate(CellIterator(dh))\n", " @timeit to \"assem\" begin\n", @@ -253,7 +278,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -263,11 +288,11 @@ " \u001b[1m------------------------------------------------------------------\u001b[22m\n", " Time Allocations \n", " ---------------------- -----------------------\n", - " Tot / % measured: 27.1ms / 91.2% 4.32MiB / 87.0% \n", + " Tot / % measured: 3.08s / 8.92% 85.7MiB / 10.9% \n", "\n", " Section ncalls time %tot avg alloc %tot avg\n", " ------------------------------------------------------------------\n", - " assem 10.8k 24.7ms 100% 2.29μs 3.76MiB 100% 365B\n", + " assem 10.8k 275ms 100% 25.5μs 9.30MiB 100% 903B\n", " \u001b[1m------------------------------------------------------------------\u001b[22m" ] } @@ -280,7 +305,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -290,14 +315,14 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - " 0.090020 seconds (65 allocations: 45.675 MB, 3.28% gc time)\n" + " 0.536346 seconds (246.39 k allocations: 56.317 MB, 2.40% gc time)\n" ] } ], @@ -307,7 +332,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -317,7 +342,7 @@ " \"cantilever.vtu\"" ] }, - "execution_count": 30, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -330,7 +355,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 15, "metadata": {}, "outputs": [ { From 3424eb6a8c5b7c35d971c334a6f4567b874b47ab Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Thu, 23 Mar 2017 16:05:32 +0100 Subject: [PATCH 18/44] add the pic --- examples/cant.png | Bin 0 -> 175689 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 examples/cant.png diff --git a/examples/cant.png b/examples/cant.png new file mode 100644 index 0000000000000000000000000000000000000000..7de4efe1110caab0d0a4bd57a010f8a114fdc797 GIT binary patch literal 175689 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ɦV|C7Cw2lxJ`=^^l%h2DYJYpHz$l5R$j-^BfRxb6dEMe?wkYif~j z*c3K%juyaeEMvZ&Qs+KDHvIX_NR)#^Wym#W!(sWZS;8)DP(5jP-D%CvAuWoEK~xB7 zgAYLhY`=uEgmZ^Gr6^iO4q-g1mfMgEayQy9{R8*nd~GS_#N87K^f{tjK)+D_B7Q6X zhGb-PWhEo&T7iJ(H1Qw1^>fdqq~6MxAyVsy6F;^=Vapfz5Niha+PU>5@%+wx&&mwW zs`a*{#wA0bz9?{kuzc(sq8uIbNZ=gSG{cW$AkQaY>@8&>{Y+>U&wLKZ z;l^*@KTUV^wX}pp*d1#CfG{(fpK$BxW6)IN-yKVf@?Vfs0Fj3J88RILOq{dFVu^_m z+nhH4(i`evitY6tHZr8tXbz7c&L!sSfU^b?x-YaE4+ji=>K=Nx`KTQuN8%r!==)5m zb9+oBUxAah$s>i1F??OGUB>T!D+BDC)^E=L1JeJmdl?7D>kT-ubq%<)WENs=`8a8@ zluth8sE&}+^Y!hgw6I#K|bEpW%!9sN?Br~Q#V2gqbPat=mpv7 zmxWX~u6f9ephAZSL7S1!AGv1NSW2JEjDBk%$mIuG4WslGfiXQ7O5GxE<+&ZO*M9Tf z%}ehC%CJB6OwT9q`5BJK-FkBk%~*gN-8pc=Iqbj}pApi$Z$~0F^ z_$F7#jBB#ePXzc7q{l$Y;U&P&Kc5k6s9P>CCz+--5tw5<U_*~ch|9RGA?Y(R0S%};F?d6F0bxIb(OJuG@+{KK9r~*Ea_wSi3 z)=TaGT=l`3A%T{S@-^YMs3vfadBLtu9@e9=SmwNhE0dZoU0BqKEJ@VrvWx=qt>rcl zoy@NN{>Tul7A03OAlBpHSkeNWAl+f5pajBtWE>XRaJ@Av?(3K zOH6(h9`-)E@NdSf!kSWB#HNE)`{8EPS_e-InDu%7L|96kYVzkJ(LQ64SQrI+o|o`_ z!$BAJ*d3aFaDlO9`ZA|P;gGzHi&|}{A7JOcszrPtHqHcv0WJUlh_~iTNg`|yc+|dJ zT}$uTW}QCC5?g@{j$2Vh;Q8FyE$3}qfb`cjGxbX*X#Fl}6v8m6>9pSKr*F?psWwnq zR{SE=a{RgtRaz#sJ)>MJW-@uPyFOpusLFI#6KqDTQD87^)j z7sCbFE^ZQh4WBCL0Te^4%cY)fk2({3MTH9+4^oo--^fj~cf}7Oh92F$s#2Ybt6~Y1 z#gT<9rZ}sYO+A&T^vqgR8qeHlaxp)juhH+g8nH|t!u}^~Y6jb_@4uq`ho-|zp3lCx zo%9d1bKXBrbhx~|=)5;V1|Iya!6395$zp^uN{J?81-uv|GHw#!T-h){kx8r4xuRsj zb!(8A$eMcu=ucvW>FgZ12lZ4(t5L;;obqD_h(5d-{d*Xq5@(FNpoA)JO=BT#UfnVb z{c||aezU}PEDJ`sObi|kqzY)2N~3+zz-A`=34*dYFnhq={a`u8AnidCADG=!uT&ut z2Qu=f_vR91{(lTY9}I-t${kRFC}w#SU0ViEr~i*pqzbMq4pQ0~bUGbw72p_x&v~9K z^OQD|Vv|LHa|?)aC{+Rnts(nd-K9+|BwgXAQA|v`Vea+=mVZCnFDT#v1#)Kl>w_MI)wzPCG25cAto^* zD-ucue~nVam|TaLL=*7{zFwtBoIj8MP)Z&(>IG5Q?Stx()h)Q+So}6V`0OLWrP*l-~fFvVaBIQFH&#olg39h`;$Be87~D<7LZqG3urdtPW&`z(j=*3 zby88!d5x%sXezKsQBw)0o{r0pC`(^>Ig=su;bxzO<{l|azY0ahH{(nug91QK(&(@Ix85y~n zoF*c0nl1-Ehn)T4fS)~>4dw5%6(T}TAPI+5OAN{6i4^nX*t~4KL3QDbG$nYpoq2!O zr6b_avg)S)ddmKFd(r+=uHa#Us%M%0<9bIkaN#^yJ$wN=VxUMu^PnP~U!)9~MZ3B~ zy%lbTkE|cU-OtK#lwf_}Pg5sNr%eBV!@>_8|!mZaV7nrF%$6*_L=Af$c z#>>fvzpU#;Iiai0o27kxI8L=&!nk?QnY^nDfC9Y8UWyohEF<}T0{hzFwq8GfU2m@c(D5{v-R7&n<G z5hoKb7e--1Ruw`wOH1^9nie`pEne#L?D5YlY{HDe8Z$-sz)HhBuuP$9UVS2_v=s-9 z%eZu1Sgn}EHo62^?);t_x{c+?DF&_AM4L?V5PMr51umQ*HI$KVGKMVLO?+1JLA07` zB4h0UIR#N@U6bFu-Fg73(IFO?O_XemvwPTOSze z@L{Mlu5sSR#v~0j;YU4gT?#|Pzi_RxDrN|auNcrRyUJ2z{YvzH}P5A=8B4)Lzu1%NoZjTnP!c5qIgr^$l5%6EW zO)CcI1@vGi$#>ih!!-c?t(~&&l5{!KeHBVBy2zw{k^t}|uFyMPN4ABavWOR{_?3e` zRO8$P7(8OUDFR)L&NF5h_1#D%@WOObF(}|<4k<{5>4ti{KWImxpi2)k@&ao6)woH9 zm8|OU5;;w+9LMet)SJW{eBWG22OSHOQM*VG?1t&fzql z^}+uX9~l10heUN+>vu%2)lq>7?UhmT$n;RW0I@E(tU!4Fw}FLX1)K3sI)N+mH;QkU zS=#Lu6IJ3`nJvCAyz!qw-mx$-gcL*5XSZT>Fy|Aj`wtm0`yPn&l|&^J$Jf*oe@18P zero-~A1wk?8{p_0bY4N1fy1Z10YZWY4Y7^=r$(^8*T%mm$Qx~auqcFVP!6>^?Y)9d z!N2EC&dF>p7tc-HJ;d&OIh0Z@X>Q~<)QC1*DU20UnUZpGTijsJf@9&sylh;0RGl&k zl%-$;yIwE#k2?^$ z+&*kQ_h>Hh@y<;-*_?GWjk^~oWwz4_Q@~OiJyR|tFp6gV)E`Grd?HTn^n84%5tr^028EI4M`lRiBZNsSI{_83t~AhwP(Z0LUJtp1CkWsrr!r(q%xsD(w} zf&90sy&mc#W|-iI9)PgCf4>g#WwQzMo2AS3Qp~A-=*1sXNxx+OW(V_OdEao}#8CpF zqxWq`h3mMle8lP2Rw~kYqkqHbf~A3Plsd8w56AHWcf*K?nNM~-do?lC642}ko2V$w zzE8LI>G&$OS1)$8U~To*3abY27hSB1j;putui$%BpZOab)RX&qPn)EZs^*VM?aE&ll(~{67=Dd8S}w*_x+%* z+uitA_W?X<{&b4SA}NOKFdYSo0zXEfH1iY+6&`++PeRE*2K=R!?K2t(E$-C@ZULICp}Zp!A>*IgmacM8o@Rx~o)RhT)UNlVAku zea~PYZgJtkHesdhc`8sKi?cu$dSnz!M4zMTKQB0=Z045DC1qH#p6Ex=uUvW=`=DMd z{RSU#J786m&%tFE)#ie2)nCiQB~}f)*+XQFwXkFVk0Nw_6dWffw3{ zJ{nLD*Kc+m|A*UTiw$2%&c>-#J}m*a!3BpIg4N?xRj3P&K_lR&zVk5c9Xa`m}c>p&=38rMHzO z{Nf}W%o~NpalpsBQji~iI}$-1n2IC+E_&{ruOg9;?O8FW@g)yO&jegG48=`&sX8;o zW#A0FqN6vA4Y&_%a1<8+b`f#m=Bv-CycO`;9igQ8*pRvSaeMi3FY*;dg(PfB9UW{6 zFW|fT2b**e8P*QGw(p#PtvWNKB@%#{6hw-rOYFWc4_E4%o`QqJq zbRy78h)>+$-kciG@;Z8$Nh#sgS}Ki)o#Fi1Ye9m1DtW2;pP9_%h4B>lCdCYgYVngu zYRl0wX_2A7f5u)m_1Z=EQsiZmBa@uxNmD)2lO=}CFjaFD^kJCgeW2e{$>)AZ!UGV( zSep_;J774G|E2Q5#8A%T#)zF1`=zBT^K!2T{UY@EMb1TwH?*1a!>W;3ey{~H#X;W| zlKUuBV172%@h4gX#;9A>S};4}F&ht5k(_dOo;sBZWCrjjLV;Er9EJgGrjg1FXu7Yx zCS=;1n;gF*yO1J3^qkMcdYLbMn6r|mou4URw!GI_(U;1+B}9{!FSiyH48z; zTySGH)oO|V+oP(ZiY z7Zr87xOSO%=0Ddg0s?q~tOVSw7zcQh;@x11WYVlhIzhwud+(-{p~{tX_=h}#Qf)PT=<%4N&XENJf zN7;`~p*IjQAo2bmX7eXdt32TMJJ^|Gt@Oo>A}yTBW!qMc)2|Ae|un{lF5PN zk9)|Pvl?H_`cim8lmh3!(tuDOCmutZS|s7J%2e6e@qou)B^AptCTu-;m)CO5htElt z`MwgSAHh5ebOhKq_^?6$?F7bZ$yrd5KZa=rEBCkT;G8-)M7^GlHz6|DK+-cg@l(8B zvw-F~^D3)w8Mdan>|-XM{n0qVMkX%G9m)YW6T2X`;PJ`PmOhkWqGwA})f8In?F+Wa zw#93|{8It;?hjukPJBw=bvINLo04Km`_n7cnaj*KyLa{pt9nOb$om3|O>*)7i`}MO z_YW`zUd|^~11P6!>0MI^?{$p^op9*vc(CXI_?~z@?%BFgzAZ$>D<1gBc67~i{mZoV@~?;3O% zMFpw3E2}{+tPC!VA_eyguRY;_2B!-zWRaIZkFOMLyacJ4KfMHHf>b6aO6q3^M}>+K z-@YM3Z@b&wuGrPIWaGK|9Jt9w!o{gGVVA8LSyt8yHFdO2Zm1iwEW{ChTv!?tV5d53 z{qQ+}7JHfJKaj1J-6FBu_K0z`!ap~u@a;{vND00Aig&dVO}O;W-%4iXj6cE54rNh@ z1a0c9T2nT1e1v9qIyHQ7=9^Ub15*UE2uLKu(keC-OCq6 zXblhXMZTByy8*ba-_A^9Ic-rpd3yy5W)IcJNT8I%urZktckv2|@u5q>38IotS>$h` z2nC1?_TJ~Ikz!2LjF7g4zh1<_^ff@ywWko`7UWEVOvl==%eWvvI6=GR#fYq#d%vRg zM+ft)ouP^tQCmBxWHiob&t?1CH<%g+`FqoU;>Ur^4i0`y zs~S{_4h8EaK*w~1$HedErDZM;p?2ktB6=Rz(!dch7G&WHFzdrC0@^DY3zy$c(_+Zq zizfxKJkbiQYfP&pevNpX2~)Ao*c{`R?8>Ra!72fEy#4)w6S|a^p<;vC2^Jzjg2$T% zBdxM+(SVBoz!rAD;dq~fcjRa^8Cm+2~wBgqV%DXQOLS677@jy0dC12?oE0ZTMOw<>}-OhMPv$gI9UiFILjSL&7hWpF5;_ zO>$>o0w>bB(kMx_j%MEBAl(j)@-_UOt$=g-N~3B~GZ5rxUm>u*2@I$0J~q7Airamn z*Ff%jh}P;-d`ynOZ>5%FUp0duldo)Gbv62MHn&+#u}^iocS0_9R9?PRR%~)>g6nm& zgTV7L?d~iHhF`lxg>5yQoGffPxvZ-xx>6G2!Zfy_FgaA!u{AfpB@V39lnqSNB>;gH ztZV3LX>%#XI)Uf;{Mo)pp*L`JH0#0qY+I!?{2!Q$I<-6 z{5)L?%=s^PifmdnO4QaJVm4`$&?Z#^>H;A$p*MZna*g6i z{dF_SrTddi=gl9q$P>kR0vGWU{6u%e4yhYI*Pu<+=443chlR*)n1J@s$BDx03B?@M z(#XG>A`mG-a#vx2qhkW*>0vneJM$4m1=4u`b2|%s*2mB=G*8+v#E=kq| z-6wE9sIbt4g_fU};MyxrGB3YI?Yfc3rt;5Z?Pa(`*AM@jj-_S~^cAO|^)W1}Jx68w z2`Porug-H-Fw=_8^&U_Ie7 znUL?@RMvCt(00?!qHR^iDL-=V*`1<G<_;Hj$~54+sABGt^U=2 z_p6P#kDHFLESBDg1(mYZ+r)VTRP1Tyr0))$XLG*pst!-FsPF zyispU-&OfF?(9f$)z`7@OMq5GAzgSJSP&2GEcd9sXiOOQD2>qCt1bCMCHR%dl^~{=kuHuv@tJOXOIr z&H!3_T)lm@KYn_cYj1;I3{^E9lqPC@(eZe^IreW4SZnjstGD}yx$4|U^3K3*;^ug% z@9*DX3)g2e*?s1QW$ZVIr|mEP6R0oSL6|~+EXOh}v;1xj%Bpr^fRODq{uk&aV3Pde zeK=bI=CWs4>&{mNDx9sQl{fAk7n+{bHZod$j%2>nX#r}26y%14~7;>Q1FPLm@^Y4aO1?ci(&OD;B=QuJ-winy*a}!OmOtnbs1hgbhSjA;xPIo|P&Ey&Pa`~Bcg5zyc%*`G zm_6|>6ht77u#9H6wVr8!h(gs34QXVmQ@|ojZxZn(838$b<~DYllDLY!Bn9H*8~gf1 zDho}!Z`->Qvvt43f7)E-=Oo^_jMOFZnf!hW`Yep__Cl<(=SpS~Qr~iw8TPq;FifWp z_E=kN9^RlmxPQxOzQh!!e$rZ#SnuO`b25ZOsp-+`90kTG_(|kjTT#Xch|U%i2`?o!$Ix90N8MB#t|(!)Kb+Tu7^nKE;>oz|c>%gpNC zIJ(`zcsf@0%jmRi>eVSD|rbL8zt_}%kwk@|6WLV3RAoJe}?W3i5z}m)6@=pUV;MHNd2SYks!|PMru!g4ffs)dB0@kR&A~f&N*MSa!TnBULnI z;D5iZqj)!6#6dXn{PY-{tPPZ^0M0=@x0B|V^|sa`Js+OfpAuYTIOlZnVXA6=5mMeV z9WN8X%)t6cONbnI3ZVMTUNX6D1s zk}5(3G^*(S+VZ|mw7iE$aV5I^St|}fLBU=mpjW9g%nUa1Q~{?5)WJEYujT=L zIIL>F-vO@$ygWf;x3{;K9NP_;@K1pQxy_d3#h8ve3`5OScRj~8m z=DaQ#Xod}l#$^5+Q>cmQG7Zpd$eB^MS%-YnmvKiVy!b>eeD(KdA%omJ)O=nEIR^^T zEf4$inPqcQTMEcPFH$i;&wwE(yXFla3%5agk45phKS8?&h7oCGP=k6Y{N9?w<84-C zgm{0^;a-%uqxiVk3I>njl+}B=BJ10S3rJn|y^i_H4Jf$fdQ){QLaq*P?29QHJ0z;A6f9Ct%cg1YMF;p3lig#rB}&jw4(%7ao#g z+aD!}jK}Fhtc!Md%RJ%ml2ZMP{%JC%S3K6%y9o@Vo7k;TSRdmow?l8vUSF~^XHZ3D zQZ{kkOa|BWz-G=1bj3s{#Kne!O@ln7nxG@+_Nl6MqiKuH)fVhx#?wQql7zPj^YcwG zm)-Pk?23ijf?erA_+G!Vl^M_ULJ9HvX+-G2ESLGhEu620|3at#-RHBbeXr+(r=T?U z(Q(cOx(hdq@xPJ;U};+piVV%=iPYmN5<*mT%wR+$&idt6muBtfNjsJn=6uziMO&_l zeN<9@=c72e!ZCrG&;73e>{K%{GE%dwZdgePxumqzg)alIij9j4F}tp=g)UpO%+}Uc zN=m9Gz?bf|QJ&mBwqI8`5=8w~rpuqPk$a(_B?HP?;z+eXv|PdV5}tqjS$q~Wf1_2m z-Tw)wJOI*PTwDYVkBl%gGglb38+wH!0Qg;N?6!(56M>C9tGFVDQS`X{o|NIBI?^q~ zE>7NqLqjE9ks*AWSA{|nxAbQY3l7S!Y%t2#Z0-s11giM3U>O0?ijm;5vyT~D)jKYv zhqiiHSAkzpm#aoD1d|lMc$0#dt`j{Fm~czGFgk@Ki1@?BHF;sPc74L(O{M4q<$LLC zP$F`5YHCb%%8{yTjH#<#in)Mgs(g>?*Q20eDS_i~cxDPVp-V02O}ncvDFpAQZ?0{TKMLShFX5<3*jH89N0e24YHwM3 zS}eA_ zac5ewJ^1+@W7_VU*#2jEel$PX`>p{1$;q?Rdp|I7K7W6%>~T)lH|*3XQD=xBFzYRw zo}LCd@nx7hWyux@kYZxaf(!$mu6MHnNIOpbZ~0fVrY0uN0XNQDMx%Sw_SjzoW=p^j z*C@31!DoOv8J7&`V(+p7p6_2R7oinZ(=q;6d6%R7r)WlZU1~~#)X77RP5U&l(r%}% zx2UWTfXaJ5xc48+T<|&dd(80MQFU$69&wINgH| zxS%AW{Cg(V6>xw_NNc{LwQte zt6jGAD zxhCqikg&ovvMa3hcrmoP(%hPL_akXz?**DQQ04DlHm=VoJ#Lio%z6K&?t8%3hjVK#L(F9>W$dFoo503lsm%}2l+p&6 z?T%)=GxCM}->%gT$u&qGX9~GVzb7M`Q??6LNp1)puutN&#rCk6oQfIhB)m6O@c4Kf9=P+d4JPA{L&wl5+&hXU4%`aD)1R) zTxanEQOswWGU&nx&F>auP#wAxOJ`#O`fsB~*RUViv#`8KihekpbK}t531kL5aP_rM zU))|pJIbG=Pi|Cat1wyWgXL?*?5XDO3@j=kgB%BcY0JW=Yuy*&C zn-rME0hn?a!C3i`u;$(>R(dO%|HSzHPV?FmOQ1osM+T3x2{3#)wqE0tg-@-mz4YKH z^_x{ok$P{%$+0w^|0U9@^gUbe1ja7e3Qgh1qnfXNUt~8h{mSp# zn*Nfm3qzclxV)HU)BA-QH9MXDgoPY+8^I{}Ks+7pA0O5!KyH#h{E#2RR^jdOB*@v3 zWH9{SmDrEmpWZ(&syblYgF3X)vTzn{-rKyry2y$DIQ`2FRR-Um`?@){YWAI)S6nd9 ztr6{ji9;OMQdr+-0+pK|3^=9oJ*VG%!kb8@&8R6*ME&X1-wS|sDg=yt(@j6Ir&${f z!7r;*h3L!Vvy~f2wXig`1a2efs$u2@_vCS8d>?{I4kF`|yMP~ld3!Y#l7yO7zPs_l5@wdujktHUXAoknv_oTCzN=dy;BbR~!kzX^m9uArBO`yge z?_x7Eq8M@WAu6LjcD`*}!}80gO1+x|(L+DF_cz`Zl=z~3uF#|hMM}UbM}^#Pyi1r; zQ+XANJTzk$Tm@WyV9lHO&lUHsGNxax+3lQduk${#Meb*s zc*S>Fzhu8lU8={0wEQffSNm|Gnx{Cg#AXdrwkhtErG)v9X0BuAxD5s=h|AbBj%<4Q zkK45^XKt;#=2oKX!-{xNB#wewzrnYjv8WZ1K#*I8_J}_)^4s3atp<;o`l->zO1l=^ z=9UjLP?jqETvOPk+3%u9&2~pGd2bCA=Knx6H`Q3`UvvwTS~JUW7FOjtd>GaQ20Njc z@+7|!^+YlNGQ+rCQ>+JTr`Pn)b*RJLvKiFATFe>tMP$@pxwxQ{#I>2N%_@^{*-Hb5E7>hq4*UUtb)Z^(ep zS7Y^fBbpfH9GIl@upAf5^%iahU+lQ#%-B@bDAnl1jh6i-Kj{5@2{`ek{^8+HU#n~J z^1P0t#H1kK0|N3kOynZ<8O*0`RE(+yjT7|!8#`?hv6TC;`FZiyp5kuHj371~xj8xg zdjosx*`;N2IyXqmCiuIjhEk!md2nhvZNd-tM6)Qqz-HViukuMcePk>$PUygx8qht#41a_g1VF752a!AZ*$QYFP7s zq>K@$cHLD3sBQp3Hw@eYYx`%Tm&4=R)tUy({GJQDHM0oH)Hfzyup`5mq86?mHdN~F z(M3AMm=sdoLjHZzQOm2;+S>{t<-4gO}^^3;H-~U9%vhr9%K?H!f9zG^6YzHF*cI9=|0Rjyu9Y-a1 zqqO*}t;_FGiiDvb`khmK-8RT5f9B%+FYOfocJS_Xw z@|6~yxkV<%WyBXoFm|9OOYfbRofRD$2d)lx@yUTI$cab$EsudrWaHLh z*eHgKW$4y1T+WhXfI^iP@@vQPOHUL>$a<<2hBn@1)z^na%mL@Zp#iL_Yo{|{#^&F? zW>e?i6IEYZEAVtR1s!{BZx|$eS9hB+L~j;+zdR#V&6Q0hUTp&aNg2SZf zj%^Ebb6U_cqnC#{04uLn8Z<|Y@G@?@G|JP&=erS73;WG(o+F>WeHFCYm#(+J?05S4 z>@Gg4neYx-u1Ig^7tm5CW%Gzor&6%Va6$dOqaj@8qW%;nvfthA)`u2UU_Ts5@hL>C zV6>>Eo8}B6?wCO`wNeuSpY&7MKpQkz2STSjND!{ZR1Fq4apXPy;&uvM(#EVd>7jjV@YFP6 zwkpo|5=31=3=*oTO+cHNBM4XKPoMsx`yqf82PK{O3+U>qXxn9eH)UtmuAz1yoedo1 zkbKv>yYS>=zBJ12Sup|ny@Uh8KRORV^rjD1YZm->?Efw622Q zlQvi#@@ga-IlzDXghgVAC5FEkV% z;f)O>Htw;}rN;e|yNNs@&@0z=jwZ+*U>~I1{th5OoJ@>1GKa%vjqm607uqRp5QlYpUb*jFyr2cH%1t>7{K4CZ}_+mU+8w(^lC6 zU<24-$ECNh!P;^L8%X5v2iW2`&^^xd^uUvwovyYn)!QE)9{Sv_c&<1!444gOIYIB7 zK`s3M2_~N{G|tv8eb>7C6Uz(eDU)z>L2*oE`EaSQ*3nF3pEyTSq2)T^Z_3;^?}*=q z|H|S7S1i;l5D%M_TbgbwgSU*c3U|K7g{dVbX%k^xbqPtJYvyvB%>nO&-UJO1ef_B% z<2J?rrfd0UcEj(pb&B`H$_3X0;bt9CNa zuH4#Hf7qV7eH71;S7$5dU6M!{cjRGG(!;p8%(%r2xHOU#IDuos!tfW)saZQ-X3(<@ zzo8X&??5%Ad;el|ZY*sUy_AS(+njrDl48!LM^LbIm2~^gYc-(iq#BRV28B*~;E5`m zw=JgqBJHI@@G}UIQ3aCn5@s~iY;HO?(3-PFG&kV}J(X7ZFF>IVYjUheJrrwWWXrcp z2D+VDlmJB=_Zk*^yxRH*a8@?}bg9%VgUO%TCxfmdfnF0bc9nn;sCmZ5fY*tEH0G7g zvIpiR0Fy+6u*0{EUapPqDW#%`UwczoY3b`u zIVlO%=*=qt#v2h`Sy>qw8L4V}urW2Ie4zs@pH_f<;?sUn7SPu~*x^0E??f@)regXJ z5bNzck_dZya=6Q~P>PU4g%af;^3?yfAVPHnnh!Lw?{yJ3ef`a&gukn@ zCO&kRIffM>QKRY8rn@$kmGthK2p+b$qRa`0MsCm! zEZu>giaqgG+@$t8iT0REr#M0gF=&-(@Dd}*1gx;63*Vxh(mBb5U~FG5zSQ{dkM9^` zpNRv-)N-%1)^G!bNL{!(IBZP8lD60{4c3W&ytza)z+M0&sxrN?NNF;flp^tq_qSP2 zbBHF5)EMH1^Q1X{((!Mu59@h$unx4>JP_V(;1fY3aqrtf_p)(q?g_W9%({z;m3D3bv!2Jg%nuNv0-g*yt`C!toPHT>y z){cL^tmynlOUyBe_5*T}M*F3DDKfvS2`MrKn)u`6V*nlh0s7gH-65m<-gwUAN%JW% zu=Ct5yJ|h(00ciV8Cg5qvC%8@YASM%hOlP^Qh?gCLbkU-Z?BZ zTpTs3ZP__?n0kPU_iiP>o*D-o2lsl#rYxsIvLh}~NWiQIVt`i3#WkT$B zum`yx2mp2VyYUIJyMelY#^hX~$rEwtW2uA%HSwVJ-=)Ox-dcE1lU1r&E#sUdGS*NC#FJICnCXyLYe2&J9 zq@fiDjq=2gj)jU42uo|`2zl{I_Fl`;P5;E+ zL=G~{@yTGD@efrHC(S1pBaAa}cO{0577|UNC_tP$CU@L^hkv^6ev0B=1&qFgsv^i! z0GK0RCGSH=FOm`fL=#utERBG<1H|ihq-?kGP{_0Hhb>iPuZIRu z3atSQ1Li&C9PWv}7S!?ZKgcZQ)QE`zS%sV=6E&XY$bkaSv%`($81@%&buIPWo8~Xp z!zNE%9E6KCk?KD?UK`4QBz|E@B_S!20ESJuMCR#z7*VuDT<^Zj;$$LYhozpeb#Kd1 zVCapV35^unbwy93G>m$(VyZj8l_?RNa&+&N3~IKkeNHVIMs{Ia7rS+Bp!vY0fH_Xb z0j0%?;xt#1@zdQW)wz_Bnq^JW+})SqlNCn(Q-RGi)izI_dEK(|BN_$_-wbdh zH|Ib|NY~}19e`u?z|b^XK9AFz7HEXy6Q4Uz+}D?<4}FD^Y;|lks4LoUhofEh`-zEn&5hI8JBcUnQURflBbVXt!iMN{7NS~%}o#sIML+Bc%92&fc ztPNHci?Ws@<0Du3HDGQn(q)!Z3M)m&4P1z0(}S`U{Yg2!=l9+4+FEwK zLU0{DfHOL69(!JPJsGjI0^s5y;)prBk)H0BZd7rR)XY*IVOAIhx&%NleP88fV()lkNuz1;;tOFXbf@G=vd7rPVmm0J6tK)k?quf;ib#r<$l+i zm+OAewvE+yGw3m?Gn`T?Pbyk+4zqODZ6Miz9yC;$ z(5t?&ef^+{qjof{zR^Dcs=nv7ZNI6D5`8lKPorH8OfIJR`a(NLPs03v9M|?oztyTI zinCDE``O){Ho5e^M`>e>ACgE7i$##Zb&W{{DP z-J-3dZQ~!o<$=wD0dk=R2m1M=5;i5Y#Awk4u2ZS8g51Jt5^cIMxCi?I=yy9jb*6pul=K6)||Q5L4!#a`>w3SekTa&-XRWA6+I*x zT8!uSYQ1{3oCX)b*TnfwM;Gg@|BZq0em~XEcA-b>&wfSxi0t834EPkP1Qqto z`(fLzhw(t1uH;+;#rikt1m>{L3k;qYv2h z@4Mpt{%tW(s@Q(?NMP9k+ZN#65rO(tGuJP*#~eWvA{m|XZ!7?@{4Q)=R&MME zV%J(n_8QrLSquqg2(we8q`=b_Feu&w+hotghvQ6tidmFQVG4tfm8HZMjq8pB6xNWh zBcuyk#BR5$T%WldNBXzizGN~DN8W)RO?pj!$znx*E*mm=3J2<^T47=RIQfCT#Q_mR z?R*+DePr*hi>&|Sl9>-!h*n`e*lFpJ2tvWDR%OqORF)Rvwood*jkTZJl%-VPRgd9WmABl>dL|{zY{l#%*)? z;vV(i$9sa>|G5EontU45?t|J7zic)_kZO{zutOtAKfSQ`mGp_RzT2kkOKGSlfk^P^ zqA$GA*zFDdqBcit1XeO;LtMYH{dZdw8T@GP;@V<1yr(q$9X)c(t^rfQ0362s1!HnV zv{>nV2&Se&q6{_62U5nXA`7uYpD=kvm>*)(>bQ=q@p+DL=RAPAD|shpqVu%#pXbEn zw@N%fxrh~NmPq$BfmL0f_0S?tQ-qDeq-g_DO@^bD6i1JmHeqhzIDa2IXvHK8I&k}V z!#l~ZtoRa(Jn-(6@!T&COTz!fXLdI);JN0Jky}UD({I*T?Z;6qL{ zPk@Vqn3NC$6Qj7fDdGOWr|meAbv0hKjf@xnX@uprA3_(Hs^*-m$00<@dNY4EQUzM& zegAcTyJN1+WY#8yQf$KSG3XFU0|3|12ULVS6-xt-udQYU3l`4d2*3aIc(_|s32~2& zEb$icbNULLoEM5VB9C%%ErfjTz27Z9u$5yL%;vPf0>yuZ&n`1qo{0{p|L-wr?@g?= z!5I5l)}5&%1G4#F+1PDkkEb|aVnx;Z+s9^(Wa9D!X5Te*C*ifk6EC9ykzA4;L4in! zXcr@O_ZI>9hy198_u_9<>2(@$kiSAKNK%D9D`*0GsU;XS=91BKzg0$H&2|rtr)Tim z=EXmuM(t2lN=L&Dgw!^2VU4X)XC4VE9{di%Y-H7K^wr5jpg~J|_X!FEn&!$bsJUn< z6(?4;=5=aLf_&^NKOXDfQnsZNnNB<6#b=z+Dp2|vhQA|$9z_tDc(DX(B#uSqg?>W@ z!enf=?Gb$QA=VnzN>u&fo3)M~KJim#g1hy6^f@`}0?U8e!c3=7-^<}54P#0H@6jP* zjUqVFzG^`N8E7-#j2YU$+}$?6(?m<5?LQ;9MCEO2-dZuZfTX(?{<*~K*ifx*Duu>- zL@6}=r6I|XKJw$gYJRywzoG}&!PtLy1Lr;S@P{|~!;&fu3Wk=6=>gGcf&N|`H=(=V z8&=gTX2LKqdv97u7I=!aO&J^Ipxu!7DbT{)GK1;YN0apmK~b=&egT(N$fULbvgT<4 zm>PEN4kuMLA}k+XC2hIns!M4Z(h|~1`_u(gtvqn9g7ZA;y4r+queuKN4QbzSid**I zbV-VF;7giH4P-Bfrzc&{xiIa}0s};Nh?PB>bv2ggx@UK*xS-s$x?HI|)c{3CVeE%o z^2N!K@@0$i@?=*O`521>U1=s+bPM&={wtXS{cJ!gPG1wwgYY&+Ra2qxZazIT&TWXQ z;UG*$ZzqfQ$(WquajgG_Z}%eS!A88+ zqMb7FM`2%* z?dJjCeFVY=+JdQ%wswE?QK3;VGUUY3=lp*!(j}+$y^$Sr_Duf1F&BbLI(Mpg0 z(DqeX3#ymR06V-3S9p{MVHOr4gM_rn|Jc>`a48WG) zm~X>R0DTA)j2Obc!hUooIfFJAepnzg6L#%;&fW2|@2 z)l%@;^QQ5bDZ*^H_V%%U*3BwqSR@1ynF0hO{Pq{)`bnS07`58RF8nN;kIp9cf_JUG z%6IeZh)1{P#k-DWE`tFXKrtcMn9RG22(^f|2t}S0tsUD%K+WyW zdF+gP)61n`QIeVrvyRP(=0f~v<|@&igO!N#dn|Qj!cJ#gtiH|(e$Sog4QR`pGyYo` zJ!f$O4+-%Od@Cy}>$iLgo>L3WHEwaT)Fqs@1*M7^rF?6TeI>07%zW&(p`+f0Ee8^c z8GO6>lO-+fS(m<A@$cbi(m~>CBVC$tgJ$Fr(HiU8jOC} z?w{CxH7Rv-T;{VCYg<-&bwL}>q*HA+V8$vp`xtwQ`Q(B6mH=VK^6|aevrqWM?pV$+ zY%ppndp>el&n+UQ&dtX1M}%zFA@@`qk#&{)p{}n!u3cp~`eLcnwlAtU^qe^Dkw>Om}SsUjUS2g8D&=&2G zb5u1}x3QzI5%TM`TBBRNs)T3_NC`%&3SBfSC&y2NHYxnHBohF&Z(`Zc`9|1wkuXMfGEu^mJ50Fxm~!?_1THh zRa9t_`teI!@ogGyJjO!$!>9hm7j?3ibRSW6cwS1bcp}V{o_|1wRC^98MCl( zW}M95;ATr0WuJN?%YmQ>-MEg2aPhd-d~IBWbG~Dr)Er$wSp{AdE?f~RdFrrtfL<7n zXc4>MiGo=hVSs?e&;g(^1<>5~;1QG!jP6=gsi?^myZwIj&3{CYu%(^0VH(cm8*sP5 zSXo+ko${vL$tW(DWJ2u2Eh)`GbM2`KtpAz*nDG6Ojvc?U=TacOCclDxG;{&&riV9L zR;=U#owxHtEUB8)smCV_q@@*{DW~uZcfP^UaK&UFmKthZ)h6h0%~c)c;LuHCX!n)C z{zcUFGCCP!z|-F1rtq~tMqmF)3vIZ|~lsv9l5G&?-J-&;8v=u`~jI}W+3rXJsumZZb6KonoZ5m0~O&RQBvt#pbaMUO>$vx>S^pim$^P9{KfGvuTr}bTzwI zGaj(I`i2}63sab}=l^i5KXSyNY)knF%R14GrmX!cDTrunZ{^-@|9PbDT{X4>|Q zcY(5a?PsDd(3XSFP!k*+taNSz(m=(rgX^P0O$Rwg=h9twIZ2RtVgB&rbTUet5}$oJ zzQl*Oo{f2`@*{WRJ=@{Y(dR+|%VuUvX^nC>xQ_cX&?T`*Js*y5BG8J>L#!O>(w^Ov z;9*Jpz?mM|^-Q)Ufyb`JdeX{P33TJX1c{`!Wi>65s`k$-o&CBZ@Mm3Ron=${zHM{Aa+ey?9JJ1xG%H&tL_ttq2u%N6L;oU(-EC#dli9!dQ04^ zXVc9c#dZi+#7{2?OZa^@g6R>ZfWE7h9i`|G-Lmz}AfM>P(%6C9xUtaPFVY2HJSLsW%B! z!|f<+GXa+MjIjsa3cU8%f>l8KVCA*{A_&h+ zuM>d|dx>kwgVHl_cMKrv_RrNTY3(nn`(=(H&tt7}RZm>-AF#2O^d|kQr%jAc6;Cpr zfust~zs+`H3?W-mvB@24?*Y0bEuGrx6%6!fOF zm82_Qgcv$_Wy-)|s)_RoWlBsS!bM1Rm;|>z1|ez(zmlF$P3iTI5BOpN%~+aU4~v=> z6AF2vO{ew4;)C*L15!n!VM(&ssK)LnX(qL9@ocURD}uy7+BksFD2kN#Ip`H;_KAx` zGOkE4zxNbUPAg>EVyJ9y5Fn(19b#(wcY;69oJOcw{+* zG04p$l3uP=HMR6s4TKN2s_Q(aP(<2v`^f2m1uvi^K>GKP+CcC;0giU_>51gq?U&5q zVY;R!_)INeerI8!h>!0q3Ltp81P_<&EaHBW<05k91%JO*U|uf7cQ3_$`B#SimE_PU zA)QO5M1czurxQ^S(#}G|zH`mD)0NTt?wHP|SYzA3i_LVkUsmpWJ^uCHd*F%JUpvva z-QLF+4Pk6dANChCM;iLEUv+ddQkr6cULKwbLUapCejXnyYc1d=8>rhbnZ`S^&Kydc zR$K%_>qKQxvYdQe6%ItC&G}QS2As4{|g< zI@QlZ_s{&E?FFhzbDX6KrA`=RaxuLNzzF>(DTNIz-}5;?fMpdNu|;b(@|a`f3WPsaEJ_cO(Hp#j?xzs zK}N^>Uypopr2Fvi*4C~;)PFps6Uvd)7LYqZ(rrp5fa}8< z=2pT!JF2%~tjxVI>3k$<9>^unbFyHUHBy|Ms|-&uCBfz9352}8j7X*C}#dn_0*am<2`QCA>L(fJRp{KONjb$b*p{lE(B=uVfBA{B)@qhx4w35L8}?%`PR# z!X_-Y*t|)c+#$c8JEs{wkS@_g6?rOA6a>@ZT>Fr#UsJ8LC};cwzF4jAP1lQ4E*JR^D1C z(Bxt1gM29TFes{&$eBX)M7uy;;orlZJnEL&=U=5D5r>X(i5>6h4XDEii- zU!Zngf+!J`Ubh&TJCJpO$hMt0xF%PFGi~P?e-)?<$OPu+MBf#qpIl*pytBs5l$nbO z^^_2O4L=lu!_oL@Pp)p&g~JE-jD%+l0R@R#rab0M?I4z%7>tgAd)vgsEKqX7sCDS!*JGHJ z8Z<2kayI6$SA-1-)dVZJAz&YwQS_;UR$G}e`nkQsaGK4*z1Kfn=@_|PO^IrhOa9LH z+0?ti+QdtyH1fz7Z(-_eT)QdDy(@BfiMTwr#YEK;51MY@i!0eaq(!(B5oe@IjIh~S zDcGG(o~&t*-VT_S$x+4-;N~h2ol==Beg6=*?13tq`V#S&N9lKmq4G`gSvJV`;@rQ^ z&ut?+J~8U!y^gxFR(=D|uqh;{&rz(>WJxP-*|PyS1Kf~}rno}I&IW8seXxOH_@iM_ zro97h%3GePK{{~1`sKtc+C;9$1a?-ePgV^+bnGFhIF)au40C|I3xoPI5iLaS{XL_3 z9ve3MQtJnR9B1wk9evjt@4pZ5J>lHkA!23n?^N_{R z8<(Vy$thvx8%jkIt$T6LeWXo9nAFWo1)Y)%GP$^g689jX?yv={ryKeBggg?y*4GQ? z3sUNm(7}}M6%Y~v*#KYH_Q_Xj%bHILRB?^1U{jheWLpPclYbzke~|LYna%lu%WB7{ z?K&x!qSY&;9-aN6eu*9feew@ceILDMSRLfO_HHGQ<<+w(fv$ZebH%~&?p4Bk-d2fuENEwV!KI^ zU!ui)E=y-iD<|se>?!0zqFNf;$|-1c_%3bZzyq#Jq-i&1k8#uFBh%kSZs_`~N?Bf? zF2S)~X*6^EJb2mLsI&DI(d!G*W zOBuH%k^xz3@`=fy2Vrqnf$v%3vmQT}_qn$np@%o@uhdewhXn7Rc6Y6}~~yj!fu-d@xsQgLd#3Q))K~`#NEfrPI;#t?~Fi=5rYwGqA)u zvS?gQ4Ju43iUz_2!ssMHp-(R8b||2toAWJ-yGeh^EyxI*E6$FaVe2~gAC}N@GC%x2 zfBuLBFcGhlRoV)uafYyK=cF+_VmY7*j09c9v*=A_^z6@6VhP zk7*QuDaIU>%ZZK5)P+Ao>DPs-rXD!_@%Irm6+#$C1%-!8yEhJ8=e^fX>Ec#a^*SOn zHw~%NUfzUJN1vBtoIi+MLLvr}K%BiK9FwSFdo(vl-6stVPp#Hw)z)k7-uK^f6#%x; zI&UOuhwx1|xEU4!gU+|#WuJgj+{!K($VNf>rm72bu~y*fWVB{mwi#6#v$V-hmOq(< z+U+;Q@E^QSM>qacZiuoGKkqaunx_7h{ix^T{mL?bOxoTyjGH)+F%dXwI)=~9f_+OL z=0#c^2AY^GGcQ*=St}TN@6;ImB0y&nC|})5aC&PHdhYwwuo=s46Ay&ge_3lyBH8gP z@nD+M&cF@-`!())S`rN%bm3@MkK0wL`A2YU5wNFBJ^S%{zr5rxHAB*Ta!O?mrxL~u zNpMjhO#IXtOEp19O=gO-UBI7I{fiO{7;VAwEt)B`h z^_du)wCdKizV$EF834Z_IYJj%bJbYA5xCPasH~5^YifOg-?>kucsJJQ@Ck|A0~UHM zL|CM79CjT0%nWev?c$tp{ujvt_H)v_^^pu#^<8{ty7_;fl18`?XtL`?$I!_<9u zBL>HHB}^2&-E;l2f~g(0sQ|Ff{6=xuQ|&kJh(q_B^m(UEA;0$CkGEE(z?PB5N&2$^ zjh3FtGV(d~z5|yLO@WurZW?|!x7}bXXPxpAo>X|Clj4SH~azs^9 zsw&NG1ZkGb|LpQ0#g2*VJi-mxB`gQc?~&h^70YuUYNU$wnQ~-T`sn2J*1QriQa0$U z_4xvkkh1NVTTQF{(_^Uiaaa%*`!`sUvoro3Yu1VR})I#J>5k z`X!JXxCbpR4QtU|b|S|+(L46?3GWxImu^HUbLl0j1~{kBntl7npVulIDR z9aQ_hxjyUHwR?MgsgR>_`rWs)dOY9|l$w5MagM8G1iQ>yi-Qe~X`e>2FQVv8#GRh1 zZ0)oSJ!0JRgDLyhGT%ZDScOC+!`HcS@HT@NoZIrh2tH8 zC=_8dDU7*VWI-y|-Y35tpp8A*f~=wG-Uvopo) z^Bo=*qPr?yRJB0?a+Bzb?ZawqG4EzRk;K)fj*wzmInV>|%&v$N^dAIzm$|*9=UKd_ zdX)B%sAzr5FQAm=$vK^ebPY|?NV;!?$Ks!o?trqLk?Xr9uDK{WRCcgp#1}>J7 zZ9U(*KzyzG)Ji~rne4)t&dVfoM@C1-Wa_jj)I3YRWPQnEhGs{g^5Nhp?9MhSV_zH_ zmdT?vDY6Afq^4hwG(F3vFm4%YaH3RI#bivFN*A{;OENrE-5!4(g?R^8$Y_&W?&FEX z==OU(eF`uJyKg1et;ybMekBM8So8xI8bl`G;`;n&y>-4p_Bm>P&s^O~z?iyt`(fc&C!knimO254Ja<*{9-tM4Yyw~=` z-n?rs{ja=_83dBjd(8Fst^Mcrhu#2jJ*V0`N(dUF1W_kDF*BRKF@+D-HPQr;9Za&P zbfi^6*cd6qIf}W(;bjk-P7bCDq%ZUWjg;w^rC}h1`B>GYl(Ambfo;v#s+h0Ox2yoC;RCl9mZr`eMkTHj z!qgg_WC&0w)=Q>nvRE%7-!}}b&?cvn&AM9FP3eQGv9zy8y6`~GcRg@{`yaDa?X0Kw z2X`8Tt`;jRnCUUK7&$2%iWq^;H3*KrH$r%F8FkVgP%n8h-10#BOmG-rwXJ8hD9ZOO za-(8F|DBbh>t$;nPi+oY<}VxP?WgN2#cfYDTkVfR6{Da0sv{IiVTN;BMdQCDtq)iT zPa|b)*8VZH$#7>PcQyXG%P-U7XZeu$cBGZ_3poL*Hgeq}*dR^`O^Pi?2FK zG#@nMFTf^lSu`nP`~1FH$JZ!-@h`m9JA>>hkEzkHqJ0 z`L;dJ=5wV~^Qb%L`=fVD#0T~NiV33VY_H(42r;Jun%S9EZAaLmmq-gf~ISgVyCurfGsE9KS zU&sVrT6IVH&!fE|Y~@YNq##6I_sItsp|dQS@JLOYnQfrklI(<(P7n@cn}0@^w^VUQ z83-WNHHmNGx5U)>7b?xI!{{o1uX;kki<{w}lm(PmW145`Xc>K5yiDPdlg-?NF^4_= z@PMh2&UWvN0oG^rT+zK1mJ_R7&{}Jhh^<}hVXA2m$t zZ$F)KiT(Oq#q!0fqd*g+g(D?1=IcUv*tKVzC9_5*$fCUq?h^hzPcV94uc7_c1A;Ub zaFMjdc@SdJpHR~9ySiwpEq{l#Xd{9;o^YI>KF;kUW<`o*QK4lRRV#oaWz!6zS_dJ_ z&4*GXQ^U^ZhL;~$M^ zEG%J~p5M&iftiM-D^(~IC#}&x%mMF(<69GUaj7W{bpl?ds+3du4`sh|9;s8eYMkF` z+B~cVuPZ-RwriHE#-hHqd_3cXBemFs6-_12$wlRYe=1iJ3w>0|&B>3+dtnpRtb)xMA+T5e|7D=eX8qp-%wRBE?~_qC z8d`b!MN^hMsUpWLo=1K6eqR@@hW(UGy1Wz2Cjq}(kTP`yLQH)H#3cJ*iZ?yJqQC|d z>)-_s$c?v0UWo0dX9k6)j_S8a6_AG~aY{>3n*Q%WZP3p5{IJuu4qm=u?~TnIc`P75G;u0?Du_N}X#O6X<1PgJ zGEAOoZ%j+JA0?m7BO|@{^7Y$B``Yms%)x)En)~{At`!e}_Ldm1eM^%Ho667k_1hBq zU!Rq)5QWwn-gn8?$mGH+tr1Lmp~B2mkGny2_t+b_PS=(cI=FG zT3;oY5fXrni1KR7bT-O?zgE_ITP2}u?x{<|PuT)75qcG~_nAj%)Pkft7 zEt#v<%|5xoZYz`5d&O_`X4?b*z1XT1N9**OuYU`*mreEt!faLdENFVND3nYaux7iI z(C*YGbJ8rG7<)(7+Zicay6qSL$ViC|Fnwf%>VWPXYkXle<`{}JuD@FS-EfsV-_fjJpW=+0;ysqy$1aAE_0?3r&CH?l$ar;KUA2e-pB?MwHQ1)S`ub%8Q+p^IkQ@6F&VKt!Aj8t2!CF$ATn#UO zyh$T@^5?~|pvs?T^7U!8HRfTTFm=%A>0`qUNU$hZ%fLa-175Opwm1mJM5Z(xST>tB z1^|gx&n&CP6MKuAUL#`-Boc!RU5Nbsb~b8d72$GkT+)JTGE-i4@r_py^e(#ZE=Lr) zzg8S#m$Jwt-g%c7dkPR>vMPSI%whIJ#}`MQx?J8h#s4|1gIxb}bkDs0|I)l#PamX^r|Ir6p;bxizaF?+7 z0^QQ+pQ;XWIf2eK)_3Fmef{Qj;rn}E2{oR-b9t`{iO3j>VrCM%$S z-KeY5#~*2c9wE)qVM`RzuOb(=^79SfEp``@9Nm+XGgNEqK6~C@;n)ga%TbElJi*5@ zt)DVLOe~>&E(4Fk{~5mf#FMc>BfcG&ATh|v35+PQPMRtj+m0aCUNWH9FE)5rR~IjA zg<WDseQ+R7alKYKvC zuN!x0l*Ro8vMlS#A``WoTI_LUs}|m_W|tGy^+L^jE-I1EYzR=$lV}My9Lql?noc!YdTO)gC!=}D1n%%Vn5?zMpnyQo1t&C-U%J?Ehml@e0 z?Q_w%=&@$3lBvq)q)+muT~-hjd2>>UBhdHxy;L<6KyUg6NJMY0zOU zC;Ew!&!xQhy$M2e)x0hYb*QnGxR!=W%vsD-=X|3DaFwvHCutg}apCmG(D|L{?{1_v z8CJE^9GARKB*(H$m=jT_-i>9Wg@_8_DRtl!-)oXKT&M{MBV@RG0iCV>xbcru^*P^A zWyLg$(j^X!6|D@Ux5uV2F{xs?$z9v^f|B~81aN0Z)r-hCH-&>^9?F3k&f zLHoO&K1KV}1nHvLETF22eX8j?$!}Zuf(Z|$UmZ%8kA~Uth@C+uLS-;6f?I{ z{`fOTP@FlPZM>!D{9r7FVD}m`gCHnxdhbx!Yh9qWYowwgy#FbvN%C%$<=?AvZ>>6~ z%1k(7za)}dJ2CMy0f#@m1v$qR1j_7;97{H&bk$2y`jLr~ z@Ums_LnRwiAYqiX=YDpY6LCS32Oo}*!j~DY2_C0b?+Pi}x6x`HsIBk!z0jsCSJ(dx zHeH$%{ouBWg-@#Dnj$$yl()x3HoWMj;@)5F73-TXt-0m;nX38aci5U*MqxGG zUKrY8*dZlj^vVl4$q6xD*U__h)yX=xl~1AjxeTopEw{0s64?nSiJx=GggcGwR5kPgwOS9V*6(+&ty@~5luP^pr zIu4Yz(GHu?^l z>vz4k-A;C0SLd@XkFPk9`aWS{4m0%y-mEA{<#f{}Pb(>{Nd7-E=IW6A3)8u=;<=C` zloF~*VW5iJ;_|B7cx}$q96n}g_t9!eSR$lrWh-y48UX>%;w#kor;E*%=8r%l7y2{I z>I@WX$RZUQh5v+gPlg^ zaW`UeX&k@$r@~OJYedMc34IZ^{gR z6kZ{`u)igo1cwby@|f7{gh-1W;~G0w`x_)|KtjWdVQ~iV5menF)TJpVlYd}s3_P}G zf=E|3=J``2!Y8q8Zb9W1V>oUP`ZjQ^&#mVBz|EEaIW7OA`CufwT_R8kXT}5;@f1tW zJqtMkP$doDU)0u5dVJt_%=QQ4;vv43{*RCs9L2>sAPKmZZ~fG8$Ax0OPi%eKg36YP zin2o^dD)SdBhxH}y`l{9bC9691R@beCL!GA(6C`*H)}>iwyth42sDbXexuM{*uj^q ziz7r@CT;?Mx|qPRw`6&C$abEk;>xxEwJP=P|Y+zI=l`U6z4ZoD-~UtqPFZx89Ly7_bFdZlfV5x&ZL`dndd*@iT^m=va-r$ zLD;S4v+a!UIEY7AO%ZI~P;BAun4N>cJb~GLzEYc4FXi;eAZ(o-!5vP>bhDj33|qgq z-^e-U4e=dT(^_nAmicl2&b;zqma@969J<7l--i+dTl*Lujd^;a*v9ge=f>Hb?yG72 z8aeqSxzj-Kz8;meCGO3^z43 zg@uRX;^6Q-O-8?sNoe8fM3(`}53K*jCG7LbwN@R6!A?$Am+A&H^i$;5Hh^GLF#hY- zCPFguJB%d2*~wKjQept_doBNl{;$(sl>7+?26&T&L^uQ(d4b|8MD%Qw&-gdG@P~MwE zWN64ju#6B#zw|UmOjtYw9bLsxMP=n*IX+SrFgVg2hX%uFvTFh3+PJWYU0=vPEOCBW zH9N~>90IdweFL9t5__$<-V z(uGo9x#?=BM25tvwVNLVY2)KSnO3t1x=5S1n4TPffjGXTNu%F<>wkPE+~=>=a=By^ z-Q!ru6EUKip{7({TFm>M#>VffF;Khsoq86vP|MnGz=Jcpw)9W6*5J5aXnDo-66~J6 zp0-}Zp}WUb#CL(e)`lfO)1(=#V5%q8`{;{J1<_w`WrdvH>duGi?1u`30`Q-_`7Z+A zP`aKWTVXdETqo5C&3104j~%N(sjlg`U0AQzpjELx{G>F8__nVK;vZN`A~sS$d5_`KZA&5LSkn4SItV6N)ILg)_6wu>ML!o$rA0GII!AWnT>wh7yJ6SVgB z_Iv=qxXpUoE3n-D1d!>UJawY~DU*2=6;J zOam)kkeR@+_#_6mwSfdB>hDha6gjRh|Pev6d+ zgRlTO^VSm@=Xc@p}{WF+4NF~KlF_AO|y6riwLF)&L?um{bs_`Qc4C})U56F zuhxN!#M+jud;dVnt{1pHvL!Bu*{R#!lD~}>iuS^isFVUJgE-`&wQ&gfA#PzVLrahr ze^V8QjX$Dz}C$S{=$s|Ja{mjD@U?-ql7Te8a^6Eh2x@MiG)$WbbQBFwta?%+9 zo#}bj2rvjX09YFpur&@WMgP!s8fE2w9FzkP+a*?&t#`a>yZ{8_FDpBHbY$c%&+Toc z@9O?FK9Ac4K=A%l1yBzDeG7n6dL3kkF#lKv1AK2@PeAc}2B6;qe@Fm4^N7p54uwr4 zz+d^tlmEA;4p3ay07#f;JHda43&gWZs9$Lq)~|qW?{oY89c~ETDkkXzA70+?J$0(V z8x3TERdVupMM7AN`ZDACzhTuMZOkM$z<~a5WS9hDe�`nPUjD_{OebP=k^Q4JX^Q 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 S8KrICyJco=T6XQu)Bghc|AFrS literal 0 HcmV?d00001 From f2761148bce7d1d49284cdf9a39cc2440788cba0 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Thu, 23 Mar 2017 18:56:30 +0100 Subject: [PATCH 19/44] stuff --- examples/cantilever.ipynb | 25 +-- examples/hyperelasticity.jl | 200 ++++++++++++++++++++++++ src/Dofs/DirichletBoundaryConditions.jl | 36 +++-- src/assembler.jl | 1 + test/REQUIRE | 3 +- 5 files changed, 244 insertions(+), 21 deletions(-) create mode 100644 examples/hyperelasticity.jl diff --git a/examples/cantilever.ipynb b/examples/cantilever.ipynb index 01889d7f8e..52db25a40e 100644 --- a/examples/cantilever.ipynb +++ b/examples/cantilever.ipynb @@ -222,7 +222,6 @@ " K::SparseMatrixCSC, grid::Grid, dh::DofHandler, C::SymmetricTensor{4, dim})\n", "\n", " \n", - " fill!(K.nzval, 0.0)\n", " f = zeros(ndofs(dh))\n", " assembler = start_assemble(K, f)\n", " \n", @@ -278,7 +277,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -288,11 +287,11 @@ " \u001b[1m------------------------------------------------------------------\u001b[22m\n", " Time Allocations \n", " ---------------------- -----------------------\n", - " Tot / % measured: 3.08s / 8.92% 85.7MiB / 10.9% \n", + " Tot / % measured: 42.0ms / 92.5% 4.32MiB / 87.0% \n", "\n", " Section ncalls time %tot avg alloc %tot avg\n", " ------------------------------------------------------------------\n", - " assem 10.8k 275ms 100% 25.5μs 9.30MiB 100% 903B\n", + " assem 10.8k 38.9ms 100% 3.60μs 3.76MiB 100% 365B\n", " \u001b[1m------------------------------------------------------------------\u001b[22m" ] } @@ -305,24 +304,32 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 19, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0.003126 seconds (12 allocations: 3.172 KB)\n" + ] + } + ], "source": [ "# Modify K and f such that K \\ f gives correct boundary conditions\n", - "apply!(K, f, dbc)" + "@time apply!(K, f, dbc)" ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - " 0.536346 seconds (246.39 k allocations: 56.317 MB, 2.40% gc time)\n" + " 0.112682 seconds (63 allocations: 45.675 MB, 8.30% gc time)\n" ] } ], diff --git a/examples/hyperelasticity.jl b/examples/hyperelasticity.jl new file mode 100644 index 0000000000..811ccd1afb --- /dev/null +++ b/examples/hyperelasticity.jl @@ -0,0 +1,200 @@ +module HyperElasticity + +using JuAFEM +using Tensors +using KrylovMethods +using TimerOutputs +import ProgressMeter + +const ∇ = Tensors.gradient + +# NeoHook +immutable NeoHook{T} + μ::T + λ::T +end + +function compute_2nd_PK(mp::NeoHook, E) + I = one(E) + C = 2E + one(E) + invC = inv(C) + J = sqrt(det(C)) + return mp.μ *(I - invC) + mp.λ * log(J) * invC +end + +function constitutive_driver(mp::NeoHook, E) + ∂S∂E, SPK = ∇(E -> compute_2nd_PK(mp, E), E, :all) + return SPK, ∂S∂E +end + +############ +# Assembly # +############ + +# calculate global residual g and stiffness k +function assemble{dim}(grid::Grid{dim}, dh::DofHandler, K, cv, fv, mp, u) + # cache some stuff + n = ndofs_per_cell(dh) + Ke = zeros(n, n) + fe = zeros(n) + + f = zeros(ndofs(dh)) + assembler = start_assemble(K, f) + + global_dofs = zeros(Int, n) + + # loop over all cells in the grid + @timeit "assemble" for cell in CellIterator(dh) + # reset + fill!(Ke, 0) + fill!(fe, 0) + + celldofs!(global_dofs, cell) + ue = u[global_dofs] # element dofs + @timeit "inner assemble" assemble_element!(Ke, fe, cell, cv, fv, mp, ue) + + assemble!(assembler, fe, Ke, global_dofs) + end + + return f, K +end + +function assemble_element!(ke, fe, cell, cv, fv, mp, ue, assemble_tangent = true) + ndofs = getnbasefunctions(cv) + reinit!(cv, cell) + fill!(ke, 0.0) + fill!(fe, 0.0) + δE = Vector{SymmetricTensor{2, 3, eltype(ue), 6}}(ndofs) + + for qp in 1:getnquadpoints(cv) + ∇u = function_gradient(cv, qp, ue) + dΩ = getdetJdV(cv, qp) + + # strain and stress + tangent + F = one(∇u) + ∇u + E = symmetric(1/2 * (F' ⋅ F - one(F))) + + S, ∂S∂E = constitutive_driver(mp, E) + + # Hoist computations of δE + for i in 1:ndofs + δFi = shape_gradient(cv, qp, i) + δE[i] = symmetric(1/2*(δFi'⋅F + F'⋅δFi)) + end + + for i in 1:ndofs + δFi = shape_gradient(cv, qp, i) + fe[i] += (δE[i] ⊡ S) * dΩ + δE∂S∂E = δE[i] ⊡ ∂S∂E + S∇δu = S ⋅ δFi' + for j in 1:ndofs + δ∇uj = shape_gradient(cv, qp, j) + ke[i, j] += (δE∂S∂E ⊡ δE[j] + S∇δu ⊡ δ∇uj' ) * dΩ + end + end + end + +end + +# solve the problem +function solve() + reset_timer!() + + const dim = 3 + + # Generate a grid + N = 20 + L = 1.0 + left = zero(Vec{dim}) + right = L * ones(Vec{dim}) + grid = generate_grid(Tetrahedron, ntuple(x->N, dim), left, right) + + # Node sets + addnodeset!(grid, "clamped", x -> norm(x[1]) ≈ 1) + addnodeset!(grid, "rotation", x -> norm(x[1]) ≈ 0) + + # Material parameters + E = 10.0 + ν = 0.3 + μ = E / (2(1 + ν)) + λ = (E * ν) / ((1 + ν) * (1 - 2ν)) + mp = NeoHook(μ, λ) + + # finite element base + ip = Lagrange{dim, RefTetrahedron, 1}() + qr = QuadratureRule{dim, RefTetrahedron}(1) + qr_face = QuadratureRule{dim-1, RefTetrahedron}(1) + cv = CellVectorValues(qr, ip) + fv = FaceVectorValues(qr_face, ip) + + # DofHandler + dh = DofHandler(grid) + push!(dh, :u, dim) # Add a displacement field + close!(dh) + + function rotation(X, t, θ = deg2rad(60.0)) + x, y, z = X + return t * Vec{dim}( + (0.0, + L/2 - y + (y-L/2)*cos(θ) - (z-L/2)*sin(θ), + L/2 - z + (y-L/2)*sin(θ) + (z-L/2)*cos(θ) + )) + end + + dbc = DirichletBoundaryConditions(dh) + # Add a homogenoush boundary condition on the "clamped" edge + add!(dbc, :u, getnodeset(grid, "clamped"), (x,t) -> [0.0, 0.0, 0.0], collect(1:dim)) + add!(dbc, :u, getnodeset(grid, "rotation"), (x,t) -> rotation(x, t), collect(1:dim)) + close!(dbc) + t = 0.5 + JuAFEM.update!(dbc, t) + + println("Analysis with ", length(grid.cells), " elements") + + # pre-allocate + _ndofs = ndofs(dh) + un = zeros(_ndofs) # previous solution vector + u = zeros(_ndofs) + Δu = zeros(_ndofs) + + apply!(un, dbc) + + K = create_sparsity_pattern(dh) + + newton_itr = -1 + NEWTON_TOL = 1e-8 + prog = ProgressMeter.ProgressThresh(NEWTON_TOL, "Solving:") + + while true; newton_itr += 1 + u = un + Δu + f, K = assemble(grid, dh, K, cv, fv, mp, u) + normg = norm(f[JuAFEM.free_dofs(dbc)]) + apply_zero!(K, f, dbc) + ProgressMeter.update!(prog, normg; showvalues = [(:iter, newton_itr)]) + + if normg < NEWTON_TOL + break + end + + if newton_itr > 30 + error("Reached maximum Newton iterations, aborting") + break + end + + @timeit "linear solve" ΔΔu, flag, relres, iter, resvec = cg(K, f; maxIter = 1000, tol = min(1e-3, normg)) + @assert flag == 0 + + apply_zero!(ΔΔu, dbc) + Δu -= ΔΔu + end + + # save the solution + @timeit "export" begin + vtk = vtk_grid("hyperelasticity", dh, u) + vtk_save(vtk) + end + + print_timer() +end + +end # module \ No newline at end of file diff --git a/src/Dofs/DirichletBoundaryConditions.jl b/src/Dofs/DirichletBoundaryConditions.jl index af155dde07..76769c27e9 100644 --- a/src/Dofs/DirichletBoundaryConditions.jl +++ b/src/Dofs/DirichletBoundaryConditions.jl @@ -1,4 +1,4 @@ -export DirichletBoundaryConditions, update!, apply!, add! +export DirichletBoundaryConditions, update!, apply!, apply_zero!, add! """ DirichletBoundaryConditions @@ -53,6 +53,7 @@ end immutable DirichletBoundaryConditions{DH <: DofHandler} bcs::Vector{DirichletBoundaryCondition} dofs::Vector{Int} + free_dofs::Vector{Int} values::Vector{Float64} dh::DH closed::Ref{Bool} @@ -60,7 +61,7 @@ end function DirichletBoundaryConditions(dh::DofHandler) @assert isclosed(dh) - DirichletBoundaryConditions(DirichletBoundaryCondition[], Int[], Float64[], dh, Ref(false)) + DirichletBoundaryConditions(DirichletBoundaryCondition[], Int[], Int[], Float64[], dh, Ref(false)) end function Base.show(io::IO, dbcs::DirichletBoundaryConditions) @@ -77,10 +78,13 @@ end isclosed(dbcs::DirichletBoundaryConditions) = dbcs.closed[] dirichlet_dofs(dbcs::DirichletBoundaryConditions) = dbcs.dofs -free_dofs(dbcs::DirichletBoundaryConditions) = setdiff(dbcs.dh.dofs_nodes, dbcs.dofs) +free_dofs(dbcs::DirichletBoundaryConditions) = dbcs.free_dofs function close!(dbcs::DirichletBoundaryConditions) fill!(dbcs.values, NaN) dbcs.closed[] = true + fdofs = Array(setdiff(dbcs.dh.dofs_nodes, dbcs.dofs)) + resize!(dbcs.free_dofs, length(fdofs)) + copy!(dbcs.free_dofs, fdofs) return dbcs end @@ -180,22 +184,31 @@ function apply!(v::Vector, bc::DirichletBoundaryConditions) return v end +function apply_zero!(v::Vector, bc::DirichletBoundaryConditions) + @assert length(v) == ndofs(bc.dh) + v[bc.dofs] = 0 + return v +end + function apply!(K::SparseMatrixCSC, bc::DirichletBoundaryConditions) - @assert all(iszero, bc.values) - _apply(K, eltype(K)[], bc) + apply!(K, eltype(K)[], bc, true) +end + +function apply_zero!(K::SparseMatrixCSC, f::AbstractVector, bc::DirichletBoundaryConditions) + apply!(K, f, bc, true) end -function apply!(K::SparseMatrixCSC, f::AbstractVector, bc::DirichletBoundaryConditions) - @assert length(f) == size(K, 1) +function apply!(K::SparseMatrixCSC, f::AbstractVector, bc::DirichletBoundaryConditions, applyzero::Bool=false) + @assert length(f) == 0 || length(f) == size(K, 1) @boundscheck checkbounds(K, bc.dofs, bc.dofs) - @boundscheck checkbounds(f, bc.dofs) + @boundscheck length(f) == 0 || checkbounds(f, bc.dofs) m = meandiag(K) # Use the mean of the diagonal here to not ruin things for iterative solver @inbounds for i in 1:length(bc.values) d = bc.dofs[i] v = bc.values[i] - if v != 0 + if !applyzero && v != 0 for j in nzrange(K, d) f[K.rowval[j]] -= v * K.nzval[j] end @@ -208,8 +221,9 @@ function apply!(K::SparseMatrixCSC, f::AbstractVector, bc::DirichletBoundaryCond v = bc.values[i] K[d, d] = m # We will only enter here with an empty f vector if we have assured that v == 0 for all dofs - if v != 0 - f[d] = v * m + if length(f) != 0 + vz = applyzero ? zero(eltype(f)) : v + f[d] = vz * m end end end diff --git a/src/assembler.jl b/src/assembler.jl index b7c4063bcb..93a20e8a74 100644 --- a/src/assembler.jl +++ b/src/assembler.jl @@ -74,6 +74,7 @@ end function start_assemble(K::SparseMatrixCSC, f::Vector=Float64[]) + fill!(K.nzval, 0.0) AssemblerSparsityPattern(K, f, Int[], eltype(K)[]) end diff --git a/test/REQUIRE b/test/REQUIRE index def858001a..6b1b52533a 100644 --- a/test/REQUIRE +++ b/test/REQUIRE @@ -3,4 +3,5 @@ SHA NBInclude Documenter TimerOutputs -UnicodePlots \ No newline at end of file +UnicodePlots +KrylovMethods \ No newline at end of file From 044391062ec1a04412b5520e21f95c63e5427c77 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Thu, 23 Mar 2017 19:05:46 +0100 Subject: [PATCH 20/44] add body load and face load --- examples/hyperelasticity.jl | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/examples/hyperelasticity.jl b/examples/hyperelasticity.jl index 811ccd1afb..578bebf986 100644 --- a/examples/hyperelasticity.jl +++ b/examples/hyperelasticity.jl @@ -60,6 +60,8 @@ function assemble{dim}(grid::Grid{dim}, dh::DofHandler, K, cv, fv, mp, u) end function assemble_element!(ke, fe, cell, cv, fv, mp, ue, assemble_tangent = true) + b = Vec{3}((0.0, -0.5, 0.0)) + t = Vec{3}((0.1, 0.0, 0.0)) ndofs = getnbasefunctions(cv) reinit!(cv, cell) fill!(ke, 0.0) @@ -84,7 +86,9 @@ function assemble_element!(ke, fe, cell, cv, fv, mp, ue, assemble_tangent = true for i in 1:ndofs δFi = shape_gradient(cv, qp, i) + δu = shape_value(cv, qp, i) fe[i] += (δE[i] ⊡ S) * dΩ + fe[i] -= (δu ⋅ b) * dΩ δE∂S∂E = δE[i] ⊡ ∂S∂E S∇δu = S ⋅ δFi' for j in 1:ndofs @@ -94,6 +98,18 @@ function assemble_element!(ke, fe, cell, cv, fv, mp, ue, assemble_tangent = true end end + for face in 1:nfaces(cell) + if onboundary(cell, face) + reinit!(fv, cell, face) + for q_point in 1:getnquadpoints(fv) + dΓ = getdetJdV(fv, q_point) + for i in 1:ndofs + δu = shape_value(fv, q_point, i) + fe[i] -= (δu ⋅ t) * dΓ + end + end + end + end end # solve the problem @@ -164,14 +180,14 @@ function solve() newton_itr = -1 NEWTON_TOL = 1e-8 prog = ProgressMeter.ProgressThresh(NEWTON_TOL, "Solving:") - + while true; newton_itr += 1 u = un + Δu f, K = assemble(grid, dh, K, cv, fv, mp, u) normg = norm(f[JuAFEM.free_dofs(dbc)]) apply_zero!(K, f, dbc) ProgressMeter.update!(prog, normg; showvalues = [(:iter, newton_itr)]) - + if normg < NEWTON_TOL break end @@ -183,7 +199,7 @@ function solve() @timeit "linear solve" ΔΔu, flag, relres, iter, resvec = cg(K, f; maxIter = 1000, tol = min(1e-3, normg)) @assert flag == 0 - + apply_zero!(ΔΔu, dbc) Δu -= ΔΔu end From 1a3b56e76d438d35eb1fbdf4555240d674ce4961 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Thu, 23 Mar 2017 19:43:26 +0100 Subject: [PATCH 21/44] add hyperelasticity notebook --- examples/hyperelasticity.ipynb | 405 +++++++++++++++++++++++++++++++++ 1 file changed, 405 insertions(+) create mode 100644 examples/hyperelasticity.ipynb diff --git a/examples/hyperelasticity.ipynb b/examples/hyperelasticity.ipynb new file mode 100644 index 0000000000..17c3cc6cc6 --- /dev/null +++ b/examples/hyperelasticity.ipynb @@ -0,0 +1,405 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "gradient (generic function with 14 methods)" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "using JuAFEM\n", + "using Tensors\n", + "using KrylovMethods\n", + "using TimerOutputs\n", + "import ProgressMeter\n", + "const ∇ = Tensors.gradient" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### NeoHook Material" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "constitutive_driver (generic function with 1 method)" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "immutable NeoHook{T}\n", + " μ::T\n", + " λ::T\n", + "end\n", + "\n", + "function compute_2nd_PK(mp::NeoHook, E)\n", + " I = one(E)\n", + " C = 2E + one(E)\n", + " invC = inv(C)\n", + " J = sqrt(det(C))\n", + " return mp.μ *(I - invC) + mp.λ * log(J) * invC\n", + "end\n", + "\n", + "function constitutive_driver(mp::NeoHook, E)\n", + " ∂S∂E, SPK = ∇(E -> compute_2nd_PK(mp, E), E, :all)\n", + " return SPK, ∂S∂E\n", + "end" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Assembler routines" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "assemble (generic function with 1 method)" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Loop over all cells \n", + "function assemble{dim}(grid::Grid{dim}, dh::DofHandler, K, cv, fv, mp, u)\n", + " n = ndofs_per_cell(dh)\n", + " Ke = zeros(n, n)\n", + " fe = zeros(n)\n", + "\n", + " f = zeros(ndofs(dh))\n", + " assembler = start_assemble(K, f)\n", + "\n", + " global_dofs = zeros(Int, n)\n", + "\n", + " # loop over all cells in the grid\n", + " @timeit \"assemble\" for cell in CellIterator(dh)\n", + " # reset\n", + " fill!(Ke, 0)\n", + " fill!(fe, 0)\n", + "\n", + " celldofs!(global_dofs, cell)\n", + " ue = u[global_dofs] # element dofs\n", + " @timeit \"inner assemble\" assemble_element!(Ke, fe, cell, cv, fv, mp, ue)\n", + "\n", + " assemble!(assembler, fe, Ke, global_dofs)\n", + " end\n", + "\n", + " return f, K\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "assemble_element! (generic function with 1 method)" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Assembles the contribution from the cell to ke and fe\n", + "function assemble_element!(ke, fe, cell, cv, fv, mp, ue)\n", + " b = Vec{3}((0.0, -0.5, 0.0))\n", + " t = Vec{3}((0.1, 0.0, 0.0))\n", + " ndofs = getnbasefunctions(cv)\n", + " reinit!(cv, cell)\n", + " fill!(ke, 0.0)\n", + " fill!(fe, 0.0)\n", + " δE = Vector{SymmetricTensor{2, 3, eltype(ue), 6}}(ndofs)\n", + "\n", + " for qp in 1:getnquadpoints(cv)\n", + " ∇u = function_gradient(cv, qp, ue)\n", + " dΩ = getdetJdV(cv, qp)\n", + "\n", + " # strain and stress + tangent\n", + " F = one(∇u) + ∇u\n", + " E = symmetric(1/2 * (F' ⋅ F - one(F)))\n", + "\n", + " S, ∂S∂E = constitutive_driver(mp, E)\n", + "\n", + " # Hoist computations of δE\n", + " for i in 1:ndofs\n", + " δFi = shape_gradient(cv, qp, i)\n", + " δE[i] = symmetric(1/2*(δFi'⋅F + F'⋅δFi))\n", + " end\n", + "\n", + " for i in 1:ndofs\n", + " δFi = shape_gradient(cv, qp, i)\n", + " δu = shape_value(cv, qp, i)\n", + " fe[i] += (δE[i] ⊡ S) * dΩ\n", + " fe[i] -= (δu ⋅ b) * dΩ\n", + " δE∂S∂E = δE[i] ⊡ ∂S∂E\n", + " S∇δu = S ⋅ δFi'\n", + " for j in 1:ndofs\n", + " δ∇uj = shape_gradient(cv, qp, j)\n", + " ke[i, j] += (δE∂S∂E ⊡ δE[j] + S∇δu ⊡ δ∇uj' ) * dΩ\n", + " end\n", + " end\n", + " end\n", + "\n", + " for face in 1:nfaces(cell)\n", + " if onboundary(cell, face)\n", + " reinit!(fv, cell, face)\n", + " for q_point in 1:getnquadpoints(fv)\n", + " dΓ = getdetJdV(fv, q_point)\n", + " for i in 1:ndofs\n", + " δu = shape_value(fv, q_point, i)\n", + " fe[i] -= (δu ⋅ t) * dΓ\n", + " end\n", + " end\n", + " end\n", + " end\n", + "end" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Main solver routine" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "solve (generic function with 1 method)" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "function solve()\n", + " reset_timer!()\n", + "\n", + " const dim = 3\n", + "\n", + " # Generate a grid\n", + " N = 20\n", + " L = 1.0\n", + " left = zero(Vec{dim})\n", + " right = L * ones(Vec{dim})\n", + " grid = generate_grid(Tetrahedron, ntuple(x->N, dim), left, right)\n", + "\n", + " # Node sets\n", + " addnodeset!(grid, \"clamped\", x -> norm(x[1]) ≈ 1)\n", + " addnodeset!(grid, \"rotation\", x -> norm(x[1]) ≈ 0)\n", + "\n", + " # Material parameters\n", + " E = 10.0\n", + " ν = 0.3\n", + " μ = E / (2(1 + ν))\n", + " λ = (E * ν) / ((1 + ν) * (1 - 2ν))\n", + " mp = NeoHook(μ, λ)\n", + "\n", + " # finite element base\n", + " ip = Lagrange{dim, RefTetrahedron, 1}()\n", + " qr = QuadratureRule{dim, RefTetrahedron}(1)\n", + " qr_face = QuadratureRule{dim-1, RefTetrahedron}(1)\n", + " cv = CellVectorValues(qr, ip)\n", + " fv = FaceVectorValues(qr_face, ip)\n", + "\n", + " # DofHandler\n", + " dh = DofHandler(grid)\n", + " push!(dh, :u, dim) # Add a displacement field\n", + " close!(dh)\n", + "\n", + " function rotation(X, t, θ = deg2rad(60.0))\n", + " x, y, z = X\n", + " return t * Vec{dim}(\n", + " (0.0,\n", + " L/2 - y + (y-L/2)*cos(θ) - (z-L/2)*sin(θ),\n", + " L/2 - z + (y-L/2)*sin(θ) + (z-L/2)*cos(θ)\n", + " ))\n", + " end\n", + "\n", + " dbc = DirichletBoundaryConditions(dh)\n", + " # Add a homogenoush boundary condition on the \"clamped\" edge\n", + " add!(dbc, :u, getnodeset(grid, \"clamped\"), (x,t) -> [0.0, 0.0, 0.0], collect(1:dim))\n", + " add!(dbc, :u, getnodeset(grid, \"rotation\"), (x,t) -> rotation(x, t), collect(1:dim))\n", + " close!(dbc)\n", + " t = 0.5\n", + " JuAFEM.update!(dbc, t)\n", + "\n", + " println(\"Analysis with \", length(grid.cells), \" elements\")\n", + "\n", + " # pre-allocate\n", + " _ndofs = ndofs(dh)\n", + " un = zeros(_ndofs) # previous solution vector\n", + " u = zeros(_ndofs)\n", + " Δu = zeros(_ndofs)\n", + "\n", + " apply!(un, dbc)\n", + "\n", + " K = create_sparsity_pattern(dh)\n", + "\n", + " newton_itr = -1\n", + " NEWTON_TOL = 1e-8\n", + " prog = ProgressMeter.ProgressThresh(NEWTON_TOL, \"Solving:\")\n", + "\n", + " while true; newton_itr += 1\n", + " u = un + Δu\n", + " f, K = assemble(grid, dh, K, cv, fv, mp, u)\n", + " normg = norm(f[JuAFEM.free_dofs(dbc)])\n", + " apply_zero!(K, f, dbc)\n", + " ProgressMeter.update!(prog, normg; showvalues = [(:iter, newton_itr)])\n", + "\n", + " if normg < NEWTON_TOL\n", + " break\n", + " end\n", + "\n", + " if newton_itr > 30\n", + " error(\"Reached maximum Newton iterations, aborting\")\n", + " break\n", + " end\n", + "\n", + " @timeit \"linear solve\" ΔΔu, flag, relres, iter, resvec = cg(K, f; maxIter = 1000, tol = min(1e-3, normg))\n", + " @assert flag == 0\n", + "\n", + " apply_zero!(ΔΔu, dbc)\n", + " Δu -= ΔΔu\n", + " end\n", + "\n", + " # save the solution\n", + " @timeit \"export\" begin\n", + " vtk = vtk_grid(\"hyperelasticity\", dh, u)\n", + " vtk_save(vtk)\n", + " end\n", + "\n", + " print_timer(linechars = :ascii)\n", + " return u\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Analysis with 40000 elements\n", + "Solving: (thresh = 1e-08, value = 0.774902)\u001b[1m\u001b[34m\n", + "Solving: (thresh = 1e-08, value = 0.13008)\u001b[1m\u001b[34m\n", + "Solving: (thresh = 1e-08, value = 0.0165431)\u001b[1m\u001b[34m\n", + "Solving: (thresh = 1e-08, value = 0.000754111)\u001b[1m\u001b[34m\n", + "Solving: (thresh = 1e-08, value = 7.68402e-06)\u001b[1m\u001b[34m\n", + "Solving: Time: 0:00:04 (6 iterations)\u001b[1m\u001b[34m\n", + " iter: 5\u001b[0m\n", + " \u001b[1m---------------------------------------------------------------------------\u001b[22m\n", + " Time Allocations \n", + " ---------------------- -----------------------\n", + " Tot / % measured: 4.43s / 80.5% 758MiB / 65.5% \n", + "\n", + " Section ncalls time %tot avg alloc %tot avg\n", + " ---------------------------------------------------------------------------\n", + " assemble 6 2.30s 64.6% 384ms 478MiB 96.2% 79.6MiB\n", + " inner assemble 240k 1.87s 52.3% 7.78μs 412MiB 82.9% 1.76KiB\n", + " linear solve 5 1.17s 32.8% 234ms 4.31MiB 0.87% 882KiB\n", + " export 1 93.3ms 2.61% 93.3ms 14.6MiB 2.94% 14.6MiB\n", + " \u001b[1m---------------------------------------------------------------------------\u001b[22m" + ] + } + ], + "source": [ + "u = solve();" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hyperelasticity passed!\n" + ] + } + ], + "source": [ + "Base.Test.@test maximum(u) ≈ 0.3415063509461096\n", + "println(\"Hyperelasticity passed!\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Julia 0.5.1-pre", + "language": "julia", + "name": "julia-0.5" + }, + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "0.5.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From ea1e69989b18109bd6d9d4049d959a1eb8ba292b Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Thu, 23 Mar 2017 20:21:43 +0100 Subject: [PATCH 22/44] add a heat example --- examples/heat_square.ipynb | 248 +++++++++++++++++++++++++++++++++++++ 1 file changed, 248 insertions(+) create mode 100644 examples/heat_square.ipynb diff --git a/examples/heat_square.ipynb b/examples/heat_square.ipynb new file mode 100644 index 0000000000..067c608ffd --- /dev/null +++ b/examples/heat_square.ipynb @@ -0,0 +1,248 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Solve heat conduction on a square with a uniform area specific heat source" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "using JuAFEM\n", + "using UnicodePlots" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "grid = generate_grid(Quadrilateral, (20,20))\n", + "addnodeset!(grid, \"boundary\", x -> abs(x[1]) ≈ 1 || abs(x[2]) ≈ 1);" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "dim = 2\n", + "ip = Lagrange{dim, RefCube, 1}()\n", + "qr = QuadratureRule{dim, RefCube}(2)\n", + "cellvalues = CellScalarValues(qr, ip);" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "DofHandler\n", + " Fields:\n", + " T dim: 1\n", + " Total dofs: 441\n", + " Dofs per cell: 4" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dh = DofHandler(grid)\n", + "push!(dh, :T, 1) # Add a temperature field\n", + "close!(dh)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "dbc = DirichletBoundaryConditions(dh)\n", + "add!(dbc, :T, getnodeset(grid, \"boundary\"), (x,t) -> 0.0)\n", + "close!(dbc)\n", + "update!(dbc, 0.0)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[1m\u001b[37m Sparsity Pattern\n", + "\u001b[0m\u001b[1m\u001b[37m ┌──────────────────────────────────────────┐\u001b[0m \n", + " \u001b[1m\u001b[37m1\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[31m> 0\u001b[0m\n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[34m< 0\u001b[0m\n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣆\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⢦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣤\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠛\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠳\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠹\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + " \u001b[1m\u001b[37m441\u001b[0m\u001b[1m\u001b[37m │\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[37m⠀\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[31m⠻\u001b[0m\u001b[1m\u001b[31m⣦\u001b[0m\u001b[1m\u001b[37m│\u001b[0m \u001b[1m\u001b[37m\u001b[0m \n", + "\u001b[1m\u001b[37m └──────────────────────────────────────────┘\u001b[0m \n", + "\u001b[1m\u001b[37m 1\u001b[0m\u001b[1m\u001b[37m \u001b[0m\u001b[1m\u001b[37m 441\n", + "\u001b[0m\u001b[1m\u001b[37m nz = 3721\n", + "\u001b[0m" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "K = create_sparsity_pattern(dh);\n", + "fill!(K.nzval, 1.0);\n", + "spy(K)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "doassemble (generic function with 1 method)" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "function doassemble{dim}(cellvalues::CellScalarValues{dim}, \n", + " K::SparseMatrixCSC, grid::Grid, dh::DofHandler)\n", + "\n", + " b = 1.0\n", + " f = zeros(ndofs(dh))\n", + " assembler = start_assemble(K, f)\n", + " \n", + " n_basefuncs = getnbasefunctions(cellvalues)\n", + " global_dofs = zeros(Int, ndofs_per_cell(dh))\n", + "\n", + " fe = zeros(n_basefuncs) # Local force vector\n", + " Ke = zeros(n_basefuncs, n_basefuncs) # Local stiffness mastrix\n", + "\n", + " @inbounds for (cellcount, cell) in enumerate(CellIterator(dh))\n", + " fill!(Ke, 0)\n", + " fill!(fe, 0)\n", + " \n", + " reinit!(cellvalues, cell)\n", + " for q_point in 1:getnquadpoints(cellvalues)\n", + " dΩ = getdetJdV(cellvalues, q_point)\n", + " for i in 1:n_basefuncs\n", + " δT = shape_value(cellvalues, q_point, i)\n", + " ∇δTi = shape_gradient(cellvalues, q_point, i)\n", + " fe[i] += (δT * b) * dΩ\n", + " for j in 1:n_basefuncs\n", + " ∇δTj = shape_gradient(cellvalues, q_point, j)\n", + " Ke[i, j] += (∇δTi ⋅ ∇δTj) * dΩ\n", + " end\n", + " end\n", + " end\n", + " \n", + " celldofs!(global_dofs, cell)\n", + " assemble!(assembler, fe, Ke, global_dofs)\n", + " end\n", + " return K, f\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "K, f = doassemble(cellvalues, K, grid, dh);" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "apply!(K, f, dbc)\n", + "u = K \\ f;" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "vtkfile = vtk_grid(\"heat\", dh, u)\n", + "vtk_save(vtkfile);" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Julia 0.5.1-pre", + "language": "julia", + "name": "julia-0.5" + }, + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "0.5.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 57aa6f8667cd843a8cef1e4b93d8284e057b7e62 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Thu, 23 Mar 2017 20:43:41 +0100 Subject: [PATCH 23/44] add figures --- examples/cantilever.ipynb | 69 +++++++++++++++++++-------- examples/{ => figures}/cant.png | Bin examples/figures/heat_square.png | Bin 0 -> 68042 bytes examples/figures/hyperelasticity.png | Bin 0 -> 93956 bytes examples/heat_square.ipynb | 7 +++ examples/hyperelasticity.ipynb | 14 ++++++ 6 files changed, 70 insertions(+), 20 deletions(-) rename examples/{ => figures}/cant.png (100%) create mode 100644 examples/figures/heat_square.png create mode 100644 examples/figures/hyperelasticity.png diff --git a/examples/cantilever.ipynb b/examples/cantilever.ipynb index 52db25a40e..25600c558e 100644 --- a/examples/cantilever.ipynb +++ b/examples/cantilever.ipynb @@ -1,21 +1,25 @@ { "cells": [ { - "attachments": { - "cant.png": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA/MAAAIgCAIAAABGQ67BAAAgAElEQVR42uzdeZRcZZ0//s/d91q7lt67s4eYgAgMiwiDEkQIJMBIRAQUGQMDiIPOccHhuBw1gzIMKBiWGUWEwFeQTQUiKPyILAEEsofsvVVV1373/ffHrVSa7iRERQX5vA6HU/3UU7fuvV0N7/vU53kuEYYhIIQQQgghhN7lSDwFCCGEEEIIYbJHCCGEEEIIYbJHCCGEEEIIYbJHCCGEEEIIYbJHCCGEEEIIkz1CCCGEEEIIkz1CCCGEEEIIkz1CCCGEEEIIkz1CCCGEEEKY7BFCCCGEEEKY7BFCCCGEEEKY7BFCCCGEEEKY7BFCCCGEEMJkjxBCCCGEEMJkjxBCCCGEEMJkjxBCCCGEEMJkjxBCCCGEECZ7hBBCCCGEECZ7hBBCCCGEECZ7hBBCCCGEECZ7hBBCCCGEMNkjhBBCCCGEMNkjhBBCCCGEMNkjhBBCCCGEMNkjhBBCCCGEyR4hhBBCCCGEyR4hhBBCCCGEyR4hhBBCCCGEyR4hhBBCCCGEyR4hhBBCCCFM9gghhBBCCCFM9gghhBBCCCFM9gghhBBCCCFM9gghhBBCCGGyRwghhBBCCGGyRwghhBBCCGGyRwghhBBCCGGyRwghhBBCCJM9QgghhBBCCJM9QgghhBBCCJM9QgghhBBCCJM9QgghhBBCmOwRQgghhBBCmOwRQgghhBBCmOwRQgghhBBCmOwRQgghhBDCZI8QQgghhBDCZI8QQgghhBDCZI8QQgghhBDCZI8QQgghhBAme4QQQgghhBAme4QQQgghhBAme4QQQgghhBAme4QQQgghhBAme4QQQgghhDDZI4QQQgghhDDZI4QQQgghhDDZI4QQQgghhDDZI4QQQgghhMkeIYQQQgghhMkeIYQQQgghhMkeIYQQQgghhMkeIYQQQgghTPYIIYQQQgghTPYIIYQQQgghTPYIIYQQQgghTPYIIYQQQghhskcIIYQQQghhskcIIYQQQghhskcIIYQQQghhskcIIYQQQgiTPUIIIYQQQgiTPUIIIYQQQgiTPUIIIYQQQgiTPUIIIYTe8+bMmUMQBMuyhULhAN0KhQLLsgRBzJkz5x2yzxNb/ho7NvVdECZ7hBBCCKF3Ot/377jjjgN0uOOOO3zfxxOFMNkjhBBCCL2jnXbaaStWrPA8b5/Pep63YsWK008//R2yt4sWLfrkJz+JvzWEyR4hhBBCaLJly5YNDQ09+uij+3z2V7/61dDQ0KWXXvoO2dvrrrvurrvuwt8awmSPEEIIITTZKaec0t/ff/PNN+/z2VtuuWXatGkLFy58h+ztrbfe+r3vfQ9/awiTPUIIIYT+AR1guufBzC6lKOpzn/vcqlWrtmzZMumprVu3Pv7445/73OdIch8pyDCMb3/72x/+8IczmUwsFjvuuOPuvffefe5Ps9n82te+9qEPfSiRSKTT6Y997GPPPPPMpN2LXhWG4U033XTiiSfG4/E5c+YsXbr00UcfDcOwvanrr7/+K1/5CgD88Ic/JAgieqPNmzdHj3/yk5/8SWfDsqzly5cvXLgwn88rinL88cfffffdE9+urVwuX3311ccee6yiKF1dXaeddtqDDz64z54Ikz1CCCGE0N/NZz7zGYZhfvzjH09q//GPf8yy7Kc//empL3nhhRfmzZv39a9/3fO8Sy655IorruA4bunSpV/60pcm9Xz22WcPOeSQ73znO7FY7Kqrrrr44our1eqJJ574f//3f1M3e+65537jG9/o7+//8pe/fMwxxzz++OOLFi26+uqrp/Y88cQTb7nllltuuQUAstls9PiYY445+KN++eWX58+f/+Uvf9n3/UsuueSyyy4LguCTn/zkRRddNGnG8KOPPjp37twVK1bMnDnzq1/96ic+8Ynh4eElS5Z8/OMft20bPz/vViFCCCGE0DvM7Nmz95dSAGD27NkH88Jzzz03kUjout5+1jCMVCr1yU9+cuqmqtVqT08Px3EPPPDAxA0++uijgiBQFNXebLlc7uzsTCQSzzzzTLtbEAR33HEHwzATtxntzKGHHjo0NNTuuXv37nnz5kWXB/s72EnHeJBno1ar9ff3C4LwyCOPTNyxe+65J9qx9ka2bt0qy/Jxxx03NjbW7un7/k033QQAn/3sZ/ET+C6FY/YIIYQQ+se0bNmyer1+zz33tFvuu+++arW6z7mz3/rWt4aHh5cvX75kyZKJ7aeddtry5csnDnh/61vfGhsb++///u/jjz++3UgQxGc+85nLL7986pavv/76np6e9o+9vb3f/e53AWDFihVv7/F+/etf37Vr1/Llyycu+0MQxNKlS7/1rW9N7Pnv//7vHMc99NBD+Xy+3UiS5OWXX37VVVfdfvvt27Ztw8/PuxEme4QQQgj9YzrhhBPmzJlz8803t2vHb7755vnz5x977LFTOz/77LNROp/61EUXXTSxzH316tUURZ177rlTe1544YVTGw8//PBJLUceeSQADA0Nvb3H+9BDDxEEsc9Co8997nPtx2EYPvvssyeffPL4+PimKT72sY8BwP6WFULvcDSeAoQQQgi9M4VhOGnm6P6WqN8ngiCWLVt21VVXvfDCC0cfffQrr7zy4osv3nzzzfucjbpu3brOzk5FUaY+pShKPp8fGxuLfty0aVM+nxcEYWrPwcHBqY3xeHxSSyaTAYAD3yX3zzgbhUKhs7NTluWpr00kEp2dndEhlEqlarW6cuXKlStX7u+92geL3l1wzB4hhBBC7zgdHR0AUKvVJrUXi8U/aTsXXHCBIAjR8pc333yzLMvnn3/+Pnsmk8nR0dFGozH1qUajMTHpzpo1a3R0VFXVqT03bdq0zwuMSS3tqv2392zkcrn9HUK9Xm8fQiaTSSQSX/rSlw5Qro2rcGKyRwghhBB6e/T19QHAK6+8Mqk9Wlny4CWTyaVLl953331bt269++67zz///H2OygNAVJs+dS0dALjjjjsm/vjBD34wDMOf/OQnU3veeuutf8ezccYZZ8B+yvcnNpIkefzxx9933337vAZYsWLFwoULy+UyfgjflXAS8btOpWJs2VJ+/vmhX/96y113vXbDDc8tW/bIKafcOW/eD2Ox78Ri35k374ennHLnsmWP3HTTCw88sGH16t1bt1ZU1cZThxBC6N3iV7/6VZShJ65ss2HDhoGBATjotXEiL7zwAgBEi76/9tpr+1tYplwud3d3syx77733BkHQ7vPII48IghAtfj+xpyRJjz322MQlaG655ZZUKgVT1sZ5yzVt3nJtnIM8G7VabWBgYOoh3H///RzHRcvjRC1vvPGGLMsnnXTS6OjoxPe9++67WZZdtmwZfgLfpbDO/p3CNN1azarVzIn/3rGjXi7r1aoZ/VOpmNWq+ZabWr9+fP368antsszmclIuJ+dyUldXbMGC3KxZ6YGBxMBAAs8/Qgihd5RTTz116dKlK1eunDNnzsKFC6dNm7Z+/fqHH3548eLFO3fu/JM2deSRR77//e//4x//eOyxxy5YsGB/3dLp9P333/+JT3zi3HPPvemmm4477jiWZZ9//vlV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" - } - }, "cell_type": "markdown", "metadata": {}, "source": [ - "![cant.png](attachment:cant.png)" + "## Cantilever beam with a traction load on one side" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![cant.png](figures/cant.png)" ] }, { "cell_type": "code", "execution_count": 1, - "metadata": {}, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "using JuAFEM\n", @@ -39,7 +43,9 @@ { "cell_type": "code", "execution_count": 3, - "metadata": {}, + "metadata": { + "collapsed": false + }, "outputs": [ { "data": { @@ -63,6 +69,7 @@ "cell_type": "code", "execution_count": 4, "metadata": { + "collapsed": true, "scrolled": true }, "outputs": [], @@ -78,7 +85,9 @@ { "cell_type": "code", "execution_count": 5, - "metadata": {}, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "# Interpolations and values\n", @@ -91,7 +100,9 @@ { "cell_type": "code", "execution_count": 6, - "metadata": {}, + "metadata": { + "collapsed": false + }, "outputs": [ { "data": { @@ -118,7 +129,9 @@ { "cell_type": "code", "execution_count": 7, - "metadata": {}, + "metadata": { + "collapsed": false + }, "outputs": [ { "name": "stdout", @@ -173,7 +186,9 @@ { "cell_type": "code", "execution_count": 8, - "metadata": {}, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "# Boundaryconditions\n", @@ -188,7 +203,9 @@ { "cell_type": "code", "execution_count": 9, - "metadata": {}, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "# Create the stiffness tensor\n", @@ -204,7 +221,9 @@ { "cell_type": "code", "execution_count": 10, - "metadata": {}, + "metadata": { + "collapsed": false + }, "outputs": [ { "data": { @@ -278,7 +297,9 @@ { "cell_type": "code", "execution_count": 18, - "metadata": {}, + "metadata": { + "collapsed": false + }, "outputs": [ { "name": "stdout", @@ -305,7 +326,9 @@ { "cell_type": "code", "execution_count": 19, - "metadata": {}, + "metadata": { + "collapsed": false + }, "outputs": [ { "name": "stdout", @@ -323,7 +346,9 @@ { "cell_type": "code", "execution_count": 20, - "metadata": {}, + "metadata": { + "collapsed": false + }, "outputs": [ { "name": "stdout", @@ -340,7 +365,9 @@ { "cell_type": "code", "execution_count": 14, - "metadata": {}, + "metadata": { + "collapsed": false + }, "outputs": [ { "data": { @@ -363,7 +390,9 @@ { "cell_type": "code", "execution_count": 15, - "metadata": {}, + "metadata": { + "collapsed": false + }, "outputs": [ { "name": "stdout", @@ -382,7 +411,7 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Julia 0.5.1", + "display_name": "Julia 0.5.1-pre", "language": "julia", "name": "julia-0.5" }, diff --git a/examples/cant.png b/examples/figures/cant.png similarity index 100% rename from examples/cant.png rename to examples/figures/cant.png diff --git a/examples/figures/heat_square.png b/examples/figures/heat_square.png new file mode 100644 index 0000000000000000000000000000000000000000..5db5b197b30f94ab867796b6eaf0ef6632906593 GIT binary patch literal 68042 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

19khsic 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 literal 0 HcmV?d00001 diff --git a/examples/helmholtz.ipynb b/examples/helmholtz.ipynb new file mode 100644 index 0000000000..0f860d8e87 --- /dev/null +++ b/examples/helmholtz.ipynb @@ -0,0 +1,317 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![cant.png](figures/helmholtz.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using Method of Manufactured solutions and solve the Helmholtz equation. \n", + "\n", + "Problem taken from http://www.dealii.org/8.4.1/doxygen/deal.II/step_7.html" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[1m\u001b[34mINFO: Recompiling stale cache file /home/kristoffer/.julia/lib/v0.5/JuAFEM.ji for module JuAFEM.\n", + "\u001b[0m" + ] + }, + { + "data": { + "text/plain": [ + "hessian (generic function with 2 methods)" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "using JuAFEM\n", + "using KrylovMethods\n", + "const ∇ = Tensors.gradient\n", + "const Δ = Tensors.hessian" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "grid = generate_grid(Quadrilateral, (150, 150))\n", + "addnodeset!(grid, \"dirichlet_boundary\", x -> x[1] ≈ 1 || x[2] ≈ 1);" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "dim = 2\n", + "ip = Lagrange{dim, RefCube, 1}()\n", + "qr = QuadratureRule{dim, RefCube}(2)\n", + "qr_face = QuadratureRule{dim-1, RefCube}(2)\n", + "cellvalues = CellScalarValues(qr, ip);\n", + "facevalues = FaceScalarValues(qr_face, ip);" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "DofHandler\n", + " Fields:\n", + " u dim: 1\n", + " Total dofs: 22801\n", + " Dofs per cell: 4" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dh = DofHandler(grid)\n", + "push!(dh, :u, 1)\n", + "close!(dh)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "u_ana (generic function with 1 method)" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "function u_ana{T}(x::Vec{2, T}) \n", + " xs = (Vec{2}((-0.5, 0.5)),\n", + " Vec{2}((-0.5, -0.5)),\n", + " Vec{2}(( 0.5, -0.5)))\n", + " σ = 1/8\n", + " s = zero(eltype(x))\n", + " for i in 1:3\n", + " s += exp(- norm(x - xs[i])^2 / σ^2)\n", + " end\n", + " return max(1e-15 * one(T), s) # Denormals, be gone\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "dbc = DirichletBoundaryConditions(dh)\n", + "add!(dbc, :u, getnodeset(grid, \"dirichlet_boundary\"), (x,t) -> u_ana(x))\n", + "close!(dbc)\n", + "update!(dbc, 0.0)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "K = create_sparsity_pattern(dh);" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "doassemble (generic function with 1 method)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "function doassemble{dim}(cellvalues::CellScalarValues{dim}, facevalues::FaceScalarValues{dim},\n", + " K::SparseMatrixCSC, dh::DofHandler)\n", + " b = 1.0\n", + " f = zeros(ndofs(dh))\n", + " assembler = start_assemble(K, f)\n", + " \n", + " n_basefuncs = getnbasefunctions(cellvalues)\n", + " global_dofs = zeros(Int, ndofs_per_cell(dh))\n", + "\n", + " fe = zeros(n_basefuncs) # Local force vector\n", + " Ke = zeros(n_basefuncs, n_basefuncs) # Local stiffness mastrix\n", + "\n", + " @inbounds for (cellcount, cell) in enumerate(CellIterator(dh))\n", + " fill!(Ke, 0)\n", + " fill!(fe, 0)\n", + " coords = getcoordinates(cell)\n", + "\n", + " reinit!(cellvalues, cell)\n", + " for q_point in 1:getnquadpoints(cellvalues)\n", + " dΩ = getdetJdV(cellvalues, q_point)\n", + " \n", + " coords_qp = spatial_coordinate(cellvalues, q_point, coords)\n", + " f_true = trace(hessian(u_ana, coords_qp)) + u_ana(coords_qp)\n", + " for i in 1:n_basefuncs\n", + " δu = shape_value(cellvalues, q_point, i)\n", + " ∇δu = shape_gradient(cellvalues, q_point, i)\n", + " fe[i] += (δu * f_true) * dΩ\n", + " for j in 1:n_basefuncs\n", + " u = shape_value(cellvalues, q_point, j)\n", + " ∇u = shape_gradient(cellvalues, q_point, j)\n", + " Ke[i, j] += (∇δu ⋅ ∇u + δu * u) * dΩ\n", + " end\n", + " end\n", + " end\n", + " \n", + " for face in 1:nfaces(cell)\n", + " if onboundary(cell, face) && \n", + " ((cellcount, face) ∈ getfaceset(grid, \"left\") || \n", + " (cellcount, face) ∈ getfaceset(grid, \"bottom\"))\n", + " reinit!(facevalues, cell, face)\n", + " for q_point in 1:getnquadpoints(facevalues)\n", + " coords_qp = spatial_coordinate(facevalues, q_point, coords)\n", + " n = getnormal(facevalues, q_point)\n", + " g = gradient(u_ana, coords_qp) ⋅ n\n", + " dΓ = getdetJdV(facevalues, q_point)\n", + " for i in 1:n_basefuncs\n", + " δu = shape_value(facevalues, q_point, i)\n", + " fe[i] += (δu * g) * dΓ\n", + " end\n", + " end\n", + " end\n", + " end\n", + " \n", + " celldofs!(global_dofs, cell)\n", + " assemble!(assembler, fe, Ke, global_dofs)\n", + " end\n", + " return K, f\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "K, f = doassemble(cellvalues, facevalues, K, dh);\n", + "apply!(K, f, dbc)\n", + "u = cholfact(Symmetric(K)) \\ f;" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "1-element Array{String,1}:\n", + " \"helmholtz.vtu\"" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "vtkfile = vtk_grid(\"helmholtz\", dh, u)\n", + "vtk_save(vtkfile)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Helmholtz successful\n" + ] + } + ], + "source": [ + "Base.Test.@test maximum(u) ≈ 0.05637592090022005\n", + "println(\"Helmholtz successful\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Julia 0.5.1-pre", + "language": "julia", + "name": "julia-0.5" + }, + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "0.5.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/test_notebooks.jl b/test/test_notebooks.jl index 65519d1b3c..0f1cc6a339 100644 --- a/test/test_notebooks.jl +++ b/test/test_notebooks.jl @@ -21,3 +21,8 @@ module HeatSquare nbinclude("../examples/heat_square.ipynb") end +module Helmholtz + using NBInclude + nbinclude("../examples/helmholtz.ipynb") +end + From 28fc20f3d7dc7f83476ca3cdef0f0b44707d4f84 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Sun, 26 Mar 2017 03:28:54 +0200 Subject: [PATCH 35/44] get rid of some parameters fixes to prev commit --- src/FEValues/cell_values.jl | 44 +++++++++---------- src/FEValues/common_values.jl | 78 ++++++++-------------------------- src/FEValues/face_integrals.jl | 10 ++--- src/FEValues/face_values.jl | 48 ++++++++++----------- src/JuAFEM.jl | 6 +-- test/test_cellvalues.jl | 5 --- test/test_facevalues.jl | 14 +++--- 7 files changed, 74 insertions(+), 131 deletions(-) diff --git a/src/FEValues/cell_values.jl b/src/FEValues/cell_values.jl index fe7e85c303..c5bfdd2fb5 100644 --- a/src/FEValues/cell_values.jl +++ b/src/FEValues/cell_values.jl @@ -43,25 +43,23 @@ CellVectorValues([::Type{T}], quad_rule::QuadratureRule, func_interpol::Interpol CellValues # CellScalarValues -immutable CellScalarValues{dim, T <: Real, FIP <: Interpolation, GIP <: Interpolation, shape <: AbstractRefShape} <: CellValues{dim, T, FIP, GIP} +immutable CellScalarValues{dim, T <: Real, refshape <: AbstractRefShape} <: CellValues{dim, T, refshape} N::Matrix{T} dNdx::Matrix{Vec{dim, T}} dNdξ::Matrix{Vec{dim, T}} detJdV::Vector{T} - quad_rule::QuadratureRule{dim, shape, T} - func_interpol::FIP M::Matrix{T} dMdξ::Matrix{Vec{dim, T}} - geom_interpol::GIP + qr_weights::Vector{T} end -CellScalarValues{dim, FIP <: Interpolation, GIP <: Interpolation}(quad_rule::QuadratureRule{dim}, func_interpol::FIP, geom_interpol::GIP=func_interpol) = +function CellScalarValues{dim}(quad_rule::QuadratureRule{dim}, func_interpol::Interpolation, + geom_interpol::Interpolation=func_interpol) CellScalarValues(Float64, quad_rule, func_interpol, geom_interpol) +end -getnbasefunctions(cv::CellScalarValues) = getnbasefunctions(cv.func_interpol) - -function CellScalarValues{dim, T, FIP <: Interpolation, GIP <: Interpolation, shape <: AbstractRefShape}( - ::Type{T}, quad_rule::QuadratureRule{dim, shape}, func_interpol::FIP, geom_interpol::GIP=func_interpol) +function CellScalarValues{dim, T, shape <: AbstractRefShape}(::Type{T}, quad_rule::QuadratureRule{dim, shape}, + func_interpol::Interpolation, geom_interpol::Interpolation=func_interpol) @assert getdim(func_interpol) == getdim(geom_interpol) @assert getrefshape(func_interpol) == getrefshape(geom_interpol) == shape @@ -87,29 +85,27 @@ function CellScalarValues{dim, T, FIP <: Interpolation, GIP <: Interpolation, sh detJdV = zeros(T, n_qpoints) - CellScalarValues(N, dNdx, dNdξ, detJdV, quad_rule, func_interpol, M, dMdξ, geom_interpol) + CellScalarValues{dim, T, shape}(N, dNdx, dNdξ, detJdV, M, dMdξ, quad_rule.weights) end # CellVectorValues -immutable CellVectorValues{dim, T <: Real, FIP <: Interpolation, GIP <: Interpolation, shape <: AbstractRefShape, M} <: CellValues{dim, T, FIP, GIP} +immutable CellVectorValues{dim, T <: Real, refshape <: AbstractRefShape, M} <: CellValues{dim, T, refshape} N::Matrix{Vec{dim, T}} dNdx::Matrix{Tensor{2, dim, T, M}} dNdξ::Matrix{Tensor{2, dim, T, M}} detJdV::Vector{T} - quad_rule::QuadratureRule{dim, shape, T} - func_interpol::FIP M::Matrix{T} dMdξ::Matrix{Vec{dim, T}} - geom_interpol::GIP + qr_weights::Vector{T} end -CellVectorValues{dim, FIP <: Interpolation, GIP <: Interpolation}(quad_rule::QuadratureRule{dim}, func_interpol::FIP, geom_interpol::GIP=func_interpol) = +function CellVectorValues{dim}(quad_rule::QuadratureRule{dim}, func_interpol::Interpolation, geom_interpol::Interpolation=func_interpol) CellVectorValues(Float64, quad_rule, func_interpol, geom_interpol) +end -getnbasefunctions{dim}(cvv::CellVectorValues{dim}) = getnbasefunctions(cvv.func_interpol) * dim +function CellVectorValues{dim, T, shape <: AbstractRefShape}(::Type{T}, quad_rule::QuadratureRule{dim, shape}, func_interpol::Interpolation, + geom_interpol::Interpolation=func_interpol) -function CellVectorValues{dim, T, FIP <: Interpolation, GIP <: Interpolation, shape <: AbstractRefShape}( - ::Type{T}, quad_rule::QuadratureRule{dim, shape}, func_interpol::FIP, geom_interpol::GIP=func_interpol) @assert getdim(func_interpol) == getdim(geom_interpol) @assert getrefshape(func_interpol) == getrefshape(geom_interpol) == shape n_qpoints = length(getweights(quad_rule)) @@ -148,18 +144,20 @@ function CellVectorValues{dim, T, FIP <: Interpolation, GIP <: Interpolation, sh end detJdV = zeros(T, n_qpoints) + MM = Tensors.n_components(Tensors.get_base(eltype(dNdx))) - CellVectorValues(N, dNdx, dNdξ, detJdV, quad_rule, func_interpol, M, dMdξ, geom_interpol) + CellVectorValues{dim, T, shape, MM}(N, dNdx, dNdξ, detJdV, M, dMdξ, quad_rule.weights) end function reinit!{dim, T}(cv::CellValues{dim}, x::AbstractVector{Vec{dim, T}}) - n_geom_basefuncs = getnbasefunctions(getgeometryinterpolation(cv)) - n_func_basefuncs = getnbasefunctions(getfunctioninterpolation(cv)) + n_geom_basefuncs = getngeobasefunctions(cv) + n_func_basefuncs = getn_scalarbasefunctions(cv) @assert length(x) == n_geom_basefuncs isa(cv, CellVectorValues) && (n_func_basefuncs *= dim) - @inbounds for i in 1:length(getpoints(cv.quad_rule)) - w = getweights(cv.quad_rule)[i] + + @inbounds for i in 1:length(cv.qr_weights) + w = cv.qr_weights[i] fecv_J = zero(Tensor{2, dim}) for j in 1:n_geom_basefuncs fecv_J += x[j] ⊗ cv.dMdξ[j, i] diff --git a/src/FEValues/common_values.jl b/src/FEValues/common_values.jl index a5dc528455..6f6fee6e75 100644 --- a/src/FEValues/common_values.jl +++ b/src/FEValues/common_values.jl @@ -1,8 +1,13 @@ # Common methods for all `Values` objects -@compat const ScalarValues{dim, T, FS, GS} = Union{CellScalarValues{dim, T, FS, GS}, FaceScalarValues{dim, T, FS, GS}} -@compat const VectorValues{dim, T, FS, GS} = Union{CellVectorValues{dim, T, FS, GS}, FaceVectorValues{dim, T, FS, GS}} +@compat const ScalarValues{dim, T, shape} = Union{CellScalarValues{dim, T, shape}, FaceScalarValues{dim, T, shape}} +@compat const VectorValues{dim, T, shape} = Union{CellVectorValues{dim, T, shape}, FaceVectorValues{dim, T, shape}} +getnbasefunctions(cv::Values) = size(cv.N, 1) +getngeobasefunctions(cv::Values) = size(cv.M, 1) + +getn_scalarbasefunctions(cv::ScalarValues) = size(cv.N, 1) +getn_scalarbasefunctions{dim}(cv::VectorValues{dim}) = size(cv.N, 1) ÷ dim """ Updates a `CellValues`/`FaceValues` object for a cell or face. @@ -27,61 +32,12 @@ reinit!{dim, T}(bv::FaceValues{dim}, x::Vector{Vec{dim, T}}, face::Int) """ reinit! -""" -The quadrature rule for the `Values` type. - - getquadrule(fe_v::Values) - -** Arguments ** - -* `fe_v`: the `Values` object - -** Results ** - -* `::QuadratureRule`: the quadrature rule. - -""" -getquadrule(cv::CellValues) = cv.quad_rule -getquadrule(bv::FaceValues) = bv.quad_rule[bv.current_face[]] - """ The number of quadrature points for the `Values` type. getnquadpoints(fe_v::Values) """ -getnquadpoints(fe::Values) = length(getpoints(getquadrule(fe))) - -""" -The function interpolation for the `Values` type. - - getfunctioninterpolation(fe_v::Values) - -**Arguments** - -* `fe_v`: the `Values` object - -**Results** - -* `::Interpolation`: the function interpolation - -""" -getfunctioninterpolation(fe_v::Values) = fe_v.func_interpol - -""" -The interpolation used for the geometry for the `Values` type. - - getgeometryinterpolation(fe_v::Values) - -**Arguments** - -* `fe_v`: the `Values` object - -**Results** - -* `::Interpolation`: the geometry interpolation - -""" -getgeometryinterpolation(fe_v::Values) = fe_v.geom_interpol +getnquadpoints(fe::Values) = length(fe.qr_weights) """ The product between the determinant of the Jacobian and the quadrature point weight for a given quadrature point: ``\\det(J(\\mathbf{x})) w_q`` @@ -166,7 +122,7 @@ where ``u_i`` are the value of ``u`` in the nodes. For a vector valued function nodal values of ``\\mathbf{u}``. """ function function_value{dim, T}(fe_v::Values{dim}, q_point::Int, u::AbstractVector{T}) - n_base_funcs = getnbasefunctions(getfunctioninterpolation(fe_v)) + n_base_funcs = getn_scalarbasefunctions(fe_v) isa(fe_v, VectorValues) && (n_base_funcs *= dim) @assert length(u) == n_base_funcs val = zero(_valuetype(fe_v, u)) @@ -177,7 +133,7 @@ function function_value{dim, T}(fe_v::Values{dim}, q_point::Int, u::AbstractVect end function function_value{dim, T}(fe_v::VectorValues{dim}, q_point::Int, u::AbstractVector{Vec{dim, T}}) - n_base_funcs = getnbasefunctions(getfunctioninterpolation(fe_v)) + n_base_funcs = getn_scalarbasefunctions(fe_v) @assert length(u) == n_base_funcs val = zero(Vec{dim, T}) basefunc = 1 @@ -222,7 +178,7 @@ For a vector valued function the gradient is computed as where ``\\mathbf{u}_i`` are the nodal values of ``\\mathbf{u}``. """ function function_gradient{dim, T}(fe_v::Values{dim}, q_point::Int, u::AbstractVector{T}) - n_base_funcs = getnbasefunctions(getfunctioninterpolation(fe_v)) + n_base_funcs = getn_scalarbasefunctions(fe_v) isa(fe_v, VectorValues) && (n_base_funcs *= dim) @assert length(u) == n_base_funcs grad = zero(_gradienttype(fe_v, u)) @@ -238,7 +194,7 @@ Base.@pure _gradienttype{dim, T}(::VectorValues{dim}, ::AbstractVector{T}) = Ten # Base.@pure _gradienttype{dim, T}(::VectorValues{dim}, ::AbstractVector{Vec{dim, T}}) = Tensor{2, dim, T} function function_gradient{dim, T}(fe_v::ScalarValues{dim}, q_point::Int, u::AbstractVector{Vec{dim, T}}) - n_base_funcs = getnbasefunctions(getfunctioninterpolation(fe_v)) + n_base_funcs = getn_scalarbasefunctions(fe_v) @assert length(u) == n_base_funcs grad = zero(Tensor{2, dim, T}) @inbounds for i in 1:n_base_funcs @@ -248,7 +204,7 @@ function function_gradient{dim, T}(fe_v::ScalarValues{dim}, q_point::Int, u::Abs end function function_gradient{dim, T}(fe_v::VectorValues{dim}, q_point::Int, u::AbstractVector{Vec{dim, T}}) - n_base_funcs = getnbasefunctions(getfunctioninterpolation(fe_v)) + n_base_funcs = getn_scalarbasefunctions(fe_v) @assert length(u) == n_base_funcs grad = zero(Tensor{2, dim, T}) basefunc_count = 1 @@ -317,7 +273,7 @@ The divergence of a vector valued functions in the quadrature point ``\\mathbf{x where ``\\mathbf{u}_i`` are the nodal values of the function. """ function function_divergence{dim, T}(fe_v::ScalarValues{dim}, q_point::Int, u::AbstractVector{Vec{dim, T}}) - n_base_funcs = getnbasefunctions(getfunctioninterpolation(fe_v)) + n_base_funcs = getn_scalarbasefunctions(fe_v) @assert length(u) == n_base_funcs diverg = zero(T) @inbounds for i in 1:n_base_funcs @@ -327,7 +283,7 @@ function function_divergence{dim, T}(fe_v::ScalarValues{dim}, q_point::Int, u::A end function function_divergence{dim, T}(fe_v::VectorValues{dim}, q_point::Int, u::AbstractVector{T}) - n_base_funcs = getnbasefunctions(getfunctioninterpolation(fe_v))*dim + n_base_funcs = getn_scalarbasefunctions(fe_v)*dim @assert length(u) == n_base_funcs diverg = zero(T) @inbounds for i in 1:n_base_funcs @@ -340,7 +296,7 @@ function function_divergence{dim, T}(fe_v::VectorValues{dim}, q_point::Int, u::A end function function_divergence{dim, T}(fe_v::VectorValues{dim}, q_point::Int, u::AbstractVector{Vec{dim, T}}) - n_base_funcs = getnbasefunctions(getfunctioninterpolation(fe_v)) + n_base_funcs = getn_scalarbasefunctions(fe_v) @assert length(u) == n_base_funcs diverg = zero(T) basefunc_count = 1 @@ -377,7 +333,7 @@ Computes the spatial coordinate in a quadrature point. The coordinate is computed, using the geometric interpolation, as ``\\mathbf{x} = \\sum\\limits_{i = 1}^n M_i (\\mathbf{x}) \\mathbf{\\hat{x}}_i`` """ function spatial_coordinate{dim, T}(fe_v::Values{dim}, q_point::Int, x::AbstractVector{Vec{dim, T}}) - n_base_funcs = getnbasefunctions(getgeometryinterpolation(fe_v)) + n_base_funcs = getngeobasefunctions(fe_v) @assert length(x) == n_base_funcs vec = zero(Vec{dim, T}) @inbounds for i in 1:n_base_funcs diff --git a/src/FEValues/face_integrals.jl b/src/FEValues/face_integrals.jl index 772834c153..45f9778bdf 100644 --- a/src/FEValues/face_integrals.jl +++ b/src/FEValues/face_integrals.jl @@ -15,7 +15,7 @@ function create_face_quad_rule{T, shape <: RefCube}(quad_rule::QuadratureRule{0, return face_quad_rule end -function weighted_normal{T}(::Tensor{2, 1, T}, ::Interpolation{1, RefCube}, face::Int) +function weighted_normal{T}(::Tensor{2, 1, T}, ::FaceValues{1, T, RefCube}, face::Int) face == 1 && return Vec{1,T}((-one(T),)) face == 2 && return Vec{1,T}((one(T),)) error("unknown face number: $face") @@ -46,7 +46,7 @@ function create_face_quad_rule{T, shape <: RefCube}(quad_rule::QuadratureRule{1, return face_quad_rule end -function weighted_normal(J::Tensor{2, 2}, ::Interpolation{2, RefCube}, face::Int) +function weighted_normal{T}(J::Tensor{2, 2}, ::FaceValues{2, T, RefCube}, face::Int) @inbounds begin face == 1 && return Vec{2}(( J[2,1], -J[1,1])) face == 2 && return Vec{2}(( J[2,2], -J[1,2])) @@ -78,7 +78,7 @@ function create_face_quad_rule{T, shape <: RefTetrahedron}(quad_rule::Quadrature return face_quad_rule end -function weighted_normal(J::Tensor{2, 2}, ::Interpolation{2, RefTetrahedron}, face::Int) +function weighted_normal{T}(J::Tensor{2, 2}, ::FaceValues{2, T, RefTetrahedron}, face::Int) @inbounds begin face == 1 && return return Vec{2}((-(J[2,1] - J[2,2]), J[1,1] - J[1,2])) face == 2 && return return Vec{2}((-J[2,2], J[1,2])) @@ -118,7 +118,7 @@ function create_face_quad_rule{T, shape <: RefCube}(quad_rule::QuadratureRule{2, return face_quad_rule end -function weighted_normal(J::Tensor{2, 3}, ::Interpolation{3, RefCube}, face::Int) +function weighted_normal{T}(J::Tensor{2, 3}, ::FaceValues{3, T, RefCube}, face::Int) @inbounds begin face == 1 && return J[:,2] × J[:,1] face == 2 && return J[:,1] × J[:,3] @@ -155,7 +155,7 @@ function create_face_quad_rule{T, shape <: RefTetrahedron}(quad_rule::Quadrature return face_quad_rule end -function weighted_normal(J::Tensor{2, 3}, ::Interpolation{3, RefTetrahedron}, face::Int) +function weighted_normal{T}(J::Tensor{2, 3}, ::FaceValues{3, T, RefTetrahedron}, face::Int) @inbounds begin face == 1 && return J[:,2] × J[:,1] face == 2 && return J[:,1] × J[:,3] diff --git a/src/FEValues/face_values.jl b/src/FEValues/face_values.jl index 85462cbd26..38b872f49a 100644 --- a/src/FEValues/face_values.jl +++ b/src/FEValues/face_values.jl @@ -47,27 +47,25 @@ FaceVectorValues([::Type{T}], quad_rule::QuadratureRule, func_interpol::Interpol FaceValues # FaceScalarValues -immutable FaceScalarValues{dim, T <: Real, FIP <: Interpolation, GIP <: Interpolation, shape <: AbstractRefShape} <: FaceValues{dim, T, FIP, GIP} +immutable FaceScalarValues{dim, T <: Real, refshape <: AbstractRefShape} <: FaceValues{dim, T, refshape} N::Array{T, 3} dNdx::Array{Vec{dim, T}, 3} dNdξ::Array{Vec{dim, T}, 3} detJdV::Matrix{T} normals::Vector{Vec{dim, T}} - quad_rule::Vector{QuadratureRule{dim, shape, T}} - func_interpol::FIP M::Array{T, 3} dMdξ::Array{Vec{dim, T}, 3} - geom_interpol::GIP + qr_weights::Vector{T} current_face::ScalarWrapper{Int} end -FaceScalarValues{dim_qr, FIP <: Interpolation, GIP <: Interpolation}(quad_rule::QuadratureRule{dim_qr}, func_interpol::FIP, geom_interpol::GIP=func_interpol) = +function FaceScalarValues{dim_qr}(quad_rule::QuadratureRule{dim_qr}, func_interpol::Interpolation, + geom_interpol::Interpolation=func_interpol) FaceScalarValues(Float64, quad_rule, func_interpol, geom_interpol) +end -getnbasefunctions(fvv::FaceScalarValues) = getnbasefunctions(fvv.func_interpol) - -function FaceScalarValues{dim_qr, T, FIP <: Interpolation, GIP <: Interpolation, shape <: AbstractRefShape}( - ::Type{T}, quad_rule::QuadratureRule{dim_qr, shape}, func_interpol::FIP, geom_interpol::GIP=func_interpol) +function FaceScalarValues{dim_qr, T, shape <: AbstractRefShape}(::Type{T}, quad_rule::QuadratureRule{dim_qr, shape}, + func_interpol::Interpolation, geom_interpol::Interpolation=func_interpol) @assert getdim(func_interpol) == getdim(geom_interpol) @assert getrefshape(func_interpol) == getrefshape(geom_interpol) == shape @@ -100,31 +98,28 @@ function FaceScalarValues{dim_qr, T, FIP <: Interpolation, GIP <: Interpolation, detJdV = zeros(T, n_qpoints, n_faces) - FaceScalarValues(N, dNdx, dNdξ, detJdV, normals, face_quad_rule, func_interpol, M, dMdξ, geom_interpol, ScalarWrapper(0)) + FaceScalarValues{dim, T, shape}(N, dNdx, dNdξ, detJdV, normals, M, dMdξ, quad_rule.weights, ScalarWrapper(0)) end # FaceVectorValues -immutable FaceVectorValues{dim, T <: Real, FIP <: Interpolation, GIP <: Interpolation, shape <: AbstractRefShape, M} <: FaceValues{dim, T, FIP, GIP} +immutable FaceVectorValues{dim, T <: Real, refshape <: AbstractRefShape, M} <: FaceValues{dim, T, refshape} N::Array{Vec{dim, T}, 3} dNdx::Array{Tensor{2, dim, T, M}, 3} dNdξ::Array{Tensor{2, dim, T, M}, 3} detJdV::Matrix{T} normals::Vector{Vec{dim, T}} - quad_rule::Vector{QuadratureRule{dim, shape, T}} - func_interpol::FIP M::Array{T, 3} dMdξ::Array{Vec{dim, T}, 3} - geom_interpol::GIP + qr_weights::Vector{T} current_face::ScalarWrapper{Int} end -FaceVectorValues{dim_qr, FIP <: Interpolation, GIP <: Interpolation}(quad_rule::QuadratureRule{dim_qr}, func_interpol::FIP, geom_interpol::GIP=func_interpol) = +function FaceVectorValues{dim_qr}(quad_rule::QuadratureRule{dim_qr}, func_interpol::Interpolation, geom_interpol::Interpolation=func_interpol) FaceVectorValues(Float64, quad_rule, func_interpol, geom_interpol) +end -getnbasefunctions{dim}(fvv::FaceVectorValues{dim}) = getnbasefunctions(fvv.func_interpol) * dim - -function FaceVectorValues{dim_qr, T, FIP <: Interpolation, GIP <: Interpolation, shape <: AbstractRefShape}( - ::Type{T}, quad_rule::QuadratureRule{dim_qr, shape}, func_interpol::FIP, geom_interpol::GIP=func_interpol) +function FaceVectorValues{dim_qr, T, shape <: AbstractRefShape}(::Type{T}, quad_rule::QuadratureRule{dim_qr, shape}, + func_interpol::Interpolation, geom_interpol::Interpolation=func_interpol) @assert getdim(func_interpol) == getdim(geom_interpol) @assert getrefshape(func_interpol) == getrefshape(geom_interpol) == shape @@ -173,26 +168,29 @@ function FaceVectorValues{dim_qr, T, FIP <: Interpolation, GIP <: Interpolation, end detJdV = zeros(T, n_qpoints, n_faces) + MM = Tensors.n_components(Tensors.get_base(eltype(dNdx))) + - FaceVectorValues(N, dNdx, dNdξ, detJdV, normals, face_quad_rule, func_interpol, M, dMdξ, geom_interpol, ScalarWrapper(0)) + FaceVectorValues{dim, T, shape, MM}(N, dNdx, dNdξ, detJdV, normals, M, dMdξ, quad_rule.weights, ScalarWrapper(0)) end function reinit!{dim, T}(fv::FaceValues{dim}, x::AbstractVector{Vec{dim, T}}, face::Int) - n_geom_basefuncs = getnbasefunctions(getgeometryinterpolation(fv)) - n_func_basefuncs = getnbasefunctions(getfunctioninterpolation(fv)) + n_geom_basefuncs = getngeobasefunctions(fv) + n_func_basefuncs = getn_scalarbasefunctions(fv) @assert length(x) == n_geom_basefuncs isa(fv, FaceVectorValues) && (n_func_basefuncs *= dim) + fv.current_face[] = face cb = getcurrentface(fv) - @inbounds for i in 1:length(getpoints(fv.quad_rule[cb])) - w = getweights(fv.quad_rule[cb])[i] + @inbounds for i in 1:length(fv.qr_weights) + w = fv.qr_weights[i] fefv_J = zero(Tensor{2, dim}) for j in 1:n_geom_basefuncs fefv_J += x[j] ⊗ fv.dMdξ[j, i, cb] end - weight_norm = weighted_normal(fefv_J, getgeometryinterpolation(fv), cb) + weight_norm = weighted_normal(fefv_J, fv, cb) fv.normals[i] = weight_norm / norm(weight_norm) detJ = norm(weight_norm) diff --git a/src/JuAFEM.jl b/src/JuAFEM.jl index 8737b459d2..0f0c080e02 100644 --- a/src/JuAFEM.jl +++ b/src/JuAFEM.jl @@ -40,9 +40,9 @@ immutable RefCube <: AbstractRefShape end """ Abstract type which has `CellValues` and `FaceValues` as subtypes """ -@compat abstract type Values{dim, T, FS, GS} end -@compat abstract type CellValues{dim, T, FS, GS} <: Values{dim, T, FS, GS} end -@compat abstract type FaceValues{dim, T, FS, GS} <: Values{dim, T, FS, GS} end +@compat abstract type Values{dim, T, refshape} end +@compat abstract type CellValues{dim, T, refshape} <: Values{dim, T, refshape} end +@compat abstract type FaceValues{dim, T, refshape} <: Values{dim, T, refshape} end include("utils.jl") include("interpolations.jl") diff --git a/test/test_cellvalues.jl b/test/test_cellvalues.jl index f52da9fecc..df80e123ae 100644 --- a/test/test_cellvalues.jl +++ b/test/test_cellvalues.jl @@ -57,11 +57,6 @@ for (func_interpol, quad_rule) in ((Lagrange{1, RefCube, 1}(), QuadratureRule{1 end @test vol ≈ calculate_volume(func_interpol, x) - # Test of utility functions - @test getfunctioninterpolation(cv) == func_interpol - @test getgeometryinterpolation(cv) == func_interpol - @test getquadrule(cv) == quad_rule - # Test quadrature rule after reinit! with ref. coords x = reference_coordinates(func_interpol) reinit!(cv, x) diff --git a/test/test_facevalues.jl b/test/test_facevalues.jl index 592905a5d1..02cd47bd63 100644 --- a/test/test_facevalues.jl +++ b/test/test_facevalues.jl @@ -23,7 +23,6 @@ for (func_interpol, quad_rule) in ( face_nodes, cell_nodes = topology_test_nodes(func_interpol) for face in 1:JuAFEM.getnfaces(func_interpol) reinit!(fv, xs, face) - face_quad_rule = getquadrule(fv) @test JuAFEM.getcurrentface(fv) == face # We test this by applying a given deformation gradient on all the nodes. @@ -39,7 +38,7 @@ for (func_interpol, quad_rule) in ( end u_vector = reinterpret(Float64, u, (n_basefuncs*ndim,)) - for i in 1:length(getpoints(face_quad_rule)) + for i in 1:length(getnquadpoints(fv)) @test getnormal(fv, i) ≈ n[face] @test function_gradient(fv, i, u) ≈ H @test function_symmetric_gradient(fv, i, u) ≈ 0.5(H + H') @@ -63,10 +62,6 @@ for (func_interpol, quad_rule) in ( x_face = xs[[JuAFEM.getfacelist(func_interpol)[face]...]] @test vol ≈ calculate_volume(JuAFEM.getlowerdim(func_interpol), x_face) - # Test of utility functions - @test getfunctioninterpolation(fv) == func_interpol - @test getgeometryinterpolation(fv) == func_interpol - # Test quadrature rule after reinit! with ref. coords x = reference_coordinates(func_interpol) reinit!(fv, x, face) @@ -77,9 +72,10 @@ for (func_interpol, quad_rule) in ( @test vol ≈ reference_volume(func_interpol, face) # Test spatial coordinate (after reinit with ref.coords we should get back the quad_points) - for (i, qp_x) in enumerate(getpoints(face_quad_rule)) - @test spatial_coordinate(fv, i, x) ≈ qp_x - end + # TODO: Renable somehow after quad rule is no longer stored in FaceValues + #for (i, qp_x) in enumerate(getpoints(quad_rule)) + # @test spatial_coordinate(fv, i, x) ≈ qp_x + #end end From f84fea50e68f2eaace7530a93c729b655e1827ea Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Sun, 26 Mar 2017 14:29:39 +0200 Subject: [PATCH 36/44] add Cook membrane notebook --- examples/cooks_membrane_mixed_up.ipynb | 420 +++++++++++++++++++ examples/figures/mixed_up_compressible.png | Bin 0 -> 23164 bytes examples/figures/mixed_up_incompressible.png | Bin 0 -> 104822 bytes src/FEValues/common_values.jl | 3 + test/test_notebooks.jl | 6 + 5 files changed, 429 insertions(+) create mode 100644 examples/cooks_membrane_mixed_up.ipynb create mode 100644 examples/figures/mixed_up_compressible.png create mode 100644 examples/figures/mixed_up_incompressible.png diff --git a/examples/cooks_membrane_mixed_up.ipynb b/examples/cooks_membrane_mixed_up.ipynb new file mode 100644 index 0000000000..e6cafc5de5 --- /dev/null +++ b/examples/cooks_membrane_mixed_up.ipynb @@ -0,0 +1,420 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Mixed elements can be used to overcome locking when the material becomes incompressible. However, for the elements to be stable, they need to fulfil the LBB condition. We here show what happens with a linear / linear displacement pressure element (which does not fulfil the LBB condition). In the numerical example, we consider the Cook's Membrane problem with an applied traction on the right hand side." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "using JuAFEM" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "create_cook_grid (generic function with 1 method)" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "function create_cook_grid(nx, ny)\n", + " dim = 2\n", + " corners = [Vec{dim}((0.0, 0.0)),\n", + " Vec{dim}((48.0, 44.0)),\n", + " Vec{dim}((48.0, 60.0)),\n", + " Vec{dim}((0.0, 44.0))]\n", + " grid = generate_grid(Triangle, (nx, ny), corners);\n", + " # Extract the left boundary\n", + " addnodeset!(grid, \"clamped\", x -> norm(x[1]) ≈ 0.0);\n", + " return grid\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "dim = 2\n", + "# Interpolations\n", + "\n", + "ip_u = Lagrange{dim, RefTetrahedron, 1}()\n", + "ip_p = Lagrange{dim, RefTetrahedron, 1}()\n", + "\n", + "# Quadrature rules\n", + "qr = QuadratureRule{dim , RefTetrahedron}(3)\n", + "qr_face = QuadratureRule{dim-1, RefTetrahedron}(3)\n", + "\n", + "\n", + "cellvalues_u = CellVectorValues(qr, ip_u);\n", + "facevalues_u = FaceVectorValues(qr_face, ip_u);\n", + "\n", + "cellvalues_p = CellScalarValues(qr, ip_p);" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "create_dofhandler (generic function with 1 method)" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# DofHandler\n", + "function create_dofhandler(grid)\n", + " dh = DofHandler(grid)\n", + " push!(dh, :u, dim) # Add a displacement field\n", + " push!(dh, :p, 1) # Add a pressure field\n", + " close!(dh)\n", + " return dh\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "create_boundaryconditions (generic function with 1 method)" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Boundaryconditions\n", + "function create_boundaryconditions(dh, grid)\n", + " dbc = DirichletBoundaryConditions(dh)\n", + " # Add a homogenoush boundary condition on the \"clamped\" edge\n", + " add!(dbc, :u, getnodeset(grid, \"clamped\"), (x,t) -> zero(Vec{2}), [1,2])\n", + " close!(dbc)\n", + " t = 0.0\n", + " update!(dbc, t)\n", + " return dbc\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "immutable LinearElasticity{T}\n", + " G::T\n", + " K::T\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "doassemble (generic function with 1 method)" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "function doassemble{dim}(cellvalues_u::CellVectorValues{dim}, cellvalues_p::CellScalarValues{dim},\n", + " facevalues_u::FaceVectorValues{dim}, K::SparseMatrixCSC, grid::Grid,\n", + " dh::DofHandler, mp::LinearElasticity)\n", + " \n", + " f = zeros(ndofs(dh))\n", + " assembler = start_assemble(K, f)\n", + " \n", + " global_dofs = zeros(Int, ndofs_per_cell(dh))\n", + " ndofs_cell = ndofs_per_cell(dh)\n", + " fe = zeros(ndofs_cell) # Local force vector\n", + " Ke = zeros(ndofs_cell, ndofs_cell) # Local stiffness mastrix\n", + " \n", + " t = Vec{2}((0.0, 1/16)) # Traction vector\n", + " ɛdev = [zero(SymmetricTensor{2, dim}) for i in 1:getnbasefunctions(cellvalues_u)]\n", + " for cell in CellIterator(dh)\n", + " fill!(Ke, 0)\n", + " fill!(fe, 0)\n", + " assemble_up!(Ke, fe, cell, cellvalues_u, cellvalues_p, facevalues_u, grid, mp, ɛdev, t)\n", + " celldofs!(global_dofs, cell)\n", + " assemble!(assembler, fe, Ke, global_dofs)\n", + " end\n", + " return K, f\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "assemble_up! (generic function with 1 method)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "function assemble_up!(Ke, fe, cell, cellvalues_u, cellvalues_p, facevalues_u, grid, mp, ɛdev, t)\n", + " n_basefuncs_u = getnbasefunctions(cellvalues_u)\n", + " n_basefuncs_p = getnbasefunctions(cellvalues_p)\n", + " u_offset = n_basefuncs_u\n", + " \n", + " reinit!(cellvalues_u, cell)\n", + " reinit!(cellvalues_p, cell)\n", + " \n", + " @inbounds for q_point in 1:getnquadpoints(cellvalues_u)\n", + " for i in 1:n_basefuncs_u\n", + " ɛdev[i] = dev(symmetric(shape_gradient(cellvalues_u, q_point, i)))\n", + " end\n", + " dΩ = getdetJdV(cellvalues_u, q_point)\n", + " for i in 1:n_basefuncs_u\n", + " divδu = shape_divergence(cellvalues_u, q_point, i)\n", + " δu = shape_value(cellvalues_u, q_point, i)\n", + " for j in 1:n_basefuncs_u\n", + " Ke[i, j] += 2 * mp.G * ɛdev[i] ⊡ ɛdev[j] * dΩ\n", + " end\n", + " for j in 1:n_basefuncs_p\n", + " δp = shape_value(cellvalues_p, q_point, j)\n", + " Ke[i, j + u_offset] += - δp * divδu * dΩ\n", + " end\n", + " end\n", + " \n", + " for i in 1:n_basefuncs_p\n", + " δp = shape_value(cellvalues_p, q_point, i)\n", + " for j in 1:n_basefuncs_u\n", + " divu = shape_divergence(cellvalues_u, q_point, j)\n", + " Ke[u_offset + i, j] += - δp * divu * dΩ\n", + " end\n", + " for j in 1:n_basefuncs_p\n", + " p = shape_value(cellvalues_p, q_point, j)\n", + " Ke[u_offset + i, u_offset + j] += - 1/mp.K * δp * p * dΩ\n", + " end\n", + " end\n", + " end\n", + " \n", + " @inbounds for face in 1:nfaces(cell)\n", + " if onboundary(cell, face) && (JuAFEM.cellid(cell), face) ∈ getfaceset(grid, \"right\")\n", + " reinit!(facevalues_u, cell, face)\n", + " for q_point in 1:getnquadpoints(facevalues_u)\n", + " dΓ = getdetJdV(facevalues_u, q_point)\n", + " for i in 1:n_basefuncs_u\n", + " δu = shape_value(facevalues_u, q_point, i)\n", + " fe[i] += (δu ⋅ t) * dΓ\n", + " end\n", + " end\n", + " end\n", + " end\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "function solve(ν, doexport = true)\n", + " E = 1.\n", + " # Material\n", + " G = E / 2(1 + ν)\n", + " K = E * ν / ((1+ν) * (1-2ν))\n", + " mp = LinearElasticity(G, K)\n", + " # Grid, dofhandler, boundary condition\n", + " n = 50\n", + " grid = create_cook_grid(n, n)\n", + " dh = create_dofhandler(grid)\n", + " dbc = create_boundaryconditions(dh, grid)\n", + "\n", + " # Assembly and solve\n", + " K = create_sparsity_pattern(dh);\n", + " K, f = doassemble(cellvalues_u, cellvalues_p, facevalues_u, K, grid, dh, mp);\n", + " apply!(K, f, dbc)\n", + " u = K \\ f;\n", + "\n", + " # Export\n", + " if doexport\n", + " vtkfile = vtk_grid(\"up_$ν\", dh, u)\n", + " vtk_save(vtkfile)\n", + " end\n", + " return u\n", + "end\n", + "\n", + "for ν in [0.3, 0.5]\n", + " solve(ν)\n", + "end" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Compressible ν = 0.3\n", + "![compressible.png](figures/mixed_up_compressible.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Incompressible ν = 0.5\n", + "![incompressible.png](figures/mixed_up_incompressible.png)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cook passed!\n" + ] + } + ], + "source": [ + "u = solve(0.3, false)\n", + "Base.Test.@test maximum(u) ≈ 26.13381519901358\n", + "println(\"Cook passed!\")" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "#= TODO: Mini element\n", + "\n", + "immutable MiniDisplacements{dim, shape, order} <: Interpolation{dim, shape, order} end\n", + "JuAFEM.getnbasefunctions(::MiniDisplacements{2, RefTetrahedron, 1}) = 4\n", + "\n", + "function JuAFEM.value!(ip::MiniDisplacements{2, RefTetrahedron, 1}, N::AbstractVector, ξ::Vec{2})\n", + " @assert length(N) == 4\n", + " JuAFEM.value!(Lagrange{2, RefTetrahedron, 1}(), view(N, 1:3), ξ)\n", + " N[4] = N[1] * N[2] * N[3]\n", + " return N\n", + "end\n", + "\n", + "function JuAFEM.derivative!{T}(ip::MiniDisplacements{2, RefTetrahedron, 1}, dN::AbstractVector{Vec{2, T}}, ξ::Vec{2, T})\n", + " @assert length(dN) == 4\n", + " ξx, ξy = ξ[1], ξ[2]\n", + " JuAFEM.derivative!(Lagrange{2, RefTetrahedron, 1}(), view(dN, 1:3), ξ)\n", + " dN[4] = Vec{2, T}((ξy * (1 - 2ξx - ξy),\n", + " ξx * (1 - 2ξy - ξx)))\n", + " \n", + " return dN\n", + "end\n", + "\n", + "cellvalues_u_mini = CellVectorValues(qr_mini, ip_u_mini);\n", + "facevalues_u_mini = FaceVectorValues(qr_face_mini, ip_u_mini);\n", + "ip_u_mini = MiniDisplacements{dim, RefTetrahedron, 1}()\n", + "qr_mini = QuadratureRule{dim , RefTetrahedron}(3)\n", + "qr_face_mini = QuadratureRule{dim-1, RefTetrahedron}(3)\n", + "\n", + "# Integrates along the right boundary\n", + "function integrate_gamma(u, facevalues_u, grid, dh)\n", + " global_dofs = zeros(Int, ndofs_per_cell(dh))\n", + " u_integrated = zero(Vec{2})\n", + " for cell in CellIterator(dh)\n", + " celldofs!(global_dofs, cell)\n", + " up_nodes = u[global_dofs]\n", + " u_nodes = up_nodes[1:getnbasefunctions(facevalues_u)]\n", + " for face in 1:nfaces(cell)\n", + " if onboundary(cell, face) && (JuAFEM.cellid(cell), face) ∈ getfaceset(grid, \"right\")\n", + " reinit!(facevalues_u, cell, face)\n", + " for q_point in 1:getnquadpoints(facevalues_u)\n", + " dΓ = getdetJdV(facevalues_u, q_point)\n", + " u_cell = function_value(facevalues_u, q_point, u_nodes)\n", + " u_integrated += u_cell * dΓ\n", + " end\n", + " end\n", + " end\n", + " end\n", + " return u_integrated\n", + "end\n", + "=#" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Julia 0.6.0-pre.alpha", + "language": "julia", + "name": "julia-0.6" + }, + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "0.6.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/figures/mixed_up_compressible.png b/examples/figures/mixed_up_compressible.png new file mode 100644 index 0000000000000000000000000000000000000000..e32012c38cb8e1999a15c9e42847f716859fa200 GIT binary patch literal 23164 zcmaI8WmJ^k7d8w?!zhR#AxKCGNDU<+BPB63Dg%n-4BefIARW@o&@c!J5<|DrF$~=y zDJ>yLKR3Vsdf)YYdKS!=x#R48&OX<^uDuV0Yip{2$QjA;@bEyYFBEn0@bHnqr;n5X z_$J;h_cb0KE1s$%MBi(AC&M@OfkEAFi-9bgXhQrWS0yk3(<3X_aH_i>2&r?8Ex6x` zBZEmr9++37^1kq-26Zbt=;*XWg2M7?l+7W^U|yFL1|VkK9iBkMys-7WU4^VNtG{RD=*QwmX9Ogb-FnLI_nD zF@%aR7x=tK{O|Ms_?j1XoD$fG38ead3wWd|yD)RA@%Jab%=50djrV{z8PvR$5~^)+ zbXwpG_I&nlBIMcYx;@%dF;d0g;+M#`vnq;F)Q5;Uv~0~nrQcrPEiXe>Dp0XniGKhI z#{s=?Cw-o*AZWJ2>ohY3@4tt%nXalM>C69Y9@5X894roaUONwTzHOAe87pD@+Wx-z zitxeftGh=sYpaO8zTg`FbFCUbTkk!&{|&0R^>(t2-kSxk7!|hK-6yQvf0(*nF2>{; z_=`!4z~<&PpQ`N^`sm9S&klLI!h{c8`ppv$yZgL--!e8{ZT0z_{9Ug4AP@eMTh-!N z_B~K2n_d{OG}eV>^>v)A?4Wt3itjP#t!Gz4lP~^_$&X(nYxY3fY3n*zjq3bOYf8!Jd~NPbX+_%Ic3f!evi<$w7#Se6v2lN>BDeaQFe?Rz21q3 zGJ_nzeX)Ocng3l7$b$%mvekys0@BY@SG#NvU$Jp0ujurn%Z=H5eKIG`hg+*^Zv8iR zq*(F2ckPFNMcdHA`{sg(X#xR_d?F_aF_4;?87pVvfzacz|-u!J@e?kanwO?S6 zuwZv)zxg-MhyUGLwkdzzde!{iD?xN^h+M))k*)iKYRngR&*utBe`n^e|j7h~}JXh;5l;1?9kBE4H;sNXr(eo5MU^#L|#&?>GJhxSw zsfhIG`ke^dL>WZ(*E%HLdCf6`v(Yzvkyl-CwV3d2Yd2}g_d9! zy?MjQ-@rVI!v_FRBr(9{?tC+3vB`|F*Z9XOWNG$?^6VDd^}$qvPCzOL&lm5^8k@ON z16k?)ieLnlKArs}hVuySZQ-1$mBEW2!zyuune)48sx~KE=U1?fXNhkl>;v1u@ypN14+Rv(V_x`1LhRF$nBG|mm68RvwnV0XMIzD>MJ-Ua2SdoqV^_v~O!oob1y zc~9_RSvStexHzoOZe+IQXs<?V4+Z$K0PCV+!Og zGhTsu`MfJUGVy30m}E!$cKClo6^u^*4WtmJeN~H$%QMTX9umF7KabeQ&`JUyy4!o+5MbmWVA99E+4ldCqo6R4X`$h$ zG~pCDqp+YcE9WG}kJX?8o}-TU1%PM$sN5tix%LAy%H~>fOmE z`>tKmx5ra3VI9Wie6mbM{nTnu?2kyO3n@|6#iW4wiq78rdt0X-C@0 z6dFd%eTIwL5^{@Tcsz8$J#84GDpDKIfcr#ZfCaOUoiD+I7+nR!Xrhqy5C4p{w!hxcVE8U7Ny&ebi%btHq;j z5AVi`sA;-mLLR755Km~K#bn3%t#4)931pmN8_qso=KeOdEPf}>g~SbHE7`yQ61G<8 z$AbQhjl65g7Ec`a8Hg|?Tf6kzHebj0olP29zjzp1PHaPqkcM!{J=e?ilfc;nDFPhiI01a$7!hkEv14x%mRNY5B@9S zK5xBvN0K+$YOh$%}c4qQP%q6wzDykf>`NT2K)4M*(z-cM~kL& z;^sOF&Z~6bt-;l7ZI%W1X;NuB6olXVxRh%6JpZn(DGIUwd-i6qbRqf~PZ)7DBACtq zhf(eqJToG7_lN#T?3C0H7x-a@Z(9HFbm06IyYB}Cu6yihPKT<^`>2Los6eu}#-YK^ z-`;QH(Ed!WFG}w*o{raz(wT�BC>Qd}vgiHfy+l_Z+!@RWM6dH3|Op9KLiEx;^^5 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 literal 0 HcmV?d00001 diff --git a/examples/figures/mixed_up_incompressible.png b/examples/figures/mixed_up_incompressible.png new file mode 100644 index 0000000000000000000000000000000000000000..349abd809247b8eafa852bf2366fb9f503b39ed6 GIT binary patch literal 104822 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

nEq4 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 literal 0 HcmV?d00001 diff --git a/src/FEValues/common_values.jl b/src/FEValues/common_values.jl index 6f6fee6e75..331258e718 100644 --- a/src/FEValues/common_values.jl +++ b/src/FEValues/common_values.jl @@ -95,6 +95,9 @@ Get the divergence of the shape functions for a given quadrature point and base """ @inline shape_divergence(cv::CellScalarValues, q_point::Int, base_func::Int) = sum(cv.dNdx[base_func, q_point]) @inline shape_divergence(bv::FaceScalarValues, q_point::Int, base_func::Int) = sum(bv.dNdx[base_func, q_point, bv.current_face[]]) +@inline shape_divergence(cv::CellVectorValues, q_point::Int, base_func::Int) = trace(cv.dNdx[base_func, q_point]) +@inline shape_divergence(bv::FaceVectorValues, q_point::Int, base_func::Int) = trace(bv.dNdx[base_func, q_point, bv.current_face[]]) + """ diff --git a/test/test_notebooks.jl b/test/test_notebooks.jl index 0f1cc6a339..b059e568e5 100644 --- a/test/test_notebooks.jl +++ b/test/test_notebooks.jl @@ -26,3 +26,9 @@ module Helmholtz nbinclude("../examples/helmholtz.ipynb") end +module Cook + using NBInclude + nbinclude("../examples/cooks_membrane_mixed_up.ipynb") +end + + From 94294455820f23f8cab5a419af638eeca73f6372 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Sun, 26 Mar 2017 21:59:52 +0200 Subject: [PATCH 37/44] fix bug when using sets in dbc --- src/Dofs/DirichletBoundaryConditions.jl | 33 ++++++++++++++++--------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/src/Dofs/DirichletBoundaryConditions.jl b/src/Dofs/DirichletBoundaryConditions.jl index 0939ae97c2..1c5ebca7e0 100644 --- a/src/Dofs/DirichletBoundaryConditions.jl +++ b/src/Dofs/DirichletBoundaryConditions.jl @@ -55,13 +55,14 @@ immutable DirichletBoundaryConditions{DH <: DofHandler, T} dofs::Vector{Int} free_dofs::Vector{Int} values::Vector{T} + dofmapping::Dict{Int, Int} # global dof -> index into dofs and values dh::DH closed::ScalarWrapper{Bool} end function DirichletBoundaryConditions(dh::DofHandler) @assert isclosed(dh) - DirichletBoundaryConditions(DirichletBoundaryCondition[], Int[], Int[], Float64[], dh, ScalarWrapper(false)) + DirichletBoundaryConditions(DirichletBoundaryCondition[], Int[], Int[], Float64[], Dict{Int,Int}(), dh, ScalarWrapper(false)) end function Base.show(io::IO, dbcs::DirichletBoundaryConditions) @@ -81,10 +82,15 @@ dirichlet_dofs(dbcs::DirichletBoundaryConditions) = dbcs.dofs free_dofs(dbcs::DirichletBoundaryConditions) = dbcs.free_dofs function close!(dbcs::DirichletBoundaryConditions) fill!(dbcs.values, NaN) - dbcs.closed[] = true fdofs = Array(setdiff(dbcs.dh.dofs_nodes, dbcs.dofs)) resize!(dbcs.free_dofs, length(fdofs)) copy!(dbcs.free_dofs, fdofs) + for i in 1:length(dbcs.dofs) + dbcs.dofmapping[dbcs.dofs[i]] = i + end + + dbcs.closed[] = true + return dbcs end @@ -96,20 +102,21 @@ end # Adds a boundary condition function add!(dbcs::DirichletBoundaryConditions, field::Symbol, nodes::Union{Set{Int}, Vector{Int}}, f::Function, components::Vector{Int}) - field in dbcs.dh.field_names || error("Missing: $field") + field in dbcs.dh.field_names || error("field $field did not exist in the dof handler, exisitng fields are $(dh.field_names)") for component in components - @assert 0 < component <= ndim(dbcs.dh, field) + 0 < component <= ndim(dbcs.dh, field) || error("component $component is not within the range of field $field which has $(ndim(dbcs.dh, field)) dimensions") end if length(nodes) == 0 - warn("Added Dirichlet BC to node set containing 0 nodes") + warn("added Dirichlet BC to node set containing 0 nodes") end dofs_bc = Int[] offset = dof_offset(dbcs.dh, field) for node in nodes for component in components - push!(dofs_bc, dbcs.dh.dofs_nodes[offset + component, node]) + dofid = dbcs.dh.dofs_nodes[offset + component, node] + push!(dofs_bc, dofid) end end @@ -130,22 +137,24 @@ function update!(dbcs::DirichletBoundaryConditions, time::Float64 = 0.0) for dbc in dbcs.bcs # Function barrier _update!(dbcs.values, dbc.f, dbc.nodes, dbc.field, - dbc.components, dbcs.dh, dbc.idxoffset, time) + dbc.components, dbcs.dh, dbc.idxoffset, dbcs.dofmapping, time) end end function _update!(values::Vector{Float64}, f::Function, nodes::Set{Int}, field::Symbol, - components::Vector{Int}, dh::DofHandler, idx_offset::Int, time::Float64) + components::Vector{Int}, dh::DofHandler, idx_offset::Int, + dofmapping::Dict{Int,Int}, time::Float64) mesh = dh.grid offset = dof_offset(dh, field) - current_dof = 1 - for node in nodes + for node in nodes x = getcoordinates(getnodes(mesh, node)) bc_value = f(x, time) @assert length(bc_value) == length(components) for i in 1:length(components) - values[current_dof + idx_offset] = bc_value[i] - current_dof += 1 + c = components[i] + dof_number = dh.dofs_nodes[offset + c, node] + dbc_index = dofmapping[dof_number] + values[dbc_index] = bc_value[i] end end end From b7bf0aaefee095fe35962e6d70f8135d06490e32 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Tue, 28 Mar 2017 13:36:18 +0200 Subject: [PATCH 38/44] fix some bounds stuff --- examples/cooks_membrane_mixed_up.ipynb | 101 ++++++++++++++++--------- src/assembler.jl | 15 ++-- src/iterators.jl | 8 +- test/test_notebooks.jl | 3 +- 4 files changed, 80 insertions(+), 47 deletions(-) diff --git a/examples/cooks_membrane_mixed_up.ipynb b/examples/cooks_membrane_mixed_up.ipynb index e6cafc5de5..8123d99379 100644 --- a/examples/cooks_membrane_mixed_up.ipynb +++ b/examples/cooks_membrane_mixed_up.ipynb @@ -2,7 +2,10 @@ "cells": [ { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "deletable": true, + "editable": true + }, "source": [ "Mixed elements can be used to overcome locking when the material becomes incompressible. However, for the elements to be stable, they need to fulfil the LBB condition. We here show what happens with a linear / linear displacement pressure element (which does not fulfil the LBB condition). In the numerical example, we consider the Cook's Membrane problem with an applied traction on the right hand side." ] @@ -11,18 +14,23 @@ "cell_type": "code", "execution_count": 1, "metadata": { - "collapsed": false + "collapsed": false, + "deletable": true, + "editable": true }, "outputs": [], "source": [ - "using JuAFEM" + "using JuAFEM\n", + "using BlockArrays" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { - "collapsed": false + "collapsed": false, + "deletable": true, + "editable": true }, "outputs": [ { @@ -54,7 +62,9 @@ "cell_type": "code", "execution_count": 3, "metadata": { - "collapsed": false + "collapsed": false, + "deletable": true, + "editable": true }, "outputs": [], "source": [ @@ -79,7 +89,9 @@ "cell_type": "code", "execution_count": 4, "metadata": { - "collapsed": false + "collapsed": false, + "deletable": true, + "editable": true }, "outputs": [ { @@ -108,7 +120,9 @@ "cell_type": "code", "execution_count": 5, "metadata": { - "collapsed": false + "collapsed": false, + "deletable": true, + "editable": true }, "outputs": [ { @@ -139,7 +153,9 @@ "cell_type": "code", "execution_count": 6, "metadata": { - "collapsed": false + "collapsed": false, + "deletable": true, + "editable": true }, "outputs": [], "source": [ @@ -153,7 +169,9 @@ "cell_type": "code", "execution_count": 7, "metadata": { - "collapsed": false + "collapsed": false, + "deletable": true, + "editable": true }, "outputs": [ { @@ -174,11 +192,13 @@ " \n", " f = zeros(ndofs(dh))\n", " assembler = start_assemble(K, f)\n", + " nu = getnbasefunctions(cellvalues_u)\n", + " np = getnbasefunctions(cellvalues_p)\n", " \n", - " global_dofs = zeros(Int, ndofs_per_cell(dh))\n", - " ndofs_cell = ndofs_per_cell(dh)\n", - " fe = zeros(ndofs_cell) # Local force vector\n", - " Ke = zeros(ndofs_cell, ndofs_cell) # Local stiffness mastrix\n", + " global_dofs = zeros(Int, nu + np)\n", + "\n", + " fe = PseudoBlockArray(zeros(nu + np), [nu, np]) # Local force vector\n", + " Ke = PseudoBlockArray(zeros(nu + np, nu + np), [nu, np], [nu, np]) # Local stiffness mastrix\n", " \n", " t = Vec{2}((0.0, 1/16)) # Traction vector\n", " ɛdev = [zero(SymmetricTensor{2, dim}) for i in 1:getnbasefunctions(cellvalues_u)]\n", @@ -187,7 +207,7 @@ " fill!(fe, 0)\n", " assemble_up!(Ke, fe, cell, cellvalues_u, cellvalues_p, facevalues_u, grid, mp, ɛdev, t)\n", " celldofs!(global_dofs, cell)\n", - " assemble!(assembler, fe, Ke, global_dofs)\n", + " @inbounds assemble!(assembler, fe, Ke, global_dofs)\n", " end\n", " return K, f\n", "end" @@ -197,7 +217,9 @@ "cell_type": "code", "execution_count": 8, "metadata": { - "collapsed": false + "collapsed": false, + "deletable": true, + "editable": true }, "outputs": [ { @@ -213,10 +235,10 @@ ], "source": [ "function assemble_up!(Ke, fe, cell, cellvalues_u, cellvalues_p, facevalues_u, grid, mp, ɛdev, t)\n", + " \n", " n_basefuncs_u = getnbasefunctions(cellvalues_u)\n", " n_basefuncs_p = getnbasefunctions(cellvalues_p)\n", - " u_offset = n_basefuncs_u\n", - " \n", + " u▄, p▄ = 1, 2\n", " reinit!(cellvalues_u, cell)\n", " reinit!(cellvalues_p, cell)\n", " \n", @@ -229,27 +251,26 @@ " divδu = shape_divergence(cellvalues_u, q_point, i)\n", " δu = shape_value(cellvalues_u, q_point, i)\n", " for j in 1:n_basefuncs_u\n", - " Ke[i, j] += 2 * mp.G * ɛdev[i] ⊡ ɛdev[j] * dΩ\n", + " Ke[BlockIndex((u▄, u▄), (i, j))] += 2 * mp.G * ɛdev[i] ⊡ ɛdev[j] * dΩ\n", " end\n", " for j in 1:n_basefuncs_p\n", " δp = shape_value(cellvalues_p, q_point, j)\n", - " Ke[i, j + u_offset] += - δp * divδu * dΩ\n", + " up_contribution = -δp * divδu * dΩ\n", + " Ke[BlockIndex((u▄, p▄), (i, j))] += up_contribution\n", + " Ke[BlockIndex((p▄, u▄), (j, i))] += up_contribution\n", " end\n", " end\n", " \n", " for i in 1:n_basefuncs_p\n", " δp = shape_value(cellvalues_p, q_point, i)\n", - " for j in 1:n_basefuncs_u\n", - " divu = shape_divergence(cellvalues_u, q_point, j)\n", - " Ke[u_offset + i, j] += - δp * divu * dΩ\n", - " end\n", + " \n", " for j in 1:n_basefuncs_p\n", " p = shape_value(cellvalues_p, q_point, j)\n", - " Ke[u_offset + i, u_offset + j] += - 1/mp.K * δp * p * dΩ\n", + " Ke[BlockIndex((p▄, p▄), (i, j))] += - 1/mp.K * δp * p * dΩ\n", " end\n", " end\n", " end\n", - " \n", + "\n", " @inbounds for face in 1:nfaces(cell)\n", " if onboundary(cell, face) && (JuAFEM.cellid(cell), face) ∈ getfaceset(grid, \"right\")\n", " reinit!(facevalues_u, cell, face)\n", @@ -269,16 +290,18 @@ "cell_type": "code", "execution_count": 9, "metadata": { - "collapsed": false + "collapsed": false, + "deletable": true, + "editable": true }, "outputs": [], "source": [ "function solve(ν, doexport = true)\n", - " E = 1.\n", " # Material\n", - " G = E / 2(1 + ν)\n", - " K = E * ν / ((1+ν) * (1-2ν))\n", - " mp = LinearElasticity(G, K)\n", + " Emod = 1.\n", + " Gmod = Emod / 2(1 + ν)\n", + " Kmod = Emod * ν / ((1+ν) * (1-2ν))\n", + " mp = LinearElasticity(Gmod, Kmod)\n", " # Grid, dofhandler, boundary condition\n", " n = 50\n", " grid = create_cook_grid(n, n)\n", @@ -306,7 +329,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "deletable": true, + "editable": true + }, "source": [ "# Compressible ν = 0.3\n", "![compressible.png](figures/mixed_up_compressible.png)" @@ -314,7 +340,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "deletable": true, + "editable": true + }, "source": [ "# Incompressible ν = 0.5\n", "![incompressible.png](figures/mixed_up_incompressible.png)" @@ -324,7 +353,9 @@ "cell_type": "code", "execution_count": 10, "metadata": { - "collapsed": false + "collapsed": false, + "deletable": true, + "editable": true }, "outputs": [ { @@ -345,7 +376,9 @@ "cell_type": "code", "execution_count": 11, "metadata": { - "collapsed": false + "collapsed": false, + "deletable": true, + "editable": true }, "outputs": [], "source": [ diff --git a/src/assembler.jl b/src/assembler.jl index 93a20e8a74..99e08d9f17 100644 --- a/src/assembler.jl +++ b/src/assembler.jl @@ -58,7 +58,7 @@ end Assembles the element residual `ge` into the global residual vector `g`. """ -function assemble!{T}(g::AbstractVector{T}, ge::AbstractVector{T}, edof::AbstractVector{Int}) +@Base.propagate_inbounds function assemble!{T}(g::AbstractVector{T}, ge::AbstractVector{T}, edof::AbstractVector{Int}) @boundscheck checkbounds(g, edof) @inbounds for i in 1:length(edof) g[edof[i]] += ge[i] @@ -78,8 +78,9 @@ function start_assemble(K::SparseMatrixCSC, f::Vector=Float64[]) AssemblerSparsityPattern(K, f, Int[], eltype(K)[]) end -assemble!(A::AssemblerSparsityPattern, Ke::AbstractMatrix, dofs::AbstractVector{Int}) = assemble!(A, eltype(Ke)[], Ke, dofs) -function assemble!(A::AssemblerSparsityPattern, fe::AbstractVector, Ke::AbstractMatrix, dofs::AbstractVector{Int}) +@Base.propagate_inbounds assemble!(A::AssemblerSparsityPattern, Ke::AbstractMatrix, dofs::AbstractVector{Int}) = assemble!(A, eltype(Ke)[], Ke, dofs) + +@Base.propagate_inbounds function assemble!(A::AssemblerSparsityPattern, fe::AbstractVector, Ke::AbstractMatrix, dofs::AbstractVector{Int}) if length(fe) != 0 assemble!(A.f, fe, dofs) end @@ -88,9 +89,9 @@ function assemble!(A::AssemblerSparsityPattern, fe::AbstractVector, Ke::Abstract tmpi = A.tmpi tmpf = A.tmpf @boundscheck checkbounds(K, dofs, dofs) - resize!(A.tmpi, length(dofs)) - resize!(A.tmpf, length(dofs)) - copy!(A.tmpf, dofs) + resize!(tmpi, length(dofs)) + resize!(tmpf, length(dofs)) + copy!(tmpf, dofs) sortperm2!(tmpf, tmpi) current_col = 1 @@ -112,10 +113,8 @@ function assemble!(A::AssemblerSparsityPattern, fe::AbstractVector, Ke::Abstract end end - # Sort utilities - function sortperm2!(B, ii) @inbounds for i = 1:length(B) ii[i] = i diff --git a/src/iterators.jl b/src/iterators.jl index 876febdfb2..c0c412bb2c 100644 --- a/src/iterators.jl +++ b/src/iterators.jl @@ -27,18 +27,18 @@ immutable CellIterator{dim, N, T, M} current_cellid::ScalarWrapper{Int} dh::DofHandler{dim, N, T, M} - function CellIterator{dim, N, T, M}(dh::DofHandler{dim, N, T, M}) + function (::Type{CellIterator{dim, N, T, M}}){dim, N, T, M}(dh::DofHandler{dim, N, T, M}) nodes = zeros(Int, N) coords = zeros(Vec{dim, T}, N) cell = ScalarWrapper(0) - return new(dh.grid, nodes, coords,ScalarWrapper(0), dh) + return new{dim, N, T, M}(dh.grid, nodes, coords, ScalarWrapper(0), dh) end - function CellIterator{dim, N, T, M}(grid::Grid{dim, N, T, M}) + function (::Type{CellIterator{dim, N, T, M}}){dim, N, T, M}(grid::Grid{dim, N, T, M}) nodes = zeros(Int, N) coords = zeros(Vec{dim, T}, N) cell = ScalarWrapper(0) - return new(grid, nodes, coords, cell) + return new{dim, N, T, M}(grid, nodes, coords, cell) end end diff --git a/test/test_notebooks.jl b/test/test_notebooks.jl index b059e568e5..0bea44cc22 100644 --- a/test/test_notebooks.jl +++ b/test/test_notebooks.jl @@ -18,7 +18,8 @@ end module HeatSquare using NBInclude - nbinclude("../examples/heat_square.ipynb") + # Requires BlockArrays, only available on 0.6 + # nbinclude("../examples/heat_square.ipynb") end module Helmholtz From 222d8e0141eeff561aa8df6a0d239e4e7c51e38d Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Tue, 28 Mar 2017 14:24:02 +0200 Subject: [PATCH 39/44] only use symmetric --- examples/cooks_membrane_mixed_up.ipynb | 106 +++++++++++++++++-------- 1 file changed, 73 insertions(+), 33 deletions(-) diff --git a/examples/cooks_membrane_mixed_up.ipynb b/examples/cooks_membrane_mixed_up.ipynb index 8123d99379..104d75b9ba 100644 --- a/examples/cooks_membrane_mixed_up.ipynb +++ b/examples/cooks_membrane_mixed_up.ipynb @@ -12,7 +12,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 28, "metadata": { "collapsed": false, "deletable": true, @@ -26,7 +26,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 29, "metadata": { "collapsed": false, "deletable": true, @@ -39,7 +39,7 @@ "create_cook_grid (generic function with 1 method)" ] }, - "execution_count": 2, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } @@ -60,7 +60,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 30, "metadata": { "collapsed": false, "deletable": true, @@ -87,7 +87,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 31, "metadata": { "collapsed": false, "deletable": true, @@ -100,7 +100,7 @@ "create_dofhandler (generic function with 1 method)" ] }, - "execution_count": 4, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } @@ -118,7 +118,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 32, "metadata": { "collapsed": false, "deletable": true, @@ -131,7 +131,7 @@ "create_boundaryconditions (generic function with 1 method)" ] }, - "execution_count": 5, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -151,7 +151,35 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 33, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "symmetrize_lower! (generic function with 1 method)" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "function symmetrize_lower!(K)\n", + " for i in 1:size(K,1)\n", + " for j in i+1:size(K,1)\n", + " K[i,j] = K[j,i]\n", + " end\n", + " end\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": 34, "metadata": { "collapsed": false, "deletable": true, @@ -167,7 +195,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 35, "metadata": { "collapsed": false, "deletable": true, @@ -180,7 +208,7 @@ "doassemble (generic function with 1 method)" ] }, - "execution_count": 7, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } @@ -192,6 +220,7 @@ " \n", " f = zeros(ndofs(dh))\n", " assembler = start_assemble(K, f)\n", + " assembler2 = start_assemble(K, f)\n", " nu = getnbasefunctions(cellvalues_u)\n", " np = getnbasefunctions(cellvalues_p)\n", " \n", @@ -199,7 +228,7 @@ "\n", " fe = PseudoBlockArray(zeros(nu + np), [nu, np]) # Local force vector\n", " Ke = PseudoBlockArray(zeros(nu + np, nu + np), [nu, np], [nu, np]) # Local stiffness mastrix\n", - " \n", + "\n", " t = Vec{2}((0.0, 1/16)) # Traction vector\n", " ɛdev = [zero(SymmetricTensor{2, dim}) for i in 1:getnbasefunctions(cellvalues_u)]\n", " for cell in CellIterator(dh)\n", @@ -207,7 +236,7 @@ " fill!(fe, 0)\n", " assemble_up!(Ke, fe, cell, cellvalues_u, cellvalues_p, facevalues_u, grid, mp, ɛdev, t)\n", " celldofs!(global_dofs, cell)\n", - " @inbounds assemble!(assembler, fe, Ke, global_dofs)\n", + " assemble!(assembler, fe, Ke, global_dofs)\n", " end\n", " return K, f\n", "end" @@ -215,7 +244,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 36, "metadata": { "collapsed": false, "deletable": true, @@ -228,7 +257,7 @@ "assemble_up! (generic function with 1 method)" ] }, - "execution_count": 8, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -241,7 +270,8 @@ " u▄, p▄ = 1, 2\n", " reinit!(cellvalues_u, cell)\n", " reinit!(cellvalues_p, cell)\n", - " \n", + " \n", + " # We only assemble lower half triangle of the stiffness matrix and then symmetrize it.\n", " @inbounds for q_point in 1:getnquadpoints(cellvalues_u)\n", " for i in 1:n_basefuncs_u\n", " ɛdev[i] = dev(symmetric(shape_gradient(cellvalues_u, q_point, i)))\n", @@ -250,26 +280,26 @@ " for i in 1:n_basefuncs_u\n", " divδu = shape_divergence(cellvalues_u, q_point, i)\n", " δu = shape_value(cellvalues_u, q_point, i)\n", - " for j in 1:n_basefuncs_u\n", + " for j in 1:i\n", " Ke[BlockIndex((u▄, u▄), (i, j))] += 2 * mp.G * ɛdev[i] ⊡ ɛdev[j] * dΩ\n", " end\n", - " for j in 1:n_basefuncs_p\n", - " δp = shape_value(cellvalues_p, q_point, j)\n", - " up_contribution = -δp * divδu * dΩ\n", - " Ke[BlockIndex((u▄, p▄), (i, j))] += up_contribution\n", - " Ke[BlockIndex((p▄, u▄), (j, i))] += up_contribution\n", - " end\n", " end\n", " \n", " for i in 1:n_basefuncs_p\n", " δp = shape_value(cellvalues_p, q_point, i)\n", - " \n", - " for j in 1:n_basefuncs_p\n", + " for j in 1:n_basefuncs_u\n", + " divδu = shape_divergence(cellvalues_u, q_point, j)\n", + " Ke[BlockIndex((p▄, u▄), (i, j))] += -δp * divδu * dΩ\n", + " end\n", + " for j in 1:i\n", " p = shape_value(cellvalues_p, q_point, j)\n", " Ke[BlockIndex((p▄, p▄), (i, j))] += - 1/mp.K * δp * p * dΩ\n", " end\n", + " \n", " end\n", " end\n", + " \n", + " symmetrize_lower!(Ke)\n", "\n", " @inbounds for face in 1:nfaces(cell)\n", " if onboundary(cell, face) && (JuAFEM.cellid(cell), face) ∈ getfaceset(grid, \"right\")\n", @@ -288,13 +318,22 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 40, "metadata": { "collapsed": false, "deletable": true, "editable": true }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0.010385 seconds (10.03 k allocations: 298.328 KiB)\n", + " 0.009869 seconds (10.03 k allocations: 298.328 KiB)\n" + ] + } + ], "source": [ "function solve(ν, doexport = true)\n", " # Material\n", @@ -310,9 +349,9 @@ "\n", " # Assembly and solve\n", " K = create_sparsity_pattern(dh);\n", - " K, f = doassemble(cellvalues_u, cellvalues_p, facevalues_u, K, grid, dh, mp);\n", + " @time K, f = doassemble(cellvalues_u, cellvalues_p, facevalues_u, K, grid, dh, mp);\n", " apply!(K, f, dbc)\n", - " u = K \\ f;\n", + " u = Symmetric(K) \\ f;\n", "\n", " # Export\n", " if doexport\n", @@ -322,7 +361,7 @@ " return u\n", "end\n", "\n", - "for ν in [0.3, 0.5]\n", + "for ν in [0.3, 0.4999999]\n", " solve(ν)\n", "end" ] @@ -345,13 +384,13 @@ "editable": true }, "source": [ - "# Incompressible ν = 0.5\n", + "# Incompressible ν ≈ 0.5\n", "![incompressible.png](figures/mixed_up_incompressible.png)" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 38, "metadata": { "collapsed": false, "deletable": true, @@ -362,6 +401,7 @@ "name": "stdout", "output_type": "stream", "text": [ + " 0.012460 seconds (10.03 k allocations: 298.328 KiB)\n", "Cook passed!\n" ] } @@ -374,7 +414,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 39, "metadata": { "collapsed": false, "deletable": true, From 8d37f4050021f89b947e25007940bdc97dbd22f4 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Tue, 4 Apr 2017 08:30:24 +0200 Subject: [PATCH 40/44] adress review and fix which test to disable --- src/Dofs/DirichletBoundaryConditions.jl | 2 +- src/FEValues/cell_values.jl | 6 +++--- src/FEValues/face_values.jl | 6 +++--- src/utils.jl | 4 ++-- test/test_notebooks.jl | 6 +++--- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Dofs/DirichletBoundaryConditions.jl b/src/Dofs/DirichletBoundaryConditions.jl index 1c5ebca7e0..b218fccce1 100644 --- a/src/Dofs/DirichletBoundaryConditions.jl +++ b/src/Dofs/DirichletBoundaryConditions.jl @@ -102,7 +102,7 @@ end # Adds a boundary condition function add!(dbcs::DirichletBoundaryConditions, field::Symbol, nodes::Union{Set{Int}, Vector{Int}}, f::Function, components::Vector{Int}) - field in dbcs.dh.field_names || error("field $field did not exist in the dof handler, exisitng fields are $(dh.field_names)") + field in dbcs.dh.field_names || error("field $field does not exist in the dof handler, existing fields are $(dh.field_names)") for component in components 0 < component <= ndim(dbcs.dh, field) || error("component $component is not within the range of field $field which has $(ndim(dbcs.dh, field)) dimensions") end diff --git a/src/FEValues/cell_values.jl b/src/FEValues/cell_values.jl index c5bfdd2fb5..4dce45b5ba 100644 --- a/src/FEValues/cell_values.jl +++ b/src/FEValues/cell_values.jl @@ -99,7 +99,7 @@ immutable CellVectorValues{dim, T <: Real, refshape <: AbstractRefShape, M} <: C qr_weights::Vector{T} end -function CellVectorValues{dim}(quad_rule::QuadratureRule{dim}, func_interpol::Interpolation, geom_interpol::Interpolation=func_interpol) +function CellVectorValues(quad_rule::QuadratureRule, func_interpol::Interpolation, geom_interpol::Interpolation=func_interpol) CellVectorValues(Float64, quad_rule, func_interpol, geom_interpol) end @@ -163,11 +163,11 @@ function reinit!{dim, T}(cv::CellValues{dim}, x::AbstractVector{Vec{dim, T}}) fecv_J += x[j] ⊗ cv.dMdξ[j, i] end detJ = det(fecv_J) - detJ > 0.0 || throw(ArgumentError("detJ is not positive: detJ = $(detJ)")) + detJ > 0.0 || throw(ArgumentError("det(J) is not positive: det(J) = $(detJ)")) cv.detJdV[i] = detJ * w Jinv = inv(fecv_J) for j in 1:n_func_basefuncs - cv.dNdx[j,i] = cv.dNdξ[j, i] ⋅ Jinv + cv.dNdx[j, i] = cv.dNdξ[j, i] ⋅ Jinv end end end diff --git a/src/FEValues/face_values.jl b/src/FEValues/face_values.jl index 38b872f49a..a5081e3ec6 100644 --- a/src/FEValues/face_values.jl +++ b/src/FEValues/face_values.jl @@ -59,8 +59,8 @@ immutable FaceScalarValues{dim, T <: Real, refshape <: AbstractRefShape} <: Face current_face::ScalarWrapper{Int} end -function FaceScalarValues{dim_qr}(quad_rule::QuadratureRule{dim_qr}, func_interpol::Interpolation, - geom_interpol::Interpolation=func_interpol) +function FaceScalarValues(quad_rule::QuadratureRule, func_interpol::Interpolation, + geom_interpol::Interpolation=func_interpol) FaceScalarValues(Float64, quad_rule, func_interpol, geom_interpol) end @@ -194,7 +194,7 @@ function reinit!{dim, T}(fv::FaceValues{dim}, x::AbstractVector{Vec{dim, T}}, fa fv.normals[i] = weight_norm / norm(weight_norm) detJ = norm(weight_norm) - detJ > 0.0 || throw(ArgumentError("detJ is not positive: detJ = $(detJ)")) + detJ > 0.0 || throw(ArgumentError("det(J) is not positive: det(J) = $(detJ)")) fv.detJdV[i, cb] = detJ * w Jinv = inv(fefv_J) for j in 1:n_func_basefuncs diff --git a/src/utils.jl b/src/utils.jl index 29e3e8d2fa..cda19ef8b0 100644 --- a/src/utils.jl +++ b/src/utils.jl @@ -2,5 +2,5 @@ type ScalarWrapper{T} x::T end -Base.getindex(s::ScalarWrapper) = s.x -Base.setindex!(s::ScalarWrapper, v) = s.x = v +@inline Base.getindex(s::ScalarWrapper) = s.x +@inline Base.setindex!(s::ScalarWrapper, v) = s.x = v diff --git a/test/test_notebooks.jl b/test/test_notebooks.jl index 0bea44cc22..72309f6c70 100644 --- a/test/test_notebooks.jl +++ b/test/test_notebooks.jl @@ -18,8 +18,7 @@ end module HeatSquare using NBInclude - # Requires BlockArrays, only available on 0.6 - # nbinclude("../examples/heat_square.ipynb") + nbinclude("../examples/heat_square.ipynb") end module Helmholtz @@ -29,7 +28,8 @@ end module Cook using NBInclude - nbinclude("../examples/cooks_membrane_mixed_up.ipynb") + # Requires BlockArrays, only available on 0.6 + # nbinclude("../examples/cooks_membrane_mixed_up.ipynb") end From 393bcbfd0887cc8b5032b09c0a75cd8080a5aef9 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Tue, 4 Apr 2017 09:14:18 +0200 Subject: [PATCH 41/44] reduce number of elements --- examples/hyperelasticity.ipynb | 85 ++++++++++++++++++++++------------ 1 file changed, 55 insertions(+), 30 deletions(-) diff --git a/examples/hyperelasticity.ipynb b/examples/hyperelasticity.ipynb index c89a591651..51b7bda6fc 100644 --- a/examples/hyperelasticity.ipynb +++ b/examples/hyperelasticity.ipynb @@ -2,14 +2,20 @@ "cells": [ { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "deletable": true, + "editable": true + }, "source": [ "## Hyperelasticity " ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "deletable": true, + "editable": true + }, "source": [ "![hyperelasticity.png](figures/hyperelasticity.png)" ] @@ -18,7 +24,9 @@ "cell_type": "code", "execution_count": 1, "metadata": { - "collapsed": false + "collapsed": false, + "deletable": true, + "editable": true }, "outputs": [ { @@ -43,7 +51,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "deletable": true, + "editable": true + }, "source": [ "### NeoHook Material" ] @@ -52,7 +63,9 @@ "cell_type": "code", "execution_count": 2, "metadata": { - "collapsed": false + "collapsed": false, + "deletable": true, + "editable": true }, "outputs": [ { @@ -88,7 +101,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "deletable": true, + "editable": true + }, "source": [ "## Assembler routines" ] @@ -97,7 +113,9 @@ "cell_type": "code", "execution_count": 3, "metadata": { - "collapsed": false + "collapsed": false, + "deletable": true, + "editable": true }, "outputs": [ { @@ -144,7 +162,9 @@ "cell_type": "code", "execution_count": 4, "metadata": { - "collapsed": false + "collapsed": false, + "deletable": true, + "editable": true }, "outputs": [ { @@ -216,7 +236,10 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "deletable": true, + "editable": true + }, "source": [ "## Main solver routine" ] @@ -225,7 +248,9 @@ "cell_type": "code", "execution_count": 5, "metadata": { - "collapsed": false + "collapsed": false, + "deletable": true, + "editable": true }, "outputs": [ { @@ -246,7 +271,7 @@ " const dim = 3\n", "\n", " # Generate a grid\n", - " N = 20\n", + " N = 10\n", " L = 1.0\n", " left = zero(Vec{dim})\n", " right = L * ones(Vec{dim})\n", @@ -290,7 +315,7 @@ " add!(dbc, :u, getnodeset(grid, \"rotation\"), (x,t) -> rotation(x, t), collect(1:dim))\n", " close!(dbc)\n", " t = 0.5\n", - " JuAFEM.update!(dbc, t)\n", + " update!(dbc, t)\n", "\n", " println(\"Analysis with \", length(grid.cells), \" elements\")\n", "\n", @@ -309,7 +334,7 @@ " prog = ProgressMeter.ProgressThresh(NEWTON_TOL, \"Solving:\")\n", "\n", " while true; newton_itr += 1\n", - " u = un + Δu\n", + " u .= un .+ Δu\n", " f, K = assemble(grid, dh, K, cv, fv, mp, u)\n", " normg = norm(f[JuAFEM.free_dofs(dbc)])\n", " apply_zero!(K, f, dbc)\n", @@ -328,7 +353,7 @@ " @assert flag == 0\n", "\n", " apply_zero!(ΔΔu, dbc)\n", - " Δu -= ΔΔu\n", + " Δu .-= ΔΔu\n", " end\n", "\n", " # save the solution\n", @@ -346,32 +371,30 @@ "cell_type": "code", "execution_count": 8, "metadata": { - "collapsed": false + "collapsed": false, + "deletable": true, + "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Analysis with 40000 elements\n", - "Solving: (thresh = 1e-08, value = 0.774902)\u001b[1m\u001b[34m\n", - "Solving: (thresh = 1e-08, value = 0.13008)\u001b[1m\u001b[34m\n", - "Solving: (thresh = 1e-08, value = 0.0165431)\u001b[1m\u001b[34m\n", - "Solving: (thresh = 1e-08, value = 0.000754111)\u001b[1m\u001b[34m\n", - "Solving: (thresh = 1e-08, value = 7.68402e-06)\u001b[1m\u001b[34m\n", - "Solving: Time: 0:00:04 (6 iterations)\u001b[1m\u001b[34m\n", + "Analysis with 5000 elements\n", + "Solving: (thresh = 1e-08, value = 0.0163928)\u001b[1m\u001b[34m\n", + "Solving: Time: 0:00:00 (6 iterations)\u001b[1m\u001b[34m\n", " iter: 5\u001b[0m\n", " \u001b[1m---------------------------------------------------------------------------\u001b[22m\n", " Time Allocations \n", " ---------------------- -----------------------\n", - " Tot / % measured: 4.43s / 80.5% 758MiB / 65.5% \n", + " Tot / % measured: 364ms / 80.1% 62.8MiB / 45.5% \n", "\n", " Section ncalls time %tot avg alloc %tot avg\n", " ---------------------------------------------------------------------------\n", - " assemble 6 2.30s 64.6% 384ms 478MiB 96.2% 79.6MiB\n", - " inner assemble 240k 1.87s 52.3% 7.78μs 412MiB 82.9% 1.76KiB\n", - " linear solve 5 1.17s 32.8% 234ms 4.31MiB 0.87% 882KiB\n", - " export 1 93.3ms 2.61% 93.3ms 14.6MiB 2.94% 14.6MiB\n", + " assemble 6 201ms 69.0% 33.5ms 26.1MiB 91.4% 4.35MiB\n", + " inner assemble 30.0k 145ms 49.6% 4.82μs 19.2MiB 67.3% 672B\n", + " linear solve 5 81.2ms 27.9% 16.2ms 683KiB 2.34% 137KiB\n", + " export 1 9.12ms 3.13% 9.12ms 1.79MiB 6.26% 1.79MiB\n", " \u001b[1m---------------------------------------------------------------------------\u001b[22m" ] } @@ -384,7 +407,9 @@ "cell_type": "code", "execution_count": 7, "metadata": { - "collapsed": false + "collapsed": false, + "deletable": true, + "editable": true }, "outputs": [ { @@ -396,14 +421,14 @@ } ], "source": [ - "Base.Test.@test maximum(u) ≈ 0.3415063509461096\n", + "Base.Test.@test norm(u) ≈ 4.870833706518008\n", "println(\"Hyperelasticity passed!\")" ] } ], "metadata": { "kernelspec": { - "display_name": "Julia 0.5.1-pre", + "display_name": "Julia 0.5.1", "language": "julia", "name": "julia-0.5" }, From 5926c2e269f5a5a87b3f6a73a36329fad7f688b0 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Tue, 4 Apr 2017 09:25:00 +0200 Subject: [PATCH 42/44] doc fixes and misc --- docs/make.jl | 2 +- docs/src/lib/utility_functions.md | 3 - docs/src/man/fe_intro.md | 4 +- examples/cantilever.ipynb | 132 +++++++++++++++++++----------- src/FEValues/cell_values.jl | 3 - src/FEValues/face_values.jl | 3 - src/JuAFEM.jl | 3 +- src/deprecations.jl | 1 - 8 files changed, 86 insertions(+), 65 deletions(-) diff --git a/docs/make.jl b/docs/make.jl index 421147a32d..6dafc57ced 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -5,7 +5,7 @@ makedocs( format = :html, sitename = "JuAFEM.jl", doctest = true, - strict = false, # VERSION.minor == 6, # only strict mode on release bot + strict = VERSION.minor == 6 && sizeof(Int) == 8, # only strict mode on 0.6 and Int64 pages = Any[ "Home" => "index.md", "man/fe_intro.md", diff --git a/docs/src/lib/utility_functions.md b/docs/src/lib/utility_functions.md index 5316f2c4b4..4146964c3d 100644 --- a/docs/src/lib/utility_functions.md +++ b/docs/src/lib/utility_functions.md @@ -32,9 +32,6 @@ getorder ```@docs reinit! getnquadpoints -getquadrule -getfunctioninterpolation -getgeometryinterpolation getdetJdV shape_value diff --git a/docs/src/man/fe_intro.md b/docs/src/man/fe_intro.md index db02cedf15..bce86ae6c7 100644 --- a/docs/src/man/fe_intro.md +++ b/docs/src/man/fe_intro.md @@ -75,9 +75,9 @@ The integrals are evaluated using quadrature. In JuAFEM the stiffness matrix and for qp in 1:Nqp for i in 1:N - f[i] += shape_value(i) ⋅ f * dΩ + f[i] += (shape_value(i) ⋅ f) * dΩ for j in 1:N - K[i,j] += shape_symmetric_gradient(i) : C : shape_symmetric_gradient(j) * dΩ + K[i,j] += (shape_symmetric_gradient(i) : C : shape_symmetric_gradient(j)) * dΩ end end end diff --git a/examples/cantilever.ipynb b/examples/cantilever.ipynb index 25600c558e..6de692a8c2 100644 --- a/examples/cantilever.ipynb +++ b/examples/cantilever.ipynb @@ -2,14 +2,20 @@ "cells": [ { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "deletable": true, + "editable": true + }, "source": [ "## Cantilever beam with a traction load on one side" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "deletable": true, + "editable": true + }, "source": [ "![cant.png](figures/cant.png)" ] @@ -18,9 +24,20 @@ "cell_type": "code", "execution_count": 1, "metadata": { - "collapsed": true + "collapsed": false, + "deletable": true, + "editable": true }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[1m\u001b[34mINFO: Recompiling stale cache file /home/kristoffer/.julia/lib/v0.5/JuAFEM.ji for module JuAFEM.\n", + "\u001b[0m" + ] + } + ], "source": [ "using JuAFEM\n", "using Tensors\n", @@ -33,18 +50,9 @@ "cell_type": "code", "execution_count": 2, "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "import Base.flatten" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false + "collapsed": false, + "deletable": true, + "editable": true }, "outputs": [ { @@ -53,7 +61,7 @@ "1" ] }, - "execution_count": 3, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -67,9 +75,11 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": { "collapsed": true, + "deletable": true, + "editable": true, "scrolled": true }, "outputs": [], @@ -84,9 +94,11 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": { - "collapsed": true + "collapsed": true, + "deletable": true, + "editable": true }, "outputs": [], "source": [ @@ -99,9 +111,11 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": { - "collapsed": false + "collapsed": false, + "deletable": true, + "editable": true }, "outputs": [ { @@ -114,7 +128,7 @@ " Dofs per cell: 12" ] }, - "execution_count": 6, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -128,16 +142,18 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": { - "collapsed": false + "collapsed": false, + "deletable": true, + "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - " 0.228741 seconds (105.41 k allocations: 70.145 MB, 13.50% gc time)\n" + " 0.215791 seconds (105.47 k allocations: 70.147 MB, 4.42% gc time)\n" ] }, { @@ -172,7 +188,7 @@ "\u001b[0m" ] }, - "execution_count": 7, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -185,9 +201,11 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": { - "collapsed": true + "collapsed": true, + "deletable": true, + "editable": true }, "outputs": [], "source": [ @@ -202,9 +220,11 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": { - "collapsed": true + "collapsed": true, + "deletable": true, + "editable": true }, "outputs": [], "source": [ @@ -220,9 +240,11 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": { - "collapsed": false + "collapsed": false, + "deletable": true, + "editable": true }, "outputs": [ { @@ -231,7 +253,7 @@ "doassemble (generic function with 1 method)" ] }, - "execution_count": 10, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -296,9 +318,11 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 15, "metadata": { - "collapsed": false + "collapsed": false, + "deletable": true, + "editable": true }, "outputs": [ { @@ -308,11 +332,11 @@ " \u001b[1m------------------------------------------------------------------\u001b[22m\n", " Time Allocations \n", " ---------------------- -----------------------\n", - " Tot / % measured: 42.0ms / 92.5% 4.32MiB / 87.0% \n", + " Tot / % measured: 27.0ms / 89.8% 417KiB / 0.05% \n", "\n", " Section ncalls time %tot avg alloc %tot avg\n", " ------------------------------------------------------------------\n", - " assem 10.8k 38.9ms 100% 3.60μs 3.76MiB 100% 365B\n", + " assem 10.8k 24.3ms 100% 2.25μs 224B 100% 0B\n", " \u001b[1m------------------------------------------------------------------\u001b[22m" ] } @@ -325,16 +349,18 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 16, "metadata": { - "collapsed": false + "collapsed": false, + "deletable": true, + "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - " 0.003126 seconds (12 allocations: 3.172 KB)\n" + " 0.002891 seconds (12 allocations: 3.172 KB)\n" ] } ], @@ -345,16 +371,18 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 17, "metadata": { - "collapsed": false + "collapsed": false, + "deletable": true, + "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - " 0.112682 seconds (63 allocations: 45.675 MB, 8.30% gc time)\n" + " 0.108583 seconds (63 allocations: 45.675 MB, 14.03% gc time)\n" ] } ], @@ -364,9 +392,11 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 13, "metadata": { - "collapsed": false + "collapsed": false, + "deletable": true, + "editable": true }, "outputs": [ { @@ -376,7 +406,7 @@ " \"cantilever.vtu\"" ] }, - "execution_count": 14, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -389,9 +419,11 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 14, "metadata": { - "collapsed": false + "collapsed": false, + "deletable": true, + "editable": true }, "outputs": [ { @@ -411,7 +443,7 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Julia 0.5.1-pre", + "display_name": "Julia 0.5.1", "language": "julia", "name": "julia-0.5" }, diff --git a/src/FEValues/cell_values.jl b/src/FEValues/cell_values.jl index 4dce45b5ba..b77ac0d398 100644 --- a/src/FEValues/cell_values.jl +++ b/src/FEValues/cell_values.jl @@ -24,9 +24,6 @@ CellVectorValues([::Type{T}], quad_rule::QuadratureRule, func_interpol::Interpol * [`reinit!`](@ref) * [`getnquadpoints`](@ref) -* [`getquadrule`](@ref) -* [`getfunctioninterpolation`](@ref) -* [`getgeometryinterpolation`](@ref) * [`getdetJdV`](@ref) * [`shape_value`](@ref) diff --git a/src/FEValues/face_values.jl b/src/FEValues/face_values.jl index a5081e3ec6..0df3f5dfcf 100644 --- a/src/FEValues/face_values.jl +++ b/src/FEValues/face_values.jl @@ -28,9 +28,6 @@ FaceVectorValues([::Type{T}], quad_rule::QuadratureRule, func_interpol::Interpol * [`reinit!`](@ref) * [`getfacenumber`](@ref) * [`getnquadpoints`](@ref) -* [`getquadrule`](@ref) -* [`getfunctioninterpolation`](@ref) -* [`getgeometryinterpolation`](@ref) * [`getdetJdV`](@ref) * [`shape_value`](@ref) diff --git a/src/JuAFEM.jl b/src/JuAFEM.jl index 0f0c080e02..ed78a6ce8c 100644 --- a/src/JuAFEM.jl +++ b/src/JuAFEM.jl @@ -18,8 +18,7 @@ export CellValues, CellScalarValues, CellVectorValues export FaceValues, FaceScalarValues, FaceVectorValues export ScalarValues, VectorValues -export reinit!, shape_value, shape_gradient, shape_symmetric_gradient, shape_divergence, getdetJdV, getquadrule, - getfunctioninterpolation, getgeometryinterpolation, +export reinit!, shape_value, shape_gradient, shape_symmetric_gradient, shape_divergence, getdetJdV, function_value, function_gradient, function_symmetric_gradient, function_divergence, spatial_coordinate export getfacenumber, getnormal export Interpolation, getdim, getrefshape, getorder, getnbasefunctions, getnquadpoints diff --git a/src/deprecations.jl b/src/deprecations.jl index 1f5ffbcc2a..d863a98634 100644 --- a/src/deprecations.jl +++ b/src/deprecations.jl @@ -43,7 +43,6 @@ export Dim @deprecate assemble(edof::Vector, a::Assembler, Ke::Matrix) assemble!(a, Ke, edof) # PR #85 -@deprecate get_quadrule getquadrule @deprecate get_functionspace getfunctioninterpolation @deprecate get_geometricspace getgeometryinterpolation @deprecate detJdV getdetJdV From 402b1907d9b75010175f43720438a2d7949fbb52 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Tue, 4 Apr 2017 09:32:55 +0200 Subject: [PATCH 43/44] fix recomp --- examples/cantilever.ipynb | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/examples/cantilever.ipynb b/examples/cantilever.ipynb index 6de692a8c2..ef4aaf3a3f 100644 --- a/examples/cantilever.ipynb +++ b/examples/cantilever.ipynb @@ -28,16 +28,7 @@ "deletable": true, "editable": true }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[1m\u001b[34mINFO: Recompiling stale cache file /home/kristoffer/.julia/lib/v0.5/JuAFEM.ji for module JuAFEM.\n", - "\u001b[0m" - ] - } - ], + "outputs": [], "source": [ "using JuAFEM\n", "using Tensors\n", @@ -153,7 +144,7 @@ "name": "stdout", "output_type": "stream", "text": [ - " 0.215791 seconds (105.47 k allocations: 70.147 MB, 4.42% gc time)\n" + " 0.231351 seconds (105.47 k allocations: 70.147 MB, 13.25% gc time)\n" ] }, { @@ -332,11 +323,11 @@ " \u001b[1m------------------------------------------------------------------\u001b[22m\n", " Time Allocations \n", " ---------------------- -----------------------\n", - " Tot / % measured: 27.0ms / 89.8% 417KiB / 0.05% \n", + " Tot / % measured: 23.7ms / 90.4% 417KiB / 0.05% \n", "\n", " Section ncalls time %tot avg alloc %tot avg\n", " ------------------------------------------------------------------\n", - " assem 10.8k 24.3ms 100% 2.25μs 224B 100% 0B\n", + " assem 10.8k 21.4ms 100% 1.98μs 224B 100% 0B\n", " \u001b[1m------------------------------------------------------------------\u001b[22m" ] } @@ -360,7 +351,7 @@ "name": "stdout", "output_type": "stream", "text": [ - " 0.002891 seconds (12 allocations: 3.172 KB)\n" + " 0.004079 seconds (12 allocations: 3.172 KB)\n" ] } ], @@ -382,7 +373,7 @@ "name": "stdout", "output_type": "stream", "text": [ - " 0.108583 seconds (63 allocations: 45.675 MB, 14.03% gc time)\n" + " 0.094822 seconds (63 allocations: 45.675 MB, 12.66% gc time)\n" ] } ], From 4c1a176ce13536a4e9bb8bfbf8cd74d9582303fb Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Tue, 4 Apr 2017 12:27:30 +0200 Subject: [PATCH 44/44] only run notebooks on 0.6 --- test/runtests.jl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/runtests.jl b/test/runtests.jl index a1db5cdb84..45109314fa 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -11,7 +11,9 @@ include("test_quadrules.jl") include("test_assemble.jl") include("test_grid.jl") include("test_VTK.jl") -include("test_notebooks.jl") +if VERSION.minor == 6 + include("test_notebooks.jl") +end # Build the docs include("../docs/make.jl")

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 literal 0 HcmV?d00001 diff --git a/examples/figures/hyperelasticity.png b/examples/figures/hyperelasticity.png new file mode 100644 index 0000000000000000000000000000000000000000..9463ae493a95261e2a65512a86feaec8cdd37299 GIT binary patch literal 93956 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Μv}+N1;ba9eD;c^js~xfvH35LvpeF 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 Date: Thu, 23 Mar 2017 20:55:01 +0100 Subject: [PATCH 24/44] =?UTF-8?q?test=20new=20notebooks=C3=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/Untitled.ipynb | 33 +++++++++++++++++++++++ examples/Yeoh_large_deformations.ipynb | 37 +++++++------------------- examples/heat_square.ipynb | 28 ++++++++++++++++--- test/test_notebooks.jl | 18 ++++++++++++- 4 files changed, 84 insertions(+), 32 deletions(-) create mode 100644 examples/Untitled.ipynb diff --git a/examples/Untitled.ipynb b/examples/Untitled.ipynb new file mode 100644 index 0000000000..b9fe9118d4 --- /dev/null +++ b/examples/Untitled.ipynb @@ -0,0 +1,33 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "1+1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Julia 0.6.0-pre.alpha", + "language": "julia", + "name": "julia-0.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/Yeoh_large_deformations.ipynb b/examples/Yeoh_large_deformations.ipynb index 3da042ad85..4771238c76 100644 --- a/examples/Yeoh_large_deformations.ipynb +++ b/examples/Yeoh_large_deformations.ipynb @@ -10,15 +10,12 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "using ForwardDiff\n", "using Tensors\n", "using JuAFEM\n", - "using CALFEM\n", "using MAT\n", "using NLsolve" ] @@ -33,9 +30,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "immutable YeohMaterial{T}\n", @@ -74,9 +69,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "# Takes the initial + current configuration, the fe_value object and the material parameters and\n", @@ -122,9 +115,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "immutable CALMesh2D\n", @@ -161,7 +152,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "scrolled": true }, "outputs": [], @@ -192,9 +182,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "function grad!(fvec, X, x, mesh, material_parameters, dof_free, fe_values)\n", @@ -226,9 +214,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "function vtkoutput(pvd, i, mesh, X, x, topology, f_react)\n", @@ -261,9 +247,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "function go()\n", @@ -329,7 +313,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, "scrolled": true }, "outputs": [], @@ -340,7 +323,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Julia 0.5.0-dev", + "display_name": "Julia 0.5.1", "language": "julia", "name": "julia-0.5" }, @@ -348,9 +331,9 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "0.5.0" + "version": "0.5.1" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/examples/heat_square.ipynb b/examples/heat_square.ipynb index 17d93c4c4e..3ac0afff95 100644 --- a/examples/heat_square.ipynb +++ b/examples/heat_square.ipynb @@ -214,27 +214,47 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [], "source": [ "apply!(K, f, dbc)\n", - "u = K \\ f;" + "T = K \\ f;" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [], "source": [ - "vtkfile = vtk_grid(\"heat\", dh, u)\n", + "vtkfile = vtk_grid(\"heat\", dh, T)\n", "vtk_save(vtkfile);" ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Heat square successful\n" + ] + } + ], + "source": [ + "Base.Test.@test maximum(T) ≈ 0.29526786377073544\n", + "println(\"Heat square successful\")" + ] } ], "metadata": { diff --git a/test/test_notebooks.jl b/test/test_notebooks.jl index eb95adbfb3..65519d1b3c 100644 --- a/test/test_notebooks.jl +++ b/test/test_notebooks.jl @@ -1,7 +1,23 @@ # Run the notebook tests in separate modules + module TestStiffness using NBInclude nbinclude("../examples/stiffness_example.ipynb") +end + +module Cantilever + using NBInclude nbinclude("../examples/cantilever.ipynb") -end \ No newline at end of file +end + +module HyperElasticity + using NBInclude + nbinclude("../examples/hyperelasticity.ipynb") +end + +module HeatSquare + using NBInclude + nbinclude("../examples/heat_square.ipynb") +end + From 10384555a83ce45aeb1d5cc107cbcd83bbcac77a Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Thu, 23 Mar 2017 21:30:43 +0100 Subject: [PATCH 25/44] add REQ --- test/REQUIRE | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/REQUIRE b/test/REQUIRE index 6b1b52533a..3f298e3c48 100644 --- a/test/REQUIRE +++ b/test/REQUIRE @@ -4,4 +4,5 @@ NBInclude Documenter TimerOutputs UnicodePlots -KrylovMethods \ No newline at end of file +KrylovMethods +ProgressMeter \ No newline at end of file From 87d9c59fda350a90aba2a31f41097efe067fac2d Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Fri, 24 Mar 2017 01:12:57 +0100 Subject: [PATCH 26/44] some review fixes --- examples/Untitled.ipynb | 33 ---- examples/hyperelasticity.jl | 216 ------------------------ src/Dofs/DirichletBoundaryConditions.jl | 8 +- src/Grid/grid.jl | 27 +-- 4 files changed, 19 insertions(+), 265 deletions(-) delete mode 100644 examples/Untitled.ipynb delete mode 100644 examples/hyperelasticity.jl diff --git a/examples/Untitled.ipynb b/examples/Untitled.ipynb deleted file mode 100644 index b9fe9118d4..0000000000 --- a/examples/Untitled.ipynb +++ /dev/null @@ -1,33 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "1+1" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Julia 0.6.0-pre.alpha", - "language": "julia", - "name": "julia-0.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/hyperelasticity.jl b/examples/hyperelasticity.jl deleted file mode 100644 index 578bebf986..0000000000 --- a/examples/hyperelasticity.jl +++ /dev/null @@ -1,216 +0,0 @@ -module HyperElasticity - -using JuAFEM -using Tensors -using KrylovMethods -using TimerOutputs -import ProgressMeter - -const ∇ = Tensors.gradient - -# NeoHook -immutable NeoHook{T} - μ::T - λ::T -end - -function compute_2nd_PK(mp::NeoHook, E) - I = one(E) - C = 2E + one(E) - invC = inv(C) - J = sqrt(det(C)) - return mp.μ *(I - invC) + mp.λ * log(J) * invC -end - -function constitutive_driver(mp::NeoHook, E) - ∂S∂E, SPK = ∇(E -> compute_2nd_PK(mp, E), E, :all) - return SPK, ∂S∂E -end - -############ -# Assembly # -############ - -# calculate global residual g and stiffness k -function assemble{dim}(grid::Grid{dim}, dh::DofHandler, K, cv, fv, mp, u) - # cache some stuff - n = ndofs_per_cell(dh) - Ke = zeros(n, n) - fe = zeros(n) - - f = zeros(ndofs(dh)) - assembler = start_assemble(K, f) - - global_dofs = zeros(Int, n) - - # loop over all cells in the grid - @timeit "assemble" for cell in CellIterator(dh) - # reset - fill!(Ke, 0) - fill!(fe, 0) - - celldofs!(global_dofs, cell) - ue = u[global_dofs] # element dofs - @timeit "inner assemble" assemble_element!(Ke, fe, cell, cv, fv, mp, ue) - - assemble!(assembler, fe, Ke, global_dofs) - end - - return f, K -end - -function assemble_element!(ke, fe, cell, cv, fv, mp, ue, assemble_tangent = true) - b = Vec{3}((0.0, -0.5, 0.0)) - t = Vec{3}((0.1, 0.0, 0.0)) - ndofs = getnbasefunctions(cv) - reinit!(cv, cell) - fill!(ke, 0.0) - fill!(fe, 0.0) - δE = Vector{SymmetricTensor{2, 3, eltype(ue), 6}}(ndofs) - - for qp in 1:getnquadpoints(cv) - ∇u = function_gradient(cv, qp, ue) - dΩ = getdetJdV(cv, qp) - - # strain and stress + tangent - F = one(∇u) + ∇u - E = symmetric(1/2 * (F' ⋅ F - one(F))) - - S, ∂S∂E = constitutive_driver(mp, E) - - # Hoist computations of δE - for i in 1:ndofs - δFi = shape_gradient(cv, qp, i) - δE[i] = symmetric(1/2*(δFi'⋅F + F'⋅δFi)) - end - - for i in 1:ndofs - δFi = shape_gradient(cv, qp, i) - δu = shape_value(cv, qp, i) - fe[i] += (δE[i] ⊡ S) * dΩ - fe[i] -= (δu ⋅ b) * dΩ - δE∂S∂E = δE[i] ⊡ ∂S∂E - S∇δu = S ⋅ δFi' - for j in 1:ndofs - δ∇uj = shape_gradient(cv, qp, j) - ke[i, j] += (δE∂S∂E ⊡ δE[j] + S∇δu ⊡ δ∇uj' ) * dΩ - end - end - end - - for face in 1:nfaces(cell) - if onboundary(cell, face) - reinit!(fv, cell, face) - for q_point in 1:getnquadpoints(fv) - dΓ = getdetJdV(fv, q_point) - for i in 1:ndofs - δu = shape_value(fv, q_point, i) - fe[i] -= (δu ⋅ t) * dΓ - end - end - end - end -end - -# solve the problem -function solve() - reset_timer!() - - const dim = 3 - - # Generate a grid - N = 20 - L = 1.0 - left = zero(Vec{dim}) - right = L * ones(Vec{dim}) - grid = generate_grid(Tetrahedron, ntuple(x->N, dim), left, right) - - # Node sets - addnodeset!(grid, "clamped", x -> norm(x[1]) ≈ 1) - addnodeset!(grid, "rotation", x -> norm(x[1]) ≈ 0) - - # Material parameters - E = 10.0 - ν = 0.3 - μ = E / (2(1 + ν)) - λ = (E * ν) / ((1 + ν) * (1 - 2ν)) - mp = NeoHook(μ, λ) - - # finite element base - ip = Lagrange{dim, RefTetrahedron, 1}() - qr = QuadratureRule{dim, RefTetrahedron}(1) - qr_face = QuadratureRule{dim-1, RefTetrahedron}(1) - cv = CellVectorValues(qr, ip) - fv = FaceVectorValues(qr_face, ip) - - # DofHandler - dh = DofHandler(grid) - push!(dh, :u, dim) # Add a displacement field - close!(dh) - - function rotation(X, t, θ = deg2rad(60.0)) - x, y, z = X - return t * Vec{dim}( - (0.0, - L/2 - y + (y-L/2)*cos(θ) - (z-L/2)*sin(θ), - L/2 - z + (y-L/2)*sin(θ) + (z-L/2)*cos(θ) - )) - end - - dbc = DirichletBoundaryConditions(dh) - # Add a homogenoush boundary condition on the "clamped" edge - add!(dbc, :u, getnodeset(grid, "clamped"), (x,t) -> [0.0, 0.0, 0.0], collect(1:dim)) - add!(dbc, :u, getnodeset(grid, "rotation"), (x,t) -> rotation(x, t), collect(1:dim)) - close!(dbc) - t = 0.5 - JuAFEM.update!(dbc, t) - - println("Analysis with ", length(grid.cells), " elements") - - # pre-allocate - _ndofs = ndofs(dh) - un = zeros(_ndofs) # previous solution vector - u = zeros(_ndofs) - Δu = zeros(_ndofs) - - apply!(un, dbc) - - K = create_sparsity_pattern(dh) - - newton_itr = -1 - NEWTON_TOL = 1e-8 - prog = ProgressMeter.ProgressThresh(NEWTON_TOL, "Solving:") - - while true; newton_itr += 1 - u = un + Δu - f, K = assemble(grid, dh, K, cv, fv, mp, u) - normg = norm(f[JuAFEM.free_dofs(dbc)]) - apply_zero!(K, f, dbc) - ProgressMeter.update!(prog, normg; showvalues = [(:iter, newton_itr)]) - - if normg < NEWTON_TOL - break - end - - if newton_itr > 30 - error("Reached maximum Newton iterations, aborting") - break - end - - @timeit "linear solve" ΔΔu, flag, relres, iter, resvec = cg(K, f; maxIter = 1000, tol = min(1e-3, normg)) - @assert flag == 0 - - apply_zero!(ΔΔu, dbc) - Δu -= ΔΔu - end - - # save the solution - @timeit "export" begin - vtk = vtk_grid("hyperelasticity", dh, u) - vtk_save(vtk) - end - - print_timer() -end - -end # module \ No newline at end of file diff --git a/src/Dofs/DirichletBoundaryConditions.jl b/src/Dofs/DirichletBoundaryConditions.jl index 76769c27e9..d6d5df1684 100644 --- a/src/Dofs/DirichletBoundaryConditions.jl +++ b/src/Dofs/DirichletBoundaryConditions.jl @@ -50,11 +50,11 @@ immutable DirichletBoundaryCondition end -immutable DirichletBoundaryConditions{DH <: DofHandler} +immutable DirichletBoundaryConditions{DH <: DofHandler, T} bcs::Vector{DirichletBoundaryCondition} dofs::Vector{Int} free_dofs::Vector{Int} - values::Vector{Float64} + values::Vector{T} dh::DH closed::Ref{Bool} end @@ -96,13 +96,13 @@ end # Adds a boundary condition function add!(dbcs::DirichletBoundaryConditions, field::Symbol, nodes::Union{Set{Int}, Vector{Int}}, f::Function, components::Vector{Int}) - @assert field in dbcs.dh.field_names || error("Missing: $field") + field in dbcs.dh.field_names || error("Missing: $field") for component in components @assert 0 < component <= ndim(dbcs.dh, field) end if length(nodes) == 0 - warn("Added Dirichlet BC to node set containing 9 nodes") + warn("Added Dirichlet BC to node set containing 0 nodes") end dofs_bc = Int[] diff --git a/src/Grid/grid.jl b/src/Grid/grid.jl index 6293367f2f..7011a9360a 100644 --- a/src/Grid/grid.jl +++ b/src/Grid/grid.jl @@ -129,14 +129,19 @@ end n_faces_per_cell(grid::Grid) = nfaces(eltype(grid.cells)) getfacelist(grid::Grid) = getfacelist(eltype(grid.cells)) -function addcellset!(grid::Grid, name::String, cellid::Vector{Int}) + +_check_nodesetname(grid, name) = haskey(grid.nodesets, name) && throw(ArgumentError("There already exists a nodeset with the name: $name")) +_warn_emptyset(set) = length(set) == 0 && warn("no entities added to set") + +function addcellset!(grid::Grid, name::String, cellid::Union{Set{Int}, Vector{Int}}) haskey(grid.cellsets, name) && throw(ArgumentError("There already exists a cellset with the name: $name")) - grid.cellsets[name] = copy(cellid) - nothing + grid.cellsets[name] = Set(cellid) + _warn_emptyset(grid.cellsets[name]) + grid end function addcellset!(grid::Grid, name::String, f::Function) - cells = Int[] + cells = Set{Int}() for (i, cell) in enumerate(getcells(grid)) all_true = true for node_idx in cell.nodes @@ -146,17 +151,14 @@ function addcellset!(grid::Grid, name::String, f::Function) all_true && push!(cells, i) end grid.cellsets[name] = cells - nothing + _warn_emptyset(grid.cellsets[name]) + grid end - -_check_nodesetname(grid, name) = haskey(grid.nodesets, name) && throw(ArgumentError("There already exists a nodeset with the name: $name")) - - -addnodeset!(grid::Grid, name::String, nodeid::Vector{Int}) = addnodeset!(grid, name, Set{Int}(nodeid)) -function addnodeset!(grid::Grid, name::String, nodeid::Set{Int}) +function addnodeset!(grid::Grid, name::String, nodeid::Union{Vector{Int}, Set{Int}}) _check_nodesetname(grid, name) - grid.nodesets[name] = nodeid + grid.nodesets[name] = Set(nodeid) + _warn_emptyset(grid.nodesets[name]) grid end @@ -167,6 +169,7 @@ function addnodeset!(grid::Grid, name::String, f::Function) f(n.x) && push!(nodes, i) end grid.nodesets[name] = nodes + _warn_emptyset(grid.nodesets[name]) grid end From 0730373f34c3232224b0872f0b26ef797617afb2 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Sat, 25 Mar 2017 12:56:45 +0100 Subject: [PATCH 27/44] generalize grid --- src/Grid/grid_generators.jl | 85 +++++++++++++++++++++++++++++++------ 1 file changed, 73 insertions(+), 12 deletions(-) diff --git a/src/Grid/grid_generators.jl b/src/Grid/grid_generators.jl index f1e7c189b6..f59408cfb5 100644 --- a/src/Grid/grid_generators.jl +++ b/src/Grid/grid_generators.jl @@ -94,19 +94,83 @@ function generate_grid{T}(::Type{QuadraticLine}, nel::NTuple{1, Int}, left::Vec{ return Grid(cells, nodes, facesets=facesets) end + +function apply_transformation_matrix{T}(x::Vec{2, T}, H::Tensor{2, 3}) + xn = Vec{3,T}((x[1], x[2], one(T))) + Xn = H ⋅ xn + return Vec{2,T}((Xn[1], Xn[2])) / Xn[3] +end + +# https://wp.optics.arizona.edu/visualopticslab/wp-content/uploads/sites/52/2016/08/Lectures6_7.pdf +function compute_transformation_matrix{T}(x::Vector{Vec{2, T}}, X::Vector{Vec{2, T}}) + @assert length(x) == length(X) == 4 + + Base.Cartesian.@nexprs 4 i -> x_i = x[i][1] + Base.Cartesian.@nexprs 4 i -> y_i = x[i][2] + Base.Cartesian.@nexprs 4 i -> X_i = X[i][1] + Base.Cartesian.@nexprs 4 i -> Y_i = X[i][2] + + A = [x_1 y_1 1 0 0 0 -X_1*x_1 -X_1*y_1 + 0 0 0 x_1 y_1 1 -Y_1*x_1 -Y_1*y_1 + x_2 y_2 1 0 0 0 -X_2*x_2 -X_2*y_2 + 0 0 0 x_2 y_2 1 -Y_2*x_2 -Y_2*y_2 + x_3 y_3 1 0 0 0 -X_3*x_3 -X_3*y_3 + 0 0 0 x_3 y_3 1 -Y_3*x_3 -Y_3*y_3 + x_4 y_4 1 0 0 0 -X_4*x_4 -X_4*y_4 + 0 0 0 x_4 y_4 1 -Y_4*x_4 -Y_4*y_4] + + z = [X_1, Y_1, X_2, Y_2, X_3, Y_3, X_4, Y_4] + + # Use QR here? + a = (A' * A) \ (A' * z) + + push!(a, 1) + return Tensor{2,3}(Array(transpose(reshape(a, 3, 3)))) +end + + +function _generate_2d_nodes!(nodes, nx, ny, LL, LR, UR, UL) + for i in 0:ny-1 + ratio_bounds = i / (ny-1) + + x0 = LL[1] * (1 - ratio_bounds) + ratio_bounds * UL[1] + x1 = LR[1] * (1 - ratio_bounds) + ratio_bounds * UR[1] + + y0 = LL[2] * (1 - ratio_bounds) + ratio_bounds * UL[2] + y1 = LR[2] * (1 - ratio_bounds) + ratio_bounds * UR[2] + + for j in 0:nx-1 + ratio = j / (nx-1) + x = x0 * (1 - ratio) + ratio * x1 + y = y0 * (1 - ratio) + ratio * y1 + push!(nodes, Node((x, y))) + end + end +end + + +function generate_grid{M, N, T}(C::Type{Cell{2,M,N}}, nel::NTuple{2, Int}, X::Vector{Vec{2, T}}) + @assert length(X) == 4 + generate_grid(C, nel, X[1], X[2], X[3], X[4]) +end + +function generate_grid{M, N, T}(C::Type{Cell{2,M,N}}, nel::NTuple{2, Int}, left::Vec{2, T}=Vec{2}((-1.0,-1.0)), right::Vec{2, T}=Vec{2}((1.0,1.0))) + LL = left + UR = right + LR = Vec{2}((UR[1], LL[2])) + UL = Vec{2}((LL[1], UR[2])) + generate_grid(C, nel, LL, UR, LR, UL) +end + # Quadrilateral -function generate_grid{T}(::Type{Quadrilateral}, nel::NTuple{2, Int}, left::Vec{2, T}=Vec{2}((-1.0,-1.0)), right::Vec{2, T}=Vec{2}((1.0,1.0))) +function generate_grid{T}(C::Type{Quadrilateral}, nel::NTuple{2, Int}, LL::Vec{2, T}, LR::Vec{2, T}, UR::Vec{2, T}, UL::Vec{2, T}) nel_x = nel[1]; nel_y = nel[2]; nel_tot = nel_x*nel_y n_nodes_x = nel_x + 1; n_nodes_y = nel_y + 1 n_nodes = n_nodes_x * n_nodes_y # Generate nodes - coords_x = linspace(left[1], right[1], n_nodes_x) - coords_y = linspace(left[2], right[2], n_nodes_y) nodes = Node{2,T}[] - for j in 1:n_nodes_y, i in 1:n_nodes_x - push!(nodes, Node((coords_x[i], coords_y[j]))) - end + _generate_2d_nodes!(nodes, n_nodes_x, n_nodes_y, LL, LR, UR, UL) # Generate cells node_array = reshape(collect(1:n_nodes), (n_nodes_x, n_nodes_y)) @@ -226,18 +290,15 @@ function generate_grid{T}(::Type{Hexahedron}, nel::NTuple{3, Int}, left::Vec{3, end # Triangle -function generate_grid{T}(::Type{Triangle}, nel::NTuple{2, Int}, left::Vec{2, T}=Vec{2}((-1.0,-1.0)), right::Vec{2, T}=Vec{2}((1.0,1.0))) +function generate_grid{T}(::Type{Triangle}, nel::NTuple{2, Int}, LL::Vec{2, T}, LR::Vec{2, T}, UR::Vec{2, T}, UL::Vec{2, T}) nel_x = nel[1]; nel_y = nel[2]; nel_tot = 2*nel_x*nel_y n_nodes_x = nel_x + 1; n_nodes_y = nel_y + 1 n_nodes = n_nodes_x * n_nodes_y # Generate nodes - coords_x = linspace(left[1], right[1], n_nodes_x) - coords_y = linspace(left[2], right[2], n_nodes_y) nodes = Node{2,T}[] - for j in 1:n_nodes_y, i in 1:n_nodes_x - push!(nodes, Node((coords_x[i], coords_y[j]))) - end + _generate_2d_nodes!(nodes, n_nodes_x, n_nodes_y, LL, LR, UR, UL) + # Generate cells node_array = reshape(collect(1:n_nodes), (n_nodes_x, n_nodes_y)) From 401a26c0c9aab3565e77070b6a78f19ae525b783 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Sat, 25 Mar 2017 13:04:37 +0100 Subject: [PATCH 28/44] fixes --- src/Grid/grid.jl | 14 +++++++++- src/Grid/grid_generators.jl | 52 +++---------------------------------- 2 files changed, 17 insertions(+), 49 deletions(-) diff --git a/src/Grid/grid.jl b/src/Grid/grid.jl index 7011a9360a..78f45270a6 100644 --- a/src/Grid/grid.jl +++ b/src/Grid/grid.jl @@ -11,7 +11,7 @@ export getcells, getncells, getnodes, getnnodes, getcelltype, getcellset, getnodeset, getfaceset, getcoordinates, getcoordinates!, getcellsets, getnodesets, getfacesets, onboundary, nfaces -export addnodeset!, addcellset! +export addnodeset!, addcellset!, transform ######################### # Main types for meshes # @@ -129,6 +129,18 @@ end n_faces_per_cell(grid::Grid) = nfaces(eltype(grid.cells)) getfacelist(grid::Grid) = getfacelist(eltype(grid.cells)) +# Transformations + +function transform!(g::Grid, f::Function) + c = similar(g.nodes) + for i in 1:length(c) + c[i] = Node(f(g.nodes[i].x)) + end + copy!(g.nodes, c) + g +end + +# Sets _check_nodesetname(grid, name) = haskey(grid.nodesets, name) && throw(ArgumentError("There already exists a nodeset with the name: $name")) _warn_emptyset(set) = length(set) == 0 && warn("no entities added to set") diff --git a/src/Grid/grid_generators.jl b/src/Grid/grid_generators.jl index f59408cfb5..8a106fcde1 100644 --- a/src/Grid/grid_generators.jl +++ b/src/Grid/grid_generators.jl @@ -94,41 +94,6 @@ function generate_grid{T}(::Type{QuadraticLine}, nel::NTuple{1, Int}, left::Vec{ return Grid(cells, nodes, facesets=facesets) end - -function apply_transformation_matrix{T}(x::Vec{2, T}, H::Tensor{2, 3}) - xn = Vec{3,T}((x[1], x[2], one(T))) - Xn = H ⋅ xn - return Vec{2,T}((Xn[1], Xn[2])) / Xn[3] -end - -# https://wp.optics.arizona.edu/visualopticslab/wp-content/uploads/sites/52/2016/08/Lectures6_7.pdf -function compute_transformation_matrix{T}(x::Vector{Vec{2, T}}, X::Vector{Vec{2, T}}) - @assert length(x) == length(X) == 4 - - Base.Cartesian.@nexprs 4 i -> x_i = x[i][1] - Base.Cartesian.@nexprs 4 i -> y_i = x[i][2] - Base.Cartesian.@nexprs 4 i -> X_i = X[i][1] - Base.Cartesian.@nexprs 4 i -> Y_i = X[i][2] - - A = [x_1 y_1 1 0 0 0 -X_1*x_1 -X_1*y_1 - 0 0 0 x_1 y_1 1 -Y_1*x_1 -Y_1*y_1 - x_2 y_2 1 0 0 0 -X_2*x_2 -X_2*y_2 - 0 0 0 x_2 y_2 1 -Y_2*x_2 -Y_2*y_2 - x_3 y_3 1 0 0 0 -X_3*x_3 -X_3*y_3 - 0 0 0 x_3 y_3 1 -Y_3*x_3 -Y_3*y_3 - x_4 y_4 1 0 0 0 -X_4*x_4 -X_4*y_4 - 0 0 0 x_4 y_4 1 -Y_4*x_4 -Y_4*y_4] - - z = [X_1, Y_1, X_2, Y_2, X_3, Y_3, X_4, Y_4] - - # Use QR here? - a = (A' * A) \ (A' * z) - - push!(a, 1) - return Tensor{2,3}(Array(transpose(reshape(a, 3, 3)))) -end - - function _generate_2d_nodes!(nodes, nx, ny, LL, LR, UR, UL) for i in 0:ny-1 ratio_bounds = i / (ny-1) @@ -200,18 +165,14 @@ function generate_grid{T}(C::Type{Quadrilateral}, nel::NTuple{2, Int}, LL::Vec{2 end # QuadraticQuadrilateral -function generate_grid{T}(::Type{QuadraticQuadrilateral}, nel::NTuple{2, Int}, left::Vec{2, T}=Vec{2}((-1.0,-1.0)), right::Vec{2, T}=Vec{2}((1.0,1.0))) +function generate_grid{T}(::Type{QuadraticQuadrilateral}, nel::NTuple{2, Int}, LL::Vec{2, T}, LR::Vec{2, T}, UR::Vec{2, T}, UL::Vec{2, T}) nel_x = nel[1]; nel_y = nel[2]; nel_tot = nel_x*nel_y n_nodes_x = 2*nel_x + 1; n_nodes_y = 2*nel_y + 1 n_nodes = n_nodes_x * n_nodes_y # Generate nodes - coords_x = linspace(left[1], right[1], n_nodes_x) - coords_y = linspace(left[2], right[2], n_nodes_y) nodes = Node{2,T}[] - for j in 1:n_nodes_y, i in 1:n_nodes_x - push!(nodes, Node((coords_x[i], coords_y[j]))) - end + _generate_2d_nodes!(nodes, n_nodes_x, n_nodes_y, LL, LR, UR, UL) # Generate cells node_array = reshape(collect(1:n_nodes), (n_nodes_x, n_nodes_y)) @@ -299,7 +260,6 @@ function generate_grid{T}(::Type{Triangle}, nel::NTuple{2, Int}, LL::Vec{2, T}, nodes = Node{2,T}[] _generate_2d_nodes!(nodes, n_nodes_x, n_nodes_y, LL, LR, UR, UL) - # Generate cells node_array = reshape(collect(1:n_nodes), (n_nodes_x, n_nodes_y)) cells = Triangle[] @@ -329,18 +289,14 @@ function generate_grid{T}(::Type{Triangle}, nel::NTuple{2, Int}, LL::Vec{2, T}, end # QuadraticTriangle -function generate_grid{T}(::Type{QuadraticTriangle}, nel::NTuple{2, Int}, left::Vec{2, T}=Vec{2}((-1.0,-1.0)), right::Vec{2, T}=Vec{2}((1.0,1.0))) +function generate_grid{T}(::Type{QuadraticTriangle}, nel::NTuple{2, Int}, LL::Vec{2, T}, LR::Vec{2, T}, UR::Vec{2, T}, UL::Vec{2, T}) nel_x = nel[1]; nel_y = nel[2]; nel_tot = 2*nel_x*nel_y n_nodes_x = 2*nel_x + 1; n_nodes_y = 2*nel_y + 1 n_nodes = n_nodes_x * n_nodes_y # Generate nodes - coords_x = linspace(left[1], right[1], n_nodes_x) - coords_y = linspace(left[2], right[2], n_nodes_y) nodes = Node{2,T}[] - for j in 1:n_nodes_y, i in 1:n_nodes_x - push!(nodes, Node((coords_x[i], coords_y[j]))) - end + _generate_2d_nodes!(nodes, n_nodes_x, n_nodes_y, LL, LR, UR, UL) # Generate cells node_array = reshape(collect(1:n_nodes), (n_nodes_x, n_nodes_y)) From d4203a52eab679d3496fb820f43faffe0658dcef Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Sat, 25 Mar 2017 16:47:11 +0100 Subject: [PATCH 29/44] add computation of normals --- src/FEValues/face_integrals.jl | 60 ++++++++++++------- src/FEValues/face_values.jl | 102 +++++++++++++++++++++------------ src/Grid/grid_generators.jl | 1 - src/JuAFEM.jl | 2 +- test/REQUIRE | 4 +- test/test_cellvalues.jl | 2 +- test/test_facevalues.jl | 67 +++++++++++----------- test/test_utils.jl | 57 ++++++++++++++++-- 8 files changed, 194 insertions(+), 101 deletions(-) diff --git a/src/FEValues/face_integrals.jl b/src/FEValues/face_integrals.jl index 0976e94701..772834c153 100644 --- a/src/FEValues/face_integrals.jl +++ b/src/FEValues/face_integrals.jl @@ -15,7 +15,11 @@ function create_face_quad_rule{T, shape <: RefCube}(quad_rule::QuadratureRule{0, return face_quad_rule end -detJ_face{T}(::Tensor{2, 1, T}, ::Interpolation{1, RefCube}, ::Int) = one(T) +function weighted_normal{T}(::Tensor{2, 1, T}, ::Interpolation{1, RefCube}, face::Int) + face == 1 && return Vec{1,T}((-one(T),)) + face == 2 && return Vec{1,T}((one(T),)) + error("unknown face number: $face") +end ################## # All 2D RefCube # @@ -42,11 +46,14 @@ function create_face_quad_rule{T, shape <: RefCube}(quad_rule::QuadratureRule{1, return face_quad_rule end -function detJ_face(J::Tensor{2, 2}, ::Interpolation{2, RefCube}, face::Int) - face == 1 && return sqrt(J[1,1]^2 + J[2,1]^2) - face == 2 && return sqrt(J[1,2]^2 + J[2,2]^2) - face == 3 && return sqrt(J[1,1]^2 + J[2,1]^2) - face == 4 && return sqrt(J[1,2]^2 + J[2,2]^2) +function weighted_normal(J::Tensor{2, 2}, ::Interpolation{2, RefCube}, face::Int) + @inbounds begin + face == 1 && return Vec{2}(( J[2,1], -J[1,1])) + face == 2 && return Vec{2}(( J[2,2], -J[1,2])) + face == 3 && return Vec{2}((-J[2,1], J[1,1])) + face == 4 && return Vec{2}((-J[2,2], J[1,2])) + end + error("unknown face number: $face") end ######################### @@ -71,10 +78,13 @@ function create_face_quad_rule{T, shape <: RefTetrahedron}(quad_rule::Quadrature return face_quad_rule end -function detJ_face(J::Tensor{2, 2}, ::Interpolation{2, RefTetrahedron}, face::Int) - face == 1 && return sqrt((J[1,1] - J[1,2])^2 + (J[2,1] - J[2,2])^2) - face == 2 && return sqrt(J[1,2]^2 + J[2,2]^2) - face == 3 && return sqrt(J[1,1]^2 + J[2,1]^2) +function weighted_normal(J::Tensor{2, 2}, ::Interpolation{2, RefTetrahedron}, face::Int) + @inbounds begin + face == 1 && return return Vec{2}((-(J[2,1] - J[2,2]), J[1,1] - J[1,2])) + face == 2 && return return Vec{2}((-J[2,2], J[1,2])) + face == 3 && return return Vec{2}((J[2,1], -J[1,1])) + end + error("unknown face number: $face") end ################## @@ -108,13 +118,16 @@ function create_face_quad_rule{T, shape <: RefCube}(quad_rule::QuadratureRule{2, return face_quad_rule end -function detJ_face(J::Tensor{2, 3}, ::Interpolation{3, RefCube}, face::Int) - face == 1 && return norm(J[:,1] × J[:,2]) - face == 2 && return norm(J[:,1] × J[:,3]) - face == 3 && return norm(J[:,2] × J[:,3]) - face == 4 && return norm(J[:,1] × J[:,3]) - face == 5 && return norm(J[:,2] × J[:,3]) - face == 6 && return norm(J[:,1] × J[:,2]) +function weighted_normal(J::Tensor{2, 3}, ::Interpolation{3, RefCube}, face::Int) + @inbounds begin + face == 1 && return J[:,2] × J[:,1] + face == 2 && return J[:,1] × J[:,3] + face == 3 && return J[:,2] × J[:,3] + face == 4 && return J[:,3] × J[:,1] + face == 5 && return J[:,3] × J[:,2] + face == 6 && return J[:,1] × J[:,2] + end + error("unknown face number: $face") end ######################### @@ -142,9 +155,12 @@ function create_face_quad_rule{T, shape <: RefTetrahedron}(quad_rule::Quadrature return face_quad_rule end -function detJ_face(J::Tensor{2, 3}, ::Interpolation{3, RefTetrahedron}, face::Int) - face == 1 && return norm(J[:,1] × J[:,2]) - face == 2 && return norm(J[:,1] × J[:,3]) - face == 3 && return norm((J[:,1]-J[:,3]) × (J[:,2]-J[:,3])) - face == 4 && return norm(J[:,2] × J[:,3]) +function weighted_normal(J::Tensor{2, 3}, ::Interpolation{3, RefTetrahedron}, face::Int) + @inbounds begin + face == 1 && return J[:,2] × J[:,1] + face == 2 && return J[:,1] × J[:,3] + face == 3 && return (J[:,1]-J[:,3]) × (J[:,2]-J[:,3]) + face == 4 && return J[:,3] × J[:,2] + end + error("unknown face number: $face") end diff --git a/src/FEValues/face_values.jl b/src/FEValues/face_values.jl index 83ac906212..6030cbb709 100644 --- a/src/FEValues/face_values.jl +++ b/src/FEValues/face_values.jl @@ -52,6 +52,7 @@ immutable FaceScalarValues{dim, T <: Real, FIP <: Interpolation, GIP <: Interpol dNdx::Array{Vec{dim, T}, 3} dNdξ::Array{Vec{dim, T}, 3} detJdV::Matrix{T} + normals::Vector{Vec{dim, T}} quad_rule::Vector{QuadratureRule{dim, shape, T}} func_interpol::FIP M::Array{T, 3} @@ -63,7 +64,7 @@ end FaceScalarValues{dim_qr, FIP <: Interpolation, GIP <: Interpolation}(quad_rule::QuadratureRule{dim_qr}, func_interpol::FIP, geom_interpol::GIP=func_interpol) = FaceScalarValues(Float64, quad_rule, func_interpol, geom_interpol) -getnbasefunctions(bvv::FaceScalarValues) = getnbasefunctions(bvv.func_interpol) +getnbasefunctions(fvv::FaceScalarValues) = getnbasefunctions(fvv.func_interpol) function FaceScalarValues{dim_qr, T, FIP <: Interpolation, GIP <: Interpolation, shape <: AbstractRefShape}( ::Type{T}, quad_rule::QuadratureRule{dim_qr, shape}, func_interpol::FIP, geom_interpol::GIP=func_interpol) @@ -74,29 +75,32 @@ function FaceScalarValues{dim_qr, T, FIP <: Interpolation, GIP <: Interpolation, dim = dim_qr + 1 face_quad_rule = create_face_quad_rule(quad_rule, func_interpol) - n_bounds = length(face_quad_rule) + n_faces = length(face_quad_rule) + + # Normals + normals = zeros(Vec{dim, T}, n_qpoints) # Function interpolation n_func_basefuncs = getnbasefunctions(func_interpol) - N = zeros(T, n_func_basefuncs, n_qpoints, n_bounds) - dNdx = zeros(Vec{dim, T}, n_func_basefuncs, n_qpoints, n_bounds) - dNdξ = zeros(Vec{dim, T}, n_func_basefuncs, n_qpoints, n_bounds) + N = zeros(T, n_func_basefuncs, n_qpoints, n_faces) + dNdx = zeros(Vec{dim, T}, n_func_basefuncs, n_qpoints, n_faces) + dNdξ = zeros(Vec{dim, T}, n_func_basefuncs, n_qpoints, n_faces) # Geometry interpolation n_geom_basefuncs = getnbasefunctions(geom_interpol) - M = zeros(T, n_geom_basefuncs, n_qpoints, n_bounds) - dMdξ = zeros(Vec{dim, T}, n_geom_basefuncs, n_qpoints, n_bounds) + M = zeros(T, n_geom_basefuncs, n_qpoints, n_faces) + dMdξ = zeros(Vec{dim, T}, n_geom_basefuncs, n_qpoints, n_faces) - for k in 1:n_bounds, (i, ξ) in enumerate(face_quad_rule[k].points) + for k in 1:n_faces, (i, ξ) in enumerate(face_quad_rule[k].points) value!(func_interpol, view(N, :, i, k), ξ) derivative!(func_interpol, view(dNdξ, :, i, k), ξ) value!(geom_interpol, view(M, :, i, k), ξ) derivative!(geom_interpol, view(dMdξ, :, i, k), ξ) end - detJdV = zeros(T, n_qpoints, n_bounds) + detJdV = zeros(T, n_qpoints, n_faces) - FaceScalarValues(N, dNdx, dNdξ, detJdV, face_quad_rule, func_interpol, M, dMdξ, geom_interpol, Ref(0)) + FaceScalarValues(N, dNdx, dNdξ, detJdV, normals, face_quad_rule, func_interpol, M, dMdξ, geom_interpol, Ref(0)) end # FaceVectorValues @@ -105,6 +109,7 @@ immutable FaceVectorValues{dim, T <: Real, FIP <: Interpolation, GIP <: Interpol dNdx::Array{Tensor{2, dim, T, M}, 3} dNdξ::Array{Tensor{2, dim, T, M}, 3} detJdV::Matrix{T} + normals::Vector{Vec{dim, T}} quad_rule::Vector{QuadratureRule{dim, shape, T}} func_interpol::FIP M::Array{T, 3} @@ -116,7 +121,7 @@ end FaceVectorValues{dim_qr, FIP <: Interpolation, GIP <: Interpolation}(quad_rule::QuadratureRule{dim_qr}, func_interpol::FIP, geom_interpol::GIP=func_interpol) = FaceVectorValues(Float64, quad_rule, func_interpol, geom_interpol) -getnbasefunctions{dim}(bvv::FaceVectorValues{dim}) = getnbasefunctions(bvv.func_interpol) * dim +getnbasefunctions{dim}(fvv::FaceVectorValues{dim}) = getnbasefunctions(fvv.func_interpol) * dim function FaceVectorValues{dim_qr, T, FIP <: Interpolation, GIP <: Interpolation, shape <: AbstractRefShape}( ::Type{T}, quad_rule::QuadratureRule{dim_qr, shape}, func_interpol::FIP, geom_interpol::GIP=func_interpol) @@ -127,20 +132,23 @@ function FaceVectorValues{dim_qr, T, FIP <: Interpolation, GIP <: Interpolation, dim = dim_qr + 1 face_quad_rule = create_face_quad_rule(quad_rule, func_interpol) - n_bounds = length(face_quad_rule) + n_faces = length(face_quad_rule) + + # Normals + normals = zeros(Vec{dim, T}, n_qpoints) # Function interpolation n_func_basefuncs = getnbasefunctions(func_interpol) * dim - N = zeros(Vec{dim, T}, n_func_basefuncs, n_qpoints, n_bounds) - dNdx = [zero(Tensor{2, dim, T}) for i in 1:n_func_basefuncs, j in 1:n_qpoints, k in 1:n_bounds] - dNdξ = [zero(Tensor{2, dim, T}) for i in 1:n_func_basefuncs, j in 1:n_qpoints, k in 1:n_bounds] + N = zeros(Vec{dim, T}, n_func_basefuncs, n_qpoints, n_faces) + dNdx = [zero(Tensor{2, dim, T}) for i in 1:n_func_basefuncs, j in 1:n_qpoints, k in 1:n_faces] + dNdξ = [zero(Tensor{2, dim, T}) for i in 1:n_func_basefuncs, j in 1:n_qpoints, k in 1:n_faces] # Geometry interpolation n_geom_basefuncs = getnbasefunctions(geom_interpol) - M = zeros(T, n_geom_basefuncs, n_qpoints, n_bounds) - dMdξ = zeros(Vec{dim, T}, n_geom_basefuncs, n_qpoints, n_bounds) + M = zeros(T, n_geom_basefuncs, n_qpoints, n_faces) + dMdξ = zeros(Vec{dim, T}, n_geom_basefuncs, n_qpoints, n_faces) - for k in 1:n_bounds + for k in 1:n_faces N_temp = zeros(getnbasefunctions(func_interpol)) dNdξ_temp = zeros(Vec{dim, T}, getnbasefunctions(func_interpol)) for (i, ξ) in enumerate(face_quad_rule[k].points) @@ -164,32 +172,35 @@ function FaceVectorValues{dim_qr, T, FIP <: Interpolation, GIP <: Interpolation, end end - detJdV = zeros(T, n_qpoints, n_bounds) + detJdV = zeros(T, n_qpoints, n_faces) - FaceVectorValues(N, dNdx, dNdξ, detJdV, face_quad_rule, func_interpol, M, dMdξ, geom_interpol, Ref(0)) + FaceVectorValues(N, dNdx, dNdξ, detJdV, normals, face_quad_rule, func_interpol, M, dMdξ, geom_interpol, Ref(0)) end -function reinit!{dim, T}(bv::FaceValues{dim}, x::AbstractVector{Vec{dim, T}}, face::Int) - n_geom_basefuncs = getnbasefunctions(getgeometryinterpolation(bv)) - n_func_basefuncs = getnbasefunctions(getfunctioninterpolation(bv)) +function reinit!{dim, T}(fv::FaceValues{dim}, x::AbstractVector{Vec{dim, T}}, face::Int) + n_geom_basefuncs = getnbasefunctions(getgeometryinterpolation(fv)) + n_func_basefuncs = getnbasefunctions(getfunctioninterpolation(fv)) @assert length(x) == n_geom_basefuncs - isa(bv, FaceVectorValues) && (n_func_basefuncs *= dim) + isa(fv, FaceVectorValues) && (n_func_basefuncs *= dim) - bv.current_face[] = face - cb = getcurrentface(bv) + fv.current_face[] = face + cb = getcurrentface(fv) - @inbounds for i in 1:length(getpoints(bv.quad_rule[cb])) - w = getweights(bv.quad_rule[cb])[i] - febv_J = zero(Tensor{2, dim}) + @inbounds for i in 1:length(getpoints(fv.quad_rule[cb])) + w = getweights(fv.quad_rule[cb])[i] + fefv_J = zero(Tensor{2, dim}) for j in 1:n_geom_basefuncs - febv_J += x[j] ⊗ bv.dMdξ[j, i, cb] + fefv_J += x[j] ⊗ fv.dMdξ[j, i, cb] end - detJ = detJ_face(febv_J, getgeometryinterpolation(bv), cb) + weight_norm = weighted_normal(fefv_J, getgeometryinterpolation(fv), cb) + fv.normals[i] = weight_norm / norm(weight_norm) + detJ = norm(weight_norm) + detJ > 0.0 || throw(ArgumentError("detJ is not positive: detJ = $(detJ)")) - bv.detJdV[i, cb] = detJ * w - Jinv = inv(febv_J) + fv.detJdV[i, cb] = detJ * w + Jinv = inv(fefv_J) for j in 1:n_func_basefuncs - bv.dNdx[j, i, cb] = bv.dNdξ[j, i, cb] ⋅ Jinv + fv.dNdx[j, i, cb] = fv.dNdξ[j, i, cb] ⋅ Jinv end end end @@ -197,18 +208,35 @@ end """ The current active face of the `FaceValues` type. - getcurrentface(bv::FaceValues) + getcurrentface(fv::FaceValues) ** Arguments ** -* `bv`: the `FaceValues` object +* `fv`: the `FaceValues` object ** Results ** * `::Int`: the current active face (from last `reinit!`). """ -getcurrentface(bv::FaceValues) = bv.current_face[] +getcurrentface(fv::FaceValues) = fv.current_face[] + +""" +The normal at the quadrature point `qp` for the active face of the `FaceValues` type. + + getnormal(fv::FaceValues, qp::Int) + +** Arguments ** + +* `fv`: the `FaceValues` object +* `qp`: the quadrature point + +** Results ** + +* `::Vec{dim}`: the normal of the current active face (from last `reinit!`). + +""" +getnormal(fv::FaceValues, qp::Int) = fv.normals[qp] """ The face number for a cell, typically used to get the face number which is needed diff --git a/src/Grid/grid_generators.jl b/src/Grid/grid_generators.jl index 8a106fcde1..91602a7681 100644 --- a/src/Grid/grid_generators.jl +++ b/src/Grid/grid_generators.jl @@ -113,7 +113,6 @@ function _generate_2d_nodes!(nodes, nx, ny, LL, LR, UR, UL) end end - function generate_grid{M, N, T}(C::Type{Cell{2,M,N}}, nel::NTuple{2, Int}, X::Vector{Vec{2, T}}) @assert length(X) == 4 generate_grid(C, nel, X[1], X[2], X[3], X[4]) diff --git a/src/JuAFEM.jl b/src/JuAFEM.jl index 591863a3e0..84d066dfab 100644 --- a/src/JuAFEM.jl +++ b/src/JuAFEM.jl @@ -21,7 +21,7 @@ export ScalarValues, VectorValues export reinit!, shape_value, shape_gradient, shape_symmetric_gradient, shape_divergence, getdetJdV, getquadrule, getfunctioninterpolation, getgeometryinterpolation, function_value, function_gradient, function_symmetric_gradient, function_divergence, spatial_coordinate -export getfacenumber +export getfacenumber, getnormal export Interpolation, getdim, getrefshape, getorder, getnbasefunctions, getnquadpoints export Lagrange, Serendipity, RefTetrahedron, RefCube export QuadratureRule, getweights, getpoints diff --git a/test/REQUIRE b/test/REQUIRE index 3f298e3c48..ea905d4c7a 100644 --- a/test/REQUIRE +++ b/test/REQUIRE @@ -1,7 +1,9 @@ ForwardDiff SHA -NBInclude Documenter +Rotations +# Notebooks +NBInclude TimerOutputs UnicodePlots KrylovMethods diff --git a/test/test_cellvalues.jl b/test/test_cellvalues.jl index a0ac1ed0b5..f52da9fecc 100644 --- a/test/test_cellvalues.jl +++ b/test/test_cellvalues.jl @@ -19,7 +19,7 @@ for (func_interpol, quad_rule) in ((Lagrange{1, RefCube, 1}(), QuadratureRule{1 fe_valtype == CellScalarValues && @test getnbasefunctions(cv) == n_basefuncs fe_valtype == CellVectorValues && @test getnbasefunctions(cv) == n_basefuncs * getdim(func_interpol) - x = valid_coordinates(func_interpol) + x, n = valid_coordinates_and_normals(func_interpol) reinit!(cv, x) # We test this by applying a given deformation gradient on all the nodes. diff --git a/test/test_facevalues.jl b/test/test_facevalues.jl index 164248dc66..6027bf9e69 100644 --- a/test/test_facevalues.jl +++ b/test/test_facevalues.jl @@ -1,5 +1,6 @@ @testset "FaceValues" begin -for (func_interpol, quad_rule) in ((Lagrange{1, RefCube, 1}(), QuadratureRule{0, RefCube}(2)), +for (func_interpol, quad_rule) in ( + (Lagrange{1, RefCube, 1}(), QuadratureRule{0, RefCube}(2)), (Lagrange{1, RefCube, 2}(), QuadratureRule{0, RefCube}(2)), (Lagrange{2, RefCube, 1}(), QuadratureRule{1, RefCube}(2)), (Lagrange{2, RefCube, 2}(), QuadratureRule{1, RefCube}(2)), @@ -7,22 +8,23 @@ for (func_interpol, quad_rule) in ((Lagrange{1, RefCube, 1}(), QuadratureRule{0 (Lagrange{2, RefTetrahedron, 2}(), QuadratureRule{1, RefTetrahedron}(2)), (Lagrange{3, RefCube, 1}(), QuadratureRule{2, RefCube}(2)), (Serendipity{2, RefCube, 2}(), QuadratureRule{1, RefCube}(2)), - (Lagrange{3, RefTetrahedron, 1}(), QuadratureRule{2, RefTetrahedron}(2))) + (Lagrange{3, RefTetrahedron, 1}(), QuadratureRule{2, RefTetrahedron}(2)) + ) - for fe_valtype in (FaceScalarValues, FaceVectorValues) - bv = fe_valtype(quad_rule, func_interpol) + for fe_valtype in (FaceScalarValues,) + fv = fe_valtype(quad_rule, func_interpol) ndim = getdim(func_interpol) n_basefuncs = getnbasefunctions(func_interpol) - fe_valtype == FaceScalarValues && @test getnbasefunctions(bv) == n_basefuncs - fe_valtype == FaceVectorValues && @test getnbasefunctions(bv) == n_basefuncs * getdim(func_interpol) + fe_valtype == FaceScalarValues && @test getnbasefunctions(fv) == n_basefuncs + fe_valtype == FaceVectorValues && @test getnbasefunctions(fv) == n_basefuncs * getdim(func_interpol) - x = valid_coordinates(func_interpol) + xs, n = valid_coordinates_and_normals(func_interpol) face_nodes, cell_nodes = topology_test_nodes(func_interpol) for face in 1:JuAFEM.getnfaces(func_interpol) - reinit!(bv, x, face) - face_quad_rule = getquadrule(bv) - @test JuAFEM.getcurrentface(bv) == face + reinit!(fv, xs, face) + face_quad_rule = getquadrule(fv) + @test JuAFEM.getcurrentface(fv) == face # We test this by applying a given deformation gradient on all the nodes. # Since this is a linear deformation we should get back the exact values @@ -32,50 +34,51 @@ for (func_interpol, quad_rule) in ((Lagrange{1, RefCube, 1}(), QuadratureRule{0 H = rand(Tensor{2, ndim}) V = rand(Tensor{1, ndim}) for i in 1:n_basefuncs - u[i] = H ⋅ x[i] - u_scal[i] = V ⋅ x[i] + u[i] = H ⋅ xs[i] + u_scal[i] = V ⋅ xs[i] end u_vector = reinterpret(Float64, u, (n_basefuncs*ndim,)) for i in 1:length(getpoints(face_quad_rule)) - @test function_gradient(bv, i, u) ≈ H - @test function_symmetric_gradient(bv, i, u) ≈ 0.5(H + H') - @test function_divergence(bv, i, u) ≈ trace(H) - function_value(bv, i, u) - if isa(bv, FaceScalarValues) - @test function_gradient(bv, i, u_scal) ≈ V - function_value(bv, i, u_scal) - elseif isa(bv, FaceVectorValues) - @test function_gradient(bv, i, u_vector) ≈ function_gradient(bv, i, u) ≈ H - @test function_value(bv, i, u_vector) ≈ function_value(bv, i, u) - @test function_divergence(bv, i, u_vector) ≈ function_divergence(bv, i, u) ≈ trace(H) + @test getnormal(fv, i) ≈ n[face] + @test function_gradient(fv, i, u) ≈ H + @test function_symmetric_gradient(fv, i, u) ≈ 0.5(H + H') + @test function_divergence(fv, i, u) ≈ trace(H) + function_value(fv, i, u) + if isa(fv, FaceScalarValues) + @test function_gradient(fv, i, u_scal) ≈ V + function_value(fv, i, u_scal) + elseif isa(fv, FaceVectorValues) + @test function_gradient(fv, i, u_vector) ≈ function_gradient(fv, i, u) ≈ H + @test function_value(fv, i, u_vector) ≈ function_value(fv, i, u) + @test function_divergence(fv, i, u_vector) ≈ function_divergence(fv, i, u) ≈ trace(H) end end # Test of volume vol = 0.0 - for i in 1:getnquadpoints(bv) - vol += getdetJdV(bv,i) + for i in 1:getnquadpoints(fv) + vol += getdetJdV(fv,i) end - x_face = x[[JuAFEM.getfacelist(func_interpol)[face]...]] + x_face = xs[[JuAFEM.getfacelist(func_interpol)[face]...]] @test vol ≈ calculate_volume(JuAFEM.getlowerdim(func_interpol), x_face) # Test of utility functions - @test getfunctioninterpolation(bv) == func_interpol - @test getgeometryinterpolation(bv) == func_interpol + @test getfunctioninterpolation(fv) == func_interpol + @test getgeometryinterpolation(fv) == func_interpol # Test quadrature rule after reinit! with ref. coords x = reference_coordinates(func_interpol) - reinit!(bv, x, face) + reinit!(fv, x, face) vol = 0.0 - for i in 1:getnquadpoints(bv) - vol += getdetJdV(bv, i) + for i in 1:getnquadpoints(fv) + vol += getdetJdV(fv, i) end @test vol ≈ reference_volume(func_interpol, face) # Test spatial coordinate (after reinit with ref.coords we should get back the quad_points) for (i, qp_x) in enumerate(getpoints(face_quad_rule)) - @test spatial_coordinate(bv, i, x) ≈ qp_x + @test spatial_coordinate(fv, i, x) ≈ qp_x end end diff --git a/test/test_utils.jl b/test/test_utils.jl index ded39ff6d1..6c7999e95a 100644 --- a/test/test_utils.jl +++ b/test/test_utils.jl @@ -10,9 +10,16 @@ reference_volume(fs::Interpolation, ::Int) = reference_volume(JuAFEM.getlowerdim reference_volume(fs::Interpolation{2, RefTetrahedron}, face::Int) = face == 1 ? sqrt(2) : 1.0 reference_volume(fs::Interpolation{3, RefTetrahedron}, face::Int) = face == 3 ? sqrt(2 * 1.5) / 2.0 : 0.5 -########################################## -# Coordinates for the reference elements # -########################################## +###################################################### +# Coordinates and normals for the reference elements # +###################################################### + +# Lagrange{1, RefCube} +function reference_normals(::Lagrange{1, RefCube}) + return [Vec{1, Float64}((-1.0,)), + Vec{1, Float64}(( 1.0,))] +end + function reference_coordinates(::Lagrange{1, RefCube, 1}) return [Vec{1, Float64}((-1.0,)), Vec{1, Float64}(( 1.0,))] @@ -24,6 +31,14 @@ function reference_coordinates(::Lagrange{1, RefCube, 2}) Vec{1, Float64}(( 0.0,))] end +# Lagrange{2, RefCube} +function reference_normals(::Lagrange{2, RefCube}) + return [Vec{2, Float64}(( 0.0, -1.0)), + Vec{2, Float64}(( 1.0, 0.0)), + Vec{2, Float64}(( 0.0, 1.0,)), + Vec{2, Float64}((-1.0, 0.0,))] +end + function reference_coordinates(::Lagrange{2, RefCube, 1}) return [Vec{2, Float64}((-1.0, -1.0)), Vec{2, Float64}(( 1.0, -1.0)), @@ -43,6 +58,14 @@ function reference_coordinates(::Lagrange{2, RefCube, 2}) Vec{2, Float64}(( 0.0, 0.0))] end + +# Lagrange{2, RefTetrahedron} +function reference_normals(::Lagrange{2, RefTetrahedron}) + return [Vec{2, Float64}((1/√2, 1/√2)), + Vec{2, Float64}((-1.0, 0.0)), + Vec{2, Float64}((0.0, -1.0))] +end + function reference_coordinates(::Lagrange{2, RefTetrahedron, 1}) return [Vec{2, Float64}((1.0, 0.0)), Vec{2, Float64}((0.0, 1.0)), @@ -58,6 +81,14 @@ function reference_coordinates(::Lagrange{2, RefTetrahedron, 2}) Vec{2, Float64}((0.5, 0.0))] end +# Lagrange{3, RefTetrahedron} +function reference_normals(::Lagrange{3, RefTetrahedron, 1}) + return [Vec{3, Float64}((0.0, 0.0, -1.0)), + Vec{3, Float64}((0.0 ,-1.0, 0.0)), + Vec{3, Float64}((1/√3, 1/√3, 1/√3)), + Vec{3, Float64}((-1.0, 0.0, 0.0))] +end + function reference_coordinates(::Lagrange{3, RefTetrahedron, 1}) return [Vec{3, Float64}((0.0, 0.0, 0.0)), Vec{3, Float64}((1.0, 0.0, 0.0)), @@ -65,6 +96,16 @@ function reference_coordinates(::Lagrange{3, RefTetrahedron, 1}) Vec{3, Float64}((0.0, 0.0, 1.0))] end +# Lagrange{3, Cube} +function reference_normals(::Lagrange{3, RefCube, 1}) + return [Vec{3, Float64}(( 0.0, 0.0, -1.0)), + Vec{3, Float64}(( 0.0, -1.0, 0.0)), + Vec{3, Float64}(( 1.0, 0.0, 0.0)), + Vec{3, Float64}(( 0.0, 1.0, 0.0)), + Vec{3, Float64}((-1.0, 0.0, 0.0)), + Vec{3, Float64}(( 0.0, 0.0, 1.0))] +end + function reference_coordinates(::Lagrange{3, RefCube, 1}) return [Vec{3, Float64}((-1.0, -1.0, -1.0)), Vec{3, Float64}(( 1.0, -1.0, -1.0)), @@ -76,6 +117,9 @@ function reference_coordinates(::Lagrange{3, RefCube, 1}) Vec{3, Float64}((-1.0, 1.0, 1.0))] end +# Serendipity{2, RefCube} +reference_normals(::Serendipity{2, RefCube, 2}) = reference_normals(Lagrange{2, RefCube,1}()) + function reference_coordinates(::Serendipity{2, RefCube, 2}) return [Vec{2, Float64}((-1.0, -1.0)), Vec{2, Float64}(( 1.0, -1.0)), @@ -99,17 +143,18 @@ function rotmat(dim, θ=π/6) R = Tensor{2,2}((cos(θ), sin(θ), -sin(θ), cos(θ))) return R else - u = Vec{3}((1.0, 2.0, 3.0)); u *= norm(u) + u = Vec{3}((1.0, 2.0, 3.0)); u /= norm(u) ux = Tensor{2,3}((0.0, u[3], -u[2], -u[3], 0.0, u[1], u[2], -u[1], 0.0)) R = cos(θ)*one(Tensor{2,3}) + sin(θ)*ux + (1-cos(θ))*u⊗u return R end end -function valid_coordinates{dim, shape, order}(fs::Interpolation{dim, shape, order}) +function valid_coordinates_and_normals{dim, shape, order}(fs::Interpolation{dim, shape, order}) x = reference_coordinates(fs) + n = reference_normals(fs) R = rotmat(dim) - return [2.0 * (R ⋅ x[i]) for i in 1:length(x)] + return [2.0 * (R ⋅ x[i]) for i in 1:length(x)] , [(R ⋅ n[i]) / norm((R ⋅ n[i])) for i in 1:length(n)] end ####################################### From a02a488966d64521635d6860089bb967a4a631de Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Sat, 25 Mar 2017 17:38:45 +0100 Subject: [PATCH 30/44] fix arguemnt order --- src/Grid/grid_generators.jl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Grid/grid_generators.jl b/src/Grid/grid_generators.jl index 91602a7681..a3597e10a7 100644 --- a/src/Grid/grid_generators.jl +++ b/src/Grid/grid_generators.jl @@ -113,6 +113,7 @@ function _generate_2d_nodes!(nodes, nx, ny, LL, LR, UR, UL) end end + function generate_grid{M, N, T}(C::Type{Cell{2,M,N}}, nel::NTuple{2, Int}, X::Vector{Vec{2, T}}) @assert length(X) == 4 generate_grid(C, nel, X[1], X[2], X[3], X[4]) @@ -123,7 +124,7 @@ function generate_grid{M, N, T}(C::Type{Cell{2,M,N}}, nel::NTuple{2, Int}, left: UR = right LR = Vec{2}((UR[1], LL[2])) UL = Vec{2}((LL[1], UR[2])) - generate_grid(C, nel, LL, UR, LR, UL) + generate_grid(C, nel, LL, LR, UR, UL) end # Quadrilateral From e060f518b9e0db2f8873d928ffc77abd83783deb Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Sat, 25 Mar 2017 17:58:48 +0100 Subject: [PATCH 31/44] remove grid in assemble function --- examples/heat_square.ipynb | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/examples/heat_square.ipynb b/examples/heat_square.ipynb index 3ac0afff95..e165ee0ab0 100644 --- a/examples/heat_square.ipynb +++ b/examples/heat_square.ipynb @@ -163,9 +163,7 @@ } ], "source": [ - "function doassemble{dim}(cellvalues::CellScalarValues{dim}, \n", - " K::SparseMatrixCSC, grid::Grid, dh::DofHandler)\n", - "\n", + "function doassemble{dim}(cellvalues::CellScalarValues{dim}, K::SparseMatrixCSC, dh::DofHandler)\n", " b = 1.0\n", " f = zeros(ndofs(dh))\n", " assembler = start_assemble(K, f)\n", @@ -185,11 +183,11 @@ " dΩ = getdetJdV(cellvalues, q_point)\n", " for i in 1:n_basefuncs\n", " δT = shape_value(cellvalues, q_point, i)\n", - " ∇δTi = shape_gradient(cellvalues, q_point, i)\n", + " ∇δT = shape_gradient(cellvalues, q_point, i)\n", " fe[i] += (δT * b) * dΩ\n", " for j in 1:n_basefuncs\n", - " ∇δTj = shape_gradient(cellvalues, q_point, j)\n", - " Ke[i, j] += (∇δTi ⋅ ∇δTj) * dΩ\n", + " ∇T = shape_gradient(cellvalues, q_point, j)\n", + " Ke[i, j] += (∇δT ⋅ ∇T) * dΩ\n", " end\n", " end\n", " end\n", @@ -209,12 +207,12 @@ }, "outputs": [], "source": [ - "K, f = doassemble(cellvalues, K, grid, dh);" + "K, f = doassemble(cellvalues, K, dh);" ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 9, "metadata": { "collapsed": false }, @@ -226,7 +224,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 10, "metadata": { "collapsed": false }, @@ -238,7 +236,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 11, "metadata": { "collapsed": false }, From b2fdfc88681f7f7d36c7039ab6899aabe16dfd8b Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Sat, 25 Mar 2017 21:33:36 +0100 Subject: [PATCH 32/44] add back test for vector valued faces --- test/test_facevalues.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_facevalues.jl b/test/test_facevalues.jl index 6027bf9e69..592905a5d1 100644 --- a/test/test_facevalues.jl +++ b/test/test_facevalues.jl @@ -11,7 +11,7 @@ for (func_interpol, quad_rule) in ( (Lagrange{3, RefTetrahedron, 1}(), QuadratureRule{2, RefTetrahedron}(2)) ) - for fe_valtype in (FaceScalarValues,) + for fe_valtype in (FaceScalarValues, FaceVectorValues) fv = fe_valtype(quad_rule, func_interpol) ndim = getdim(func_interpol) n_basefuncs = getnbasefunctions(func_interpol) From 6a95fbc23b742091f818351a0e88cffb7488c16f Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Sun, 26 Mar 2017 00:07:08 +0100 Subject: [PATCH 33/44] use a scalarwrapper which performs and infers better than Ref --- src/Dofs/DirichletBoundaryConditions.jl | 4 ++-- src/Dofs/DofHandler.jl | 4 ++-- src/FEValues/face_values.jl | 8 ++++---- src/JuAFEM.jl | 1 + src/iterators.jl | 12 ++++++------ src/utils.jl | 6 ++++++ 6 files changed, 21 insertions(+), 14 deletions(-) create mode 100644 src/utils.jl diff --git a/src/Dofs/DirichletBoundaryConditions.jl b/src/Dofs/DirichletBoundaryConditions.jl index d6d5df1684..0939ae97c2 100644 --- a/src/Dofs/DirichletBoundaryConditions.jl +++ b/src/Dofs/DirichletBoundaryConditions.jl @@ -56,12 +56,12 @@ immutable DirichletBoundaryConditions{DH <: DofHandler, T} free_dofs::Vector{Int} values::Vector{T} dh::DH - closed::Ref{Bool} + closed::ScalarWrapper{Bool} end function DirichletBoundaryConditions(dh::DofHandler) @assert isclosed(dh) - DirichletBoundaryConditions(DirichletBoundaryCondition[], Int[], Int[], Float64[], dh, Ref(false)) + DirichletBoundaryConditions(DirichletBoundaryCondition[], Int[], Int[], Float64[], dh, ScalarWrapper(false)) end function Base.show(io::IO, dbcs::DirichletBoundaryConditions) diff --git a/src/Dofs/DofHandler.jl b/src/Dofs/DofHandler.jl index b8f18ae6a9..5c4d625400 100644 --- a/src/Dofs/DofHandler.jl +++ b/src/Dofs/DofHandler.jl @@ -81,13 +81,13 @@ type DofHandler{dim, N, T, M} dofs_cells::Matrix{Int} # TODO <- Is this needed or just extract from dofs_nodes? field_names::Vector{Symbol} dof_dims::Vector{Int} - closed::Ref{Bool} + closed::ScalarWrapper{Bool} dofs_vec::Vector{Int} grid::Grid{dim, N, T, M} end function DofHandler(m::Grid) - DofHandler(Matrix{Int}(0, 0), Matrix{Int}(0, 0), Symbol[], Int[], Ref(false), Int[], m) + DofHandler(Matrix{Int}(0, 0), Matrix{Int}(0, 0), Symbol[], Int[], ScalarWrapper(false), Int[], m) end function show(io::IO, dh::DofHandler) diff --git a/src/FEValues/face_values.jl b/src/FEValues/face_values.jl index 6030cbb709..85462cbd26 100644 --- a/src/FEValues/face_values.jl +++ b/src/FEValues/face_values.jl @@ -58,7 +58,7 @@ immutable FaceScalarValues{dim, T <: Real, FIP <: Interpolation, GIP <: Interpol M::Array{T, 3} dMdξ::Array{Vec{dim, T}, 3} geom_interpol::GIP - current_face::Ref{Int} + current_face::ScalarWrapper{Int} end FaceScalarValues{dim_qr, FIP <: Interpolation, GIP <: Interpolation}(quad_rule::QuadratureRule{dim_qr}, func_interpol::FIP, geom_interpol::GIP=func_interpol) = @@ -100,7 +100,7 @@ function FaceScalarValues{dim_qr, T, FIP <: Interpolation, GIP <: Interpolation, detJdV = zeros(T, n_qpoints, n_faces) - FaceScalarValues(N, dNdx, dNdξ, detJdV, normals, face_quad_rule, func_interpol, M, dMdξ, geom_interpol, Ref(0)) + FaceScalarValues(N, dNdx, dNdξ, detJdV, normals, face_quad_rule, func_interpol, M, dMdξ, geom_interpol, ScalarWrapper(0)) end # FaceVectorValues @@ -115,7 +115,7 @@ immutable FaceVectorValues{dim, T <: Real, FIP <: Interpolation, GIP <: Interpol M::Array{T, 3} dMdξ::Array{Vec{dim, T}, 3} geom_interpol::GIP - current_face::Ref{Int} + current_face::ScalarWrapper{Int} end FaceVectorValues{dim_qr, FIP <: Interpolation, GIP <: Interpolation}(quad_rule::QuadratureRule{dim_qr}, func_interpol::FIP, geom_interpol::GIP=func_interpol) = @@ -174,7 +174,7 @@ function FaceVectorValues{dim_qr, T, FIP <: Interpolation, GIP <: Interpolation, detJdV = zeros(T, n_qpoints, n_faces) - FaceVectorValues(N, dNdx, dNdξ, detJdV, normals, face_quad_rule, func_interpol, M, dMdξ, geom_interpol, Ref(0)) + FaceVectorValues(N, dNdx, dNdξ, detJdV, normals, face_quad_rule, func_interpol, M, dMdξ, geom_interpol, ScalarWrapper(0)) end function reinit!{dim, T}(fv::FaceValues{dim}, x::AbstractVector{Vec{dim, T}}, face::Int) diff --git a/src/JuAFEM.jl b/src/JuAFEM.jl index 84d066dfab..8737b459d2 100644 --- a/src/JuAFEM.jl +++ b/src/JuAFEM.jl @@ -44,6 +44,7 @@ Abstract type which has `CellValues` and `FaceValues` as subtypes @compat abstract type CellValues{dim, T, FS, GS} <: Values{dim, T, FS, GS} end @compat abstract type FaceValues{dim, T, FS, GS} <: Values{dim, T, FS, GS} end +include("utils.jl") include("interpolations.jl") # Quadrature diff --git a/src/iterators.jl b/src/iterators.jl index b7b85db9bd..876febdfb2 100644 --- a/src/iterators.jl +++ b/src/iterators.jl @@ -24,20 +24,20 @@ immutable CellIterator{dim, N, T, M} grid::Grid{dim, N, T, M} nodes::Vector{Int} coords::Vector{Vec{dim, T}} - current_cellid::Ref{Int} + current_cellid::ScalarWrapper{Int} dh::DofHandler{dim, N, T, M} function CellIterator{dim, N, T, M}(dh::DofHandler{dim, N, T, M}) nodes = zeros(Int, N) coords = zeros(Vec{dim, T}, N) - cell = Ref(0) - return new(dh.grid, nodes, coords, Ref(0), dh) + cell = ScalarWrapper(0) + return new(dh.grid, nodes, coords,ScalarWrapper(0), dh) end function CellIterator{dim, N, T, M}(grid::Grid{dim, N, T, M}) nodes = zeros(Int, N) coords = zeros(Vec{dim, T}, N) - cell = Ref(0) + cell = ScalarWrapper(0) return new(grid, nodes, coords, cell) end end @@ -104,7 +104,7 @@ immutable FaceIterator{dim, N, T} nodes_face::Vector{Int} coords_cell::Vector{Vec{dim, T}} coords_face::Vector{Vec{dim, T}} - current_face::Ref{Int} + current_face::ScalarWrapper{Int} end function FaceIterator{dim, N, T}(grid::Grid{dim, N, T}) @@ -112,7 +112,7 @@ function FaceIterator{dim, N, T}(grid::Grid{dim, N, T}) n_vertices_face = length(getfacelist(grid)[1]) nodes_face = zeros(Int, n_vertices_face) coords_face = zeros(Vec{dim, T}, n_vertices_face) - return FaceIterator(grid, nodes_face, coords_cell, coords_face, Ref(1)) + return FaceIterator(grid, nodes_face, coords_cell, coords_face, ScalarWrapper(1)) end # iterator interface diff --git a/src/utils.jl b/src/utils.jl new file mode 100644 index 0000000000..29e3e8d2fa --- /dev/null +++ b/src/utils.jl @@ -0,0 +1,6 @@ +type ScalarWrapper{T} + x::T +end + +Base.getindex(s::ScalarWrapper) = s.x +Base.setindex!(s::ScalarWrapper, v) = s.x = v From d63bc032b77d3a384deb86334e1a82dafe1452ea Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Sun, 26 Mar 2017 00:07:18 +0100 Subject: [PATCH 34/44] add example for helmholtz equation --- examples/figures/helmholtz.png | Bin 0 -> 62769 bytes examples/helmholtz.ipynb | 317 +++++++++++++++++++++++++++++++++ test/test_notebooks.jl | 5 + 3 files changed, 322 insertions(+) create mode 100644 examples/figures/helmholtz.png create mode 100644 examples/helmholtz.ipynb diff --git a/examples/figures/helmholtz.png b/examples/figures/helmholtz.png new file mode 100644 index 0000000000000000000000000000000000000000..57d0e6fca5c5ba62f8d6b643c610707fe267dc9d GIT binary patch literal 62769 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