LCOV - code coverage report
Current view: top level - src/timeintegrators - BDF2.C (source / functions) Hit Total Coverage
Test: idaholab/moose framework: #31706 (f8ed4a) with base bb0a08 Lines: 41 43 95.3 %
Date: 2025-11-03 17:23:24 Functions: 8 8 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : //* This file is part of the MOOSE framework
       2             : //* https://mooseframework.inl.gov
       3             : //*
       4             : //* All rights reserved, see COPYRIGHT for full restrictions
       5             : //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
       6             : //*
       7             : //* Licensed under LGPL 2.1, please see LICENSE for details
       8             : //* https://www.gnu.org/licenses/lgpl-2.1.html
       9             : 
      10             : #include "BDF2.h"
      11             : #include "NonlinearSystem.h"
      12             : 
      13             : registerMooseObject("MooseApp", BDF2);
      14             : 
      15             : InputParameters
      16       15587 : BDF2::validParams()
      17             : {
      18       15587 :   InputParameters params = TimeIntegrator::validParams();
      19       15587 :   params.addClassDescription(
      20             :       "Second order backward differentiation formula time integration scheme.");
      21       15587 :   return params;
      22           0 : }
      23             : 
      24         480 : BDF2::BDF2(const InputParameters & parameters)
      25             :   : TimeIntegrator(parameters),
      26         480 :     _weight(declareRestartableData<std::vector<Real>>("weight")),
      27         960 :     _solution_older(_sys.solutionState(2))
      28             : {
      29         480 :   _weight.resize(3);
      30         480 : }
      31             : 
      32             : void
      33       52572 : BDF2::preStep()
      34             : {
      35       52572 :   if (_t_step > 1)
      36             :   {
      37       43745 :     Real sum = _dt + _dt_old;
      38       43745 :     _weight[0] = 1. + _dt / sum;
      39       43745 :     _weight[1] = -sum / _dt_old;
      40       43745 :     _weight[2] = _dt * _dt / _dt_old / sum;
      41             :   }
      42       52572 : }
      43             : 
      44             : void
      45       19752 : BDF2::computeTimeDerivatives()
      46             : {
      47       19752 :   if (!_sys.solutionUDot())
      48           0 :     mooseError("BDF2: Time derivative of solution (`u_dot`) is not stored. Please set "
      49             :                "uDotRequested() to true in FEProblemBase befor requesting `u_dot`.");
      50             : 
      51       19752 :   NumericVector<Number> & u_dot = *_sys.solutionUDot();
      52       19752 :   if (_t_step == 1)
      53        3456 :     u_dot = *_solution;
      54             :   else
      55       16296 :     u_dot.zero();
      56       19752 :   computeTimeDerivativeHelper(u_dot, *_solution, _solution_old, _solution_older);
      57       19752 :   u_dot.close();
      58       19752 :   computeDuDotDu();
      59       19752 : }
      60             : 
      61             : void
      62     1145680 : BDF2::computeADTimeDerivatives(ADReal & ad_u_dot,
      63             :                                const dof_id_type & dof,
      64             :                                ADReal & /*ad_u_dotdot*/) const
      65             : {
      66     1145680 :   auto ad_sln = ad_u_dot;
      67     1145680 :   if (_t_step != 1)
      68     1005560 :     ad_u_dot = 0;
      69     1145680 :   computeTimeDerivativeHelper(ad_u_dot, ad_sln, _solution_old(dof), _solution_older(dof));
      70     1145680 : }
      71             : 
      72             : void
      73       16997 : BDF2::postResidual(NumericVector<Number> & residual)
      74             : {
      75       16997 :   residual += *_Re_time;
      76       16997 :   residual += *_Re_non_time;
      77       16997 :   residual.close();
      78       16997 : }
      79             : 
      80             : Real
      81       19752 : BDF2::duDotDuCoeff() const
      82             : {
      83       19752 :   if (_t_step == 1)
      84        3456 :     return 1;
      85             :   else
      86       16296 :     return _weight[0];
      87             : }

Generated by: LCOV version 1.14