⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fowler_nordheim_emit.h

📁 pic 模拟程序!面向对象
💻 H
字号:
#ifndef	FOWLER_NORDHEIM_EMIT_H#define	FOWLER_NORDHEIM_EMIT_H/* ==================================================================== * Change Log for file  fowler_nordheim_emit.h   * * 3.01 (DavidB 10-03-02) Initial code.  This development effort was *                        funded by a contract from Cornell University *                        to Tech-X Corporation. * ==================================================================== */#include "ovector.h"#include "maxwelln.h"#include "vmaxwelln.h"#include "particle.h"#include "emitter.h"/** Class representing a conductor which undergoes field emission of *  electrons, according to the Fowler-Nordheim model. */class FowlerNordheimEmitter : public Emitter { protected:  /** Coefficient "A" of the Fowler-Nordheim field emission model.   *  This is set via the input file, with a default value of 1.5414e-06.   */  Scalar A_FN;  /** Coefficient "beta" of the Fowler-Nordheim field emission model.   *  This is set via the input file, with a default value of 1.   */  Scalar beta_FN;  /** Coefficient "B" of the Fowler-Nordheim field emission model.   *  This is set via the input file, with a default value of 6.8308e+09   */  Scalar B_FN;  /** Coefficient "C_v" of the Fowler-Nordheim field emission model.   *  This is set via the input file, with a default value of 0.   */  Scalar C_v_FN;  /** Coefficient "C_y" of the Fowler-Nordheim field emission model.   *  This is set via the input file, with a default value of 3.79e-05.   */  Scalar C_y_FN;  /** Function "y(E)" of the Fowler-Nordheim field emission model.   *  It has the form y = C_y * sqrt(E) / Phi_w, where E is the   *     normal component of the electric field in V/m and Phi_w   *     is the work function of the material in eV.   *  This is calculated dynamically, as required.   */  Scalar y_FN;  /** Function "v(y)" of the Fowler-Nordheim field emission model.   *  It has the form  v_y = 1. - C_v * y * y.   *  By default, C_v = 0 and v_y = 1.   *  This is calculated dynamically, as required.   */  Scalar v_y_FN;  /** The work function "Phi_w" of the Fowler-Nordheim field emission model.   *  This is set via the input file, with a default value of 4 eV.   */  Scalar Phi_w_FN;  /** The number of intervals to be used for xArray and FArray (below).   *  This is set via the input file, with a default value of 0.   *   *  In the default case, it is set here to be the # of cells along   *  the emitting boundary, which is the most reasonable thing to do.   *   *  If the value is less than 2, then it is set equal to 2.   */  int nIntervals;  MaxwellianFlux *maxwellian;  Scalar extra;  /** coordinates of 1st corner (MKS units)   */  Vector2 p1;  /** coordinates of 2nd corner (MKS units)   */  Vector2 p2;  /** 3-D vector pointing in direction normal to the emitter   */  Vector3 normal;  /** initialization flag   */  BOOL init;  /** inner radius (MKS units)   */  Scalar rMin;  /** outer radius (MKS units)   */  Scalar rMax;  /** small displacement to avoid particle being on boundary   */  Vector2 delta;  Vector2 deltaVertical;  Vector2 deltaHorizontal;  /** set up optimization variables   */  void	initialize();  /** used to handle spatially varying emission current   */  Scalar *xArray;  /** used to handle spatially varying emission current   */  Scalar *FArray;  /** integral of J(x) over the emitter surface   */  Scalar totalCurrent;  Scalar geomFactor(Scalar x) {    return (rweight) ? x : 1;  }  /**   * The function computeLocationArray() recomputes an array of equally    * spaced points mapping the cumulative distribution to position along   * the emitter.   *   * Note that geomFactor includes the radial nature, when using   * cylindrical geometry.   *   * The integration uses the Trapezoidal Rule.   */  void computeLocationArray();  Vector2 computeLocation();  Scalar getCurrentDensity(Scalar);  /**   *  The virtual method setPassives() is used to define the boundary   *  conditions for the fields.  By default, one would get a perfect   *  conductor.  Here, we explicitly use the function as implemented   *  in the Dielectric class, which essentially imposes no BC's on   *  the fields.   *   *  This is necessary, because we want particles to be emitted according   *  to the perpendicular electric field at the surface, without doing   *  anything to alter that field.  (Of course, particle emission will   *  self-consistently reduce the local field values.)   *   *  The FowlerNordheimEmitter boundary can thus be overlaid on other   *  boundaries, such as an Equipotential, without affecting them.   */  virtual void setPassives() {    Dielectric::setPassives();  } public:  FowlerNordheimEmitter(oopicList <LineSegment>* _segments,                        MaxwellianFlux*          _maxwellian,                        Scalar                   _np2c,                        Scalar                   _A_FN,                        Scalar                   _beta_FN,                        Scalar                   _B_FN,                        Scalar                   _C_v_FN,                        Scalar                   _C_y_FN,                        Scalar                   _Phi_w_FN,                        int                      _nIntervals);  virtual ~FowlerNordheimEmitter();  virtual ParticleList& emit(Scalar t,Scalar dt, Species *species);  void set_nIntervals(int n) {    nIntervals = n;    if (nIntervals < 2) nIntervals = 2;  }};#endif       // FOWLER_NORDHEIM_EMIT_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -