-
Notifications
You must be signed in to change notification settings - Fork 104
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Initial support for P4estMesh (#593)
* Implement P4estMesh with periodic boundaries in 2D (#578) * Add P4estMesh and implement unstructured calc_interface_flux! * Comment indexfunction_reduced * Save cell geometry in interpolation nodes instead of a mapping function * Use P4est to compute node coordinates * Extract interface information from p4est * Make indexfunction_surface type stable * Downgrade P4est_jll to 2.2 * Add P4est_jll as dependency * Update Project.toml * Update Project.toml * Fix node_coordinates interpolation * Add kwarg initial_refinement_level * Add documentation of P4estMesh * Remove trees_per_dimension to make P4estMesh truly unstructured * Add proper show function * Remove P4est_jll from dependencies * Improve comments * Destroy p4est data structures on exit * Add test case for P4estMesh * Implement suggestions * Implement suggestions * Revise constructor of P4estMesh to use kwargs * Improve performance of indices2direction * Fix mesh polydegs and stepsize for non-constant speeds * Implement suggestions * Implement save/restart with P4estMesh (#596) * Replace @timeit_debug with @timed * Implement save/restart for P4estMesh * Return node_coordinates * Change parameter basis to nodes to reuse function in Trixi2Vtk * Add Trixi2Vtk dev tips to docs * Fix docs * Update docs/src/visualization.md Co-authored-by: Michael Schlottke-Lakemper <[email protected]> * Update src/mesh/mesh_io.jl Co-authored-by: Michael Schlottke-Lakemper <[email protected]> * Implement suggestions Co-authored-by: Michael Schlottke-Lakemper <[email protected]> * Implement non-periodic boundaries with P4estMesh (#598) * Replace @timeit_debug with @timed * Extract orientation from face info * Reuse code from UnstructuredQuadMesh to implement non-periodic boundaries * Fix save/restart * Add nonperiodic example * Add assertion * Remove periodicity from P4estMesh * Fix loading meshes from different paths * Add constructor to build P4estMeshes from ABAQUS files * Allow initial_refinement_level > 1 * Add mapping as additional parameter to P4estMesh from file * Rename calc_node_coordinates! to avoid ambiguity * Add curved p4est Euler FSP example * Add documentation to new constructor * Check BCs for integrity * Add EOC test for non-periodic Euler on unstructured mesh * Implement suggestions * Implement suggestions * Fix tests * Implement suggestions * Fix spacing * Update P4est [compat] version to pass Windows/macOS tests (#619) * Add support for static non-conforming P4estMeshes (no AMR) (#621) * Prepare data structures for non-conforming meshes * Implement prolong2mortars * Implement mortar flux (not working yet) * Fix mortar flux calculation * Use global number of quadrants * Include tests for P4estMesh * Implement suggestions * Add test for non-conforming P4estMesh * Use Downloads.download * Implement suggestions * Fix tests * Fix CI tests on macOS * Implement AMR with p4est (#618) * Implement AMR with p4est (needs debugging) * Fix TreeMesh AMR * Fix print_amr_information * Fix refinement * Fix CurvedMesh * Fix AMR with p4est * Add general print_amr_information for non-AMR meshes * Fix boundary conditions with AMR * Fix AMR on unstructured meshes * Add tests for AMR with p4est * Use Downloads: download * Improve performance of P4estMesh * Prepare PR * Fix 2279806 * Remove some allocations from count_required functions * Remove more allocations * Implement suggestions * Implement more suggestions * Fix polydeg in show(P4estMesh) * Destroy p4est data structures in inner constructor * Update examples/2d/elixir_advection_amr_p4est_unstructured_flag.jl Co-authored-by: Hendrik Ranocha <[email protected]> * Update examples/2d/elixir_advection_p4est_non_conforming_flag.jl Co-authored-by: Hendrik Ranocha <[email protected]> * Make AMR controllers independent of the mesh * Implement suggestions * Fix e71913f * Implement suggestions * Fix 6a6a183 Co-authored-by: Hendrik Ranocha <[email protected]> * Add test with different geometry and solver polydeg (#634) * Increase coverage with `P4estMesh` (#635) * Add test for non-periodic structured P4estMesh * Add Euler gravity test with P4estMesh * Remove nboundaries(UnstructuredQuadSortedBoundaryTypes) * Move p4est Euler gravity tests to other p4est tests * Add news entry for P4estMesh * Fix a85c087 (#636) Co-authored-by: Erik Faulhaber <[email protected]> Co-authored-by: Hendrik Ranocha <[email protected]> Co-authored-by: Hendrik Ranocha <[email protected]>
- Loading branch information
Showing
46 changed files
with
3,360 additions
and
153 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -8,6 +8,7 @@ | |
*.avi | ||
*.ogv | ||
*.mesh | ||
*.inp | ||
**/Manifest.toml | ||
out*/ | ||
docs/build | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
95 changes: 95 additions & 0 deletions
95
examples/2d/elixir_advection_amr_p4est_unstructured_flag.jl
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
|
||
using Downloads: download | ||
using OrdinaryDiffEq | ||
using Trixi | ||
|
||
############################################################################### | ||
# semidiscretization of the linear advection equation | ||
|
||
advectionvelocity = (0.2, -0.3) | ||
equations = LinearScalarAdvectionEquation2D(advectionvelocity) | ||
|
||
initial_condition = initial_condition_gauss | ||
|
||
boundary_condition = BoundaryConditionDirichlet(initial_condition) | ||
boundary_conditions = Dict( | ||
:all => boundary_condition | ||
) | ||
|
||
solver = DGSEM(polydeg=3, surface_flux=flux_lax_friedrichs) | ||
|
||
# Deformed rectangle that looks like a waving flag, | ||
# lower and upper faces are sinus curves, left and right are vertical lines. | ||
f1(s) = SVector(-5.0, 5 * s - 5.0) | ||
f2(s) = SVector( 5.0, 5 * s + 5.0) | ||
f3(s) = SVector(5 * s, -5.0 + 5 * sin(0.5 * pi * s)) | ||
f4(s) = SVector(5 * s, 5.0 + 5 * sin(0.5 * pi * s)) | ||
faces = (f1, f2, f3, f4) | ||
|
||
# This creates a mapping that transforms [-1, 1]^2 to the domain with the faces defined above. | ||
# It generally doesn't work for meshes loaded from mesh files because these can be meshes | ||
# of arbitrary domains, but the mesh below is specifically built on the domain [-1, 1]^2. | ||
Trixi.validate_faces(faces) | ||
mapping_flag = Trixi.transfinite_mapping(faces) | ||
|
||
# Unstructured mesh with 24 cells of the square domain [-1, 1]^n | ||
mesh_file = joinpath(@__DIR__, "square_unstructured_2.inp") | ||
isfile(mesh_file) || download("https://gist.githubusercontent.com/efaulhaber/63ff2ea224409e55ee8423b3a33e316a/raw/7db58af7446d1479753ae718930741c47a3b79b7/square_unstructured_2.inp", | ||
mesh_file) | ||
|
||
mesh = P4estMesh(mesh_file, polydeg=3, | ||
mapping=mapping_flag, | ||
initial_refinement_level=1) | ||
|
||
|
||
semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver, | ||
boundary_conditions=boundary_conditions) | ||
|
||
|
||
############################################################################### | ||
# ODE solvers, callbacks etc. | ||
|
||
tspan = (0.0, 10.0) | ||
ode = semidiscretize(semi, tspan) | ||
|
||
summary_callback = SummaryCallback() | ||
|
||
analysis_interval = 100 | ||
analysis_callback = AnalysisCallback(semi, interval=analysis_interval, | ||
extra_analysis_integrals=(entropy,)) | ||
|
||
alive_callback = AliveCallback(analysis_interval=analysis_interval) | ||
|
||
save_restart = SaveRestartCallback(interval=100, | ||
save_final_restart=true) | ||
|
||
save_solution = SaveSolutionCallback(interval=100, | ||
save_initial_solution=true, | ||
save_final_solution=true, | ||
solution_variables=cons2prim) | ||
|
||
amr_controller = ControllerThreeLevel(semi, IndicatorMax(semi, variable=first), | ||
base_level=1, | ||
med_level=2, med_threshold=0.1, | ||
max_level=3, max_threshold=0.6) | ||
amr_callback = AMRCallback(semi, amr_controller, | ||
interval=5, | ||
adapt_initial_condition=true, | ||
adapt_initial_condition_only_refine=true) | ||
|
||
stepsize_callback = StepsizeCallback(cfl=0.7) | ||
|
||
callbacks = CallbackSet(summary_callback, | ||
analysis_callback, alive_callback, | ||
save_restart, save_solution, | ||
amr_callback, stepsize_callback); | ||
|
||
|
||
############################################################################### | ||
# run the simulation | ||
|
||
sol = solve(ode, CarpenterKennedy2N54(williamson_condition=false), | ||
dt=1, # solve needs some value here but it will be overwritten by the stepsize_callback | ||
save_everystep=false, callback=callbacks); | ||
|
||
summary_callback() # print the timer summary |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.