feat(Grid): add domain values as optional arguments

[skip ci]
This commit is contained in:
nebmit 2024-03-12 15:04:38 +01:00
parent 65a16cac1c
commit 6a98a23439
No known key found for this signature in database

View File

@ -12,11 +12,11 @@ Represents a computational grid with concentration values and alpha coefficients
It can be either 1D or 2D and includes dimensions, domain sizes, delta values, and matrices for concentrations and alpha coefficients.
# Fields
- `cols::Int`: Number of columns in the grid.
- `rows::Int`: Number of rows in the grid.
- `cols::Int`: Number of columns in the grid.
- `dim::Int`: Dimension of the grid (1 for 1D, 2 for 2D).
- `domainCol::T`, `domainRow::T`: Size of the grid's domain in column and row direction.
- `deltaCol::T`, `deltaRow::T`: Delta values for columns and rows.
- `domainRow::T`, `domainCol::T`: Size of the grid's domain in column and row direction.
- `deltaRow::T`, `deltaCol::T`: Delta values for columns and rows.
- `concentrations::Ref{Matrix{T}}`: Reference to the matrix holding concentration values.
- `alphaX::Ref{Matrix{T}}`: Reference to the matrix of alpha coefficients in the X direction.
- `alphaY::Union{Ref{Matrix{T}},Nothing}`: Reference to the matrix of alpha coefficients in the Y direction (if applicable).
@ -25,23 +25,31 @@ It can be either 1D or 2D and includes dimensions, domain sizes, delta values, a
# Constructors
- `Grid(length, alphaX)` creates a 1D grid with the given length and alphaX matrix.
- `Grid(rows, cols, alphaX, alphaY)` creates a 2D grid with the given rows, columns, and alphaX and alphaY matrices.
- `Grid(rows, cols, dim, domainCol, domainRow, deltaCol, deltaRow, concentrations, alphaX, alphaY, alphaX_t, alphaY_t)` creates a grid with the given parameters.
- `Grid(rows, cols, dim, domainRow, domainCol, deltaRow, deltaCol, concentrations, alphaX, alphaY, alphaX_t, alphaY_t)` creates a grid with the given parameters.
"""
struct Grid{T}
cols::Int
rows::Int
cols::Int
dim::Int
domainCol::T
domainRow::T
deltaCol::T
domainCol::T
deltaRow::T
deltaCol::T
concentrations::Matrix{T}
alphaX::Matrix{T}
alphaY::Union{Matrix{T},Nothing}
alphaX_t::Matrix{T}
alphaY_t::Union{Matrix{T},Nothing}
function Grid{T}(length::Int, alphaX::Matrix{T})::Grid{T} where {T}
function Grid{T}(
length::Int,
alphaX::Matrix{T};
domainLength::T = T(-1),
)::Grid{T} where {T}
if domainLength < 0
domainLength = T(length)
end
if length <= 3
throw(ArgumentError("Given grid length too small. Must be greater than 3."))
end
@ -56,13 +64,13 @@ struct Grid{T}
alphaX_t = alphaX'
new{T}(
1,
length,
1,
1,
T(length),
0,
T(1),
T(domainLength),
0,
T(domainLength / length),
fill(T(0), 1, length),
alphaX,
nothing,
@ -75,8 +83,17 @@ struct Grid{T}
rows::Int,
cols::Int,
alphaX::Matrix{T},
alphaY::Matrix{T},
alphaY::Matrix{T};
domainRow::T = T(-1),
domainCol::T = T(-1),
)::Grid{T} where {T}
if domainRow < 0
domainRow = T(rows)
end
if domainCol < 0
domainCol = T(cols)
end
if rows <= 3 || cols <= 3
throw(
ArgumentError(
@ -96,13 +113,13 @@ struct Grid{T}
alphaY_t = alphaY'
new{T}(
cols,
rows,
cols,
2,
T(cols),
T(rows),
T(1),
T(1),
T(domainRow),
T(domainCol),
T(domainRow / rows),
T(domainCol / cols),
fill(T(0), rows, cols),
alphaX,
alphaY,
@ -115,10 +132,10 @@ struct Grid{T}
rows::Int,
cols::Int,
dim::Int,
domainCol::T,
domainRow::T,
deltaCol::T,
domainCol::T,
deltaRow::T,
deltaCol::T,
concentrations::Matrix{T},
alphaX::Matrix{T},
alphaY::Union{Matrix{T},Nothing},
@ -126,13 +143,13 @@ struct Grid{T}
alphaY_t::Union{Matrix{T},Nothing},
)::Grid{T} where {T}
new{T}(
cols,
rows,
cols,
dim,
domainCol,
domainRow,
deltaCol,
domainCol,
deltaRow,
deltaCol,
concentrations,
alphaX,
alphaY,
@ -160,10 +177,10 @@ function clone(grid::Grid{T})::Grid{T} where {T}
1,
grid.cols,
grid.dim,
grid.domainCol,
grid.domainRow,
grid.deltaCol,
grid.domainCol,
grid.deltaRow,
grid.deltaCol,
copy(grid.concentrations),
copy(grid.alphaX),
nothing,
@ -175,10 +192,10 @@ function clone(grid::Grid{T})::Grid{T} where {T}
grid.rows,
grid.cols,
grid.dim,
grid.domainCol,
grid.domainRow,
grid.deltaCol,
grid.domainCol,
grid.deltaRow,
grid.deltaCol,
copy(grid.concentrations),
copy(grid.alphaX),
copy(grid.alphaY),