trixi-framework / Trixi.jl

Trixi.jl: Adaptive high-order numerical simulations of conservation laws in Julia
https://trixi-framework.github.io/Trixi.jl
MIT License
523 stars 102 forks source link

Unify signatures of mesh constructors #1194

Open ranocha opened 2 years ago

ranocha commented 2 years ago

It may be nice to unify the signatures of some mesh constructors or provide additional convenience constructors. This can be nice when testing different meshes, e.g., for #1191. Right now, we have

julia> TreeMesh(

TreeMesh(coordinates_min::Real, coordinates_max::Real; kwargs...) in Trixi at /home/hendrik/.julia/dev/Trixi/src/meshes/tree_mesh.jl:161
TreeMesh(coordinates_min::Tuple{Vararg{Real, NDIMS}}, coordinates_max::Tuple{Vararg{Real, NDIMS}}; n_cells_max, periodicity, initial_refinement_level, refinement_patches, coarsening_patches) where NDIMS in Trixi at /home/hendrik/.julia/dev/Trixi/src/meshes/tree_mesh.jl:93
TreeMesh(::Type{TreeType}, args...) where {NDIMS, TreeType<:Trixi.AbstractTree{NDIMS}} in Trixi at /home/hendrik/.julia/dev/Trixi/src/meshes/tree_mesh.jl:80

julia> StructuredMesh(

StructuredMesh(cells_per_dimension, faces::Tuple; RealT, periodicity) in Trixi at /home/hendrik/.julia/dev/Trixi/src/meshes/structured_mesh.jl:86
StructuredMesh(cells_per_dimension, mapping; RealT, periodicity, unsaved_changes, mapping_as_string) in Trixi at /home/hendrik/.julia/dev/Trixi/src/meshes/structured_mesh.jl:47
StructuredMesh(cells_per_dimension, coordinates_min, coordinates_max; periodicity) in Trixi at /home/hendrik/.julia/dev/Trixi/src/meshes/structured_mesh.jl:120

julia> P4estMesh(

P4estMesh(trees_per_dimension; polydeg, mapping, faces, coordinates_min, coordinates_max, RealT, initial_refinement_level, periodicity, unsaved_changes) in Trixi at /home/hendrik/.julia/dev/Trixi/src/meshes/p4est_mesh.jl:146

For example, it wold be nice to just replace TreeMesh by StructuredMesh or P4estMesh and get something that just works.

jlchan commented 1 year ago

Bumping to add that we should do the same for DGMultiMesh constructors. For example, cells_per_dimension is a keyword argument here

    DGMultiMesh(dg::DGMulti; cells_per_dimension,
                coordinates_min=(-1.0, -1.0), coordinates_max=(1.0, 1.0),
                is_on_boundary=nothing,
                periodicity=ntuple(_ -> false, NDIMS))

but not for the StructuredMesh equivalent

    DGMultiMesh(dg::DGMulti{NDIMS}, cells_per_dimension, mapping;
                is_on_boundary=nothing,
                periodicity=ntuple(_ -> false, NDIMS), kwargs...) where {NDIMS}
ranocha commented 1 year ago

Yes, it would definitely be great to unify these :+1:

DanielDoehring commented 8 months ago

I agree, I also do not like that for P4est meshes we explicitly supply the dimensionality as a type (not sure if this is the correct Julian term), i.e., P4estMesh{2} while for TreeMesh, StructuredMesh and DGMultiMesh the dimensionality is inferred from the arguments while again for the unstructured 2d mesh the constructor reads UnstructuredMesh2D.