diff --git a/Doxyfile b/Doxyfile index bed2116..b41c6c0 100644 --- a/Doxyfile +++ b/Doxyfile @@ -1,4 +1,4 @@ -# Doxyfile 1.8.13 +# Doxyfile 1.8.14 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -20,8 +20,8 @@ # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all text # before the first occurrence of this tag. Doxygen uses libiconv (or the iconv -# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv -# for the list of possible encodings. +# built into libc) for the transcoding. See +# https://www.gnu.org/software/libiconv/ for the list of possible encodings. # The default value is: UTF-8. DOXYFILE_ENCODING = UTF-8 @@ -38,13 +38,13 @@ PROJECT_NAME = Excimontec # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = v1.0-beta.1 +PROJECT_NUMBER = v1.0-beta.3 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a # quick idea about the purpose of the project. Keep the description short. -PROJECT_BRIEF = "An open-source lattice KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more" +PROJECT_BRIEF = "An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more" # With the PROJECT_LOGO tag one can specify a logo or an icon that is included # in the documentation. The maximum height of the logo should not exceed 55 @@ -337,7 +337,7 @@ BUILTIN_STL_SUPPORT = NO CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip (see: -# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen # will parse them like normal C++ but will assume all classes use public instead # of private inheritance when no explicit protection keyword is present. # The default value is: NO. @@ -708,7 +708,7 @@ LAYOUT_FILE = # The CITE_BIB_FILES tag can be used to specify one or more bib files containing # the reference definitions. This must be a list of .bib files. The .bib # extension is automatically appended if omitted. This requires the bibtex tool -# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info. # For LaTeX the style of the bibliography can be controlled using # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the # search path. See also \cite for info how to create references. @@ -795,7 +795,7 @@ INPUT = Z:\Software_Projects\Local\Excimontec # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv -# documentation (see: http://www.gnu.org/software/libiconv) for the list of +# documentation (see: https://www.gnu.org/software/libiconv/) for the list of # possible encodings. # The default value is: UTF-8. @@ -1043,7 +1043,7 @@ SOURCE_TOOLTIPS = YES # If the USE_HTAGS tag is set to YES then the references to source code will # point to the HTML generated by the htags(1) tool instead of doxygen built-in # source browser. The htags tool is part of GNU's global source tagging system -# (see http://www.gnu.org/software/global/global.html). You will need version +# (see https://www.gnu.org/software/global/global.html). You will need version # 4.8.6 or higher. # # To use it do the following: @@ -1089,6 +1089,17 @@ CLANG_ASSISTED_PARSING = NO CLANG_OPTIONS = +# If clang assisted parsing is enabled you can provide the clang parser with the +# path to the compilation database (see: +# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) used when the files +# were built. This is equivalent to specifying the "-p" option to a clang tool, +# such as clang-check. These options will then be pased to the parser. +# Note: The availability of this option depends on whether or not doxygen was +# generated with the -Duse-libclang=ON option for CMake. +# The default value is: 0. + +CLANG_COMPILATION_DATABASE_PATH= 0 + #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- @@ -1207,7 +1218,7 @@ HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the style sheet and background images according to # this color. Hue is specified as an angle on a colorwheel, see -# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# https://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 # purple, and 360 is red again. # Minimum value: 0, maximum value: 359, default value: 220. @@ -1243,6 +1254,17 @@ HTML_COLORSTYLE_GAMMA = 80 HTML_TIMESTAMP = NO +# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML +# documentation will contain a main index with vertical navigation menus that +# are dynamically created via Javascript. If disabled, the navigation index will +# consists of multiple levels of tabs that are statically embedded in every HTML +# page. Disable this option to support browsers that do not have Javascript, +# like the Qt help browser. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_MENUS = YES + # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. @@ -1266,12 +1288,12 @@ HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files will be # generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: http://developer.apple.com/tools/xcode/), introduced with +# environment (see: https://developer.apple.com/tools/xcode/), introduced with # OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a # Makefile in the HTML output directory. Running make will produce the docset in # that directory and running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at -# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# startup. See https://developer.apple.com/tools/creatingdocsetswithdoxygen.html # for more information. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1387,7 +1409,7 @@ QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace -# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# (see: http://doc.qt.io/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1395,8 +1417,7 @@ QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- -# folders). +# Folders (see: http://doc.qt.io/qt-4.8/qthelpproject.html#virtual-folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1404,23 +1425,21 @@ QHP_VIRTUAL_FOLDER = doc # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). +# Filters (see: http://doc.qt.io/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). +# Filters (see: http://doc.qt.io/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's filter section matches. Qt Help Project / Filter Attributes (see: -# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# http://doc.qt.io/qt-4.8/qthelpproject.html#filter-attributes). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_SECT_FILTER_ATTRS = @@ -1513,7 +1532,7 @@ EXT_LINKS_IN_WINDOW = NO FORMULA_FONTSIZE = 10 -# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# Use the FORMULA_TRANSPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are not # supported properly for IE 6.0, but are supported on all modern browsers. # @@ -1525,7 +1544,7 @@ FORMULA_FONTSIZE = 10 FORMULA_TRANSPARENT = YES # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see -# http://www.mathjax.org) which uses client side Javascript for the rendering +# https://www.mathjax.org) which uses client side Javascript for the rendering # instead of using pre-rendered bitmaps. Use this if you do not have LaTeX # installed or if you want to formulas look prettier in the HTML output. When # enabled you may also need to install MathJax separately and configure the path @@ -1552,7 +1571,7 @@ MATHJAX_FORMAT = HTML-CSS # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of -# MathJax from http://www.mathjax.org before deployment. +# MathJax from https://www.mathjax.org before deployment. # The default value is: http://cdn.mathjax.org/mathjax/latest. # This tag requires that the tag USE_MATHJAX is set to YES. @@ -1614,7 +1633,7 @@ SERVER_BASED_SEARCH = NO # # Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: http://xapian.org/). +# Xapian (see: https://xapian.org/). # # See the section "External Indexing and Searching" for details. # The default value is: NO. @@ -1627,7 +1646,7 @@ EXTERNAL_SEARCH = NO # # Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: http://xapian.org/). See the section "External Indexing and +# Xapian (see: https://xapian.org/). See the section "External Indexing and # Searching" for details. # This tag requires that the tag SEARCHENGINE is set to YES. @@ -1814,7 +1833,7 @@ LATEX_SOURCE_CODE = NO # The LATEX_BIB_STYLE tag can be used to specify the style to use for the # bibliography, e.g. plainnat, or ieeetr. See -# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. +# https://en.wikipedia.org/wiki/BibTeX and \cite for more info. # The default value is: plain. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -1997,9 +2016,9 @@ DOCBOOK_PROGRAMLISTING = NO #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an -# AutoGen Definitions (see http://autogen.sf.net) file that captures the -# structure of the code including all documentation. Note that this feature is -# still experimental and incomplete at the moment. +# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures +# the structure of the code including all documentation. Note that this feature +# is still experimental and incomplete at the moment. # The default value is: NO. GENERATE_AUTOGEN_DEF = NO diff --git a/Exciton.h b/Exciton.h index 185bbab..703af4a 100644 --- a/Exciton.h +++ b/Exciton.h @@ -12,33 +12,84 @@ #include "KMC_Lattice/Simulation.h" #include +//! \brief This class extends the Object class to create an exciton object to represent a singlet or triplet exciton in an organic semiconductor. +//! \copyright MIT License. For more information, see the LICENSE file that accompanies this software package. +//! \author Michael C. Heiber +//! \date 2018 class Exciton : public Object{ public: + //! This static member variable holds the name of the object, which is "Exciton". static const std::string object_type; - Exciton(const double time,const int tag_num,const Coords& start_coords) : Object(time,tag_num,start_coords){} + + //! \brief Constructor that creates and initializes an exciton. + //! \param time is the simulation time denoting when the exciton was created. + //! \param tag_num is a unique id number used to distinguish the exciton from other excitons. + //! \param coords_start is the Coords struct that represents the starting coordinates of the exciton. + Exciton(const double time, const int tag_num, const Coords& coords_start) : Object(time, tag_num, coords_start) {} + + //! \brief Flips the spin state of the exciton from singlet to triplet or from triplet to singlet. void flipSpin(){spin_state = !spin_state;} + + //! \brief Gets the object type string that denotes what type of Object class this is. + //! \returns The string "Exciton". std::string getObjectType() const{return object_type;} + + //! \brief Gets the current spin state of the exciton. + //! \returns true if the exciton is in a singlet state. + //! \returns false if the exciton is in a triplet state. bool getSpin() const{return spin_state;} + + //! \brief Sets the spin state of the exciton. + //! \param spin_state_new indicates what the spin state will be set to. True for singlet and false for triplet. void setSpin(bool spin_state_new){spin_state = spin_state_new;} + private: bool spin_state; // false represents triplet state, true represents singlet state }; +//! \brief This class extends the Event class to create an specific type of exciton event. +//! \copyright MIT License. For more information, see the LICENSE file that accompanies this software package. +//! \author Michael C. Heiber +//! \date 2018 class Exciton_Creation : public Event{ public: + //! This static member variable holds the name of the event, which is "Exciton_Creation". static const std::string event_type; + + //! \brief Constructs an empty event that is uninitialized. Exciton_Creation() : Event() {} + + //! \brief Constructs and initializes an event. + //! \param simulation_ptr is a pointer to the Simulation object that is associated with the event. Exciton_Creation(Simulation* simulation_ptr) : Event(simulation_ptr) {} + + //! \brief Gets the event type string that denotes what type of Event class this is. + //! \returns The string "Exciton_Creation". std::string getEventType() const{return event_type;} + private: }; +//! \brief This class extends the Event class to create an specific type of exciton event. +//! \copyright MIT License. For more information, see the LICENSE file that accompanies this software package. +//! \author Michael C. Heiber +//! \date 2018 class Exciton_Hop : public Event{ public: + //! This static member variable holds the name of the event, which is "Exciton_Hop". static const std::string event_type; + + //! \brief Constructs an empty event that is uninitialized. Exciton_Hop() : Event() {} + + //! \brief Constructs and initializes an event. + //! \param simulation_ptr is a pointer to the Simulation object that is associated with the event. Exciton_Hop(Simulation* simulation_ptr) : Event(simulation_ptr) {} - // Singlet FRET hop + + //! \brief Calculates and updates the execution time for the exciton hop event using the FRET hopping mechanism. + //! \param prefactor is the rate constant prefactor for the transition. + //! \param distance is the distance between the starting site and destination site. + //! \param E_delta is the potential energy change that would occur if the event is executed. void calculateExecutionTime(const double prefactor, const double distance, const double E_delta) { double rate = prefactor*Utils::intpow(1.0 / distance, 6); if (E_delta > 0) { @@ -46,7 +97,12 @@ class Exciton_Hop : public Event{ } Event::calculateExecutionTime(rate); } - // Triplet Dexter hop + + //! \brief Calculates and updates the execution time for the exciton hop event using the Dexter hopping mechanism. + //! \param prefactor is the rate constant prefactor for the transition. + //! \param localization is the inverse localization parameter that describes how localized the exciton is. + //! \param distance is the distance between the starting site and destination site. + //! \param E_delta is the potential energy change that would occur if the event is executed. void calculateExecutionTime(const double prefactor, const double localization, const double distance, const double E_delta) { double rate = prefactor*exp(-2.0*localization*distance); if (E_delta>0) { @@ -54,46 +110,103 @@ class Exciton_Hop : public Event{ } Event::calculateExecutionTime(rate); } + + //! \brief Gets the event type string that denotes what type of Event class this is. + //! \returns The string "Exciton_Hop". std::string getEventType() const{return event_type;} + private: }; +//! \brief This class extends the Event class to create an specific type of exciton event. +//! \copyright MIT License. For more information, see the LICENSE file that accompanies this software package. +//! \author Michael C. Heiber +//! \date 2018 class Exciton_Recombination : public Event{ public: + //! This static member variable holds the name of the event, which is "Exciton_Recombination". static const std::string event_type; + + //! \brief Constructs an empty event that is uninitialized. Exciton_Recombination() : Event() {} + + //! \brief Constructs and initializes an event. + //! \param simulation_ptr is a pointer to the Simulation object that is associated with the event. Exciton_Recombination(Simulation* simulation_ptr) : Event(simulation_ptr) {} + + //! \brief Gets the event type string that denotes what type of Event class this is. + //! \returns The string "Exciton_Recombination". std::string getEventType() const{return event_type;} + private: }; +//! \brief This class extends the Event class to create an specific type of exciton event. +//! \copyright MIT License. For more information, see the LICENSE file that accompanies this software package. +//! \author Michael C. Heiber +//! \date 2018 class Exciton_Dissociation : public Event{ public: + //! This static member variable holds the name of the event, which is "Exciton_Dissociation". static const std::string event_type; + + //! \brief Constructs an empty event that is uninitialized. Exciton_Dissociation() : Event() {} + + //! \brief Constructs and initializes an event. + //! \param simulation_ptr is a pointer to the Simulation object that is associated with the event. Exciton_Dissociation(Simulation* simulation_ptr) : Event(simulation_ptr) {} + + //! \brief Calculates and updates the execution time for the exciton dissociation event using the Miller-Abrahams polaron hopping mechanism. + //! \param prefactor is the rate constant prefactor for the transition. + //! \param localization is the inverse localization parameter that describes how localized the exciton is. + //! \param distance is the distance between the starting site and destination site. + //! \param E_delta is the potential energy change that would occur if the event is executed. void calculateExecutionTime(const double prefactor,const double localization,const double distance,const double E_delta){ - // Calculates dissociation using the Miller-Abrahams model double rate = prefactor*exp(-2.0*localization*distance); if(E_delta>0){ rate *= exp(-E_delta/(Utils::K_b*sim_ptr->getTemp())); } Event::calculateExecutionTime(rate); } + + //! \brief Calculates and updates the execution time for the exciton dissociation event using the Marcus polaron hopping mechanism. + //! \param prefactor is the rate constant prefactor for the transition. + //! \param localization is the inverse localization parameter that describes how localized the exciton is. + //! \param distance is the distance between the starting site and destination site. + //! \param E_delta is the potential energy change that would occur if the event is executed. + //! \param reorganization is the reorganization energy for the Marcus electron transfer mechanism. void calculateExecutionTime(const double prefactor,const double localization,const double distance,const double E_delta,const double reorganization){ - // Calculates dissociation using the Marcus model double rate = (prefactor/sqrt(4.0*Utils::Pi*reorganization*Utils::K_b*sim_ptr->getTemp()))*exp(-2.0*localization*distance)*exp(-Utils::intpow(reorganization+E_delta,2)/(4.0*reorganization*Utils::K_b*sim_ptr->getTemp())); Event::calculateExecutionTime(rate); } + + //! \brief Gets the event type string that denotes what type of Event class this is. + //! \returns The string "Exciton_Dissociation". std::string getEventType() const{return event_type;} + private: }; +//! \brief This class extends the Event class to create an specific type of exciton event. +//! \copyright MIT License. For more information, see the LICENSE file that accompanies this software package. +//! \author Michael C. Heiber +//! \date 2018 class Exciton_Intersystem_Crossing : public Event { public: + //! This static member variable holds the name of the event, which is "Exciton_Intersystem_Crossing". static const std::string event_type; + + //! \brief Constructs an empty event that is uninitialized. Exciton_Intersystem_Crossing() : Event() {} + + //! \brief Constructs and initializes an event. + //! \param simulation_ptr is a pointer to the Simulation object that is associated with the event. Exciton_Intersystem_Crossing(Simulation* simulation_ptr) : Event(simulation_ptr) {} + + //! \brief Calculates and updates the execution time for the exciton intersystem crossing event. + //! \param prefactor is the rate constant prefactor for the transition. + //! \param E_delta is the potential energy change that would occur if the event is executed. void calculateExecutionTime(const double prefactor, const double E_delta) { double rate = prefactor; if (E_delta>0) { @@ -101,37 +214,87 @@ class Exciton_Intersystem_Crossing : public Event { } Event::calculateExecutionTime(rate); } + + //! \brief Gets the event type string that denotes what type of Event class this is. + //! \returns The string "Exciton_Intersystem_Crossing". std::string getEventType() const{return event_type;} + private: }; +//! \brief This class extends the Event class to create an specific type of exciton event. +//! \copyright MIT License. For more information, see the LICENSE file that accompanies this software package. +//! \author Michael C. Heiber +//! \date 2018 class Exciton_Exciton_Annihilation : public Event{ public: + //! This static member variable holds the name of the event, which is "Exciton_Exciton_Annihilation". static const std::string event_type; + + //! \brief Constructs an empty event that is uninitialized. Exciton_Exciton_Annihilation() : Event() {} + + //! \brief Constructs and initializes an event. + //! \param simulation_ptr is a pointer to the Simulation object that is associated with the event. Exciton_Exciton_Annihilation(Simulation* simulation_ptr) : Event(simulation_ptr) {} + + //! \brief Calculates and updates the execution time for the exciton-exciton annihilation event using a FRET hopping mechanism. + //! \param prefactor is the rate constant prefactor for the transition. + //! \param distance is the distance between the starting site and destination site. void calculateExecutionTime(const double prefactor, const double distance) { Event::calculateExecutionTime(prefactor*Utils::intpow(1.0 / distance, 6)); } + + //! \brief Calculates and updates the execution time for the exciton-exciton annihilation event using the Dexter hopping mechanism. + //! \param prefactor is the rate constant prefactor for the transition. + //! \param localization is the inverse localization parameter that describes how localized the exciton is. + //! \param distance is the distance between the starting site and destination site. void calculateExecutionTime(const double prefactor, const double localization, const double distance) { Event::calculateExecutionTime(prefactor*exp(-2.0*localization*distance)); } + + //! \brief Gets the event type string that denotes what type of Event class this is. + //! \returns The string "Exciton_Exciton_Annihilation". std::string getEventType() const { return event_type; } + private: }; +//! \brief This class extends the Event class to create an specific type of exciton event. +//! \copyright MIT License. For more information, see the LICENSE file that accompanies this software package. +//! \author Michael C. Heiber +//! \date 2018 class Exciton_Polaron_Annihilation : public Event{ public: + //! This static member variable holds the name of the event, which is "Exciton_Polaron_Annihilation". static const std::string event_type; + + //! \brief Constructs an empty event that is uninitialized. Exciton_Polaron_Annihilation() : Event() {} + + //! \brief Constructs and initializes an event. + //! \param simulation_ptr is a pointer to the Simulation object that is associated with the event. Exciton_Polaron_Annihilation(Simulation* simulation_ptr) : Event(simulation_ptr) {} + + //! \brief Calculates and updates the execution time for the exciton-polaron annihilation event using a FRET hopping mechanism. + //! \param prefactor is the rate constant prefactor for the transition. + //! \param distance is the distance between the starting site and destination site. void calculateExecutionTime(const double prefactor, const double distance) { Event::calculateExecutionTime(prefactor*Utils::intpow(1.0 / distance, 6)); } + + //! \brief Calculates and updates the execution time for the exciton-polaron annihilation event using the Dexter hopping mechanism. + //! \param prefactor is the rate constant prefactor for the transition. + //! \param localization is the inverse localization parameter that describes how localized the exciton is. + //! \param distance is the distance between the starting site and destination site. void calculateExecutionTime(const double prefactor, const double localization, const double distance) { Event::calculateExecutionTime(prefactor*exp(-2.0*localization*distance)); } + + //! \brief Gets the event type string that denotes what type of Event class this is. + //! \returns The string "Exciton_Polaron_Annihilation". std::string getEventType() const { return event_type; } + private: }; diff --git a/KMC_Lattice b/KMC_Lattice index 47ba1b8..488dd05 160000 --- a/KMC_Lattice +++ b/KMC_Lattice @@ -1 +1 @@ -Subproject commit 47ba1b8f939612dd5bd2935df22d7aec4c10836e +Subproject commit 488dd056651ca266866b8e1a1fc8a5e607bcdd86 diff --git a/OSC_Sim.cpp b/OSC_Sim.cpp index 6722ed0..74779d0 100644 --- a/OSC_Sim.cpp +++ b/OSC_Sim.cpp @@ -163,8 +163,8 @@ bool OSC_Sim::init(const Parameters_OPV& params,const int id){ E_potential[i] = (Internal_potential*lattice.getHeight()/(lattice.getHeight()+1))-(Internal_potential/(lattice.getHeight()+1))*i; } // Initialize exciton creation event - R_exciton_generation_donor = Exciton_generation_rate_donor*N_donor_sites*intpow(1e-7*lattice.getUnitSize(),3); - R_exciton_generation_acceptor = Exciton_generation_rate_acceptor*N_acceptor_sites*intpow(1e-7*lattice.getUnitSize(),3); + R_exciton_generation_donor = ((Exciton_generation_rate_donor*N_donor_sites*1e-7*lattice.getUnitSize())*1e-7*lattice.getUnitSize())*1e-7*lattice.getUnitSize(); + R_exciton_generation_acceptor = ((Exciton_generation_rate_acceptor*N_acceptor_sites*1e-7*lattice.getUnitSize())*1e-7*lattice.getUnitSize())*1e-7*lattice.getUnitSize(); if(Enable_exciton_diffusion_test || Enable_IQE_test){ isLightOn = true; Simulation* sim_ptr = this; @@ -177,7 +177,7 @@ bool OSC_Sim::init(const Parameters_OPV& params,const int id){ isLightOn = false; // Initialize data structures double step_size = 1.0/(double)Transient_pnts_per_decade; - int num_steps = (int)floor((log10(Transient_end)-log10(Transient_start))/step_size); + int num_steps = (int)floor((log10(Transient_end)-log10(Transient_start))/step_size)+1; transient_times.assign(num_steps,0); for(int i=0;i<(int)transient_times.size();i++){ transient_times[i] = pow(10,log10(Transient_start)+i*step_size); @@ -199,7 +199,7 @@ bool OSC_Sim::init(const Parameters_OPV& params,const int id){ isLightOn = false; // Initialize data structures double step_size = 1.0/(double)Transient_pnts_per_decade; - int num_steps = (int)floor((log10(Transient_end)-log10(Transient_start))/step_size); + int num_steps = (int)floor((log10(Transient_end)-log10(Transient_start))/step_size)+1; transient_times.assign(num_steps,0); for(int i=0;i<(int)transient_times.size();i++){ transient_times[i] = pow(10,log10(Transient_start)+i*step_size); @@ -230,7 +230,7 @@ bool OSC_Sim::init(const Parameters_OPV& params,const int id){ } } -double OSC_Sim::calculateCoulomb(const list::iterator polaron_it, const Coords& coords) const { +double OSC_Sim::calculateCoulomb(const list::const_iterator polaron_it, const Coords& coords) const { static const double avgDielectric = (Dielectric_donor + Dielectric_acceptor) / 2; static const double image_interactions = (Elementary_charge / (16 * Pi*avgDielectric*Vacuum_permittivity))*1e9; double Energy = 0; @@ -379,25 +379,20 @@ vector> OSC_Sim::calculateDOSCorrelation(const double cutoff vector OSC_Sim::calculateMobilities(const vector& transit_times) const { vector mobilities = transit_times; for (int i = 0; i < (int)mobilities.size(); i++) { - mobilities[i] = intpow(1e-7*lattice.getHeight()*lattice.getUnitSize(), 2) / (fabs(Internal_potential)*transit_times[i]); + mobilities[i] = (1e-7*lattice.getUnitSize()*lattice.getHeight()) / (fabs(Internal_potential)*transit_times[i]); + mobilities[i] *= 1e-7*lattice.getUnitSize()*lattice.getHeight(); } return mobilities; } -double OSC_Sim::calculateMobility_avg() const{ - auto mobilities = transit_times; - for(int i=0;i<(int)mobilities.size();i++){ - mobilities[i] = intpow(1e-7*lattice.getUnitSize()*lattice.getHeight(),2)/(fabs(Internal_potential)*transit_times[i]); - } - return vector_avg(mobilities); +double OSC_Sim::calculateMobility_avg() const { + auto mobilities = calculateMobilities(transit_times); + return vector_avg(mobilities); } -double OSC_Sim::calculateMobility_stdev() const{ - auto mobilities = transit_times; - for(int i=0;i<(int)mobilities.size();i++){ - mobilities[i] = intpow(1e-7*lattice.getUnitSize()*lattice.getHeight(),2)/(fabs(Internal_potential)*transit_times[i]); - } - return vector_stdev(mobilities); +double OSC_Sim::calculateMobility_stdev() const { + auto mobilities = calculateMobilities(transit_times); + return vector_stdev(mobilities); } vector OSC_Sim::calculateTransitTimeDist(const vector& data,const int counts) const{ @@ -1619,7 +1614,7 @@ void OSC_Sim::deleteObject(Object* object_ptr){ exciton_dissociation_events.erase(dissociation_list_it); // Delete exciton-exciton annihilation event exciton_exciton_annihilation_events.erase(exciton_exciton_annihilation_list_it); - // Delete exciton-exciton annihilation event + // Delete exciton-polaron annihilation event exciton_polaron_annihilation_events.erase(exciton_polaron_annihilation_list_it); // Delete exciton intersystem crossing event exciton_intersystem_crossing_events.erase(intersystem_crossing_list_it); @@ -1636,7 +1631,7 @@ void OSC_Sim::deleteObject(Object* object_ptr){ // Locate corresponding hop event auto hop_list_it = electron_hop_events.begin(); std::advance(hop_list_it,std::distance(electrons.begin(),polaron_it)); - // Locate corresponding dissociation event + // Locate corresponding extractio event auto extraction_list_it = electron_extraction_events.begin(); std::advance(extraction_list_it,std::distance(electrons.begin(),polaron_it)); // Delete electron @@ -1653,7 +1648,7 @@ void OSC_Sim::deleteObject(Object* object_ptr){ // Locate corresponding hop event auto hop_list_it = hole_hop_events.begin(); std::advance(hop_list_it,std::distance(holes.begin(),polaron_it)); - // Locate corresponding dissociation event + // Locate corresponding extraction event auto extraction_list_it = hole_extraction_events.begin(); std::advance(extraction_list_it,std::distance(holes.begin(),polaron_it)); // Delete hole @@ -1677,7 +1672,7 @@ bool OSC_Sim::executeExcitonCreation(){ return true; } -bool OSC_Sim::executeExcitonDissociation(const list::iterator event_it){ +bool OSC_Sim::executeExcitonDissociation(const list::const_iterator event_it){ // Get event info Coords coords_initial = (((*event_it)->getObjectPtr()))->getCoords(); Coords coords_dest = (*event_it)->getDestCoords(); @@ -1709,7 +1704,7 @@ bool OSC_Sim::executeExcitonDissociation(const list::iterator event_it){ return true; } -bool OSC_Sim::executeExcitonExcitonAnnihilation(const list::iterator event_it) { +bool OSC_Sim::executeExcitonExcitonAnnihilation(const list::const_iterator event_it) { // Get event info auto object_ptr = (*event_it)->getObjectPtr(); int exciton_tag = object_ptr->getTag(); @@ -1753,7 +1748,7 @@ bool OSC_Sim::executeExcitonExcitonAnnihilation(const list::iterator eve return true; } -bool OSC_Sim::executeExcitonPolaronAnnihilation(const list::iterator event_it) { +bool OSC_Sim::executeExcitonPolaronAnnihilation(const list::const_iterator event_it) { // Get event info auto object_ptr = (*event_it)->getObjectPtr(); int exciton_tag = object_ptr->getTag(); @@ -1784,7 +1779,7 @@ bool OSC_Sim::executeExcitonPolaronAnnihilation(const list::iterator eve return true; } -bool OSC_Sim::executeExcitonHop(const list::iterator event_it) { +bool OSC_Sim::executeExcitonHop(const list::const_iterator event_it) { if (lattice.isOccupied((*event_it)->getDestCoords())) { cout << getId() << ": Error! Exciton hop cannot be executed. Destination site is already occupied." << endl; setErrorMessage("Exciton hop cannot be executed. Destination site is already occupied."); @@ -1799,7 +1794,7 @@ bool OSC_Sim::executeExcitonHop(const list::iterator event_it) { } } -bool OSC_Sim::executeExcitonIntersystemCrossing(const list::iterator event_it) { +bool OSC_Sim::executeExcitonIntersystemCrossing(const list::const_iterator event_it) { // Get event info int exciton_tag = ((*event_it)->getObjectPtr())->getTag(); Coords coords_initial = ((*event_it)->getObjectPtr())->getCoords(); @@ -1833,7 +1828,7 @@ bool OSC_Sim::executeExcitonIntersystemCrossing(const list::iterator eve return true; } -bool OSC_Sim::executeExcitonRecombination(const list::iterator event_it) { +bool OSC_Sim::executeExcitonRecombination(const list::const_iterator event_it) { // Get event info int exciton_tag = ((*event_it)->getObjectPtr())->getTag(); Coords coords_initial = ((*event_it)->getObjectPtr())->getCoords(); @@ -1874,7 +1869,7 @@ bool OSC_Sim::executeNextEvent() { // Perform Transients test analysis if (Enable_dynamics_test || Enable_ToF_test) { updateTransientData(); - // If none of the excitons or polarons can move or have reached the transient cutoff + // If none of the excitons or polarons can move or the cycle has reached the transient cutoff if (getN_events() == 0 || (getTime() - Transient_creation_time) > Transient_end) { // Remove any remaining excitons and polarons while ((int)excitons.size() > 0) { @@ -1962,7 +1957,7 @@ bool OSC_Sim::executeNextEvent() { } } -bool OSC_Sim::executeObjectHop(const list::iterator event_it) { +bool OSC_Sim::executeObjectHop(const list::const_iterator event_it) { // Get event info auto object_ptr = (*event_it)->getObjectPtr(); Coords coords_initial = object_ptr->getCoords(); @@ -1975,7 +1970,7 @@ bool OSC_Sim::executeObjectHop(const list::iterator event_it) { return true; } -bool OSC_Sim::executePolaronExtraction(const list::iterator event_it){ +bool OSC_Sim::executePolaronExtraction(const list::const_iterator event_it){ // Get event info auto polaron_it = getPolaronIt((*event_it)->getObjectPtr()); bool charge = polaron_it->getCharge(); @@ -2013,18 +2008,12 @@ bool OSC_Sim::executePolaronExtraction(const list::iterator event_it){ *Logfile << "Hole " << polaron_tag << " was extracted from site " << coords_initial.x << "," << coords_initial.y << "," << coords_initial.z << "." << endl; } } - if(Enable_ToF_test && N_holes==0 && N_electrons==0 && !checkFinished()){ - generateToFPolarons(); - } - else{ - // Update event list - auto recalc_objects = findRecalcObjects(coords_initial, coords_initial); - calculateObjectListEvents(recalc_objects); - } + auto recalc_objects = findRecalcObjects(coords_initial, coords_initial); + calculateObjectListEvents(recalc_objects); return true; } -bool OSC_Sim::executePolaronHop(const list::iterator event_it){ +bool OSC_Sim::executePolaronHop(const list::const_iterator event_it){ if(lattice.isOccupied((*event_it)->getDestCoords())){ cout << getId() << ": Error! Polaron hop cannot be executed. Destination site is already occupied." << endl; setErrorMessage("Polaron hop cannot be executed. Destination site is already occupied."); @@ -2047,7 +2036,7 @@ bool OSC_Sim::executePolaronHop(const list::iterator event_it){ } } -bool OSC_Sim::executePolaronRecombination(const list::iterator event_it){ +bool OSC_Sim::executePolaronRecombination(const list::const_iterator event_it){ // Get event info auto object_ptr = (*event_it)->getObjectPtr(); int polaron_tag = object_ptr->getTag(); @@ -2148,8 +2137,7 @@ void OSC_Sim::generateElectron(const Coords& coords,int tag=0){ // Update transient data if (Enable_dynamics_test) { transient_electron_tags.push_back(electrons.back().getTag()); - transient_electron_energies_prev.push_back(getSiteEnergy(coords)); - transient_electron_tracker.push_back(electrons.back()); + transient_electron_energies_prev.push_back(0); } } @@ -2179,8 +2167,7 @@ void OSC_Sim::generateHole(const Coords& coords,int tag=0){ // Update transient data if (Enable_dynamics_test) { transient_hole_tags.push_back(holes.back().getTag()); - transient_hole_energies_prev.push_back(getSiteEnergy(coords)); - transient_hole_tracker.push_back(holes.back()); + transient_hole_energies_prev.push_back(0); } } @@ -2190,11 +2177,9 @@ void OSC_Sim::generateDynamicsExcitons(){ reassignSiteEnergies(); } // Initialize transient data vectors - static const int N_initial_excitons = (int)ceil(Dynamics_initial_exciton_conc*intpow(1e-7*lattice.getUnitSize(), 3)*lattice.getLength()*lattice.getWidth()*lattice.getHeight()); + static const int N_initial_excitons = (int)ceil(Dynamics_initial_exciton_conc*lattice.getVolume()); transient_exciton_tags.assign(N_initial_excitons, -1); transient_exciton_energies_prev.assign(N_initial_excitons, 0); - transient_exciton_tracker.clear(); - transient_exciton_tracker.reserve(N_initial_excitons); transient_electron_tags.clear(); transient_electron_energies_prev.clear(); transient_hole_tags.clear(); @@ -2205,7 +2190,6 @@ void OSC_Sim::generateDynamicsExcitons(){ while(num::iterator OSC_Sim::getExcitonIt(const Object* object_ptr){ return excitons.end(); } +double OSC_Sim::getInternalField() const { + return Internal_potential / (1e-7*lattice.getHeight()*lattice.getUnitSize()); +} + int OSC_Sim::getN_bimolecular_recombinations() const { return N_bimolecular_recombinations; } @@ -2703,13 +2691,15 @@ void OSC_Sim::updateTransientData() { // Transient_xxxx_energies_prev is a vector that stores the energies of each object at the previous time interval static const double step_size = 1.0 / (double)Transient_pnts_per_decade; if (Enable_ToF_test) { + // Cheeck if enough time has passed since the previous time interval if ((getTime() - Transient_creation_time) > transient_times[Transient_index_prev + 1]) { int index = (int)floor((log10(getTime() - Transient_creation_time) - log10(Transient_start)) / step_size); if (index >= (int)transient_times.size()) { return; } // Update info for any previous timesteps that have elapsed already but were not accounted for - while (index != 0 && Transient_index_prev < index - 1 && Transient_index_prev + 1 < (int)transient_times.size()) { + while (index != 0 && Transient_index_prev < index - 1 && (Transient_index_prev + 1) < (int)transient_times.size()) { + // electrons if (!ToF_polaron_type) { transient_electron_counts[Transient_index_prev + 1] += Transient_electron_counts_prev; for (auto const &item : electrons) { @@ -2718,6 +2708,7 @@ void OSC_Sim::updateTransientData() { transient_electron_energies[Transient_index_prev + 1] += transient_electron_energies_prev[electron_index]; } } + // holes else { transient_hole_counts[Transient_index_prev + 1] += Transient_hole_counts_prev; for (auto const &item : holes) { @@ -2729,25 +2720,27 @@ void OSC_Sim::updateTransientData() { Transient_index_prev++; } // Update info for the current timestep + // electrons if (!ToF_polaron_type) { transient_electron_counts[index] += N_electrons; Transient_electron_counts_prev = N_electrons; for (auto const &item : electrons) { // Get electron site energy and position for previous timestep int electron_index = distance(transient_electron_tags.begin(), find(transient_electron_tags.begin(), transient_electron_tags.end(), item.getTag())); - transient_velocities[index] += (1e-7*lattice.getUnitSize()*(item.getCoords().z - ToF_positions_prev[electron_index])) / (getTime() - transient_times[Transient_index_prev]); + transient_velocities[index] += (1e-7*lattice.getUnitSize()*(item.getCoords().z - ToF_positions_prev[electron_index])) / ((getTime() - Transient_creation_time) - transient_times[Transient_index_prev]); transient_electron_energies[index] += getSiteEnergy(item.getCoords()); transient_electron_energies_prev[electron_index] = getSiteEnergy(item.getCoords()); ToF_positions_prev[electron_index] = item.getCoords().z; } } + // holes else { transient_hole_counts[index] += N_holes; Transient_hole_counts_prev = N_holes; for (auto const &item : holes) { // Get hole site energy and position for previous timestep int hole_index = distance(transient_hole_tags.begin(), find(transient_hole_tags.begin(), transient_hole_tags.end(), item.getTag())); - transient_velocities[index] += (1e-7*lattice.getUnitSize()*(item.getCoords().z - ToF_positions_prev[hole_index])) / (getTime() - transient_times[Transient_index_prev]); + transient_velocities[index] += (1e-7*lattice.getUnitSize()*(item.getCoords().z - ToF_positions_prev[hole_index])) / ((getTime() - Transient_creation_time) - transient_times[Transient_index_prev]); transient_hole_energies[index] += getSiteEnergy(item.getCoords()); transient_hole_energies_prev[hole_index] = getSiteEnergy(item.getCoords()); ToF_positions_prev[hole_index] = item.getCoords().z; @@ -2757,17 +2750,6 @@ void OSC_Sim::updateTransientData() { } } else if (Enable_dynamics_test) { - // Update electron and hole tag vectors if needed - if (N_electrons_created > (int)transient_electron_tags.size()) { - transient_electron_tags.push_back(electrons.back().getTag()); - transient_electron_energies_prev.push_back(0); - transient_electron_tracker.push_back(electrons.back()); - } - if (N_holes_created > (int)transient_hole_tags.size()) { - transient_hole_tags.push_back(holes.back().getTag()); - transient_hole_energies_prev.push_back(0); - transient_hole_tracker.push_back(holes.back()); - } // Calculate data for next time step if enough time has elapsed if ((getTime() - Transient_creation_time) > transient_times[Transient_index_prev + 1]) { int index = (int)floor((log10(getTime() - Transient_creation_time) - log10(Transient_start)) / step_size); @@ -2803,30 +2785,27 @@ void OSC_Sim::updateTransientData() { Transient_triplet_counts_prev = N_triplets; Transient_electron_counts_prev = N_electrons; Transient_hole_counts_prev = N_holes; - for (auto const &item : excitons) { + for (auto &item : excitons) { // Get polaron site energy and position for previous timestep int exciton_index = distance(transient_exciton_tags.begin(), find(transient_exciton_tags.begin(), transient_exciton_tags.end(), item.getTag())); - transient_exciton_tracker[exciton_index].setCoords(item.getCoords()); - transient_exciton_msdv[index] += intpow(1e-7*lattice.getUnitSize()*transient_exciton_tracker[exciton_index].calculateDisplacement(), 2) / (getTime() - transient_times[Transient_index_prev]); - transient_exciton_tracker[exciton_index].resetInitialCoords(item.getCoords()); + transient_exciton_msdv[index] += intpow(1e-7*lattice.getUnitSize()*item.calculateDisplacement(), 2) / ((getTime() - Transient_creation_time) - transient_times[Transient_index_prev]); + item.resetInitialCoords(item.getCoords()); transient_exciton_energies[index] += getSiteEnergy(item.getCoords()); transient_exciton_energies_prev[exciton_index] = getSiteEnergy(item.getCoords()); } - for (auto const &item : electrons) { + for (auto &item : electrons) { // Get polaron site energy and position for previous timestep int electron_index = distance(transient_electron_tags.begin(), find(transient_electron_tags.begin(), transient_electron_tags.end(), item.getTag())); - transient_electron_tracker[electron_index].setCoords(item.getCoords()); - transient_electron_msdv[index] += intpow(1e-7*lattice.getUnitSize()*transient_electron_tracker[electron_index].calculateDisplacement(), 2) / (getTime() - transient_times[Transient_index_prev]); - transient_electron_tracker[electron_index].resetInitialCoords(item.getCoords()); + transient_electron_msdv[index] += intpow(1e-7*lattice.getUnitSize()*item.calculateDisplacement(), 2) / ((getTime() - Transient_creation_time) - transient_times[Transient_index_prev]); + item.resetInitialCoords(item.getCoords()); transient_electron_energies[index] += getSiteEnergy(item.getCoords()); transient_electron_energies_prev[electron_index] = getSiteEnergy(item.getCoords()); } - for (auto const &item : holes) { + for (auto &item : holes) { // Get polaron site energy and position for previous timestep int hole_index = distance(transient_hole_tags.begin(), find(transient_hole_tags.begin(), transient_hole_tags.end(), item.getTag())); - transient_hole_tracker[hole_index].setCoords(item.getCoords()); - transient_hole_msdv[index] += intpow(1e-7*lattice.getUnitSize()*transient_hole_tracker[hole_index].calculateDisplacement(), 2) / (getTime() - transient_times[Transient_index_prev]); - transient_hole_tracker[hole_index].resetInitialCoords(item.getCoords()); + transient_hole_msdv[index] += intpow(1e-7*lattice.getUnitSize()*item.calculateDisplacement(), 2) / ((getTime() - Transient_creation_time) - transient_times[Transient_index_prev]); + item.resetInitialCoords(item.getCoords()); transient_hole_energies[index] += getSiteEnergy(item.getCoords()); transient_hole_energies_prev[hole_index] = getSiteEnergy(item.getCoords()); } diff --git a/OSC_Sim.h b/OSC_Sim.h index fc7a471..970806a 100644 --- a/OSC_Sim.h +++ b/OSC_Sim.h @@ -153,6 +153,7 @@ class OSC_Sim : public Simulation{ std::vector getDynamicsExcitonMSDV() const; std::vector getDynamicsElectronMSDV() const; std::vector getDynamicsHoleMSDV() const; + double getInternalField() const; std::vector getSiteEnergies(const short site_type) const; std::vector getChargeExtractionMap(const bool charge) const; std::vector getToFTransientCounts() const; @@ -301,7 +302,7 @@ class OSC_Sim : public Simulation{ std::list holes; // Event Data Structures std::list exciton_creation_events; - std::list::iterator exciton_creation_it; + std::list::const_iterator exciton_creation_it; std::list exciton_hop_events; std::list exciton_recombination_events; std::list exciton_dissociation_events; @@ -327,9 +328,6 @@ class OSC_Sim : public Simulation{ std::vector transient_exciton_energies_prev; std::vector transient_electron_energies_prev; std::vector transient_hole_energies_prev; - std::vector transient_exciton_tracker; - std::vector transient_electron_tracker; - std::vector transient_hole_tracker; std::vector transient_exciton_msdv; std::vector transient_electron_msdv; std::vector transient_hole_msdv; @@ -379,7 +377,7 @@ class OSC_Sim : public Simulation{ int N_hole_surface_recombinations = 0; int N_transient_cycles = 0; // Additional Functions - double calculateCoulomb(const std::list::iterator polaron_it, const Coords& coords) const; + double calculateCoulomb(const std::list::const_iterator polaron_it, const Coords& coords) const; double calculateCoulomb(const bool charge, const Coords& coords) const; Coords calculateExcitonCreationCoords(); void calculateExcitonEvents(Exciton* exciton_ptr); @@ -390,18 +388,18 @@ class OSC_Sim : public Simulation{ void deleteObject(Object* object_ptr); // Exciton Event Execution Functions bool executeExcitonCreation(); - bool executeExcitonHop(const std::list::iterator event_it); - bool executeExcitonRecombination(const std::list::iterator event_it); - bool executeExcitonDissociation(const std::list::iterator event_it); - bool executeExcitonIntersystemCrossing(const std::list::iterator event_it); - bool executeExcitonExcitonAnnihilation(const std::list::iterator event_it); - bool executeExcitonPolaronAnnihilation(const std::list::iterator event_it); + bool executeExcitonHop(const std::list::const_iterator event_it); + bool executeExcitonRecombination(const std::list::const_iterator event_it); + bool executeExcitonDissociation(const std::list::const_iterator event_it); + bool executeExcitonIntersystemCrossing(const std::list::const_iterator event_it); + bool executeExcitonExcitonAnnihilation(const std::list::const_iterator event_it); + bool executeExcitonPolaronAnnihilation(const std::list::const_iterator event_it); // General Event Functions - bool executeObjectHop(const std::list::iterator event_it); + bool executeObjectHop(const std::list::const_iterator event_it); // Polaron Event Execution Functions - bool executePolaronHop(const std::list::iterator event_it); - bool executePolaronRecombination(const std::list::iterator event_it); - bool executePolaronExtraction(const std::list::iterator event_it); + bool executePolaronHop(const std::list::const_iterator event_it); + bool executePolaronRecombination(const std::list::const_iterator event_it); + bool executePolaronExtraction(const std::list::const_iterator event_it); Coords generateExciton(); void generateElectron(const Coords& coords,int tag); void generateHole(const Coords& coords,int tag); diff --git a/README.md b/README.md index da9f3f7..59c0ea7 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ This software package uses object-oriented design and extends the [KMC_Lattice]( - Choose between several KMC algorithms (first reaction method, selective recalculation method, or full recalculation method). ## Current Status -The current version (Excimontec v1.0-beta.2) is built with KMC_Lattice v2.0-beta.2 and allows the user to perform several simulation tests relevant for OPV and OLED devices. +The current version (Excimontec v1.0-beta.3) is built with KMC_Lattice v2.0-beta.3 and allows the user to perform several simulation tests relevant for OPV and OLED devices. All major planned features that are to be included in v1.0 are now implemented and have undergone preliminary testing. However, this software tool is still under development, and as such, there may still be bugs that need to be squashed. Please report any bugs or submit feature requests in the [Issues](https://github.com/MikeHeiber/Excimontec/issues) section. diff --git a/docs/_event_8cpp.html b/docs/_event_8cpp.html index 95cfaa9..657985b 100644 --- a/docs/_event_8cpp.html +++ b/docs/_event_8cpp.html @@ -30,7 +30,7 @@
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
diff --git a/docs/_event_8h.html b/docs/_event_8h.html index 9cb77de..c64d6f0 100644 --- a/docs/_event_8h.html +++ b/docs/_event_8h.html @@ -30,7 +30,7 @@
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
diff --git a/docs/_event_8h_source.html b/docs/_event_8h_source.html index 319f568..c45d4c0 100644 --- a/docs/_event_8h_source.html +++ b/docs/_event_8h_source.html @@ -30,7 +30,7 @@
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
diff --git a/docs/_exciton_8cpp.html b/docs/_exciton_8cpp.html index 00a4b84..03d3f84 100644 --- a/docs/_exciton_8cpp.html +++ b/docs/_exciton_8cpp.html @@ -30,7 +30,7 @@
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
diff --git a/docs/_exciton_8h.html b/docs/_exciton_8h.html index ba21bc7..3d29343 100644 --- a/docs/_exciton_8h.html +++ b/docs/_exciton_8h.html @@ -30,7 +30,7 @@
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
@@ -104,20 +104,28 @@

Classes

class  Exciton + This class extends the Object class to create an exciton object to represent a singlet or triplet exciton in an organic semiconductor. More...
  class  Exciton_Creation + This class extends the Event class to create an specific type of exciton event. More...
  class  Exciton_Hop + This class extends the Event class to create an specific type of exciton event. More...
  class  Exciton_Recombination + This class extends the Event class to create an specific type of exciton event. More...
  class  Exciton_Dissociation + This class extends the Event class to create an specific type of exciton event. More...
  class  Exciton_Intersystem_Crossing + This class extends the Event class to create an specific type of exciton event. More...
  class  Exciton_Exciton_Annihilation + This class extends the Event class to create an specific type of exciton event. More...
  class  Exciton_Polaron_Annihilation + This class extends the Event class to create an specific type of exciton event. More...
  diff --git a/docs/_exciton_8h_source.html b/docs/_exciton_8h_source.html index 4f9ec73..016afa4 100644 --- a/docs/_exciton_8h_source.html +++ b/docs/_exciton_8h_source.html @@ -30,7 +30,7 @@
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
@@ -91,69 +91,69 @@
Exciton.h
-Go to the documentation of this file.
1 // Copyright (c) 2018 Michael C. Heiber
2 // This source file is part of the Excimontec project, which is subject to the MIT License.
3 // For more information, see the LICENSE file that accompanies this software.
4 // The Excimontec project can be found on Github at https://github.com/MikeHeiber/Excimontec
5 
6 #ifndef EXCITON_H
7 #define EXCITON_H
8 
9 #include "KMC_Lattice/Utils.h"
10 #include "KMC_Lattice/Object.h"
11 #include "KMC_Lattice/Event.h"
12 #include "KMC_Lattice/Simulation.h"
13 #include <string>
14 
15 class Exciton : public Object{
16  public:
17  static const std::string object_type;
18  Exciton(const double time,const int tag_num,const Coords& start_coords) : Object(time,tag_num,start_coords){}
19  void flipSpin(){spin_state = !spin_state;}
20  std::string getObjectType() const{return object_type;}
21  bool getSpin() const{return spin_state;}
22  void setSpin(bool spin_state_new){spin_state = spin_state_new;}
23  private:
24  bool spin_state; // false represents triplet state, true represents singlet state
25 };
26 
27 class Exciton_Creation : public Event{
28  public:
29  static const std::string event_type;
31  Exciton_Creation(Simulation* simulation_ptr) : Event(simulation_ptr) {}
32  std::string getEventType() const{return event_type;}
33  private:
34 };
35 
36 class Exciton_Hop : public Event{
37  public:
38  static const std::string event_type;
39  Exciton_Hop() : Event() {}
40  Exciton_Hop(Simulation* simulation_ptr) : Event(simulation_ptr) {}
41  // Singlet FRET hop
42  void calculateExecutionTime(const double prefactor, const double distance, const double E_delta) {
43  double rate = prefactor*Utils::intpow(1.0 / distance, 6);
44  if (E_delta > 0) {
45  rate *= exp(-E_delta / (Utils::K_b*sim_ptr->getTemp()));
46  }
48  }
49  // Triplet Dexter hop
50  void calculateExecutionTime(const double prefactor, const double localization, const double distance, const double E_delta) {
51  double rate = prefactor*exp(-2.0*localization*distance);
52  if (E_delta>0) {
53  rate *= exp(-E_delta / (Utils::K_b*sim_ptr->getTemp()));
54  }
56  }
57  std::string getEventType() const{return event_type;}
58  private:
59 };
60 
62  public:
63  static const std::string event_type;
65  Exciton_Recombination(Simulation* simulation_ptr) : Event(simulation_ptr) {}
66  std::string getEventType() const{return event_type;}
67  private:
68 };
69 
70 class Exciton_Dissociation : public Event{
71  public:
72  static const std::string event_type;
74  Exciton_Dissociation(Simulation* simulation_ptr) : Event(simulation_ptr) {}
75  void calculateExecutionTime(const double prefactor,const double localization,const double distance,const double E_delta){
76  // Calculates dissociation using the Miller-Abrahams model
77  double rate = prefactor*exp(-2.0*localization*distance);
78  if(E_delta>0){
79  rate *= exp(-E_delta/(Utils::K_b*sim_ptr->getTemp()));
80  }
82  }
83  void calculateExecutionTime(const double prefactor,const double localization,const double distance,const double E_delta,const double reorganization){
84  // Calculates dissociation using the Marcus model
85  double rate = (prefactor/sqrt(4.0*Utils::Pi*reorganization*Utils::K_b*sim_ptr->getTemp()))*exp(-2.0*localization*distance)*exp(-Utils::intpow(reorganization+E_delta,2)/(4.0*reorganization*Utils::K_b*sim_ptr->getTemp()));
87  }
88  std::string getEventType() const{return event_type;}
89  private:
90 };
91 
93  public:
94  static const std::string event_type;
96  Exciton_Intersystem_Crossing(Simulation* simulation_ptr) : Event(simulation_ptr) {}
97  void calculateExecutionTime(const double prefactor, const double E_delta) {
98  double rate = prefactor;
99  if (E_delta>0) {
100  rate *= exp(-E_delta / (Utils::K_b*sim_ptr->getTemp()));
101  }
103  }
104  std::string getEventType() const{return event_type;}
105  private:
106 };
107 
109  public:
110  static const std::string event_type;
112  Exciton_Exciton_Annihilation(Simulation* simulation_ptr) : Event(simulation_ptr) {}
113  void calculateExecutionTime(const double prefactor, const double distance) {
114  Event::calculateExecutionTime(prefactor*Utils::intpow(1.0 / distance, 6));
115  }
116  void calculateExecutionTime(const double prefactor, const double localization, const double distance) {
117  Event::calculateExecutionTime(prefactor*exp(-2.0*localization*distance));
118  }
119  std::string getEventType() const { return event_type; }
120  private:
121 };
122 
124  public:
125  static const std::string event_type;
127  Exciton_Polaron_Annihilation(Simulation* simulation_ptr) : Event(simulation_ptr) {}
128  void calculateExecutionTime(const double prefactor, const double distance) {
129  Event::calculateExecutionTime(prefactor*Utils::intpow(1.0 / distance, 6));
130  }
131  void calculateExecutionTime(const double prefactor, const double localization, const double distance) {
132  Event::calculateExecutionTime(prefactor*exp(-2.0*localization*distance));
133  }
134  std::string getEventType() const { return event_type; }
135  private:
136 };
137 
138 #endif // EXCITON_H
Exciton_Polaron_Annihilation(Simulation *simulation_ptr)
Definition: Exciton.h:127
-
Exciton_Exciton_Annihilation(Simulation *simulation_ptr)
Definition: Exciton.h:112
+Go to the documentation of this file.
1 // Copyright (c) 2018 Michael C. Heiber
2 // This source file is part of the Excimontec project, which is subject to the MIT License.
3 // For more information, see the LICENSE file that accompanies this software.
4 // The Excimontec project can be found on Github at https://github.com/MikeHeiber/Excimontec
5 
6 #ifndef EXCITON_H
7 #define EXCITON_H
8 
9 #include "KMC_Lattice/Utils.h"
10 #include "KMC_Lattice/Object.h"
11 #include "KMC_Lattice/Event.h"
12 #include "KMC_Lattice/Simulation.h"
13 #include <string>
14 
19 class Exciton : public Object{
20  public:
22  static const std::string object_type;
23 
28  Exciton(const double time, const int tag_num, const Coords& coords_start) : Object(time, tag_num, coords_start) {}
29 
31  void flipSpin(){spin_state = !spin_state;}
32 
35  std::string getObjectType() const{return object_type;}
36 
40  bool getSpin() const{return spin_state;}
41 
44  void setSpin(bool spin_state_new){spin_state = spin_state_new;}
45 
46  private:
47  bool spin_state; // false represents triplet state, true represents singlet state
48 };
49 
54 class Exciton_Creation : public Event{
55  public:
57  static const std::string event_type;
58 
61 
64  Exciton_Creation(Simulation* simulation_ptr) : Event(simulation_ptr) {}
65 
68  std::string getEventType() const{return event_type;}
69 
70  private:
71 };
72 
77 class Exciton_Hop : public Event{
78  public:
80  static const std::string event_type;
81 
83  Exciton_Hop() : Event() {}
84 
87  Exciton_Hop(Simulation* simulation_ptr) : Event(simulation_ptr) {}
88 
93  void calculateExecutionTime(const double prefactor, const double distance, const double E_delta) {
94  double rate = prefactor*Utils::intpow(1.0 / distance, 6);
95  if (E_delta > 0) {
96  rate *= exp(-E_delta / (Utils::K_b*sim_ptr->getTemp()));
97  }
99  }
100 
106  void calculateExecutionTime(const double prefactor, const double localization, const double distance, const double E_delta) {
107  double rate = prefactor*exp(-2.0*localization*distance);
108  if (E_delta>0) {
109  rate *= exp(-E_delta / (Utils::K_b*sim_ptr->getTemp()));
110  }
112  }
113 
116  std::string getEventType() const{return event_type;}
117 
118  private:
119 };
120 
126  public:
128  static const std::string event_type;
129 
132 
135  Exciton_Recombination(Simulation* simulation_ptr) : Event(simulation_ptr) {}
136 
139  std::string getEventType() const{return event_type;}
140 
141  private:
142 };
143 
149  public:
151  static const std::string event_type;
152 
155 
158  Exciton_Dissociation(Simulation* simulation_ptr) : Event(simulation_ptr) {}
159 
165  void calculateExecutionTime(const double prefactor,const double localization,const double distance,const double E_delta){
166  double rate = prefactor*exp(-2.0*localization*distance);
167  if(E_delta>0){
168  rate *= exp(-E_delta/(Utils::K_b*sim_ptr->getTemp()));
169  }
171  }
172 
179  void calculateExecutionTime(const double prefactor,const double localization,const double distance,const double E_delta,const double reorganization){
180  double rate = (prefactor/sqrt(4.0*Utils::Pi*reorganization*Utils::K_b*sim_ptr->getTemp()))*exp(-2.0*localization*distance)*exp(-Utils::intpow(reorganization+E_delta,2)/(4.0*reorganization*Utils::K_b*sim_ptr->getTemp()));
182  }
183 
186  std::string getEventType() const{return event_type;}
187 
188  private:
189 };
190 
196  public:
198  static const std::string event_type;
199 
202 
205  Exciton_Intersystem_Crossing(Simulation* simulation_ptr) : Event(simulation_ptr) {}
206 
210  void calculateExecutionTime(const double prefactor, const double E_delta) {
211  double rate = prefactor;
212  if (E_delta>0) {
213  rate *= exp(-E_delta / (Utils::K_b*sim_ptr->getTemp()));
214  }
216  }
217 
220  std::string getEventType() const{return event_type;}
221 
222  private:
223 };
224 
230  public:
232  static const std::string event_type;
233 
236 
239  Exciton_Exciton_Annihilation(Simulation* simulation_ptr) : Event(simulation_ptr) {}
240 
244  void calculateExecutionTime(const double prefactor, const double distance) {
245  Event::calculateExecutionTime(prefactor*Utils::intpow(1.0 / distance, 6));
246  }
247 
252  void calculateExecutionTime(const double prefactor, const double localization, const double distance) {
253  Event::calculateExecutionTime(prefactor*exp(-2.0*localization*distance));
254  }
255 
258  std::string getEventType() const { return event_type; }
259 
260  private:
261 };
262 
268  public:
270  static const std::string event_type;
271 
274 
277  Exciton_Polaron_Annihilation(Simulation* simulation_ptr) : Event(simulation_ptr) {}
278 
282  void calculateExecutionTime(const double prefactor, const double distance) {
283  Event::calculateExecutionTime(prefactor*Utils::intpow(1.0 / distance, 6));
284  }
285 
290  void calculateExecutionTime(const double prefactor, const double localization, const double distance) {
291  Event::calculateExecutionTime(prefactor*exp(-2.0*localization*distance));
292  }
293 
296  std::string getEventType() const { return event_type; }
297 
298  private:
299 };
300 
301 #endif // EXCITON_H
Exciton_Polaron_Annihilation(Simulation *simulation_ptr)
Constructs and initializes an event.
Definition: Exciton.h:277
+
Exciton_Exciton_Annihilation(Simulation *simulation_ptr)
Constructs and initializes an event.
Definition: Exciton.h:239
int getTemp() const
Gets the value of the temperature parameter.
Definition: Simulation.cpp:157
-
Exciton_Recombination()
Definition: Exciton.h:64
-
static const std::string event_type
Definition: Exciton.h:63
-
Definition: Exciton.h:27
+
Exciton_Recombination()
Constructs an empty event that is uninitialized.
Definition: Exciton.h:131
+
static const std::string event_type
This static member variable holds the name of the event, which is "Exciton_Recombination".
Definition: Exciton.h:128
+
This class extends the Event class to create an specific type of exciton event.
Definition: Exciton.h:54
This base class contains the basic properties of a KMC simulation event and the functions needed to i...
Definition: Event.h:26
-
void calculateExecutionTime(const double prefactor, const double distance, const double E_delta)
Definition: Exciton.h:42
-
std::string getEventType() const
Gets the name of event class.
Definition: Exciton.h:88
+
void calculateExecutionTime(const double prefactor, const double distance, const double E_delta)
Calculates and updates the execution time for the exciton hop event using the FRET hopping mechanism...
Definition: Exciton.h:93
+
std::string getEventType() const
Gets the event type string that denotes what type of Event class this is.
Definition: Exciton.h:186
Simulation * sim_ptr
The sim_ptr member variable provides a point to the Simulation object that the Event is asociated wit...
Definition: Event.h:97
-
Definition: Exciton.h:70
-
Exciton_Intersystem_Crossing()
Definition: Exciton.h:95
-
Definition: Exciton.h:61
-
Definition: Exciton.h:108
-
void calculateExecutionTime(const double prefactor, const double localization, const double distance, const double E_delta, const double reorganization)
Definition: Exciton.h:83
-
void flipSpin()
Definition: Exciton.h:19
-
Exciton_Polaron_Annihilation()
Definition: Exciton.h:126
-
static const std::string event_type
Definition: Exciton.h:29
-
Exciton(const double time, const int tag_num, const Coords &start_coords)
Definition: Exciton.h:18
-
void setSpin(bool spin_state_new)
Definition: Exciton.h:22
-
static const std::string object_type
Definition: Exciton.h:17
-
Definition: Exciton.h:123
+
This class extends the Event class to create an specific type of exciton event.
Definition: Exciton.h:148
+
Exciton_Intersystem_Crossing()
Constructs an empty event that is uninitialized.
Definition: Exciton.h:201
+
This class extends the Event class to create an specific type of exciton event.
Definition: Exciton.h:125
+
This class extends the Event class to create an specific type of exciton event.
Definition: Exciton.h:229
+
void calculateExecutionTime(const double prefactor, const double localization, const double distance, const double E_delta, const double reorganization)
Calculates and updates the execution time for the exciton dissociation event using the Marcus polaron...
Definition: Exciton.h:179
+
void flipSpin()
Flips the spin state of the exciton from singlet to triplet or from triplet to singlet.
Definition: Exciton.h:31
+
Exciton_Polaron_Annihilation()
Constructs an empty event that is uninitialized.
Definition: Exciton.h:273
+
static const std::string event_type
This static member variable holds the name of the event, which is "Exciton_Creation".
Definition: Exciton.h:57
+
void setSpin(bool spin_state_new)
Sets the spin state of the exciton.
Definition: Exciton.h:44
+
static const std::string object_type
This static member variable holds the name of the object, which is "Exciton".
Definition: Exciton.h:22
+
This class extends the Event class to create an specific type of exciton event.
Definition: Exciton.h:267
void calculateExecutionTime(const double rate)
Calculates and sets the execution time of the event.
Definition: Event.cpp:25
-
void calculateExecutionTime(const double prefactor, const double E_delta)
Definition: Exciton.h:97
-
void calculateExecutionTime(const double prefactor, const double localization, const double distance)
Definition: Exciton.h:131
-
static const std::string event_type
Definition: Exciton.h:125
-
static const std::string event_type
Definition: Exciton.h:94
-
Exciton_Creation(Simulation *simulation_ptr)
Definition: Exciton.h:31
+
void calculateExecutionTime(const double prefactor, const double E_delta)
Calculates and updates the execution time for the exciton intersystem crossing event.
Definition: Exciton.h:210
+
void calculateExecutionTime(const double prefactor, const double localization, const double distance)
Calculates and updates the execution time for the exciton-polaron annihilation event using the Dexter...
Definition: Exciton.h:290
+
static const std::string event_type
This static member variable holds the name of the event, which is "Exciton_Polaron_Annihilation".
Definition: Exciton.h:270
+
static const std::string event_type
This static member variable holds the name of the event, which is "Exciton_Intersystem_Crossing".
Definition: Exciton.h:198
+
Exciton_Creation(Simulation *simulation_ptr)
Constructs and initializes an event.
Definition: Exciton.h:64
-
std::string getEventType() const
Gets the name of event class.
Definition: Exciton.h:104
+
std::string getEventType() const
Gets the event type string that denotes what type of Event class this is.
Definition: Exciton.h:220
-
void calculateExecutionTime(const double prefactor, const double distance)
Definition: Exciton.h:128
-
Exciton_Creation()
Definition: Exciton.h:30
-
static const std::string event_type
Definition: Exciton.h:110
-
void calculateExecutionTime(const double prefactor, const double localization, const double distance, const double E_delta)
Definition: Exciton.h:50
-
std::string getEventType() const
Gets the name of event class.
Definition: Exciton.h:32
-
Exciton_Dissociation(Simulation *simulation_ptr)
Definition: Exciton.h:74
-
Exciton_Recombination(Simulation *simulation_ptr)
Definition: Exciton.h:65
-
Exciton_Intersystem_Crossing(Simulation *simulation_ptr)
Definition: Exciton.h:96
+
void calculateExecutionTime(const double prefactor, const double distance)
Calculates and updates the execution time for the exciton-polaron annihilation event using a FRET hop...
Definition: Exciton.h:282
+
Exciton_Creation()
Constructs an empty event that is uninitialized.
Definition: Exciton.h:60
+
static const std::string event_type
This static member variable holds the name of the event, which is "Exciton_Exciton_Annihilation".
Definition: Exciton.h:232
+
void calculateExecutionTime(const double prefactor, const double localization, const double distance, const double E_delta)
Calculates and updates the execution time for the exciton hop event using the Dexter hopping mechanis...
Definition: Exciton.h:106
+
std::string getEventType() const
Gets the event type string that denotes what type of Event class this is.
Definition: Exciton.h:68
+
Exciton_Dissociation(Simulation *simulation_ptr)
Constructs and initializes an event.
Definition: Exciton.h:158
+
Exciton_Recombination(Simulation *simulation_ptr)
Constructs and initializes an event.
Definition: Exciton.h:135
+
Exciton_Intersystem_Crossing(Simulation *simulation_ptr)
Constructs and initializes an event.
Definition: Exciton.h:205
This abstract base class contains the basic properties of a KMC simulation and the functions needed t...
Definition: Simulation.h:63
-
void calculateExecutionTime(const double prefactor, const double distance)
Definition: Exciton.h:113
-
Definition: Exciton.h:36
-
std::string getEventType() const
Gets the name of event class.
Definition: Exciton.h:119
-
Definition: Exciton.h:92
-
std::string getObjectType() const
Gets the name of the Object class.
Definition: Exciton.h:20
-
Exciton_Hop()
Definition: Exciton.h:39
-
Exciton_Hop(Simulation *simulation_ptr)
Definition: Exciton.h:40
-
static const std::string event_type
Definition: Exciton.h:72
-
std::string getEventType() const
Gets the name of event class.
Definition: Exciton.h:66
+
void calculateExecutionTime(const double prefactor, const double distance)
Calculates and updates the execution time for the exciton-exciton annihilation event using a FRET hop...
Definition: Exciton.h:244
+
This class extends the Event class to create an specific type of exciton event.
Definition: Exciton.h:77
+
std::string getEventType() const
Gets the event type string that denotes what type of Event class this is.
Definition: Exciton.h:258
+
This class extends the Event class to create an specific type of exciton event.
Definition: Exciton.h:195
+
std::string getObjectType() const
Gets the object type string that denotes what type of Object class this is.
Definition: Exciton.h:35
+
Exciton_Hop()
Constructs an empty event that is uninitialized.
Definition: Exciton.h:83
+
Exciton_Hop(Simulation *simulation_ptr)
Constructs and initializes an event.
Definition: Exciton.h:87
+
static const std::string event_type
This static member variable holds the name of the event, which is "Exciton_Dissociation".
Definition: Exciton.h:151
+
std::string getEventType() const
Gets the event type string that denotes what type of Event class this is.
Definition: Exciton.h:139
This simple struct contains Cartesian coordinates specified by integers x,y,z.
Definition: Utils.h:25
-
Exciton_Dissociation()
Definition: Exciton.h:73
-
static const std::string event_type
Definition: Exciton.h:38
-
void calculateExecutionTime(const double prefactor, const double localization, const double distance)
Definition: Exciton.h:116
+
Exciton_Dissociation()
Constructs an empty event that is uninitialized.
Definition: Exciton.h:154
+
static const std::string event_type
This static member variable holds the name of the event, which is "Exciton_Hop".
Definition: Exciton.h:80
+
void calculateExecutionTime(const double prefactor, const double localization, const double distance)
Calculates and updates the execution time for the exciton-exciton annihilation event using the Dexter...
Definition: Exciton.h:252
This base class contains the basic properties of a KMC simulation object and the functions needed to ...
Definition: Object.h:23
-
Definition: Exciton.h:15
-
Exciton_Exciton_Annihilation()
Definition: Exciton.h:111
-
bool getSpin() const
Definition: Exciton.h:21
-
void calculateExecutionTime(const double prefactor, const double localization, const double distance, const double E_delta)
Definition: Exciton.h:75
+
This class extends the Object class to create an exciton object to represent a singlet or triplet exc...
Definition: Exciton.h:19
+
Exciton_Exciton_Annihilation()
Constructs an empty event that is uninitialized.
Definition: Exciton.h:235
+
bool getSpin() const
Gets the current spin state of the exciton.
Definition: Exciton.h:40
+
void calculateExecutionTime(const double prefactor, const double localization, const double distance, const double E_delta)
Calculates and updates the execution time for the exciton dissociation event using the Miller-Abraham...
Definition: Exciton.h:165
+
Exciton(const double time, const int tag_num, const Coords &coords_start)
Constructor that creates and initializes an exciton.
Definition: Exciton.h:28
base_type intpow(const base_type base, const int exponent)
This template function calculates and returns the results of an integer power operation on a base num...
Definition: Utils.h:202
-
std::string getEventType() const
Gets the name of event class.
Definition: Exciton.h:57
-
std::string getEventType() const
Gets the name of event class.
Definition: Exciton.h:134
+
std::string getEventType() const
Gets the event type string that denotes what type of Event class this is.
Definition: Exciton.h:116
+
std::string getEventType() const
Gets the event type string that denotes what type of Event class this is.
Definition: Exciton.h:296
diff --git a/docs/_k_m_c___lattice_2_r_e_a_d_m_e_8md.html b/docs/_k_m_c___lattice_2_r_e_a_d_m_e_8md.html index 6bff96e..94ce8a2 100644 --- a/docs/_k_m_c___lattice_2_r_e_a_d_m_e_8md.html +++ b/docs/_k_m_c___lattice_2_r_e_a_d_m_e_8md.html @@ -30,7 +30,7 @@
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
diff --git a/docs/_lattice_8cpp.html b/docs/_lattice_8cpp.html index 9f44365..43e8ce4 100644 --- a/docs/_lattice_8cpp.html +++ b/docs/_lattice_8cpp.html @@ -30,7 +30,7 @@
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
diff --git a/docs/_lattice_8h.html b/docs/_lattice_8h.html index 6928a83..0750de0 100644 --- a/docs/_lattice_8h.html +++ b/docs/_lattice_8h.html @@ -30,7 +30,7 @@
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
diff --git a/docs/_lattice_8h_source.html b/docs/_lattice_8h_source.html index 63be3f1..7dd45fa 100644 --- a/docs/_lattice_8h_source.html +++ b/docs/_lattice_8h_source.html @@ -30,7 +30,7 @@
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
@@ -91,45 +91,46 @@
Lattice.h
-Go to the documentation of this file.
1 // Copyright (c) 2018 Michael C. Heiber
2 // This source file is part of the KMC_Lattice project, which is subject to the MIT License.
3 // For more information, see the LICENSE file that accompanies this software package.
4 // The KMC_Lattice project can be found on Github at https://github.com/MikeHeiber/KMC_Lattice
5 
6 #ifndef LATTICE_H
7 #define LATTICE_H
8 
9 #include "Utils.h"
10 #include "Site.h"
11 #include <functional>
12 #include <stdexcept>
13 
26  int Length;
28  int Width;
30  int Height;
32  double Unit_size; // nm
33 };
34 
41 class Lattice{
42  public:
45  Lattice();
46 
51  void init(const Parameters_Lattice& params, std::mt19937* generator_ptr);
52 
62  void calculateDestinationCoords(const Coords& coords_initial, const int i, const int j, const int k, Coords& coords_dest) const;
63 
70  int calculateDX(const int x, const int i) const;
71 
78  int calculateDX(const Coords& coords_initial, const Coords& coords_dest) const;
79 
86  int calculateDY(const int y, const int j) const;
87 
94  int calculateDY(const Coords& coords_initial, const Coords& coords_dest) const;
95 
102  int calculateDZ(const int z, const int k) const;
103 
110  int calculateDZ(const Coords& coords_initial, const Coords& coords_dest) const;
111 
116  int calculateLatticeDistanceSquared(const Coords& coords_start, const Coords& coords_dest) const;
117 
127  bool checkMoveValidity(const Coords& coords_initial, const int i, const int j, const int k) const;
128 
131  void clearOccupancy(const Coords& coords);
132 
136 
140  int generateRandomX();
141 
145  int generateRandomY();
146 
150  int generateRandomZ();
151 
154  int getHeight() const;
155 
158  int getLength() const;
159 
162  long int getNumSites() const;
163 
167  Coords getSiteCoords(long int site_index);
168 
173  long int getSiteIndex(const Coords& coords) const;
174 
178  std::vector<Site*>::iterator getSiteIt(const Coords& coords);
179 
182  double getUnitSize() const;
183 
186  int getWidth() const;
187 
192  bool isOccupied(const Coords& coords) const;
193 
197  bool isXPeriodic() const;
198 
202  bool isYPeriodic() const;
203 
207  bool isZPeriodic() const;
208 
210  void outputLatticeOccupancy() const;
211 
214  void setOccupied(const Coords& coords);
215 
220  bool setSitePointers(const std::vector<Site*>& input_ptrs);
221  protected:
222 
223  private:
224  bool Enable_periodic_x;
225  bool Enable_periodic_y;
226  bool Enable_periodic_z;
227  int Length; // nm
228  int Width; // nm
229  int Height; // nm
230  double Unit_size; // nm
231  std::vector<Site*> site_ptrs;
232  std::mt19937* gen_ptr;
233 };
234 
235 #endif // LATTICE_H
int generateRandomZ()
Generates a random z coordinate that lies within the z-dimension size of the lattice.
Definition: Lattice.cpp:170
-
bool setSitePointers(const std::vector< Site *> &input_ptrs)
Sets the member site pointer vector to the input site pointer vector.
Definition: Lattice.cpp:253
-
bool isOccupied(const Coords &coords) const
Checks whether the site located at the input coordinates is occupied or not.
Definition: Lattice.cpp:225
-
int calculateDZ(const int z, const int k) const
Calculates a coordinate adjustment factor if the z-direction periodic boundary is crossed...
Definition: Lattice.cpp:80
+Go to the documentation of this file.
1 // Copyright (c) 2018 Michael C. Heiber
2 // This source file is part of the KMC_Lattice project, which is subject to the MIT License.
3 // For more information, see the LICENSE file that accompanies this software package.
4 // The KMC_Lattice project can be found on Github at https://github.com/MikeHeiber/KMC_Lattice
5 
6 #ifndef LATTICE_H
7 #define LATTICE_H
8 
9 #include "Utils.h"
10 #include "Site.h"
11 #include <functional>
12 #include <stdexcept>
13 
26  int Length;
28  int Width;
30  int Height;
32  double Unit_size; // nm
33 };
34 
41 class Lattice{
42  public:
45  Lattice();
46 
51  void init(const Parameters_Lattice& params, std::mt19937* generator_ptr);
52 
62  void calculateDestinationCoords(const Coords& coords_initial, const int i, const int j, const int k, Coords& coords_dest) const;
63 
70  int calculateDX(const int x, const int i) const;
71 
78  int calculateDX(const Coords& coords_initial, const Coords& coords_dest) const;
79 
86  int calculateDY(const int y, const int j) const;
87 
94  int calculateDY(const Coords& coords_initial, const Coords& coords_dest) const;
95 
102  int calculateDZ(const int z, const int k) const;
103 
110  int calculateDZ(const Coords& coords_initial, const Coords& coords_dest) const;
111 
116  int calculateLatticeDistanceSquared(const Coords& coords_start, const Coords& coords_dest) const;
117 
127  bool checkMoveValidity(const Coords& coords_initial, const int i, const int j, const int k) const;
128 
131  void clearOccupancy(const Coords& coords);
132 
136 
140  int generateRandomX();
141 
145  int generateRandomY();
146 
150  int generateRandomZ();
151 
154  int getHeight() const;
155 
158  int getLength() const;
159 
162  long int getNumSites() const;
163 
167  Coords getSiteCoords(long int site_index);
168 
173  long int getSiteIndex(const Coords& coords) const;
174 
178  std::vector<Site*>::iterator getSiteIt(const Coords& coords);
179 
182  double getUnitSize() const;
183 
185  double getVolume() const;
186 
189  int getWidth() const;
190 
195  bool isOccupied(const Coords& coords) const;
196 
200  bool isXPeriodic() const;
201 
205  bool isYPeriodic() const;
206 
210  bool isZPeriodic() const;
211 
213  void outputLatticeOccupancy() const;
214 
217  void setOccupied(const Coords& coords);
218 
223  bool setSitePointers(const std::vector<Site*>& input_ptrs);
224  protected:
225 
226  private:
227  bool Enable_periodic_x;
228  bool Enable_periodic_y;
229  bool Enable_periodic_z;
230  int Length; // nm
231  int Width; // nm
232  int Height; // nm
233  double Unit_size; // nm
234  std::vector<Site*> site_ptrs;
235  std::mt19937* gen_ptr;
236 };
237 
238 #endif // LATTICE_H
int generateRandomZ()
Generates a random z coordinate that lies within the z-dimension size of the lattice.
Definition: Lattice.cpp:171
+
bool setSitePointers(const std::vector< Site *> &input_ptrs)
Sets the member site pointer vector to the input site pointer vector.
Definition: Lattice.cpp:258
+
bool isOccupied(const Coords &coords) const
Checks whether the site located at the input coordinates is occupied or not.
Definition: Lattice.cpp:230
+
int calculateDZ(const int z, const int k) const
Calculates a coordinate adjustment factor if the z-direction periodic boundary is crossed...
Definition: Lattice.cpp:81
bool Enable_periodic_x
Determines whether the x-direction periodic boundaries will be enabled.
Definition: Lattice.h:20
-
int generateRandomY()
Generates a random y coordinate that lies within the y-dimension size of the lattice.
Definition: Lattice.cpp:164
-
int calculateDY(const int y, const int j) const
Calculates a coordinate adjustment factor if the y-direction periodic boundary is crossed...
Definition: Lattice.cpp:56
+
int generateRandomY()
Generates a random y coordinate that lies within the y-dimension size of the lattice.
Definition: Lattice.cpp:165
+
int calculateDY(const int y, const int j) const
Calculates a coordinate adjustment factor if the y-direction periodic boundary is crossed...
Definition: Lattice.cpp:57
bool Enable_periodic_y
Determines whether the y-direction periodic boundaries will be enabled.
Definition: Lattice.h:22
-
Lattice()
Default constructor that creates an empty Lattice object.
Definition: Lattice.cpp:10
-
void calculateDestinationCoords(const Coords &coords_initial, const int i, const int j, const int k, Coords &coords_dest) const
Calculates the destination coordinates when given the starting coordinates and the displacement vecto...
Definition: Lattice.cpp:26
-
double getUnitSize() const
Gets the lattice unit size, which is used to convert lattice units into real space units...
Definition: Lattice.cpp:217
-
void init(const Parameters_Lattice &params, std::mt19937 *generator_ptr)
Initializes the Lattice object using the provided Parameters_Lattice input parameter struct...
Definition: Lattice.cpp:14
-
int generateRandomX()
Generates a random x coordinate that lies within the x-dimension size of the lattice.
Definition: Lattice.cpp:158
-
Coords getSiteCoords(long int site_index)
Gets the coordinates of the specified site.
Definition: Lattice.cpp:188
-
void setOccupied(const Coords &coords)
Sets the site located at the input coordinates to the occupied state.
Definition: Lattice.cpp:249
-
int calculateLatticeDistanceSquared(const Coords &coords_start, const Coords &coords_dest) const
Calculates the shortest distance between a pair of coordinates in squared lattice units...
Definition: Lattice.cpp:104
-
bool isYPeriodic() const
Checks whether the y-direction periodic boundaries are enabled or not.
Definition: Lattice.cpp:233
-
long int getSiteIndex(const Coords &coords) const
Gets the vector index for the site corresponding to the input coordinates.
Definition: Lattice.cpp:201
+
Lattice()
Default constructor that creates an empty Lattice object.
Definition: Lattice.cpp:11
+
void calculateDestinationCoords(const Coords &coords_initial, const int i, const int j, const int k, Coords &coords_dest) const
Calculates the destination coordinates when given the starting coordinates and the displacement vecto...
Definition: Lattice.cpp:27
+
double getUnitSize() const
Gets the lattice unit size, which is used to convert lattice units into real space units...
Definition: Lattice.cpp:218
+
void init(const Parameters_Lattice &params, std::mt19937 *generator_ptr)
Initializes the Lattice object using the provided Parameters_Lattice input parameter struct...
Definition: Lattice.cpp:15
+
int generateRandomX()
Generates a random x coordinate that lies within the x-dimension size of the lattice.
Definition: Lattice.cpp:159
+
Coords getSiteCoords(long int site_index)
Gets the coordinates of the specified site.
Definition: Lattice.cpp:189
+
void setOccupied(const Coords &coords)
Sets the site located at the input coordinates to the occupied state.
Definition: Lattice.cpp:254
+
int calculateLatticeDistanceSquared(const Coords &coords_start, const Coords &coords_dest) const
Calculates the shortest distance between a pair of coordinates in squared lattice units...
Definition: Lattice.cpp:105
+
bool isYPeriodic() const
Checks whether the y-direction periodic boundaries are enabled or not.
Definition: Lattice.cpp:238
+
long int getSiteIndex(const Coords &coords) const
Gets the vector index for the site corresponding to the input coordinates.
Definition: Lattice.cpp:202
bool Enable_periodic_z
Determines whether the z-direction periodic boundaries will be enabled.
Definition: Lattice.h:24
-
int getHeight() const
Gets the z-direction size of the lattice, the height.
Definition: Lattice.cpp:176
+
int getHeight() const
Gets the z-direction size of the lattice, the height.
Definition: Lattice.cpp:177
This struct contains all of the main input parameters needed by the Lattice class.
Definition: Lattice.h:18
-
int calculateDX(const int x, const int i) const
Calculates a coordinate adjustment factor if the x-direction periodic boundary is crossed...
Definition: Lattice.cpp:32
-
bool isXPeriodic() const
Checks whether the x-direction periodic boundaries are enabled or not.
Definition: Lattice.cpp:229
-
int getLength() const
Gets the x-direction size of the lattice, the length.
Definition: Lattice.cpp:180
-
long int getNumSites() const
Gets the number of sites contained in the lattice.
Definition: Lattice.cpp:184
-
bool isZPeriodic() const
Checks whether the z-direction periodic boundaries are enabled or not.
Definition: Lattice.cpp:237
-
void outputLatticeOccupancy() const
Prints to the command line which sites are occupied.
Definition: Lattice.cpp:241
+
int calculateDX(const int x, const int i) const
Calculates a coordinate adjustment factor if the x-direction periodic boundary is crossed...
Definition: Lattice.cpp:33
+
bool isXPeriodic() const
Checks whether the x-direction periodic boundaries are enabled or not.
Definition: Lattice.cpp:234
+
int getLength() const
Gets the x-direction size of the lattice, the length.
Definition: Lattice.cpp:181
+
double getVolume() const
Gets the volume of the lattice in cm^-3.
Definition: Lattice.cpp:226
+
long int getNumSites() const
Gets the number of sites contained in the lattice.
Definition: Lattice.cpp:185
+
bool isZPeriodic() const
Checks whether the z-direction periodic boundaries are enabled or not.
Definition: Lattice.cpp:242
+
void outputLatticeOccupancy() const
Prints to the command line which sites are occupied.
Definition: Lattice.cpp:246
double Unit_size
Defines the desired lattice unit size, which is used to convert lattice units into real space units...
Definition: Lattice.h:32
-
int getWidth() const
Gets the y-direction size of the lattice, the width.
Definition: Lattice.cpp:221
+
int getWidth() const
Gets the y-direction size of the lattice, the width.
Definition: Lattice.cpp:222
This simple struct contains Cartesian coordinates specified by integers x,y,z.
Definition: Utils.h:25
-
Coords generateRandomCoords()
Generates the coordinates for a randomly selected site in the lattice.
Definition: Lattice.cpp:150
+
Coords generateRandomCoords()
Generates the coordinates for a randomly selected site in the lattice.
Definition: Lattice.cpp:151
int Height
Defines the desired z-direction size of the lattice.
Definition: Lattice.h:30
int Width
Defines the desired y-direction size of the lattice.
Definition: Lattice.h:28
-
void clearOccupancy(const Coords &coords)
Clears the occupancy of the site located at the specified coordinates.
Definition: Lattice.cpp:146
-
bool checkMoveValidity(const Coords &coords_initial, const int i, const int j, const int k) const
Checks to see if a generic move operation from the designated initial coordinates to a destination po...
Definition: Lattice.cpp:130
+
void clearOccupancy(const Coords &coords)
Clears the occupancy of the site located at the specified coordinates.
Definition: Lattice.cpp:147
+
bool checkMoveValidity(const Coords &coords_initial, const int i, const int j, const int k) const
Checks to see if a generic move operation from the designated initial coordinates to a destination po...
Definition: Lattice.cpp:131
This class contains the properties of a three-dimensional lattice and the functions needed to interac...
Definition: Lattice.h:41
-
std::vector< Site * >::iterator getSiteIt(const Coords &coords)
Gets the vector iterator for the site corresponding to the input coordinates.
Definition: Lattice.cpp:211
+
std::vector< Site * >::iterator getSiteIt(const Coords &coords)
Gets the vector iterator for the site corresponding to the input coordinates.
Definition: Lattice.cpp:212
int Length
Defines the desired x-direction size of the lattice.
Definition: Lattice.h:26
diff --git a/docs/_o_s_c___sim_8cpp.html b/docs/_o_s_c___sim_8cpp.html index 6b7d43a..130b0b9 100644 --- a/docs/_o_s_c___sim_8cpp.html +++ b/docs/_o_s_c___sim_8cpp.html @@ -30,7 +30,7 @@
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
diff --git a/docs/_o_s_c___sim_8h.html b/docs/_o_s_c___sim_8h.html index 42c718f..436c3b1 100644 --- a/docs/_o_s_c___sim_8h.html +++ b/docs/_o_s_c___sim_8h.html @@ -30,7 +30,7 @@
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
diff --git a/docs/_o_s_c___sim_8h_source.html b/docs/_o_s_c___sim_8h_source.html index 12b6b39..5fd8d53 100644 --- a/docs/_o_s_c___sim_8h_source.html +++ b/docs/_o_s_c___sim_8h_source.html @@ -30,7 +30,7 @@
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
@@ -91,26 +91,26 @@
OSC_Sim.h
-Go to the documentation of this file.
1 // Copyright (c) 2018 Michael C. Heiber
2 // This source file is part of the Excimontec project, which is subject to the MIT License.
3 // For more information, see the LICENSE file that accompanies this software.
4 // The Excimontec project can be found on Github at https://github.com/MikeHeiber/Excimontec
5 
6 #ifndef OSC_SIM_H
7 #define OSC_SIM_H
8 
10 #include "KMC_Lattice/Site.h"
11 #include "Exciton.h"
12 #include "Polaron.h"
13 #include <algorithm>
14 #include <numeric>
15 
17  // Additional General Parameters
19  // Morphology Parameters
20  bool Enable_neat; // Neat takes on donor properties
22  int Thickness_donor; // sites
23  int Thickness_acceptor; // sites
25  double Acceptor_conc;
27  std::ifstream* Morphology_file;
28  // Test Parameters
29  int N_tests;
45  // Exciton Parameters
48  double Singlet_lifetime_donor; // seconds
49  double Singlet_lifetime_acceptor; // seconds
50  double Triplet_lifetime_donor; // seconds
51  double Triplet_lifetime_acceptor; // seconds
77  // Polaron Parameters
81  double Polaron_localization_donor; // nm^-1
91  // Additional Lattice Parameters
92  double Homo_donor;
93  double Lumo_donor;
94  double Homo_acceptor;
95  double Lumo_acceptor;
97  double Energy_stdev_donor; // eV
98  double Energy_stdev_acceptor; // eV
100  double Energy_urbach_donor; // eV
106  int Power_kernel_exponent; // must be negative
107  // Coulomb Calculation Parameters
110  int Coulomb_cutoff; // nm
111 };
112 
113 class Site_OSC : public Site{
114  public:
115  double getEnergy() const{return *energy_it;}
116  short getType() const{return type;}
117  void setEnergy(const double energy) { *energy_it = energy; }
118  void setEnergyIt(const std::vector<double>::iterator it){energy_it = it;}
119  void setType(const short site_type){type = site_type;}
120  private:
121  std::vector<double>::iterator energy_it;
122  short type = 0; // type 1 represent donor, type 2 represents acceptor
123 };
124 
125 class OSC_Sim : public Simulation{
126  public:
127  // Functions
128  OSC_Sim();
129  virtual ~OSC_Sim();
130  bool init(const Parameters_OPV& params,const int id);
131  double calculateDiffusionLength_avg() const;
132  double calculateDiffusionLength_stdev() const;
133  std::vector<std::pair<double,double>> calculateDOSCorrelation(const double cutoff_radius);
134  std::vector<double> calculateTransitTimeDist(const std::vector<double>& data,const int counts) const;
135  double calculateTransitTime_avg() const;
136  double calculateTransitTime_stdev() const;
137  std::vector<double> calculateMobilities(const std::vector<double>& transit_times) const;
138  double calculateMobility_avg() const;
139  double calculateMobility_stdev() const;
140  bool checkFinished() const;
141  bool checkParameters(const Parameters_OPV& params) const;
142  bool executeNextEvent();
143  std::vector<double> getDiffusionData() const;
144  std::vector<std::pair<double, double>> getDOSCorrelationData() const;
145  std::vector<double> getDynamicsExcitonEnergies() const;
146  std::vector<double> getDynamicsElectronEnergies() const;
147  std::vector<double> getDynamicsHoleEnergies() const;
148  std::vector<int> getDynamicsTransientSinglets() const;
149  std::vector<int> getDynamicsTransientTriplets() const;
150  std::vector<int> getDynamicsTransientElectrons() const;
151  std::vector<int> getDynamicsTransientHoles() const;
152  std::vector<double> getDynamicsTransientTimes() const;
153  std::vector<double> getDynamicsExcitonMSDV() const;
154  std::vector<double> getDynamicsElectronMSDV() const;
155  std::vector<double> getDynamicsHoleMSDV() const;
156  std::vector<double> getSiteEnergies(const short site_type) const;
157  std::vector<std::string> getChargeExtractionMap(const bool charge) const;
158  std::vector<int> getToFTransientCounts() const;
159  std::vector<double> getToFTransientEnergies() const;
160  std::vector<double> getToFTransientTimes() const;
161  std::vector<double> getToFTransientVelocities() const;
162  std::vector<double> getTransitTimeData() const;
163  int getN_excitons_created() const;
164  int getN_excitons_created(const short site_type) const;
165  int getN_excitons_dissociated() const;
173  int getN_electrons_created() const;
174  int getN_electrons_collected() const;
175  int getN_electrons_recombined() const;
176  int getN_holes_created() const;
177  int getN_holes_collected() const;
178  int getN_holes_recombined() const;
179  int getN_geminate_recombinations() const;
181  int getN_transient_cycles() const;
182  void outputStatus();
183  void reassignSiteEnergies();
184  protected:
185 
186  private:
187  // Additional General Parameters
188  double Internal_potential;
189  // Morphology Parameters
190  bool Enable_neat; // Neat takes on donor properties
191  bool Enable_bilayer;
192  int Thickness_donor; // sites
193  int Thickness_acceptor; // sites
194  bool Enable_random_blend;
195  double Acceptor_conc;
196  bool Enable_import_morphology;
197  std::ifstream* Morphology_file;
198  // Test Parameters
199  int N_tests;
200  bool Enable_exciton_diffusion_test;
201  bool Enable_ToF_test;
202  bool ToF_polaron_type;
203  int ToF_initial_polarons;
204  //double ToF_transient_start;
205  //double ToF_transient_end;
206  //int ToF_pnts_per_decade;
207  bool Enable_IQE_test;
208  double IQE_time_cutoff;
209  bool Enable_dynamics_test;
210  bool Enable_dynamics_extraction;
211  double Dynamics_initial_exciton_conc;
212  //double Dynamics_transient_start;
213  //double Dynamics_transient_end;
214  //int Dynamics_pnts_per_decade;
215  double Transient_start;
216  double Transient_end;
217  int Transient_pnts_per_decade;
218  // Exciton Parameters
219  double Exciton_generation_rate_donor;
220  double Exciton_generation_rate_acceptor;
221  double Singlet_lifetime_donor; // seconds
222  double Singlet_lifetime_acceptor; // seconds
223  double Triplet_lifetime_donor; // seconds
224  double Triplet_lifetime_acceptor; // seconds
225  double R_singlet_hopping_donor;
226  double R_singlet_hopping_acceptor;
227  double Singlet_localization_donor;
228  double Singlet_localization_acceptor;
229  double R_triplet_hopping_donor;
230  double R_triplet_hopping_acceptor;
231  double Triplet_localization_donor;
232  double Triplet_localization_acceptor;
233  bool Enable_FRET_triplet_annihilation;
234  double R_exciton_exciton_annihilation_donor;
235  double R_exciton_exciton_annihilation_acceptor;
236  double R_exciton_polaron_annihilation_donor;
237  double R_exciton_polaron_annihilation_acceptor;
238  int FRET_cutoff;
239  double E_exciton_binding_donor;
240  double E_exciton_binding_acceptor;
241  double R_exciton_dissociation_donor;
242  double R_exciton_dissociation_acceptor;
243  int Exciton_dissociation_cutoff; // nm
244  double R_exciton_isc_donor;
245  double R_exciton_isc_acceptor;
246  double R_exciton_risc_donor;
247  double R_exciton_risc_acceptor;
248  double E_exciton_ST_donor;
249  double E_exciton_ST_acceptor;
250  // Polaron Parameters
251  bool Enable_phase_restriction;
252  double R_polaron_hopping_donor;
253  double R_polaron_hopping_acceptor;
254  double Polaron_localization_donor; // nm^-1
255  double Polaron_localization_acceptor; // nm^-1
256  bool Enable_miller_abrahams;
257  bool Enable_marcus;
258  double Reorganization_donor;
259  double Reorganization_acceptor;
260  double R_polaron_recombination;
261  int Polaron_hopping_cutoff; // nm
262  bool Enable_gaussian_polaron_delocalization;
263  double Polaron_delocalization_length;
264  // Additional Lattice Parameters
265  double Homo_donor;
266  double Lumo_donor;
267  double Homo_acceptor;
268  double Lumo_acceptor;
269  bool Enable_gaussian_dos;
270  double Energy_stdev_donor; // eV
271  double Energy_stdev_acceptor; // eV
272  bool Enable_exponential_dos;
273  double Energy_urbach_donor;
274  double Energy_urbach_acceptor;
275  bool Enable_correlated_disorder;
276  double Disorder_correlation_length; // nm
277  bool Enable_gaussian_kernel;
278  bool Enable_power_kernel;
279  int Power_kernel_exponent; // must be negative
280  // Coulomb Calculation Parameters
281  double Dielectric_donor;
282  double Dielectric_acceptor;
283  int Coulomb_cutoff; // nm
284  // Additional Output Files
285  //
286  // Additional Parameters
287  bool isLightOn;
288  double R_exciton_generation_donor;
289  double R_exciton_generation_acceptor;
290  double Transient_creation_time;
291  int Transient_index_prev;
292  int Transient_singlet_counts_prev;
293  int Transient_triplet_counts_prev;
294  int Transient_electron_counts_prev;
295  int Transient_hole_counts_prev;
296  // Site Data Structure
297  std::vector<Site_OSC> sites;
298  // Object Data Structures
299  std::list<Exciton> excitons;
300  std::list<Polaron> electrons;
301  std::list<Polaron> holes;
302  // Event Data Structures
303  std::list<Exciton_Creation> exciton_creation_events;
304  std::list<Event*>::iterator exciton_creation_it;
305  std::list<Exciton_Hop> exciton_hop_events;
306  std::list<Exciton_Recombination> exciton_recombination_events;
307  std::list<Exciton_Dissociation> exciton_dissociation_events;
308  std::list<Exciton_Exciton_Annihilation> exciton_exciton_annihilation_events;
309  std::list<Exciton_Polaron_Annihilation> exciton_polaron_annihilation_events;
310  std::list<Exciton_Intersystem_Crossing> exciton_intersystem_crossing_events;
311  std::list<Polaron_Hop> electron_hop_events;
312  std::list<Polaron_Hop> hole_hop_events;
313  std::list<Polaron_Recombination> polaron_recombination_events;
314  std::list<Polaron_Extraction> electron_extraction_events;
315  std::list<Polaron_Extraction> hole_extraction_events;
316  // Additional Data Structures
317  std::vector<double> Coulomb_table;
318  std::vector<double> E_potential;
319  std::vector<double> site_energies_donor;
320  std::vector<double> site_energies_acceptor;
321  std::vector<std::pair<double, double>> DOS_correlation_data;
322  std::vector<double> diffusion_distances;
323  std::vector<int> transient_exciton_tags;
324  std::vector<int> transient_electron_tags;
325  std::vector<int> transient_hole_tags;
326  std::vector<int> ToF_positions_prev;
327  std::vector<double> transient_exciton_energies_prev;
328  std::vector<double> transient_electron_energies_prev;
329  std::vector<double> transient_hole_energies_prev;
330  std::vector<Exciton> transient_exciton_tracker;
331  std::vector<Polaron> transient_electron_tracker;
332  std::vector<Polaron> transient_hole_tracker;
333  std::vector<double> transient_exciton_msdv;
334  std::vector<double> transient_electron_msdv;
335  std::vector<double> transient_hole_msdv;
336  std::vector<int> electron_extraction_data;
337  std::vector<int> hole_extraction_data;
338  std::vector<double> transient_times;
339  std::vector<double> transient_velocities;
340  std::vector<double> transient_exciton_energies;
341  std::vector<double> transient_electron_energies;
342  std::vector<double> transient_hole_energies;
343  std::vector<double> transit_times;
344  std::vector<int> transient_singlet_counts;
345  std::vector<int> transient_triplet_counts;
346  std::vector<int> transient_electron_counts;
347  std::vector<int> transient_hole_counts;
348  // Additional Counters
349  int N_donor_sites;
350  int N_acceptor_sites;
351  int N_excitons_created = 0;
352  int N_excitons_created_donor = 0;
353  int N_excitons_created_acceptor = 0;
354  int N_singlet_excitons_recombined = 0;
355  int N_triplet_excitons_recombined = 0;
356  int N_excitons_dissociated = 0;
357  int N_singlet_singlet_annihilations = 0;
358  int N_singlet_triplet_annihilations = 0;
359  int N_triplet_triplet_annihilations = 0;
360  int N_singlet_polaron_annihilations = 0;
361  int N_triplet_polaron_annihilations = 0;
362  int N_exciton_intersystem_crossings = 0;
363  int N_exciton_reverse_intersystem_crossings = 0;
364  int N_excitons_quenched = 0;
365  int N_excitons = 0;
366  int N_singlets = 0;
367  int N_triplets = 0;
368  int N_electrons_created = 0;
369  int N_electrons_recombined = 0;
370  int N_electrons_collected = 0;
371  int N_electrons = 0;
372  int N_holes_created = 0;
373  int N_holes_recombined = 0;
374  int N_holes_collected = 0;
375  int N_holes = 0;
376  int N_geminate_recombinations = 0;
377  int N_bimolecular_recombinations = 0;
378  int N_electron_surface_recombinations = 0;
379  int N_hole_surface_recombinations = 0;
380  int N_transient_cycles = 0;
381  // Additional Functions
382  double calculateCoulomb(const std::list<Polaron>::iterator polaron_it, const Coords& coords) const;
383  double calculateCoulomb(const bool charge, const Coords& coords) const;
384  Coords calculateExcitonCreationCoords();
385  void calculateExcitonEvents(Exciton* exciton_ptr);
386  void calculateObjectListEvents(const std::vector<Object*>& object_ptr_vec);
387  void calculatePolaronEvents(Polaron* polaron_ptr);
388  void createCorrelatedDOS(const double correlation_length);
389  bool createImportedMorphology();
390  void deleteObject(Object* object_ptr);
391  // Exciton Event Execution Functions
392  bool executeExcitonCreation();
393  bool executeExcitonHop(const std::list<Event*>::iterator event_it);
394  bool executeExcitonRecombination(const std::list<Event*>::iterator event_it);
395  bool executeExcitonDissociation(const std::list<Event*>::iterator event_it);
396  bool executeExcitonIntersystemCrossing(const std::list<Event*>::iterator event_it);
397  bool executeExcitonExcitonAnnihilation(const std::list<Event*>::iterator event_it);
398  bool executeExcitonPolaronAnnihilation(const std::list<Event*>::iterator event_it);
399  // General Event Functions
400  bool executeObjectHop(const std::list<Event*>::iterator event_it);
401  // Polaron Event Execution Functions
402  bool executePolaronHop(const std::list<Event*>::iterator event_it);
403  bool executePolaronRecombination(const std::list<Event*>::iterator event_it);
404  bool executePolaronExtraction(const std::list<Event*>::iterator event_it);
405  Coords generateExciton();
406  void generateElectron(const Coords& coords,int tag);
407  void generateHole(const Coords& coords,int tag);
408  void generateDynamicsExcitons();
409  void generateToFPolarons();
410  std::list<Exciton>::iterator getExcitonIt(const Object* object_ptr);
411  std::list<Polaron>::iterator getPolaronIt(const Object* object_ptr);
412  double getSiteEnergy(const Coords& coords) const;
413  short getSiteType(const Coords& coords) const;
414  bool initializeArchitecture();
415  bool siteContainsHole(const Coords& coords);
416  void updateTransientData();
417 };
418 
419 #endif //OSC_SIM_H
Definition: OSC_Sim.h:125
-
int getN_excitons_created() const
Definition: OSC_Sim.cpp:2364
-
std::vector< double > getDynamicsElectronMSDV() const
Definition: OSC_Sim.cpp:2292
+Go to the documentation of this file.
1 // Copyright (c) 2018 Michael C. Heiber
2 // This source file is part of the Excimontec project, which is subject to the MIT License.
3 // For more information, see the LICENSE file that accompanies this software.
4 // The Excimontec project can be found on Github at https://github.com/MikeHeiber/Excimontec
5 
6 #ifndef OSC_SIM_H
7 #define OSC_SIM_H
8 
10 #include "KMC_Lattice/Site.h"
11 #include "Exciton.h"
12 #include "Polaron.h"
13 #include <algorithm>
14 #include <numeric>
15 
17  // Additional General Parameters
19  // Morphology Parameters
20  bool Enable_neat; // Neat takes on donor properties
22  int Thickness_donor; // sites
23  int Thickness_acceptor; // sites
25  double Acceptor_conc;
27  std::ifstream* Morphology_file;
28  // Test Parameters
29  int N_tests;
45  // Exciton Parameters
48  double Singlet_lifetime_donor; // seconds
49  double Singlet_lifetime_acceptor; // seconds
50  double Triplet_lifetime_donor; // seconds
51  double Triplet_lifetime_acceptor; // seconds
77  // Polaron Parameters
81  double Polaron_localization_donor; // nm^-1
91  // Additional Lattice Parameters
92  double Homo_donor;
93  double Lumo_donor;
94  double Homo_acceptor;
95  double Lumo_acceptor;
97  double Energy_stdev_donor; // eV
98  double Energy_stdev_acceptor; // eV
100  double Energy_urbach_donor; // eV
106  int Power_kernel_exponent; // must be negative
107  // Coulomb Calculation Parameters
110  int Coulomb_cutoff; // nm
111 };
112 
113 class Site_OSC : public Site{
114  public:
115  double getEnergy() const{return *energy_it;}
116  short getType() const{return type;}
117  void setEnergy(const double energy) { *energy_it = energy; }
118  void setEnergyIt(const std::vector<double>::iterator it){energy_it = it;}
119  void setType(const short site_type){type = site_type;}
120  private:
121  std::vector<double>::iterator energy_it;
122  short type = 0; // type 1 represent donor, type 2 represents acceptor
123 };
124 
125 class OSC_Sim : public Simulation{
126  public:
127  // Functions
128  OSC_Sim();
129  virtual ~OSC_Sim();
130  bool init(const Parameters_OPV& params,const int id);
131  double calculateDiffusionLength_avg() const;
132  double calculateDiffusionLength_stdev() const;
133  std::vector<std::pair<double,double>> calculateDOSCorrelation(const double cutoff_radius);
134  std::vector<double> calculateTransitTimeDist(const std::vector<double>& data,const int counts) const;
135  double calculateTransitTime_avg() const;
136  double calculateTransitTime_stdev() const;
137  std::vector<double> calculateMobilities(const std::vector<double>& transit_times) const;
138  double calculateMobility_avg() const;
139  double calculateMobility_stdev() const;
140  bool checkFinished() const;
141  bool checkParameters(const Parameters_OPV& params) const;
142  bool executeNextEvent();
143  std::vector<double> getDiffusionData() const;
144  std::vector<std::pair<double, double>> getDOSCorrelationData() const;
145  std::vector<double> getDynamicsExcitonEnergies() const;
146  std::vector<double> getDynamicsElectronEnergies() const;
147  std::vector<double> getDynamicsHoleEnergies() const;
148  std::vector<int> getDynamicsTransientSinglets() const;
149  std::vector<int> getDynamicsTransientTriplets() const;
150  std::vector<int> getDynamicsTransientElectrons() const;
151  std::vector<int> getDynamicsTransientHoles() const;
152  std::vector<double> getDynamicsTransientTimes() const;
153  std::vector<double> getDynamicsExcitonMSDV() const;
154  std::vector<double> getDynamicsElectronMSDV() const;
155  std::vector<double> getDynamicsHoleMSDV() const;
156  double getInternalField() const;
157  std::vector<double> getSiteEnergies(const short site_type) const;
158  std::vector<std::string> getChargeExtractionMap(const bool charge) const;
159  std::vector<int> getToFTransientCounts() const;
160  std::vector<double> getToFTransientEnergies() const;
161  std::vector<double> getToFTransientTimes() const;
162  std::vector<double> getToFTransientVelocities() const;
163  std::vector<double> getTransitTimeData() const;
164  int getN_excitons_created() const;
165  int getN_excitons_created(const short site_type) const;
166  int getN_excitons_dissociated() const;
174  int getN_electrons_created() const;
175  int getN_electrons_collected() const;
176  int getN_electrons_recombined() const;
177  int getN_holes_created() const;
178  int getN_holes_collected() const;
179  int getN_holes_recombined() const;
180  int getN_geminate_recombinations() const;
182  int getN_transient_cycles() const;
183  void outputStatus();
184  void reassignSiteEnergies();
185  protected:
186 
187  private:
188  // Additional General Parameters
189  double Internal_potential;
190  // Morphology Parameters
191  bool Enable_neat; // Neat takes on donor properties
192  bool Enable_bilayer;
193  int Thickness_donor; // sites
194  int Thickness_acceptor; // sites
195  bool Enable_random_blend;
196  double Acceptor_conc;
197  bool Enable_import_morphology;
198  std::ifstream* Morphology_file;
199  // Test Parameters
200  int N_tests;
201  bool Enable_exciton_diffusion_test;
202  bool Enable_ToF_test;
203  bool ToF_polaron_type;
204  int ToF_initial_polarons;
205  //double ToF_transient_start;
206  //double ToF_transient_end;
207  //int ToF_pnts_per_decade;
208  bool Enable_IQE_test;
209  double IQE_time_cutoff;
210  bool Enable_dynamics_test;
211  bool Enable_dynamics_extraction;
212  double Dynamics_initial_exciton_conc;
213  //double Dynamics_transient_start;
214  //double Dynamics_transient_end;
215  //int Dynamics_pnts_per_decade;
216  double Transient_start;
217  double Transient_end;
218  int Transient_pnts_per_decade;
219  // Exciton Parameters
220  double Exciton_generation_rate_donor;
221  double Exciton_generation_rate_acceptor;
222  double Singlet_lifetime_donor; // seconds
223  double Singlet_lifetime_acceptor; // seconds
224  double Triplet_lifetime_donor; // seconds
225  double Triplet_lifetime_acceptor; // seconds
226  double R_singlet_hopping_donor;
227  double R_singlet_hopping_acceptor;
228  double Singlet_localization_donor;
229  double Singlet_localization_acceptor;
230  double R_triplet_hopping_donor;
231  double R_triplet_hopping_acceptor;
232  double Triplet_localization_donor;
233  double Triplet_localization_acceptor;
234  bool Enable_FRET_triplet_annihilation;
235  double R_exciton_exciton_annihilation_donor;
236  double R_exciton_exciton_annihilation_acceptor;
237  double R_exciton_polaron_annihilation_donor;
238  double R_exciton_polaron_annihilation_acceptor;
239  int FRET_cutoff;
240  double E_exciton_binding_donor;
241  double E_exciton_binding_acceptor;
242  double R_exciton_dissociation_donor;
243  double R_exciton_dissociation_acceptor;
244  int Exciton_dissociation_cutoff; // nm
245  double R_exciton_isc_donor;
246  double R_exciton_isc_acceptor;
247  double R_exciton_risc_donor;
248  double R_exciton_risc_acceptor;
249  double E_exciton_ST_donor;
250  double E_exciton_ST_acceptor;
251  // Polaron Parameters
252  bool Enable_phase_restriction;
253  double R_polaron_hopping_donor;
254  double R_polaron_hopping_acceptor;
255  double Polaron_localization_donor; // nm^-1
256  double Polaron_localization_acceptor; // nm^-1
257  bool Enable_miller_abrahams;
258  bool Enable_marcus;
259  double Reorganization_donor;
260  double Reorganization_acceptor;
261  double R_polaron_recombination;
262  int Polaron_hopping_cutoff; // nm
263  bool Enable_gaussian_polaron_delocalization;
264  double Polaron_delocalization_length;
265  // Additional Lattice Parameters
266  double Homo_donor;
267  double Lumo_donor;
268  double Homo_acceptor;
269  double Lumo_acceptor;
270  bool Enable_gaussian_dos;
271  double Energy_stdev_donor; // eV
272  double Energy_stdev_acceptor; // eV
273  bool Enable_exponential_dos;
274  double Energy_urbach_donor;
275  double Energy_urbach_acceptor;
276  bool Enable_correlated_disorder;
277  double Disorder_correlation_length; // nm
278  bool Enable_gaussian_kernel;
279  bool Enable_power_kernel;
280  int Power_kernel_exponent; // must be negative
281  // Coulomb Calculation Parameters
282  double Dielectric_donor;
283  double Dielectric_acceptor;
284  int Coulomb_cutoff; // nm
285  // Additional Output Files
286  //
287  // Additional Parameters
288  bool isLightOn;
289  double R_exciton_generation_donor;
290  double R_exciton_generation_acceptor;
291  double Transient_creation_time;
292  int Transient_index_prev;
293  int Transient_singlet_counts_prev;
294  int Transient_triplet_counts_prev;
295  int Transient_electron_counts_prev;
296  int Transient_hole_counts_prev;
297  // Site Data Structure
298  std::vector<Site_OSC> sites;
299  // Object Data Structures
300  std::list<Exciton> excitons;
301  std::list<Polaron> electrons;
302  std::list<Polaron> holes;
303  // Event Data Structures
304  std::list<Exciton_Creation> exciton_creation_events;
305  std::list<Event*>::const_iterator exciton_creation_it;
306  std::list<Exciton_Hop> exciton_hop_events;
307  std::list<Exciton_Recombination> exciton_recombination_events;
308  std::list<Exciton_Dissociation> exciton_dissociation_events;
309  std::list<Exciton_Exciton_Annihilation> exciton_exciton_annihilation_events;
310  std::list<Exciton_Polaron_Annihilation> exciton_polaron_annihilation_events;
311  std::list<Exciton_Intersystem_Crossing> exciton_intersystem_crossing_events;
312  std::list<Polaron_Hop> electron_hop_events;
313  std::list<Polaron_Hop> hole_hop_events;
314  std::list<Polaron_Recombination> polaron_recombination_events;
315  std::list<Polaron_Extraction> electron_extraction_events;
316  std::list<Polaron_Extraction> hole_extraction_events;
317  // Additional Data Structures
318  std::vector<double> Coulomb_table;
319  std::vector<double> E_potential;
320  std::vector<double> site_energies_donor;
321  std::vector<double> site_energies_acceptor;
322  std::vector<std::pair<double, double>> DOS_correlation_data;
323  std::vector<double> diffusion_distances;
324  std::vector<int> transient_exciton_tags;
325  std::vector<int> transient_electron_tags;
326  std::vector<int> transient_hole_tags;
327  std::vector<int> ToF_positions_prev;
328  std::vector<double> transient_exciton_energies_prev;
329  std::vector<double> transient_electron_energies_prev;
330  std::vector<double> transient_hole_energies_prev;
331  std::vector<double> transient_exciton_msdv;
332  std::vector<double> transient_electron_msdv;
333  std::vector<double> transient_hole_msdv;
334  std::vector<int> electron_extraction_data;
335  std::vector<int> hole_extraction_data;
336  std::vector<double> transient_times;
337  std::vector<double> transient_velocities;
338  std::vector<double> transient_exciton_energies;
339  std::vector<double> transient_electron_energies;
340  std::vector<double> transient_hole_energies;
341  std::vector<double> transit_times;
342  std::vector<int> transient_singlet_counts;
343  std::vector<int> transient_triplet_counts;
344  std::vector<int> transient_electron_counts;
345  std::vector<int> transient_hole_counts;
346  // Additional Counters
347  int N_donor_sites;
348  int N_acceptor_sites;
349  int N_excitons_created = 0;
350  int N_excitons_created_donor = 0;
351  int N_excitons_created_acceptor = 0;
352  int N_singlet_excitons_recombined = 0;
353  int N_triplet_excitons_recombined = 0;
354  int N_excitons_dissociated = 0;
355  int N_singlet_singlet_annihilations = 0;
356  int N_singlet_triplet_annihilations = 0;
357  int N_triplet_triplet_annihilations = 0;
358  int N_singlet_polaron_annihilations = 0;
359  int N_triplet_polaron_annihilations = 0;
360  int N_exciton_intersystem_crossings = 0;
361  int N_exciton_reverse_intersystem_crossings = 0;
362  int N_excitons_quenched = 0;
363  int N_excitons = 0;
364  int N_singlets = 0;
365  int N_triplets = 0;
366  int N_electrons_created = 0;
367  int N_electrons_recombined = 0;
368  int N_electrons_collected = 0;
369  int N_electrons = 0;
370  int N_holes_created = 0;
371  int N_holes_recombined = 0;
372  int N_holes_collected = 0;
373  int N_holes = 0;
374  int N_geminate_recombinations = 0;
375  int N_bimolecular_recombinations = 0;
376  int N_electron_surface_recombinations = 0;
377  int N_hole_surface_recombinations = 0;
378  int N_transient_cycles = 0;
379  // Additional Functions
380  double calculateCoulomb(const std::list<Polaron>::const_iterator polaron_it, const Coords& coords) const;
381  double calculateCoulomb(const bool charge, const Coords& coords) const;
382  Coords calculateExcitonCreationCoords();
383  void calculateExcitonEvents(Exciton* exciton_ptr);
384  void calculateObjectListEvents(const std::vector<Object*>& object_ptr_vec);
385  void calculatePolaronEvents(Polaron* polaron_ptr);
386  void createCorrelatedDOS(const double correlation_length);
387  bool createImportedMorphology();
388  void deleteObject(Object* object_ptr);
389  // Exciton Event Execution Functions
390  bool executeExcitonCreation();
391  bool executeExcitonHop(const std::list<Event*>::const_iterator event_it);
392  bool executeExcitonRecombination(const std::list<Event*>::const_iterator event_it);
393  bool executeExcitonDissociation(const std::list<Event*>::const_iterator event_it);
394  bool executeExcitonIntersystemCrossing(const std::list<Event*>::const_iterator event_it);
395  bool executeExcitonExcitonAnnihilation(const std::list<Event*>::const_iterator event_it);
396  bool executeExcitonPolaronAnnihilation(const std::list<Event*>::const_iterator event_it);
397  // General Event Functions
398  bool executeObjectHop(const std::list<Event*>::const_iterator event_it);
399  // Polaron Event Execution Functions
400  bool executePolaronHop(const std::list<Event*>::const_iterator event_it);
401  bool executePolaronRecombination(const std::list<Event*>::const_iterator event_it);
402  bool executePolaronExtraction(const std::list<Event*>::const_iterator event_it);
403  Coords generateExciton();
404  void generateElectron(const Coords& coords,int tag);
405  void generateHole(const Coords& coords,int tag);
406  void generateDynamicsExcitons();
407  void generateToFPolarons();
408  std::list<Exciton>::iterator getExcitonIt(const Object* object_ptr);
409  std::list<Polaron>::iterator getPolaronIt(const Object* object_ptr);
410  double getSiteEnergy(const Coords& coords) const;
411  short getSiteType(const Coords& coords) const;
412  bool initializeArchitecture();
413  bool siteContainsHole(const Coords& coords);
414  void updateTransientData();
415 };
416 
417 #endif //OSC_SIM_H
Definition: OSC_Sim.h:125
+
int getN_excitons_created() const
Definition: OSC_Sim.cpp:2352
+
std::vector< double > getDynamicsElectronMSDV() const
Definition: OSC_Sim.cpp:2276
double IQE_time_cutoff
Definition: OSC_Sim.h:38
double Internal_potential
Definition: OSC_Sim.h:18
double Energy_urbach_donor
Definition: OSC_Sim.h:100
-
std::vector< double > getSiteEnergies(const short site_type) const
Definition: OSC_Sim.cpp:2454
-
std::vector< double > getDynamicsTransientTimes() const
Definition: OSC_Sim.cpp:2332
+
std::vector< double > getSiteEnergies(const short site_type) const
Definition: OSC_Sim.cpp:2442
+
std::vector< double > getDynamicsTransientTimes() const
Definition: OSC_Sim.cpp:2316
double R_singlet_hopping_acceptor
Definition: OSC_Sim.h:53
bool Enable_bilayer
Definition: OSC_Sim.h:21
double Triplet_lifetime_donor
Definition: OSC_Sim.h:50
void setEnergy(const double energy)
Definition: OSC_Sim.h:117
-
std::vector< double > getDynamicsElectronEnergies() const
Definition: OSC_Sim.cpp:2304
-
int getN_singlet_triplet_annihilations() const
Definition: OSC_Sim.cpp:2393
+
std::vector< double > getDynamicsElectronEnergies() const
Definition: OSC_Sim.cpp:2288
+
int getN_singlet_triplet_annihilations() const
Definition: OSC_Sim.cpp:2381
int Thickness_acceptor
Definition: OSC_Sim.h:23
double Reorganization_acceptor
Definition: OSC_Sim.h:86
bool Enable_power_kernel
Definition: OSC_Sim.h:105
double E_exciton_ST_donor
Definition: OSC_Sim.h:75
double Dynamics_initial_exciton_conc
Definition: OSC_Sim.h:41
-
std::vector< double > getDynamicsHoleMSDV() const
Definition: OSC_Sim.cpp:2296
+
std::vector< double > getDynamicsHoleMSDV() const
Definition: OSC_Sim.cpp:2280
void setEnergyIt(const std::vector< double >::iterator it)
Definition: OSC_Sim.h:118
double Polaron_delocalization_length
Definition: OSC_Sim.h:90
int Polaron_hopping_cutoff
Definition: OSC_Sim.h:88
@@ -118,10 +118,10 @@
double Energy_stdev_acceptor
Definition: OSC_Sim.h:98
std::vector< double > calculateMobilities(const std::vector< double > &transit_times) const
Definition: OSC_Sim.cpp:379
double R_exciton_polaron_annihilation_donor
Definition: OSC_Sim.h:63
-
std::vector< double > getDynamicsExcitonEnergies() const
Definition: OSC_Sim.cpp:2300
-
void outputStatus()
Definition: OSC_Sim.cpp:2595
+
std::vector< double > getDynamicsExcitonEnergies() const
Definition: OSC_Sim.cpp:2284
+
void outputStatus()
Definition: OSC_Sim.cpp:2583
bool ToF_polaron_type
Definition: OSC_Sim.h:32
-
int getN_triplet_excitons_recombined() const
Definition: OSC_Sim.cpp:2385
+
int getN_triplet_excitons_recombined() const
Definition: OSC_Sim.cpp:2373
double ToF_transient_start
Definition: OSC_Sim.h:34
double Triplet_lifetime_acceptor
Definition: OSC_Sim.h:51
@@ -131,19 +131,19 @@
bool Enable_miller_abrahams
Definition: OSC_Sim.h:83
double R_polaron_hopping_donor
Definition: OSC_Sim.h:79
double Lumo_donor
Definition: OSC_Sim.h:93
-
std::vector< int > getDynamicsTransientHoles() const
Definition: OSC_Sim.cpp:2328
-
int getN_transient_cycles() const
Definition: OSC_Sim.cpp:2425
+
std::vector< int > getDynamicsTransientHoles() const
Definition: OSC_Sim.cpp:2312
+
int getN_transient_cycles() const
Definition: OSC_Sim.cpp:2413
double Lumo_acceptor
Definition: OSC_Sim.h:95
int Dynamics_pnts_per_decade
Definition: OSC_Sim.h:44
-
int getN_excitons_dissociated() const
Definition: OSC_Sim.cpp:2377
+
int getN_excitons_dissociated() const
Definition: OSC_Sim.cpp:2365
int FRET_cutoff
Definition: OSC_Sim.h:65
double Dielectric_acceptor
Definition: OSC_Sim.h:109
-
int getN_holes_recombined() const
Definition: OSC_Sim.cpp:2421
+
int getN_holes_recombined() const
Definition: OSC_Sim.cpp:2409
This struct contains all of the main input parameters needed by the Simulation class.
Definition: Simulation.h:25
bool Enable_random_blend
Definition: OSC_Sim.h:24
double Dielectric_donor
Definition: OSC_Sim.h:108
std::vector< std::pair< double, double > > calculateDOSCorrelation(const double cutoff_radius)
Definition: OSC_Sim.cpp:338
-
std::vector< int > getDynamicsTransientTriplets() const
Definition: OSC_Sim.cpp:2316
+
std::vector< int > getDynamicsTransientTriplets() const
Definition: OSC_Sim.cpp:2300
int Thickness_donor
Definition: OSC_Sim.h:22
double Dynamics_transient_end
Definition: OSC_Sim.h:43
bool Enable_dynamics_extraction
Definition: OSC_Sim.h:40
@@ -152,13 +152,13 @@
bool Enable_import_morphology
Definition: OSC_Sim.h:26
double R_polaron_hopping_acceptor
Definition: OSC_Sim.h:80
bool Enable_gaussian_polaron_delocalization
Definition: OSC_Sim.h:89
-
int getN_geminate_recombinations() const
Definition: OSC_Sim.cpp:2409
-
double calculateTransitTime_avg() const
Definition: OSC_Sim.cpp:416
-
std::vector< double > calculateTransitTimeDist(const std::vector< double > &data, const int counts) const
Definition: OSC_Sim.cpp:403
-
std::vector< int > getDynamicsTransientSinglets() const
Definition: OSC_Sim.cpp:2312
+
int getN_geminate_recombinations() const
Definition: OSC_Sim.cpp:2397
+
double calculateTransitTime_avg() const
Definition: OSC_Sim.cpp:411
+
std::vector< double > calculateTransitTimeDist(const std::vector< double > &data, const int counts) const
Definition: OSC_Sim.cpp:398
+
std::vector< int > getDynamicsTransientSinglets() const
Definition: OSC_Sim.cpp:2296
int ToF_pnts_per_decade
Definition: OSC_Sim.h:36
-
int getN_electrons_collected() const
Definition: OSC_Sim.cpp:2352
-
int getN_holes_created() const
Definition: OSC_Sim.cpp:2417
+
int getN_electrons_collected() const
Definition: OSC_Sim.cpp:2340
+
int getN_holes_created() const
Definition: OSC_Sim.cpp:2405
double E_exciton_binding_donor
Definition: OSC_Sim.h:66
double R_triplet_hopping_acceptor
Definition: OSC_Sim.h:57
double Singlet_localization_donor
Definition: OSC_Sim.h:54
@@ -172,9 +172,9 @@
double Singlet_lifetime_donor
Definition: OSC_Sim.h:48
double Energy_urbach_acceptor
Definition: OSC_Sim.h:101
double Dynamics_transient_start
Definition: OSC_Sim.h:42
-
std::vector< int > getToFTransientCounts() const
Definition: OSC_Sim.cpp:2508
+
std::vector< int > getToFTransientCounts() const
Definition: OSC_Sim.cpp:2496
double Triplet_localization_donor
Definition: OSC_Sim.h:58
-
std::vector< std::pair< double, double > > getDOSCorrelationData() const
Definition: OSC_Sim.cpp:2324
+
std::vector< std::pair< double, double > > getDOSCorrelationData() const
Definition: OSC_Sim.cpp:2308
Definition: OSC_Sim.h:16
double R_exciton_exciton_annihilation_donor
Definition: OSC_Sim.h:61
bool Enable_exciton_diffusion_test
Definition: OSC_Sim.h:30
@@ -186,68 +186,69 @@
double calculateDiffusionLength_avg() const
Definition: OSC_Sim.cpp:330
virtual ~OSC_Sim()
Definition: OSC_Sim.cpp:15
double Homo_donor
Definition: OSC_Sim.h:92
-
std::vector< int > getDynamicsTransientElectrons() const
Definition: OSC_Sim.cpp:2320
+
std::vector< int > getDynamicsTransientElectrons() const
Definition: OSC_Sim.cpp:2304
bool Enable_FRET_triplet_annihilation
Definition: OSC_Sim.h:60
-
std::vector< double > getDynamicsExcitonMSDV() const
Definition: OSC_Sim.cpp:2288
-
bool executeNextEvent()
Executes the next event in the simulation.
Definition: OSC_Sim.cpp:1867
+
std::vector< double > getDynamicsExcitonMSDV() const
Definition: OSC_Sim.cpp:2272
+
bool executeNextEvent()
Executes the next event in the simulation.
Definition: OSC_Sim.cpp:1862
bool Enable_marcus
Definition: OSC_Sim.h:84
-
std::vector< double > getToFTransientEnergies() const
Definition: OSC_Sim.cpp:2517
+
std::vector< double > getToFTransientEnergies() const
Definition: OSC_Sim.cpp:2505
double Exciton_generation_rate_acceptor
Definition: OSC_Sim.h:47
double Polaron_localization_acceptor
Definition: OSC_Sim.h:82
double R_exciton_polaron_annihilation_acceptor
Definition: OSC_Sim.h:64
double Triplet_localization_acceptor
Definition: OSC_Sim.h:59
bool Enable_gaussian_dos
Definition: OSC_Sim.h:96
-
bool checkFinished() const
Checks whether or not the simulation has finished.
Definition: OSC_Sim.cpp:1058
-
double calculateMobility_avg() const
Definition: OSC_Sim.cpp:387
+
bool checkFinished() const
Checks whether or not the simulation has finished.
Definition: OSC_Sim.cpp:1053
+
double calculateMobility_avg() const
Definition: OSC_Sim.cpp:388
bool Enable_IQE_test
Definition: OSC_Sim.h:37
This abstract base class contains the basic properties of a KMC simulation and the functions needed t...
Definition: Simulation.h:63
double E_exciton_binding_acceptor
Definition: OSC_Sim.h:67
-
std::vector< double > getToFTransientTimes() const
Definition: OSC_Sim.cpp:2526
-
std::vector< double > getToFTransientVelocities() const
Definition: OSC_Sim.cpp:2530
-
int getN_electrons_recombined() const
Definition: OSC_Sim.cpp:2360
+
std::vector< double > getToFTransientTimes() const
Definition: OSC_Sim.cpp:2514
+
std::vector< double > getToFTransientVelocities() const
Definition: OSC_Sim.cpp:2518
+
int getN_electrons_recombined() const
Definition: OSC_Sim.cpp:2348
bool Enable_gaussian_kernel
Definition: OSC_Sim.h:104
bool Enable_exponential_dos
Definition: OSC_Sim.h:99
double Acceptor_conc
Definition: OSC_Sim.h:25
double R_exciton_dissociation_donor
Definition: OSC_Sim.h:68
double getEnergy() const
Definition: OSC_Sim.h:115
double R_triplet_hopping_donor
Definition: OSC_Sim.h:56
-
int getN_holes_collected() const
Definition: OSC_Sim.cpp:2413
+
int getN_holes_collected() const
Definition: OSC_Sim.cpp:2401
This simple struct contains Cartesian coordinates specified by integers x,y,z.
Definition: Utils.h:25
double Homo_acceptor
Definition: OSC_Sim.h:94
short getType() const
Definition: OSC_Sim.h:116
-
int getN_singlet_singlet_annihilations() const
Definition: OSC_Sim.cpp:2389
+
int getN_singlet_singlet_annihilations() const
Definition: OSC_Sim.cpp:2377
double Polaron_localization_donor
Definition: OSC_Sim.h:81
double E_exciton_ST_acceptor
Definition: OSC_Sim.h:76
-
double calculateTransitTime_stdev() const
Definition: OSC_Sim.cpp:420
+
double calculateTransitTime_stdev() const
Definition: OSC_Sim.cpp:415
This base class contains the basic properties of a KMC simulation object and the functions needed to ...
Definition: Object.h:23
double calculateDiffusionLength_stdev() const
Definition: OSC_Sim.cpp:334
-
Definition: Exciton.h:15
+
This class extends the Object class to create an exciton object to represent a singlet or triplet exc...
Definition: Exciton.h:19
double Disorder_correlation_length
Definition: OSC_Sim.h:103
-
void reassignSiteEnergies()
Definition: OSC_Sim.cpp:2638
+
void reassignSiteEnergies()
Definition: OSC_Sim.cpp:2626
bool Enable_correlated_disorder
Definition: OSC_Sim.h:102
-
std::vector< double > getDynamicsHoleEnergies() const
Definition: OSC_Sim.cpp:2308
-
std::vector< double > getTransitTimeData() const
Definition: OSC_Sim.cpp:2534
-
int getN_triplet_polaron_annihilations() const
Definition: OSC_Sim.cpp:2405
+
std::vector< double > getDynamicsHoleEnergies() const
Definition: OSC_Sim.cpp:2292
+
std::vector< double > getTransitTimeData() const
Definition: OSC_Sim.cpp:2522
+
int getN_triplet_polaron_annihilations() const
Definition: OSC_Sim.cpp:2393
double Reorganization_donor
Definition: OSC_Sim.h:85
-
double calculateMobility_stdev() const
Definition: OSC_Sim.cpp:395
+
double calculateMobility_stdev() const
Definition: OSC_Sim.cpp:393
OSC_Sim()
Definition: OSC_Sim.cpp:11
-
int getN_bimolecular_recombinations() const
Definition: OSC_Sim.cpp:2348
+
int getN_bimolecular_recombinations() const
Definition: OSC_Sim.cpp:2336
bool Enable_neat
Definition: OSC_Sim.h:20
-
int getN_singlet_excitons_recombined() const
Definition: OSC_Sim.cpp:2381
+
int getN_singlet_excitons_recombined() const
Definition: OSC_Sim.cpp:2369
bool Enable_ToF_test
Definition: OSC_Sim.h:31
-
std::vector< std::string > getChargeExtractionMap(const bool charge) const
Definition: OSC_Sim.cpp:2472
-
int getN_triplet_triplet_annihilations() const
Definition: OSC_Sim.cpp:2397
+
std::vector< std::string > getChargeExtractionMap(const bool charge) const
Definition: OSC_Sim.cpp:2460
+
double getInternalField() const
Definition: OSC_Sim.cpp:2332
+
int getN_triplet_triplet_annihilations() const
Definition: OSC_Sim.cpp:2385
int Power_kernel_exponent
Definition: OSC_Sim.h:106
double Energy_stdev_donor
Definition: OSC_Sim.h:97
double Singlet_localization_acceptor
Definition: OSC_Sim.h:55
-
bool checkParameters(const Parameters_OPV &params) const
Definition: OSC_Sim.cpp:1085
+
bool checkParameters(const Parameters_OPV &params) const
Definition: OSC_Sim.cpp:1080
double R_singlet_hopping_donor
Definition: OSC_Sim.h:52
void setType(const short site_type)
Definition: OSC_Sim.h:119
-
int getN_electrons_created() const
Definition: OSC_Sim.cpp:2356
-
int getN_singlet_polaron_annihilations() const
Definition: OSC_Sim.cpp:2401
+
int getN_electrons_created() const
Definition: OSC_Sim.cpp:2344
+
int getN_singlet_polaron_annihilations() const
Definition: OSC_Sim.cpp:2389
bool init(const Parameters_OPV &params, const int id)
Definition: OSC_Sim.cpp:19
-
std::vector< double > getDiffusionData() const
Definition: OSC_Sim.cpp:2284
+
std::vector< double > getDiffusionData() const
Definition: OSC_Sim.cpp:2268
int N_tests
Definition: OSC_Sim.h:29
bool Enable_dynamics_test
Definition: OSC_Sim.h:39
int Exciton_dissociation_cutoff
Definition: OSC_Sim.h:70
diff --git a/docs/_object_8cpp.html b/docs/_object_8cpp.html index f276942..1cbaaea 100644 --- a/docs/_object_8cpp.html +++ b/docs/_object_8cpp.html @@ -30,7 +30,7 @@
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
diff --git a/docs/_object_8h.html b/docs/_object_8h.html index e752504..9774abc 100644 --- a/docs/_object_8h.html +++ b/docs/_object_8h.html @@ -30,7 +30,7 @@
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
diff --git a/docs/_object_8h_source.html b/docs/_object_8h_source.html index cfe0f9a..8b95986 100644 --- a/docs/_object_8h_source.html +++ b/docs/_object_8h_source.html @@ -30,7 +30,7 @@
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
diff --git a/docs/_polaron_8cpp.html b/docs/_polaron_8cpp.html index cf1c9d1..9405f37 100644 --- a/docs/_polaron_8cpp.html +++ b/docs/_polaron_8cpp.html @@ -30,7 +30,7 @@
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
diff --git a/docs/_polaron_8h.html b/docs/_polaron_8h.html index a102654..3c2e312 100644 --- a/docs/_polaron_8h.html +++ b/docs/_polaron_8h.html @@ -30,7 +30,7 @@
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
diff --git a/docs/_polaron_8h_source.html b/docs/_polaron_8h_source.html index 935954c..d4351d5 100644 --- a/docs/_polaron_8h_source.html +++ b/docs/_polaron_8h_source.html @@ -30,7 +30,7 @@
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
diff --git a/docs/_r_e_a_d_m_e_8md.html b/docs/_r_e_a_d_m_e_8md.html index aeb8936..d8a3f72 100644 --- a/docs/_r_e_a_d_m_e_8md.html +++ b/docs/_r_e_a_d_m_e_8md.html @@ -30,7 +30,7 @@
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
diff --git a/docs/_simulation_8cpp.html b/docs/_simulation_8cpp.html index 2ac70fc..3534d10 100644 --- a/docs/_simulation_8cpp.html +++ b/docs/_simulation_8cpp.html @@ -30,7 +30,7 @@
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
diff --git a/docs/_simulation_8h.html b/docs/_simulation_8h.html index 4a66bd7..2588d75 100644 --- a/docs/_simulation_8h.html +++ b/docs/_simulation_8h.html @@ -30,7 +30,7 @@
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
diff --git a/docs/_simulation_8h_source.html b/docs/_simulation_8h_source.html index 2e98a2a..3525530 100644 --- a/docs/_simulation_8h_source.html +++ b/docs/_simulation_8h_source.html @@ -30,7 +30,7 @@
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
@@ -91,35 +91,36 @@
Simulation.h
-Go to the documentation of this file.
1 // Copyright (c) 2018 Michael C. Heiber
2 // This source file is part of the KMC_Lattice project, which is subject to the MIT License.
3 // For more information, see the LICENSE file that accompanies this software.
4 // The KMC_Lattice project can be found on Github at https://github.com/MikeHeiber/KMC_Lattice
5 
6 #ifndef SIMULATION_H
7 #define SIMULATION_H
8 
9 #include "Utils.h"
10 #include "Lattice.h"
11 #include "Object.h"
12 #include "Event.h"
13 #include <list>
14 #include <vector>
15 #include <random>
16 #include <iostream>
17 #include <fstream>
18 #include <sstream>
19 #include <ctime>
20 
26 
36  int Length;
38  int Width;
40  int Height;
42  double Unit_size;
46  bool Enable_FRM;
54  std::ofstream* Logfile;
55 };
56 
63 class Simulation{
64  public:
66  virtual ~Simulation();
67 
70  Simulation();
71 
77  void init(const Parameters_Simulation& params, const int id);
78 
83  virtual bool checkFinished() const = 0;
84 
89  virtual bool executeNextEvent() = 0;
90 
93  std::string getErrorMessage() const;
94 
97  int getN_events() const;
98 
100  long int getN_events_executed() const;
101 
105  int getId() const;
106 
108  int getTemp() const;
109 
111  double getTime() const;
112 
117  bool isLoggingEnabled() const;
118 
120  double rand01();
121 
124  void setGeneratorSeed(const int seed);
125 
126  protected:
128  std::mt19937 generator;
130  std::ofstream* Logfile;
134  bool Error_found = false;
136  std::string error_msg;
137 
138  //------ Functions
139 
143  std::list<Event*>::iterator addEvent(Event* event_ptr);
144 
147  void addObject(Object* object_ptr);
148 
152  std::list<Event*>::iterator chooseNextEvent();
153 
158  std::vector<Object*> findRecalcObjects(const Coords& coords_start, const Coords& coords_dest) const;
159 
161  std::vector<Object*> getAllObjectPtrs() const;
162 
166  void moveObject(Object* object_ptr,const Coords& coords_dest);
167 
173  void removeEvent(Event* event_ptr);
174 
181  void removeObject(Object* object_ptr);
182 
185  void setErrorMessage(const std::string& input_msg);
186 
191  void setObjectEvent(const Object* object_ptr,Event* event_ptr);
192 
195  void setTime(const double input_time);
196 
197  private:
198  int Id;
199  // General Parameters
200  bool Enable_logging;
201  int temperature; // Kelvin
202  // KMC Algorithm Event Recalculation Method Parameters
203  bool Enable_FRM;
204  bool Enable_selective_recalc;
205  int Recalc_cutoff;
206  bool Enable_full_recalc;
207  // Data Structures
208  std::list<Object*> object_ptrs;
209  std::list<Event*> event_ptrs;
210  // Counters
211  double time_sim = 0;
212  long int N_objects_created = 0;
213  long int N_events_executed = 0;
214  // Functions
215 
220  std::vector<Object*> findRecalcNeighbors(const Coords& coords) const;
221 };
222 
223 #endif // SIMULATION_H
virtual bool checkFinished() const =0
Checks whether or not the simulation has finished.
-
void removeEvent(Event *event_ptr)
Removes an Event pointer from the event list.
Definition: Simulation.cpp:190
+Go to the documentation of this file.
1 // Copyright (c) 2018 Michael C. Heiber
2 // This source file is part of the KMC_Lattice project, which is subject to the MIT License.
3 // For more information, see the LICENSE file that accompanies this software.
4 // The KMC_Lattice project can be found on Github at https://github.com/MikeHeiber/KMC_Lattice
5 
6 #ifndef SIMULATION_H
7 #define SIMULATION_H
8 
9 #include "Utils.h"
10 #include "Lattice.h"
11 #include "Object.h"
12 #include "Event.h"
13 #include <list>
14 #include <vector>
15 #include <random>
16 #include <iostream>
17 #include <fstream>
18 #include <sstream>
19 #include <ctime>
20 
26 
36  int Length;
38  int Width;
40  int Height;
42  double Unit_size;
46  bool Enable_FRM;
54  std::ofstream* Logfile;
55 };
56 
63 class Simulation{
64  public:
66  virtual ~Simulation();
67 
70  Simulation();
71 
77  void init(const Parameters_Simulation& params, const int id);
78 
83  virtual bool checkFinished() const = 0;
84 
89  virtual bool executeNextEvent() = 0;
90 
93  std::string getErrorMessage() const;
94 
97  int getN_events() const;
98 
100  long int getN_events_executed() const;
101 
105  int getId() const;
106 
108  int getTemp() const;
109 
111  double getTime() const;
112 
114  double getVolume() const;
115 
120  bool isLoggingEnabled() const;
121 
123  double rand01();
124 
127  void setGeneratorSeed(const int seed);
128 
129  protected:
131  std::mt19937 generator;
133  std::ofstream* Logfile;
137  bool Error_found = false;
139  std::string error_msg;
140 
141  //------ Functions
142 
146  std::list<Event*>::const_iterator addEvent(Event* event_ptr);
147 
150  void addObject(Object* object_ptr);
151 
155  std::list<Event*>::const_iterator chooseNextEvent();
156 
161  std::vector<Object*> findRecalcObjects(const Coords& coords_start, const Coords& coords_dest) const;
162 
164  std::vector<Object*> getAllObjectPtrs() const;
165 
169  void moveObject(Object* object_ptr,const Coords& coords_dest);
170 
176  void removeEvent(Event* event_ptr);
177 
184  void removeObject(Object* object_ptr);
185 
188  void setErrorMessage(const std::string& input_msg);
189 
194  void setObjectEvent(const Object* object_ptr,Event* event_ptr);
195 
198  void setTime(const double input_time);
199 
200  private:
201  int Id;
202  // General Parameters
203  bool Enable_logging;
204  int temperature; // Kelvin
205  // KMC Algorithm Event Recalculation Method Parameters
206  bool Enable_FRM;
207  bool Enable_selective_recalc;
208  int Recalc_cutoff;
209  bool Enable_full_recalc;
210  // Data Structures
211  std::list<Object*> object_ptrs;
212  std::list<Event*> event_ptrs;
213  // Counters
214  double time_sim = 0;
215  long int N_objects_created = 0;
216  long int N_events_executed = 0;
217  // Functions
218 
223  std::vector<Object*> findRecalcNeighbors(const Coords& coords) const;
224 };
225 
226 #endif // SIMULATION_H
virtual bool checkFinished() const =0
Checks whether or not the simulation has finished.
+
void removeEvent(Event *event_ptr)
Removes an Event pointer from the event list.
Definition: Simulation.cpp:194
int Temperature
Defines the desired temperature of the simulation in Kelvin.
Definition: Simulation.h:44
std::vector< Object * > findRecalcObjects(const Coords &coords_start, const Coords &coords_dest) const
Constructs and returns a vector of pointers to all Object objects that are to have their events recal...
Definition: Simulation.cpp:79
int getTemp() const
Gets the value of the temperature parameter.
Definition: Simulation.cpp:157
-
std::list< Event * >::iterator addEvent(Event *event_ptr)
Adds a pointer to an Event object to the event list and returns the iterator to its position in the l...
Definition: Simulation.cpp:48
-
bool Error_found
The Error_found flag indicates whether or not there has been an error during one of the simulation op...
Definition: Simulation.h:134
+
bool Error_found
The Error_found flag indicates whether or not there has been an error during one of the simulation op...
Definition: Simulation.h:137
This base class contains the basic properties of a KMC simulation event and the functions needed to i...
Definition: Event.h:26
bool Enable_FRM
Determines whether the first reaction method will be used or not.
Definition: Simulation.h:46
int getId() const
Gets the processor ID number for the processor that is running the simulation.
Definition: Simulation.cpp:139
std::vector< Object * > getAllObjectPtrs() const
Returns a vector of pointers to all Object objects in the simulation.
Definition: Simulation.cpp:126
bool Enable_periodic_x
Determines whether the x-direction periodic boundary conditions will be enabled or not in the Lattice...
Definition: Simulation.h:30
-
std::mt19937 generator
Mersenne Twister random number generator.
Definition: Simulation.h:128
-
void setErrorMessage(const std::string &input_msg)
Sets the error_msg member variable to the input string.
Definition: Simulation.cpp:228
-
void setObjectEvent(const Object *object_ptr, Event *event_ptr)
Overwrites the Event pointer in the event list associated with the indicated Object to the input Even...
Definition: Simulation.cpp:232
-
void setTime(const double input_time)
Updates the simulation time with the input time.
Definition: Simulation.cpp:240
-
void setGeneratorSeed(const int seed)
Sets the random number generator seed.
Definition: Simulation.cpp:236
+
std::mt19937 generator
Mersenne Twister random number generator.
Definition: Simulation.h:131
+
void setErrorMessage(const std::string &input_msg)
Sets the error_msg member variable to the input string.
Definition: Simulation.cpp:232
+
void setObjectEvent(const Object *object_ptr, Event *event_ptr)
Overwrites the Event pointer in the event list associated with the indicated Object to the input Even...
Definition: Simulation.cpp:236
+
void setTime(const double input_time)
Updates the simulation time with the input time.
Definition: Simulation.cpp:244
+
void setGeneratorSeed(const int seed)
Sets the random number generator seed.
Definition: Simulation.cpp:240
This struct contains all of the main input parameters needed by the Simulation class.
Definition: Simulation.h:25
-
std::string error_msg
The error_msg string holds a message with information about the error that has occured or is empty ot...
Definition: Simulation.h:136
-
bool isLoggingEnabled() const
Checks whether or not logging is enabled.
Definition: Simulation.cpp:165
+
std::string error_msg
The error_msg string holds a message with information about the error that has occured or is empty ot...
Definition: Simulation.h:139
+
bool isLoggingEnabled() const
Checks whether or not logging is enabled.
Definition: Simulation.cpp:169
long int getN_events_executed() const
Gets the number of events that have been executed in the simulation.
Definition: Simulation.cpp:153
bool Enable_selective_recalc
Determines whether the selective recalculation method will be used or not.
Definition: Simulation.h:48
virtual ~Simulation()
Default virtual destructor needed by the base class.
Definition: Simulation.cpp:15
+
double getVolume() const
Get the simulation box volume in cm^-3.
Definition: Simulation.cpp:165
-
double rand01()
Generates a uniform random number from 0 to 1, not including 0.
Definition: Simulation.cpp:186
+
double rand01()
Generates a uniform random number from 0 to 1, not including 0.
Definition: Simulation.cpp:190
double getTime() const
Get the current simulation time in units of seconds.
Definition: Simulation.cpp:161
virtual bool executeNextEvent()=0
Executes the next event in the simulation.
-
void moveObject(Object *object_ptr, const Coords &coords_dest)
Moves the designated object to the designated destination coordinates.
Definition: Simulation.cpp:169
+
void moveObject(Object *object_ptr, const Coords &coords_dest)
Moves the designated object to the designated destination coordinates.
Definition: Simulation.cpp:173
bool Enable_full_recalc
Determines whether the full recalculation method will be used or not.
Definition: Simulation.h:52
+
std::list< Event * >::const_iterator addEvent(Event *event_ptr)
Adds a pointer to an Event object to the event list and returns the iterator to its position in the l...
Definition: Simulation.cpp:48
int Recalc_cutoff
Defines the desired event recalculation cutoff radius for the simulation in nm.
Definition: Simulation.h:50
void init(const Parameters_Simulation &params, const int id)
Initializes the Simulation object using the provided Parameters_Simulation struct containing the inpu...
Definition: Simulation.cpp:19
@@ -128,22 +129,22 @@
bool Enable_logging
Determines whether logging to a logfile during the simulation will be enabled or not.
Definition: Simulation.h:28
std::string getErrorMessage() const
Gets the saved error message.
Definition: Simulation.cpp:135
bool Enable_periodic_z
Determines whether the z-direction periodic boundary conditions will be enabled or not in the Lattice...
Definition: Simulation.h:34
+
std::list< Event * >::const_iterator chooseNextEvent()
Searches the event list and determines which event will be executed next.
Definition: Simulation.cpp:67
This abstract base class contains the basic properties of a KMC simulation and the functions needed t...
Definition: Simulation.h:63
int Height
Defines the desired z-direction size of the Lattice.
Definition: Simulation.h:40
int Width
Defines the desired y-direction size of the Lattice.
Definition: Simulation.h:38
-
std::list< Event * >::iterator chooseNextEvent()
Searches the event list and determines which event will be executed next.
Definition: Simulation.cpp:67
bool Enable_periodic_y
Determines whether the y-direction periodic boundary conditions will be enabled or not in the Lattice...
Definition: Simulation.h:32
This simple struct contains Cartesian coordinates specified by integers x,y,z.
Definition: Utils.h:25
This base class contains the basic properties of a KMC simulation object and the functions needed to ...
Definition: Object.h:23
int getN_events() const
Gets the number of events that are currently in the event list.
Definition: Simulation.cpp:143
double Unit_size
Defines the desired resolution of the Lattice in units of nm.
Definition: Simulation.h:42
-
void removeObject(Object *object_ptr)
Removes the Object pointer from the base simulation class.
Definition: Simulation.cpp:205
+
void removeObject(Object *object_ptr)
Removes the Object pointer from the base simulation class.
Definition: Simulation.cpp:209
This class contains the properties of a three-dimensional lattice and the functions needed to interac...
Definition: Lattice.h:41
void addObject(Object *object_ptr)
Adds a pointer to an Object object to the object list.
Definition: Simulation.cpp:53
int Length
Defines the desired x-direction size of the Lattice.
Definition: Simulation.h:36
-
Lattice lattice
The Lattice object represents a three-dimensional lattice, its boundary conditions, and its occupancy.
Definition: Simulation.h:132
-
std::ofstream * Logfile
Pointer to an output file stream that is used to print log messages to a logfile when logging is enab...
Definition: Simulation.h:130
+
Lattice lattice
The Lattice object represents a three-dimensional lattice, its boundary conditions, and its occupancy.
Definition: Simulation.h:135
+
std::ofstream * Logfile
Pointer to an output file stream that is used to print log messages to a logfile when logging is enab...
Definition: Simulation.h:133
std::ofstream * Logfile
Defines the desired output file stream pointer to the logfile.
Definition: Simulation.h:54
diff --git a/docs/_site_8cpp.html b/docs/_site_8cpp.html index caaa90d..99c4df6 100644 --- a/docs/_site_8cpp.html +++ b/docs/_site_8cpp.html @@ -30,7 +30,7 @@
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
diff --git a/docs/_site_8h.html b/docs/_site_8h.html index fb6c4b2..97c3ace 100644 --- a/docs/_site_8h.html +++ b/docs/_site_8h.html @@ -30,7 +30,7 @@
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
diff --git a/docs/_site_8h_source.html b/docs/_site_8h_source.html index a3ef36f..ee96a1f 100644 --- a/docs/_site_8h_source.html +++ b/docs/_site_8h_source.html @@ -30,7 +30,7 @@
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
diff --git a/docs/_utils_8cpp.html b/docs/_utils_8cpp.html index 4a17c8d..223d6e1 100644 --- a/docs/_utils_8cpp.html +++ b/docs/_utils_8cpp.html @@ -30,7 +30,7 @@
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
diff --git a/docs/_utils_8h.html b/docs/_utils_8h.html index bbb137e..b3d9af5 100644 --- a/docs/_utils_8h.html +++ b/docs/_utils_8h.html @@ -30,7 +30,7 @@
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
diff --git a/docs/_utils_8h_source.html b/docs/_utils_8h_source.html index 341d43a..88bf18f 100644 --- a/docs/_utils_8h_source.html +++ b/docs/_utils_8h_source.html @@ -30,7 +30,7 @@
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
@@ -91,9 +91,9 @@
Utils.h
-Go to the documentation of this file.
1 // Copyright (c) 2018 Michael C. Heiber
2 // This source file is part of the KMC_Lattice project, which is subject to the MIT License.
3 // For more information, see the LICENSE file that accompanies this software.
4 // The KMC_Lattice project can be found on Github at https://github.com/MikeHeiber/KMC_Lattice
5 
6 #ifndef UTILS_H
7 #define UTILS_H
8 
9 #include <algorithm>
10 #include <cmath>
11 #include <functional>
12 #include <fstream>
13 #include <iostream>
14 #include <memory>
15 #include <mpi.h>
16 #include <random>
17 #include <set>
18 #include <string>
19 #include <vector>
20 
25 struct Coords{
27  int x;
29  int y;
31  int z;
32 
37  void setXYZ(const int xval,const int yval,const int zval){
38  x = xval;
39  y = yval;
40  z = zval;
41  }
44  bool operator==(const Coords& rhs) const{
45  return (x == rhs.x && y == rhs.y && z == rhs.z);
46  }
49  bool operator!=(const Coords& rhs) const {
50  return (x != rhs.x || y != rhs.y || z != rhs.z);
51  }
52 };
53 
58 namespace Utils {
59 
60  // Scientific Constants
61  static constexpr double K_b = 8.61733035e-5;
62  static constexpr double Elementary_charge = 1.602176621e-19; // C
63  static constexpr double Vacuum_permittivity = 8.854187818e-12; // C/Vm
64  static constexpr double Plank = 6.626070040e-34;
65  static constexpr double Light_speed = 2.99792458e8;
66  static constexpr double Pi = 3.14159265359;
67  static constexpr double Coulomb_constant = 8.987551787e9; // N m^2 C^-2
68 
75  std::vector<std::pair<double,double>> calculateProbabilityHist(const std::vector<double>& data, int num_bins);
76 
83  std::vector<std::pair<double, double>> calculateProbabilityHist(const std::vector<double>& data, double bin_size);
84 
92  std::vector<std::pair<double, double>> calculateProbabilityHist(const std::vector<double>& data, const double bin_size, const int num_bins);
93 
102  void createExponentialDOSVector(std::vector<double>& data, const double mode, const double urbach_energy, std::mt19937& gen);
103 
109  void createGaussianDOSVector(std::vector<double>& data, const double mean, const double stdev, std::mt19937& gen);
110 
116  bool importBooleanParam(const std::string& input, bool& error_status);
117 
122  double integrateData(const std::vector<std::pair<double, double>>& data);
123 
129  double interpolateData(const std::vector<std::pair<double, double>>& data, const double x_val);
130 
137  std::vector<double> MPI_calculateVectorAvg(const std::vector<double>& input_vector);
138 
145  std::vector<double> MPI_calculateVectorSum(const std::vector<double>& input_vector);
146 
153  std::vector<int> MPI_calculateVectorSum(const std::vector<int>& input_vector);
154 
161  std::vector<double> MPI_gatherVectors(const std::vector<double>& input_vector);
162 
166  std::string removeWhitespace(const std::string& str);
167 
168  // Template functions
169 
174  template<typename T>
175  double array_avg(const T data[], const int array_size) {
176  double sum = 0;
177  for (int i = 0; i < array_size; i++) {
178  sum += data[i];
179  }
180  return sum / array_size;
181  }
182 
187  template<typename T>
188  double array_stdev(const T data[], const int array_size) {
189  double sum = 0;
190  double avg = array_avg(data, array_size);
191  for (int i = 0; i < array_size; i++) {
192  sum += (data[i] - avg)*(data[i] - avg);
193  }
194  return sqrt(sum / (array_size - 1));
195  }
196 
201  template<typename base_type>
202  base_type intpow(const base_type base, const int exponent) {
203  base_type result;
204  if (exponent == 0) {
205  result = 1;
206  return result;
207  }
208  int exponent_abs;
209  if (exponent < 0) {
210  exponent_abs = -exponent;
211  }
212  else {
213  exponent_abs = exponent;
214  }
215  result = base;
216  for (int i = 1; i < exponent_abs; i++) {
217  result *= base;
218  }
219  if (exponent < 0) {
220  result = 1.0 / result;
221  }
222  return result;
223  }
224 
229  template<typename T>
230  void outputVectorToFile(std::vector<T>& vec, std::string filename) {
231  std::ofstream outfile;
232  outfile.open(filename);
233  for (auto const &item : vec) {
234  outfile << item << "\n";
235  }
236  outfile.close();
237  }
238 
243  template<typename T>
244  void outputVectorToFile(std::vector<std::pair<T,T>>& vec, std::string filename) {
245  std::ofstream outfile;
246  outfile.open(filename);
247  for (auto const &item : vec) {
248  outfile << item.first << "," << item.second << "\n";
249  }
250  outfile.close();
251  }
252 
256  template<typename T>
257  void removeDuplicates(std::vector<T> &vec) {
258  if ((int)vec.size() > 2) {
259  for (auto it1 = vec.begin(); it1 != vec.end() - 2; ++it1) {
260  for (auto it2 = it1 + 2; it2 != vec.end(); ++it2) {
261  if (*it2 == *it1) {
262  *it2 = *(it2 - 1);
263  }
264  }
265  }
266  }
267  if ((int)vec.size() > 1) {
268  auto it3 = unique(vec.begin(), vec.end());
269  vec.resize(distance(vec.begin(), it3));
270  }
271  }
272 
276  template<typename T, typename A>
277  double vector_avg(const std::vector<T, A>& data) {
278  double sum = 0;
279  for (auto const &item : data) {
280  sum += item;
281  }
282  return sum / data.size();
283  }
284 
288  template<typename T, typename A>
289  double vector_stdev(const std::vector<T, A>& data) {
290  double sum = 0;
291  double avg = vector_avg(data);
292  for (auto const &item : data) {
293  sum += (item - avg)*(item - avg);
294  }
295  return sqrt(sum / (data.size() - 1));
296  }
297 }
298 
299 #endif // UTILS_H
double vector_stdev(const std::vector< T, A > &data)
This template function calculates and returns the standard deviation in double format when given a ve...
Definition: Utils.h:289
+Go to the documentation of this file.
1 // Copyright (c) 2018 Michael C. Heiber
2 // This source file is part of the KMC_Lattice project, which is subject to the MIT License.
3 // For more information, see the LICENSE file that accompanies this software.
4 // The KMC_Lattice project can be found on Github at https://github.com/MikeHeiber/KMC_Lattice
5 
6 #ifndef UTILS_H
7 #define UTILS_H
8 
9 #include <algorithm>
10 #include <cmath>
11 #include <functional>
12 #include <fstream>
13 #include <iostream>
14 #include <memory>
15 #include <mpi.h>
16 #include <random>
17 #include <set>
18 #include <string>
19 #include <vector>
20 
25 struct Coords{
27  int x;
29  int y;
31  int z;
32 
37  void setXYZ(const int xval,const int yval,const int zval){
38  x = xval;
39  y = yval;
40  z = zval;
41  }
44  bool operator==(const Coords& rhs) const{
45  return (x == rhs.x && y == rhs.y && z == rhs.z);
46  }
49  bool operator!=(const Coords& rhs) const {
50  return (x != rhs.x || y != rhs.y || z != rhs.z);
51  }
52 };
53 
58 namespace Utils {
59 
60  // Scientific Constants
61  static constexpr double K_b = 8.61733035e-5;
62  static constexpr double Elementary_charge = 1.602176621e-19; // C
63  static constexpr double Vacuum_permittivity = 8.854187818e-12; // C/Vm
64  static constexpr double Plank = 6.626070040e-34;
65  static constexpr double Light_speed = 2.99792458e8;
66  static constexpr double Pi = 3.14159265359;
67  static constexpr double Coulomb_constant = 8.987551787e9; // N m^2 C^-2
68 
75  std::vector<std::pair<double,double>> calculateProbabilityHist(const std::vector<double>& data, int num_bins);
76 
83  std::vector<std::pair<double, double>> calculateProbabilityHist(const std::vector<double>& data, double bin_size);
84 
92  std::vector<std::pair<double, double>> calculateProbabilityHist(const std::vector<double>& data, const double bin_size, const int num_bins);
93 
102  void createExponentialDOSVector(std::vector<double>& data, const double mode, const double urbach_energy, std::mt19937& gen);
103 
109  void createGaussianDOSVector(std::vector<double>& data, const double mean, const double stdev, std::mt19937& gen);
110 
116  bool importBooleanParam(const std::string& input, bool& error_status);
117 
122  double integrateData(const std::vector<std::pair<double, double>>& data);
123 
129  double interpolateData(const std::vector<std::pair<double, double>>& data, const double x_val);
130 
137  std::vector<double> MPI_calculateVectorAvg(const std::vector<double>& input_vector);
138 
145  std::vector<double> MPI_calculateVectorSum(const std::vector<double>& input_vector);
146 
153  std::vector<int> MPI_calculateVectorSum(const std::vector<int>& input_vector);
154 
161  std::vector<double> MPI_gatherVectors(const std::vector<double>& input_vector);
162 
166  std::string removeWhitespace(const std::string& str);
167 
168  // Template functions
169 
174  template<typename T>
175  double array_avg(const T data[], const int array_size) {
176  double sum = 0;
177  for (int i = 0; i < array_size; i++) {
178  sum += data[i];
179  }
180  return sum / array_size;
181  }
182 
187  template<typename T>
188  double array_stdev(const T data[], const int array_size) {
189  double sum = 0;
190  double avg = array_avg(data, array_size);
191  for (int i = 0; i < array_size; i++) {
192  sum += (data[i] - avg)*(data[i] - avg);
193  }
194  return sqrt(sum / (array_size - 1));
195  }
196 
201  template<typename base_type>
202  base_type intpow(const base_type base, const int exponent) {
203  base_type result;
204  if (exponent == 0) {
205  result = 1;
206  return result;
207  }
208  result = base;
209  for (int i = 1; i < abs(exponent); i++) {
210  result *= base;
211  }
212  if (exponent < 0) {
213  result = 1.0 / result;
214  }
215  return result;
216  }
217 
222  template<typename T>
223  void outputVectorToFile(std::vector<T>& vec, std::string filename) {
224  std::ofstream outfile;
225  outfile.open(filename);
226  for (auto const &item : vec) {
227  outfile << item << "\n";
228  }
229  outfile.close();
230  }
231 
236  template<typename T>
237  void outputVectorToFile(std::vector<std::pair<T,T>>& vec, std::string filename) {
238  std::ofstream outfile;
239  outfile.open(filename);
240  for (auto const &item : vec) {
241  outfile << item.first << "," << item.second << "\n";
242  }
243  outfile.close();
244  }
245 
249  template<typename T>
250  void removeDuplicates(std::vector<T> &vec) {
251  if ((int)vec.size() > 2) {
252  for (auto it1 = vec.begin(); it1 != vec.end() - 2; ++it1) {
253  for (auto it2 = it1 + 2; it2 != vec.end(); ++it2) {
254  if (*it2 == *it1) {
255  *it2 = *(it2 - 1);
256  }
257  }
258  }
259  }
260  if ((int)vec.size() > 1) {
261  auto it3 = unique(vec.begin(), vec.end());
262  vec.resize(distance(vec.begin(), it3));
263  }
264  }
265 
269  template<typename T, typename A>
270  double vector_avg(const std::vector<T, A>& data) {
271  double sum = 0;
272  for (auto const &item : data) {
273  sum += item;
274  }
275  return sum / data.size();
276  }
277 
281  template<typename T, typename A>
282  double vector_stdev(const std::vector<T, A>& data) {
283  double sum = 0;
284  double avg = vector_avg(data);
285  for (auto const &item : data) {
286  sum += (item - avg)*(item - avg);
287  }
288  return sqrt(sum / (data.size() - 1));
289  }
290 }
291 
292 #endif // UTILS_H
double vector_stdev(const std::vector< T, A > &data)
This template function calculates and returns the standard deviation in double format when given a ve...
Definition: Utils.h:282
int z
The z Cartesian coordinate.
Definition: Utils.h:31
-
void removeDuplicates(std::vector< T > &vec)
This template function efficienctly removes the duplicate entries from an input vector.
Definition: Utils.h:257
+
void removeDuplicates(std::vector< T > &vec)
This template function efficienctly removes the duplicate entries from an input vector.
Definition: Utils.h:250
int x
The x Cartesian coordinate.
Definition: Utils.h:27
std::vector< std::pair< double, double > > calculateProbabilityHist(const std::vector< double > &data, int num_bins)
Calculates the probability histogram for the input data vector using the input number of bins...
Definition: Utils.cpp:12
double array_stdev(const T data[], const int array_size)
This template function calculates and returns the standard deviation in double format when given an a...
Definition: Utils.h:188
@@ -107,14 +107,14 @@
void createGaussianDOSVector(std::vector< double > &data, const double mean, const double stdev, std::mt19937 &gen)
Creates a vector of doubles that has a Gaussian distribution.
Definition: Utils.cpp:118
void createExponentialDOSVector(std::vector< double > &data, const double mode, const double urbach_energy, std::mt19937 &gen)
Creates a vector of doubles that has a custom asymmetric distribution with an exponential tail...
Definition: Utils.cpp:101
std::vector< double > MPI_calculateVectorSum(const std::vector< double > &input_vector)
Uses MPI to calculate the element-wise sum vector from separate vectors coming from different process...
Definition: Utils.cpp:221
-
double vector_avg(const std::vector< T, A > &data)
This template function calculates and returns the average value in double format when given a vector ...
Definition: Utils.h:277
+
double vector_avg(const std::vector< T, A > &data)
This template function calculates and returns the average value in double format when given a vector ...
Definition: Utils.h:270
This simple struct contains Cartesian coordinates specified by integers x,y,z.
Definition: Utils.h:25
double interpolateData(const std::vector< std::pair< double, double >> &data, const double x_val)
Linearly interpolates an x-y data set to determine the interpolated y-value corresponding to an input...
Definition: Utils.cpp:149
bool operator!=(const Coords &rhs) const
Defines the conditions when two Coords structs are deemed to be unequal.
Definition: Utils.h:49
std::string removeWhitespace(const std::string &str)
Removes leading and trailing spaces surrounding a string.
Definition: Utils.cpp:314
void setXYZ(const int xval, const int yval, const int zval)
Sets the x,y,z coordinates using the input values xval, yval, and zval.
Definition: Utils.h:37
std::vector< double > MPI_calculateVectorAvg(const std::vector< double > &input_vector)
Uses MPI to calculate the element-wise average vector from separate vectors coming from different pro...
Definition: Utils.cpp:162
-
void outputVectorToFile(std::vector< T > &vec, std::string filename)
This template function outputs the input data vector to a file with the specified filename...
Definition: Utils.h:230
+
void outputVectorToFile(std::vector< T > &vec, std::string filename)
This template function outputs the input data vector to a file with the specified filename...
Definition: Utils.h:223
base_type intpow(const base_type base, const int exponent)
This template function calculates and returns the results of an integer power operation on a base num...
Definition: Utils.h:202
diff --git a/docs/annotated.html b/docs/annotated.html index 841b93f..8125529 100644 --- a/docs/annotated.html +++ b/docs/annotated.html @@ -30,7 +30,7 @@
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
@@ -95,14 +95,14 @@ - - - - - - - - + + + + + + + + diff --git a/docs/class_event-members.html b/docs/class_event-members.html index b07603a..4533aa3 100644 --- a/docs/class_event-members.html +++ b/docs/class_event-members.html @@ -30,7 +30,7 @@ diff --git a/docs/class_event.html b/docs/class_event.html index 4e4bbd9..70cf2d8 100644 --- a/docs/class_event.html +++ b/docs/class_event.html @@ -30,7 +30,7 @@ @@ -106,13 +106,13 @@ diff --git a/docs/class_exciton-members.html b/docs/class_exciton-members.html index 406ec00..f67ee20 100644 --- a/docs/class_exciton-members.html +++ b/docs/class_exciton-members.html @@ -30,7 +30,7 @@ @@ -95,7 +95,7 @@

This is the complete list of members for Exciton, including all inherited members.

 CCoordsThis simple struct contains Cartesian coordinates specified by integers x,y,z
 CEventThis base class contains the basic properties of a KMC simulation event and the functions needed to interact with it
 CExciton
 CExciton_Creation
 CExciton_Dissociation
 CExciton_Exciton_Annihilation
 CExciton_Hop
 CExciton_Intersystem_Crossing
 CExciton_Polaron_Annihilation
 CExciton_Recombination
 CExcitonThis class extends the Object class to create an exciton object to represent a singlet or triplet exciton in an organic semiconductor
 CExciton_CreationThis class extends the Event class to create an specific type of exciton event
 CExciton_DissociationThis class extends the Event class to create an specific type of exciton event
 CExciton_Exciton_AnnihilationThis class extends the Event class to create an specific type of exciton event
 CExciton_HopThis class extends the Event class to create an specific type of exciton event
 CExciton_Intersystem_CrossingThis class extends the Event class to create an specific type of exciton event
 CExciton_Polaron_AnnihilationThis class extends the Event class to create an specific type of exciton event
 CExciton_RecombinationThis class extends the Event class to create an specific type of exciton event
 CLatticeThis class contains the properties of a three-dimensional lattice and the functions needed to interact with it
 CObjectThis base class contains the basic properties of a KMC simulation object and the functions needed to interact with it
 COSC_Sim
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
- + diff --git a/docs/class_exciton.html b/docs/class_exciton.html index 4535fab..d5c8274 100644 --- a/docs/class_exciton.html +++ b/docs/class_exciton.html @@ -30,7 +30,7 @@ @@ -96,6 +96,9 @@
+

This class extends the Object class to create an exciton object to represent a singlet or triplet exciton in an organic semiconductor. + More...

+

#include <Exciton.h>

Inheritance diagram for Exciton:
@@ -109,16 +112,20 @@
calculateDisplacement() constObject
Exciton(const double time, const int tag_num, const Coords &start_coords)Excitoninline
Exciton(const double time, const int tag_num, const Coords &coords_start)Excitoninline
flipSpin()Excitoninline
getCoords() constObject
getCreationTime() constObject
Excimontec -  v1.0-beta.2 +  v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
- - + + + + - + + + @@ -167,11 +174,17 @@ +

Public Member Functions

 Exciton (const double time, const int tag_num, const Coords &start_coords)
 
 Exciton (const double time, const int tag_num, const Coords &coords_start)
 Constructor that creates and initializes an exciton. More...
 
void flipSpin ()
 Flips the spin state of the exciton from singlet to triplet or from triplet to singlet. More...
 
std::string getObjectType () const
 Gets the name of the Object class. More...
 Gets the object type string that denotes what type of Object class this is. More...
 
bool getSpin () const
 Gets the current spin state of the exciton. More...
 
void setSpin (bool spin_state_new)
 Sets the spin state of the exciton. More...
 
- Public Member Functions inherited from Object
virtual ~Object ()

Static Public Attributes

static const std::string object_type = "Exciton"
 This static member variable holds the name of the object, which is "Exciton". More...
 
-

Constructor & Destructor Documentation

- -

◆ Exciton()

+

Detailed Description

+

This class extends the Object class to create an exciton object to represent a singlet or triplet exciton in an organic semiconductor.

+ +
Author
Michael C. Heiber
+
Date
2018
+

Constructor & Destructor Documentation

+ +

◆ Exciton()

Member Function Documentation

@@ -236,6 +259,8 @@

+

Flips the spin state of the exciton from singlet to triplet or from triplet to singlet.

+
@@ -261,8 +286,8 @@

-

Gets the name of the Object class.

-
Returns
"Object" when called on the base class.
+

Gets the object type string that denotes what type of Object class this is.

+
Returns
The string "Exciton".

Reimplemented from Object.

@@ -291,6 +316,11 @@

+

Gets the current spin state of the exciton.

+
Returns
true if the exciton is in a singlet state.
+
+false if the exciton is in a triplet state.
+
@@ -317,6 +347,14 @@

+

Sets the spin state of the exciton.

+
Parameters
+ + +
spin_state_newindicates what the spin state will be set to. True for singlet and false for triplet.
+
+
+

Member Data Documentation

@@ -340,6 +378,8 @@

+

This static member variable holds the name of the object, which is "Exciton".

+
The documentation for this class was generated from the following files:
    diff --git a/docs/class_exciton.js b/docs/class_exciton.js index 873a3f7..06a5a52 100644 --- a/docs/class_exciton.js +++ b/docs/class_exciton.js @@ -1,6 +1,6 @@ var class_exciton = [ - [ "Exciton", "class_exciton.html#a105a259c1235f22972cd25d811a750e7", null ], + [ "Exciton", "class_exciton.html#a480ef78405291593519ac372b7712029", null ], [ "flipSpin", "class_exciton.html#a85a7b8561f6e294593679e53dd3b91a9", null ], [ "getObjectType", "class_exciton.html#a1d78a570cc48f62886033465219dd04c", null ], [ "getSpin", "class_exciton.html#a91cb4c59b7e7a7fb756aae4c4109dba3", null ], diff --git a/docs/class_exciton___creation-members.html b/docs/class_exciton___creation-members.html index b88e4fd..70d451a 100644 --- a/docs/class_exciton___creation-members.html +++ b/docs/class_exciton___creation-members.html @@ -30,7 +30,7 @@
    Excimontec -  v1.0-beta.2 +  v1.0-beta.3
    An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
    diff --git a/docs/class_exciton___creation.html b/docs/class_exciton___creation.html index ca4d8a1..18c638b 100644 --- a/docs/class_exciton___creation.html +++ b/docs/class_exciton___creation.html @@ -30,7 +30,7 @@
    Excimontec -  v1.0-beta.2 +  v1.0-beta.3
    An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
    @@ -96,6 +96,9 @@
    +

    This class extends the Event class to create an specific type of exciton event. + More...

    +

    #include <Exciton.h>

    Inheritance diagram for Exciton_Creation:
    @@ -110,11 +113,13 @@

    Public Member Functions

     Exciton_Creation () + Constructs an empty event that is uninitialized. More...
       Exciton_Creation (Simulation *simulation_ptr) + Constructs and initializes an event. More...
      std::string getEventType () const - Gets the name of event class. More...
    + Gets the event type string that denotes what type of Event class this is. More...
      - Public Member Functions inherited from Event virtual ~Event () @@ -156,6 +161,7 @@

    Static Public Attributes

    static const std::string event_type = "Exciton Creation" + This static member variable holds the name of the event, which is "Exciton_Creation". More...
     

    @@ -165,7 +171,12 @@

     The sim_ptr member variable provides a point to the Simulation object that the Event is asociated with. More...
     
    -

    Constructor & Destructor Documentation

    +

    Detailed Description

    +

    This class extends the Event class to create an specific type of exciton event.

    + +
    Author
    Michael C. Heiber
    +
    Date
    2018
    +

    Constructor & Destructor Documentation

    ◆ Exciton_Creation() [1/2]

    @@ -189,6 +200,8 @@

    +

    Constructs an empty event that is uninitialized.

    +

    @@ -215,6 +228,14 @@

    +

    Constructs and initializes an event.

    +
    Parameters
    + + +
    simulation_ptris a pointer to the Simulation object that is associated with the event.
    +
    +
    +

    Member Function Documentation

    @@ -241,8 +262,8 @@

    -

    Gets the name of event class.

    -
    Returns
    "Event" when called on the base class.
    +

    Gets the event type string that denotes what type of Event class this is.

    +
    Returns
    The string "Exciton_Creation".

    Reimplemented from Event.

    @@ -269,6 +290,8 @@

    +

    This static member variable holds the name of the event, which is "Exciton_Creation".

    +
    The documentation for this class was generated from the following files:
      diff --git a/docs/class_exciton___dissociation-members.html b/docs/class_exciton___dissociation-members.html index 6e4a25a..04889e7 100644 --- a/docs/class_exciton___dissociation-members.html +++ b/docs/class_exciton___dissociation-members.html @@ -30,7 +30,7 @@
      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
      diff --git a/docs/class_exciton___dissociation.html b/docs/class_exciton___dissociation.html index ffd585f..029ebec 100644 --- a/docs/class_exciton___dissociation.html +++ b/docs/class_exciton___dissociation.html @@ -30,7 +30,7 @@
      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
      @@ -96,6 +96,9 @@
      +

      This class extends the Event class to create an specific type of exciton event. + More...

      +

      #include <Exciton.h>

      Inheritance diagram for Exciton_Dissociation:
      @@ -110,15 +113,19 @@

      Public Member Functions

       Exciton_Dissociation () + Constructs an empty event that is uninitialized. More...
         Exciton_Dissociation (Simulation *simulation_ptr) + Constructs and initializes an event. More...
        void calculateExecutionTime (const double prefactor, const double localization, const double distance, const double E_delta) + Calculates and updates the execution time for the exciton dissociation event using the Miller-Abrahams polaron hopping mechanism. More...
        void calculateExecutionTime (const double prefactor, const double localization, const double distance, const double E_delta, const double reorganization) + Calculates and updates the execution time for the exciton dissociation event using the Marcus polaron hopping mechanism. More...
        std::string getEventType () const - Gets the name of event class. More...
      + Gets the event type string that denotes what type of Event class this is. More...
        - Public Member Functions inherited from Event virtual ~Event () @@ -160,6 +167,7 @@

      Static Public Attributes

      static const std::string event_type = "Exciton Dissociation" + This static member variable holds the name of the event, which is "Exciton_Dissociation". More...
       

      @@ -169,7 +177,12 @@

       The sim_ptr member variable provides a point to the Simulation object that the Event is asociated with. More...
       
      -

      Constructor & Destructor Documentation

      +

      Detailed Description

      +

      This class extends the Event class to create an specific type of exciton event.

      + +
      Author
      Michael C. Heiber
      +
      Date
      2018
      +

      Constructor & Destructor Documentation

      ◆ Exciton_Dissociation() [1/2]

      @@ -193,6 +206,8 @@

      +

      Constructs an empty event that is uninitialized.

      +

      @@ -219,6 +234,14 @@

      +

      Constructs and initializes an event.

      +
      Parameters
      + + +
      simulation_ptris a pointer to the Simulation object that is associated with the event.
      +
      +
      +

      Member Function Documentation

      @@ -268,6 +291,17 @@

      +

      Calculates and updates the execution time for the exciton dissociation event using the Miller-Abrahams polaron hopping mechanism.

      +
      Parameters
      + + + + + +
      prefactoris the rate constant prefactor for the transition.
      localizationis the inverse localization parameter that describes how localized the exciton is.
      distanceis the distance between the starting site and destination site.
      E_deltais the potential energy change that would occur if the event is executed.
      +
      +
      +
      @@ -322,6 +356,18 @@

      +

      Calculates and updates the execution time for the exciton dissociation event using the Marcus polaron hopping mechanism.

      +
      Parameters
      + + + + + + +
      prefactoris the rate constant prefactor for the transition.
      localizationis the inverse localization parameter that describes how localized the exciton is.
      distanceis the distance between the starting site and destination site.
      E_deltais the potential energy change that would occur if the event is executed.
      reorganizationis the reorganization energy for the Marcus electron transfer mechanism.
      +
      +
      +
      @@ -347,8 +393,8 @@

      -

      Gets the name of event class.

      -
      Returns
      "Event" when called on the base class.
      +

      Gets the event type string that denotes what type of Event class this is.

      +
      Returns
      The string "Exciton_Dissociation".

      Reimplemented from Event.

      @@ -375,6 +421,8 @@

      +

      This static member variable holds the name of the event, which is "Exciton_Dissociation".

      +
      The documentation for this class was generated from the following files:
        diff --git a/docs/class_exciton___exciton___annihilation-members.html b/docs/class_exciton___exciton___annihilation-members.html index b63774e..70eb685 100644 --- a/docs/class_exciton___exciton___annihilation-members.html +++ b/docs/class_exciton___exciton___annihilation-members.html @@ -30,7 +30,7 @@
        Excimontec -  v1.0-beta.2 +  v1.0-beta.3
        An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
        diff --git a/docs/class_exciton___exciton___annihilation.html b/docs/class_exciton___exciton___annihilation.html index 7677a78..7ae25bc 100644 --- a/docs/class_exciton___exciton___annihilation.html +++ b/docs/class_exciton___exciton___annihilation.html @@ -30,7 +30,7 @@
        Excimontec -  v1.0-beta.2 +  v1.0-beta.3
        An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
        @@ -96,6 +96,9 @@
        +

        This class extends the Event class to create an specific type of exciton event. + More...

        +

        #include <Exciton.h>

        Inheritance diagram for Exciton_Exciton_Annihilation:
        @@ -110,15 +113,19 @@

        Public Member Functions

         Exciton_Exciton_Annihilation () + Constructs an empty event that is uninitialized. More...
           Exciton_Exciton_Annihilation (Simulation *simulation_ptr) + Constructs and initializes an event. More...
          void calculateExecutionTime (const double prefactor, const double distance) + Calculates and updates the execution time for the exciton-exciton annihilation event using a FRET hopping mechanism. More...
          void calculateExecutionTime (const double prefactor, const double localization, const double distance) + Calculates and updates the execution time for the exciton-exciton annihilation event using the Dexter hopping mechanism. More...
          std::string getEventType () const - Gets the name of event class. More...
        + Gets the event type string that denotes what type of Event class this is. More...
          - Public Member Functions inherited from Event virtual ~Event () @@ -160,6 +167,7 @@

        Static Public Attributes

        static const std::string event_type = "Exciton-Exciton Annihilation" + This static member variable holds the name of the event, which is "Exciton_Exciton_Annihilation". More...
         

        @@ -169,7 +177,12 @@

         The sim_ptr member variable provides a point to the Simulation object that the Event is asociated with. More...
         
        -

        Constructor & Destructor Documentation

        +

        Detailed Description

        +

        This class extends the Event class to create an specific type of exciton event.

        + +
        Author
        Michael C. Heiber
        +
        Date
        2018
        +

        Constructor & Destructor Documentation

        ◆ Exciton_Exciton_Annihilation() [1/2]

        @@ -193,6 +206,8 @@

        +

        Constructs an empty event that is uninitialized.

        +

        @@ -219,6 +234,14 @@

        +

        Constructs and initializes an event.

        +
        Parameters
        + + +
        simulation_ptris a pointer to the Simulation object that is associated with the event.
        +
        +
        +

        Member Function Documentation

        @@ -256,6 +279,15 @@

        +

        Calculates and updates the execution time for the exciton-exciton annihilation event using a FRET hopping mechanism.

        +
        Parameters
        + + + +
        prefactoris the rate constant prefactor for the transition.
        distanceis the distance between the starting site and destination site.
        +
        +
        +
        @@ -298,6 +330,16 @@

        +

        Calculates and updates the execution time for the exciton-exciton annihilation event using the Dexter hopping mechanism.

        +
        Parameters
        + + + + +
        prefactoris the rate constant prefactor for the transition.
        localizationis the inverse localization parameter that describes how localized the exciton is.
        distanceis the distance between the starting site and destination site.
        +
        +
        +
        @@ -323,8 +365,8 @@

        -

        Gets the name of event class.

        -
        Returns
        "Event" when called on the base class.
        +

        Gets the event type string that denotes what type of Event class this is.

        +
        Returns
        The string "Exciton_Exciton_Annihilation".

        Reimplemented from Event.

        @@ -351,6 +393,8 @@

        +

        This static member variable holds the name of the event, which is "Exciton_Exciton_Annihilation".

        +
        The documentation for this class was generated from the following files:
          diff --git a/docs/class_exciton___hop-members.html b/docs/class_exciton___hop-members.html index 85d39c6..724df7c 100644 --- a/docs/class_exciton___hop-members.html +++ b/docs/class_exciton___hop-members.html @@ -30,7 +30,7 @@
          Excimontec -  v1.0-beta.2 +  v1.0-beta.3
          An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
          diff --git a/docs/class_exciton___hop.html b/docs/class_exciton___hop.html index 8c9aa04..9043fac 100644 --- a/docs/class_exciton___hop.html +++ b/docs/class_exciton___hop.html @@ -30,7 +30,7 @@
          Excimontec -  v1.0-beta.2 +  v1.0-beta.3
          An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
          @@ -96,6 +96,9 @@
          +

          This class extends the Event class to create an specific type of exciton event. + More...

          +

          #include <Exciton.h>

          Inheritance diagram for Exciton_Hop:
          @@ -110,15 +113,19 @@

          Public Member Functions

           Exciton_Hop () + Constructs an empty event that is uninitialized. More...
             Exciton_Hop (Simulation *simulation_ptr) + Constructs and initializes an event. More...
            void calculateExecutionTime (const double prefactor, const double distance, const double E_delta) + Calculates and updates the execution time for the exciton hop event using the FRET hopping mechanism. More...
            void calculateExecutionTime (const double prefactor, const double localization, const double distance, const double E_delta) + Calculates and updates the execution time for the exciton hop event using the Dexter hopping mechanism. More...
            std::string getEventType () const - Gets the name of event class. More...
          + Gets the event type string that denotes what type of Event class this is. More...
            - Public Member Functions inherited from Event virtual ~Event () @@ -160,6 +167,7 @@

          Static Public Attributes

          static const std::string event_type = "Exciton Hop" + This static member variable holds the name of the event, which is "Exciton_Hop". More...
           

          @@ -169,7 +177,12 @@

           The sim_ptr member variable provides a point to the Simulation object that the Event is asociated with. More...
           
          -

          Constructor & Destructor Documentation

          +

          Detailed Description

          +

          This class extends the Event class to create an specific type of exciton event.

          + +
          Author
          Michael C. Heiber
          +
          Date
          2018
          +

          Constructor & Destructor Documentation

          ◆ Exciton_Hop() [1/2]

          @@ -193,6 +206,8 @@

          +

          Constructs an empty event that is uninitialized.

          +

          @@ -219,6 +234,14 @@

          +

          Constructs and initializes an event.

          +
          Parameters
          + + +
          simulation_ptris a pointer to the Simulation object that is associated with the event.
          +
          +
          +

          Member Function Documentation

          @@ -262,6 +285,16 @@

          +

          Calculates and updates the execution time for the exciton hop event using the FRET hopping mechanism.

          +
          Parameters
          + + + + +
          prefactoris the rate constant prefactor for the transition.
          distanceis the distance between the starting site and destination site.
          E_deltais the potential energy change that would occur if the event is executed.
          +
          +
          +
          @@ -310,6 +343,17 @@

          +

          Calculates and updates the execution time for the exciton hop event using the Dexter hopping mechanism.

          +
          Parameters
          + + + + + +
          prefactoris the rate constant prefactor for the transition.
          localizationis the inverse localization parameter that describes how localized the exciton is.
          distanceis the distance between the starting site and destination site.
          E_deltais the potential energy change that would occur if the event is executed.
          +
          +
          +
          @@ -335,8 +379,8 @@

          -

          Gets the name of event class.

          -
          Returns
          "Event" when called on the base class.
          +

          Gets the event type string that denotes what type of Event class this is.

          +
          Returns
          The string "Exciton_Hop".

          Reimplemented from Event.

          @@ -363,6 +407,8 @@

          +

          This static member variable holds the name of the event, which is "Exciton_Hop".

          +
          The documentation for this class was generated from the following files:
            diff --git a/docs/class_exciton___intersystem___crossing-members.html b/docs/class_exciton___intersystem___crossing-members.html index 4e58e75..2df2d04 100644 --- a/docs/class_exciton___intersystem___crossing-members.html +++ b/docs/class_exciton___intersystem___crossing-members.html @@ -30,7 +30,7 @@
            Excimontec -  v1.0-beta.2 +  v1.0-beta.3
            An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
            diff --git a/docs/class_exciton___intersystem___crossing.html b/docs/class_exciton___intersystem___crossing.html index c0bd93f..d060899 100644 --- a/docs/class_exciton___intersystem___crossing.html +++ b/docs/class_exciton___intersystem___crossing.html @@ -30,7 +30,7 @@
            Excimontec -  v1.0-beta.2 +  v1.0-beta.3
            An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
            @@ -96,6 +96,9 @@
            +

            This class extends the Event class to create an specific type of exciton event. + More...

            +

            #include <Exciton.h>

            Inheritance diagram for Exciton_Intersystem_Crossing:
            @@ -110,13 +113,16 @@

            Public Member Functions

             Exciton_Intersystem_Crossing () + Constructs an empty event that is uninitialized. More...
               Exciton_Intersystem_Crossing (Simulation *simulation_ptr) + Constructs and initializes an event. More...
              void calculateExecutionTime (const double prefactor, const double E_delta) + Calculates and updates the execution time for the exciton intersystem crossing event. More...
              std::string getEventType () const - Gets the name of event class. More...
            + Gets the event type string that denotes what type of Event class this is. More...
              - Public Member Functions inherited from Event virtual ~Event () @@ -158,6 +164,7 @@

            Static Public Attributes

            static const std::string event_type = "Exciton Intersystem Crossing" + This static member variable holds the name of the event, which is "Exciton_Intersystem_Crossing". More...
             

            @@ -167,7 +174,12 @@

             The sim_ptr member variable provides a point to the Simulation object that the Event is asociated with. More...
             
            -

            Constructor & Destructor Documentation

            +

            Detailed Description

            +

            This class extends the Event class to create an specific type of exciton event.

            + +
            Author
            Michael C. Heiber
            +
            Date
            2018
            +

            Constructor & Destructor Documentation

            ◆ Exciton_Intersystem_Crossing() [1/2]

            @@ -191,6 +203,8 @@

            +

            Constructs an empty event that is uninitialized.

            +

            @@ -217,6 +231,14 @@

            +

            Constructs and initializes an event.

            +
            Parameters
            + + +
            simulation_ptris a pointer to the Simulation object that is associated with the event.
            +
            +
            +

            Member Function Documentation

            @@ -254,6 +276,15 @@

            +

            Calculates and updates the execution time for the exciton intersystem crossing event.

            +
            Parameters
            + + + +
            prefactoris the rate constant prefactor for the transition.
            E_deltais the potential energy change that would occur if the event is executed.
            +
            +
            +
            @@ -279,8 +310,8 @@

            -

            Gets the name of event class.

            -
            Returns
            "Event" when called on the base class.
            +

            Gets the event type string that denotes what type of Event class this is.

            +
            Returns
            The string "Exciton_Intersystem_Crossing".

            Reimplemented from Event.

            @@ -307,6 +338,8 @@

            +

            This static member variable holds the name of the event, which is "Exciton_Intersystem_Crossing".

            +
            The documentation for this class was generated from the following files:
              diff --git a/docs/class_exciton___polaron___annihilation-members.html b/docs/class_exciton___polaron___annihilation-members.html index 68d4eb3..51b5c13 100644 --- a/docs/class_exciton___polaron___annihilation-members.html +++ b/docs/class_exciton___polaron___annihilation-members.html @@ -30,7 +30,7 @@
              Excimontec -  v1.0-beta.2 +  v1.0-beta.3
              An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
              diff --git a/docs/class_exciton___polaron___annihilation.html b/docs/class_exciton___polaron___annihilation.html index 3924e21..f753f2f 100644 --- a/docs/class_exciton___polaron___annihilation.html +++ b/docs/class_exciton___polaron___annihilation.html @@ -30,7 +30,7 @@
              Excimontec -  v1.0-beta.2 +  v1.0-beta.3
              An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
              @@ -96,6 +96,9 @@
              +

              This class extends the Event class to create an specific type of exciton event. + More...

              +

              #include <Exciton.h>

              Inheritance diagram for Exciton_Polaron_Annihilation:
              @@ -110,15 +113,19 @@

              Public Member Functions

               Exciton_Polaron_Annihilation () + Constructs an empty event that is uninitialized. More...
                 Exciton_Polaron_Annihilation (Simulation *simulation_ptr) + Constructs and initializes an event. More...
                void calculateExecutionTime (const double prefactor, const double distance) + Calculates and updates the execution time for the exciton-polaron annihilation event using a FRET hopping mechanism. More...
                void calculateExecutionTime (const double prefactor, const double localization, const double distance) + Calculates and updates the execution time for the exciton-polaron annihilation event using the Dexter hopping mechanism. More...
                std::string getEventType () const - Gets the name of event class. More...
              + Gets the event type string that denotes what type of Event class this is. More...
                - Public Member Functions inherited from Event virtual ~Event () @@ -160,6 +167,7 @@

              Static Public Attributes

              static const std::string event_type = "Exciton-Polaron Annihilation" + This static member variable holds the name of the event, which is "Exciton_Polaron_Annihilation". More...
               

              @@ -169,7 +177,12 @@

               The sim_ptr member variable provides a point to the Simulation object that the Event is asociated with. More...
               
              -

              Constructor & Destructor Documentation

              +

              Detailed Description

              +

              This class extends the Event class to create an specific type of exciton event.

              + +
              Author
              Michael C. Heiber
              +
              Date
              2018
              +

              Constructor & Destructor Documentation

              ◆ Exciton_Polaron_Annihilation() [1/2]

              @@ -193,6 +206,8 @@

              +

              Constructs an empty event that is uninitialized.

              +

              @@ -219,6 +234,14 @@

              +

              Constructs and initializes an event.

              +
              Parameters
              + + +
              simulation_ptris a pointer to the Simulation object that is associated with the event.
              +
              +
              +

              Member Function Documentation

              @@ -256,6 +279,15 @@

              +

              Calculates and updates the execution time for the exciton-polaron annihilation event using a FRET hopping mechanism.

              +
              Parameters
              + + + +
              prefactoris the rate constant prefactor for the transition.
              distanceis the distance between the starting site and destination site.
              +
              +
              +
              @@ -298,6 +330,16 @@

              +

              Calculates and updates the execution time for the exciton-polaron annihilation event using the Dexter hopping mechanism.

              +
              Parameters
              + + + + +
              prefactoris the rate constant prefactor for the transition.
              localizationis the inverse localization parameter that describes how localized the exciton is.
              distanceis the distance between the starting site and destination site.
              +
              +
              +
              @@ -323,8 +365,8 @@

              -

              Gets the name of event class.

              -
              Returns
              "Event" when called on the base class.
              +

              Gets the event type string that denotes what type of Event class this is.

              +
              Returns
              The string "Exciton_Polaron_Annihilation".

              Reimplemented from Event.

              @@ -351,6 +393,8 @@

              +

              This static member variable holds the name of the event, which is "Exciton_Polaron_Annihilation".

              +
              The documentation for this class was generated from the following files:
                diff --git a/docs/class_exciton___recombination-members.html b/docs/class_exciton___recombination-members.html index d2d66c3..19a49ce 100644 --- a/docs/class_exciton___recombination-members.html +++ b/docs/class_exciton___recombination-members.html @@ -30,7 +30,7 @@
                Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                diff --git a/docs/class_exciton___recombination.html b/docs/class_exciton___recombination.html index 0002bde..2a9333a 100644 --- a/docs/class_exciton___recombination.html +++ b/docs/class_exciton___recombination.html @@ -30,7 +30,7 @@
                Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                @@ -96,6 +96,9 @@
                +

                This class extends the Event class to create an specific type of exciton event. + More...

                +

                #include <Exciton.h>

                Inheritance diagram for Exciton_Recombination:
                @@ -110,11 +113,13 @@

                Public Member Functions

                 Exciton_Recombination () + Constructs an empty event that is uninitialized. More...
                   Exciton_Recombination (Simulation *simulation_ptr) + Constructs and initializes an event. More...
                  std::string getEventType () const - Gets the name of event class. More...
                + Gets the event type string that denotes what type of Event class this is. More...
                  - Public Member Functions inherited from Event virtual ~Event () @@ -156,6 +161,7 @@

                Static Public Attributes

                static const std::string event_type = "Exciton Recombination" + This static member variable holds the name of the event, which is "Exciton_Recombination". More...
                 

                @@ -165,7 +171,12 @@

                 The sim_ptr member variable provides a point to the Simulation object that the Event is asociated with. More...
                 
                -

                Constructor & Destructor Documentation

                +

                Detailed Description

                +

                This class extends the Event class to create an specific type of exciton event.

                + +
                Author
                Michael C. Heiber
                +
                Date
                2018
                +

                Constructor & Destructor Documentation

                ◆ Exciton_Recombination() [1/2]

                @@ -189,6 +200,8 @@

                +

                Constructs an empty event that is uninitialized.

                +

                @@ -215,6 +228,14 @@

                +

                Constructs and initializes an event.

                +
                Parameters
                + + +
                simulation_ptris a pointer to the Simulation object that is associated with the event.
                +
                +
                +

                Member Function Documentation

                @@ -241,8 +262,8 @@

                -

                Gets the name of event class.

                -
                Returns
                "Event" when called on the base class.
                +

                Gets the event type string that denotes what type of Event class this is.

                +
                Returns
                The string "Exciton_Recombination".

                Reimplemented from Event.

                @@ -269,6 +290,8 @@

                +

                This static member variable holds the name of the event, which is "Exciton_Recombination".

                +
                The documentation for this class was generated from the following files:
                  diff --git a/docs/class_lattice-members.html b/docs/class_lattice-members.html index ef4173d..8722957 100644 --- a/docs/class_lattice-members.html +++ b/docs/class_lattice-members.html @@ -30,7 +30,7 @@
                  Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                  An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                  @@ -115,16 +115,17 @@
                  getSiteIndex(const Coords &coords) constLattice getSiteIt(const Coords &coords)Lattice getUnitSize() constLattice - getWidth() constLattice - init(const Parameters_Lattice &params, std::mt19937 *generator_ptr)Lattice - isOccupied(const Coords &coords) constLattice - isXPeriodic() constLattice - isYPeriodic() constLattice - isZPeriodic() constLattice - Lattice()Lattice - outputLatticeOccupancy() constLattice - setOccupied(const Coords &coords)Lattice - setSitePointers(const std::vector< Site *> &input_ptrs)Lattice + getVolume() constLattice + getWidth() constLattice + init(const Parameters_Lattice &params, std::mt19937 *generator_ptr)Lattice + isOccupied(const Coords &coords) constLattice + isXPeriodic() constLattice + isYPeriodic() constLattice + isZPeriodic() constLattice + Lattice()Lattice + outputLatticeOccupancy() constLattice + setOccupied(const Coords &coords)Lattice + setSitePointers(const std::vector< Site *> &input_ptrs)Lattice diff --git a/docs/class_lattice.html b/docs/class_lattice.html index 71b0dbf..9050a50 100644 --- a/docs/class_lattice.html +++ b/docs/class_lattice.html @@ -30,7 +30,7 @@
                  Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                  An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                  @@ -171,6 +171,9 @@ double getUnitSize () const  Gets the lattice unit size, which is used to convert lattice units into real space units. More...
                    +double getVolume () const + Gets the volume of the lattice in cm^-3. More...
                  +  int getWidth () const  Gets the y-direction size of the lattice, the width. More...
                    @@ -892,6 +895,25 @@

                  Returns
                  The unit size property of the lattice.
                  + + +
                  +

                  ◆ getVolume()

                  + +
                  +
                  + + + + + + + +
                  double Lattice::getVolume () const
                  +
                  + +

                  Gets the volume of the lattice in cm^-3.

                  +
                  diff --git a/docs/class_lattice.js b/docs/class_lattice.js index a4415e9..ea4bd74 100644 --- a/docs/class_lattice.js +++ b/docs/class_lattice.js @@ -22,6 +22,7 @@ var class_lattice = [ "getSiteIndex", "class_lattice.html#a60431f6504a253d47acb0b02f524571c", null ], [ "getSiteIt", "class_lattice.html#a46f7d12855d24e1bdd02814621b0a178", null ], [ "getUnitSize", "class_lattice.html#ac6963a6b2b4b8d96d3417f6e9c2a509d", null ], + [ "getVolume", "class_lattice.html#a46f9cec33419459b64ff0efdf47a38b9", null ], [ "getWidth", "class_lattice.html#aeb60d2b8bfb02d9da8bef463f0d41428", null ], [ "init", "class_lattice.html#a2b0a88048fae662aa71386a3a123a260", null ], [ "isOccupied", "class_lattice.html#a4d37afb6ad4c67f4f6462c2f6d5c337d", null ], diff --git a/docs/class_o_s_c___sim-members.html b/docs/class_o_s_c___sim-members.html index a38a811..0922195 100644 --- a/docs/class_o_s_c___sim-members.html +++ b/docs/class_o_s_c___sim-members.html @@ -30,7 +30,7 @@
                  Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                  An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                  @@ -94,7 +94,7 @@

                  This is the complete list of members for OSC_Sim, including all inherited members.

                  - + @@ -107,7 +107,7 @@ - + @@ -130,35 +130,37 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/class_o_s_c___sim.html b/docs/class_o_s_c___sim.html index be44e95..d98ba98 100644 --- a/docs/class_o_s_c___sim.html +++ b/docs/class_o_s_c___sim.html @@ -30,7 +30,7 @@ @@ -166,6 +166,8 @@ + + @@ -250,6 +252,9 @@ + + + @@ -263,15 +268,15 @@ - - - + + + - - - + + + @@ -842,6 +847,23 @@

                  + + + +

                  ◆ getInternalField()

                  + +
                  +
                  +

                  addEvent(Event *event_ptr)Simulationprotected
                  addEvent(Event *event_ptr)Simulationprotected
                  addObject(Object *object_ptr)Simulationprotected
                  calculateDiffusionLength_avg() constOSC_Sim
                  calculateDiffusionLength_stdev() constOSC_Sim
                  calculateTransitTimeDist(const std::vector< double > &data, const int counts) constOSC_Sim
                  checkFinished() constOSC_Simvirtual
                  checkParameters(const Parameters_OPV &params) constOSC_Sim
                  chooseNextEvent()Simulationprotected
                  chooseNextEvent()Simulationprotected
                  Error_foundSimulationprotected
                  error_msgSimulationprotected
                  executeNextEvent()OSC_Simvirtual
                  getDynamicsTransientTriplets() constOSC_Sim
                  getErrorMessage() constSimulation
                  getId() constSimulation
                  getN_bimolecular_recombinations() constOSC_Sim
                  getN_electrons_collected() constOSC_Sim
                  getN_electrons_created() constOSC_Sim
                  getN_electrons_recombined() constOSC_Sim
                  getN_events() constSimulation
                  getN_events_executed() constSimulation
                  getN_excitons_created() constOSC_Sim
                  getN_excitons_created(const short site_type) constOSC_Sim
                  getN_excitons_dissociated() constOSC_Sim
                  getN_geminate_recombinations() constOSC_Sim
                  getN_holes_collected() constOSC_Sim
                  getN_holes_created() constOSC_Sim
                  getN_holes_recombined() constOSC_Sim
                  getN_singlet_excitons_recombined() constOSC_Sim
                  getN_singlet_polaron_annihilations() constOSC_Sim
                  getN_singlet_singlet_annihilations() constOSC_Sim
                  getN_singlet_triplet_annihilations() constOSC_Sim
                  getN_transient_cycles() constOSC_Sim
                  getN_triplet_excitons_recombined() constOSC_Sim
                  getN_triplet_polaron_annihilations() constOSC_Sim
                  getN_triplet_triplet_annihilations() constOSC_Sim
                  getSiteEnergies(const short site_type) constOSC_Sim
                  getTemp() constSimulation
                  getTime() constSimulation
                  getToFTransientCounts() constOSC_Sim
                  getToFTransientEnergies() constOSC_Sim
                  getToFTransientTimes() constOSC_Sim
                  getToFTransientVelocities() constOSC_Sim
                  getTransitTimeData() constOSC_Sim
                  getInternalField() constOSC_Sim
                  getN_bimolecular_recombinations() constOSC_Sim
                  getN_electrons_collected() constOSC_Sim
                  getN_electrons_created() constOSC_Sim
                  getN_electrons_recombined() constOSC_Sim
                  getN_events() constSimulation
                  getN_events_executed() constSimulation
                  getN_excitons_created() constOSC_Sim
                  getN_excitons_created(const short site_type) constOSC_Sim
                  getN_excitons_dissociated() constOSC_Sim
                  getN_geminate_recombinations() constOSC_Sim
                  getN_holes_collected() constOSC_Sim
                  getN_holes_created() constOSC_Sim
                  getN_holes_recombined() constOSC_Sim
                  getN_singlet_excitons_recombined() constOSC_Sim
                  getN_singlet_polaron_annihilations() constOSC_Sim
                  getN_singlet_singlet_annihilations() constOSC_Sim
                  getN_singlet_triplet_annihilations() constOSC_Sim
                  getN_transient_cycles() constOSC_Sim
                  getN_triplet_excitons_recombined() constOSC_Sim
                  getN_triplet_polaron_annihilations() constOSC_Sim
                  getN_triplet_triplet_annihilations() constOSC_Sim
                  getSiteEnergies(const short site_type) constOSC_Sim
                  getTemp() constSimulation
                  getTime() constSimulation
                  getToFTransientCounts() constOSC_Sim
                  getToFTransientEnergies() constOSC_Sim
                  getToFTransientTimes() constOSC_Sim
                  getToFTransientVelocities() constOSC_Sim
                  getTransitTimeData() constOSC_Sim
                  getVolume() constSimulation
                  init(const Parameters_OPV &params, const int id)OSC_Sim
                  Simulation::init(const Parameters_Simulation &params, const int id)Simulation
                  isLoggingEnabled() constSimulation
                  Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                  An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                   
                  std::vector< double > getDynamicsHoleMSDV () const
                   
                  double getInternalField () const
                   
                  std::vector< double > getSiteEnergies (const short site_type) const
                   
                  std::vector< std::string > getChargeExtractionMap (const bool charge) const
                  double getTime () const
                   Get the current simulation time in units of seconds. More...
                   
                  double getVolume () const
                   Get the simulation box volume in cm^-3. More...
                   
                  bool isLoggingEnabled () const
                   Checks whether or not logging is enabled. More...
                   

                  Additional Inherited Members

                  - Protected Member Functions inherited from Simulation
                  std::list< Event * >::iterator addEvent (Event *event_ptr)
                   Adds a pointer to an Event object to the event list and returns the iterator to its position in the list. More...
                   
                  std::list< Event * >::const_iterator addEvent (Event *event_ptr)
                   Adds a pointer to an Event object to the event list and returns the iterator to its position in the list. More...
                   
                  void addObject (Object *object_ptr)
                   Adds a pointer to an Object object to the object list. More...
                   
                  std::list< Event * >::iterator chooseNextEvent ()
                   Searches the event list and determines which event will be executed next. More...
                   
                  std::list< Event * >::const_iterator chooseNextEvent ()
                   Searches the event list and determines which event will be executed next. More...
                   
                  std::vector< Object * > findRecalcObjects (const Coords &coords_start, const Coords &coords_dest) const
                   Constructs and returns a vector of pointers to all Object objects that are to have their events recalculated/. More...
                   
                  + + + + + + +
                  double OSC_Sim::getInternalField () const
                  +
                  +
                  diff --git a/docs/class_o_s_c___sim.js b/docs/class_o_s_c___sim.js index 827b5aa..ef298c9 100644 --- a/docs/class_o_s_c___sim.js +++ b/docs/class_o_s_c___sim.js @@ -28,6 +28,7 @@ var class_o_s_c___sim = [ "getDynamicsTransientSinglets", "class_o_s_c___sim.html#af13f7b1b8f6df5a45c0111d11c0057db", null ], [ "getDynamicsTransientTimes", "class_o_s_c___sim.html#acde6068549f59f813d2faed73f6fedc9", null ], [ "getDynamicsTransientTriplets", "class_o_s_c___sim.html#a91d2dad10391f727348d96b0b21c8304", null ], + [ "getInternalField", "class_o_s_c___sim.html#aa8ee0a55f34be1da2f78be2931584723", null ], [ "getN_bimolecular_recombinations", "class_o_s_c___sim.html#afa814164790477d643fe04fca021483d", null ], [ "getN_electrons_collected", "class_o_s_c___sim.html#abb8a9aefba0cb189fbaeba0f9bdff180", null ], [ "getN_electrons_created", "class_o_s_c___sim.html#aadb3c72821bac6153f0f848ce1a87c2b", null ], diff --git a/docs/class_object-members.html b/docs/class_object-members.html index 60a9085..945c34b 100644 --- a/docs/class_object-members.html +++ b/docs/class_object-members.html @@ -30,7 +30,7 @@
                  Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                  An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                  diff --git a/docs/class_object.html b/docs/class_object.html index 94e1d88..c047483 100644 --- a/docs/class_object.html +++ b/docs/class_object.html @@ -30,7 +30,7 @@
                  Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                  An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                  @@ -105,7 +105,7 @@
                  -Exciton +Exciton Polaron
                  diff --git a/docs/class_polaron-members.html b/docs/class_polaron-members.html index 1aee5d9..c2a4034 100644 --- a/docs/class_polaron-members.html +++ b/docs/class_polaron-members.html @@ -30,7 +30,7 @@
                  Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                  An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                  diff --git a/docs/class_polaron.html b/docs/class_polaron.html index 18848b9..3aa59dd 100644 --- a/docs/class_polaron.html +++ b/docs/class_polaron.html @@ -30,7 +30,7 @@
                  Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                  An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                  diff --git a/docs/class_polaron___extraction-members.html b/docs/class_polaron___extraction-members.html index 4c5876c..6c4d128 100644 --- a/docs/class_polaron___extraction-members.html +++ b/docs/class_polaron___extraction-members.html @@ -30,7 +30,7 @@
                  Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                  An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                  diff --git a/docs/class_polaron___extraction.html b/docs/class_polaron___extraction.html index c53a594..3e36740 100644 --- a/docs/class_polaron___extraction.html +++ b/docs/class_polaron___extraction.html @@ -30,7 +30,7 @@
                  Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                  An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                  diff --git a/docs/class_polaron___hop-members.html b/docs/class_polaron___hop-members.html index 06d320e..13bf231 100644 --- a/docs/class_polaron___hop-members.html +++ b/docs/class_polaron___hop-members.html @@ -30,7 +30,7 @@
                  Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                  An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                  diff --git a/docs/class_polaron___hop.html b/docs/class_polaron___hop.html index f2ecda7..8300dd7 100644 --- a/docs/class_polaron___hop.html +++ b/docs/class_polaron___hop.html @@ -30,7 +30,7 @@
                  Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                  An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                  diff --git a/docs/class_polaron___recombination-members.html b/docs/class_polaron___recombination-members.html index 71f9e01..fbc3ae0 100644 --- a/docs/class_polaron___recombination-members.html +++ b/docs/class_polaron___recombination-members.html @@ -30,7 +30,7 @@
                  Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                  An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                  diff --git a/docs/class_polaron___recombination.html b/docs/class_polaron___recombination.html index a5b3281..856bc6d 100644 --- a/docs/class_polaron___recombination.html +++ b/docs/class_polaron___recombination.html @@ -30,7 +30,7 @@
                  Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                  An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                  diff --git a/docs/class_simulation-members.html b/docs/class_simulation-members.html index 085ed81..dba3d51 100644 --- a/docs/class_simulation-members.html +++ b/docs/class_simulation-members.html @@ -30,7 +30,7 @@
                  Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                  An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                  @@ -94,10 +94,10 @@

                  This is the complete list of members for Simulation, including all inherited members.

                  - + - + @@ -110,20 +110,21 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + +
                  addEvent(Event *event_ptr)Simulationprotected
                  addEvent(Event *event_ptr)Simulationprotected
                  addObject(Object *object_ptr)Simulationprotected
                  checkFinished() const =0Simulationpure virtual
                  chooseNextEvent()Simulationprotected
                  chooseNextEvent()Simulationprotected
                  Error_foundSimulationprotected
                  error_msgSimulationprotected
                  executeNextEvent()=0Simulationpure virtual
                  getN_events_executed() constSimulation
                  getTemp() constSimulation
                  getTime() constSimulation
                  init(const Parameters_Simulation &params, const int id)Simulation
                  isLoggingEnabled() constSimulation
                  latticeSimulationprotected
                  LogfileSimulationprotected
                  moveObject(Object *object_ptr, const Coords &coords_dest)Simulationprotected
                  rand01()Simulation
                  removeEvent(Event *event_ptr)Simulationprotected
                  removeObject(Object *object_ptr)Simulationprotected
                  setErrorMessage(const std::string &input_msg)Simulationprotected
                  setGeneratorSeed(const int seed)Simulation
                  setObjectEvent(const Object *object_ptr, Event *event_ptr)Simulationprotected
                  setTime(const double input_time)Simulationprotected
                  Simulation()Simulation
                  ~Simulation()Simulationvirtual
                  getVolume() constSimulation
                  init(const Parameters_Simulation &params, const int id)Simulation
                  isLoggingEnabled() constSimulation
                  latticeSimulationprotected
                  LogfileSimulationprotected
                  moveObject(Object *object_ptr, const Coords &coords_dest)Simulationprotected
                  rand01()Simulation
                  removeEvent(Event *event_ptr)Simulationprotected
                  removeObject(Object *object_ptr)Simulationprotected
                  setErrorMessage(const std::string &input_msg)Simulationprotected
                  setGeneratorSeed(const int seed)Simulation
                  setObjectEvent(const Object *object_ptr, Event *event_ptr)Simulationprotected
                  setTime(const double input_time)Simulationprotected
                  Simulation()Simulation
                  ~Simulation()Simulationvirtual
                  diff --git a/docs/class_simulation.html b/docs/class_simulation.html index 741ff59..146360d 100644 --- a/docs/class_simulation.html +++ b/docs/class_simulation.html @@ -30,7 +30,7 @@
                  Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                  An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                  @@ -146,6 +146,9 @@ double getTime () const  Get the current simulation time in units of seconds. More...
                    +double getVolume () const + Get the simulation box volume in cm^-3. More...
                  +  bool isLoggingEnabled () const  Checks whether or not logging is enabled. More...
                    @@ -158,15 +161,15 @@ - - - + + + - - - + + + @@ -264,8 +267,8 @@

                  Member Function Documentation

                  - -

                  ◆ addEvent()

                  + +

                  ◆ addEvent()

                  @@ -274,7 +277,7 @@

                  Protected Member Functions

                  std::list< Event * >::iterator addEvent (Event *event_ptr)
                   Adds a pointer to an Event object to the event list and returns the iterator to its position in the list. More...
                   
                  std::list< Event * >::const_iterator addEvent (Event *event_ptr)
                   Adds a pointer to an Event object to the event list and returns the iterator to its position in the list. More...
                   
                  void addObject (Object *object_ptr)
                   Adds a pointer to an Object object to the object list. More...
                   
                  std::list< Event * >::iterator chooseNextEvent ()
                   Searches the event list and determines which event will be executed next. More...
                   
                  std::list< Event * >::const_iterator chooseNextEvent ()
                   Searches the event list and determines which event will be executed next. More...
                   
                  std::vector< Object * > findRecalcObjects (const Coords &coords_start, const Coords &coords_dest) const
                   Constructs and returns a vector of pointers to all Object objects that are to have their events recalculated/. More...
                   
                  - + @@ -365,8 +368,8 @@

                  -

                  ◆ chooseNextEvent()

                  + +

                  ◆ chooseNextEvent()

                  @@ -375,7 +378,7 @@

                  list< Event * >::iterator Simulation::addEvent list< Event * >::const_iterator Simulation::addEvent ( Event event_ptr)
                  - + @@ -613,6 +616,25 @@

                  +

                  ◆ getVolume()

                  + +
                  +
                  +
                  list< Event * >::iterator Simulation::chooseNextEvent list< Event * >::const_iterator Simulation::chooseNextEvent ( )
                  + + + + + + +
                  double Simulation::getVolume () const
                  +
                  + +

                  Get the simulation box volume in cm^-3.

                  +
                  diff --git a/docs/class_simulation.js b/docs/class_simulation.js index 084e66f..5d19a72 100644 --- a/docs/class_simulation.js +++ b/docs/class_simulation.js @@ -2,10 +2,10 @@ var class_simulation = [ [ "~Simulation", "class_simulation.html#a80fad3f57dfaf195a36f7bc49bc88279", null ], [ "Simulation", "class_simulation.html#a5b224cc5b36bcc8eb29689aff223de41", null ], - [ "addEvent", "class_simulation.html#a4b84249d359723e00ec4ae77164c8b7d", null ], + [ "addEvent", "class_simulation.html#a33a57b5640b0d33c816dc6e57604162e", null ], [ "addObject", "class_simulation.html#a1e0f43c4e11eda5486054c250f4de08f", null ], [ "checkFinished", "class_simulation.html#af69bb46977a3a0084214a194c888e16c", null ], - [ "chooseNextEvent", "class_simulation.html#a401d40509ba367a28702873a0d65188d", null ], + [ "chooseNextEvent", "class_simulation.html#af8cf2e5c24531582599423df2d70dc5b", null ], [ "executeNextEvent", "class_simulation.html#a48e9e82f9dac1acec5d063a9f6f6115e", null ], [ "findRecalcObjects", "class_simulation.html#a662702acf2d446dbdef0e1c87bf21038", null ], [ "getAllObjectPtrs", "class_simulation.html#a620684b9ac1fb07344c4c2237ed9f352", null ], @@ -15,6 +15,7 @@ var class_simulation = [ "getN_events_executed", "class_simulation.html#a52cb5564151421cbefaca56357738de7", null ], [ "getTemp", "class_simulation.html#ac00bce7c792fb67a75395c46c03efe0a", null ], [ "getTime", "class_simulation.html#a391ac262089c8bda8e76ce930b1db88b", null ], + [ "getVolume", "class_simulation.html#a623c3fbc431ab74c2d2b2374a3b5a3a7", null ], [ "init", "class_simulation.html#af88e5e0634b373ba28f1dd87670725a6", null ], [ "isLoggingEnabled", "class_simulation.html#ac7c8a49a4cc506b850891480e0aae512", null ], [ "moveObject", "class_simulation.html#a59666ceba048bec35557cb8b691d24d9", null ], diff --git a/docs/class_site-members.html b/docs/class_site-members.html index c4c13ab..be48d5c 100644 --- a/docs/class_site-members.html +++ b/docs/class_site-members.html @@ -30,7 +30,7 @@
                  Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                  An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                  diff --git a/docs/class_site.html b/docs/class_site.html index 5571ebc..8316f8e 100644 --- a/docs/class_site.html +++ b/docs/class_site.html @@ -30,7 +30,7 @@
                  Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                  An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                  diff --git a/docs/class_site___o_s_c-members.html b/docs/class_site___o_s_c-members.html index c491e76..91ae414 100644 --- a/docs/class_site___o_s_c-members.html +++ b/docs/class_site___o_s_c-members.html @@ -30,7 +30,7 @@
                  Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                  An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                  diff --git a/docs/class_site___o_s_c.html b/docs/class_site___o_s_c.html index 254edd1..5beacb4 100644 --- a/docs/class_site___o_s_c.html +++ b/docs/class_site___o_s_c.html @@ -30,7 +30,7 @@
                  Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                  An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                  diff --git a/docs/classes.html b/docs/classes.html index 1270f7e..3163aac 100644 --- a/docs/classes.html +++ b/docs/classes.html @@ -30,7 +30,7 @@
                  Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                  An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                  diff --git a/docs/dir_6f62b451fe0710dc1584a1c9c5fb6ce0.html b/docs/dir_6f62b451fe0710dc1584a1c9c5fb6ce0.html index dd05341..c3b9d29 100644 --- a/docs/dir_6f62b451fe0710dc1584a1c9c5fb6ce0.html +++ b/docs/dir_6f62b451fe0710dc1584a1c9c5fb6ce0.html @@ -30,7 +30,7 @@
                  Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                  An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                  diff --git a/docs/files.html b/docs/files.html index dc342c8..a740cc9 100644 --- a/docs/files.html +++ b/docs/files.html @@ -30,7 +30,7 @@
                  Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                  An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                  diff --git a/docs/functions.html b/docs/functions.html index ec7ca1c..084c4be 100644 --- a/docs/functions.html +++ b/docs/functions.html @@ -30,7 +30,7 @@
                  Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                  An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                  @@ -94,7 +94,7 @@

                  - a -

                    : Parameters_OPV
                  • addEvent() -: Simulation +: Simulation
                  • addObject() : Simulation diff --git a/docs/functions_0x7e.html b/docs/functions_0x7e.html index d114a4e..990a6e3 100644 --- a/docs/functions_0x7e.html +++ b/docs/functions_0x7e.html @@ -30,7 +30,7 @@
                    Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                    An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                    diff --git a/docs/functions_c.html b/docs/functions_c.html index 1819b85..9b5aed8 100644 --- a/docs/functions_c.html +++ b/docs/functions_c.html @@ -30,7 +30,7 @@
                    Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                    An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                    @@ -157,7 +157,7 @@

                    - c -

                      : OSC_Sim
                    • chooseNextEvent() -: Simulation +: Simulation
                    • clearOccupancy() : Lattice diff --git a/docs/functions_d.html b/docs/functions_d.html index 8b67b2e..8cf14b0 100644 --- a/docs/functions_d.html +++ b/docs/functions_d.html @@ -30,7 +30,7 @@
                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                      diff --git a/docs/functions_e.html b/docs/functions_e.html index 3a75e82..c10886b 100644 --- a/docs/functions_e.html +++ b/docs/functions_e.html @@ -30,7 +30,7 @@
                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                      @@ -226,7 +226,7 @@

                      - e -

                        , Polaron_Recombination
                      • Exciton() -: Exciton +: Exciton
                      • Exciton_Creation() : Exciton_Creation diff --git a/docs/functions_f.html b/docs/functions_f.html index f28caf6..1c0d6a7 100644 --- a/docs/functions_f.html +++ b/docs/functions_f.html @@ -30,7 +30,7 @@
                        Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                        An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                        diff --git a/docs/functions_func.html b/docs/functions_func.html index 3d408b4..d85ca9c 100644 --- a/docs/functions_func.html +++ b/docs/functions_func.html @@ -30,7 +30,7 @@
                        Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                        An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                        @@ -91,7 +91,7 @@

                        - a -

                        • addEvent() -: Simulation +: Simulation
                        • addObject() : Simulation diff --git a/docs/functions_func_0x7e.html b/docs/functions_func_0x7e.html index 931117a..018391e 100644 --- a/docs/functions_func_0x7e.html +++ b/docs/functions_func_0x7e.html @@ -30,7 +30,7 @@
                          Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                          An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                          diff --git a/docs/functions_func_c.html b/docs/functions_func_c.html index 196c241..364474e 100644 --- a/docs/functions_func_c.html +++ b/docs/functions_func_c.html @@ -30,7 +30,7 @@
                          Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                          An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                          @@ -157,7 +157,7 @@

                          - c -

                            : OSC_Sim
                          • chooseNextEvent() -: Simulation +: Simulation
                          • clearOccupancy() : Lattice diff --git a/docs/functions_func_e.html b/docs/functions_func_e.html index 36123c1..6bdf81b 100644 --- a/docs/functions_func_e.html +++ b/docs/functions_func_e.html @@ -30,7 +30,7 @@
                            Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                            An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                            @@ -94,7 +94,7 @@

                            - e -

                              : Event
                            • Exciton() -: Exciton +: Exciton
                            • Exciton_Creation() : Exciton_Creation diff --git a/docs/functions_func_f.html b/docs/functions_func_f.html index 710a16b..d014f18 100644 --- a/docs/functions_func_f.html +++ b/docs/functions_func_f.html @@ -30,7 +30,7 @@
                              Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                              An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                              diff --git a/docs/functions_func_g.html b/docs/functions_func_g.html index 0fee804..f4ef0de 100644 --- a/docs/functions_func_g.html +++ b/docs/functions_func_g.html @@ -30,7 +30,7 @@
                              Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                              An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                              @@ -190,6 +190,9 @@

                              - g -

                              • getId() : Simulation
                              • +
                              • getInternalField() +: OSC_Sim +
                              • getLength() : Lattice
                              • @@ -313,6 +316,10 @@

                                - g -

                                • getUnitSize() : Lattice
                                • +
                                • getVolume() +: Lattice +, Simulation +
                                • getWidth() : Lattice
                                • diff --git a/docs/functions_func_i.html b/docs/functions_func_i.html index 39ff765..e94c945 100644 --- a/docs/functions_func_i.html +++ b/docs/functions_func_i.html @@ -30,7 +30,7 @@
                                  Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                  An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                  diff --git a/docs/functions_func_l.html b/docs/functions_func_l.html index c2ad213..e278032 100644 --- a/docs/functions_func_l.html +++ b/docs/functions_func_l.html @@ -30,7 +30,7 @@
                                  Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                  An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                  diff --git a/docs/functions_func_m.html b/docs/functions_func_m.html index 47795bc..c66704e 100644 --- a/docs/functions_func_m.html +++ b/docs/functions_func_m.html @@ -30,7 +30,7 @@
                                  Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                  An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                  diff --git a/docs/functions_func_o.html b/docs/functions_func_o.html index f3b6fad..3340f73 100644 --- a/docs/functions_func_o.html +++ b/docs/functions_func_o.html @@ -30,7 +30,7 @@
                                  Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                  An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                  diff --git a/docs/functions_func_p.html b/docs/functions_func_p.html index 4373a67..ae73ac7 100644 --- a/docs/functions_func_p.html +++ b/docs/functions_func_p.html @@ -30,7 +30,7 @@
                                  Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                  An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                  diff --git a/docs/functions_func_r.html b/docs/functions_func_r.html index 38d5920..66f94ce 100644 --- a/docs/functions_func_r.html +++ b/docs/functions_func_r.html @@ -30,7 +30,7 @@
                                  Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                  An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                  diff --git a/docs/functions_func_s.html b/docs/functions_func_s.html index d0dbaa0..9387b58 100644 --- a/docs/functions_func_s.html +++ b/docs/functions_func_s.html @@ -30,7 +30,7 @@
                                  Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                  An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                  diff --git a/docs/functions_g.html b/docs/functions_g.html index b9d8b85..ee056b5 100644 --- a/docs/functions_g.html +++ b/docs/functions_g.html @@ -30,7 +30,7 @@
                                  Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                  An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                  @@ -193,6 +193,9 @@

                                  - g -

                                  • getId() : Simulation
                                  • +
                                  • getInternalField() +: OSC_Sim +
                                  • getLength() : Lattice
                                  • @@ -316,6 +319,10 @@

                                    - g -

                                    • getUnitSize() : Lattice
                                    • +
                                    • getVolume() +: Lattice +, Simulation +
                                    • getWidth() : Lattice
                                    • diff --git a/docs/functions_h.html b/docs/functions_h.html index 5c3bd69..44ef7f0 100644 --- a/docs/functions_h.html +++ b/docs/functions_h.html @@ -30,7 +30,7 @@
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      diff --git a/docs/functions_i.html b/docs/functions_i.html index 3289404..f94ac21 100644 --- a/docs/functions_i.html +++ b/docs/functions_i.html @@ -30,7 +30,7 @@
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      diff --git a/docs/functions_l.html b/docs/functions_l.html index eff8096..816e2c5 100644 --- a/docs/functions_l.html +++ b/docs/functions_l.html @@ -30,7 +30,7 @@
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      diff --git a/docs/functions_m.html b/docs/functions_m.html index 038e550..daf423d 100644 --- a/docs/functions_m.html +++ b/docs/functions_m.html @@ -30,7 +30,7 @@
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      diff --git a/docs/functions_n.html b/docs/functions_n.html index 74d418c..f95ac2f 100644 --- a/docs/functions_n.html +++ b/docs/functions_n.html @@ -30,7 +30,7 @@
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      diff --git a/docs/functions_o.html b/docs/functions_o.html index fb95861..6183f75 100644 --- a/docs/functions_o.html +++ b/docs/functions_o.html @@ -30,7 +30,7 @@
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      diff --git a/docs/functions_p.html b/docs/functions_p.html index b467f36..9a6ff53 100644 --- a/docs/functions_p.html +++ b/docs/functions_p.html @@ -30,7 +30,7 @@
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      diff --git a/docs/functions_r.html b/docs/functions_r.html index 94e120a..e072624 100644 --- a/docs/functions_r.html +++ b/docs/functions_r.html @@ -30,7 +30,7 @@
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      diff --git a/docs/functions_s.html b/docs/functions_s.html index 66a2f05..2510505 100644 --- a/docs/functions_s.html +++ b/docs/functions_s.html @@ -30,7 +30,7 @@
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      diff --git a/docs/functions_t.html b/docs/functions_t.html index e78251f..3d7c5a5 100644 --- a/docs/functions_t.html +++ b/docs/functions_t.html @@ -30,7 +30,7 @@
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      diff --git a/docs/functions_u.html b/docs/functions_u.html index 715215f..add218e 100644 --- a/docs/functions_u.html +++ b/docs/functions_u.html @@ -30,7 +30,7 @@
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      diff --git a/docs/functions_vars.html b/docs/functions_vars.html index 68f4fc3..f094e48 100644 --- a/docs/functions_vars.html +++ b/docs/functions_vars.html @@ -30,7 +30,7 @@
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      diff --git a/docs/functions_w.html b/docs/functions_w.html index fbe1fc6..785daff 100644 --- a/docs/functions_w.html +++ b/docs/functions_w.html @@ -30,7 +30,7 @@
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      diff --git a/docs/functions_x.html b/docs/functions_x.html index ae8218c..b5e6433 100644 --- a/docs/functions_x.html +++ b/docs/functions_x.html @@ -30,7 +30,7 @@
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      diff --git a/docs/functions_y.html b/docs/functions_y.html index 64800e7..c3dc23a 100644 --- a/docs/functions_y.html +++ b/docs/functions_y.html @@ -30,7 +30,7 @@
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      diff --git a/docs/functions_z.html b/docs/functions_z.html index 59cde9b..3b79dc9 100644 --- a/docs/functions_z.html +++ b/docs/functions_z.html @@ -30,7 +30,7 @@
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      diff --git a/docs/globals.html b/docs/globals.html index dc7cb07..097f1dc 100644 --- a/docs/globals.html +++ b/docs/globals.html @@ -30,7 +30,7 @@
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      diff --git a/docs/globals_func.html b/docs/globals_func.html index 742ce21..454f5dd 100644 --- a/docs/globals_func.html +++ b/docs/globals_func.html @@ -30,7 +30,7 @@
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      diff --git a/docs/hierarchy.html b/docs/hierarchy.html index 857a8ca..45d2b35 100644 --- a/docs/hierarchy.html +++ b/docs/hierarchy.html @@ -30,7 +30,7 @@
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      @@ -95,19 +95,19 @@
                                      [detail level 12]
                                      - - - - - - - + + + + + + + - + diff --git a/docs/index.html b/docs/index.html index 210bc35..4b2f831 100644 --- a/docs/index.html +++ b/docs/index.html @@ -30,7 +30,7 @@ @@ -100,7 +100,7 @@

                                      Major Features:

                                    • Donor and acceptor materials can take on an uncorrelated Gaussian DOS, a correlated Gaussian DOS with different correlation functions, or an uncorrelated exponential DOS model.
                                    • Dynamics test simulations can be performed to generate exciton and charge carrier density transients that can be used to model exciton dissociation, charge carrier separation, and charge carrier recombination kinetics.
                                    • Time-of-flight charge transport simulations of electrons or holes can be performed on neat, random blend, or bulk heterojunction blend films.
                                    • -
                                    • Exciton diffusion simulations can be performed on any film architecture.
                                    • +
                                    • Exciton diffusion simulations can be performed on any film architecture.
                                    • Internal quantum efficiency simulations can be performed on bilayer, random blend, or bulk heterojunction blend films.
                                    • Simulate complex exciton dynamics with events for intersystem crossing between singlet and triplet states as well as exciton-exciton and exciton-polaron annihilation events.
                                    • Choose between Miller-Abrahams or Marcus models for polaron hopping.
                                    • @@ -108,7 +108,7 @@

                                      Major Features:

                                    • Choose between several KMC algorithms (first reaction method, selective recalculation method, or full recalculation method).
                                    • Current Status

                                      -

                                      The current version (Excimontec v1.0-beta.2) is built with KMC_Lattice v2.0-beta.2 and allows the user to perform several simulation tests relevant for OPV and OLED devices. All major planned features that are to be included in v1.0 are now implemented and have undergone preliminary testing. However, this software tool is still under development, and as such, there may still be bugs that need to be squashed. Please report any bugs or submit feature requests in the Issues section.

                                      +

                                      The current version (Excimontec v1.0-beta.3) is built with KMC_Lattice v2.0-beta.3 and allows the user to perform several simulation tests relevant for OPV and OLED devices. All major planned features that are to be included in v1.0 are now implemented and have undergone preliminary testing. However, this software tool is still under development, and as such, there may still be bugs that need to be squashed. Please report any bugs or submit feature requests in the Issues section.

                                      Work Together

                                      If you would like to contribute to the development of this project or would like some help in using the tool for your research, please contact me to discuss a collaboration. You can check out my KMC research and other work on Researchgate.

                                      How to try Excimontec?

                                      diff --git a/docs/main_8cpp.html b/docs/main_8cpp.html index 8bbc905..193a212 100644 --- a/docs/main_8cpp.html +++ b/docs/main_8cpp.html @@ -30,7 +30,7 @@ diff --git a/docs/md__k_m_c__lattice__r_e_a_d_m_e.html b/docs/md__k_m_c__lattice__r_e_a_d_m_e.html index 8de74b6..9948569 100644 --- a/docs/md__k_m_c__lattice__r_e_a_d_m_e.html +++ b/docs/md__k_m_c__lattice__r_e_a_d_m_e.html @@ -30,7 +30,7 @@ diff --git a/docs/md__r_e_a_d_m_e.html b/docs/md__r_e_a_d_m_e.html index 210bc35..4b2f831 100644 --- a/docs/md__r_e_a_d_m_e.html +++ b/docs/md__r_e_a_d_m_e.html @@ -30,7 +30,7 @@ @@ -100,7 +100,7 @@

                                      Major Features:

                                    • Donor and acceptor materials can take on an uncorrelated Gaussian DOS, a correlated Gaussian DOS with different correlation functions, or an uncorrelated exponential DOS model.
                                    • Dynamics test simulations can be performed to generate exciton and charge carrier density transients that can be used to model exciton dissociation, charge carrier separation, and charge carrier recombination kinetics.
                                    • Time-of-flight charge transport simulations of electrons or holes can be performed on neat, random blend, or bulk heterojunction blend films.
                                    • -
                                    • Exciton diffusion simulations can be performed on any film architecture.
                                    • +
                                    • Exciton diffusion simulations can be performed on any film architecture.
                                    • Internal quantum efficiency simulations can be performed on bilayer, random blend, or bulk heterojunction blend films.
                                    • Simulate complex exciton dynamics with events for intersystem crossing between singlet and triplet states as well as exciton-exciton and exciton-polaron annihilation events.
                                    • Choose between Miller-Abrahams or Marcus models for polaron hopping.
                                    • @@ -108,7 +108,7 @@

                                      Major Features:

                                    • Choose between several KMC algorithms (first reaction method, selective recalculation method, or full recalculation method).
                                    • Current Status

                                      -

                                      The current version (Excimontec v1.0-beta.2) is built with KMC_Lattice v2.0-beta.2 and allows the user to perform several simulation tests relevant for OPV and OLED devices. All major planned features that are to be included in v1.0 are now implemented and have undergone preliminary testing. However, this software tool is still under development, and as such, there may still be bugs that need to be squashed. Please report any bugs or submit feature requests in the Issues section.

                                      +

                                      The current version (Excimontec v1.0-beta.3) is built with KMC_Lattice v2.0-beta.3 and allows the user to perform several simulation tests relevant for OPV and OLED devices. All major planned features that are to be included in v1.0 are now implemented and have undergone preliminary testing. However, this software tool is still under development, and as such, there may still be bugs that need to be squashed. Please report any bugs or submit feature requests in the Issues section.

                                      Work Together

                                      If you would like to contribute to the development of this project or would like some help in using the tool for your research, please contact me to discuss a collaboration. You can check out my KMC research and other work on Researchgate.

                                      How to try Excimontec?

                                      diff --git a/docs/namespace_utils.html b/docs/namespace_utils.html index 4213271..5d67dd8 100644 --- a/docs/namespace_utils.html +++ b/docs/namespace_utils.html @@ -30,7 +30,7 @@ diff --git a/docs/namespacemembers.html b/docs/namespacemembers.html index a5dfd58..236d68e 100644 --- a/docs/namespacemembers.html +++ b/docs/namespacemembers.html @@ -30,7 +30,7 @@ diff --git a/docs/namespacemembers_func.html b/docs/namespacemembers_func.html index 6bf7ecc..4430fcb 100644 --- a/docs/namespacemembers_func.html +++ b/docs/namespacemembers_func.html @@ -30,7 +30,7 @@ diff --git a/docs/namespaces.html b/docs/namespaces.html index cab0a3e..28e0159 100644 --- a/docs/namespaces.html +++ b/docs/namespaces.html @@ -30,7 +30,7 @@ diff --git a/docs/navtreedata.js b/docs/navtreedata.js index 6488f12..068b62d 100644 --- a/docs/navtreedata.js +++ b/docs/navtreedata.js @@ -56,7 +56,7 @@ var NAVTREE = var NAVTREEINDEX = [ "_event_8cpp.html", -"class_simulation.html#a1e0f43c4e11eda5486054c250f4de08f" +"class_simulation.html#a0f06c75c9dd6be20a3911781b48fd467" ]; var SYNCONMSG = 'click to disable panel synchronisation'; diff --git a/docs/navtreeindex0.js b/docs/navtreeindex0.js index 3a518b1..8bcfbab 100644 --- a/docs/navtreeindex0.js +++ b/docs/navtreeindex0.js @@ -78,9 +78,9 @@ var NAVTREEINDEX0 = "class_event.html#adbadc626c37dc77443f6f8c9abec589f":[3,0,1,2], "class_event.html#af4282af20bd5b3940ba75c23e6032f18":[3,0,1,10], "class_exciton.html":[3,0,2], -"class_exciton.html#a105a259c1235f22972cd25d811a750e7":[3,0,2,0], "class_exciton.html#a1d78a570cc48f62886033465219dd04c":[3,0,2,2], "class_exciton.html#a43da382ee3ab29d032ab60a8e97ebaf6":[3,0,2,4], +"class_exciton.html#a480ef78405291593519ac372b7712029":[3,0,2,0], "class_exciton.html#a85a7b8561f6e294593679e53dd3b91a9":[3,0,2,1], "class_exciton.html#a91cb4c59b7e7a7fb756aae4c4109dba3":[3,0,2,3], "class_exciton___creation.html":[3,0,3], @@ -123,16 +123,17 @@ var NAVTREEINDEX0 = "class_lattice.html":[3,0,10], "class_lattice.html#a08adb2f412af409d3ec241e60e687c1a":[3,0,10,2], "class_lattice.html#a180a9d79a40b1a0a092c8ab489569700":[3,0,10,13], -"class_lattice.html#a2b0a88048fae662aa71386a3a123a260":[3,0,10,23], +"class_lattice.html#a2b0a88048fae662aa71386a3a123a260":[3,0,10,24], "class_lattice.html#a3f51b0b41cf0e43e0469320310494a1e":[3,0,10,8], "class_lattice.html#a46f7d12855d24e1bdd02814621b0a178":[3,0,10,20], +"class_lattice.html#a46f9cec33419459b64ff0efdf47a38b9":[3,0,10,22], "class_lattice.html#a4b43b67a36fcd3dfe62c9eeaffa561d2":[3,0,10,16], "class_lattice.html#a4be17e9123f7737387991a9d1a8b87b3":[3,0,10,17], -"class_lattice.html#a4d37afb6ad4c67f4f6462c2f6d5c337d":[3,0,10,24], +"class_lattice.html#a4d37afb6ad4c67f4f6462c2f6d5c337d":[3,0,10,25], "class_lattice.html#a4e8b3577701ec0cefce595f6956b22e3":[3,0,10,5], -"class_lattice.html#a515b8bc548ef4a87c3495a7352a60399":[3,0,10,29], +"class_lattice.html#a515b8bc548ef4a87c3495a7352a60399":[3,0,10,30], "class_lattice.html#a584ff9c528ebe46a6aea6ed652d107f4":[3,0,10,6], -"class_lattice.html#a59546ec4301871897ba5adfda1126741":[3,0,10,30], +"class_lattice.html#a59546ec4301871897ba5adfda1126741":[3,0,10,31], "class_lattice.html#a60431f6504a253d47acb0b02f524571c":[3,0,10,19], "class_lattice.html#a70a5cebc3c0c5a0f609be0592e7cc117":[3,0,10,0], "class_lattice.html#a74a170b841ad1b74dad43519d37e9eaf":[3,0,10,18], @@ -140,72 +141,73 @@ var NAVTREEINDEX0 = "class_lattice.html#a96006397a6ab389fb1eee87fde6e2165":[3,0,10,14], "class_lattice.html#a97a1b4f24cd40b81ed63aa2d7713b63b":[3,0,10,10], "class_lattice.html#a9fbb3c8bc23999ff685b6837beb62606":[3,0,10,11], -"class_lattice.html#aa1f65735ecbd750ec04b6413b4d47316":[3,0,10,28], +"class_lattice.html#aa1f65735ecbd750ec04b6413b4d47316":[3,0,10,29], "class_lattice.html#aa6b80d6264bfc23ae5fea39abd2557d5":[3,0,10,1], "class_lattice.html#aaa0cba3ab33ac620d9b9f9508c56d1ac":[3,0,10,15], "class_lattice.html#ab78435e50e3bf9f376c04fc305785bb4":[3,0,10,12], -"class_lattice.html#ac3192acefb019c5258143a6c758b3e48":[3,0,10,26], +"class_lattice.html#ac3192acefb019c5258143a6c758b3e48":[3,0,10,27], "class_lattice.html#ac6963a6b2b4b8d96d3417f6e9c2a509d":[3,0,10,21], -"class_lattice.html#accf3b995e0d0cb422907728a29b1b523":[3,0,10,25], +"class_lattice.html#accf3b995e0d0cb422907728a29b1b523":[3,0,10,26], "class_lattice.html#acdeca889f7df11fe299f8b7941198c83":[3,0,10,4], "class_lattice.html#ad0592298c4b92e9e84a768b95cd6d0f0":[3,0,10,9], -"class_lattice.html#ad7dd1b12a253e506aba5cedb57bf86ea":[3,0,10,27], +"class_lattice.html#ad7dd1b12a253e506aba5cedb57bf86ea":[3,0,10,28], "class_lattice.html#ad89c5473dd37339ede9fb3d0c3db4300":[3,0,10,3], -"class_lattice.html#aeb60d2b8bfb02d9da8bef463f0d41428":[3,0,10,22], +"class_lattice.html#aeb60d2b8bfb02d9da8bef463f0d41428":[3,0,10,23], "class_o_s_c___sim.html":[3,0,12], -"class_o_s_c___sim.html#a01a190017bc7a7e04c6af824fa47dbce":[3,0,12,50], -"class_o_s_c___sim.html#a03028810d8edc276ed7ab0a8228feaaa":[3,0,12,49], -"class_o_s_c___sim.html#a0b14455856a684c59ba7d496782b0941":[3,0,12,43], -"class_o_s_c___sim.html#a152520ae80b5f879578c01c25b9b4a7f":[3,0,12,35], -"class_o_s_c___sim.html#a15a47ed6657c8301eac0c938f8887324":[3,0,12,51], -"class_o_s_c___sim.html#a15b6b1af56c4285252c6102b3672481c":[3,0,12,31], +"class_o_s_c___sim.html#a01a190017bc7a7e04c6af824fa47dbce":[3,0,12,51], +"class_o_s_c___sim.html#a03028810d8edc276ed7ab0a8228feaaa":[3,0,12,50], +"class_o_s_c___sim.html#a0b14455856a684c59ba7d496782b0941":[3,0,12,44], +"class_o_s_c___sim.html#a152520ae80b5f879578c01c25b9b4a7f":[3,0,12,36], +"class_o_s_c___sim.html#a15a47ed6657c8301eac0c938f8887324":[3,0,12,52], +"class_o_s_c___sim.html#a15b6b1af56c4285252c6102b3672481c":[3,0,12,32], "class_o_s_c___sim.html#a176ab132e314dfd509e8feb89687f163":[3,0,12,10], "class_o_s_c___sim.html#a2085bcb7a9308a9544db674852947112":[3,0,12,1], -"class_o_s_c___sim.html#a3159c7445f114390c7fb52fa73d559ef":[3,0,12,33], +"class_o_s_c___sim.html#a3159c7445f114390c7fb52fa73d559ef":[3,0,12,34], "class_o_s_c___sim.html#a37e177cadae01e8a2ec753cdae165297":[3,0,12,17], -"class_o_s_c___sim.html#a3e70becfb20c8eaa420fd64d12492881":[3,0,12,46], +"class_o_s_c___sim.html#a3e70becfb20c8eaa420fd64d12492881":[3,0,12,47], "class_o_s_c___sim.html#a41bdb6368c71e1a3cb0efdc2a55d7869":[3,0,12,13], "class_o_s_c___sim.html#a53be32d48cc8319af6143fe858b3840f":[3,0,12,23], -"class_o_s_c___sim.html#a54ad519acee6dbd67c19d5baa3bc4919":[3,0,12,45], +"class_o_s_c___sim.html#a54ad519acee6dbd67c19d5baa3bc4919":[3,0,12,46], "class_o_s_c___sim.html#a62aa25ac6740cea4efab1dcc7f88c5d5":[3,0,12,2], -"class_o_s_c___sim.html#a6362a3edee0a1a4f63bdc82a7a0275c5":[3,0,12,39], -"class_o_s_c___sim.html#a6809c1bc0b9fd7852621a86eb49457e0":[3,0,12,36], +"class_o_s_c___sim.html#a6362a3edee0a1a4f63bdc82a7a0275c5":[3,0,12,40], +"class_o_s_c___sim.html#a6809c1bc0b9fd7852621a86eb49457e0":[3,0,12,37], "class_o_s_c___sim.html#a6ce1e72c2a7d1161f844ebd46231c961":[3,0,12,14], -"class_o_s_c___sim.html#a75f8094106ced73efaec99cc302f2aa9":[3,0,12,55], +"class_o_s_c___sim.html#a75f8094106ced73efaec99cc302f2aa9":[3,0,12,56], "class_o_s_c___sim.html#a77e6cd447d0dcab5d4bb99643c43d3a4":[3,0,12,20], -"class_o_s_c___sim.html#a78aa9badec9d28169b7b71b29e90c265":[3,0,12,54], -"class_o_s_c___sim.html#a7c6cce40287a60c271509c1f3d8eef9a":[3,0,12,53], +"class_o_s_c___sim.html#a78aa9badec9d28169b7b71b29e90c265":[3,0,12,55], +"class_o_s_c___sim.html#a7c6cce40287a60c271509c1f3d8eef9a":[3,0,12,54], "class_o_s_c___sim.html#a7cbca947933286e632d3d76dfed403bf":[3,0,12,7], "class_o_s_c___sim.html#a7e7da89362449d58373a31c255a27d8f":[3,0,12,9], "class_o_s_c___sim.html#a804f8facf0f5ee86d0234662a0719571":[3,0,12,16], "class_o_s_c___sim.html#a858300b2a76f1a1b24747d11869a1f4a":[3,0,12,3], "class_o_s_c___sim.html#a87440b491cad2d1ece7b5745bda5d42a":[3,0,12,19], "class_o_s_c___sim.html#a8cbaab921f75c2b1ccc85b42ed698c58":[3,0,12,5], -"class_o_s_c___sim.html#a8d295ea6ed8c006f9770af4e33758725":[3,0,12,42], +"class_o_s_c___sim.html#a8d295ea6ed8c006f9770af4e33758725":[3,0,12,43], "class_o_s_c___sim.html#a91d2dad10391f727348d96b0b21c8304":[3,0,12,27], "class_o_s_c___sim.html#a92f8e2ae6bcd3e0755feb2419849c8e9":[3,0,12,12], "class_o_s_c___sim.html#a97f04719b91c90ac64dd8186476aa5f5":[3,0,12,15], "class_o_s_c___sim.html#a99e37cc427f843a92d58c6fa9b13fffe":[3,0,12,8], -"class_o_s_c___sim.html#aa057ee46e104e6fcb21b7724bfd2c1a9":[3,0,12,41], -"class_o_s_c___sim.html#aa3e0342b2a8c7dc5a62211dd6161027f":[3,0,12,48], -"class_o_s_c___sim.html#aa6a8cfccbe629cba8ed137e3c205affe":[3,0,12,38], -"class_o_s_c___sim.html#aadb3c72821bac6153f0f848ce1a87c2b":[3,0,12,30], -"class_o_s_c___sim.html#aae233390486c4db28a72936dd7d398f1":[3,0,12,47], +"class_o_s_c___sim.html#aa057ee46e104e6fcb21b7724bfd2c1a9":[3,0,12,42], +"class_o_s_c___sim.html#aa3e0342b2a8c7dc5a62211dd6161027f":[3,0,12,49], +"class_o_s_c___sim.html#aa6a8cfccbe629cba8ed137e3c205affe":[3,0,12,39], +"class_o_s_c___sim.html#aa8ee0a55f34be1da2f78be2931584723":[3,0,12,28], +"class_o_s_c___sim.html#aadb3c72821bac6153f0f848ce1a87c2b":[3,0,12,31], +"class_o_s_c___sim.html#aae233390486c4db28a72936dd7d398f1":[3,0,12,48], "class_o_s_c___sim.html#ab3e4258c850b48ec02e4d3a88b583115":[3,0,12,11], -"class_o_s_c___sim.html#abb8a9aefba0cb189fbaeba0f9bdff180":[3,0,12,29], -"class_o_s_c___sim.html#ac5a6b2ae37d49b9114fe032f533e41c6":[3,0,12,52], +"class_o_s_c___sim.html#abb8a9aefba0cb189fbaeba0f9bdff180":[3,0,12,30], +"class_o_s_c___sim.html#ac5a6b2ae37d49b9114fe032f533e41c6":[3,0,12,53], "class_o_s_c___sim.html#acde6068549f59f813d2faed73f6fedc9":[3,0,12,26], -"class_o_s_c___sim.html#ad24aaff4c9a327bb978180d47dd67036":[3,0,12,44], -"class_o_s_c___sim.html#ad38ee5ecfdd65fe4d162763842a2a4b6":[3,0,12,32], -"class_o_s_c___sim.html#ad4e1d01074aa99ab83a86caf102ed1f0":[3,0,12,34], +"class_o_s_c___sim.html#ad24aaff4c9a327bb978180d47dd67036":[3,0,12,45], +"class_o_s_c___sim.html#ad38ee5ecfdd65fe4d162763842a2a4b6":[3,0,12,33], +"class_o_s_c___sim.html#ad4e1d01074aa99ab83a86caf102ed1f0":[3,0,12,35], "class_o_s_c___sim.html#ad6bffe074bd5e2c5b2f08561fa8bf117":[3,0,12,24], -"class_o_s_c___sim.html#adbc98ace600bbb3e78bced45d3aaf7b0":[3,0,12,40], +"class_o_s_c___sim.html#adbc98ace600bbb3e78bced45d3aaf7b0":[3,0,12,41], "class_o_s_c___sim.html#ae42c945062f1c9efd5e83a58633d6d7a":[3,0,12,21], -"class_o_s_c___sim.html#ae6bc3f06e216d922075039c6e3f900c9":[3,0,12,37], +"class_o_s_c___sim.html#ae6bc3f06e216d922075039c6e3f900c9":[3,0,12,38], "class_o_s_c___sim.html#aeb3e7abae4824a3a506156551e0c9c8e":[3,0,12,0], "class_o_s_c___sim.html#aef139f85af869c000b362b2a17e46cff":[3,0,12,6], "class_o_s_c___sim.html#af13f7b1b8f6df5a45c0111d11c0057db":[3,0,12,25], -"class_o_s_c___sim.html#afa814164790477d643fe04fca021483d":[3,0,12,28], +"class_o_s_c___sim.html#afa814164790477d643fe04fca021483d":[3,0,12,29], "class_o_s_c___sim.html#afbca0a6245adc11d0d7f38e01366556b":[3,0,12,18], "class_o_s_c___sim.html#afd5da99934f079631f1192e0caba1ad4":[3,0,12,22], "class_o_s_c___sim.html#afdd01fa07d004b0c37ce86ee171a60b8":[3,0,12,4], @@ -247,7 +249,5 @@ var NAVTREEINDEX0 = "class_polaron___recombination.html#acee53d16091a8f3922421b92389d5dc0":[3,0,20,4], "class_polaron___recombination.html#aedf0185861c8ffb9112d9ee421047da4":[3,0,20,2], "class_simulation.html":[3,0,21], -"class_simulation.html#a03d249f04c0921c938d68337dfc65f56":[3,0,21,9], -"class_simulation.html#a0f06c75c9dd6be20a3911781b48fd467":[3,0,21,21], -"class_simulation.html#a1a825b9da67da43104137662694655bd":[3,0,21,22] +"class_simulation.html#a03d249f04c0921c938d68337dfc65f56":[3,0,21,9] }; diff --git a/docs/navtreeindex1.js b/docs/navtreeindex1.js index 9412d1a..f6e11b5 100644 --- a/docs/navtreeindex1.js +++ b/docs/navtreeindex1.js @@ -1,31 +1,34 @@ var NAVTREEINDEX1 = { +"class_simulation.html#a0f06c75c9dd6be20a3911781b48fd467":[3,0,21,22], +"class_simulation.html#a1a825b9da67da43104137662694655bd":[3,0,21,23], "class_simulation.html#a1e0f43c4e11eda5486054c250f4de08f":[3,0,21,3], +"class_simulation.html#a33a57b5640b0d33c816dc6e57604162e":[3,0,21,2], "class_simulation.html#a391ac262089c8bda8e76ce930b1db88b":[3,0,21,14], -"class_simulation.html#a39da17feb9b487c05c9a834def44972f":[3,0,21,20], -"class_simulation.html#a3a4808231d4760f0ab30ea39b6a67e8c":[3,0,21,19], -"class_simulation.html#a401d40509ba367a28702873a0d65188d":[3,0,21,5], -"class_simulation.html#a43ca861e2514feb7f93bf18ea3b73385":[3,0,21,23], +"class_simulation.html#a39da17feb9b487c05c9a834def44972f":[3,0,21,21], +"class_simulation.html#a3a4808231d4760f0ab30ea39b6a67e8c":[3,0,21,20], +"class_simulation.html#a43ca861e2514feb7f93bf18ea3b73385":[3,0,21,24], "class_simulation.html#a48e9e82f9dac1acec5d063a9f6f6115e":[3,0,21,6], -"class_simulation.html#a4b84249d359723e00ec4ae77164c8b7d":[3,0,21,2], -"class_simulation.html#a4c1d9071749e0fd93e70380cafb28417":[3,0,21,27], +"class_simulation.html#a4c1d9071749e0fd93e70380cafb28417":[3,0,21,28], "class_simulation.html#a52cb5564151421cbefaca56357738de7":[3,0,21,12], -"class_simulation.html#a59666ceba048bec35557cb8b691d24d9":[3,0,21,17], +"class_simulation.html#a59666ceba048bec35557cb8b691d24d9":[3,0,21,18], "class_simulation.html#a5b224cc5b36bcc8eb29689aff223de41":[3,0,21,1], "class_simulation.html#a620684b9ac1fb07344c4c2237ed9f352":[3,0,21,8], +"class_simulation.html#a623c3fbc431ab74c2d2b2374a3b5a3a7":[3,0,21,15], "class_simulation.html#a662702acf2d446dbdef0e1c87bf21038":[3,0,21,7], -"class_simulation.html#a741321a0bbc89d51b969abda469e6f96":[3,0,21,29], +"class_simulation.html#a741321a0bbc89d51b969abda469e6f96":[3,0,21,30], "class_simulation.html#a7d88f18a1ba988d7e77b8be8de5b10d1":[3,0,21,11], -"class_simulation.html#a7f4615a7898fb83d09be5e7fad92bb47":[3,0,21,25], +"class_simulation.html#a7f4615a7898fb83d09be5e7fad92bb47":[3,0,21,26], "class_simulation.html#a80fad3f57dfaf195a36f7bc49bc88279":[3,0,21,0], -"class_simulation.html#a938de951b2766c6fb2b00cf9714caffa":[3,0,21,18], -"class_simulation.html#a954f41f4332dabda0fecea5d72151988":[3,0,21,26], -"class_simulation.html#aae315f0881f0b385c566f96beb01d3f6":[3,0,21,24], +"class_simulation.html#a938de951b2766c6fb2b00cf9714caffa":[3,0,21,19], +"class_simulation.html#a954f41f4332dabda0fecea5d72151988":[3,0,21,27], +"class_simulation.html#aae315f0881f0b385c566f96beb01d3f6":[3,0,21,25], "class_simulation.html#ac00bce7c792fb67a75395c46c03efe0a":[3,0,21,13], -"class_simulation.html#ac7c8a49a4cc506b850891480e0aae512":[3,0,21,16], +"class_simulation.html#ac7c8a49a4cc506b850891480e0aae512":[3,0,21,17], "class_simulation.html#af69bb46977a3a0084214a194c888e16c":[3,0,21,4], -"class_simulation.html#af88e5e0634b373ba28f1dd87670725a6":[3,0,21,15], -"class_simulation.html#afb2cf4feeb4d8292eeba8f9ef393c6a4":[3,0,21,28], +"class_simulation.html#af88e5e0634b373ba28f1dd87670725a6":[3,0,21,16], +"class_simulation.html#af8cf2e5c24531582599423df2d70dc5b":[3,0,21,5], +"class_simulation.html#afb2cf4feeb4d8292eeba8f9ef393c6a4":[3,0,21,29], "class_simulation.html#aff40f268758bd9a0f390a649fc45c05e":[3,0,21,10], "class_site.html":[3,0,22], "class_site.html#a30991b768ded0bb441c5bb54a789160a":[3,0,22,4], @@ -51,8 +54,8 @@ var NAVTREEINDEX1 = "functions_d.html":[3,3,0,2], "functions_e.html":[3,3,0,3], "functions_f.html":[3,3,0,4], -"functions_func.html":[3,3,1,0], "functions_func.html":[3,3,1], +"functions_func.html":[3,3,1,0], "functions_func_0x7e.html":[3,3,1,12], "functions_func_c.html":[3,3,1,1], "functions_func_e.html":[3,3,1,2], diff --git a/docs/pages.html b/docs/pages.html index 928f48f..da47e69 100644 --- a/docs/pages.html +++ b/docs/pages.html @@ -30,7 +30,7 @@ diff --git a/docs/search/all_0.js b/docs/search/all_0.js index 70ab378..516401a 100644 --- a/docs/search/all_0.js +++ b/docs/search/all_0.js @@ -1,7 +1,7 @@ var searchData= [ ['acceptor_5fconc',['Acceptor_conc',['../struct_parameters___o_p_v.html#a21c46734660f2b2a55dbac798f6ea74b',1,'Parameters_OPV']]], - ['addevent',['addEvent',['../class_simulation.html#a4b84249d359723e00ec4ae77164c8b7d',1,'Simulation']]], + ['addevent',['addEvent',['../class_simulation.html#a33a57b5640b0d33c816dc6e57604162e',1,'Simulation']]], ['addobject',['addObject',['../class_simulation.html#a1e0f43c4e11eda5486054c250f4de08f',1,'Simulation']]], ['array_5favg',['array_avg',['../namespace_utils.html#aa76a204af4dd4c3eb151691825de2eb2',1,'Utils']]], ['array_5fstdev',['array_stdev',['../namespace_utils.html#a25d09c704b5ae03f01cf76b6de10aa19',1,'Utils']]] diff --git a/docs/search/all_1.js b/docs/search/all_1.js index d98df17..71fe385 100644 --- a/docs/search/all_1.js +++ b/docs/search/all_1.js @@ -20,7 +20,7 @@ var searchData= ['checkfinished',['checkFinished',['../class_simulation.html#af69bb46977a3a0084214a194c888e16c',1,'Simulation::checkFinished()'],['../class_o_s_c___sim.html#ab3e4258c850b48ec02e4d3a88b583115',1,'OSC_Sim::checkFinished()']]], ['checkmovevalidity',['checkMoveValidity',['../class_lattice.html#ad0592298c4b92e9e84a768b95cd6d0f0',1,'Lattice']]], ['checkparameters',['checkParameters',['../class_o_s_c___sim.html#a92f8e2ae6bcd3e0755feb2419849c8e9',1,'OSC_Sim']]], - ['choosenextevent',['chooseNextEvent',['../class_simulation.html#a401d40509ba367a28702873a0d65188d',1,'Simulation']]], + ['choosenextevent',['chooseNextEvent',['../class_simulation.html#af8cf2e5c24531582599423df2d70dc5b',1,'Simulation']]], ['clearoccupancy',['clearOccupancy',['../class_lattice.html#a97a1b4f24cd40b81ed63aa2d7713b63b',1,'Lattice::clearOccupancy()'],['../class_site.html#a46ff077954e39046b493ee1ea57a9c93',1,'Site::clearOccupancy()']]], ['coords',['Coords',['../struct_coords.html',1,'']]], ['coulomb_5fcutoff',['Coulomb_cutoff',['../struct_parameters___o_p_v.html#ac5388c27ae33a5c648404cfce065a873',1,'Parameters_OPV']]], diff --git a/docs/search/all_3.js b/docs/search/all_3.js index 97fcb0b..dec9cfb 100644 --- a/docs/search/all_3.js +++ b/docs/search/all_3.js @@ -43,7 +43,7 @@ var searchData= ['event_2ecpp',['Event.cpp',['../_event_8cpp.html',1,'']]], ['event_2eh',['Event.h',['../_event_8h.html',1,'']]], ['event_5ftype',['event_type',['../class_exciton___creation.html#a5330b61389f7f7077591e6103305ef8b',1,'Exciton_Creation::event_type()'],['../class_exciton___hop.html#a26793057d5626f5468c963fcfdcf12e7',1,'Exciton_Hop::event_type()'],['../class_exciton___recombination.html#ab8f4e745d18d7ca4116391ad6bcdad06',1,'Exciton_Recombination::event_type()'],['../class_exciton___dissociation.html#a009d4b2010325d0d6d99ac622fb807c2',1,'Exciton_Dissociation::event_type()'],['../class_exciton___intersystem___crossing.html#ae5c1e0d54e2c0c35a804d8bc1784b991',1,'Exciton_Intersystem_Crossing::event_type()'],['../class_exciton___exciton___annihilation.html#a49c819bed5c04d1cf9593d38101cbf4e',1,'Exciton_Exciton_Annihilation::event_type()'],['../class_exciton___polaron___annihilation.html#a7b5ecb43b118ae000d13c54f29beef3c',1,'Exciton_Polaron_Annihilation::event_type()'],['../class_polaron___hop.html#a81cb99b47abaa48ff6ef5eb489d8461b',1,'Polaron_Hop::event_type()'],['../class_polaron___recombination.html#a8ca56257989c90fa565d7b208f686a3a',1,'Polaron_Recombination::event_type()'],['../class_polaron___extraction.html#a9f6cdc1f0cf053c85c2ec9ed8e4a636b',1,'Polaron_Extraction::event_type()']]], - ['exciton',['Exciton',['../class_exciton.html',1,'Exciton'],['../class_exciton.html#a105a259c1235f22972cd25d811a750e7',1,'Exciton::Exciton()']]], + ['exciton',['Exciton',['../class_exciton.html',1,'Exciton'],['../class_exciton.html#a480ef78405291593519ac372b7712029',1,'Exciton::Exciton()']]], ['exciton_2ecpp',['Exciton.cpp',['../_exciton_8cpp.html',1,'']]], ['exciton_2eh',['Exciton.h',['../_exciton_8h.html',1,'']]], ['exciton_5fcreation',['Exciton_Creation',['../class_exciton___creation.html',1,'Exciton_Creation'],['../class_exciton___creation.html#a21e9217cb8c671066c6a9b8d417a13ec',1,'Exciton_Creation::Exciton_Creation()'],['../class_exciton___creation.html#a01d52761482e31bd4f98dcab2b7f09d5',1,'Exciton_Creation::Exciton_Creation(Simulation *simulation_ptr)']]], diff --git a/docs/search/all_5.js b/docs/search/all_5.js index 40f00d2..e614cbe 100644 --- a/docs/search/all_5.js +++ b/docs/search/all_5.js @@ -31,6 +31,7 @@ var searchData= ['getexecutiontime',['getExecutionTime',['../class_event.html#a65550d982cdf85d993658cd7070c960c',1,'Event']]], ['getheight',['getHeight',['../class_lattice.html#aaa0cba3ab33ac620d9b9f9508c56d1ac',1,'Lattice']]], ['getid',['getId',['../class_simulation.html#aff40f268758bd9a0f390a649fc45c05e',1,'Simulation']]], + ['getinternalfield',['getInternalField',['../class_o_s_c___sim.html#aa8ee0a55f34be1da2f78be2931584723',1,'OSC_Sim']]], ['getlength',['getLength',['../class_lattice.html#a4b43b67a36fcd3dfe62c9eeaffa561d2',1,'Lattice']]], ['getn_5fbimolecular_5frecombinations',['getN_bimolecular_recombinations',['../class_o_s_c___sim.html#afa814164790477d643fe04fca021483d',1,'OSC_Sim']]], ['getn_5felectrons_5fcollected',['getN_electrons_collected',['../class_o_s_c___sim.html#abb8a9aefba0cb189fbaeba0f9bdff180',1,'OSC_Sim']]], @@ -71,5 +72,6 @@ var searchData= ['gettransittimedata',['getTransitTimeData',['../class_o_s_c___sim.html#ac5a6b2ae37d49b9114fe032f533e41c6',1,'OSC_Sim']]], ['gettype',['getType',['../class_site___o_s_c.html#a704a0a9fe1bab69db8343f5225d5888e',1,'Site_OSC']]], ['getunitsize',['getUnitSize',['../class_lattice.html#ac6963a6b2b4b8d96d3417f6e9c2a509d',1,'Lattice']]], + ['getvolume',['getVolume',['../class_lattice.html#a46f9cec33419459b64ff0efdf47a38b9',1,'Lattice::getVolume()'],['../class_simulation.html#a623c3fbc431ab74c2d2b2374a3b5a3a7',1,'Simulation::getVolume()']]], ['getwidth',['getWidth',['../class_lattice.html#aeb60d2b8bfb02d9da8bef463f0d41428',1,'Lattice']]] ]; diff --git a/docs/search/functions_0.js b/docs/search/functions_0.js index 9ed689f..21501ae 100644 --- a/docs/search/functions_0.js +++ b/docs/search/functions_0.js @@ -1,6 +1,6 @@ var searchData= [ - ['addevent',['addEvent',['../class_simulation.html#a4b84249d359723e00ec4ae77164c8b7d',1,'Simulation']]], + ['addevent',['addEvent',['../class_simulation.html#a33a57b5640b0d33c816dc6e57604162e',1,'Simulation']]], ['addobject',['addObject',['../class_simulation.html#a1e0f43c4e11eda5486054c250f4de08f',1,'Simulation']]], ['array_5favg',['array_avg',['../namespace_utils.html#aa76a204af4dd4c3eb151691825de2eb2',1,'Utils']]], ['array_5fstdev',['array_stdev',['../namespace_utils.html#a25d09c704b5ae03f01cf76b6de10aa19',1,'Utils']]] diff --git a/docs/search/functions_1.js b/docs/search/functions_1.js index a4125cb..4f178e1 100644 --- a/docs/search/functions_1.js +++ b/docs/search/functions_1.js @@ -20,7 +20,7 @@ var searchData= ['checkfinished',['checkFinished',['../class_simulation.html#af69bb46977a3a0084214a194c888e16c',1,'Simulation::checkFinished()'],['../class_o_s_c___sim.html#ab3e4258c850b48ec02e4d3a88b583115',1,'OSC_Sim::checkFinished()']]], ['checkmovevalidity',['checkMoveValidity',['../class_lattice.html#ad0592298c4b92e9e84a768b95cd6d0f0',1,'Lattice']]], ['checkparameters',['checkParameters',['../class_o_s_c___sim.html#a92f8e2ae6bcd3e0755feb2419849c8e9',1,'OSC_Sim']]], - ['choosenextevent',['chooseNextEvent',['../class_simulation.html#a401d40509ba367a28702873a0d65188d',1,'Simulation']]], + ['choosenextevent',['chooseNextEvent',['../class_simulation.html#af8cf2e5c24531582599423df2d70dc5b',1,'Simulation']]], ['clearoccupancy',['clearOccupancy',['../class_lattice.html#a97a1b4f24cd40b81ed63aa2d7713b63b',1,'Lattice::clearOccupancy()'],['../class_site.html#a46ff077954e39046b493ee1ea57a9c93',1,'Site::clearOccupancy()']]], ['createexponentialdosvector',['createExponentialDOSVector',['../namespace_utils.html#af296d2aa8f889f67fe515fc641c5f5fe',1,'Utils']]], ['creategaussiandosvector',['createGaussianDOSVector',['../namespace_utils.html#a2ce45ade7d6d4f2995b595da3ebbaaec',1,'Utils']]] diff --git a/docs/search/functions_2.js b/docs/search/functions_2.js index 2f0ceee..81e66c4 100644 --- a/docs/search/functions_2.js +++ b/docs/search/functions_2.js @@ -1,7 +1,7 @@ var searchData= [ ['event',['Event',['../class_event.html#a5a40dd4708297f7031e29b39e039ae10',1,'Event::Event()'],['../class_event.html#adbadc626c37dc77443f6f8c9abec589f',1,'Event::Event(Simulation *sim_ptr)']]], - ['exciton',['Exciton',['../class_exciton.html#a105a259c1235f22972cd25d811a750e7',1,'Exciton']]], + ['exciton',['Exciton',['../class_exciton.html#a480ef78405291593519ac372b7712029',1,'Exciton']]], ['exciton_5fcreation',['Exciton_Creation',['../class_exciton___creation.html#a21e9217cb8c671066c6a9b8d417a13ec',1,'Exciton_Creation::Exciton_Creation()'],['../class_exciton___creation.html#a01d52761482e31bd4f98dcab2b7f09d5',1,'Exciton_Creation::Exciton_Creation(Simulation *simulation_ptr)']]], ['exciton_5fdissociation',['Exciton_Dissociation',['../class_exciton___dissociation.html#ad127a7325c308e35d52b53668ae52353',1,'Exciton_Dissociation::Exciton_Dissociation()'],['../class_exciton___dissociation.html#a91ed94e4fa9b465a35aad05a303d0fd0',1,'Exciton_Dissociation::Exciton_Dissociation(Simulation *simulation_ptr)']]], ['exciton_5fexciton_5fannihilation',['Exciton_Exciton_Annihilation',['../class_exciton___exciton___annihilation.html#a62c62f119f2ddd3a3f024f0b33312a7a',1,'Exciton_Exciton_Annihilation::Exciton_Exciton_Annihilation()'],['../class_exciton___exciton___annihilation.html#a15838db1eb32ea23c0442f36b3f6236e',1,'Exciton_Exciton_Annihilation::Exciton_Exciton_Annihilation(Simulation *simulation_ptr)']]], diff --git a/docs/search/functions_4.js b/docs/search/functions_4.js index b1a9ceb..fb4d631 100644 --- a/docs/search/functions_4.js +++ b/docs/search/functions_4.js @@ -30,6 +30,7 @@ var searchData= ['getexecutiontime',['getExecutionTime',['../class_event.html#a65550d982cdf85d993658cd7070c960c',1,'Event']]], ['getheight',['getHeight',['../class_lattice.html#aaa0cba3ab33ac620d9b9f9508c56d1ac',1,'Lattice']]], ['getid',['getId',['../class_simulation.html#aff40f268758bd9a0f390a649fc45c05e',1,'Simulation']]], + ['getinternalfield',['getInternalField',['../class_o_s_c___sim.html#aa8ee0a55f34be1da2f78be2931584723',1,'OSC_Sim']]], ['getlength',['getLength',['../class_lattice.html#a4b43b67a36fcd3dfe62c9eeaffa561d2',1,'Lattice']]], ['getn_5fbimolecular_5frecombinations',['getN_bimolecular_recombinations',['../class_o_s_c___sim.html#afa814164790477d643fe04fca021483d',1,'OSC_Sim']]], ['getn_5felectrons_5fcollected',['getN_electrons_collected',['../class_o_s_c___sim.html#abb8a9aefba0cb189fbaeba0f9bdff180',1,'OSC_Sim']]], @@ -70,5 +71,6 @@ var searchData= ['gettransittimedata',['getTransitTimeData',['../class_o_s_c___sim.html#ac5a6b2ae37d49b9114fe032f533e41c6',1,'OSC_Sim']]], ['gettype',['getType',['../class_site___o_s_c.html#a704a0a9fe1bab69db8343f5225d5888e',1,'Site_OSC']]], ['getunitsize',['getUnitSize',['../class_lattice.html#ac6963a6b2b4b8d96d3417f6e9c2a509d',1,'Lattice']]], + ['getvolume',['getVolume',['../class_lattice.html#a46f9cec33419459b64ff0efdf47a38b9',1,'Lattice::getVolume()'],['../class_simulation.html#a623c3fbc431ab74c2d2b2374a3b5a3a7',1,'Simulation::getVolume()']]], ['getwidth',['getWidth',['../class_lattice.html#aeb60d2b8bfb02d9da8bef463f0d41428',1,'Lattice']]] ]; diff --git a/docs/struct_coords-members.html b/docs/struct_coords-members.html index 931a8ff..7533620 100644 --- a/docs/struct_coords-members.html +++ b/docs/struct_coords-members.html @@ -30,7 +30,7 @@ diff --git a/docs/struct_coords.html b/docs/struct_coords.html index fe4a849..cc966f8 100644 --- a/docs/struct_coords.html +++ b/docs/struct_coords.html @@ -30,7 +30,7 @@ diff --git a/docs/struct_parameters___lattice-members.html b/docs/struct_parameters___lattice-members.html index 719ac75..5fe1025 100644 --- a/docs/struct_parameters___lattice-members.html +++ b/docs/struct_parameters___lattice-members.html @@ -30,7 +30,7 @@ diff --git a/docs/struct_parameters___lattice.html b/docs/struct_parameters___lattice.html index 5123b77..9918ad9 100644 --- a/docs/struct_parameters___lattice.html +++ b/docs/struct_parameters___lattice.html @@ -30,7 +30,7 @@ diff --git a/docs/struct_parameters___o_p_v-members.html b/docs/struct_parameters___o_p_v-members.html index 59f862d..653e20d 100644 --- a/docs/struct_parameters___o_p_v-members.html +++ b/docs/struct_parameters___o_p_v-members.html @@ -30,7 +30,7 @@ diff --git a/docs/struct_parameters___o_p_v.html b/docs/struct_parameters___o_p_v.html index 9e30cf3..f4fdfdd 100644 --- a/docs/struct_parameters___o_p_v.html +++ b/docs/struct_parameters___o_p_v.html @@ -30,7 +30,7 @@ diff --git a/docs/struct_parameters___simulation-members.html b/docs/struct_parameters___simulation-members.html index 44699af..e582580 100644 --- a/docs/struct_parameters___simulation-members.html +++ b/docs/struct_parameters___simulation-members.html @@ -30,7 +30,7 @@ diff --git a/docs/struct_parameters___simulation.html b/docs/struct_parameters___simulation.html index 3fdcc90..4578670 100644 --- a/docs/struct_parameters___simulation.html +++ b/docs/struct_parameters___simulation.html @@ -30,7 +30,7 @@ diff --git a/docs/struct_parameters__main-members.html b/docs/struct_parameters__main-members.html index b7cda38..96c0e3a 100644 --- a/docs/struct_parameters__main-members.html +++ b/docs/struct_parameters__main-members.html @@ -30,7 +30,7 @@ diff --git a/docs/struct_parameters__main.html b/docs/struct_parameters__main.html index 1c498c5..040bfef 100644 --- a/docs/struct_parameters__main.html +++ b/docs/struct_parameters__main.html @@ -30,7 +30,7 @@ diff --git a/main.cpp b/main.cpp index 67b2ffc..3885b44 100644 --- a/main.cpp +++ b/main.cpp @@ -29,7 +29,7 @@ struct Parameters_main{ bool importParameters(ifstream& inputfile,Parameters_main& params_main,Parameters_OPV& params); int main(int argc, char *argv[]) { - string version = "v1.0-beta.2"; + string version = "v1.0-beta.3"; // Parameters bool End_sim = false; // File declaration @@ -76,10 +76,11 @@ int main(int argc, char *argv[]) { MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &nproc); MPI_Comm_rank(MPI_COMM_WORLD, &procid); + cout << procid << ": MPI initialization complete!" << endl; + // Initialize error monitoring vectors proc_finished.assign(nproc, false); error_status_vec.assign(nproc, false); error_messages.assign(nproc, ""); - cout << procid << ": MPI initialization complete!" << endl; // Morphology set import handling if (params_main.Enable_import_morphology_set && params_main.N_test_morphologies > nproc) { cout << "Error! The number of requested processors cannot be less than the number of morphologies tested." << endl; @@ -389,7 +390,7 @@ int main(int argc, char *argv[]) { if (procid == 0) { // ToF main results output vector mobilities = sim.calculateMobilities(transit_times); - double electric_field = fabs(params_opv.Internal_potential) / (1e-7*params_opv.Height*params_opv.Unit_size); + double electric_field = fabs(sim.getInternalField()); ofstream tof_resultsfile; ss << "ToF_results.txt"; tof_resultsfile.open(ss.str().c_str()); @@ -403,10 +404,13 @@ int main(int argc, char *argv[]) { transientfile.open(ss.str().c_str()); ss.str(""); transientfile << "Time (s),Current (mA cm^-2),Average Mobility (cm^2 V^-1 s^-1),Average Energy (eV),Carrier Density (cm^-3)" << endl; - double total_volume = nproc*params_opv.Length*params_opv.Width*params_opv.Height*intpow(1e-7*params_opv.Unit_size, 3); + double volume_total = N_transient_cycles_sum*sim.getVolume(); for (int i = 0; i < (int)velocities.size(); i++) { - if (counts[i] > 0) { - transientfile << times[i] << "," << 1000 * Elementary_charge*1e-7*velocities[i] / (N_transient_cycles_sum*total_volume) << "," << (velocities[i] / counts[i]) / electric_field << "," << energies[i] / counts[i] << "," << counts[i] / (N_transient_cycles_sum*total_volume) << endl; + if (counts[i] > 0 && counts[i] > 5 * N_transient_cycles_sum) { + transientfile << times[i] << "," << 1000.0 * Elementary_charge*velocities[i] / volume_total << "," << (velocities[i] / (double)counts[i]) / electric_field << "," << energies[i] / (double)counts[i] << "," << (double)counts[i] / volume_total << endl; + } + else if (counts[i] > 0) { + transientfile << times[i] << "," << 1000.0 * Elementary_charge*velocities[i] / volume_total << "," << (velocities[i] / (double)counts[i]) / electric_field << "," << "NaN" << "," << (double)counts[i] / volume_total << endl; } else { transientfile << times[i] << ",0,NaN,NaN,0" << endl; @@ -448,47 +452,48 @@ int main(int argc, char *argv[]) { vector exciton_energies = MPI_calculateVectorSum(sim.getDynamicsExcitonEnergies()); vector electron_energies = MPI_calculateVectorSum(sim.getDynamicsElectronEnergies()); vector hole_energies = MPI_calculateVectorSum(sim.getDynamicsHoleEnergies()); - //vector exciton_msdv = MPI_calculateVectorSum(sim.getDynamicsExcitonMSDV()); - //vector electron_msdv = MPI_calculateVectorSum(sim.getDynamicsElectronMSDV()); - //vector hole_msdv = MPI_calculateVectorSum(sim.getDynamicsHoleMSDV()); + vector exciton_msdv = MPI_calculateVectorSum(sim.getDynamicsExcitonMSDV()); + vector electron_msdv = MPI_calculateVectorSum(sim.getDynamicsElectronMSDV()); + vector hole_msdv = MPI_calculateVectorSum(sim.getDynamicsHoleMSDV()); if (procid == 0) { ofstream transientfile; ss << "dynamics_average_transients.txt"; transientfile.open(ss.str().c_str()); ss.str(""); transientfile << "Time (s),Singlet Exciton Density (cm^-3),Triplet Exciton Density (cm^-3),Electron Density (cm^-3),Hole Density (cm^-3)"; - //transientfile << ",Average Exciton Energy (eV),Exciton MSDV (cm^2 s^-1)"; - transientfile << ",Average Exciton Energy (eV)"; - //transientfile << ",Average Electron Energy (eV),Electron MSDV (cm^2 s^-1)"; - transientfile << ",Average Electron Energy (eV)"; - //transientfile << ",Average Hole Energy (eV),Hole MSDV (cm^2 s^-1)" << endl; - transientfile << ",Average Hole Energy (eV)" << endl; - double volume_total = nproc*params_opv.Length*params_opv.Width*params_opv.Height*intpow(1e-7*params_opv.Unit_size, 3); + transientfile << ",Average Exciton Energy (eV),Exciton MSDV (cm^2 s^-1)"; + transientfile << ",Average Electron Energy (eV),Electron MSDV (cm^2 s^-1)"; + transientfile << ",Average Hole Energy (eV),Hole MSDV (cm^2 s^-1)" << endl; + double volume_total = N_transient_cycles_sum*sim.getVolume(); for (int i = 0; i < (int)times.size(); i++) { - transientfile << times[i] << "," << singlets_total[i] / (N_transient_cycles*volume_total) << "," << triplets_total[i] / (N_transient_cycles*volume_total) << "," << electrons_total[i] / (N_transient_cycles*volume_total) << "," << holes_total[i] / (N_transient_cycles*volume_total); - if ((singlets_total[i] + triplets_total[i]) > 0) { - //transientfile << "," << exciton_energies[i] / (singlets_total[i] + triplets_total[i]) << "," << exciton_msdv[i] / (singlets_total[i] + triplets_total[i]); - transientfile << "," << exciton_energies[i] / (singlets_total[i] + triplets_total[i]); + transientfile << times[i] << "," << singlets_total[i] / volume_total << "," << triplets_total[i] / volume_total << "," << electrons_total[i] / volume_total << "," << holes_total[i] / volume_total; + if ((singlets_total[i] + triplets_total[i]) > 0 && (singlets_total[i] + triplets_total[i]) > 5 * N_transient_cycles_sum) { + transientfile << "," << exciton_energies[i] / (singlets_total[i] + triplets_total[i]) << "," << exciton_msdv[i] / (singlets_total[i] + triplets_total[i]); + } + else if ((singlets_total[i] + triplets_total[i]) > 0 ) { + transientfile << "," << "NaN" << "," << exciton_msdv[i] / (singlets_total[i] + triplets_total[i]); } else { - //transientfile << ",NaN,NaN"; - transientfile << ",NaN"; + transientfile << ",NaN,NaN"; + } + if (electrons_total[i] > 0 && electrons_total[i] > 5 * N_transient_cycles_sum) { + transientfile << "," << electron_energies[i] / electrons_total[i] << "," << electron_msdv[i] / electrons_total[i]; } - if (electrons_total[i] > 0) { - //transientfile << "," << electron_energies[i] / electrons_total[i] << "," << electron_msdv[i] / electrons_total[i]; - transientfile << "," << electron_energies[i] / electrons_total[i]; + else if (electrons_total[i] > 0) { + transientfile << "," << "NaN" << "," << electron_msdv[i] / electrons_total[i]; } else { - //transientfile << ",NaN,NaN"; - transientfile << ",NaN"; + transientfile << ",NaN,NaN"; + } + if (holes_total[i] > 0 && holes_total[i] > 5 * N_transient_cycles_sum) { + transientfile << "," << hole_energies[i] / holes_total[i] << "," << hole_msdv[i] / holes_total[i] << endl; } - if (holes_total[i] > 0) { - //transientfile << "," << hole_energies[i] / holes_total[i] << "," << hole_msdv[i] / holes_total[i] << endl; - transientfile << "," << hole_energies[i] / holes_total[i] << endl; + else if (holes_total[i] > 0) { + transientfile << "," << "NaN" << "," << hole_msdv[i] / holes_total[i] << endl; } else { - //transientfile << ",NaN,NaN" << endl; - transientfile << ",NaN" << endl; + transientfile << ",NaN,NaN" << endl; + //transientfile << ",NaN" << endl; } } transientfile.close(); diff --git a/parameters_default.txt b/parameters_default.txt index 0729fb9..120aa43 100644 --- a/parameters_default.txt +++ b/parameters_default.txt @@ -1,9 +1,9 @@ -## OPV Parameters for Excimontec v1.0-beta.2 +## OPV Parameters for Excimontec v1.0-beta.3 -------------------------------------------------------------- ## Kinetic Monte Carlo Algorithm Parameters false //Enable_FRM true //Enable_selective_recalc -3 //Recalc_cutoff (nm) (must not be less than any of the event cutoffs) +4 //Recalc_cutoff (nm) (must not be less than any of the event cutoffs) false //Enable_full_recalc -------------------------------------------------------------- ## Simulation Parameters @@ -59,8 +59,8 @@ false //Enable_dynamics_extraction 1e-6 //Triplet_lifetime_acceptor (s) 1e12 //R_singlet_hopping_donor (s^-1) 1e12 //R_singlet_hopping_acceptor (s^-1) -1.0 //Singlet_localization_donor (nm^-1) -1.0 //Singlet_localization_acceptor (nm^-1) +2.0 //Singlet_localization_donor (nm^-1) +2.0 //Singlet_localization_acceptor (nm^-1) 1e12 //R_triplet_hopping_donor (s^-1) 1e12 //R_triplet_hopping_acceptor (s^-1) 2.0 //Triplet_localization_donor (nm^-1) @@ -70,7 +70,7 @@ false //Enable_FRET_triplet_annihilation 1e12 //R_exciton_exciton_annihilation_acceptor (s^-1) 1e12 //R_exciton_polaron_annihilation_donor (s^-1) 1e12 //R_exciton_polaron_annihilation_acceptor (s^-1) -3 //FRET_cutoff (nm) +4 //FRET_cutoff (nm) 0.5 //E_exciton_binding_donor (eV) 0.5 //E_exciton_binding_acceptor (eV) 1e14 //R_exciton_dissociation_donor (s^-1) @@ -104,8 +104,8 @@ false //Enable_gaussian_polaron_delocalization 6.0 //Homo_acceptor (eV) 4.0 //Lumo_acceptor (eV) true //Enable_gaussian_dos -0.05 //Energy_stdev_donor (eV) -0.05 //Energy_stdev_acceptor (eV) +0.075 //Energy_stdev_donor (eV) +0.075 //Energy_stdev_acceptor (eV) false //Enable_exponential_dos 0.03 //Energy_urbach_donor (eV) 0.03 //Energy_urbach_acceptor (eV) diff --git a/parameters_test1.txt b/parameters_test1.txt new file mode 100644 index 0000000..10c56e7 --- /dev/null +++ b/parameters_test1.txt @@ -0,0 +1,122 @@ +## OPV Parameters for Excimontec v1.0-beta.3 +-------------------------------------------------------------- +## Kinetic Monte Carlo Algorithm Parameters +false //Enable_FRM +true //Enable_selective_recalc +4 //Recalc_cutoff (nm) (must not be less than any of the event cutoffs) +false //Enable_full_recalc +-------------------------------------------------------------- +## Simulation Parameters +true //Enable_periodic_x +true //Enable_periodic_y +false //Enable_periodic_z +100 //Length +100 //Width +500 //Height +1.0 //Unit_size (nm) +300 //Temperature (K) +-5.0 //Internal_potential (V) +-------------------------------------------------------------- +## Device Architecture Parameters +true //Enable_neat (uses donor properties) +false //Enable_bilayer +25 //Thickness_donor +25 //Thickness_acceptor +false //Enable_random_blend +0.5 //Acceptor_conc +false //Enable_import_morphology_single +morphology_0_compressed.txt //Morphology_filename +false //Enable_import_morphology_set +morphology_#_compressed.txt //Morphology_set_format +4 //N_test_morphologies +4 //N_morphology_set_size +-------------------------------------------------------------- +## Test Parameters +200 //N_tests +false //Enable_exciton_diffusion_test +true //Enable_ToF_test +hole //ToF_polaron_type (electron or hole) +20 //ToF_initial_polarons +1e-10 //ToF_transient_start (s) +1e-4 //ToF_transient_end (s) +20 //ToF_pnts_per_decade +false //Enable_IQE_test +1e-4 //IQE_time_cutoff (s) (simulation time) +false //Enable_extraction_map_output +false //Enable_dynamics_test +false //Enable_dynamics_extraction +1e16 //Dynamics_initial_exciton_conc (cm^-3) +1e-13 //Dynamics_transient_start (s) +1e-5 //Dynamics_transient_end (s) +10 //Dynamics_pnts_per_decade +-------------------------------------------------------------- +## Exciton Parameters +1e22 //Exciton_generation_rate_donor (cm^-3 s^-1) +1e22 //Exciton_generation_rate_acceptor (cm^-3 s^-1) +500e-12 //Singlet_lifetime_donor (s) +500e-12 //Singlet_lifetime_acceptor (s) +1e-6 //Triplet_lifetime_donor (s) +1e-6 //Triplet_lifetime_acceptor (s) +1e12 //R_singlet_hopping_donor (s^-1) +1e12 //R_singlet_hopping_acceptor (s^-1) +2.0 //Singlet_localization_donor (nm^-1) +2.0 //Singlet_localization_acceptor (nm^-1) +1e12 //R_triplet_hopping_donor (s^-1) +1e12 //R_triplet_hopping_acceptor (s^-1) +2.0 //Triplet_localization_donor (nm^-1) +2.0 //Triplet_localization_acceptor (nm^-1) +false //Enable_FRET_triplet_annihilation +1e12 //R_exciton_exciton_annihilation_donor (s^-1) +1e12 //R_exciton_exciton_annihilation_acceptor (s^-1) +1e12 //R_exciton_polaron_annihilation_donor (s^-1) +1e12 //R_exciton_polaron_annihilation_acceptor (s^-1) +4 //FRET_cutoff (nm) +0.5 //E_exciton_binding_donor (eV) +0.5 //E_exciton_binding_acceptor (eV) +1e14 //R_exciton_dissociation_donor (s^-1) +1e14 //R_exciton_dissociation_acceptor (s^-1) +3 //Exciton_dissociation_cutoff (nm) +1e7 //R_exciton_isc_donor (s^-1) +1e7 //R_exciton_isc_acceptor (s^-1) +1e7 //R_exciton_risc_donor (s^-1) +1e7 //R_exciton_risc_acceptor (s^-1) +0.7 //E_exciton_ST_donor (eV) +0.7 //E_exciton_ST_acceptor (eV) +-------------------------------------------------------------- +## Polaron Parameters +true //Enable_phase_restriction +1e12 //R_polaron_hopping_donor (s^-1) +1e12 //R_polaron_hopping_acceptor (s^-1) +2.0 //Polaron_localization_donor (nm^-1) +2.0 //Polaron_localization_acceptor (nm^-1) +true //Enable_miller_abrahams +false //Enable_marcus +0.2 //Reorganization_donor (eV) +0.2 //Reorganization_acceptor (eV) +1e12 //R_polaron_recombination (s^-1) +3 //Polaron_hopping_cutoff (nm) +false //Enable_gaussian_polaron_delocalization +1.0 //Polaron_delocalization_length (nm) +-------------------------------------------------------------- +## Lattice Site Parameters +5.5 //Homo_donor (eV) +3.5 //Lumo_donor (eV) +6.0 //Homo_acceptor (eV) +4.0 //Lumo_acceptor (eV) +true //Enable_gaussian_dos +0.075 //Energy_stdev_donor (eV) +0.075 //Energy_stdev_acceptor (eV) +false //Enable_exponential_dos +0.03 //Energy_urbach_donor (eV) +0.03 //Energy_urbach_acceptor (eV) +false //Enable_correlated_disorder +2.0 //Disorder_correlation_length (nm) (1.0-3.0, used by all kernels) +false //Enable_gaussian_kernel +false //Enable_power_kernel +-1 //Power_kernel_exponent (integer: -1 or -2) +-------------------------------------------------------------- +## Coulomb Interaction Parameters +3.5 //Dielectric_donor +3.5 //Dielectric_acceptor +50 //Coulomb_cutoff (nm) +-------------------------------------------------------------- diff --git a/parameters_test2.txt b/parameters_test2.txt new file mode 100644 index 0000000..0a14318 --- /dev/null +++ b/parameters_test2.txt @@ -0,0 +1,122 @@ +## OPV Parameters for Excimontec v1.0-beta.3 +-------------------------------------------------------------- +## Kinetic Monte Carlo Algorithm Parameters +false //Enable_FRM +true //Enable_selective_recalc +4 //Recalc_cutoff (nm) (must not be less than any of the event cutoffs) +false //Enable_full_recalc +-------------------------------------------------------------- +## Simulation Parameters +true //Enable_periodic_x +true //Enable_periodic_y +false //Enable_periodic_z +100 //Length +100 //Width +200 //Height +1.0 //Unit_size (nm) +300 //Temperature (K) +-1.0 //Internal_potential (V) +-------------------------------------------------------------- +## Device Architecture Parameters +false //Enable_neat (uses donor properties) +false //Enable_bilayer +25 //Thickness_donor +25 //Thickness_acceptor +true //Enable_random_blend +0.5 //Acceptor_conc +false //Enable_import_morphology_single +morphology_0_compressed.txt //Morphology_filename +false //Enable_import_morphology_set +morphology_#_compressed.txt //Morphology_set_format +4 //N_test_morphologies +4 //N_morphology_set_size +-------------------------------------------------------------- +## Test Parameters +200 //N_tests +false //Enable_exciton_diffusion_test +false //Enable_ToF_test +hole //ToF_polaron_type (electron or hole) +20 //ToF_initial_polarons +1e-10 //ToF_transient_start (s) +1e-4 //ToF_transient_end (s) +20 //ToF_pnts_per_decade +true //Enable_IQE_test +1e-4 //IQE_time_cutoff (s) (simulation time) +false //Enable_extraction_map_output +false //Enable_dynamics_test +false //Enable_dynamics_extraction +1e16 //Dynamics_initial_exciton_conc (cm^-3) +1e-13 //Dynamics_transient_start (s) +1e-5 //Dynamics_transient_end (s) +10 //Dynamics_pnts_per_decade +-------------------------------------------------------------- +## Exciton Parameters +1e22 //Exciton_generation_rate_donor (cm^-3 s^-1) +1e22 //Exciton_generation_rate_acceptor (cm^-3 s^-1) +500e-12 //Singlet_lifetime_donor (s) +500e-12 //Singlet_lifetime_acceptor (s) +1e-6 //Triplet_lifetime_donor (s) +1e-6 //Triplet_lifetime_acceptor (s) +1e12 //R_singlet_hopping_donor (s^-1) +1e12 //R_singlet_hopping_acceptor (s^-1) +2.0 //Singlet_localization_donor (nm^-1) +2.0 //Singlet_localization_acceptor (nm^-1) +1e12 //R_triplet_hopping_donor (s^-1) +1e12 //R_triplet_hopping_acceptor (s^-1) +2.0 //Triplet_localization_donor (nm^-1) +2.0 //Triplet_localization_acceptor (nm^-1) +false //Enable_FRET_triplet_annihilation +1e12 //R_exciton_exciton_annihilation_donor (s^-1) +1e12 //R_exciton_exciton_annihilation_acceptor (s^-1) +1e12 //R_exciton_polaron_annihilation_donor (s^-1) +1e12 //R_exciton_polaron_annihilation_acceptor (s^-1) +4 //FRET_cutoff (nm) +0.5 //E_exciton_binding_donor (eV) +0.5 //E_exciton_binding_acceptor (eV) +1e14 //R_exciton_dissociation_donor (s^-1) +1e14 //R_exciton_dissociation_acceptor (s^-1) +3 //Exciton_dissociation_cutoff (nm) +1e7 //R_exciton_isc_donor (s^-1) +1e7 //R_exciton_isc_acceptor (s^-1) +1e7 //R_exciton_risc_donor (s^-1) +1e7 //R_exciton_risc_acceptor (s^-1) +0.7 //E_exciton_ST_donor (eV) +0.7 //E_exciton_ST_acceptor (eV) +-------------------------------------------------------------- +## Polaron Parameters +true //Enable_phase_restriction +1e12 //R_polaron_hopping_donor (s^-1) +1e12 //R_polaron_hopping_acceptor (s^-1) +2.0 //Polaron_localization_donor (nm^-1) +2.0 //Polaron_localization_acceptor (nm^-1) +true //Enable_miller_abrahams +false //Enable_marcus +0.2 //Reorganization_donor (eV) +0.2 //Reorganization_acceptor (eV) +1e12 //R_polaron_recombination (s^-1) +3 //Polaron_hopping_cutoff (nm) +true //Enable_gaussian_polaron_delocalization +4.0 //Polaron_delocalization_length (nm) +-------------------------------------------------------------- +## Lattice Site Parameters +5.5 //Homo_donor (eV) +3.5 //Lumo_donor (eV) +6.0 //Homo_acceptor (eV) +4.0 //Lumo_acceptor (eV) +true //Enable_gaussian_dos +0.075 //Energy_stdev_donor (eV) +0.075 //Energy_stdev_acceptor (eV) +false //Enable_exponential_dos +0.03 //Energy_urbach_donor (eV) +0.03 //Energy_urbach_acceptor (eV) +false //Enable_correlated_disorder +2.0 //Disorder_correlation_length (nm) (1.0-3.0, used by all kernels) +false //Enable_gaussian_kernel +false //Enable_power_kernel +-1 //Power_kernel_exponent (integer: -1 or -2) +-------------------------------------------------------------- +## Coulomb Interaction Parameters +3.5 //Dielectric_donor +3.5 //Dielectric_acceptor +50 //Coulomb_cutoff (nm) +-------------------------------------------------------------- diff --git a/parameters_test3.txt b/parameters_test3.txt new file mode 100644 index 0000000..07fbb67 --- /dev/null +++ b/parameters_test3.txt @@ -0,0 +1,122 @@ +## OPV Parameters for Excimontec v1.0-beta.3 +-------------------------------------------------------------- +## Kinetic Monte Carlo Algorithm Parameters +false //Enable_FRM +true //Enable_selective_recalc +4 //Recalc_cutoff (nm) (must not be less than any of the event cutoffs) +false //Enable_full_recalc +-------------------------------------------------------------- +## Simulation Parameters +true //Enable_periodic_x +true //Enable_periodic_y +true //Enable_periodic_z +100 //Length +100 //Width +200 //Height +1.0 //Unit_size (nm) +300 //Temperature (K) +0.0 //Internal_potential (V) +-------------------------------------------------------------- +## Device Architecture Parameters +false //Enable_neat (uses donor properties) +false //Enable_bilayer +25 //Thickness_donor +25 //Thickness_acceptor +true //Enable_random_blend +0.5 //Acceptor_conc +false //Enable_import_morphology_single +morphology_0_compressed.txt //Morphology_filename +false //Enable_import_morphology_set +morphology_#_compressed.txt //Morphology_set_format +4 //N_test_morphologies +4 //N_morphology_set_size +-------------------------------------------------------------- +## Test Parameters +200 //N_tests +false //Enable_exciton_diffusion_test +false //Enable_ToF_test +hole //ToF_polaron_type (electron or hole) +20 //ToF_initial_polarons +1e-10 //ToF_transient_start (s) +1e-4 //ToF_transient_end (s) +20 //ToF_pnts_per_decade +false //Enable_IQE_test +1e-4 //IQE_time_cutoff (s) (simulation time) +false //Enable_extraction_map_output +true //Enable_dynamics_test +false //Enable_dynamics_extraction +1e16 //Dynamics_initial_exciton_conc (cm^-3) +1e-13 //Dynamics_transient_start (s) +1e-4 //Dynamics_transient_end (s) +20 //Dynamics_pnts_per_decade +-------------------------------------------------------------- +## Exciton Parameters +1e22 //Exciton_generation_rate_donor (cm^-3 s^-1) +1e22 //Exciton_generation_rate_acceptor (cm^-3 s^-1) +500e-12 //Singlet_lifetime_donor (s) +500e-12 //Singlet_lifetime_acceptor (s) +1e-6 //Triplet_lifetime_donor (s) +1e-6 //Triplet_lifetime_acceptor (s) +1e12 //R_singlet_hopping_donor (s^-1) +1e12 //R_singlet_hopping_acceptor (s^-1) +2.0 //Singlet_localization_donor (nm^-1) +2.0 //Singlet_localization_acceptor (nm^-1) +1e12 //R_triplet_hopping_donor (s^-1) +1e12 //R_triplet_hopping_acceptor (s^-1) +2.0 //Triplet_localization_donor (nm^-1) +2.0 //Triplet_localization_acceptor (nm^-1) +false //Enable_FRET_triplet_annihilation +1e12 //R_exciton_exciton_annihilation_donor (s^-1) +1e12 //R_exciton_exciton_annihilation_acceptor (s^-1) +1e12 //R_exciton_polaron_annihilation_donor (s^-1) +1e12 //R_exciton_polaron_annihilation_acceptor (s^-1) +4 //FRET_cutoff (nm) +0.5 //E_exciton_binding_donor (eV) +0.5 //E_exciton_binding_acceptor (eV) +1e14 //R_exciton_dissociation_donor (s^-1) +1e14 //R_exciton_dissociation_acceptor (s^-1) +3 //Exciton_dissociation_cutoff (nm) +1e7 //R_exciton_isc_donor (s^-1) +1e7 //R_exciton_isc_acceptor (s^-1) +1e7 //R_exciton_risc_donor (s^-1) +1e7 //R_exciton_risc_acceptor (s^-1) +0.7 //E_exciton_ST_donor (eV) +0.7 //E_exciton_ST_acceptor (eV) +-------------------------------------------------------------- +## Polaron Parameters +true //Enable_phase_restriction +1e12 //R_polaron_hopping_donor (s^-1) +1e12 //R_polaron_hopping_acceptor (s^-1) +2.0 //Polaron_localization_donor (nm^-1) +2.0 //Polaron_localization_acceptor (nm^-1) +true //Enable_miller_abrahams +false //Enable_marcus +0.2 //Reorganization_donor (eV) +0.2 //Reorganization_acceptor (eV) +1e12 //R_polaron_recombination (s^-1) +3 //Polaron_hopping_cutoff (nm) +true //Enable_gaussian_polaron_delocalization +4.0 //Polaron_delocalization_length (nm) +-------------------------------------------------------------- +## Lattice Site Parameters +5.5 //Homo_donor (eV) +3.5 //Lumo_donor (eV) +6.0 //Homo_acceptor (eV) +4.0 //Lumo_acceptor (eV) +true //Enable_gaussian_dos +0.075 //Energy_stdev_donor (eV) +0.075 //Energy_stdev_acceptor (eV) +false //Enable_exponential_dos +0.03 //Energy_urbach_donor (eV) +0.03 //Energy_urbach_acceptor (eV) +false //Enable_correlated_disorder +2.0 //Disorder_correlation_length (nm) (1.0-3.0, used by all kernels) +false //Enable_gaussian_kernel +false //Enable_power_kernel +-1 //Power_kernel_exponent (integer: -1 or -2) +-------------------------------------------------------------- +## Coulomb Interaction Parameters +3.5 //Dielectric_donor +3.5 //Dielectric_acceptor +50 //Coulomb_cutoff (nm) +-------------------------------------------------------------- diff --git a/slurm_script.sh b/slurm_script.sh index eef9670..7064536 100644 --- a/slurm_script.sh +++ b/slurm_script.sh @@ -5,7 +5,7 @@ #SBATCH -t 01:00:00 # Maximum walltime #SBATCH --cpus-per-task=1 -version_num=v1.0-beta.2 +version_num=v1.0-beta.3 ParameterNum=default # Setup job directory
                                       CCoordsThis simple struct contains Cartesian coordinates specified by integers x,y,z
                                       CEventThis base class contains the basic properties of a KMC simulation event and the functions needed to interact with it
                                       CExciton_Creation
                                       CExciton_Dissociation
                                       CExciton_Exciton_Annihilation
                                       CExciton_Hop
                                       CExciton_Intersystem_Crossing
                                       CExciton_Polaron_Annihilation
                                       CExciton_Recombination
                                       CExciton_CreationThis class extends the Event class to create an specific type of exciton event
                                       CExciton_DissociationThis class extends the Event class to create an specific type of exciton event
                                       CExciton_Exciton_AnnihilationThis class extends the Event class to create an specific type of exciton event
                                       CExciton_HopThis class extends the Event class to create an specific type of exciton event
                                       CExciton_Intersystem_CrossingThis class extends the Event class to create an specific type of exciton event
                                       CExciton_Polaron_AnnihilationThis class extends the Event class to create an specific type of exciton event
                                       CExciton_RecombinationThis class extends the Event class to create an specific type of exciton event
                                       CPolaron_Extraction
                                       CPolaron_Hop
                                       CPolaron_Recombination
                                       CLatticeThis class contains the properties of a three-dimensional lattice and the functions needed to interact with it
                                       CObjectThis base class contains the basic properties of a KMC simulation object and the functions needed to interact with it
                                       CExciton
                                       CExcitonThis class extends the Object class to create an exciton object to represent a singlet or triplet exciton in an organic semiconductor
                                       CPolaron
                                       CParameters_LatticeThis struct contains all of the main input parameters needed by the Lattice class
                                       CParameters_main
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
                                      Excimontec -  v1.0-beta.2 +  v1.0-beta.3
                                      An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more