ATC version 2.0, date: Aug7
git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@10561 f3b2605a-c512-4ea7-a41b-209d697bcdaa
This commit is contained in:
95
lib/atc/WeakEquationPoisson.cpp
Normal file
95
lib/atc/WeakEquationPoisson.cpp
Normal file
@ -0,0 +1,95 @@
|
||||
#include "WeakEquationPoisson.h"
|
||||
#include "Material.h"
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
|
||||
namespace ATC {
|
||||
|
||||
//==============================================================
|
||||
// Class WeakEquationPoisson
|
||||
//==============================================================
|
||||
|
||||
// R = B^T flux + N source = 0
|
||||
// 0 = B^T perm B phi - N rho_+
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// Constructor
|
||||
//--------------------------------------------------------------
|
||||
WeakEquationPoisson::WeakEquationPoisson()
|
||||
: WeakEquation(STATIC_PDE,ELECTRIC_POTENTIAL,1)
|
||||
{}
|
||||
|
||||
//---------------------------------------------------------------------
|
||||
void WeakEquationPoisson::B_integrand(
|
||||
const FIELD_MATS &fields,
|
||||
const GRAD_FIELD_MATS &grad_fields,
|
||||
const Material * material,
|
||||
DENS_MAT_VEC &flux) const
|
||||
{
|
||||
// flux = - perm D_x phi
|
||||
material->electric_displacement(fields, grad_fields, flux);
|
||||
flux[0] *= -1;
|
||||
flux[1] *= -1;
|
||||
flux[2] *= -1;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------
|
||||
void WeakEquationPoisson::BB_tangent_coefficients(
|
||||
const FieldName field,
|
||||
const FIELD_MATS &fields,
|
||||
const Material* material,
|
||||
DENS_MAT &coefs) const
|
||||
{
|
||||
material->permittivity(fields,coefs); // convention evalues (B^T perm B) > 0
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------
|
||||
bool WeakEquationPoisson::N_integrand(
|
||||
const FIELD_MATS &fields,
|
||||
const GRAD_FIELD_MATS &grad_fields,
|
||||
const Material * material,
|
||||
DENS_MAT &flux) const
|
||||
{
|
||||
return material->electron_charge_density(fields,flux); // - N rho_+ = N n
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------
|
||||
void WeakEquationPoisson::NN_tangent_coefficients(
|
||||
const FieldName field,
|
||||
const FIELD_MATS &fields,
|
||||
const Material* material,
|
||||
DENS_MAT &coefs) const
|
||||
{
|
||||
material->D_electron_charge_density(ELECTRIC_POTENTIAL,fields,coefs);
|
||||
}
|
||||
|
||||
//==============================================================
|
||||
// Class WeakEquationPoissonConstantRHS
|
||||
//==============================================================
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// Constructor
|
||||
//--------------------------------------------------------------
|
||||
WeakEquationPoissonConstantRHS::WeakEquationPoissonConstantRHS()
|
||||
: WeakEquationPoisson()
|
||||
{}
|
||||
|
||||
//---------------------------------------------------------------------
|
||||
bool WeakEquationPoissonConstantRHS::N_integrand(
|
||||
const FIELD_MATS &fields,
|
||||
const GRAD_FIELD_MATS &grad_fields,
|
||||
const Material * material,
|
||||
DENS_MAT &flux) const
|
||||
|
||||
{
|
||||
FIELD_MATS::const_iterator nIter = fields.find(ELECTRON_DENSITY);
|
||||
if (nIter != fields.end()) {
|
||||
const DENS_MAT & n = nIter->second;
|
||||
flux = -1.0*n;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user