simudo.physics package¶
Submodules¶
simudo.physics.blackbody module¶
simudo.physics.electro_optical_process module¶
-
class
simudo.physics.electro_optical_process.
ElectroOpticalProcess
(**kwargs)[source]¶ Bases:
simudo.util.setattr_init_mixin.SetattrInitMixin
This class exists to represent both electro-optical process and purely electronic (dark) processes, such as nonradiative recombination.
-
pdd
¶ PoissonDriftDiffusion – Instance of
PoissonDriftDiffusion
.
-
get_alpha
(photon_energy)[source]¶ This method is called to get Beer-Lambert absorption coefficient alpha at a particular photon energy. Must return a UFL quantity on the PDD mesh, or
None
.User class must implement this.
-
get_alpha_by_optical_field
(optical_field)[source]¶ Exists as a separate method to make anisotropy possible.
By default just calls
self.get_alpha
.
-
get_band_generation_sign
(band)[source]¶ As the generation process intensifies (e.g., light intensity increases), does
band
lose or gain more carriers?The default implementation always returns
None
. User classes are expected to override this method.Note: If you are implementing a two-band process, you almost certainly want to inherit from
TwoBandEOPMixin
.Returns: sign – If the band participates in the process, returns +1
or-1
if it gains or loses carriers, respectively. Otherwise, returnNone
.Return type: object
-
get_generation_optical
(band)[source]¶ Compute carrier generation due to optical absorption, using absorption coefficient given by
get_alpha_by_optical_field()
and quantum yield given byget_quantum_yield()
.
-
get_generation_user
(band)[source]¶ This method is called to get the generation contribution to band
band
. Must return a UFL quantity on the PDD mesh.User class may override this. By default, this method just calls
get_generation_optical()
.Sign convention: The returned value is positive or negative if the band gains or loses carriers respectively.
This method will be called for every band in the system. You are strongly encouraged to use
get_band_generation_sign()
to determine whether the process causes a gain or a loss of carriers in bandband
, and whether the band participates in the process at all.
-
get_optical_generation
(photon_energy)[source]¶ Override for luminescent coupling. By default returns zero.
-
get_optical_generation_by_optical_field
(optical_field)[source]¶ Exists as a separate method to make anisotropy possible.
By default just calls
self.get_optical_generation
, and multiplies bysolid_angle
.
-
get_photon_flux_on_pdd_mesh
(optical_field)[source]¶ Returns optical photon flux, adapted onto PDD mesh. Use this accessor instead of reaching inside
optical.OpticalField
yourself.Parameters: optical_field ( optical.OpticalField
) – Optical field whose photon flux (clipped to be nonnegative) to get.
-
get_quantum_yield_by_optical_field
(optical_field)[source]¶ Exists as a separate method to make anisotropy possible.
By default just calls
self.get_quantum_yield
.
-
mesh_util
¶
-
unit_registry
¶
-
-
class
simudo.physics.electro_optical_process.
NonOverlappingTopHatBeerLambert
(**kwargs)[source]¶ Bases:
simudo.physics.electro_optical_process.AbsorptionAndRadiativeRecombinationEOPMixin
,simudo.physics.electro_optical_process.RadiativeEOPMixin
,simudo.physics.electro_optical_process.TwoBandEOPMixin
,simudo.physics.electro_optical_process.ElectroOpticalProcess
Absorption or radiative recombination between src_band and dst_band. For absorption, src_band=VB and dst_band=CB, and vice versa for recombination.
Includes radiative recombination by default.
-
name
= 'beer_lambert'¶
-
-
class
simudo.physics.electro_optical_process.
NonOverlappingTopHatBeerLambertIB
(**kwargs)[source]¶ Bases:
simudo.physics.electro_optical_process.AbsorptionAndRadiativeRecombinationEOPMixin
,simudo.physics.electro_optical_process.RadiativeEOPMixin
,simudo.physics.electro_optical_process.TrapEOPMixin
,simudo.physics.electro_optical_process.TwoBandEOPMixin
,simudo.physics.electro_optical_process.ElectroOpticalProcess
Absorption between intermediate band and regular band.
Includes radiative recombination by default.
Based on [Strandberg2011].
-
get_alpha
(photon_energy)[source]¶ This method is called to get Beer-Lambert absorption coefficient alpha at a particular photon energy. Must return a UFL quantity on the PDD mesh, or
None
.User class must implement this.
-
name
= 'beer_lambert_IB'¶
-
-
class
simudo.physics.electro_optical_process.
SRHRecombination
(**kwargs)[source]¶ Bases:
simudo.physics.electro_optical_process.DarkEOPMixin
,simudo.physics.electro_optical_process.TrapEOPMixin
,simudo.physics.electro_optical_process.TwoBandEOPMixin
,simudo.physics.electro_optical_process.ElectroOpticalProcess
SRH recombination. The destination band is the one losing carriers through recombination.
Typically, dst_band=CB and src_band=VB.
-
get_generation_user
(band)[source]¶ This method is called to get the generation contribution to band
band
. Must return a UFL quantity on the PDD mesh.User class may override this. By default, this method just calls
get_generation_optical()
.Sign convention: The returned value is positive or negative if the band gains or loses carriers respectively.
This method will be called for every band in the system. You are strongly encouraged to use
get_band_generation_sign()
to determine whether the process causes a gain or a loss of carriers in bandband
, and whether the band participates in the process at all.
-
name
= 'SRH'¶
-
tau_from_spatial
= True¶
-
trap_band
= None¶
-
-
class
simudo.physics.electro_optical_process.
NonRadiativeTrap
(**kwargs)[source]¶ Bases:
simudo.physics.electro_optical_process.DarkEOPMixin
,simudo.physics.electro_optical_process.TrapEOPMixin
,simudo.physics.electro_optical_process.TwoBandEOPMixin
,simudo.physics.electro_optical_process.ElectroOpticalProcess
Shockley Read Hall trapping process. Typically, trap_band = IB. If you do not have an explicit
Band
object for the traps concentration, useSRHRecombination
instead.See doc/ib.lyx.
-
get_generation_user
(band)[source]¶ This method is called to get the generation contribution to band
band
. Must return a UFL quantity on the PDD mesh.User class may override this. By default, this method just calls
get_generation_optical()
.Sign convention: The returned value is positive or negative if the band gains or loses carriers respectively.
This method will be called for every band in the system. You are strongly encouraged to use
get_band_generation_sign()
to determine whether the process causes a gain or a loss of carriers in bandband
, and whether the band participates in the process at all.
-
name
= 'nonradiative'¶
-
-
class
simudo.physics.electro_optical_process.
TrapEOPMixin
[source]¶ Bases:
object
Calculates properties involved in trapping, such as u1, tau, etc.
-
trap_band
¶ Band – Band doing the trapping.
-
reg_band
¶ Band – Non-trap band. e.g. CB or VB.
-
classmethod
easy_add_two_traps_to_pdd
(pdd, name_prefix, top_band, bottom_band, trap_band, **kwargs)[source]¶
-
reg_band
-
-
class
simudo.physics.electro_optical_process.
TwoBandEOPMixin
[source]¶ Bases:
object
Convenience mixin representing a generation process across two bands.
Sign convention: As the generation process intensifies, the destination band gains more carriers. The source band may gain or lose carriers depending on its carrier type.
-
src_band
¶ Band – Source band (which may gain or lose a carrier depending on the sign).
-
dst_band
¶ Band – Destination band (which always gains a carrier).
-
get_band_generation_sign
(band)[source]¶ Provides a non-trivial implementation of
ElectroOpticalProcess.get_band_generation_sign()
in the case of two active bands.See
TwoBandEOPMixin
for the sign convention.
-
-
class
simudo.physics.electro_optical_process.
RadiativeEOPMixin
[source]¶ Bases:
object
Calculates properties involved in radiative processes, such as trapping or recombination.
Only works in non-degenerate condition
exp((E_photon_min - mu_fi)/kT) >> 1
. See [Strandberg2011], page 3, under Eq. 6.
-
class
simudo.physics.electro_optical_process.
AbsorptionAndRadiativeRecombinationEOPMixin
[source]¶ Bases:
object
-
enable_radiative_recombination
= True¶
-
get_generation_user
(band)[source]¶ Call
get_generation_optical()
andget_radiative_recombination()
and add together their results accordingly.Only include the radiative recombination process if
enable_radiative_recombination
is true.
-
simudo.physics.material module¶
-
class
simudo.physics.material.
Material
(**kwargs)[source]¶ Bases:
simudo.util.setattr_init_mixin.SetattrInitMixin
Base material class.
Parameters: - problem_data (
problem_data.ProblemData
, optional) – ProblemData instance (used to pull, for example, the temperature variable). - unit_registry (
pint.UnitRegistry
, optional) – Unit registry.
-
name
¶ str, optional – Material name.
-
dict
¶
-
get_dict
()[source]¶ Construct dictionary of material parameters.
Returns: Dictionary where keys are add_rule()
keys, and values are the values (expressions).Return type: dict
-
name
= None
-
pdd
¶
-
temperature
¶
-
unit_registry
¶
- problem_data (
-
class
simudo.physics.material.
SimpleSiliconMaterial
(**kwargs)[source]¶ Bases:
simudo.physics.material.Material
Very simple silicon material. No temperature dependences.
-
get_dict
()[source]¶ Construct dictionary of material parameters.
Returns: Dictionary where keys are add_rule()
keys, and values are the values (expressions).Return type: dict
-
name
= 'Si'¶
-
-
class
simudo.physics.material.
BadSimpleSiliconMaterial
(**kwargs)[source]¶ Bases:
simudo.physics.material.SimpleSiliconMaterial
Just an example of how to use inheritance to selectively modify properties of the superclass
-
get_dict
()[source]¶ Construct dictionary of material parameters.
Returns: Dictionary where keys are add_rule()
keys, and values are the values (expressions).Return type: dict
-
name
= 'badSi'¶
-
simudo.physics.optical module¶
-
class
simudo.physics.optical.
Optical
(**kwargs)[source]¶ Bases:
simudo.physics.problem_data_child.DefaultProblemDataChildMixin
,simudo.physics.poisson_drift_diffusion.GetToSaveMixin
,simudo.util.setattr_init_mixin.SetattrInitMixin
Contains optical part of the problem. Note that unlike PDD, the optical fields are solved independent (self-consistently), so we do not have a big mixed space made up of all the photon flux fields.
Parameters: - problem_data – See
problem_data
. - mesh_data (optional) – See
mesh_data
.
-
problem_data
¶ ProblemData
– Parent problem.
-
mesh_data
¶ MeshData
– Mesh data. Taken fromproblem_data
if not specified.
-
fields
¶ NameDict
– Dictionary ofOpticalField
objects.
-
spatial
¶ spatial.Spatial
– Object managing boundary conditions and spatial quantities.
-
Phi_scale
¶ dolfin.Constant
– This controls the scaling factor applied to light photon flux boundary conditions. This is particularly useful when doing a light ramp-up.
-
Phi_pddproj_space
¶
-
Phi_scale
-
fields
-
get_to_save
()[source]¶ Get dict of functions needed to restore a solution from file, or to save in a backtracking/adaptive solver.
The default implementation returns an empty NameDict.
Returns: NameDict of SaveItem
.Return type: NameDict
-
spatial
- problem_data – See
-
class
simudo.physics.optical.
OpticalField
(**kwargs)[source]¶ Bases:
simudo.util.setattr_init_mixin.SetattrInitMixin
A single optical field subproblem. This represents a scalar photon flux at a single wavelength and direction of propagation.
Parameters: - optical (
Optical
) – Parent object. - key (str) – Name of optical field. Must be unique.
- photon_energy (
pint.Quantity
) – Photon energy. Magnitude must be floating point constant. - direction (
numpy.ndarray
) – Direction of propagation. Must be a normalized vector. - solid_angle (float) – Solid angle spanned by this optical field. The sum of all solid angles at a given wavelength must sum up to .
-
Phi
¶ pint.Quantity
wrappingdolfin.Function
– Photon flux field. This function is on the optical mesh.
-
alpha
¶ pint.Quantity
wrapping expression – Absorption/extinction coefficient. This quantity is on the optical mesh (and may be a result of a projection/interpolation from the PDD mesh).
-
g
¶ pint.Quantity
wrapping expression – Additional generation (excluding-alpha*Phi
). This quantity is on the optical mesh (and may be a result of a projection/interpolation from the PDD mesh).
-
Phi_pddproj
¶ pint.Quantity
ofdolfin.Function
– Projected/interpolated version ofPhi
on the PDD mesh. To update the projection, callupdate_output()
.
-
Phi_pddproj_clipped
¶ pint.Quantity
wrapping expression – Clipped version ofPhi_pddproj
that is always nonnegative.
Notes
TODO: write down radiative transfer equation
-
Phi_pddproj
-
Phi_pddproj_clipped
-
alpha
-
function_subspace_registry
¶
-
g
-
get_alpha_pdd_expr
()[source]¶ This represents the extinction coefficient on the PDD mesh, as extracted from the
poisson_drift_diffusion.ElectroOpticalProcess
instances inelectro_optical_processes
.
-
get_g_pdd_expr
()[source]¶ This represents the optical generation on the PDD mesh (excluding the loss through the extinction coefficient), as extracted from the
poisson_drift_diffusion.ElectroOpticalProcess
instances inelectro_optical_processes
.
-
mesh_util
¶
-
mixed_function_helper
¶
-
mixed_function_solution_object
¶
-
name
¶
-
pdd
¶
-
spatial
¶
-
unit_registry
¶
-
update_output
()[source]¶ Update output quantities (e.g. by projecting onto PDD mesh).
This updates
Phi_pddproj
.
-
vacuum_wavelength
¶ Computes vacuum wavelength based on
photon_energy
. Can also be used to initialize that property, with the conversion being done automatically.
- optical (
-
class
simudo.physics.optical.
OpticalFieldMSORTE
(**kwargs)[source]¶ Bases:
simudo.physics.optical1.OpticalFieldMSORTE
,simudo.fem.function_space.WithSubfunctionsMixin
,simudo.physics.optical.OpticalField
,simudo.physics.poisson_drift_diffusion.GetToSaveMixin
-
class
simudo.physics.optical.
AbsorptionRangesHelper
(**kwargs)[source]¶ Bases:
simudo.util.setattr_init_mixin.SetattrInitMixin
Parameters: - problem_data – Problem_data object.
- inf_upper_bound – Upper bound on absorption to use instead of literal ‘inf’. By default 100 eV.
- energy_unit – By default, eV.
-
bands
¶
-
energy_unit
¶
-
get_transition_bounds
()[source]¶ Returns dictionary of (lower, upper) bounds for energy transitions. See
get_transition_lower_bounds()
for more.
-
get_transition_lower_bounds
()[source]¶ Returns a dictionary of minimum transition lower bounds. The keys in the dictionary are frozensets
{source_band_key, destination_band_key}
.
-
inf_upper_bound
¶
-
unit_registry
¶
simudo.physics.poisson_drift_diffusion module¶
-
class
simudo.physics.poisson_drift_diffusion.
SaveItem
(**kwargs)[source]¶ Bases:
simudo.util.setattr_init_mixin.SetattrInitMixin
-
file_save
= True¶
-
name
= None¶
-
solver_save
= False¶
-
value
= None¶
-
-
class
simudo.physics.poisson_drift_diffusion.
PoissonDriftDiffusion
(**kwargs)[source]¶ Bases:
simudo.physics.problem_data_child.DefaultProblemDataChildMixin
,simudo.physics.poisson_drift_diffusion.GetToSaveMixin
,simudo.util.setattr_init_mixin.SetattrInitMixin
Parameters: - problem_data – See
problem_data
. - mesh_data (optional) – See
mesh_data
.
-
problem_data
¶ ProblemData
– Parent problem.
-
mesh_data
¶ MeshData
– Mesh data. Taken fromproblem_data
if not specified.
-
electro_optical_processes
¶ NameDict
– Dictionary ofElectroOpticalProcess
instances, including dark generation/recombination mechanisms like SRH.
-
mixed_function_helper
¶ MixedFunctionHelper – Mixed function and related registry.
-
add_band
(cls, kwargs)[source]¶ Instantiate and add band. You probably want to use
easy_add_band()
instead.
-
bands
-
easy_add_band
(name, band_type=None, sign='auto')[source]¶ Shortcut for instantiating and adding a band.
Parameters: - name (str) – Name of the band.
- band_type (str or class or None) –
Can be a string, or a band class (inheriting from
Band
). If it is a string, it serves as an alias as defined below:- ”nondegenerate”, “boltzmann” ->
MixedQflNondegenerateBand
- ”degenerate”, “parabolic” ->
MixedQflDegenerateBand
(not implemented yet) - ”intermediate”, “sharp” ->
MixedQflIntermediateBand
If None, the type will be deduced from the band name:
- ”CB”, “VB” -> “nondegenerate”
- ”IB” -> “intermediate”
- ”nondegenerate”, “boltzmann” ->
- sign (+1, -1, None, or "auto") –
The sign of the charge carrier for this band (negative for electrons, positive for holes).
- If “auto”, the sign will be deduced from the name of the band.
- If None, the sign keyword argument will not be passed to be band object constructor.
Returns: band – Band object.
Return type:
-
electro_optical_processes
-
get_subspace_descriptors_for_solution_space
()[source]¶ Used by
self.mixed_function_helper
to build the mixed function space.
-
get_to_save
()[source]¶ Get dict of functions needed to restore a solution from file, or to save in a backtracking/adaptive solver.
The default implementation returns an empty NameDict.
Returns: NameDict of SaveItem
.Return type: NameDict
-
kT
¶ Shortcut for , where is the Boltzmann constant, and is the temperature (
temperature
).
-
mixed_function_helper
-
mixed_function_space
¶
-
poisson
-
spatial
¶
- problem_data – See
-
class
simudo.physics.poisson_drift_diffusion.
Poisson
(**kwargs)[source]¶ Bases:
simudo.physics.poisson_drift_diffusion1.Poisson
,simudo.fem.function_space.WithSubfunctionsMixin
,simudo.physics.poisson_drift_diffusion.GetToSaveMixin
,simudo.util.setattr_init_mixin.SetattrInitMixin
,simudo.physics.poisson_drift_diffusion.TypicalFromPDDMixin
Base class for Poisson part of the problem. You should instead look at one of the subclasses, such as
MixedPoisson
.-
key
¶ str – Unique key used to prefix subfunctions.
-
pdd
¶ PoissonDriftDiffusion – Parent object.
-
phi
¶ pint.Quantity – Electrostatic potential.
-
E
¶ pint.Quantity – Electric field.
-
rho
¶ pint.Quantity – Charge density.
-
thermal_equilibrium_phi
¶ pint.Quantity – Electrostatic potential at thermal equilibrium (i.e. when all qfls are equal to zero).
-
at_thermal_equilibrium
¶
-
get_to_save
()[source]¶ Get dict of functions needed to restore a solution from file, or to save in a backtracking/adaptive solver.
The default implementation returns an empty NameDict.
Returns: NameDict of SaveItem
.Return type: NameDict
-
key
= 'poisson'
-
permittivity
¶
-
thermal_equilibrium_phi
-
-
class
simudo.physics.poisson_drift_diffusion.
MixedPoisson
(**kwargs)[source]¶ Bases:
simudo.physics.poisson_drift_diffusion.InitializeFromByAttributesMixin
,simudo.physics.poisson_drift_diffusion.MixedMethodPoissonMixin
,simudo.physics.poisson_drift_diffusion.Poisson
-
class
simudo.physics.poisson_drift_diffusion.
Band
(**kwargs)[source]¶ Bases:
simudo.physics.poisson_drift_diffusion1.Band
,simudo.fem.function_space.WithSubfunctionsMixin
,simudo.physics.poisson_drift_diffusion.GetToSaveMixin
,simudo.physics.poisson_drift_diffusion.TypicalFromPDDMixin
,simudo.util.setattr_init_mixin.SetattrInitMixin
- Represents a band where its carriers are at thermal equilibrium
- with each other (such that a quasifermi level is well defined).
-
name
¶ str – Name of this band. Must be unique among
PoissonDriftDiffusion.bands
as it is used as a key in thatNameDict
. By default simply an alias forkey
, so you do not need to set it.
-
key
¶ str – Unique key used to prefix subfunctions.
-
pdd
¶ PoissonDriftDiffusion – Parent object.
-
u
¶ Carrier density in this band.
-
qfl
¶ Quasi-Fermi level, aka imref, of carriers in this band.
-
j
¶ Current density through this band.
-
sign
¶ Sign of the charge carriers;
-1
for electrons, and+1
for holes.
-
mobility
¶ Band mobility. By default taken from
.spatial
.
-
g
¶
-
name
-
subfunctions_info
= ()¶
-
class
simudo.physics.poisson_drift_diffusion.
NondegenerateBand
(**kwargs)[source]¶ Bases:
simudo.physics.poisson_drift_diffusion1.NondegenerateBand
,simudo.physics.poisson_drift_diffusion.Band
This represents a nondegenerate band obeying Boltzmann statistics (instead of Fermi-Dirac as it would be for a proper degenerate band), with an effective density of states
effective_density_of_states
() at an energy levelenergy_level
().The defining relationship is
where
s
isBand.sign
,w
isBand.qfl
,q
is the elementary charge,kT
isPoissonDriftDiffusion.kT
,- is
Poisson.phi
.
-
effective_energy_level
¶ In a nondegenerate band, by default the
energy_level
is assumed to include degeneracy effects, so this just returns that attribute.
-
class
simudo.physics.poisson_drift_diffusion.
IntermediateBand
(**kwargs)[source]¶ Bases:
simudo.physics.poisson_drift_diffusion.DegeneracyMixin
,simudo.physics.poisson_drift_diffusion1.IntermediateBand
,simudo.physics.poisson_drift_diffusion.Band
This represents an intermediate band with an energetically sharp density of states, where all
number_of_states
() states are concentrated at an energy levelenergy_level
().The number of carriers obeys Fermi-Dirac statistics. The defining relationship is therefore
where
s
isBand.sign
,w
isBand.qfl
,q
is the elementary charge,kT
isPoissonDriftDiffusion.kT
,- is
Poisson.phi
, and - .
Note that state degeneracy is handled through
DegeneracyMixin
.-
number_of_states
¶ Number of states in the intermediate band. The carrier concentration in this band can never be higher than this number. By default taken from
spatial
.
-
energy_level
¶ Band energy level. By default inherited from
DegeneracyMixin.energy_level
.
-
class
simudo.physics.poisson_drift_diffusion.
MixedQflNondegenerateBand
(**kwargs)[source]¶ Bases:
simudo.physics.poisson_drift_diffusion.InitializeFromByAttributesMixin
,simudo.physics.poisson_drift_diffusion.MixedQflBandMixin
,simudo.physics.poisson_drift_diffusion.NondegenerateBand
-
class
simudo.physics.poisson_drift_diffusion.
MixedQflIntermediateBand
(**kwargs)[source]¶ Bases:
simudo.physics.poisson_drift_diffusion.InitializeFromByAttributesMixin
,simudo.physics.poisson_drift_diffusion.MixedQflBandMixin
,simudo.physics.poisson_drift_diffusion.IntermediateBand
-
class
simudo.physics.poisson_drift_diffusion.
MixedDensityNondegenerateBand
(**kwargs)[source]¶ Bases:
simudo.physics.poisson_drift_diffusion.InitializeFromByAttributesMixin
,simudo.physics.poisson_drift_diffusion.MixedDensityBandMixin
,simudo.physics.poisson_drift_diffusion.NondegenerateBand
simudo.physics.problem_data module¶
-
class
simudo.physics.problem_data.
ProblemData
(**kwargs)[source]¶ Bases:
simudo.util.setattr_init_mixin.SetattrInitMixin
Parameters: - goal (str) – Represents the goal of this problem. Must be
"local charge neutrality"
,"thermal equilibrium"
, or"full"
(representing full coupled solution). - unit_registry (
pint.UnitRegistry
) – Unit registry to use. - mesh_data (
MeshData
) – Mesh data to use by default inPoissonDriftDiffusion
andOptical
.
-
pdd
¶ PoissonDriftDiffusion
– Poisson and electronic transport.
-
function_space_cache
¶
-
function_subspace_registry
¶
-
goal_abbreviated
¶ return abbreviated goal, for logging tag purposes
-
optical
-
pdd
- goal (str) – Represents the goal of this problem. Must be
simudo.physics.problem_data_child module¶
simudo.physics.steppers module¶
-
class
simudo.physics.steppers.
NonequilibriumCoupledConstantStepper
(**kwargs)[source]¶ Bases:
simudo.fem.adaptive_stepper.ConstantStepperMixin
,simudo.physics.steppers.NonequilibriumCoupledStepper
-
class
simudo.physics.steppers.
NonequilibriumCoupledStepper
(**kwargs)[source]¶ Bases:
simudo.fem.adaptive_stepper.AdaptiveStepper
Adaptively solve a coupled poisson-drift diffusion-optical problem.
The optical problem can be solved self-consistently with the drift-diffusion problem.
Parameters: - solution (
ProblemData
) – Solution on which to operate. This solution object will be progressively re-solved at each of the target parameter values. - selfconsistent_optics (bool) – If True, the optical problem will be re-solved at every Newton iteration, allowing for problems where optical absorption and carrier concentrations are interdependent.
- output_writer (
OutputWriter
) – Ifoutput_writer
is a string, it is used as a filename to be passed to the default OutputWriter object. Ifoutput_writer
is an object inherited from OutputWriter, this object will be used instead. If None, then no output is written. Output will be written after each target_value is solved.
-
to_save_objects
¶
- solution (
-
class
simudo.physics.steppers.
OpticalIntensityAdaptiveStepper
(**kwargs)[source]¶ Bases:
simudo.physics.steppers.NonequilibriumCoupledConstantStepper
Adaptively increase the optical intensity by increasing
optical.Optical.Phi_scale
.-
constants
¶
-
parameter_target_values
¶
-
parameter_unit
¶
-
step_size
= 1e-30¶
-
update_parameter_failure_factor
= 0.2¶
-
update_parameter_success_factor
= 3¶
-
-
class
simudo.physics.steppers.
VoltageStepper
(**kwargs)[source]¶ Bases:
simudo.physics.steppers.NonequilibriumCoupledConstantStepper
Starting from an existing solution, which may be at thermal equilibrium or with previously applied bias of illumination, ramp the bias at one or more contacts.
-
step_size
= 0.1¶
-
update_parameter_failure_factor
= 0.5¶
-
update_parameter_success_factor
= 1.3¶
-