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 "PerpendicularElectricFieldInterface.h" 11 : 12 : registerMooseObject("ElectromagneticsApp", PerpendicularElectricFieldInterface); 13 : 14 : InputParameters 15 164 : PerpendicularElectricFieldInterface::validParams() 16 : { 17 164 : InputParameters params = VectorInterfaceKernel::validParams(); 18 164 : params.addClassDescription( 19 : "VectorInterfaceKernel that implements the condition $\\epsilon_1 \\vec{E}_{1}^{\\perp} - " 20 : "\\epsilon_2 \\vec{E}_{2}^{\\perp} = \\sigma_f$"); 21 328 : params.addParam<Real>("free_charge", 0.0, "Free charge on the interface (default = 0)."); 22 328 : params.addParam<Real>( 23 328 : "primary_epsilon", 1.0, "Permittivity on the primary side of the interface (default = 1.0)."); 24 328 : params.addParam<Real>("secondary_epsilon", 25 328 : 1.0, 26 : "Permittivity on the secondary side of the interface (default = 1.0)."); 27 164 : return params; 28 0 : } 29 : 30 88 : PerpendicularElectricFieldInterface::PerpendicularElectricFieldInterface( 31 88 : const InputParameters & parameters) 32 : : VectorInterfaceKernel(parameters), 33 : 34 88 : _free_charge(getParam<Real>("free_charge")), 35 176 : _primary_eps(getParam<Real>("primary_epsilon")), 36 264 : _secondary_eps(getParam<Real>("secondary_epsilon")) 37 : { 38 88 : } 39 : 40 : Real 41 518400 : PerpendicularElectricFieldInterface::computeQpResidual(Moose::DGResidualType type) 42 : { 43 518400 : _u_perp = (_u[_qp] * _normals[_qp]) * _normals[_qp]; 44 518400 : _secondary_perp = (_neighbor_value[_qp] * _normals[_qp]) * _normals[_qp]; 45 518400 : _free_charge_dot_n = _free_charge * _normals[_qp]; 46 : 47 : Real res = 0; 48 : 49 518400 : switch (type) 50 : { 51 259200 : case Moose::Element: 52 259200 : res = _test[_i][_qp] * 53 : (_primary_eps * _u_perp - _secondary_eps * _secondary_perp - _free_charge_dot_n); 54 259200 : break; 55 : 56 259200 : case Moose::Neighbor: 57 259200 : res = _test_neighbor[_i][_qp] * 58 : -(_primary_eps * _u_perp - _secondary_eps * _secondary_perp - _free_charge_dot_n); 59 259200 : break; 60 : } 61 : 62 518400 : return res; 63 : } 64 : 65 : Real 66 6220800 : PerpendicularElectricFieldInterface::computeQpJacobian(Moose::DGJacobianType type) 67 : { 68 6220800 : _phi_u_perp = (_phi[_j][_qp] * _normals[_qp]) * _normals[_qp]; 69 6220800 : _phi_secondary_perp = (_phi_neighbor[_j][_qp] * _normals[_qp]) * _normals[_qp]; 70 : 71 : Real jac = 0; 72 : 73 6220800 : switch (type) 74 : { 75 1555200 : case Moose::ElementElement: 76 1555200 : jac = _test[_i][_qp] * _primary_eps * _phi_u_perp; 77 1555200 : break; 78 : 79 1555200 : case Moose::NeighborNeighbor: 80 1555200 : jac = _test_neighbor[_i][_qp] * _secondary_eps * _phi_secondary_perp; 81 1555200 : break; 82 : 83 1555200 : case Moose::NeighborElement: 84 1555200 : jac = _test_neighbor[_i][_qp] * -_primary_eps * _phi_u_perp; 85 1555200 : break; 86 : 87 1555200 : case Moose::ElementNeighbor: 88 1555200 : jac = _test[_i][_qp] * -_secondary_eps * _phi_secondary_perp; 89 1555200 : break; 90 : } 91 : 92 6220800 : return jac; 93 : }