Skip to content
Snippets Groups Projects
Commit 576b9f12 authored by Stephan Hilb's avatar Stephan Hilb
Browse files

fix compilation problems because of ordering issues

parent 563f4f67
No related branches found
No related tags found
No related merge requests found
......@@ -226,13 +226,67 @@ function sample(f::FeFunction)
for I in CartesianIndex(I0[1], I0[2]):CartesianIndex(I1[1], I1[2])
if all(xloc .>= 0) && sum(xloc) <= 1
# eval point
# TODO: eval point
end
end
end
end
prolong!(new_f, old_cell, new_cells) =
prolong!(new_f, old_cell, new_cells, new_f.space.element)
prolong!(new_f, old_cell, new_cells, ::DP1) =
prolong!(new_f, old_cell, new_cells, P1())
function prolong!(new_f, old_cell, new_cells, ::P1)
old_f = new_f
old_cell_vs = collect(vertices(old_f.space.mesh, old_cell))
new_cell1_vs = collect(vertices(new_f.space.mesh, new_cells[1]))
new_cell2_vs = collect(vertices(new_f.space.mesh, new_cells[2]))
# copy over data for common vertices
common_vs = intersect(old_cell_vs, new_cell1_vs)
old_ldofs = indexin(common_vs, old_cell_vs)
old_gdofs = old_f.space.dofmap[:, old_ldofs, old_cell]
new_ldofs = indexin(common_vs, new_cell1_vs)
new_gdofs = new_f.space.dofmap[:, new_ldofs, new_cells[1]]
new_f.data[new_gdofs] .= old_f.data[old_gdofs]
common_vs = intersect(old_cell_vs, new_cell2_vs)
old_ldofs = indexin(common_vs, old_cell_vs)
old_gdofs = old_f.space.dofmap[:, old_ldofs, old_cell]
new_ldofs = indexin(common_vs, new_cell2_vs)
new_gdofs = new_f.space.dofmap[:, new_ldofs, new_cells[2]]
new_f.data[new_gdofs] .= old_f.data[old_gdofs]
# vertices of bisection edge
avg_vs = symdiff(new_cell1_vs, new_cell2_vs)
old_ldofs = indexin(avg_vs, old_cell_vs)
old_gdofs = old_f.space.dofmap[:, old_ldofs, old_cell]
avg_data = (old_f.data[old_gdofs[:, 1]] .+ old_f.data[old_gdofs[:, 2]]) ./ 2
_, newldof = findmax(new_cell1_vs)
new_gdofs = new_f.space.dofmap[:, newldof, new_cells[1]]
new_f.data[new_gdofs] .= avg_data
_, newldof = findmax(new_cell2_vs)
new_gdofs = new_f.space.dofmap[:, newldof, new_cells[2]]
new_f.data[new_gdofs] .= avg_data
end
function prolong!(new_f, old_cell, new_cells, ::DP0)
old_f = new_f
# simply copy over the data
old_gdofs = old_f.space.dofmap[:, 1, old_cell]
new_gdofs = new_f.space.dofmap[:, 1, new_cells[1]]
new_f.data[new_gdofs] .= old_f.data[old_gdofs]
new_gdofs = new_f.space.dofmap[:, 1, new_cells[2]]
new_f.data[new_gdofs] .= old_f.data[old_gdofs]
end
vtk_append!(vtkfile, f::FeFunction, fs::FeFunction...) =
(vtk_append!(vtkfile, f); vtk_append!(vtkfile, fs...))
......
......@@ -9,20 +9,6 @@ struct HMesh
levels::Vector{Int}
end
function HMesh(mesh::Mesh)
vertices = Vector{SVector{2, Float64}}()
for v in axes(mesh.vertices, 2)
push!(vertices, mesh.vertices[:, v])
end
cells = Vector{NTuple{3, Int}}()
for c in axes(mesh.cells, 2)
push!(cells, NTuple{3}(mesh.cells[:, c]))
end
levels = zeros(Int, axes(cells))
return HMesh(vertices, cells, levels)
end
Base.show(io::IO, ::MIME"text/plain", x::HMesh) =
print("$(nameof(typeof(x))), $(ncells(x)) cells")
......@@ -74,6 +60,21 @@ struct Mesh
cells::Array{Int, 2}
end
# needs to be after Mesh definition
function HMesh(mesh::Mesh)
vertices = Vector{SVector{2, Float64}}()
for v in axes(mesh.vertices, 2)
push!(vertices, mesh.vertices[:, v])
end
cells = Vector{NTuple{3, Int}}()
for c in axes(mesh.cells, 2)
push!(cells, NTuple{3}(mesh.cells[:, c]))
end
levels = zeros(Int, axes(cells))
return HMesh(vertices, cells, levels)
end
Base.show(io::IO, ::MIME"text/plain", x::Mesh) =
print("$(nameof(typeof(x))), $(ncells(x)) cells")
......@@ -309,60 +310,6 @@ function refine!(hmesh::HMesh, marked_cells::Set; fs...)
return new_fs
end
prolong!(new_f, old_cell, new_cells) =
prolong!(new_f, old_cell, new_cells, new_f.space.element)
prolong!(new_f, old_cell, new_cells, ::DP1) =
prolong!(new_f, old_cell, new_cells, P1())
function prolong!(new_f, old_cell, new_cells, ::P1)
old_f = new_f
old_cell_vs = collect(vertices(old_f.space.mesh, old_cell))
new_cell1_vs = collect(vertices(new_f.space.mesh, new_cells[1]))
new_cell2_vs = collect(vertices(new_f.space.mesh, new_cells[2]))
# copy over data for common vertices
common_vs = intersect(old_cell_vs, new_cell1_vs)
old_ldofs = indexin(common_vs, old_cell_vs)
old_gdofs = old_f.space.dofmap[:, old_ldofs, old_cell]
new_ldofs = indexin(common_vs, new_cell1_vs)
new_gdofs = new_f.space.dofmap[:, new_ldofs, new_cells[1]]
new_f.data[new_gdofs] .= old_f.data[old_gdofs]
common_vs = intersect(old_cell_vs, new_cell2_vs)
old_ldofs = indexin(common_vs, old_cell_vs)
old_gdofs = old_f.space.dofmap[:, old_ldofs, old_cell]
new_ldofs = indexin(common_vs, new_cell2_vs)
new_gdofs = new_f.space.dofmap[:, new_ldofs, new_cells[2]]
new_f.data[new_gdofs] .= old_f.data[old_gdofs]
# vertices of bisection edge
avg_vs = symdiff(new_cell1_vs, new_cell2_vs)
old_ldofs = indexin(avg_vs, old_cell_vs)
old_gdofs = old_f.space.dofmap[:, old_ldofs, old_cell]
avg_data = (old_f.data[old_gdofs[:, 1]] .+ old_f.data[old_gdofs[:, 2]]) ./ 2
_, newldof = findmax(new_cell1_vs)
new_gdofs = new_f.space.dofmap[:, newldof, new_cells[1]]
new_f.data[new_gdofs] .= avg_data
_, newldof = findmax(new_cell2_vs)
new_gdofs = new_f.space.dofmap[:, newldof, new_cells[2]]
new_f.data[new_gdofs] .= avg_data
end
function prolong!(new_f, old_cell, new_cells, ::DP0)
old_f = new_f
# simply copy over the data
old_gdofs = old_f.space.dofmap[:, 1, old_cell]
new_gdofs = new_f.space.dofmap[:, 1, new_cells[1]]
new_f.data[new_gdofs] .= old_f.data[old_gdofs]
new_gdofs = new_f.space.dofmap[:, 1, new_cells[2]]
new_f.data[new_gdofs] .= old_f.data[old_gdofs]
end
#function cell_contains(mesh, cell, v)
# geo = mesh.vertices[:, mesh.cells[:, cell]]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment