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 "VectorIntegratedBC.h" 11 : #include "Assembly.h" 12 : #include "SubProblem.h" 13 : #include "SystemBase.h" 14 : #include "MooseVariableFE.h" 15 : #include "MooseVariableScalar.h" 16 : 17 : #include "libmesh/quadrature.h" 18 : 19 : InputParameters 20 57604 : VectorIntegratedBC::validParams() 21 : { 22 57604 : InputParameters params = IntegratedBCBase::validParams(); 23 57604 : return params; 24 : } 25 : 26 284 : VectorIntegratedBC::VectorIntegratedBC(const InputParameters & parameters) 27 : : IntegratedBCBase(parameters), 28 : MooseVariableInterface<RealVectorValue>(this, 29 : false, 30 : "variable", 31 : Moose::VarKindType::VAR_SOLVER, 32 : Moose::VarFieldType::VAR_FIELD_VECTOR), 33 568 : _var(*mooseVariable()), 34 284 : _normals(_assembly.normals()), 35 284 : _phi(_assembly.phiFace(_var)), 36 284 : _test(_var.phiFace()), 37 568 : _u(_is_implicit ? _var.sln() : _var.slnOld()) 38 : { 39 284 : addMooseVariableDependency(mooseVariable()); 40 284 : } 41 : 42 : void 43 513568 : VectorIntegratedBC::computeResidual() 44 : { 45 513568 : prepareVectorTag(_assembly, _var.number()); 46 : 47 1580928 : for (_qp = 0; _qp < _qrule->n_points(); _qp++) 48 5589472 : for (_i = 0; _i < _test.size(); _i++) 49 : { 50 4522112 : Real residual = _JxW[_qp] * _coord[_qp] * computeQpResidual(); 51 4522112 : _local_re(_i) += residual; 52 : } 53 : 54 513568 : accumulateTaggedLocalResidual(); 55 513568 : } 56 : 57 : void 58 0 : VectorIntegratedBC::computeJacobian() 59 : { 60 0 : prepareMatrixTag(_assembly, _var.number(), _var.number()); 61 : 62 0 : for (_qp = 0; _qp < _qrule->n_points(); _qp++) 63 0 : for (_i = 0; _i < _test.size(); _i++) 64 0 : for (_j = 0; _j < _phi.size(); _j++) 65 0 : _local_ke(_i, _j) += _JxW[_qp] * _coord[_qp] * computeQpJacobian(); 66 : 67 0 : accumulateTaggedLocalMatrix(); 68 0 : } 69 : 70 : void 71 66480 : VectorIntegratedBC::computeOffDiagJacobian(const unsigned int jvar_num) 72 : { 73 66480 : const auto & jvar = getVariable(jvar_num); 74 : 75 66480 : prepareMatrixTag(_assembly, _var.number(), jvar_num); 76 : 77 : // This (undisplaced) jvar could potentially yield the wrong phi size if this object is acting on 78 : // the displaced mesh 79 66480 : auto phi_size = jvar.dofIndices().size(); 80 : 81 273936 : for (_qp = 0; _qp < _qrule->n_points(); _qp++) 82 1342944 : for (_i = 0; _i < _test.size(); _i++) 83 6752640 : for (_j = 0; _j < phi_size; _j++) 84 : { 85 5617152 : if (_var.number() == jvar_num) 86 4165632 : _local_ke(_i, _j) += _JxW[_qp] * _coord[_qp] * computeQpJacobian(); 87 : else 88 1451520 : _local_ke(_i, _j) += _JxW[_qp] * _coord[_qp] * computeQpOffDiagJacobian(jvar_num); 89 : } 90 : 91 66480 : accumulateTaggedLocalMatrix(); 92 66480 : } 93 : 94 : void 95 0 : VectorIntegratedBC::computeOffDiagJacobianScalar(unsigned int jvar) 96 : { 97 0 : prepareMatrixTag(_assembly, _var.number(), jvar); 98 : 99 0 : MooseVariableScalar & jv = _sys.getScalarVariable(_tid, jvar); 100 0 : for (_qp = 0; _qp < _qrule->n_points(); _qp++) 101 0 : for (_i = 0; _i < _test.size(); _i++) 102 0 : for (_j = 0; _j < jv.order(); _j++) 103 0 : _local_ke(_i, _j) += _JxW[_qp] * _coord[_qp] * computeQpOffDiagJacobianScalar(jvar); 104 : 105 0 : accumulateTaggedLocalMatrix(); 106 0 : }