HarmonicDiffusion#

class fridom.framework.modules.closures.harmonic_diffusion.HarmonicDiffusion(field_flags: list[str], diffusion_coefficients: list[float | ScalarField])[source]#

Bases: Module

Harmonic diffusion module.

Description#

The harmonic diffusion operator \(\mathcal{H}\) on a scalar field \(u\) is given by:

\[\mathcal{H}(u) = \nabla \cdot \left (\mathbf{A} \cdot \nabla u \right)\]

with the diagonal diffusion tensor \(\mathbf{A}\) given by:

\[\begin{split}\mathbf{A} = \begin{pmatrix} \kappa_1 & \dots & 0 \\ \vdots & \ddots & \vdots \\ 0 & \dots & \kappa_n \end{pmatrix}\end{split}\]

where \(\kappa_i\) is the harmonic diffusion coefficient in the \(i\)-th direction.

Parameters#

field_flagslist[str]

A list of strings that indicate which fields should be diffused. For example, if field_flags=[“ENABLE_MIXING”], all fields with the flag “ENABLE_MIXING” will be diffused. For more information on possible flags, see fridom.framework.ScalarField.

diffusion_coefficientstuple[float | fr.ScalarField]

A tuple of diffusion coefficients. The length of the tuple must match the number of dimensions of the grid.

namestr, (default=”Harmonic Diffusion”)

Name of the module.

__init__(field_flags: list[str], diffusion_coefficients: list[float | ScalarField]) None[source]#

Methods

__init__(field_flags, diffusion_coefficients)

diffuse(z, dz)

diffusion_operator(u)

Apply the harmonic diffusion operator on a scalar field \(u\).

disable()

Disable the module.

enable()

Enable the module.

is_enabled()

Whether the module is enabled or not.

reset()

Stop and start the module.

setup(mset[, setup_mode])

Set the module up.

start()

Start the module.

stop()

Stop the module.

update(mz)

Update the model state.

Attributes

diff_module

The differentiation module to be used by this module.

diffusion_coefficients

A list of diffusion coefficients.

field_flags

A list of field flags that indicate which fields should be diffused.

grid

The grid of the model settings.

info

Return a dictionary with information about the time stepper.

interp_module

The interpolation module to be used by this module.

is_setup

Whether the module is set up.

mset

The model settings.

name

required_halo

The required halo points for this module.

Examples using fridom.framework.modules.closures.HarmonicDiffusion#

Convection and Closures

Convection and Closures

Dancing Eddies

Dancing Eddies

Barotropic Instability.

Barotropic Instability.
name = 'Harmonic Diffusion'#
diffusion_operator(u: ScalarField) ScalarField[source]#

Apply the harmonic diffusion operator on a scalar field \(u\).

diffuse(z: VectorField, dz: VectorField) VectorField[source]#
update(mz: ModelState) ModelState[source]#

Update the model state.

Description#

This method is called by the model at each time step. Child classes should overwrite this method to update the module. Make sure to decorate the method with the @module_method decorator.

Parameters#

mzfr.ModelState

The model state at the current time step.

Returns#

fr.ModelState

The updated model state.

property field_flags: list[str]#

A list of field flags that indicate which fields should be diffused.

property diffusion_coefficients: list[float | ScalarField]#

A list of diffusion coefficients.