public Device( double bandGap, double fermiLevel, double thickness, double builtInVoltage, double dielectricConstant, double thermalEmissionPrefactor, List <Defect> defects, int numPointsPosition, int numPointsEnergy, double tolerance) { BandGap = bandGap; FermiLevel = fermiLevel; Thickness = thickness; BuiltInVoltage = builtInVoltage; DielectricConstant = dielectricConstant; ThermalEmissionPrefactor = thermalEmissionPrefactor; Defects = defects; NumPointsPosition = numPointsPosition; NumPointsEnergy = numPointsEnergy; Tolerance = tolerance; EnergySpacing = 2 * BandGap / NumPointsEnergy; PositionSpacing = Thickness / NumPointsPosition; FermiDC = new double[NumPointsPosition]; PhiDC = new double[NumPointsPosition]; RhoDC = new double[NumPointsPosition]; FermiAC = new double[NumPointsPosition]; PhiAC = new double[NumPointsPosition]; RhoAC = new double[NumPointsPosition]; for (int i = 0; i < NumPointsPosition; i++) { FermiDC[i] = FermiLevel; FermiAC[i] = FermiLevel; } DensityOfStates = new DensityOfStates(this); RhoTable = new RhoTable(this); }
public RhoTable(Device device) { double bandGap = device.BandGap; StartEnergy = device.FermiLevel; NumPointsPosition = device.NumPointsPosition; NumPointsEnergy = device.NumPointsEnergy; DensityOfStates DensityOfStates = device.DensityOfStates; double positionSpacing = device.PositionSpacing; EnergySpacing = (StartEnergy - bandGap) / NumPointsEnergy; PrecalcRhoTable = new double[NumPointsPosition, NumPointsEnergy]; for (int i = 0; i < NumPointsPosition; i++) { double position = positionSpacing * i; for (int j = 1; j < NumPointsEnergy; j++) { double energy = StartEnergy + EnergySpacing * j; PrecalcRhoTable[i, j] = PrecalcRhoTable[i, j - 1] + DensityOfStates.GetDensityOfStates(energy, position) * -EnergySpacing; } } }
private double CalcX0() { return(Math.Sqrt(DielectricConstant / (Consts.ElementaryCharge * DensityOfStates.GetDensityOfStates(FermiLevel, 0)))); }