Source code for phaseflow.backward_difference_formulas

""" **backward_difference_formulas.py** implements some BDF's for time discretization. """
import fenics


[docs]def apply_backward_euler(Delta_t, u): """ Apply the backward Euler (fully implicit, first order) time discretization method. """ u_t = (u[0] - u[1])/Delta_t return u_t
[docs]def apply_bdf2(Delta_t, u): """ Apply the Gear/BDF2 (fully implicit, second order) backward difference formula for time discretization. Here we use the variable time step size formula given by equation (12) from @article{eckert2004bdf2, title={A BDF2 integration method with step size control for elasto-plasticity}, author={Eckert, S and Baaser, H and Gross, D and Scherf, O}, journal={Computational Mechanics}, volume={34}, number={5}, pages={377--386}, year={2004}, publisher={Springer} } which we interpreted in the context of finite difference time discretizations in a PDE, rather than as an ODE solver, by comparing to the constant time step size BDF2 formula in @article{belhamadia2012enhanced, title={An enhanced mathematical model for phase change problems with natural convection}, author={Belhamadia, YOUSSEF and Kane, ABDOULAYE S and Fortin, ANDR{\'E}}, journal={Int. J. Numer. Anal. Model}, volume={3}, number={2}, pages={192--206}, year={2012} } Perhaps we could find a reference which derives variable time step size BDF2 in the context of finite difference time discretization, rather than in the context of ODE solvers. """ tau = Delta_t[0]/Delta_t[1] u_t = 1./Delta_t[0]*((1. + 2.*tau)/(1. + tau)*u[0] - (1. + tau)*u[1] + tau*tau/(1. + tau)*u[2]) return u_t