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 "AntitrappingCurrent.h" 11 : 12 : registerMooseObject("PhaseFieldApp", AntitrappingCurrent); 13 : 14 : InputParameters 15 63 : AntitrappingCurrent::validParams() 16 : { 17 63 : InputParameters params = CoupledSusceptibilityTimeDerivative::validParams(); 18 63 : params.addClassDescription( 19 : "Kernel that provides antitrapping current at the interface for alloy solidification"); 20 63 : return params; 21 0 : } 22 : 23 33 : AntitrappingCurrent::AntitrappingCurrent(const InputParameters & parameters) 24 33 : : CoupledSusceptibilityTimeDerivative(parameters), _grad_v(coupledGradient("v")) 25 : { 26 33 : } 27 : 28 : Real 29 1533600 : AntitrappingCurrent::computeQpResidual() 30 : { 31 1533600 : const Real norm_sq = _grad_v[_qp].norm_sq(); 32 1533600 : if (norm_sq < libMesh::TOLERANCE) 33 : return 0.0; 34 : 35 883104 : return _F[_qp] * _v_dot[_qp] * _grad_v[_qp] * _grad_test[_i][_qp] / std::sqrt(norm_sq); 36 : } 37 : 38 : Real 39 1641600 : AntitrappingCurrent::computeQpJacobian() 40 : { 41 1641600 : const Real norm_sq = _grad_v[_qp].norm_sq(); 42 1641600 : if (norm_sq < libMesh::TOLERANCE) 43 : return 0.0; 44 : 45 939904 : return _dFdu[_qp] * _v_dot[_qp] * _grad_v[_qp] * _grad_test[_i][_qp] * _phi[_j][_qp] / 46 939904 : std::sqrt(norm_sq); 47 : } 48 : 49 : Real 50 1641600 : AntitrappingCurrent::computeQpOffDiagJacobian(unsigned int jvar) 51 : { 52 1641600 : const Real norm_sq = _grad_v[_qp].norm_sq(); 53 1641600 : if (norm_sq < libMesh::TOLERANCE) 54 : return 0.0; 55 : 56 : // get the coupled variable jvar is referring to 57 : const unsigned int cvar = mapJvarToCvar(jvar); 58 : 59 939904 : if (jvar == _v_var) 60 939904 : return (_F[_qp] * _dv_dot[_qp] * _grad_v[_qp] * _grad_test[_i][_qp] * _phi[_j][_qp] + 61 939904 : _F[_qp] * _v_dot[_qp] * _grad_test[_i][_qp] * _grad_phi[_j][_qp] - 62 : _F[_qp] * _v_dot[_qp] * _grad_v[_qp] * _grad_test[_i][_qp] * _grad_v[_qp] * 63 939904 : _grad_phi[_j][_qp] / norm_sq + 64 939904 : _v_dot[_qp] * _grad_v[_qp] * _grad_test[_i][_qp] * _phi[_j][_qp] * 65 939904 : (*_dFdarg[cvar])[_qp]) / 66 939904 : std::sqrt(norm_sq); 67 : 68 0 : return _v_dot[_qp] * _grad_v[_qp] * _grad_test[_i][_qp] * _phi[_j][_qp] * (*_dFdarg[cvar])[_qp] / 69 0 : std::sqrt(norm_sq); 70 : }