Getting Started¶
SimKit helps you build complicated models quickly. The Quickstart and Tutorials that follow will guide you through the steps to making and simulating an example SimKit model.
Quickstart¶
SimKit adds the script simkit-quickstart
to quickly start a
project.
$ simkit-quickstart.py MySimKitProject.
This creates a new folder for MySimKitProject
, a Python package with the
same name, and a data folder.
MySimKitProject
|
+-+- mysimkitproject
|
+- __init__.py
|
+- data
The quickstart script adds the constant mysimkitproject.PROJ_PATH
that
refers to the project path MySimKitProject/mysimkitproject
. This path is
useful, as we’ll see in the next tutorial, and should be
imported into the project package modules. The script also adds version, author
and email information that you can complete if you want.
Tutorials¶
The following Tutorials will go through an example of how to implement a SimKit model. There are are five tutorials that cover the different steps in making a SimKit model.
PV System Power Example¶
The example in this tutorial demonstrates using a Python package called
PVLIB to simulate a photovoltaic (PV)
power system. It follows the example in the Package Overview section of the
PVLIB documentation. A working version of the demonstration model is included in
the examples
folder of both the SimKit Git repository and the archive
distribution of the SimKit Python package.
Quickstart¶
To start the tutorial, first execute simkit-quickstart PVPower
from your
OS terminal (EG: BaSH on Linux, CMD
on Windows). This will create a new
SimKit project named PVPower
containing the following folders:
pvpower
, data
, formulas
, calculations
, outputs
,
simulations
and models
. A Python package is created with the same name
as the project in lower case, ie: pvpower
, and a file called
my_model.json
is created in the models
folder. These folders will be
used to create SimKit models in the tutorials that follow. For more
information about simkit-quickstart
see the
Quickstart section in Getting Started.
The next tutorial covers specifying outputs for your SimKit model.
Parameters¶
Model parameters are items that are declared in each layer of a SimKit model. For example a model’s data layer might declare data parameters called “direct_normal_irradiance” and “ambient_temperature” with attributes like “units” and “uncertainty”. SimKit’s goal is to make entering model parameters intuitive, quick yet flexible, so there are currently two different styles for entering model parameters.
Class Attributes¶
The preferred way to specify model parameters in each SimKit layer is to
declare them as class attributes equal to an instance of Parameter
. Each
SimKit class has its own Parameter
class to set the items for that layer.
Behind the scenes SimKit collects parameters and instantiates them without
needing to write dunder
methods such as __init__
. Therefore model parameters are declared in a
simple and concise way. Please see the tutorials for examples.
JSON File¶
Originally SimKit collected all parameters from JSON files because it was
meant to be used entirely from a graphic user interface, therefore the
application state was saved and reloaded using JSON. This legacy style still
works in the current version of SimKit and can even be combined with the class
attribute style by specifying the parameter files as class Meta
options.
Model Class Instance¶
There is a third method for entering model parameters that can only be used when
creating a SimKit model directly from a model parameter JSON file by calling
Model
with the filename as the argument.
Therefore SimKit models can be created three different ways.
Specifying the model parameters as class attributes of a subclass of
Model
:class MyModel(models.Model): """ Layers specified as class attributes. This is the preferred way. """ data = ModelParameter( layer='Data', sources=[(MyModelData, {'filename': 'data.json'}), ...] ) outputs = ModelParameter( layer='Outputs', sources=[MyModelOutputs, ...] ) formulas = ModelParameter( layer='Formulas', sources=[MyModelFormulas, ...] ) calculations = ModelParameter( layer='Calculations', sources=[MyModelCalculations, ...] ) simulations = ModelParameter( layer='Simulations', sources=[MyModelSimulations] ) class Meta: modelpath = PROJ_PATH # path to project folder m = MyModel()
Specifying the path to the model parameter file as
Meta
class options:class MyModel(models.Model): """ JSON parameter file specified as ``Meta`` class options. """ class Meta: modelpath = PROJ_PATH # path to project folder modelfile = MODELFILE # path to model parameter file m = MyModel()
Calling
Model
with the model parameter file as the argument:m = models.Model('path/to/project/models/parameter_file.json')
The SimKit model is the only class that can be instantiated directly by the user. The other classes, data, formulas, calculations, outputs, and simulations, are instantiated by the model class automatically.
Meta Class Options¶
Model options that apply to an entire SimKit class are listed separately in a
nested class that is always called Meta
. For each layer, there are a few
options that are typically listed in the Meta
class. For example, the
model class has an attribute called modelpath
that is listed in the
Meta
class and refers to the project path created by
simkit-quickstart
. Please read the tutorials to learn more about what
Meta
class options can be used in each SimKit layer.