snek5000.operators#

Operators#

Information regarding mesh, mathematical operators, and domain decomposition.

Functions

next_power(value[, base])

Compute the perfect power of base greater than or equal to value.

Classes

Operators([sim, params])

Container for parameters and writing box and

snek5000.operators.next_power(value, base=2)[source]#

Compute the perfect power of base greater than or equal to value.

Parameters
Return int

class snek5000.operators.Operators(sim=None, params=None)[source]#
Container for parameters and writing box and

SIZE files.

Note

Some values are not available as parameters and instead automatically computed for generating the SIZE file.

SIZE

properties

Comment

lelg

max_n_seq

Max. number of elements globally

lelt

max_n_loc

Max. number of elements per processor (should be not smaller
than lelg/lpmin, i.e.

lelx

max_nx

Automatically computed. Max. number of elements along x
direction for the global tensor product solver / dimensions.

lely

max_ny

Same as above for y direction.

lelz

max_nz

Same as above for z direction.

lorder

max_order_time

Max. temporal order
Automatically computed based
params.nek.general.time_stepper

lbelt

order_mhd

Automatically computed as
lelt if "MHD" in params.nek.problem_type.equation.

lpelt

order_linear

Automatically computed as
lelt if "linear" in params.nek.problem_type.equation.

lcvelt

order_cvode

Automatically computed as
lelt if params.nek.cvode._enabled is True

lx1m

order_mesh_solver

p-order for mesh solver. Automatically computed based
params.nek.general.stress_formulation and whether
Arbitrary Lagrangian-Eulerian (ALE) methods are used or not.

Note

We deliberately try not to use the variable names used in Nek5000, as those are ambiguously named.

Documentation for params.oper

Parameters for mesh description:

  • nx, ny, nz: int

    Number of elements in each directions

  • origin_x, origin_y, origin_z: float

    Starting coordinate of the mesh (default: 0.0)

  • ratio_x, ratio_y, ratio_z: float

    Mesh stretching ratio (default: 1.0)

  • Lx, Ly, Lz: float

    Length of the domain

Parameters for boundary conditions:

The following table matches counterpart of mandatory SIZE variables.

SIZE

params.oper

Comment

ldim

dim

Domain dimensions (2 or 3)

lpmin

nproc_min

Min MPI ranks

lpmax

nproc_max

Max MPI ranks

ldimt

scalars

Number of auxilary fields (minimum 1).

Documentation for params.oper.max

The following table matches counterpart of optional SIZE variables. These refer to upper bound number of something. The parameters are considered “optional” and would be ignored with the default values.

SIZE

params.oper.max

Comment

mxprev

dim_proj

Max. dimension of projection space

lgmres

dim_krylov

Max. dimension of Krylov space for GMRES

lhis

hist

Max. number of history (i.e. monitoring) points.

maxobj

obj

Max. number of objects?

lpert

perturb

Max. number of perturbations

toteq

scalars_cons

Max. conserved scalars

ldimt_proj

scalars_proj

Max. scalars for residual projection

nsessmax

sessions

Max. sessions to NEKNEK

Documentation for params.oper.elem

The following table relate to element configuration for certain operations. The parameters are considered “optional” (except for lx1 / order and lxd / coef_dealiasing which are mandatory) and would be ignored with the default values.

SIZE

params.oper.elem

Comment

lxd

coef_dealiasing

p-order 1 for over-integration. Automatically computed from float
coef_dealiasing. See order_dealiasing

lx1

order

p-order (avoid uneven and values <6).

lxo

order_out

Max. p-order on output (should be >= order. See order_out)

lx2

staggered

p-order for pressure. Automatically computed. See order_pressure
1

Polynomial order which means the number of GLL / GL points per element.

Documentation for params.oper.misc

Other miscellaneous parameters:

SIZE

params.oper.misc

Comment

lfdm

fast_diag

Equals to True for global tensor product solver (that uses fast
diagonalization method). False otherwise.
property max_n_seq#

Equivalent to lelg.

property max_n_loc#

Equivalent to lelt. The next integer greater than or equals max_n_seq / params.oper.nproc_min.

property max_nx#

Equivalent to lelx.

property max_ny#

Equivalent to lely.

property max_nz#

Equivalent to lelz.

property max_order_time#

Equivalent to lorder.

property nb_fields#

Used in .box file.

property order#

Equivalent to lx1. Controls the polynomial order of the velocity field.

Note

True polynomial order of the element is given by \(\mathbb{P}_N\) = lx1 - 1 = order - 1

property order_out#

Equivalent to lxo.

property order_dealiasing#

Equivalent to lxd.

property order_pressure#

Equivalent to lx2. Controls the order for the pressure field.

Note

The property order_pressure is determined by the value of params.oper.elem.staggered.

  • If staggered == “auto”:

    • If “lin” in problemtype_equation \(\implies \mathbb{P}_{N-2}\)

    • Else \(\implies \mathbb{P}_N\)

  • If staggered is True \(\implies \mathbb{P}_{N-2}\)

  • If staggered is False \(\implies \mathbb{P}_N\)

property order_mesh_solver#

Equivalent to lx1m.

Todo

Must include a condition to check if ALE methods are used or not.

property order_mhd#

Equivalent to lbelt.

property order_linear#

Equivalent to lpelt.

property order_cvode#

Equivalent to lcvelt.

memory_required()[source]#

According to Nek5000 FAQ the following estimate is made

lx1*ly1*lz1*lelt * 3000byte + lelg * 12byte + MPI + optional libraries
(e.g. CVODE)
Returns

memory_required – in bytes

Return type

int

produce_str_describing_oper()[source]#

Produce a string describing the mesh volume and number of elements.

produce_long_str_describing_oper(oper_method='Base')[source]#

Produce a multi-line string describing the mesh volume and number of elements.

info_box(comments='')[source]#

Gather information for writing a box file.

Return type

dict

write_box(template, fp=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>, comments='', **template_vars)[source]#

Write the .box file which is input for the genbox meshing tool.

Parameters
  • template (jinja2.environment.Template) – Template instance loaded from something like box.j2

  • fp (io.TextIOWrapper) – File handler to write to

  • comments (str) – Comments on top of the box file

  • template_vars (dict) – Keyword arguments passed while rendering the Jinja templates

write_size(template, fp=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>, comments='', **template_vars)[source]#

Write the SIZE file which is required for compilation.

Parameters
  • template (jinja2.environment.Template) – Template instance loaded from something like SIZE.j2

  • fp (io.TextIOWrapper) – File handler to write to

  • comments (str) – Comments on top of the SIZE file

  • template_vars (dict) – Keyword arguments passed while rendering the Jinja templates