LCOV - code coverage report
Current view: top level - src/materials - INSMeltPoolMaterial.C (source / functions) Hit Total Coverage
Test: idaholab/malamute: 0e4c8a Lines: 42 55 76.4 %
Date: 2025-08-02 07:01:39 Functions: 3 3 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /****************************************************************************/
       2             : /*                        DO NOT MODIFY THIS HEADER                         */
       3             : /*                                                                          */
       4             : /* MALAMUTE: MOOSE Application Library for Advanced Manufacturing UTilitiEs */
       5             : /*                                                                          */
       6             : /*           Copyright 2021 - 2024, Battelle Energy Alliance, LLC           */
       7             : /*                           ALL RIGHTS RESERVED                            */
       8             : /****************************************************************************/
       9             : 
      10             : #include "INSMeltPoolMaterial.h"
      11             : 
      12             : registerADMooseObject("MalamuteApp", INSMeltPoolMaterial);
      13             : 
      14             : InputParameters
      15          16 : INSMeltPoolMaterial::validParams()
      16             : {
      17          16 :   InputParameters params = INSADStabilized3Eqn::validParams();
      18          16 :   params.addClassDescription("Computes extra residuals from melt pool for the INS equations.");
      19          32 :   params.addRequiredCoupledVar("level_set_gradient", "Regularized gradient of Level set variable");
      20          32 :   params.addRequiredCoupledVar("curvature", "Regularized curvature variable");
      21          32 :   params.addRequiredParam<Real>("surface_tension", "Surface tension coefficient.");
      22          32 :   params.addRequiredParam<Real>("thermal_capillary", "Thermalcapillary coefficient.");
      23          32 :   params.addRequiredParam<Real>("rho_l", "Liquid density.");
      24          32 :   params.addRequiredParam<Real>("rho_g", "Gas density.");
      25          16 :   return params;
      26           0 : }
      27             : 
      28          12 : INSMeltPoolMaterial::INSMeltPoolMaterial(const InputParameters & parameters)
      29             :   : INSADStabilized3Eqn(parameters),
      30          12 :     _grad_c(adCoupledVectorValue("level_set_gradient")),
      31          12 :     _temp(adCoupledValue("temperature")),
      32          12 :     _grad_temp(adCoupledGradient("temperature")),
      33          12 :     _curvature(adCoupledValue("curvature")),
      34          24 :     _permeability(getADMaterialProperty<Real>("permeability")),
      35          24 :     _sigma(getParam<Real>("surface_tension")),
      36          24 :     _sigmaT(getParam<Real>("thermal_capillary")),
      37          24 :     _delta_function(getADMaterialProperty<Real>("delta_function")),
      38          24 :     _heaviside_function(getADMaterialProperty<Real>("heaviside_function")),
      39          12 :     _melt_pool_momentum_source(declareADProperty<RealVectorValue>("melt_pool_momentum_source")),
      40          24 :     _rho(getADMaterialProperty<Real>("rho")),
      41          24 :     _rho_l(getParam<Real>("rho_l")),
      42          24 :     _rho_g(getParam<Real>("rho_g")),
      43          24 :     _melt_pool_mass_rate(getADMaterialProperty<Real>("melt_pool_mass_rate")),
      44          24 :     _saturated_vapor_pressure(getADMaterialProperty<Real>("saturated_vapor_pressure")),
      45          36 :     _f_l(getADMaterialProperty<Real>("liquid_mass_fraction"))
      46             : {
      47          12 : }
      48             : 
      49             : void
      50      362800 : INSMeltPoolMaterial::computeQpProperties()
      51             : {
      52      362800 :   INSADStabilized3Eqn::computeQpProperties();
      53             : 
      54      362800 :   _mass_strong_residual[_qp] +=
      55      725600 :       _melt_pool_mass_rate[_qp] * _delta_function[_qp] * (1.0 / _rho_g - 1.0 / _rho_l);
      56             : 
      57             :   ADRealVectorValue darcy_term =
      58      725600 :       -_permeability[_qp] * (1 - _heaviside_function[_qp]) * _velocity[_qp];
      59             : 
      60      362800 :   _melt_pool_momentum_source[_qp] = darcy_term;
      61             : 
      62      362800 :   ADRealVectorValue surface_tension_term = ADRealVectorValue(0.0);
      63      362800 :   ADRealVectorValue thermalcapillary_term = ADRealVectorValue(0.0);
      64      362800 :   RankTwoTensor iden(RankTwoTensor::initIdentity);
      65      362800 :   ADRankTwoTensor proj;
      66      362800 :   ADRealVectorValue normal = ADRealVectorValue(0.0);
      67             : 
      68      362800 :   if (MetaPhysicL::raw_value(_f_l[_qp]) > libMesh::TOLERANCE &&
      69           0 :       MetaPhysicL::raw_value(_delta_function[_qp]) > libMesh::TOLERANCE)
      70             :   {
      71           0 :     normal = _grad_c[_qp] /
      72           0 :              (_grad_c[_qp] + RealVectorValue(libMesh::TOLERANCE * libMesh::TOLERANCE)).norm();
      73             : 
      74           0 :     proj.vectorOuterProduct(normal, normal);
      75           0 :     proj = iden - proj;
      76             :     surface_tension_term =
      77           0 :         _sigma * _curvature[_qp] *
      78           0 :         (_grad_c[_qp] + RealVectorValue(libMesh::TOLERANCE * libMesh::TOLERANCE));
      79             : 
      80           0 :     thermalcapillary_term = -proj * _grad_temp[_qp] * _sigmaT * _delta_function[_qp];
      81             : 
      82           0 :     _melt_pool_momentum_source[_qp] += -thermalcapillary_term + surface_tension_term;
      83             : 
      84             :     // Recoil Pressure
      85           0 :     _melt_pool_momentum_source[_qp] -=
      86           0 :         0.55 * _saturated_vapor_pressure[_qp] *
      87           0 :         (_grad_c[_qp] + RealVectorValue(libMesh::TOLERANCE * libMesh::TOLERANCE));
      88             :   }
      89             : 
      90      362800 :   _momentum_strong_residual[_qp] -= _melt_pool_momentum_source[_qp];
      91      362800 : }

Generated by: LCOV version 1.14