Skip to content

Commit

Permalink
More boundary markers for ring generators (#84)
Browse files Browse the repository at this point in the history
  • Loading branch information
termi-official authored Feb 6, 2024
1 parent 8c866af commit 03faea2
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 12 deletions.
20 changes: 12 additions & 8 deletions examples/ring.jl
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,12 @@ function solve_test_ring(name_base, constitutive_model, grid, cs, face_models, i
StructuralModel(constitutive_model, face_models),
FiniteElementDiscretization(
Dict(:displacement => ip_mech),
[Dirichlet(:displacement, getfaceset(grid, "Myocardium"), (x,t) -> [0.0], [3])]
[
Dirichlet(:displacement, getnodeset(grid, "MyocardialAnchor1"), (x,t) -> (0.0, 0.0, 0.0), [1,2,3]),
Dirichlet(:displacement, getnodeset(grid, "MyocardialAnchor2"), (x,t) -> (0.0, 0.0), [2,3]),
Dirichlet(:displacement, getnodeset(grid, "MyocardialAnchor3"), (x,t) -> (0.0,), [3]),
Dirichlet(:displacement, getnodeset(grid, "MyocardialAnchor4"), (x,t) -> (0.0,), [3])
]
),
grid
)
Expand Down Expand Up @@ -191,10 +196,9 @@ for (name, order, ring_grid) ∈ [
("Quadratic-Ring", 2, Thunderbolt.generate_quadratic_ring_mesh(20,4,4))
]

intorder = 2*order
qr_collection = QuadratureRuleCollection(intorder-1)
qr_collection = QuadratureRuleCollection(2*order-1)

ip_fsn = LagrangeCollection{order}()^3
ip_fsn = LagrangeCollection{1}()^3
ip_u = LagrangeCollection{order}()^3

ring_cs = compute_midmyocardial_section_coordinate_system(ring_grid)
Expand All @@ -207,16 +211,16 @@ solve_test_ring(name,
CoordinateSystemCoefficient(ring_cs)
)),
create_simple_microstructure_model(ring_cs, ip_fsn,
endo_helix_angle = deg2rad(0.0),
epi_helix_angle = deg2rad(0.0),
endo_helix_angle = deg2rad(-60.0),
epi_helix_angle = deg2rad(60.0),
endo_transversal_angle = 0.0,
epi_transversal_angle = 0.0,
sheetlet_pseudo_angle = deg2rad(0)
)
), ring_grid, ring_cs,
[NormalSpringBC(0.01, "Epicardium")],
[],
ip_u, qr_collection,
100.0
10.0
)

end
32 changes: 28 additions & 4 deletions src/mesh/generators.jl
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,13 @@ function generate_ring_mesh(num_elements_circumferential::Int, num_elements_radi
facesets["Epicardium"] = Set{FaceIndex}(boundary[(1:length(cell_array[:,end,:][:])) .+ offset]); offset += length(cell_array[:,end,:][:])
facesets["Base"] = Set{FaceIndex}(boundary[(1:length(cell_array[:,:,end][:])) .+ offset]); offset += length(cell_array[:,:,end][:])

return Grid(cells, nodes, facesets=facesets)
nodesets = Dict{String,Set{Int}}()
nodesets["MyocardialAnchor1"] = Set{Int}([node_array[1,1,1]])
nodesets["MyocardialAnchor2"] = Set{Int}([node_array[1,end,1]])
nodesets["MyocardialAnchor3"] = Set{Int}([node_array[ceil(Int,1+n_nodes_c/4),1,1]])
nodesets["MyocardialAnchor4"] = Set{Int}([node_array[ceil(Int,1+3*n_nodes_c/4),1,1]])

return Grid(cells, nodes, facesets=facesets, nodesets=nodesets)
end


Expand Down Expand Up @@ -109,7 +115,13 @@ function generate_open_ring_mesh(num_elements_circumferential::Int, num_elements
facesets["Open2"] = Set{FaceIndex}(boundary[(1:length(cell_array[1,:,:][:])) .+ offset]); offset += length(cell_array[1,:,:][:])
facesets["Base"] = Set{FaceIndex}(boundary[(1:length(cell_array[:,:,end][:])) .+ offset]); offset += length(cell_array[:,:,end][:])

return Grid(cells, nodes, facesets=facesets)
nodesets = Dict{String,Set{Int}}()
nodesets["MyocardialAnchor1"] = Set{Int}([node_array[1,1,1]])
nodesets["MyocardialAnchor2"] = Set{Int}([node_array[1,end,1]])
nodesets["MyocardialAnchor3"] = Set{Int}([node_array[ceil(Int,1+n_nodes_c/4),1,1]])
nodesets["MyocardialAnchor4"] = Set{Int}([node_array[ceil(Int,1+3*n_nodes_c/4),1,1]])

return Grid(cells, nodes, facesets=facesets, nodesets=nodesets)
end


Expand Down Expand Up @@ -179,7 +191,13 @@ function generate_quadratic_ring_mesh(num_elements_circumferential::Int, num_ele
facesets["Epicardium"] = Set{FaceIndex}(boundary[(1:length(cell_array[:,end,:][:])) .+ offset]); offset += length(cell_array[:,end,:][:])
facesets["Base"] = Set{FaceIndex}(boundary[(1:length(cell_array[:,:,end][:])) .+ offset]); offset += length(cell_array[:,:,end][:])

return Grid(cells, nodes, facesets=facesets)
nodesets = Dict{String,Set{Int}}()
nodesets["MyocardialAnchor1"] = Set{Int}([node_array[1,1,1]])
nodesets["MyocardialAnchor2"] = Set{Int}([node_array[1,end,1]])
nodesets["MyocardialAnchor3"] = Set{Int}([node_array[ceil(Int,1+n_nodes_c/4),1,1]])
nodesets["MyocardialAnchor4"] = Set{Int}([node_array[ceil(Int,1+3*n_nodes_c/4),1,1]])

return Grid(cells, nodes, facesets=facesets, nodesets=nodesets)
end


Expand Down Expand Up @@ -245,7 +263,13 @@ function generate_quadratic_open_ring_mesh(num_elements_circumferential::Int, nu
facesets["Epicardium"] = Set{FaceIndex}(boundary[(1:length(cell_array[:,end,:][:])) .+ offset]); offset += length(cell_array[:,end,:][:])
facesets["Base"] = Set{FaceIndex}(boundary[(1:length(cell_array[:,:,end][:])) .+ offset]); offset += length(cell_array[:,:,end][:])

return Grid(cells, nodes, facesets=facesets)
nodesets = Dict{String,Set{Int}}()
nodesets["MyocardialAnchor1"] = Set{Int}([node_array[1,1,1]])
nodesets["MyocardialAnchor2"] = Set{Int}([node_array[1,end,1]])
nodesets["MyocardialAnchor3"] = Set{Int}([node_array[ceil(Int,1+n_nodes_c/4),1,1]])
nodesets["MyocardialAnchor4"] = Set{Int}([node_array[ceil(Int,1+3*n_nodes_c/4),1,1]])

return Grid(cells, nodes, facesets=facesets, nodesets=nodesets)
end


Expand Down

0 comments on commit 03faea2

Please sign in to comment.