Installation and configuration

Installing Solcore

Solcore is written mostly in Python, but the Poisson-Drift-diffusion (PDD) solver is written in Fortran to make it more efficient. The following instructions are expected to work in most systems, but check the sections below for OS specific instructions and caveats. In order to install Solcore in your computer, you will need the following:

Pip is normally part of the standard Python installation, but you might need to install setuptools and numpy manually with:

pip install setuptools numpy

Now, installing Solcore should be as easy as writing in the terminal:

pip install solcore

This will download Solcore form the Pypi repository and install the package within the Python packages tree, but it will NOT install the PDD solver, for which you need a suitable Fortran compiler (read this to install your Fortran compiler). Assuming you have a Fortran compiler correctly installed and configured, you can install Solcore with the PDD solver by doing:

pip install solcore
    pip install --no-deps --force-reinstall --upgrade --install-option="--with_pdd" solcore

NOTE: Pip passes the –install-option to all the dependencies of the package and therefore the installation will fail since those dependencies do not have the option “–with_pdd”. That is the reason why, for now, Solcore needs to be installed twice: the first one install Solcore normally with all the dependencies and the second one re-installs Solcore with PDD support.

And that’s all!! Solcore should be available to be used as with any Python package:

>>> import solcore

    Welcome to Solcore - version 5.5.2
    Copyright (c) 2018, Imperial College, London All rights reserved.
    Software released under the GNU Lesser General Public License.

Alternative installation method

Alternatively, you can download the source from the Solcore GitHub repository, either using ‘git’ or as a zip file using one of the links on the right. This let you test other branches or play with it and help to develop it further. If you want to install it, unpack it and run from the directory where setup.py is located:

python setup.py install

or:

python setup.py install --with_pdd

If you want to test first if Solcore will work in your computer, without actually installing it, or if you want to become a developer and therefore you need to have it in a more accessible place, you can test if Solcore works with:

python setup.py test

This will also install the Solcore dependencies and run a few tests that probe several of the Solcore tools. If it fails, it will indicate which parts failed to work and why, and you could try to solve them. At the moment, this only cover some of Solcore’s functionality, but it will be expanded with time. The tests related to the PDD solver will fail, of course, since the PDD solver will not be compiled. If you want to test everything, compiling the the PDD solver, just run:

python setup.py test --with_pdd

Getting started

After installing Solcore (or even without installing it), there are a few things you might want to do in order to personalise it and start using it. These are general instructions that, hopefully, should work in most *NIX systems. Check specific instructions for:

  1. Create a user configuration file: This can be done automatically by importing the config_tools. If you do not already have a (hidden) solcore_config.txt file in your home directory, you will be asked if you want to create it:

    >>> import solcore.config_tools
    
  2. Check Solcore examples: This is the fastest way of getting started. These examples include all the scripts used in the main Solcore paper in the Journal of Computational Electronics (2018) and a few others to explore other functionality. We hope to increase the number and usefulness of these examples over time.

  3. Check the Tutorial: The Tutorial (with the code available in the Examples folder) contains a step-by-step example on how to create a solar cell with multiple junctions and quantum wells, and calculate its quantum efficiency and current-voltage characteristics. While it does not cover every option - not even close! - it should give you a good idea on how things are done within Solcore and its possibilities.

  1. Set the location of a SPICE executable and the SMARTS folder: You will need to do this eventually in order to use those tools:

    >>> import solcore.config_tools as config
    
    >>> config.set_location_of_spice('/path/to/the/SPICE/executable')
    >>> config.set_location_of_smarts('/path/to/the/SMARTS/folder')
    
  2. Installing S4: The rigorous-coupled wave analysis (RCWA) solver S4, created by the Stanford University, needs to be installed separately using the fork by Phoebe Pearce. The original version do not work with Python 3.x, only with Python 2. You can find more information about the solver in the project webpage. An example of its use with Solcore is included in the examples folder, Figure9.py.

  3. Getting specific information about Solcore: Even though the documentation “should” be more complete, you can get information about any object in python (including any Solcore function, module and package) using the ‘__doc__’ attribute, for example:

    >>> import solcore.config_tools as config
    
    >>> print(config.get_current_config.__doc__)
    
    Prints the current Solcore configuration
    
        :return: None
    
  4. Python editor: Learning Python is easy, but some tools make it even easier. That is the case of PyCharm <https://www.jetbrains.com/pycharm/> (the community eddition is free and the other it is too if you are in academia). Selecting an editor is very personal choice, but PyCharm turns out to be quite useful to teach you good coding practices, reviewing your code for errors and, in general, checking that things will work. It will make your life easier. Give it a try. Solcore in its current form is, in part, the result of using PyCharm.

Problems with the installation

There are several things that can go wrong in the above description, specially in Windows.

  1. The tests associated with the Poisson-Drift-Diffusion solver fail: This is usually the result of not having a Fortran compiler installed in your system, not being correctly configured or having a temperamental F2PY version, the tool - included in numpy - that makes Fotran code accesible from Python. Please, make sure you follow all the steps indicated in the Fortran compiler section and above to have the PDD solver up and running.
  2. Some of the dependencies fail to install: That is rarely the case, as all dependencies are in the main Python repositories. However, there might be issues with Numpy, Matplotlib and Scipy. These packages need to be compiled and it is often easy to get them as a scientific bundle. You can check Anaconda which provides all these packages together already configured for the correct OS.

The config_tools

This module contains all the functions that will help you to setup and configure your Solcore installation, as it has been highlighted above. The full description of the funcitons included in this module are:

This module contains tools for configuring the solcore installation, adding/removing sources with material data, etc.

solcore.config_tools.reset_defaults(confirm=False)[source]

Resets the default Solcore configuration in the user home folder.

Returns:None
solcore.config_tools.save_user_config()[source]

Saves the current user configuration

Returns:None
solcore.config_tools.remove_source(section, name)[source]

General function to remove sources from the configuration files. It checks if the source exists and, if so, if it is a default Solcore source. In the later case, it disable the source by setting it to an empty string rather than removing it.

Parameters:
  • section – The section to remove a source from.
  • name – The name of the source.
Returns:

None

solcore.config_tools.add_source(section, name, location)[source]

General function to add sources to the configuration files. If the source already exists, its value will be replaced by the new one.

Parameters:
  • section – The section to add a source to.
  • name – The name of the source.
Returns:

None

solcore.config_tools.restore_default_source(section, name)[source]

Restores the default value of a source, assuming the source has a default value.

Parameters:
  • section – The section of the source.
  • name – The name of the source.
Returns:

None

solcore.config_tools.add_units_source(name, location)[source]

Adds a Units source to Solcore.

Parameters:
  • name – The name of the source.
  • location – The full path to the location of the source. The source must be a ConfigParser formatted file.
Returns:

None

solcore.config_tools.add_parameters_source(name, location)[source]

Adds a Parameters source to Solcore.

Parameters:
  • name – The name of the source.
  • location – The full path to the location of the source. The source must be a ConfigParser formatted file.
Returns:

None

solcore.config_tools.add_materials_source(name, location)[source]

Adds a Materials source to Solcore.

Parameters:
  • name – The name of the source.
  • location – The full path to the location of the source. The source must be a folder containing the n and k

data of the material. See the the Material System in the manual for more information. :return: None

solcore.config_tools.remove_units_source(name)[source]

Removes a Units source from Solcore.

Parameters:name – The name of the source.
Returns:None
solcore.config_tools.remove_parameters_source(name)[source]

Removes a Parameters source from Solcore.

Parameters:name – The name of the source.
Returns:None
solcore.config_tools.remove_materials_source(name)[source]

Removes a Materials source from Solcore.

Parameters:name – The name of the source.
Returns:None
solcore.config_tools.restore_default_units_source(name)[source]

Restores the default value of a Units source from Solcore.

Parameters:name – The name of the source.
Returns:None
solcore.config_tools.restore_default_parameters_source(name)[source]

Restores the default value of a Parameters source from Solcore.

Parameters:name – The name of the source.
Returns:None
solcore.config_tools.restore_default_materials_source(name)[source]

Restores the default value of a Materials source from Solcore.

Parameters:name – The name of the source.
Returns:None
solcore.config_tools.welcome_message(show)[source]

Sets if the welcome message must be shown or not

Parameters:show – True/False for showing/hiding the welcome message
Returns:None
solcore.config_tools.verbose_loading(show)[source]

Sets if the loading messages (besides the welcome message) must be shown or not

Parameters:show – True/False for showing/hiding the loading messages
Returns:None
solcore.config_tools.set_location_of_spice(location)[source]

Sets the location of the spice executable. It does not test if it works.

Parameters:location – The location of the spice executable.
Returns:None
solcore.config_tools.set_location_of_smarts(location)[source]

Sets the location of the SMARTS distribution (the root folder). It does not test if it works.

Parameters:location – The location of the SMARTS distribution.
Returns:None
solcore.config_tools.get_current_config()[source]

Prints the current Solcore configuration

Returns:None
solcore.config_tools.check_user_config()[source]

Checks if there’s a user configuration file, asking if it needs to be created.

Returns:None