Loading src/modules/GenericPropagation/GenericPropagationModule.cpp +1 −6 Original line number Diff line number Diff line Loading @@ -587,12 +587,7 @@ void GenericPropagationModule::initialize() { recombination_ = Recombination(config_, detector_->hasDopingProfile()); // Impact ionization model try { multiplication_ = ImpactIonization( config_.get<std::string>("multiplication_model"), temperature_, config_.get<double>("multiplication_threshold")); } catch(ModelError& e) { throw InvalidValueError(config_, "multiplication_model", e.what()); } multiplication_ = ImpactIonization(config_); // Check multiplication and step size larger than a picosecond: if(!multiplication_.is<NoImpactIonization>() && timestep_max_ > 0.001) { Loading src/modules/TransientPropagation/TransientPropagationModule.cpp +1 −6 Original line number Diff line number Diff line Loading @@ -101,12 +101,7 @@ void TransientPropagationModule::initialize() { trapping_ = Trapping(config_); // Impact ionization model try { multiplication_ = ImpactIonization( config_.get<std::string>("multiplication_model"), temperature_, config_.get<double>("multiplication_threshold")); } catch(ModelError& e) { throw InvalidValueError(config_, "multiplication_model", e.what()); } multiplication_ = ImpactIonization(config_); // Check multiplication and step size larger than a picosecond: if(!multiplication_.is<NoImpactIonization>() && timestep_ > 0.001) { Loading src/physics/ImpactIonization.hpp +25 −16 Original line number Diff line number Diff line Loading @@ -237,11 +237,16 @@ namespace allpix { /** * ImpactIonization constructor * @param model Name of the impact ionization model * @param config Configuration of the calling module * @param temperature Temperature for which the mobility model should be initialized * @param threshold Threshold electric field from which on multiplication is calculated */ ImpactIonization(const std::string& model, double temperature, double threshold) { ImpactIonization(const Configuration& config) { try { auto model = config.get<std::string>("multiplication_model", "none"); std::transform(model.begin(), model.end(), model.begin(), ::tolower); auto temperature = config.get<double>("temperature"); auto threshold = config.get<double>("multiplication_threshold"); if(model == "massey") { model_ = std::make_unique<Massey>(temperature, threshold); } else if(model == "overstraeten") { Loading @@ -256,6 +261,10 @@ namespace allpix { } else { throw InvalidModelError(model); } LOG(INFO) << "Selected impact ionization model \"" << model << "\""; } catch(const ModelError& e) { throw InvalidValueError(config, "multiplication_model", e.what()); } } /** Loading Loading
src/modules/GenericPropagation/GenericPropagationModule.cpp +1 −6 Original line number Diff line number Diff line Loading @@ -587,12 +587,7 @@ void GenericPropagationModule::initialize() { recombination_ = Recombination(config_, detector_->hasDopingProfile()); // Impact ionization model try { multiplication_ = ImpactIonization( config_.get<std::string>("multiplication_model"), temperature_, config_.get<double>("multiplication_threshold")); } catch(ModelError& e) { throw InvalidValueError(config_, "multiplication_model", e.what()); } multiplication_ = ImpactIonization(config_); // Check multiplication and step size larger than a picosecond: if(!multiplication_.is<NoImpactIonization>() && timestep_max_ > 0.001) { Loading
src/modules/TransientPropagation/TransientPropagationModule.cpp +1 −6 Original line number Diff line number Diff line Loading @@ -101,12 +101,7 @@ void TransientPropagationModule::initialize() { trapping_ = Trapping(config_); // Impact ionization model try { multiplication_ = ImpactIonization( config_.get<std::string>("multiplication_model"), temperature_, config_.get<double>("multiplication_threshold")); } catch(ModelError& e) { throw InvalidValueError(config_, "multiplication_model", e.what()); } multiplication_ = ImpactIonization(config_); // Check multiplication and step size larger than a picosecond: if(!multiplication_.is<NoImpactIonization>() && timestep_ > 0.001) { Loading
src/physics/ImpactIonization.hpp +25 −16 Original line number Diff line number Diff line Loading @@ -237,11 +237,16 @@ namespace allpix { /** * ImpactIonization constructor * @param model Name of the impact ionization model * @param config Configuration of the calling module * @param temperature Temperature for which the mobility model should be initialized * @param threshold Threshold electric field from which on multiplication is calculated */ ImpactIonization(const std::string& model, double temperature, double threshold) { ImpactIonization(const Configuration& config) { try { auto model = config.get<std::string>("multiplication_model", "none"); std::transform(model.begin(), model.end(), model.begin(), ::tolower); auto temperature = config.get<double>("temperature"); auto threshold = config.get<double>("multiplication_threshold"); if(model == "massey") { model_ = std::make_unique<Massey>(temperature, threshold); } else if(model == "overstraeten") { Loading @@ -256,6 +261,10 @@ namespace allpix { } else { throw InvalidModelError(model); } LOG(INFO) << "Selected impact ionization model \"" << model << "\""; } catch(const ModelError& e) { throw InvalidValueError(config, "multiplication_model", e.what()); } } /** Loading