Commit 628a7629 authored by Simon Spannagel's avatar Simon Spannagel
Browse files

Mobility: add "constant" model for convenience

parent c82bf132
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -223,6 +223,21 @@ where $\mu_{m}(N)$ is the Masetti mobility from Equation~\eqref{eq:mob:mas}, and

This model can be selected in the configuration file via the parameter \parameter{mobility_model = "masetti_canali"}.

\subsection{Constant Mobility}

Some materials require constant charge carrier mobility values $\mu = \textrm{const}$.
This can be simulated with this model, which can be selected in the configuration file via the parameter \parameter{mobility_model = "constant"}.
It requires the additional configuration keys \parameter{mobility_electron} and \parameter{mobility_hole} to be present in the module configuration section, for example:

\begin{minted}[frame=single,framesep=3pt,breaklines=true,tabsize=2,linenos]{ini}
# Constant mobility for electrons and holes in CdZnTe:
mobility_model = "constant"
mobility_electron = 1000cm*cm/V/s
mobility_hole = 50cm*cm/V/s
\end{minted}

For more complex mobility dependencies the custom mobility model described below should be used.

\subsection{Custom Mobility Models}
\apsq provides the possibility to use fully custom mobility models.
In order to use a custom model, the parameter \parameter{mobility_model = "custom"} needs to be set in the configuration file.
+21 −0
Original line number Diff line number Diff line
@@ -281,6 +281,24 @@ namespace allpix {
        double alpha_;
    };

    /**
     * @ingroup Models
     * @brief Constant mobility of electrons and holes
     */
    class ConstantMobility : public MobilityModel {
    public:
        ConstantMobility(double electron_mobility, double hole_mobility)
            : electron_mobility_(electron_mobility), hole_mobility_(hole_mobility) {}

        double operator()(const CarrierType& type, double, double) const override {
            return (type == CarrierType::ELECTRON ? electron_mobility_ : hole_mobility_);
        };

    private:
        double electron_mobility_;
        double hole_mobility_;
    };

    /**
     * @ingroup Models
     * @brief Custom mobility model for charge carriers
@@ -374,6 +392,9 @@ namespace allpix {
                    model_ = std::make_unique<MasettiCanali>(temperature, doping);
                } else if(model == "arora") {
                    model_ = std::make_unique<Arora>(temperature, doping);
                } else if(model == "constant") {
                    model_ = std::make_unique<ConstantMobility>(config.get<double>("mobility_electron"),
                                                                config.get<double>("mobility_hole"));
                } else if(model == "custom") {
                    model_ = std::make_unique<Custom>(config, doping);
                } else {