Environment
We recommend the following development tools:
- Editor: Visual Studio Code
- Docker
- CMake
- Git
Please follow the build instructions to checkout your code and install the basic dependencies and tools.
This is the multi-page printable view of this section. Click here to print.
We recommend the following development tools:
Please follow the build instructions to checkout your code and install the basic dependencies and tools.
Your vscode launch.json should have two configurations, one to launch the python process and one to attach gdb:
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"stopOnEntry": true,
"env": {"PYTHONPATH": "${workspaceFolder}/build${pathSeparator}${env:PYTHONPATH}"}
},
{
"name": "(gdb) Attach",
"type": "cppdbg",
"request": "attach",
"program": "/usr/bin/python",
"processId": "${command:pickProcess}",
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
The python debugger will stop on entry (“stopOnEntry”: true). Make sure to adapt your PYTHONPATH variable if necessary.
The C++ code has to be build in debug mode
cmake .. -DCMAKE_BUILD_TYPE=Debug
You can automate this by using the vscode extension “Python C++ Debugger” and by adding this configuration to the launch.json above:
{
"name": "Python C++ Debugger",
"type": "pythoncpp",
"request": "launch",
"pythonConfig": "custom",
"pythonLaunchName": "Python: Current File",
"cppConfig": "default (gdb) Attach"
}
This will automatically run both debuggers and select the current process.
It can take a while before the debugger hits the C++ breakpoints.
Use the following launch.json for vscode and set the program path:
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/dpsim/build/Examples/Cxx/example",
"args": [],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
This is a summary of general guidelines for the development of DPsim.
Voltage quantities are expressed either as phase-to-phase RMS values (denominated as RMS3PH
) or as phase-to-ground peak values (denominated as PEAK1PH
):
initialSingleVoltage
of SimPowerComp
) as RMS3PH
valuesSP
and DP
domain (e.g. mIntfVoltage
of DP::Ph1::PiLine
) as RMS3PH values
EMT
domain (e.g. mIntfVoltage
of EMT::Ph3::Transformer
) as PEAK1PH
valuesCurrent quantities are expressed either as RMS
or as PEAK
values:
SP
and DP
domain (e.g. mIntfCurrent
of DP::Ph1::PiLine
) as RMS
valuesEMT
domain (e.g. mIntfCurrent
of EMT::Ph3::Transformer
) as PEAK
valuesDebug or trace should be the default log level for information that might be nice to have but not necessary for every simulation case.
Calls to the logger that might occur during simulation must use spdlog macros, like SPDLOG_LOGGER_INFO.
Although DPsim currently does not have any conventions on versioning, the periodic creation of new versions can help to mark significant changes and to analyze new portions of code using tools like SonarCloud.
A new version of DPsim has to be indicated as follows:
Due to the creation of a new tag, a new PyPi package will be deployed automatically. To release an updated Docker image, the container workflow needs to be triggered manually.