#ifndef WEAK_EQUATION_POISSON_H
#define WEAK_EQUATION_POISSON_H
#include <set>
#include <string>
#include "WeakEquation.h"
namespace ATC{
class WeakEquationPoisson : public WeakEquation {
public:
WeakEquationPoisson();
virtual ~WeakEquationPoisson(){};
virtual bool has_B_integrand(void) const {return true;}
virtual void B_integrand(const FIELD_MATS &fields,
const GRAD_FIELD_MATS &grad_fields,
const Material * material,
DENS_MAT_VEC &flux) const ;
virtual bool has_N_integrand(void) const {return true;}
virtual bool N_integrand(const FIELD_MATS &fields,
const GRAD_FIELD_MATS &grad_fields,
const Material * material,
DENS_MAT &flux) const ;
virtual bool has_BB_tangent_coefficients(void) const {return true;}
virtual void BB_tangent_coefficients(const FieldName field,
const FIELD_MATS &fields,
const Material * material,
DENS_MAT &coefs) const;
virtual bool has_NN_tangent_coefficients(void) const {return true;}
virtual void NN_tangent_coefficients(const FieldName field,
const FIELD_MATS &fields,
const Material * material,
DENS_MAT &coefs) const;
virtual std::set<std::string> needs_material_functions(void) const
{
std::set<std::string> needs;
needs.insert("electric_displacement");
needs.insert("electron_charge_density");
return needs;
}
};
class WeakEquationPoissonConstantRHS : public WeakEquationPoisson {
public:
WeakEquationPoissonConstantRHS();
virtual ~WeakEquationPoissonConstantRHS(){};
virtual bool has_B_integrand(void) const {return true;}
virtual void B_integrand(const FIELD_MATS &fields,
const GRAD_FIELD_MATS &grad_fields,
const Material * material,
DENS_MAT_VEC &flux) const
{ WeakEquationPoisson::B_integrand(fields, grad_fields, material, flux) ; }
virtual bool has_N_integrand(void) const {return true;}
virtual bool N_integrand(const FIELD_MATS &fields,
const GRAD_FIELD_MATS &grad_fields,
const Material * material,
DENS_MAT &flux) const ;
virtual bool has_NN_tangent_coefficients(void) const {return false;}
virtual void NN_tangent_coefficients(const FieldName field,
const FIELD_MATS &fields,
const Material * material,
DENS_MAT &coefs) const {};
virtual std::set<std::string> needs_material_functions(void) const
{
std::set<std::string> needs;
needs.insert("electric_displacement");
return needs;
}
};
}; #endif