Code Monkey home page Code Monkey logo

excimontec's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

excimontec's Issues

Create DEVELOPMENT.md

This file will contain instructions for potential developers so consistent coding standards can be followed.

Add clang formatter

This will help keep the style of the source files consistent to add clarity and readability.

Add tests for importing morphology files

Add tests that import sample morphology files from Ising_OPV v3.2 and 4.0 in both compressed and uncompressed format, and make sure that errors are produced with invalid morphology files.

Off-lattice simulations

It would be nice to be able to perform off-lattice simulations that can include positional disorder, either random positions or using site coordinates from molecular simulations.

Morphology import test

Add a test_morphology.txt BHJ morphology file generated by Ising_OPV to the test directory and write unit tests for importing the morphology data.

Update copyright years

The correct copyright notice should cover 2017-218 instead of just 2018. This needs to be updated in all files.

DOS and DOOS not correct? version v1.0.0-rc.2

In the steady-state transport test, the integral of the DOS and DOOS are not always correct (= equal to the total number of sites, resp. carriers in the simulation). When using the attached job and parameters, the integral over DOOS is correct (=1e19 cm-3), but the integral overt the DOS is too low by a factor of 1.1 (but I've seen larger deviations, up to 2).
4929459.zip

Add steady state charge transport simulation

Would be great if the code could also do periodic boundary conditions in all three directions to calculate mobility in steady-state. That plus output of the Fermi energy and the transport energy would make it suitable for organic thermoelectrics.

Move Parameter Class to own file

The OSC_Sim files are a little bloated. Readability can be increased by better modular design moving the Parameters class into its own file would be one to do this. It would also be beneficial to get rid of all the members of the OSC_Sim class that refere to the parameters and just make a Parameter Object a member of the OSC_Sim class this would vastly reduce duplication.

Switch to cmake

As the project it will be hard to maintain individual make files. It would be better to switch over to cmake which is better able to handle large projects.

Contributor guidelines

Add a document with guidelines for how other developers can contribute to the project, including coding style, workflow details, and testing requirements.

  • Requesting features and reporting bugs
  • Making Tutorials
  • Forks and feature branches
  • Code testing
  • Pull requests
  • Standards and code review

IQE Test no events error

At the end of the IQE test, once exciton generation stops, if there are only trapped charges left, the situation can arise where there are still charges trapped in the simulation box, but no possible events. Currently this produces an error, but this situation should be handled without generating an error.

Checkpointing

Add periodic generation of a checkpointing file that contains all information about the state of the simulation, so that if the compute job dies, it can be continued later.

Get rid of compile/build warnings

    #pragma loop(hint_parallel(2))
 ^
src/OSC_Sim.cpp:1375:0: warning: ignoring #pragma loop  [-Wunknown-pragmas]
    #pragma loop(ivdep)
 ^
 
In file included from KMC_Lattice/src/Simulation.h:12:0,
                 from src/OSC_Sim.h:9,
                 from src/OSC_Sim.cpp:6:
KMC_Lattice/src/Event.h: In member function ‘void Excimontec::OSC_Sim::calculateExcitonEvents(Excimontec::Exciton*)’:
KMC_Lattice/src/Event.h:24:7: warning: ‘event_ptr_target’ may be used uninitialized in this function [-Wmaybe-uninitialized]
 class Event{
       ^
src/OSC_Sim.cpp:719:9: note: ‘event_ptr_target’ was declared here
  Event* event_ptr_target;
         ^
In file included from KMC_Lattice/src/Simulation.h:12:0,
                 from src/OSC_Sim.h:9,
                 from src/OSC_Sim.cpp:6:
KMC_Lattice/src/Event.h: In member function ‘void Excimontec::OSC_Sim::calculatePolaronEvents(Excimontec::Polaron*)’:
KMC_Lattice/src/Event.h:24:7: warning: ‘event_ptr_target’ may be used uninitialized in this function [-Wmaybe-uninitialized]
 class Event{
       ^
src/OSC_Sim.cpp:949:9: note: ‘event_ptr_target’ was declared here
  Event* event_ptr_target;
         ^

Implement new BKL algorithm from KMC_Lattice

Need to update the Exciton and Polaron classes, their derived Event classes, and the OSC_Sim class to utilize the new BKL algorithm that has been implemented into the development branch KMC_Lattice.

Make clean does not clean KMC_Lattice

When executing 'make clean', the Excimontec build is correctly cleaned, but the submodule KMC_Lattice build is not also cleaned. One could navigate into the KMC_Lattice dir and clean the build there, but it seems better to just have the regular 'make clean' clean up the KMC_lattice submodule build files also.

Add ability to specify doping density in steady charge transport simulations

User would specify the hole dopant density and dopant LUMO energy. Then, the simulation could randomly place fixed negative ionic dopants in the lattice and modify the energies of the sites surrounding the dopant sites using the calculated Coulomb potential energy. The lattice would then be initialized with hole polarons on the dopant sites.

Test warning

Generate a warning to users if they build the Excimontec and try to run calculations without first running the tests on their computing system.

Time-of-flight charge transport test demo and tutorial

Write a simple tutorial and demo that shows how to run ToF simulations and provides examples of the types of data and information produced by the simulation.

  • Neat film with different internal potential values using uncorrelated Gaussian DOS
  • Neat film with different magnitudes of disorder using uncorrelated Gaussian DOS
  • BHJ films with different magnitudes of tortuosity due to anisotropy (from Ising_OPV) using uncorrelated Gaussian DOS

Nest derived event classes inside derived object classes

Derived event classes only make sense in context of the object itself, so it would be better to nest them as public classes within their associated object. For example, all exciton events should be nested into the Exciton class.

Excimontec import only compressed files

Hello everyone!

I would like to import uncompressed morphologies for Excimontec, generated with Ising_OPV.

I generated several morphologies, with many MC steps (of the order of 100000), and when I imported them into Excimontec I realized that I put them to save the uncompressed files, so I could not import them into Excimontec. I did not want to have to redo the morphology. Is there any way to import uncompressed files? Or some way to convert the uncompressed files to compressed.

Thank you!

Create File for Controlling Version

Ideally this class or file would control all functionality associated with versioning. E.g.

Version.h

namespace Excimontec {
  class Version {
    private:
      int major_ = 1;
      int minor_ = 0;
      int bug_release_ = 5;
      std::string release_type_ = "beta";
    public:
      const int getMajor(){return major_;}
      const int getMinor(){return minor_;}
      const int getBugRelease(){return bug_release_;}
      const std::string getReleaseType(){return release_type_;}
      const std::string getVersion(){
        return "v"+to_string(major)+"."+to_string(minor)+"-"
          release_type_+"."+to_string(bug_release_);
      }
  } version;
}

Some thing like this it would also be useful if the class also had functionality for dealing with translating a string into a version. For instance if you want to check if a file output by the OSC_Sim code is still compatible with the current version. This will also make it easier to compare the releases if you easily grab the integer values of the major and minor releases.

Also when implementing cmake the versioning can then also be controlled easily using cmake variables.

Version.h.in

namespace Excimontec {
  class Version {
    private:
      int major_ = @MAJOR@;
      int minor_ = @MINOR@;
      int bug_release_ = @BUG_RELEASE@;
      std::string release_type_ = @RELEASE_TYPE@;
    public:
      const int getMajor(){return major_;}
      const int getMinor(){return minor_;}
      const int getBugRelease(){return bug_release_;}
      const std::string getReleaseType(){return release_type_;}
      const std::string getVersion(){
        return "v"+to_string(major)+"."+to_string(minor)+"-"
          release_type_+"."+to_string(bug_release_);
      }
  } version;
}

You could even overload the < and > to easily compare if a version is newer.

Remove unused testing files

Initial files for running system batch submission tests along with a series of test parameter files are not currently being used and add cluster to the repo. These files should be removed and left out of the release until the features are working correctly.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.