|
2 | 2 |
|
3 | 3 | ## 1D Column examples
|
4 | 4 |
|
| 5 | +### Heat equation |
| 6 | + |
| 7 | +The 1D Column heat example in [`examples/column/heat.jl`](https://github.com/CliMA/ClimaCore.jl/blob/main/examples/column/heat.jl). |
| 8 | + |
| 9 | +#### Equations and discretizations |
| 10 | + |
| 11 | +Follows the heat equation |
| 12 | + |
| 13 | +```math |
| 14 | +\begin{equation} |
| 15 | + \frac{\partial T}{\partial t} = \alpha \cdot \nabla^2 T. |
| 16 | +\label{eq:1d-column-heat-continuity} |
| 17 | +\end{equation} |
| 18 | +``` |
| 19 | + |
| 20 | +This is discretized using the following |
| 21 | + |
| 22 | +```math |
| 23 | +\begin{equation} |
| 24 | + \frac{\partial T}{\partial t} \approx \alpha \cdot D(G(T)). |
| 25 | +\label{eq:1d-column-heat-discrete} |
| 26 | +\end{equation} |
| 27 | +``` |
| 28 | + |
| 29 | +#### Prognostic Variables |
| 30 | + |
| 31 | +* ``\alpha``: thermal diffusivity measured in $\frac{m^2}{s}$ |
| 32 | +* ``T``: temperature |
| 33 | + |
| 34 | +#### Differentiation Operators |
| 35 | + |
| 36 | + * ``D`` is the [face-to-center divergence](https://clima.github.io/ClimaCore.jl/dev/operators/#ClimaCore.Operators.DivergenceF2C) operator, called `divf2c` in the example code |
| 37 | + * ``G`` is the [center-to-face gradient](https://clima.github.io/ClimaCore.jl/dev/operators/#ClimaCore.Operators.GradientC2F) operator, called `gradc2f` in the example code |
| 38 | + |
| 39 | +#### Set Up |
| 40 | + |
| 41 | +This test case is set up in a 1D column domain ``z \in [0, 1]`` and discretized into a mesh of 10 elements. A homogeneous Dirichlet boundary condition is set at the bottom boundary, `bcs_bottom`, setting the temperature to 0. A Neumann boundary condition is applied to the top boundary, `bcs_top`, setting the temperature gradient to 1. |
| 42 | + |
| 43 | +### Advection equation |
| 44 | + |
| 45 | +The 1D Column advection example in [`examples/column/advect.jl`](https://github.com/CliMA/ClimaCore.jl/blob/main/examples/column/advect.jl). |
| 46 | + |
| 47 | +#### Equations and Discretizations |
| 48 | + |
| 49 | +Follows the advection equation |
| 50 | + |
| 51 | +```math |
| 52 | +\begin{equation} |
| 53 | + \frac{\partial \theta}{\partial t} = -\frac{\partial (v \theta)}{\partial z} . |
| 54 | +\label{eq:1d-column-advection-continuity} |
| 55 | +\end{equation} |
| 56 | +``` |
| 57 | +This is discretized using the following |
| 58 | + |
| 59 | +```math |
| 60 | +\begin{equation} |
| 61 | + \frac{\partial \theta}{\partial t} \approx - D(v, \theta) . |
| 62 | +\label{eq:1d-column-advection-discrete} |
| 63 | +\end{equation} |
| 64 | +``` |
| 65 | + |
| 66 | +#### Prognostic Variables |
| 67 | + |
| 68 | +* ``\theta``: the scalar field |
| 69 | +* ``v``: the velocity field |
| 70 | + |
| 71 | +#### Tendencies |
| 72 | + |
| 73 | +The example code solves the equation for 4 different tendencies with the following discretizations: |
| 74 | + |
| 75 | +- Tendency 1: |
| 76 | + |
| 77 | + $$D = \partial(UB),$$ |
| 78 | + |
| 79 | + where ``\partial`` is the [`face-to-center divergence`](https://clima.github.io/ClimaCore.jl/dev/operators/#ClimaCore.Operators.DivergenceF2C) and $UB$ is the [`center-to-face upwind biased product`](https://clima.github.io/ClimaCore.jl/dev/operators/#ClimaCore.Operators.UpwindBiasedProductC2F) operator. |
| 80 | +- Tendency 2: |
| 81 | + |
| 82 | + $$D = \partial(UB) + \textrm{fcc}(v, \theta),$$ |
| 83 | + |
| 84 | + where $\textrm{fcc}(v, \theta)$ is the [`center-to-center flux correction`](https://github.com/CliMA/ClimaCore.jl/blob/main/src/Operators/finitedifference.jl#L2617) operator. |
| 85 | +- Tendency 3: |
| 86 | + |
| 87 | + $$D = A,$$ |
| 88 | + |
| 89 | + where $A$ is the [`center-to-center vertical advection`](https://clima.github.io/ClimaCore.jl/dev/operators/#ClimaCore.Operators.AdvectionC2C) operator. |
| 90 | +- Tendency 4: |
| 91 | + |
| 92 | + $$D = A + \textrm{fcc}(v, \theta),$$ |
| 93 | + |
| 94 | + where $\textrm{fcc}(v, \theta)$ is the [`center-to-center flux correction`](https://github.com/CliMA/ClimaCore.jl/blob/main/src/Operators/finitedifference.jl#L2617) operator. |
| 95 | + |
| 96 | +#### Set Up |
| 97 | + |
| 98 | +This test case is set up in a 1D column domain ``z \in [0, 4\pi]``, discretized into a mesh of 128 elements. The velocity field is defined as a sinusoidal wave. The boundary conditions are operator dependent, so they depend on the tendency. |
| 99 | +* For tendencies 1 and 2 where the upwind biased operator ``UB`` is used, the left boundary is defined as ``sin(a - t)``. The right boundary is ``sin(b - t)``. Here ``a`` and ``b`` are the left and right bounds of the domain. |
| 100 | +* For tendencies 3 and 4, where the advection operator ``A`` is used, the left boundary is defined as ``sin(-t)``. The right boundary is extrapolated, meaning its value is set to the closest interior point. |
| 101 | + |
5 | 102 | ## 2D Cartesian examples
|
6 | 103 |
|
7 | 104 | ### Flux Limiters advection
|
|
0 commit comments