PLaSK library

Loading...
Searching...
No Matches
freecarrier2d.hpp
Go to the documentation of this file.
1/*
2 * This file is part of PLaSK (https://plask.app) by Photonics Group at TUL
3 * Copyright (c) 2022 Lodz University of Technology
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, version 3.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 */
14#ifndef PLASK__SOLVER__GAIN_FREECARRIER_FREECARRIER2D_HPP
15#define PLASK__SOLVER__GAIN_FREECARRIER_FREECARRIER2D_HPP
16
17#include "freecarrier.hpp"
18
19 namespace plask { namespace gain { namespace freecarrier {
20
24 template <typename GeometryT>
25 struct PLASK_SOLVER_API FreeCarrierGainSolver2D : public FreeCarrierGainSolver<SolverWithMesh<GeometryT, MeshAxis>> {
26 using typename FreeCarrierGainSolver<SolverWithMesh<GeometryT, MeshAxis>>::ActiveRegionInfo;
27 using typename FreeCarrierGainSolver<SolverWithMesh<GeometryT, MeshAxis>>::ActiveRegionParams;
28 using typename FreeCarrierGainSolver<SolverWithMesh<GeometryT, MeshAxis>>::GeometryType;
29 using typename FreeCarrierGainSolver<SolverWithMesh<GeometryT, MeshAxis>>::GainSpectrumType;
30
31 FreeCarrierGainSolver2D(const std::string& name = "");
32
33 std::string getClassName() const override;
34
35 protected:
36 void detectActiveRegions() override;
37
38 template <typename DT> struct DataBase;
39 struct ComputedData;
40 struct GainData;
41 struct DgdnData;
42 struct EnergyLevelsData;
43
44 typedef DataBase<Tensor2<double>> DataBaseTensor2;
45 typedef DataBase<std::vector<double>> DataBaseVector;
46
47 const LazyData<Tensor2<double>> getGainData(Gain::EnumType what,
48 const shared_ptr<const MeshD<2>>& dst_mesh,
49 double wavelength,
50 InterpolationMethod interp = INTERPOLATION_DEFAULT) override;
51
52 const LazyData<std::vector<double>> getEnergyLevels(EnergyLevels::EnumType which,
53 const shared_ptr<const MeshD<2>>& dst_mesh,
54 InterpolationMethod interp = INTERPOLATION_DEFAULT) override;
55};
56
57}}} // namespace plask::gain::freecarrier
58
59#endif // PLASK__SOLVER__GAIN_FREECARRIER_FREECARRIER2D_HPP