LCOV - code coverage report
Current view: top level - src/auxkernels - KKSMultiFreeEnergy.C (source / functions) Hit Total Coverage
Test: idaholab/moose phase_field: #31405 (292dce) with base fef103 Lines: 37 41 90.2 %
Date: 2025-09-04 07:55:36 Functions: 3 3 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 "KKSMultiFreeEnergy.h"
      11             : 
      12             : registerMooseObject("PhaseFieldApp", KKSMultiFreeEnergy);
      13             : 
      14             : InputParameters
      15         178 : KKSMultiFreeEnergy::validParams()
      16             : {
      17         178 :   InputParameters params = TotalFreeEnergyBase::validParams();
      18         178 :   params.addClassDescription("Total free energy in multi-phase KKS system, including chemical, "
      19             :                              "barrier and gradient terms");
      20         356 :   params.addRequiredParam<std::vector<MaterialPropertyName>>(
      21             :       "Fj_names",
      22             :       "List of free energies for each phase. Place in same order as hj_names and gj_names!");
      23         356 :   params.addRequiredParam<std::vector<MaterialPropertyName>>(
      24             :       "hj_names",
      25             :       "Switching Function Materials that provide h. Place in same order as Fj_names and gj_names!");
      26         356 :   params.addRequiredParam<std::vector<MaterialPropertyName>>(
      27             :       "gj_names",
      28             :       "Barrier Function Materials that provide g. Place in same order as Fj_names and hj_names!");
      29         356 :   params.addRequiredParam<Real>("w", "Double well height parameter");
      30         178 :   params.addParam<std::vector<MaterialPropertyName>>("kappa_names",
      31         178 :                                                      std::vector<MaterialPropertyName>(),
      32             :                                                      "Vector of kappa names corresponding to "
      33             :                                                      "each variable name in interfacial_vars "
      34             :                                                      "in the same order.");
      35         178 :   return params;
      36           0 : }
      37             : 
      38          93 : KKSMultiFreeEnergy::KKSMultiFreeEnergy(const InputParameters & parameters)
      39             :   : TotalFreeEnergyBase(parameters),
      40         186 :     _Fj_names(getParam<std::vector<MaterialPropertyName>>("Fj_names")),
      41          93 :     _num_j(_Fj_names.size()),
      42          93 :     _prop_Fj(_num_j),
      43         186 :     _hj_names(getParam<std::vector<MaterialPropertyName>>("hj_names")),
      44          93 :     _prop_hj(_num_j),
      45         186 :     _gj_names(getParam<std::vector<MaterialPropertyName>>("gj_names")),
      46          93 :     _prop_gj(_num_j),
      47         186 :     _w(getParam<Real>("w")),
      48         186 :     _kappas(_nkappas)
      49             : {
      50             :   // Check that same number of Fj, hj, and gj are passed in
      51          93 :   if (_hj_names.size() != _num_j)
      52           0 :     mooseError("Size of hj_names is not equal to size of Fj_names in KKSMultiFreeEnergy AuxKernel ",
      53             :                name());
      54          93 :   if (_gj_names.size() != _num_j)
      55           0 :     mooseError("Size of gj_names is not equal to size of Fj_names in KKSMultiFreeEnergy AuxKernel ",
      56             :                name());
      57             : 
      58             :   // get bulk properties
      59         315 :   for (unsigned int i = 0; i < _num_j; ++i)
      60             :   {
      61         222 :     _prop_Fj[i] = &getMaterialPropertyByName<Real>(_Fj_names[i]);
      62         222 :     _prop_hj[i] = &getMaterialPropertyByName<Real>(_hj_names[i]);
      63         222 :     _prop_gj[i] = &getMaterialPropertyByName<Real>(_gj_names[i]);
      64             :   }
      65             : 
      66             :   // Check to ensure size of interfacial_vars is the same as kappa_names
      67          93 :   if (_nvars != _nkappas)
      68           0 :     mooseError("Size of interfacial_vars is not equal to the size of kappa_names in "
      69             :                "KKSMultiFreeEnergy AuxKernel ",
      70             :                name());
      71             : 
      72             :   // Assign kappa values
      73         315 :   for (unsigned int i = 0; i < _nkappas; ++i)
      74         222 :     _kappas[i] = &getMaterialPropertyByName<Real>(_kappa_names[i]);
      75          93 : }
      76             : 
      77             : Real
      78     2051920 : KKSMultiFreeEnergy::computeValue()
      79             : {
      80             :   // Start with any additional energy contribution, which is 0 if not supplied
      81     2051920 :   Real total_energy = _additional_free_energy[_qp];
      82             :   // Add bulk energy contributions
      83     7784560 :   for (unsigned int i = 0; i < _num_j; ++i)
      84     5732640 :     total_energy += (*_prop_hj[i])[_qp] * (*_prop_Fj[i])[_qp] + _w * (*_prop_gj[i])[_qp];
      85             : 
      86             :   // Add interfacial energy of each variable
      87     7784560 :   for (unsigned int i = 0; i < _nvars; ++i)
      88     5732640 :     total_energy += (*_kappas[i])[_qp] / 2.0 * (*_grad_vars[i])[_qp].norm_sq();
      89             : 
      90     2051920 :   return total_energy;
      91             : }

Generated by: LCOV version 1.14