Neko  0.9.99
A portable framework for high-order spectral element flow simulations
bdf_time_scheme::bdf_time_scheme_t Type Reference

Implicit backward-differencing scheme for time integration. More...

Inheritance diagram for bdf_time_scheme::bdf_time_scheme_t:
Collaboration diagram for bdf_time_scheme::bdf_time_scheme_t:

Public Member Functions

procedure, nopass compute_coeffs => bdf_time_scheme_compute_coeffs
 Compute the scheme coefficients. More...
 

Detailed Description

The explicit forumlas for the coefficients are taken from the following techincal note: "Derivation of BDF2/BDF3 for Variable Step Size" by Hiroaki Nishikawa, which can be found on ResearchGate.

For a contant time-step this corresponds to the following schemes for order 1 to 3:

  • Order 1: \( \frac{1}{\Delta t} u^{n+1} - \frac{1}{\Delta t} u^{n} \)
  • Order 2: \( \frac{3}{2\Delta t} u^{n+1} - \frac{4}{2\Delta t} u^{n} + \frac{1}{2\Delta t} u^{n-1}\)
  • Order 3: \( \frac{11}{6\Delta t} u^{n+1} - \frac{18}{6\Delta t} u^{n} + \frac{9}{6\Delta t} u^{n-1} - \frac{2}{6\Delta t} u^{n-2}\)

It is assumed that all the coefficients but the first one premultiply terms that go to the right-hand side of the equation. Accordingly, the signs of these coefficients are reversed in the coeffs array. This is taken into account, for example, in the implemeation of the rhs_maker class.

Another important convention is that the coefficients are meant to be later divided by the current value of the timestep.

In line with the above assumptions, the first order scheme always returns the array \([1, 1]\), and not \([1/\Delta t, -1/\Delta t]\), as one might expect. Similar for the second and third order.

Remarks
The current implementation can be easily extended to schemes of arbitrary order, by using the fd_weights_full subroutine to compute the coefficients. A demonstration of this is implemented in a test in tests/ext_bdf_scheme/test_bdf.pf

Definition at line 103 of file bdf_time_scheme.f90.

Member Function/Subroutine Documentation

◆ compute_coeffs()

procedure, nopass bdf_time_scheme::bdf_time_scheme_t::compute_coeffs

Definition at line 106 of file bdf_time_scheme.f90.


The documentation for this type was generated from the following file: