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