Add non-uniform generation profile.
Maybe first easy step would be arbitrary shape, and/or a simple exponential profile through the layer thickness corresponding to absorption profile.
For multilayers/devices, ideal would be some profile from a transfer matrix simulation, but I guess it would be fine to run a transfer a transfer matrix simulation on another program and input the result as an arbitrary profile to excimontec.
The most flexible way to implement this is to allow the user to import a file which has the desired absorption profile. This then allows the user to do a lot of different complex things if they wish, but Excimontec does not have to worry about those details. For example, it doesn't make sense to have a transfer matrix model built into Excimontec because it is beyond the scope of the tool and often you just want to use the same absorption profile over and over while tweaking other parameters.
My first thinking on implementation would be to add two parameters to the parameter file, Enable_absorption_profile_import and absorption_profile_file. When absorption profile import is enabled the program will try to the load the data in the absorption_profile_file from the working directory. The absorption_profile_file would need to indicate the absorption strength at each z-slice in the lattice. Then program would save this data into a vector and use this information when randomly generating the coordinates for creating a new exciton. The z coordinate generation would need to be biased using a probability distribution derived from the absorption profile.
This would be a nice feature to add into a subsequent minor release and so one key requirement is that parameter file format changes are implemented without breaking compatibility of previous parameter file versions. Doing this requires #83 is implemented to allow the program to recognize different parameter file formats associated with different release versions and then load them properly.