Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions docs/src/man/solver/solver.md
Original file line number Diff line number Diff line change
Expand Up @@ -142,3 +142,21 @@ If model reduction
| ---------------- | ------------- | -------- | ------------------------------------------------------------------------- |
| Type | String | No | Defines the type of model redction (Static Condensationn) |
| Redcution Blocks | String or Int | No | Defines the blocks to be condensed; defintion are (4 or 1 2 4 or 1, 2, 4) |


## Computational effort

A single-core performance comparison between the matrix-based solver
and the Verlet integrator for varying discretizations and horizon ratios $m =
\delta/\Delta x$ is shown in the table. All times in seconds. The sparsity pattern is a one-time preprocessing
cost and is excluded from the per-step effort in the last column. For the updated matrix algorithm this leads to a more efficient process. It was computed with v2.01

| Points | m | Assembly (s) | Solve (s) | Pattern (s) | Verlet (s) | Effort ratio incl. Pattern (−) | Effort ratio excl. Pattern (−) |
|--------:|---:|-------------:|----------:|------------:|-----------:|-------------------------------:|-------------------------------:|
| 160,801 | 2 | 3.10 | 19.60 | 3.83 | 0.234 | 113.4 | 97.0 |
| 40,401 | 2 | 0.80 | 4.23 | 1.00 | 0.040 | 150.8 | 125.8 |
| | 3 | 4.00 | 9.16 | 3.64 | 0.108 | 155.6 | 121.9 |
| | 4 | 12.30 | 19.80 | 8.56 | 0.129 | 315.2 | 248.8 |
| 10,201 | 2 | 0.19 | 0.52 | 0.15 | 0.012 | 71.7 | 59.2 |
| | 3 | 0.90 | 1.81 | 1.95 | 0.020 | 233.0 | 135.5 |
| | 4 | 2.98 | 2.31 | 2.50 | 0.071 | 109.7 | 74.5 |
29 changes: 14 additions & 15 deletions src/Core/Data_manager/data_manager_fields.jl
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ Returns the field with the given name and time.
- `field::Field`: The field with the given name and time.
"""
function get_field(name::String, time::String = "Constant")
@assert !occursin("NP1", name)
if time == "Constant"
return _get_field(name)
elseif time == "N"
Expand Down Expand Up @@ -130,8 +129,8 @@ function create_node_scalar_field(name::String, vartype::Type{T};
Bool}}
set_NP1_to_N(name, vartype)

return _create_node_scalar_field(name * "N", T(default_value)),
_create_node_scalar_field(name * "NP1", T(default_value))
return _create_node_scalar_field(data["NP1_to_N"][name].N, T(default_value)),
_create_node_scalar_field(data["NP1_to_N"][name].NP1, T(default_value))
end

function create_constant_node_vector_field(name::String, vartype::Type{T}, dof::Int64;
Expand All @@ -146,8 +145,8 @@ function create_node_vector_field(name::String, vartype::Type{T}, dof::Int64;
Bool}}
set_NP1_to_N(name, vartype)

return _create_node_vector_field(name * "N", T(default_value), dof),
_create_node_vector_field(name * "NP1", T(default_value), dof)
return _create_node_vector_field(data["NP1_to_N"][name].N, T(default_value), dof),
_create_node_vector_field(data["NP1_to_N"][name].NP1, T(default_value), dof)
end

function create_constant_node_tensor_field(name::String, vartype::Type{T}, dof::Int64;
Expand All @@ -162,8 +161,8 @@ function create_node_tensor_field(name::String, vartype::Type{T}, dof::Int64;
Bool}}
set_NP1_to_N(name, vartype)

return _create_node_tensor_field(name * "N", T(default_value), dof),
_create_node_tensor_field(name * "NP1", T(default_value), dof)
return _create_node_tensor_field(data["NP1_to_N"][name].N, T(default_value), dof),
_create_node_tensor_field(data["NP1_to_N"][name].NP1, T(default_value), dof)
end

function create_constant_bond_scalar_state(name::String, vartype::Type{T};
Expand All @@ -178,8 +177,8 @@ function create_bond_scalar_state(name::String, vartype::Type{T};
Bool}}
set_NP1_to_N(name, vartype)

return _create_bond_scalar_state(name * "N", T(default_value)),
_create_bond_scalar_state(name * "NP1", T(default_value))
return _create_bond_scalar_state(data["NP1_to_N"][name].N, T(default_value)),
_create_bond_scalar_state(data["NP1_to_N"][name].NP1, T(default_value))
end

function create_constant_bond_vector_state(name::String, vartype::Type{T}, dof::Int64;
Expand All @@ -194,8 +193,8 @@ function create_bond_vector_state(name::String, vartype::Type{T}, dof::Int64;
Bool}}
set_NP1_to_N(name, vartype)

return _create_bond_vector_state(name * "N", T(default_value), dof),
_create_bond_vector_state(name * "NP1", T(default_value), dof)
return _create_bond_vector_state(data["NP1_to_N"][name].N, T(default_value), dof),
_create_bond_vector_state(data["NP1_to_N"][name].NP1, T(default_value), dof)
end

function create_constant_bond_tensor_state(name::String, vartype::Type{T}, dof::Int64;
Expand All @@ -210,8 +209,8 @@ function create_bond_tensor_state(name::String, vartype::Type{T}, dof::Int64;
Bool}}
set_NP1_to_N(name, vartype)

return _create_bond_tensor_state(name * "N", T(default_value), dof),
_create_bond_tensor_state(name * "NP1", T(default_value), dof)
return _create_bond_tensor_state(data["NP1_to_N"][name].N, T(default_value), dof),
_create_bond_tensor_state(data["NP1_to_N"][name].NP1, T(default_value), dof)
end

function create_constant_element_vector_field(name::String, vartype::Type{T}, dof::Int64;
Expand All @@ -232,8 +231,8 @@ function create_free_size_field(name::String, vartype::Type{T}, dof::Tuple;
Bool}}
set_NP1_to_N(name, vartype)

return _create_free_size_field(name * "N", T(default_value), dof),
_create_free_size_field(name * "NP1", T(default_value), dof)
return _create_free_size_field(data["NP1_to_N"][name].N, T(default_value), dof),
_create_free_size_field(data["NP1_to_N"][name].NP1, T(default_value), dof)
end

function create_field!(name::String, _data, field_type::String)
Expand Down
6 changes: 5 additions & 1 deletion src/Core/Data_manager/data_manager_solving_process.jl
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ Sets the NP1_to_N dataset
- `type`::Type The field type
"""
function set_NP1_to_N(name::String, ::Type{T}) where {T<:Union{Float64,Bool,Int64}}
if !has_key(name)
if !has_key(name * "N")
data["NP1_to_N"][name] = NP1_to_N(name * "N", name * "NP1", zero(T))
end
end
Expand All @@ -36,6 +36,10 @@ end

@inline function _fill_field_barrier(field_NP1, active::Vector{Bool},
np1_to_n::NP1_to_N{T}) where {T}
if isnothing(field_NP1)
@error "Field $(np1_to_n.NP1) not found. Cannot fill NP1 field from N."
return
end
fill_field!(field_NP1, active, np1_to_n.value)
end

Expand Down
Loading