File index_derivs.hxx

Definition of available derivative methods and registration within store

Copyright 2018 D.Dickinson, P.Hill, B.Dudson

Contact: Ben Dudson, bd512@york.ac.uk

This file is part of BOUT++.

BOUT++ is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

BOUT++ is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with BOUT++. If not, see http://www.gnu.org/licenses/.

Defines

DEFINE_STANDARD_DERIV_CORE(name, key, nGuards, type)
DEFINE_STANDARD_DERIV(name, key, nGuards, type)
DEFINE_UPWIND_DERIV_CORE(name, key, nGuards, type)
DEFINE_UPWIND_DERIV(name, key, nGuards, type)
DEFINE_FLUX_DERIV_CORE(name, key, nGuards, type)
DEFINE_FLUX_DERIV(name, key, nGuards, type)
DEFINE_STANDARD_DERIV_STAGGERED(name, key, nGuards, type)
DEFINE_UPWIND_DERIV_STAGGERED(name, key, nGuards, type)
DEFINE_FLUX_DERIV_STAGGERED(name, key, nGuards, type)
WRAP_ENUM(family, value)

Some helper defines for now that allow us to wrap up enums and the specific methods.

REGISTER_DERIVATIVE(name)
REGISTER_STAGGERED_DERIVATIVE(name)
REGISTER_STANDARD_DERIVATIVE(name, key, nGuards, type)
REGISTER_UPWIND_DERIVATIVE(name, key, nGuards, type)
REGISTER_FLUX_DERIVATIVE(name, key, nGuards, type)
REGISTER_STANDARD_STAGGERED_DERIVATIVE(name, key, nGuards, type)
REGISTER_STANDARD_DERIVATIVE_STAGGERED(name, key, nGuards, type)
REGISTER_UPWIND_STAGGERED_DERIVATIVE(name, key, nGuards, type)
REGISTER_UPWIND_DERIVATIVE_STAGGERED(name, key, nGuards, type)
REGISTER_FLUX_STAGGERED_DERIVATIVE(name, key, nGuards, type)
REGISTER_FLUX_DERIVATIVE_STAGGERED(name, key, nGuards, type)

Functions

std::ostream &operator<<(std::ostream &out, const metaData &meta)

Provide an easy way to report a Region’s statistics.

Variables

const BoutReal WENO_SMALL = 1.0e-8
struct metaData

Public Members

const char *key
const int nGuards
const DERIV derivType
template<typename FF>
class DerivativeType
#include <index_derivs.hxx>

Here we define a helper class that provides a means to use a supplied stencil using functor to calculate a derivative over the entire field. Note we currently have a different interface for some of the derivative types to avoid needing different classes to represent the different operations The use of a functor here makes it possible to wrap up metaData into the type as well.

Public Functions

template<DIRECTION direction, STAGGER stagger, int nGuards, typename T>
void standard(const T &var, T &result, const std::string &region) const
template<DIRECTION direction, STAGGER stagger, int nGuards, typename T>
void upwindOrFlux(const T &vel, const T &var, T &result, const std::string &region) const
BoutReal apply(const stencil &f) const
BoutReal apply(BoutReal v, const stencil &f) const
BoutReal apply(const stencil &v, const stencil &f) const

Public Members

const FF func = {}
const metaData meta = func.meta
struct registerMethod
#include <index_derivs.hxx>

Following code is for dealing with registering a method/methods for all template combinations, in conjunction with the template_combinations code.

Public Functions

template<typename Direction, typename Stagger, typename FieldTypeContainer, typename Method>
void operator()(Direction, Stagger, FieldTypeContainer, Method)