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 43 : AntitrappingCurrent::validParams() 16 : { 17 43 : InputParameters params = CoupledSusceptibilityTimeDerivative::validParams(); 18 43 : params.addClassDescription( 19 : "Kernel that provides antitrapping current at the interface for alloy solidification"); 20 43 : return params; 21 0 : } 22 : 23 23 : AntitrappingCurrent::AntitrappingCurrent(const InputParameters & parameters) 24 23 : : CoupledSusceptibilityTimeDerivative(parameters), _grad_v(coupledGradient("v")) 25 : { 26 23 : } 27 : 28 : Real 29 1252800 : AntitrappingCurrent::computeQpResidual() 30 : { 31 1252800 : const Real norm_sq = _grad_v[_qp].norm_sq(); 32 1252800 : if (norm_sq < libMesh::TOLERANCE) 33 : return 0.0; 34 : 35 721984 : return _F[_qp] * _v_dot[_qp] * _grad_v[_qp] * _grad_test[_i][_qp] / std::sqrt(norm_sq); 36 : } 37 : 38 : Real 39 1382400 : AntitrappingCurrent::computeQpJacobian() 40 : { 41 1382400 : const Real norm_sq = _grad_v[_qp].norm_sq(); 42 1382400 : if (norm_sq < libMesh::TOLERANCE) 43 : return 0.0; 44 : 45 791680 : return _dFdu[_qp] * _v_dot[_qp] * _grad_v[_qp] * _grad_test[_i][_qp] * _phi[_j][_qp] / 46 791680 : std::sqrt(norm_sq); 47 : } 48 : 49 : Real 50 1382400 : AntitrappingCurrent::computeQpOffDiagJacobian(unsigned int jvar) 51 : { 52 1382400 : const Real norm_sq = _grad_v[_qp].norm_sq(); 53 1382400 : 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 791680 : if (jvar == _v_var) 60 791680 : return (_F[_qp] * _dv_dot[_qp] * _grad_v[_qp] * _grad_test[_i][_qp] * _phi[_j][_qp] + 61 791680 : _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 791680 : _grad_phi[_j][_qp] / norm_sq + 64 791680 : _v_dot[_qp] * _grad_v[_qp] * _grad_test[_i][_qp] * _phi[_j][_qp] * 65 791680 : (*_dFdarg[cvar])[_qp]) / 66 791680 : 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 : }