SolidStateDetectors.jl icon indicating copy to clipboard operation
SolidStateDetectors.jl copied to clipboard

Add IsotropicMobilityChargeDriftModel

Open Padniuk opened this issue 1 year ago • 8 comments

This model was called as IsotropicMobilityChargeDriftModel because it uses identity-like mobility tensor:

$$v_{i}^{e,h} = \mu_{ij}^{e,h}\cdot E_{i}^{e,h}=\mu^{e,h}\cdot E_{i}^{e,h}$$

The semiconductor should have material properties μ_e and μ_h. Like in example:

    ...
    μ_e = 1350u"cm^2/V/s",
    μ_h = 120u"cm^2/V/s"

The usage example is the following:

μ_e = sim.detector.semiconductor.material.μ_e
μ_h = sim.detector.semiconductor.material.μ_h

sim.detector = SolidStateDetector(sim.detector, IsotropicMobilityChargeDriftModel{T}(μ_e,μ_h))

I did not implement overload for configs or other type of args for the model, cause it is not needed for now.

Padniuk avatar Oct 17 '24 11:10 Padniuk

@fhagemann can we add a short test for this to CI without adding to much testing time?

oschulz avatar Oct 17 '24 13:10 oschulz

@Padniuk do not worry about the failing tests: these are because the tests are running on julia-1.11 instead of julia-1.10. There is a PR addressing this already: #419

Downgrade fails because some package versions are not allowed by julia-1.11 anymore. The x86 tests fail because Geant4 does not run on 32bit.

fhagemann avatar Oct 17 '24 15:10 fhagemann

  • I would maybe opt for a shorter name, something like IsotropicChargeDriftModel?
  • Am I correct in assuming that you don't expect any saturation at higher electric fields? If yes, does it make sense to build a model based on the Vl methods in ADLChargeDriftModel, just without the drift anisotropy (bascially getVe(...) = Vl(...) and getVh(...) = Vl(...))?
  • For ADLChargeDriftModel, we are reading parameters from a configuration file (see examples/example_config_files/ADLChargeDriftModel). I guess the mobility values in CdZnTe are temperature-dependent, so it would probably be best to feed these values via a configuration file as well or in code as you proposed:
    sim.detector = SolidStateDetector(sim.detector, IsotropicChargeDriftModel{T}(1350u"cm^2/(V*s)", 120u"cm^2/(V*s)"))
    

fhagemann avatar Oct 17 '24 15:10 fhagemann

@oschulz

  • Yes, that name suits better
  • The question is not easy. I use this model for temperatures 293K and voltages around 500V, or it is better to say, voltages with order around 500V. For such purposes, model shows realistic results. Of course, this model does not cover full temperature and electric field value ranges. It was implemented just to add the easiest description of semiconductor drift.
  • Yes, such functionality can be implemented

Padniuk avatar Oct 17 '24 16:10 Padniuk

Do you wanna add this or should I push changes to your PR?

fhagemann avatar Oct 17 '24 16:10 fhagemann

I will add these changes but a little bit later.

Padniuk avatar Oct 17 '24 16:10 Padniuk

Alright, thanks and no rush! :)

fhagemann avatar Oct 17 '24 16:10 fhagemann

The tests should not fail anymore with the next commit you push (#424)

fhagemann avatar Oct 20 '24 11:10 fhagemann

I just pushed a fix for the naming issue of CdZnTe in the Geant4 material list to main (#429). As a consequence, you now have a merge conflict in that file. Could you remove the part in your commit that updates the Geant4 extension?

fhagemann avatar Nov 05 '24 11:11 fhagemann