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 57646 : VectorIntegratedBC::validParams() 21 : { 22 57646 : InputParameters params = IntegratedBCBase::validParams(); 23 57646 : return params; 24 : } 25 : 26 305 : 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 610 : _var(*mooseVariable()), 34 305 : _normals(_assembly.normals()), 35 305 : _phi(_assembly.phiFace(_var)), 36 305 : _test(_var.phiFace()), 37 610 : _u(_is_implicit ? _var.sln() : _var.slnOld()) 38 : { 39 305 : addMooseVariableDependency(mooseVariable()); 40 305 : } 41 : 42 : void 43 518934 : VectorIntegratedBC::computeResidual() 44 : { 45 518934 : prepareVectorTag(_assembly, _var.number()); 46 : 47 1602054 : for (_qp = 0; _qp < _qrule->n_points(); _qp++) 48 5701296 : for (_i = 0; _i < _test.size(); _i++) 49 : { 50 4618176 : Real residual = _JxW[_qp] * _coord[_qp] * computeQpResidual(); 51 4618176 : _local_re(_i) += residual; 52 : } 53 : 54 518934 : accumulateTaggedLocalResidual(); 55 518934 : } 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 74960 : VectorIntegratedBC::computeOffDiagJacobian(const unsigned int jvar_num) 72 : { 73 74960 : const auto & jvar = getVariable(jvar_num); 74 : 75 74960 : 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 74960 : auto phi_size = jvar.dofIndices().size(); 80 : 81 308688 : for (_qp = 0; _qp < _qrule->n_points(); _qp++) 82 1514432 : for (_i = 0; _i < _test.size(); _i++) 83 7620800 : for (_j = 0; _j < phi_size; _j++) 84 : { 85 6340096 : if (_var.number() == jvar_num) 86 4699456 : _local_ke(_i, _j) += _JxW[_qp] * _coord[_qp] * computeQpJacobian(); 87 : else 88 1640640 : _local_ke(_i, _j) += _JxW[_qp] * _coord[_qp] * computeQpOffDiagJacobian(jvar_num); 89 : } 90 : 91 74960 : accumulateTaggedLocalMatrix(); 92 74960 : } 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 : }