SpECTRE  v2024.08.03
Events::ObserveNorms< ObservableTensorTagsList, NonTensorComputeTagsList, ArraySectionIdTag, OptionName > Class Template Reference

Compute norms of tensors in the DataBox and write them to disk. More...

## Detailed Description

template<typename ObservableTensorTagsList, typename NonTensorComputeTagsList = tmpl::list<>, typename ArraySectionIdTag = void, typename OptionName = void>
class Events::ObserveNorms< ObservableTensorTagsList, NonTensorComputeTagsList, ArraySectionIdTag, OptionName >

Compute norms of tensors in the DataBox and write them to disk.

The L2 norm is computed as the RMS, so

\begin{align*} L_2(u)=\sqrt{\frac{1}{N}\sum_{i=0}^{N} u_i^2} \end{align*}

where $$N$$ is the number of grid points.

The norm can be taken for each individual component, or summed over components. For the max/min it is then the max/min over all components, while for the L2 norm we have (for a 3d vector, 2d and 1d are similar)

\begin{align*} L_2(v^k)=\sqrt{\frac{1}{N}\sum_{i=0}^{N} \left[(v^x_i)^2 + (v^y_i)^2 + (v^z_i)^2\right]} \end{align*}

The L2 integral norm is:

$$L_{2,\mathrm{int}}(v^k) = \sqrt{\frac{1}{V}\int_\Omega \left[ (v^x_i)^2 + (v^y_i)^2 + (v^z_i)^2\right] \mathrm{d}V}$$

where $$V=\int_\Omega$$ is the volume of the entire domain in inertial coordinates.

VolumeIntegral only computes the volume integral without any normalization.

Here is an example of an input file:

R"(
ObserveNorms:
SubfileName: reduction0
TensorsToObserve:
- Name: Var0
NormType: Max
Components: Individual
- Name: Var1
NormType: Min
Components: Individual
- Name: Var0
NormType: Max
Components: Sum
- Name: Var0TimesTwo
NormType: Max
Components: Individual
- Name: Var0TimesThree
NormType: Max
Components: Individual
- Name: Var1
NormType: L2Norm
Components: Sum
- Name: Var1
NormType: L2IntegralNorm
Components: Sum
- Name: Var1
NormType: VolumeIntegral
Components: Sum
- Name: Var1
NormType: L2Norm
Components: Individual
- Name: Var1
NormType: L2IntegralNorm
Components: Individual
- Name: Var1
NormType: VolumeIntegral
Components: Individual
- Name: Var1
NormType: Min
Components: Sum
)");
Note
The NonTensorComputeTags are intended to be used for Variables compute tags like Tags::DerivCompute
Array sections
This event supports sections (see Parallel::Section). Set the ArraySectionIdTag template parameter to split up observations into subsets of elements. The observers::Tags::ObservationKey<ArraySectionIdTag> must be available in the DataBox. It identifies the section and is used as a suffix for the path in the output file.
Option name
The OptionName template parameter is used to give the event a name in the input file. If it is not specified, the name defaults to "ObserveNorms". If you have multiple ObserveNorms events in the input file, you must specify a unique name for each one. This can happen, for example, if you want to observe norms the full domain and also over a section of the domain.

The documentation for this class was generated from the following file:
• src/ParallelAlgorithms/Events/ObserveNorms.hpp