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 : }