1#ifndef G_COMPONENT_TCAD_BASE_H
2#define G_COMPONENT_TCAD_BASE_H
33 const std::string& datafilename);
46 const std::string& datfile2,
const double dv,
47 const std::string& label);
51 const std::string& datfile2,
const double dv,
52 const std::string& label) {
59 const double y,
const double z);
62 const std::string& datfile2,
63 const double dv,
const double t,
64 const std::string& label);
67 const std::string& datfile2,
const double dv,
68 const double t,
const std::string& label);
75 void GetRegion(
const size_t ireg, std::string& name,
bool& active)
const;
83 void SetMedium(
const std::string& material, Medium* m);
87 std::vector<size_t>& nodes)
const override;
89 bool& active)
const override;
106 bool SetDonor(
const size_t donorNumber,
const double exsec,
107 const double hxsec,
const double concentration);
110 const double hxsec,
const double concentration);
131 double& wx,
double& wy,
double& wz,
132 const std::string& label)
override;
134 const std::string& label)
override;
136 const std::string& label)
override {
138 static const std::vector<double> emptyVector;
142 const double t,
double& wx,
double& wy,
double& wz,
143 const std::string& label)
override;
145 const double z,
const double t,
146 const std::string& label)
override;
154 double& vx,
double& vy,
double& vz)
override;
155 bool HoleVelocity(
const double x,
const double y,
const double z,
double& vx,
156 double& vy,
double& vz)
override;
169 double& eta)
override;
171 double& eta)
override;
173 double& mu)
override;
175 double& mu)
override;
178 double& alpha)
override;
180 double& alpha)
override;
235 std::map<std::string, std::vector<std::array<double, N> > >
m_wfield;
236 std::map<std::string, std::vector<double> >
m_wpot;
238 std::map<std::string, std::vector<double> >
m_wshift;
241 std::map<std::string, std::vector<std::vector<std::array<double, N> > > >
243 std::map<std::string, std::vector<std::vector<double> > >
m_dwp;
245 std::map<std::string, std::vector<double> >
m_dwtf;
246 std::map<std::string, std::vector<double> >
m_dwtp;
288 std::array<double, 3>
m_bbMin = {{0., 0., 0.}};
289 std::array<double, 3>
m_bbMax = {{0., 0., 0.}};
300 return std::min(element.
type + 1, 4U);
302 virtual bool Interpolate(
const double x,
const double y,
const double z,
303 const std::vector<double>& field,
double& f) = 0;
304 virtual bool Interpolate(
const double x,
const double y,
const double z,
305 const std::vector<std::array<double, N> >& field,
306 double& fx,
double& fy,
double& fz) = 0;
311 std::array<bool, N>& mirr)
const;
313 for (
size_t i = 0; i < N; ++i) {
322 bool GetOffset(
const std::string& label,
double& dx,
double& dy,
326 bool ReadDataset(std::ifstream& datafile,
const std::string& dataset);
328 std::vector<std::array<double, N> >& wf,
329 std::vector<double>& wp);
bool HoleMobility(const double x, const double y, const double z, double &mu) override
std::map< std::string, std::vector< double > > m_dwtf
bool InBoundingBox(const std::array< double, N > &x) const
std::vector< double > m_hMobility
bool HasTownsendMap() const override
size_t GetNumberOfElements() const override
bool LoadGrid(const std::string &gridfilename)
bool HasMobilityMap() const override
void EnableTrapOccupationMap(const bool on=true)
Use the imported trapping map or not.
void GetRegion(const size_t ireg, std::string &name, bool &active) const
Get the name and "active volume" flag of a region.
void UnsetDriftRegion(const size_t ireg)
Make a region inactive.
ComponentTcadBase(const std::string &name)
Constructor.
std::vector< Defect > m_acceptors
virtual void FillTree()=0
bool GetElementRegion(const size_t i, size_t ®ion, bool &active) const override
std::vector< std::vector< float > > m_acceptorOcc
double WeightingPotential(const double x, const double y, const double z, const std::string &label) override
size_t FindRegion(const std::string &name) const
virtual bool Interpolate(const double x, const double y, const double z, const std::vector< double > &field, double &f)=0
bool GetElectronMobility(const double x, const double y, const double z, double &mob)
Get the electron mobility at a given point in the mesh.
bool HasVelocityMap() const override
bool GetElementNodes(const size_t i, std::vector< size_t > &nodes) const override
std::vector< std::vector< float > > m_donorOcc
std::vector< std::array< double, N > > m_vertices
bool GetHoleMobility(const double x, const double y, const double z, double &mob)
Get the hole mobility at a given point in the mesh.
bool SetWeightingField(const std::string &datfile1, const std::string &datfile2, const double dv, const std::string &label)
Import field maps defining the prompt weighting field and potential.
std::vector< Element > m_elements
void ComputeEtaFromTraps()
void EnableVelocityMap(const bool on)
Switch use of the imported velocity map on/off.
bool GetVoltageRange(double &vmin, double &vmax) override
bool SetDynamicWeightingPotential(const std::string &datfile1, const std::string &datfile2, const double dv, const double t, const std::string &label)
Import time-dependent weighting potentials at t >= 0.
bool HoleAttachment(const double x, const double y, const double z, double &eta) override
void SetMedium(const std::string &material, Medium *m)
Set the medium to be associated to all regions with a given material.
std::vector< double > m_eEta
std::vector< double > m_hAlpha
std::vector< Region > m_regions
bool ElectronMobility(const double x, const double y, const double z, double &mu) override
bool HoleTownsend(const double x, const double y, const double z, double &alpha) override
std::vector< double > m_eAlpha
bool LoadWeightingField(const std::string &datafilename, std::vector< std::array< double, N > > &wf, std::vector< double > &wp)
std::vector< std::array< double, N > > m_hVelocity
static unsigned int ElementVertices(const Element &element)
std::map< std::string, std::vector< std::vector< double > > > m_dwp
std::array< double, 3 > m_bbMax
bool ReadDataset(std::ifstream &datafile, const std::string &dataset)
std::map< std::string, std::vector< double > > m_wshift
static constexpr size_t nMaxVertices
bool SetDynamicWeightingField(const std::string &datfile1, const std::string &datfile2, const double dv, const double t, const std::string &label)
Import time-dependent weighting fields at t >= 0.
size_t GetNumberOfRegions() const
Get the number of regions in the device.
bool SetWeightingPotential(const std::string &datfile1, const std::string &datfile2, const double dv, const std::string &label)
Import field maps defining the prompt weighting field and potential.
std::vector< double > m_epot
bool LoadData(const std::string &datafilename)
void EnableAlphaMap(const bool on=true)
Use the imported impact ionisation map or not.
double HoleLifetime(const double x, const double y, const double z)
std::vector< std::array< double, N > > m_efield
std::map< std::string, std::vector< double > > m_wpot
std::vector< std::array< double, N > > m_eVelocity
std::vector< double > m_hLifetime
size_t GetNumberOfDonors()
Get the number of donor states found in the map.
bool GetOffset(const std::string &label, double &dx, double &dy, double &dz) const
const std::vector< double > & DelayedSignalTimes(const std::string &label) override
void MapCoordinates(std::array< double, N > &x, std::array< bool, N > &mirr) const
void PrintRegions() const
List all currently defined regions.
void EnableLifetimeMap(const bool on=true)
Use the imported lifetime map or not.
virtual bool Interpolate(const double x, const double y, const double z, const std::vector< std::array< double, N > > &field, double &fx, double &fy, double &fz)=0
void ComputeEtaFromLifetime()
bool SetAcceptor(const size_t acceptorNumber, const double exsec, const double hxsec, const double concentration)
Set the properties of an acceptor-type defect state.
ComponentTcadBase()=delete
Default constructor.
std::vector< double > m_hEta
bool ElectronAttachment(const double x, const double y, const double z, double &eta) override
std::vector< Defect > m_donors
size_t GetNumberOfAcceptors()
Get the number of acceptor states found in the map.
bool HasAttachmentMap() const override
bool SetWeightingFieldShift(const std::string &label, const double x, const double y, const double z)
Shift the maps of weighting field/potential for a given electrode with respect to the original mesh.
bool Initialise(const std::string &gridfilename, const std::string &datafilename)
Import mesh and field map from files.
std::vector< double > m_eMobility
virtual ~ComponentTcadBase()
Destructor.
void UpdatePeriodicity() override
void DelayedWeightingField(const double x, const double y, const double z, const double t, double &wx, double &wy, double &wz, const std::string &label) override
bool ElectronVelocity(const double x, const double y, const double z, double &vx, double &vy, double &vz) override
std::map< std::string, std::vector< std::vector< std::array< double, N > > > > m_dwf
double DelayedWeightingPotential(const double x, const double y, const double z, const double t, const std::string &label) override
void SetDriftRegion(const size_t ireg)
Make a region active ("driftable").
size_t GetNumberOfNodes() const override
bool HoleVelocity(const double x, const double y, const double z, double &vx, double &vy, double &vz) override
std::map< std::string, std::vector< double > > m_dwtp
bool SetDonor(const size_t donorNumber, const double exsec, const double hxsec, const double concentration)
Set the properties of a donor-type defect state.
void SetMedium(const size_t ireg, Medium *m)
Set the medium to be associated to a given region.
bool ElectronTownsend(const double x, const double y, const double z, double &alpha) override
void WeightingField(const double x, const double y, const double z, double &wx, double &wy, double &wz, const std::string &label) override
double ElectronLifetime(const double x, const double y, const double z)
std::array< double, 3 > m_bbMin
std::vector< double > m_eLifetime
std::map< std::string, std::vector< std::array< double, N > > > m_wfield
std::array< float, N > bbMin
std::array< float, N > bbMax
unsigned int vertex[nMaxVertices]