From d1d185a5e9a688299a3ccbf2f77ec5638fe10d02 Mon Sep 17 00:00:00 2001 From: Tristan Montoya Date: Fri, 8 Sep 2023 20:20:13 -0400 Subject: [PATCH] add option to use octavian for PKD vandermonde --- examples/advection_2d.ipynb | 2363 +++++++++--------- examples/advection_3d-Copy1.ipynb | 453 ---- examples/advection_3d-Copy2.ipynb | 926 ------- examples/advection_3d.ipynb | 1074 ++++---- src/SpatialDiscretizations/tensor_simplex.jl | 19 +- test/runtests.jl | 3 +- 6 files changed, 1736 insertions(+), 3102 deletions(-) delete mode 100644 examples/advection_3d-Copy1.ipynb delete mode 100644 examples/advection_3d-Copy2.ipynb diff --git a/examples/advection_2d.ipynb b/examples/advection_2d.ipynb index 411c1a2b..4469ed66 100644 --- a/examples/advection_2d.ipynb +++ b/examples/advection_2d.ipynb @@ -11,7 +11,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 33, "metadata": { "scrolled": false }, @@ -37,7 +37,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 34, "metadata": { "scrolled": true }, @@ -60,7 +60,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 35, "metadata": {}, "outputs": [], "source": [ @@ -95,7 +95,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 36, "metadata": { "scrolled": false }, @@ -107,1129 +107,1129 @@ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "\n" ], "text/html": [ "" ] }, - "execution_count": 20, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -1247,7 +1247,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 37, "metadata": {}, "outputs": [ { @@ -1257,19 +1257,20 @@ "\u001b[0m\u001b[1m ────────────────────────────────────────────────────────────────────────────────\u001b[22m\n", "\u001b[0m\u001b[1m \u001b[22m Time Allocations \n", " ─────────────────────── ────────────────────────\n", - " Tot / % measured: 652ms / 93.1% 16.8MiB / 86.5% \n", + " Tot / % measured: 891ms / 75.2% 16.0MiB / 85.9% \n", "\n", " Section ncalls time %tot avg alloc %tot avg\n", " ────────────────────────────────────────────────────────────────────────────────\n", - " semi-disc. residual 8.06k 607ms 100.0% 75.3μs 14.5MiB 100.0% 1.84KiB\n", + " semi-disc. residual 8.06k 670ms 100.0% 83.1μs 13.8MiB 100.0% 1.75KiB\n", + " time deriv. thre... 258k 351ms 52.4% 1.36μs 0.00B 0.0% 0.00B\n", + " nodal values thr... 258k 44.7ms 6.7% 173ns 0.00B 0.0% 0.00B\n", "\u001b[0m\u001b[1m ────────────────────────────────────────────────────────────────────────────────\u001b[22m\n" ] } ], "source": [ "ode_problem = semidiscretize(conservation_law,\n", - " spatial_discretization, exact_solution, form, (0.0, T), \n", - " ReferenceOperator())\n", + " spatial_discretization, exact_solution, form, (0.0, T))\n", "\n", "CFL = 0.02\n", "h = L/sqrt(reference_approximation.N_p * spatial_discretization.N_e)\n", @@ -1291,7 +1292,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 38, "metadata": { "scrolled": true }, @@ -1321,7 +1322,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 39, "metadata": { "scrolled": true }, @@ -1333,89 +1334,89 @@ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ], "text/html": [ "" ] }, - "execution_count": 23, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" } @@ -1441,7 +1442,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 40, "metadata": {}, "outputs": [], "source": [ diff --git a/examples/advection_3d-Copy1.ipynb b/examples/advection_3d-Copy1.ipynb deleted file mode 100644 index a91d8170..00000000 --- a/examples/advection_3d-Copy1.ipynb +++ /dev/null @@ -1,453 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# `StableSpectralElements.jl` - 3D linear advection example\n", - "\n", - "First, let's load the required packages." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[32m\u001b[1m Updating\u001b[22m\u001b[39m registry at `~/.julia/registries/General.toml`\n", - "\u001b[32m\u001b[1m Resolving\u001b[22m\u001b[39m package versions...\n", - "\u001b[32m\u001b[1m Installed\u001b[22m\u001b[39m TypedSyntax ─ v1.2.3\n", - "\u001b[32m\u001b[1m Installed\u001b[22m\u001b[39m Cthulhu ───── v2.9.3\n", - "\u001b[32m\u001b[1m Updating\u001b[22m\u001b[39m `~/Research/StableSpectralElements.jl/Project.toml`\n", - " \u001b[90m[aa65fe97] \u001b[39m\u001b[92m+ SnoopCompile v2.10.8\u001b[39m\n", - "\u001b[32m\u001b[1m Updating\u001b[22m\u001b[39m `~/Research/StableSpectralElements.jl/Manifest.toml`\n", - " \u001b[90m[f68482b8] \u001b[39m\u001b[92m+ Cthulhu v2.9.3\u001b[39m\n", - " \u001b[90m[08572546] \u001b[39m\u001b[92m+ FlameGraphs v1.0.0\u001b[39m\n", - " \u001b[90m[1eca21be] \u001b[39m\u001b[92m+ FoldingTrees v1.2.1\u001b[39m\n", - " \u001b[90m[9b13fd28] \u001b[39m\u001b[92m+ IndirectArrays v1.0.0\u001b[39m\n", - " \u001b[90m[c3a54625] \u001b[39m\u001b[92m+ JET v0.8.13\u001b[39m\n", - " \u001b[90m[70703baa] \u001b[39m\u001b[92m+ JuliaSyntax v0.4.6\u001b[39m\n", - " \u001b[90m[1d6d02ad] \u001b[39m\u001b[92m+ LeftChildRightSiblingTrees v0.2.0\u001b[39m\n", - " \u001b[90m[aa65fe97] \u001b[39m\u001b[92m+ SnoopCompile v2.10.8\u001b[39m\n", - " \u001b[90m[e2b509da] \u001b[39m\u001b[92m+ SnoopCompileCore v2.10.0\u001b[39m\n", - " \u001b[90m[69024149] \u001b[39m\u001b[92m+ StringEncodings v0.3.7\u001b[39m\n", - " \u001b[90m[d265eb64] \u001b[39m\u001b[92m+ TypedSyntax v1.2.3\u001b[39m\n", - " \u001b[90m[b8c1c048] \u001b[39m\u001b[92m+ WidthLimitedIO v1.0.1\u001b[39m\n", - " \u001b[90m[ddb6d928] \u001b[39m\u001b[92m+ YAML v0.4.9\u001b[39m\n", - "\u001b[32m\u001b[1mPrecompiling\u001b[22m\u001b[39m project...\n", - "\u001b[32m ✓ \u001b[39m\u001b[90mTypedSyntax\u001b[39m\n", - "\u001b[32m ✓ \u001b[39m\u001b[90mCthulhu\u001b[39m\n", - "\u001b[32m ✓ \u001b[39mSnoopCompile\n", - "\u001b[32m ✓ \u001b[39mStableSpectralElements\n", - " 4 dependencies successfully precompiled in 36 seconds. 335 already precompiled.\n" - ] - } - ], - "source": [ - "using Pkg; Pkg.add(\"SnoopCompile\")\n", - "using StableSpectralElements, BenchmarkTools, OrdinaryDiffEq, SnoopCompile" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We will solve the three-dimensional linear advection equation\n", - "$$\n", - "\\partial_t U(\\boldsymbol{x},t) + \\nabla_{\\boldsymbol{x}} \\cdot (\\boldsymbol{a} U(\\boldsymbol{x},t)) = 0, \\quad \\forall\\, (\\boldsymbol{x}, t) \\in \\Omega \\times (0,T),\n", - "$$\n", - "with $a = [1,1,1]^{\\mathrm{T}}$ and $\\Omega = (0,L)^3$, where we take $L = 1$, and $T = 1$, and impose periodic boundary conditions as well as the initial condition\n", - "$$\n", - "U(\\boldsymbol{x},0) = \\cos(2\\pi x_1 / L)\\cos(2\\pi x_2 / L)\\cos(2\\pi x_3 / L), \\quad \\forall \\, \\boldsymbol{x} \\in \\Omega.\n", - "$$" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "a = (1.0,1.0,1.0) # advection velocity\n", - "L = 1.0 # domain length\n", - "T = 1.0 # end time\n", - "\n", - "conservation_law = LinearAdvectionEquation(a)\n", - "exact_solution = InitialDataCosine(1.0,(2π/L, 2π/L, 2π/L));" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We'll discretize the above problem using a `ModalTensor` discretization of degree $p = 7$, on a curved (i.e. using a mapping of degree $p_{\\mathrm{map}} = 3$) tetrahedral mesh with $M = 2$ edges in each direction. A skew-symmetric split form will be used to treat the curvilinear coordinate transformation in a provably stable manner, and we will use an upwind (i.e. Lax-Friedrichs) numerical flux." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "M = 4\n", - "p = 4\n", - "\n", - "reference_approximation = ReferenceApproximation(ModalTensor(p), Tet(), mapping_degree=3);" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "StandardForm{SkewSymmetricMapping, LaxFriedrichsNumericalFlux, BR1}(SkewSymmetricMapping(), LaxFriedrichsNumericalFlux(0.5), BR1())" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "form = StandardForm(mapping_form=SkewSymmetricMapping(), \n", - " inviscid_numerical_flux=LaxFriedrichsNumericalFlux())" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "MeshData of dimension 3 with 384 elements with periodicity = (true, true, true)." - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "uniform_mesh = uniform_periodic_mesh(reference_approximation,\n", - " ((0.0,L),(0.0,L),(0.0,L)), (M,M,M))" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "MeshData of dimension 3 with 384 elements with periodicity = (true, true, true)." - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "mesh = warp_mesh(uniform_mesh, reference_approximation, 0.1, L) " - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 2.275349 seconds (4.66 M allocations: 309.740 MiB, 3.18% gc time, 85.91% compilation time)\n" - ] - } - ], - "source": [ - "@time spatial_discretization = SpatialDiscretization(mesh, \n", - " reference_approximation);" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 5.434095 seconds (14.76 M allocations: 928.601 MiB, 3.61% gc time, 99.20% compilation time: <1% of which was recompilation)\n" - ] - } - ], - "source": [ - "@time results_path = save_project(conservation_law,\n", - " spatial_discretization, exact_solution, form, (0.0, T),\n", - " \"results/advection_3d/\", overwrite=true, clear=true);" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Using the `semidiscretize` function, we can create an `ODEProblem` object for use with OrdinaryDiffEq.jl's `solve` function. Here we've chosen the option for a weight-adjusted approximation of the mass matrix inverse from [Chan et al. (SISC 2017)](https://arxiv.org/abs/1608.03836), which allows for modal schemes to be applied efficiently at high order with explicit time-marching methods." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 10.666794 seconds (5.35 M allocations: 490.579 MiB, 1.82% gc time, 98.06% compilation time: <1% of which was recompilation)\n" - ] - }, - { - "data": { - "text/plain": [ - "\u001b[38;2;86;182;194mODEProblem\u001b[0m with uType \u001b[38;2;86;182;194mArray{Float64, 3}\u001b[0m and tType \u001b[38;2;86;182;194mFloat64\u001b[0m. In-place: \u001b[38;2;86;182;194mtrue\u001b[0m\n", - "timespan: (0.0, 1.0)\n", - "u0: 35×1×384 Array{Float64, 3}:\n", - "[:, :, 1] =\n", - " 0.526841280496322\n", - " 0.23005944467759418\n", - " -0.009290914470701711\n", - " -0.012478658346043935\n", - " 0.0011386319281426142\n", - " 0.016956034917536326\n", - " 0.013327760319501633\n", - " -0.006896153054356678\n", - " 0.0003458885535326595\n", - " -0.03386825432222411\n", - " -0.004124640875220375\n", - " -0.0002157548364756823\n", - " -0.00018607447383010376\n", - " ⋮\n", - " 0.0008722770526677527\n", - " 0.001653483518393314\n", - " -0.048480602708067935\n", - " -0.02481140650378145\n", - " 0.0015031143912520525\n", - " -0.0008232717452017709\n", - " -0.0011703990564559778\n", - " 0.0004881093707532717\n", - " 0.032020378406276195\n", - " -0.0022121807477622963\n", - " 0.0034048185582440708\n", - " 0.007831187284208134\n", - "\n", - "[:, :, 2] =\n", - " 0.15469373738386977\n", - " 0.012677207600159956\n", - " -0.02558718216154592\n", - " 0.0005493979794464938\n", - " 0.000771973567071769\n", - " -0.0609469373541721\n", - " -0.043071934900802814\n", - " 0.0012813045742525414\n", - " 0.0010511762058713436\n", - " -0.0206785229748985\n", - " 0.002072454251621025\n", - " 0.00010827816370991114\n", - " 0.026296899790118424\n", - " ⋮\n", - " -0.0023090471024151938\n", - " -0.004703092317928655\n", - " -0.003988515257818235\n", - " -0.0020351196372220145\n", - " 0.0006044237102806881\n", - " 0.0021594978304263876\n", - " 0.0007718202869595354\n", - " 0.0019534513483023116\n", - " -0.0009061394155480119\n", - " -0.00045417004978928304\n", - " -0.0003262129350207673\n", - " 5.823103285901703e-6\n", - "\n", - "[:, :, 3] =\n", - " 0.0410491739841475\n", - " 0.008841968660582126\n", - " -0.01262261149667385\n", - " 0.015730392922308812\n", - " 0.000696930207191027\n", - " 0.04154963248633228\n", - " 0.017563886372298453\n", - " -0.024225047166881036\n", - " -0.003865308834512661\n", - " 0.01274306709225729\n", - " 0.012590976918188806\n", - " 0.0038322810963732487\n", - " -0.0009625553804454148\n", - " ⋮\n", - " -0.0016014934949014044\n", - " -0.0014723156684547276\n", - " 0.0024740110813081034\n", - " 0.00206393986967636\n", - " 2.073487477060831e-5\n", - " 0.0012903365141330994\n", - " -0.0006353486397532494\n", - " -0.0007844330152379243\n", - " 0.00048769559776328577\n", - " 7.880115604504445e-5\n", - " -0.0001952044516603234\n", - " 4.24963680773752e-5\n", - "\n", - ";;; … \n", - "\n", - "[:, :, 382] =\n", - " 0.6464986628812192\n", - " -0.0071802443125288445\n", - " -0.07012448114095474\n", - " -0.0024720080230987884\n", - " 0.0022664605724823142\n", - " -0.11615822377238269\n", - " 0.005898399234749855\n", - " 0.006268508257378164\n", - " -0.000434016007005056\n", - " -0.010447553034858385\n", - " -0.0040451574332535985\n", - " 0.00044145207088412675\n", - " 0.004651507442458875\n", - " ⋮\n", - " -0.00028118848243211203\n", - " 0.0007742754868614951\n", - " -0.02583906059566602\n", - " -0.0006144328430668125\n", - " 0.0009186192910246349\n", - " 0.0022759506262534637\n", - " 0.00019013118734096364\n", - " -0.0002922162854954161\n", - " -0.002415714758267717\n", - " 0.0002476259225724337\n", - " 0.00013118891640767716\n", - " 0.0002188529471162714\n", - "\n", - "[:, :, 383] =\n", - " 0.26150767572939043\n", - " -0.0957744372158727\n", - " 0.0051773035815701855\n", - " 0.004067552547570295\n", - " -0.0002630067744730447\n", - " 0.0411109891788003\n", - " -0.00989819319603548\n", - " 0.0009964458103030943\n", - " 9.37975659587289e-6\n", - " -0.07438354166285607\n", - " -0.0027767673692715633\n", - " 0.00030551785258352797\n", - " -0.0054940947228810325\n", - " ⋮\n", - " 0.0003876970663479139\n", - " -0.0006196334049622298\n", - " -0.010764937346523428\n", - " 0.001566264935253006\n", - " 1.1231915986966749e-5\n", - " -0.0006369069252107168\n", - " 0.00026629245911123043\n", - " 0.000575509262510967\n", - " 0.000689767649591718\n", - " 2.173249502746893e-5\n", - " -0.00022998198948099454\n", - " 0.00012522713828169244\n", - "\n", - "[:, :, 384] =\n", - " 0.11303969500368088\n", - " -0.05750722202445134\n", - " 0.009135301143035679\n", - " 0.0007577467382830197\n", - " -0.00033713569377878644\n", - " -0.0613787904974962\n", - " 0.009608083896425097\n", - " -2.9191338897728418e-5\n", - " -0.00030112713092785985\n", - " 0.0032335874509343823\n", - " 0.000936624114065207\n", - " -0.00018373123310817615\n", - " 0.00399766925760831\n", - " ⋮\n", - " -0.00017314335242770156\n", - " 8.925370606515579e-5\n", - " -0.04491992603397253\n", - " 0.0021153823471477167\n", - " -0.00021486134310234054\n", - " -0.0011394224402870193\n", - " -0.00013582565071713882\n", - " 0.0002822813299274931\n", - " 0.00486893287121778\n", - " -0.0002643815639028262\n", - " -0.0005931439238288242\n", - " 0.0013031970308717247" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "CFL = 0.1\n", - "h = L/(reference_approximation.N_p * spatial_discretization.N_e)^(1/3)\n", - "dt = CFL * h / sqrt(a[1]^2 + a[2]^2 + a[3]^2)\n", - "\n", - "@time ode_problem = semidiscretize(conservation_law, spatial_discretization, exact_solution, form, (0.0, T))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "times = @snoopi_deep solve(ode_problem, CarpenterKennedy2N54(), adaptive=false, dt=dt,\n", - " save_everystep=false)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Julia 1.9.3", - "language": "julia", - "name": "julia-1.9" - }, - "language_info": { - "file_extension": ".jl", - "mimetype": "application/julia", - "name": "julia", - "version": "1.9.3" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/advection_3d-Copy2.ipynb b/examples/advection_3d-Copy2.ipynb deleted file mode 100644 index c997b29e..00000000 --- a/examples/advection_3d-Copy2.ipynb +++ /dev/null @@ -1,926 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# `StableSpectralElements.jl` - 3D linear advection example\n", - "\n", - "First, let's load the required packages." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "scrolled": false - }, - "outputs": [], - "source": [ - "using StableSpectralElements, OrdinaryDiffEq\n", - "using Plots, Plots.PlotMeasures, Printf, TimerOutputs, BenchmarkTools" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We will solve the three-dimensional linear advection equation\n", - "$$\n", - "\\partial_t U(\\boldsymbol{x},t) + \\nabla_{\\boldsymbol{x}} \\cdot (\\boldsymbol{a} U(\\boldsymbol{x},t)) = 0, \\quad \\forall\\, (\\boldsymbol{x}, t) \\in \\Omega \\times (0,T),\n", - "$$\n", - "with $a = [1,1,1]^{\\mathrm{T}}$ and $\\Omega = (0,L)^3$, where we take $L = 1$, and $T = 1$, and impose periodic boundary conditions as well as the initial condition\n", - "$$\n", - "U(\\boldsymbol{x},0) = \\cos(2\\pi x_1 / L)\\cos(2\\pi x_2 / L)\\cos(2\\pi x_3 / L), \\quad \\forall \\, \\boldsymbol{x} \\in \\Omega.\n", - "$$" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "a = (1.0,1.0,1.0) # advection velocity\n", - "L = 1.0 # domain length\n", - "T = 1.0 # end time\n", - "\n", - "conservation_law = LinearAdvectionEquation(a)\n", - "exact_solution = InitialDataCosine(1.0,(2π/L, 2π/L, 2π/L));" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We'll discretize the above problem using a `ModalTensor` discretization of degree $p = 7$, on a curved (i.e. using a mapping of degree $p_{\\mathrm{map}} = 3$) tetrahedral mesh with $M = 2$ edges in each direction. A skew-symmetric split form will be used to treat the curvilinear coordinate transformation in a provably stable manner, and we will use an upwind (i.e. Lax-Friedrichs) numerical flux." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "scrolled": false - }, - "outputs": [], - "source": [ - "M = 2\n", - "p = 4\n", - "\n", - "reference_approximation = ReferenceApproximation(\n", - " ModalMulti(p), Tet(), mapping_degree=3)\n", - "\n", - "form = StandardForm(mapping_form=SkewSymmetricMapping(), \n", - " inviscid_numerical_flux=LaxFriedrichsNumericalFlux())\n", - "\n", - "uniform_mesh = uniform_periodic_mesh(reference_approximation,\n", - " ((0.0,L),(0.0,L),(0.0,L)), (M,M,M))\n", - "\n", - "mesh = warp_mesh(uniform_mesh, reference_approximation, 0.1, L) \n", - "\n", - "spatial_discretization = SpatialDiscretization(mesh, \n", - " reference_approximation)\n", - "\n", - "results_path = save_project(conservation_law,\n", - " spatial_discretization, exact_solution, form, (0.0, T),\n", - " \"results/advection_3d/\", overwrite=true, clear=true);" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We will now plot the reference element, with the volume quadrature nodes shown on the left and the facet quadrature nodes shown on the right." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/html": [ - "" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "vol_quad_plot = plot(reference_approximation, volume_connect=false, \n", - " facet_quadrature=false, fmt=:png, size=(300,300))\n", - "fac_quad_plot = plot(reference_approximation, facet_connect=false, \n", - " volume_quadrature=false, fmt=:png, size=(300,300), facet_inds=[3,4,1,2])\n", - "plot(vol_quad_plot,fac_quad_plot,size=(600,300),margin=5mm, fmt=:png)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The mesh is shown below." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/html": [ - "" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "plot(spatial_discretization, volume_quadrature=false, facet_quadrature=false, fmt=:png, size=(300,300))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Using the `semidiscretize` function, we can create an `ODEProblem` object for use with OrdinaryDiffEq.jl's `solve` function. Here we've chosen the option for a weight-adjusted approximation of the mass matrix inverse from [Chan et al. (SISC 2017)](https://arxiv.org/abs/1608.03836), which allows for modal schemes to be applied efficiently at high order with explicit time-marching methods." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "CFL = 0.1\n", - "h = L/(reference_approximation.N_p * spatial_discretization.N_e)^(1/3)\n", - "dt = CFL * h / sqrt(a[1]^2 + a[2]^2 + a[3]^2)\n", - "\n", - "ode_problem = semidiscretize(conservation_law, spatial_discretization,\n", - " exact_solution, form, (0.0, T));" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[0m\u001b[1m ────────────────────────────────────────────────────────────────────────────────\u001b[22m\n", - "\u001b[0m\u001b[1m \u001b[22m Time Allocations \n", - " ─────────────────────── ────────────────────────\n", - " Tot / % measured: 5.69s / 33.8% 1.00GiB / 36.0% \n", - "\n", - " Section ncalls time %tot avg alloc %tot avg\n", - " ────────────────────────────────────────────────────────────────────────────────\n", - " semi-disc. residual 1.08k 1.92s 100.0% 1.78ms 368MiB 100.0% 348KiB\n", - " time deriv. thre... 52.0k 348ms 18.1% 6.70μs 0.00B 0.0% 0.00B\n", - " nodal values thr... 52.0k 24.7ms 1.3% 475ns 0.00B 0.0% 0.00B\n", - "\u001b[0m\u001b[1m ────────────────────────────────────────────────────────────────────────────────\u001b[22m\n" - ] - } - ], - "source": [ - "reset_timer!()\n", - "sol = solve(ode_problem, CarpenterKennedy2N54(), adaptive=false, dt=dt,\n", - " save_everystep=false, \n", - " callback=save_callback(results_path, (0.0,T), floor(Int, T/(dt*50))))\n", - "print_timer()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can then compute the $L^2$ norm of the solution error using the scheme's volume quadrature rule." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "L2 error:\n", - "0.08800506937748545\n" - ] - } - ], - "source": [ - "error_analysis = ErrorAnalysis(results_path, conservation_law, \n", - " spatial_discretization)\n", - "println(\"L2 error:\")\n", - "println(analyze(error_analysis, last(sol.u), exact_solution, T)...)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The conservation and energy dissipation properties of the scheme are verified as follows." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[33m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[33m\u001b[1mWarning: \u001b[22m\u001b[39mNo strict ticks found\n", - "\u001b[33m\u001b[1m└ \u001b[22m\u001b[39m\u001b[90m@ PlotUtils ~/.julia/packages/PlotUtils/mHQ0Q/src/ticks.jl:191\u001b[39m\n", - "\u001b[33m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[33m\u001b[1mWarning: \u001b[22m\u001b[39mNo strict ticks found\n", - "\u001b[33m\u001b[1m└ \u001b[22m\u001b[39m\u001b[90m@ PlotUtils ~/.julia/packages/PlotUtils/mHQ0Q/src/ticks.jl:191\u001b[39m\n", - "\u001b[33m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[33m\u001b[1mWarning: \u001b[22m\u001b[39mNo strict ticks found\n", - "\u001b[33m\u001b[1m└ \u001b[22m\u001b[39m\u001b[90m@ PlotUtils ~/.julia/packages/PlotUtils/mHQ0Q/src/ticks.jl:191\u001b[39m\n", - "\u001b[33m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[33m\u001b[1mWarning: \u001b[22m\u001b[39mNo strict ticks found\n", - "\u001b[33m\u001b[1m└ \u001b[22m\u001b[39m\u001b[90m@ PlotUtils ~/.julia/packages/PlotUtils/mHQ0Q/src/ticks.jl:191\u001b[39m\n" - ] - }, - { - "data": { - "image/png": "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", - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/html": [ - "" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[33m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[33m\u001b[1mWarning: \u001b[22m\u001b[39mNo strict ticks found\n", - "\u001b[33m\u001b[1m└ \u001b[22m\u001b[39m\u001b[90m@ PlotUtils ~/.julia/packages/PlotUtils/mHQ0Q/src/ticks.jl:191\u001b[39m\n", - "\u001b[33m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[33m\u001b[1mWarning: \u001b[22m\u001b[39mNo strict ticks found\n", - "\u001b[33m\u001b[1m└ \u001b[22m\u001b[39m\u001b[90m@ PlotUtils ~/.julia/packages/PlotUtils/mHQ0Q/src/ticks.jl:191\u001b[39m\n", - "\u001b[33m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[33m\u001b[1mWarning: \u001b[22m\u001b[39mNo strict ticks found\n", - "\u001b[33m\u001b[1m└ \u001b[22m\u001b[39m\u001b[90m@ PlotUtils ~/.julia/packages/PlotUtils/mHQ0Q/src/ticks.jl:191\u001b[39m\n" - ] - } - ], - "source": [ - "conservation_analysis = PrimaryConservationAnalysis(results_path, \n", - " conservation_law, spatial_discretization)\n", - "energy_analysis = EnergyConservationAnalysis(results_path, \n", - " conservation_law, spatial_discretization)\n", - "p1 = plot(analyze(conservation_analysis, load_time_steps(results_path)), \n", - " ylabel=\"Conservation functional\",)\n", - "p2 = plot(analyze(energy_analysis, load_time_steps(results_path)), \n", - " ylabel=\"Energy functional\")\n", - "plot(p1,p2, size=(600,300),margin=5mm, fmt=:png)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can now postprocess the solution for visualization, producing a `.vtu` file." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "postprocess_vtk(spatial_discretization,\n", - " string(results_path,\"solution.vtu\"), last(sol.u));" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Julia 1.9.3", - "language": "julia", - "name": "julia-1.9" - }, - "language_info": { - "file_extension": ".jl", - "mimetype": "application/julia", - "name": "julia", - "version": "1.9.3" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/advection_3d.ipynb b/examples/advection_3d.ipynb index 95f5d0ea..128c72a2 100644 --- a/examples/advection_3d.ipynb +++ b/examples/advection_3d.ipynb @@ -11,7 +11,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 21, "metadata": { "scrolled": false }, @@ -37,7 +37,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 22, "metadata": { "scrolled": true }, @@ -60,7 +60,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 23, "metadata": { "scrolled": false }, @@ -97,7 +97,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 24, "metadata": {}, "outputs": [ { @@ -107,173 +107,173 @@ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "\n" ], "text/html": [ "" ] }, - "execution_count": 14, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -295,7 +295,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 25, "metadata": {}, "outputs": [ { @@ -305,335 +305,335 @@ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "\n" ], "text/html": [ "" ] }, - "execution_count": 15, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } @@ -651,7 +651,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 26, "metadata": {}, "outputs": [], "source": [ @@ -665,7 +665,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 27, "metadata": {}, "outputs": [ { @@ -675,13 +675,13 @@ "\u001b[0m\u001b[1m ────────────────────────────────────────────────────────────────────────────────\u001b[22m\n", "\u001b[0m\u001b[1m \u001b[22m Time Allocations \n", " ─────────────────────── ────────────────────────\n", - " Tot / % measured: 10.6s / 76.5% 801MiB / 45.2% \n", + " Tot / % measured: 12.4s / 99.2% 5.46MiB / 40.1% \n", "\n", " Section ncalls time %tot avg alloc %tot avg\n", " ────────────────────────────────────────────────────────────────────────────────\n", - " semi-disc. residual 1.08k 8.08s 100.0% 7.45ms 362MiB 100.0% 342KiB\n", - " time deriv. thre... 52.0k 6.23s 77.1% 120μs 0.00B 0.0% 0.00B\n", - " nodal values thr... 52.0k 281ms 3.5% 5.40μs 0.00B 0.0% 0.00B\n", + " semi-disc. residual 1.08k 12.3s 100.0% 11.3ms 2.19MiB 100.0% 2.07KiB\n", + " time deriv. thre... 52.0k 11.7s 95.0% 225μs 0.00B 0.0% 0.00B\n", + " nodal values thr... 52.0k 522ms 4.2% 10.0μs 0.00B 0.0% 0.00B\n", "\u001b[0m\u001b[1m ────────────────────────────────────────────────────────────────────────────────\u001b[22m\n" ] } @@ -703,7 +703,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 28, "metadata": { "scrolled": true }, @@ -733,7 +733,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 29, "metadata": {}, "outputs": [ { @@ -743,91 +743,91 @@ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ], "text/html": [ "" ] }, - "execution_count": 19, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } @@ -853,7 +853,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 30, "metadata": {}, "outputs": [], "source": [ diff --git a/src/SpatialDiscretizations/tensor_simplex.jl b/src/SpatialDiscretizations/tensor_simplex.jl index 27c2b0cb..8c655e5b 100644 --- a/src/SpatialDiscretizations/tensor_simplex.jl +++ b/src/SpatialDiscretizations/tensor_simplex.jl @@ -179,7 +179,8 @@ function ReferenceApproximation( ::Tri; mapping_degree::Int=1, N_plot::Int=10, volume_quadrature_rule=(LGQuadrature(approx_type.p), LGQuadrature(approx_type.p)), - facet_quadrature_rule=LGQuadrature(approx_type.p)) + facet_quadrature_rule=LGQuadrature(approx_type.p), + sum_factorize_vandermonde=true) # one-dimensional operators η_1D, q, V_1D, D_1D, I_1D, R_L, R_R = operators_1d( @@ -211,8 +212,13 @@ function ReferenceApproximation( # construct nodal or modal scheme (different Vandermonde matrix) if approx_type isa ModalTensor - V = warped_product(Tri(),approx_type.p, η_1D) - V_plot = LinearMap(vandermonde(Tri(), + if sum_factorize_vandermonde + V = warped_product(Tri(),approx_type.p, η_1D) + else + V = OctavianMap(vandermonde(Tri(), + approx_type.p, reference_element.rstq...)) + end + V_plot = OctavianMap(vandermonde(Tri(), approx_type.p, reference_element.rstp...)) else V = LinearMap(I, (q[1]+1)*(q[2]+1)) @@ -275,7 +281,12 @@ function ReferenceApproximation( # construct nodal or modal scheme if approx_type isa ModalTensor - V = warped_product(Tet(),approx_type.p, η_1D) + if sum_factorize_vandermonde + V = warped_product(Tet(),approx_type.p, η_1D) + else + V = OctavianMap(vandermonde(Tet(), + approx_type.p, reference_element.rstq...)) + end V_plot = OctavianMap(vandermonde(Tet(), approx_type.p, reference_element.rstp...)) else diff --git a/test/runtests.jl b/test/runtests.jl index 8ddbbe08..2a071c90 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -89,7 +89,8 @@ end @testset "Advection 3D Energy-Conservative ModalTensor Tet" begin (l2, conservation, energy) = test_driver( - ReferenceApproximation(ModalTensor(p), Tet(), mapping_degree=3), + ReferenceApproximation(ModalTensor(p), Tet(), + mapping_degree=3, sum_factorize_vandermonde=false), LinearAdvectionEquation((1.0,1.0,1.0)), InitialDataSine(1.0,(2*π, 2*π, 2*π)), StandardForm(mapping_form=SkewSymmetricMapping(),