LCOV - code coverage report
Current view: top level - src/materials - PolynomialFreeEnergy.C (source / functions) Hit Total Coverage
Test: idaholab/moose phase_field: #32971 (54bef8) with base c6cf66 Lines: 40 42 95.2 %
Date: 2026-05-29 20:38:39 Functions: 2 2 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 "PolynomialFreeEnergy.h"
      11             : 
      12             : registerMooseObject("PhaseFieldApp", PolynomialFreeEnergy);
      13             : 
      14             : InputParameters
      15         310 : PolynomialFreeEnergy::validParams()
      16             : {
      17         310 :   InputParameters params = DerivativeParsedMaterialHelper::validParams();
      18         310 :   params.addClassDescription("Polynomial free energy for single component systems");
      19         620 :   MooseEnum poly_order("4 6 8");
      20         620 :   params.addRequiredParam<MooseEnum>(
      21             :       "polynomial_order", poly_order, "Order of polynomial free energy");
      22         620 :   params.addParam<MaterialPropertyName>(
      23             :       "c_eq_name", "c_eq", "Name of material property storing the equilibrium concentration");
      24         620 :   params.addParam<MaterialPropertyName>(
      25             :       "W_name", "barr_height", "Name of the material property storing the barrier height");
      26         620 :   params.addRequiredCoupledVar("c", "Concentration");
      27         310 :   return params;
      28         310 : }
      29             : 
      30         240 : PolynomialFreeEnergy::PolynomialFreeEnergy(const InputParameters & parameters)
      31             :   : DerivativeParsedMaterialHelper(parameters),
      32         240 :     _c("c"),
      33         240 :     _a("c_eq_name"),
      34         240 :     _W("W_name"),
      35         960 :     _order(getParam<MooseEnum>("polynomial_order"))
      36             : {
      37         240 :   EBFunction free_energy;
      38             : 
      39             :   // Free energy
      40         240 :   switch (_order)
      41             :   {
      42          48 :     case 0: // 4th order
      43          48 :       free_energy(_c, _W, _a) = pow(2.0, 4.0) * _W * pow(_c - _a, 2) * pow(1 - _c - _a, 2);
      44          48 :       break;
      45          48 :     case 1: // 6th order
      46          96 :       free_energy(_c, _W, _a) = pow(2.0, 6.0) * _W *
      47          96 :                                 (2.0 * pow(_c, 6) - 6.0 * pow(_c, 5) +
      48         240 :                                  (3.0 * _a + 27.0 / 4.0 - 3.0 * _a * _a) * pow(_c, 4) +
      49         240 :                                  (-6.0 * _a - 7.0 / 2.0 + 6.0 * _a * _a) * pow(_c, 3) +
      50         240 :                                  (9.0 / 2.0 * _a - 9.0 / 2.0 * _a * _a + 3.0 / 4.0) * pow(_c, 2) +
      51         144 :                                  (3.0 / 2.0 * _a * _a - 3.0 / 2.0 * _a) * _c);
      52          48 :       break;
      53         144 :     case 2: // 8th order
      54         144 :       free_energy(_c, _W, _a) =
      55         288 :           pow(2.0, 8.0) * _W *
      56         432 :           (3.0 * pow(_c, 8) - 12.0 * pow(_c, 7) + (-4.0 * _a * _a + 4.0 * _a + 20.0) * pow(_c, 6) +
      57         720 :            (12.0 * _a * _a - 12.0 * _a - 18.0) * pow(_c, 5) +
      58         720 :            (15.0 * _a + 75.0 / 8.0 - 15.0 * _a * _a) * pow(_c, 4) +
      59         720 :            (-10.0 * _a - 11.0 / 4.0 + 10.0 * _a * _a) * pow(_c, 3) +
      60         720 :            (15.0 / 4.0 * _a - 15.0 / 4.0 * _a * _a + 3.0 / 8.0) * pow(_c, 2) +
      61         432 :            (3.0 / 4.0 * _a * _a - 3.0 / 4.0 * _a) * _c);
      62         144 :       break;
      63           0 :     default:
      64           0 :       mooseError("Error in PolynomialFreeEnergy: incorrect polynomial order");
      65             :   }
      66             : 
      67             :   // Parse function
      68         480 :   functionParse(free_energy, {}, {}, {"W_name", "c_eq_name"}, {}, {});
      69         240 : }

Generated by: LCOV version 1.14