tools module¶
Jobscript Generation¶
Sqlite3 Helpers¶
- waLBerla.tools.sqlitedb.storeSingle(data, tableName, dbFile='database.sqlite', runId=None)¶
Stores results of a single simulation run to a sqlite database.
Primary key column ‘runId’ and a timestamp are automatically added.
- param data:
Dictionary with data to store in sqlite database. The dictionary keys are assumed to be column names.
- param tableName:
name of sqlite table
- param dbFile:
database file
- param runId:
override the otherwise manually created runId which serves as primary key
- return:
runId of inserted run
- waLBerla.tools.sqlitedb.storeMultiple(data, tableName, dbFile='database.sqlite', runId=None)¶
Stores data from multiple simulation runs into the database.
- Parameters:
data – similar to storeSingle, but each value of the dictionary has to be a list for all keys the values have to be lists of equal length
runId – leave this to none if runId is the primary key of this table if this table references a table with primary key runId, you can reference a specific run by passing here the id of the run to reference.
- Returns:
primary key of last inserted run, the other runs have runId: returnValue-1, returnValue-2, …
- waLBerla.tools.sqlitedb.checkAndUpdateSchema(data, tableName, dbFile='database.sqlite', referenceRuns=False)¶
Alters a sqlite table in order to match the given data:
if table with given name does not exist yet, it is created
keys in the data dictionary correspond to columns
columns are added if necessary, existing data has NULL in these new columns
- Parameters:
data – see
storeSingle()
orstoreMultiple()
referenceRuns – if False the table gets an autoincrementing integer column ‘runId’ if True, a normal column runId is created that points into another table with runId as primary key
- waLBerla.tools.sqlitedb.mergeSqliteFiles(targetFile, fileToMerge)¶
Merges sqlite3 database ‘fileToMerge’ into ‘targetFile’ database. Works only if both tables have a ‘runs’ table. Other tables are ignored! If the runs table in one of the databases has more columns, these columns are created in the merged database.
PRM Files¶
LBM Unit Conversion¶
- class waLBerla.tools.lbm_unitconversion.PintUnitConverter(ureg=<pint.registry.UnitRegistry object>, **kwargs)¶
- __init__(ureg=<pint.registry.UnitRegistry object>, **kwargs)¶
- Possible arguments (all in SI units):
l_m (lattice meter, same as dx)
l_s (lattice second, same as dt)
l_kg (lattice kilogram)
same for other SI units
- Example:
conv = PintUnitConverter( l_m = 1e-6, l_s = 1e-7 )
- conv_config(config)¶
- conv_config_unit_strings(config)¶
- define_lattice_units(**kwargs)¶
Defines lattice units
- to_si_units(value)¶
SI= Systeme international d’unites, International System of Units
- to_si_units_mag(value)¶
- to_sl_units(value)¶
SL = Lattice System of Units
- to_sl_units_mag(value)¶
- waLBerla.tools.lbm_unitconversion.extractLatticeFactors(config, constant=True)¶
takes config dictionary and extracts lattice factors
- waLBerla.tools.lbm_unitconversion.computeLatticeFactors(constant=True, **kwargs)¶
Computes lattice factors with given physical input values
- Parameters:
kwargs – dictionary with symbol name as key and the physical value as value
- Returns:
lattice factors as dictionary with name, value
HTML Reports¶
This module creates HTML reports based on the Flask and Jinja2 packages.
Attention
This module is not actively developed any more - consider using IPython Notebook instead
It provides custom template markup for generating matplotlib graphs with data from a sqlite3 database. To use this module one first has to write the simulation results to a sqlite3 database e.g. using waLBerla.tools.sqlite
Then create a Jinja2 HTML template. Here is an example using base templates provided by this module:
{% extends "waLBerla/bootstrap_report.html" %}
{% block content %}
<div class="container">
<div class="text-center">
<h1> MySetup </h1>
{% matplotlib %}
# Some SQL query that returns a two column result
q = "SELECT capillaryNr,shapeFactor FROM runs WHERE yCells=160 AND zCells=160 AND bubbleDiameter=60 ORDER BY capillaryNr" # noqa: E501
# plt is matplotlib.pyplot extended with the custom 'dbplot' function
plt.dbplot( q, label="sim shapefactor", marker="o" )
plt.legend( loc='center')
{% endmatplotlib %}
</div>
</div>
Then use one of the functions provided by this module to create an HTML page from this template. Either once or run a small webserver that reloads the template if it was changed.
- waLBerla.tools.report.cliFrontend(context={})¶
Command line interface for above functions
- waLBerla.tools.report.generate(context={}, plot_funcs={}, database_file='database.sqlite', input_output_list=None, open_browser=False)¶
Generates a html report. Uses jinja2 templating engine with custom matplotlib tag, which inserts matplotlib figures as svg graphics
- waLBerla.tools.report.runWebserver(context={}, plot_funcs={}, database_file='database.sqlite', open_browser=False, debug=True)¶
Runs a small local webserver using the flask module ( pip3 install flask ) serving the report. When refreshing in the browser the report is updated.
- waLBerla.tools.report.setupFlaskApp(app, context={}, plot_funcs={}, database_file='database.sqlite')¶
Call this function to set up your custom flask app. This is an advanced function, probably you want to use runWebserver instead
- waLBerla.tools.report.runWebserver(context={}, plot_funcs={}, database_file='database.sqlite', open_browser=False, debug=True)¶
Runs a small local webserver using the flask module ( pip3 install flask ) serving the report. When refreshing in the browser the report is updated.
- waLBerla.tools.report.cliFrontend(context={})¶
Command line interface for above functions
- waLBerla.tools.report.generate(context={}, plot_funcs={}, database_file='database.sqlite', input_output_list=None, open_browser=False)¶
Generates a html report. Uses jinja2 templating engine with custom matplotlib tag, which inserts matplotlib figures as svg graphics
- waLBerla.tools.report.setupFlaskApp(app, context={}, plot_funcs={}, database_file='database.sqlite')¶
Call this function to set up your custom flask app. This is an advanced function, probably you want to use runWebserver instead