LCOV - code coverage report
Current view: top level - src/actions - PolarPhaseFieldAction.C (source / functions) Hit Total Coverage
Test: idaholab/magpie: 5710af Lines: 110 111 99.1 %
Date: 2025-07-21 23:34:39 Functions: 3 3 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /**********************************************************************/
       2             : /*                     DO NOT MODIFY THIS HEADER                      */
       3             : /* MAGPIE - Mesoscale Atomistic Glue Program for Integrated Execution */
       4             : /*                                                                    */
       5             : /*            Copyright 2017 Battelle Energy Alliance, LLC            */
       6             : /*                        ALL RIGHTS RESERVED                         */
       7             : /**********************************************************************/
       8             : 
       9             : #include "PolarPhaseFieldAction.h"
      10             : #include "FEProblemBase.h"
      11             : #include "Factory.h"
      12             : 
      13             : registerMooseAction("MagpieApp", PolarPhaseFieldAction, "add_kernel");
      14             : registerMooseAction("MagpieApp", PolarPhaseFieldAction, "add_material");
      15             : 
      16             : InputParameters
      17           4 : PolarPhaseFieldAction::validParams()
      18             : {
      19           4 :   InputParameters params = Action::validParams();
      20           8 :   params.addParam<VariableName>("theta", "theta", "Theta order parameter");
      21           8 :   params.addParam<VariableName>("upsilon", "Upsilon", "Upsilon order parameter");
      22             : 
      23           8 :   params.addParam<Real>("L_theta", 1.0, "Mobility for the theta order parameter");
      24           8 :   params.addParam<Real>("L_upsilon", 1.0, "Mobility for the upsilon order parameter");
      25             : 
      26           8 :   params.addRequiredParam<Real>("a0", "Interpolation coefficient a0");
      27           8 :   params.addRequiredParam<Real>("a_A", "Interpolation coefficient a_A");
      28             : 
      29           8 :   params.addRequiredParam<Real>("a_beta", "Interpolation coefficient a_beta");
      30           8 :   params.addRequiredParam<Real>("a_theta", "Interpolation coefficient a_theta");
      31           8 :   params.addRequiredParam<Real>("a_phi", "Interpolation coefficient a_phi");
      32             : 
      33           8 :   params.addRequiredParam<Real>("beta10", "Gradient energy coefficient between solid 1 and melt");
      34           8 :   params.addRequiredParam<Real>("beta20", "Gradient energy coefficient between solid 2 and melt");
      35           8 :   params.addRequiredParam<Real>("beta21",
      36             :                                 "Gradient energy coefficient between solid 2 and solid 1");
      37             : 
      38           8 :   params.addRequiredParam<Real>("A10", "Barrier coefficient solid 1 and melt");
      39           8 :   params.addRequiredParam<Real>("A20", "Barrier coefficient solid 2 and melt");
      40           8 :   params.addRequiredParam<Real>("A21", "Barrier coefficient solid 2 and solid 1");
      41             : 
      42           8 :   params.addRequiredParam<Real>("G0", "Thermal energy of the melt");
      43           8 :   params.addRequiredParam<Real>("DeltaG10",
      44             :                                 "Difference in thermal energy between solid 1 and melt");
      45           8 :   params.addRequiredParam<Real>("DeltaG20",
      46             :                                 "Difference in thermal energy between solid 2 and melt");
      47             : 
      48           4 :   return params;
      49           0 : }
      50             : 
      51           4 : PolarPhaseFieldAction::PolarPhaseFieldAction(const InputParameters & parameters)
      52           4 :   : Action(parameters)
      53             : {
      54           4 : }
      55             : 
      56             : void
      57           8 : PolarPhaseFieldAction::act()
      58             : {
      59             :   // material property names
      60           8 :   const std::string psiL = _name + "_psiL";
      61           8 :   const std::string betaS0 = _name + "_betaS0";
      62           8 :   const std::string beta21phi = _name + "_beta21phi";
      63             : 
      64             :   // variables
      65           8 :   auto theta = getParam<VariableName>("theta");
      66           8 :   auto upsilon = getParam<VariableName>("upsilon");
      67             : 
      68           8 :   if (_current_task == "add_material")
      69             :   {
      70           4 :     const std::string prefix = _name + "_";
      71             :     {
      72           4 :       std::string name = "PolarPFMBetaS0";
      73           4 :       auto params = _factory.getValidParams(name);
      74           8 :       params.set<std::string>("f_name") = betaS0;
      75          12 :       params.set<std::vector<VariableName>>("theta") = {theta};
      76           4 :       params.applyParameters(parameters());
      77           4 :       _problem->addMaterial(name, _name + "_" + name, params);
      78           4 :     }
      79             :     {
      80           4 :       std::string name = "PolarPFMPhi";
      81           4 :       auto params = _factory.getValidParams(name);
      82           8 :       params.set<std::string>("f_name") = beta21phi;
      83          12 :       params.set<std::vector<VariableName>>("upsilon") = {upsilon};
      84           4 :       params.applyParameters(parameters());
      85           4 :       _problem->addMaterial(name, _name + "_" + name, params);
      86           4 :     }
      87             :     {
      88           4 :       std::string name = "PolarPFMPsiL";
      89           4 :       auto params = _factory.getValidParams(name);
      90           8 :       params.set<std::string>("f_name") = psiL;
      91          12 :       params.set<std::vector<VariableName>>("theta") = {theta};
      92          12 :       params.set<std::vector<VariableName>>("upsilon") = {upsilon};
      93           4 :       params.applyParameters(parameters());
      94           4 :       _problem->addMaterial(name, _name + "_" + name, params);
      95           4 :     }
      96             :   }
      97             : 
      98           8 :   if (_current_task == "add_kernel")
      99             :   {
     100             :     // upsilon
     101             :     {
     102           4 :       const std::string prefix = _name + "_upsilon_";
     103             :       {
     104           4 :         std::string name = "CoefTimeDerivative";
     105           4 :         auto params = _factory.getValidParams(name);
     106           8 :         params.set<NonlinearVariableName>("variable") = upsilon;
     107           8 :         params.set<Real>("Coefficient") = 1.0 / getParam<Real>("L_upsilon");
     108           4 :         _problem->addKernel(name, prefix + name, params);
     109           4 :       }
     110             :       {
     111           4 :         std::string name = "PolarPFMDerivative";
     112           4 :         auto params = _factory.getValidParams(name);
     113           8 :         params.set<NonlinearVariableName>("variable") = upsilon;
     114           8 :         params.set<MaterialPropertyName>("F") = psiL;
     115           4 :         _problem->addKernel(name, prefix + name, params);
     116           4 :       }
     117             :       {
     118           4 :         std::string name = "PolarPFMGradient";
     119           4 :         auto params = _factory.getValidParams(name);
     120           8 :         params.set<NonlinearVariableName>("variable") = upsilon;
     121          12 :         params.set<std::vector<VariableName>>("v") = {theta};
     122           8 :         params.set<MaterialPropertyName>("F") = beta21phi;
     123           4 :         _problem->addKernel(name, prefix + name, params);
     124           4 :       }
     125             :       {
     126           4 :         std::string name = "MatDiffusion";
     127           4 :         auto params = _factory.getValidParams(name);
     128           8 :         params.set<NonlinearVariableName>("variable") = upsilon;
     129           8 :         params.set<MaterialPropertyName>("diffusivity") = betaS0;
     130          12 :         params.set<std::vector<VariableName>>("args") = {theta};
     131           4 :         _problem->addKernel(name, prefix + name, params);
     132           4 :       }
     133             :     }
     134             : 
     135             :     // theta
     136             :     {
     137           4 :       const std::string prefix = _name + "_theta_";
     138             :       {
     139           4 :         std::string name = "CoefTimeDerivative";
     140           4 :         auto params = _factory.getValidParams(name);
     141           8 :         params.set<NonlinearVariableName>("variable") = theta;
     142           8 :         params.set<Real>("Coefficient") = 1.0 / getParam<Real>("L_theta");
     143           4 :         _problem->addKernel(name, prefix + name, params);
     144           4 :       }
     145             :       {
     146           4 :         std::string name = "PolarPFMDerivative";
     147           4 :         auto params = _factory.getValidParams(name);
     148           8 :         params.set<NonlinearVariableName>("variable") = theta;
     149           8 :         params.set<MaterialPropertyName>("F") = psiL;
     150           4 :         _problem->addKernel(name, prefix + name, params);
     151           4 :       }
     152             :       {
     153           4 :         std::string name = "PolarPFMGradient";
     154           4 :         auto params = _factory.getValidParams(name);
     155           8 :         params.set<NonlinearVariableName>("variable") = theta;
     156          12 :         params.set<std::vector<VariableName>>("v") = {theta};
     157           8 :         params.set<MaterialPropertyName>("F") = betaS0;
     158           4 :         _problem->addKernel(name, prefix + name, params);
     159           4 :       }
     160             :       {
     161           4 :         std::string name = "MatDiffusion";
     162           4 :         auto params = _factory.getValidParams(name);
     163           8 :         params.set<NonlinearVariableName>("variable") = theta;
     164           8 :         params.set<MaterialPropertyName>("diffusivity") = beta21phi;
     165          12 :         params.set<std::vector<VariableName>>("args") = {upsilon};
     166           4 :         _problem->addKernel(name, prefix + name, params);
     167           4 :       }
     168             :     }
     169             :   }
     170           8 : }

Generated by: LCOV version 1.14