示例#1
0
        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);
        }
示例#2
0
        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;
                }
            }
        }
示例#3
0
 private double CalcX0()
 {
     return(Math.Sqrt(DielectricConstant / (Consts.ElementaryCharge * DensityOfStates.GetDensityOfStates(FermiLevel, 0))));
 }