Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Convert domain_descriptors into a struct #2

Open
wants to merge 1 commit into
base: cleanup
Choose a base branch
from
Open

Conversation

APJansen
Copy link

This is an example of the type of refactorings I think must be done, here on a small scale focussing on the domain_descriptors that was passed around everywhere.
The important part of this refactor is copied here for convenience, all other changes are just so that they become compatible with this structure.

I have rewritten the tuple as a struct, which contains other structs. I think this is useful on its own, it makes it a lot more readable, and after doing this it also becomes clearer that many functions actually don't need the whole domain_descriptors but only a few parts.

But more importantly this is I think something we should do at a large scale, that is, create a type for a closure model, and for an equation, and for a solver, etc. Finding the best way to decompose things in this way is not easy and will require probably several iterations (what I did for the DomainDescriptors can certainly be improved), but I think this is the core of what we should do to make everything modular, and possibly compatible with SciML.

"""
General type for triples of types, one for the fine grid, one for the coarse grid and one for the reference grid.
"""
struct Triplet{T}
    coarse::T
    fine::T
    reference::T
end

Grid = Vector{Float64}
Volume = Matrix{Float64}
InnerProduct = Function
Integrator = Function

struct DomainDescriptors
    b::Float64
    interpolation_matrix::SparseMatrixCSC{Float64,Int}
    N::Int
    I::Int
    J::Int
    W::SparseMatrixCSC{Float64,Int}
    R::SparseMatrixCSC{Float64,Int}
    grids::Triplet{Grid}
    volumes::Triplet{Volume}
    inner_products::Triplet{InnerProduct}
    integrators::Triplet{Integrator}
end

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants