Skip to content

Commit

Permalink
Move pieces relevant to laser welding to MOOSE
Browse files Browse the repository at this point in the history
  • Loading branch information
lindsayad committed Aug 23, 2023
1 parent 591913e commit a0eb331
Show file tree
Hide file tree
Showing 9 changed files with 986 additions and 0 deletions.
26 changes: 26 additions & 0 deletions modules/navier_stokes/include/bcs/DisplaceBoundaryBC.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/****************************************************************************/
/* DO NOT MODIFY THIS HEADER */
/* */
/* MALAMUTE: MOOSE Application Library for Advanced Manufacturing UTilitiEs */
/* */
/* Copyright 2021 - 2023, Battelle Energy Alliance, LLC */
/* ALL RIGHTS RESERVED */
/****************************************************************************/

#pragma once

#include "ADNodalBC.h"

class DisplaceBoundaryBC : public ADNodalBC
{
public:
static InputParameters validParams();

DisplaceBoundaryBC(const InputParameters & parameters);

protected:
virtual ADReal computeQpResidual() override;

const ADReal & _velocity;
const Real & _u_old;
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/****************************************************************************/
/* DO NOT MODIFY THIS HEADER */
/* */
/* MALAMUTE: MOOSE Application Library for Advanced Manufacturing UTilitiEs */
/* */
/* Copyright 2021 - 2023, Battelle Energy Alliance, LLC */
/* ALL RIGHTS RESERVED */
/****************************************************************************/

#pragma once

#include "ADVectorIntegratedBC.h"

class VaporRecoilPressureMomentumFluxBC : public ADVectorIntegratedBC
{
public:
static InputParameters validParams();

VaporRecoilPressureMomentumFluxBC(const InputParameters & parameters);

protected:
virtual ADReal computeQpResidual() override;

const ADMaterialProperty<Real> & _rc_pressure;
};
34 changes: 34 additions & 0 deletions modules/navier_stokes/src/bcs/DisplaceBoundaryBC.C
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/****************************************************************************/
/* DO NOT MODIFY THIS HEADER */
/* */
/* MALAMUTE: MOOSE Application Library for Advanced Manufacturing UTilitiEs */
/* */
/* Copyright 2021 - 2023, Battelle Energy Alliance, LLC */
/* ALL RIGHTS RESERVED */
/****************************************************************************/

#include "DisplaceBoundaryBC.h"

registerMooseObject("MalamuteApp", DisplaceBoundaryBC);

InputParameters
DisplaceBoundaryBC::validParams()
{
InputParameters params = ADNodalBC::validParams();
params.addClassDescription("For displacing a boundary");
params.addRequiredCoupledVar("velocity", "The velocity at which to displace");
return params;
}

DisplaceBoundaryBC::DisplaceBoundaryBC(const InputParameters & parameters)
: ADNodalBC(parameters),
_velocity(adCoupledNodalValue<Real>("velocity")),
_u_old(_var.nodalValueOld())
{
}

ADReal
DisplaceBoundaryBC::computeQpResidual()
{
return _u - (_u_old + this->_dt * _velocity);
}
37 changes: 37 additions & 0 deletions modules/navier_stokes/src/bcs/VaporRecoilPressureMomentumFluxBC.C
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/****************************************************************************/
/* DO NOT MODIFY THIS HEADER */
/* */
/* MALAMUTE: MOOSE Application Library for Advanced Manufacturing UTilitiEs */
/* */
/* Copyright 2021 - 2023, Battelle Energy Alliance, LLC */
/* ALL RIGHTS RESERVED */
/****************************************************************************/

#include "VaporRecoilPressureMomentumFluxBC.h"

registerMooseObject("MalamuteApp", VaporRecoilPressureMomentumFluxBC);

InputParameters
VaporRecoilPressureMomentumFluxBC::validParams()
{
InputParameters params = ADVectorIntegratedBC::validParams();
params.addClassDescription("Vapor recoil pressure momentum flux");
params.addParam<MaterialPropertyName>("rc_pressure_name", "rc_pressure", "The recoil pressure");
params.addCoupledVar("temperature", "The temperature on which the recoil pressure depends");
return params;
}

VaporRecoilPressureMomentumFluxBC::VaporRecoilPressureMomentumFluxBC(
const InputParameters & parameters)
: ADVectorIntegratedBC(parameters), _rc_pressure(getADMaterialProperty<Real>("rc_pressure_name"))
{
}

ADReal
VaporRecoilPressureMomentumFluxBC::computeQpResidual()
{
return _test[_i][_qp] *
ADRealVectorValue(
std::abs(_normals[_qp](0)), std::abs(_normals[_qp](1)), std::abs(_normals[_qp](2))) *
_rc_pressure[_qp];
}
52 changes: 52 additions & 0 deletions modules/navier_stokes/test/include/bcs/CrazyKCPlantFits.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
/****************************************************************************/
/* DO NOT MODIFY THIS HEADER */
/* */
/* MALAMUTE: MOOSE Application Library for Advanced Manufacturing UTilitiEs */
/* */
/* Copyright 2021 - 2023, Battelle Energy Alliance, LLC */
/* ALL RIGHTS RESERVED */
/****************************************************************************/

#pragma once

#include "ADMaterial.h"

/**
* A material that couples a material property
*/
class CrazyKCPlantFits : public ADMaterial
{
public:
static InputParameters validParams();

CrazyKCPlantFits(const InputParameters & parameters);

protected:
virtual void computeQpProperties();

const Real _c_mu0;
const Real _c_mu1;
const Real _c_mu2;
const Real _c_mu3;
const Real _Tmax;
const Real _Tl;
const Real _T90;
const Real _beta;
const Real _c_k0;
const Real _c_k1;
const Real _c_cp0;
const Real _c_cp1;
const Real _c_rho0;
const ADVariableValue & _temperature;
const ADVariableGradient & _grad_temperature;
ADMaterialProperty<Real> & _mu;
ADMaterialProperty<Real> & _k;
ADMaterialProperty<Real> & _cp;
ADMaterialProperty<Real> & _rho;
ADMaterialProperty<RealVectorValue> & _grad_k;

const Real _length_units_per_meter;
const Real _temperature_units_per_kelvin;
const Real _mass_units_per_kilogram;
const Real _time_units_per_second;
};
59 changes: 59 additions & 0 deletions modules/navier_stokes/test/include/bcs/CrazyKCPlantFitsBoundary.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
/****************************************************************************/
/* DO NOT MODIFY THIS HEADER */
/* */
/* MALAMUTE: MOOSE Application Library for Advanced Manufacturing UTilitiEs */
/* */
/* Copyright 2021 - 2023, Battelle Energy Alliance, LLC */
/* ALL RIGHTS RESERVED */
/****************************************************************************/

#pragma once

#include "ADMaterial.h"

/**
* A material that couples a material property
*/
class CrazyKCPlantFitsBoundary : public ADMaterial
{
public:
static InputParameters validParams();

CrazyKCPlantFitsBoundary(const InputParameters & parameters);

protected:
virtual void computeQpProperties();

const Real _ap0;
const Real _ap1;
const Real _ap2;
const Real _ap3;
const Real _bp0;
const Real _bp1;
const Real _bp2;
const Real _bp3;
const Real _Tb;
const Real _Tbound1;
const Real _Tbound2;

const ADVariableValue & _temperature;
const ADVariableGradient & _grad_temperature;

ADMaterialProperty<Real> & _rc_pressure;

const Real _alpha;
const Real _sigma0;
const Real _T0;
ADMaterialProperty<Real> & _surface_tension;
ADMaterialProperty<RealVectorValue> & _grad_surface_tension;
const MooseArray<ADPoint> & _ad_normals;
const MooseArray<ADReal> & _ad_curvatures;
ADMaterialProperty<RealVectorValue> & _surface_term_curvature;
ADMaterialProperty<RealVectorValue> & _surface_term_gradient1;
ADMaterialProperty<RealVectorValue> & _surface_term_gradient2;

const Real _length_units_per_meter;
const Real _temperature_units_per_kelvin;
const Real _mass_units_per_kilogram;
const Real _time_units_per_second;
};
118 changes: 118 additions & 0 deletions modules/navier_stokes/test/src/bcs/CrazyKCPlantFits.C
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
/****************************************************************************/
/* DO NOT MODIFY THIS HEADER */
/* */
/* MALAMUTE: MOOSE Application Library for Advanced Manufacturing UTilitiEs */
/* */
/* Copyright 2021 - 2023, Battelle Energy Alliance, LLC */
/* ALL RIGHTS RESERVED */
/****************************************************************************/

#include "CrazyKCPlantFits.h"

registerMooseObject("MalamuteApp", CrazyKCPlantFits);

InputParameters
CrazyKCPlantFits::validParams()
{
InputParameters params = ADMaterial::validParams();
params.addParam<Real>("c_mu0", 0.15616, "mu0 coefficient");
params.addParam<Real>("c_mu1", -3.3696e-5, "mu1 coefficient");
params.addParam<Real>("c_mu2", 1.0191e-8, "mu2 coefficient");
params.addParam<Real>("c_mu3", -1.0413e-12, "mu3 coefficient");
params.addParam<Real>("Tmax", 4000, "The maximum temperature");
params.addParam<Real>("Tl", 1623, "The liquidus temperature");
params.addParam<Real>(
"T90", 1528, "The T90 temperature (I don't know what this means physically)");
params.addParam<Real>("beta", 1e11, "beta coefficient");
params.addParam<Real>("c_k0", 10.7143, "k0 coefficient");
params.addParam<Real>("c_k1", 14.2857e-3, "k0 coefficient");
params.addParam<Real>("c_cp0", 425.75, "cp0 coefficient");
params.addParam<Real>("c_cp1", 170.833e-3, "cp1 coefficient");
params.addParam<Real>("c_rho0", 7.9e3, "The constant density");
params.addCoupledVar("temperature", 1., "The temperature");
params.addParam<MaterialPropertyName>(
"mu_name", "mu", "The name of the viscosity material property");
params.addParam<MaterialPropertyName>("k_name", "k", "The name of the thermal conductivity");
params.addParam<MaterialPropertyName>("cp_name", "cp", "The name of the thermal conductivity");
params.addParam<MaterialPropertyName>("rho_name", "rho", "The name of the thermal conductivity");
params.addParam<int>("length_unit_exponent",
0,
"The exponent of the length unit. If working in milimeters for example, "
"this number should be -3");
params.addParam<int>(
"temperature_unit_exponent",
0,
"The exponent of the temperature unit. If working in kili-Kelvin for example, "
"this number should be 3");
params.addParam<int>("mass_unit_exponent",
0,
"The exponent of the mass unit. If working in miligrams for example, "
"this number should be -9");
params.addParam<int>("time_unit_exponent",
0,
"The exponent of the time unit. If working in micro-seconds for example, "
"this number should be -6");
return params;
}

CrazyKCPlantFits::CrazyKCPlantFits(const InputParameters & parameters)
: ADMaterial(parameters),
_c_mu0(getParam<Real>("c_mu0")),
_c_mu1(getParam<Real>("c_mu1")),
_c_mu2(getParam<Real>("c_mu2")),
_c_mu3(getParam<Real>("c_mu3")),
_Tmax(getParam<Real>("Tmax")),
_Tl(getParam<Real>("Tl")),
_T90(getParam<Real>("T90")),
_beta(getParam<Real>("beta")),
_c_k0(getParam<Real>("c_k0")),
_c_k1(getParam<Real>("c_k1")),
_c_cp0(getParam<Real>("c_cp0")),
_c_cp1(getParam<Real>("c_cp1")),
_c_rho0(getParam<Real>("c_rho0")),
_temperature(adCoupledValue("temperature")),
_grad_temperature(adCoupledGradient("temperature")),
_mu(declareADProperty<Real>(getParam<MaterialPropertyName>("mu_name"))),
_k(declareADProperty<Real>(getParam<MaterialPropertyName>("k_name"))),
_cp(declareADProperty<Real>(getParam<MaterialPropertyName>("cp_name"))),
_rho(declareADProperty<Real>(getParam<MaterialPropertyName>("rho_name"))),
_grad_k(declareADProperty<RealVectorValue>("grad_" + getParam<MaterialPropertyName>("k_name"))),
_length_units_per_meter(1. / std::pow(10, getParam<int>("length_unit_exponent"))),
_temperature_units_per_kelvin(1. / std::pow(10, getParam<int>("temperature_unit_exponent"))),
_mass_units_per_kilogram(1. / std::pow(10, getParam<int>("mass_unit_exponent"))),
_time_units_per_second(1. / std::pow(10, getParam<int>("time_unit_exponent")))
{
}

void
CrazyKCPlantFits::computeQpProperties()
{
if (_temperature[_qp] < _Tl * _temperature_units_per_kelvin)
_mu[_qp] = _mass_units_per_kilogram / (_length_units_per_meter * _time_units_per_second) *
(_c_mu0 + _c_mu1 * _Tl + _c_mu2 * _Tl * _Tl + _c_mu3 * _Tl * _Tl * _Tl) *
(_beta + (1 - _beta) * (_temperature[_qp] - _T90 * _temperature_units_per_kelvin) /
((_Tl - _T90) * _temperature_units_per_kelvin));
else
{
ADReal That;
That = _temperature[_qp] / _temperature_units_per_kelvin > _Tmax
? _Tmax
: _temperature[_qp] / _temperature_units_per_kelvin;
_mu[_qp] = _mass_units_per_kilogram / (_length_units_per_meter * _time_units_per_second) *
(_c_mu0 + _c_mu1 * That + _c_mu2 * That * That + _c_mu3 * That * That * That);
}
_k[_qp] = (_c_k0 + _c_k1 / _temperature_units_per_kelvin * _temperature[_qp]) *
(_mass_units_per_kilogram * _length_units_per_meter /
(_temperature_units_per_kelvin * _time_units_per_second * _time_units_per_second *
_time_units_per_second));
_grad_k[_qp] = _c_k1 *
(_mass_units_per_kilogram * _length_units_per_meter /
(_temperature_units_per_kelvin * _temperature_units_per_kelvin *
_time_units_per_second * _time_units_per_second * _time_units_per_second)) *
_grad_temperature[_qp];
_cp[_qp] = (_c_cp0 + _c_cp1 / _temperature_units_per_kelvin * _temperature[_qp]) *
(_length_units_per_meter * _length_units_per_meter /
(_temperature_units_per_kelvin * _time_units_per_second * _time_units_per_second));
_rho[_qp] = _c_rho0 * _mass_units_per_kilogram /
(_length_units_per_meter * _length_units_per_meter * _length_units_per_meter);
}
Loading

0 comments on commit a0eb331

Please sign in to comment.