The platform uses a hierarchical workflow system that incorporates:
- Multiple simulation tools (e.g., FEniCS, Kratos) for solving a problem.
- Standardized I/O streams to the simulation tools.
- Multiple parameter configurations per benchmark.
- Automated mesh generation.
- Provenance reports generation.
- Querying the research objects.
Workflow
The workflow has a hierarchical structure. The common tasks like mesh generation and results' summary creation are done by the top-level workflow. The top-level workflow interacts with the sub-workflows which are tool-specific. The sub-workflows are responsible for running the scripts containing simulation code and pre/post-processing scripts necessary for processing the mesh files or the simulation output.
The benchmark linear-elastic-plate-with-hole is implemented with nextflow and snakemake packages. For this benchmark, the structure of the snakemake workflow is exemplified below:
linear-elastic-plate-with-hole/Snakefile
│ ├── executes ──> create_mesh.py
│ └── executes ──> summarize_results.py
│
├── calls ──> fenics/Snakefile
│ └── executes ──> run_fenics_simulation.py
│
└── calls ──> kratos/Snakefile
├── executes ──> msh_to_mdpa.py
├── executes ──> create_kratos_input.py
├── executes ──> run_kratos_simulation.py
└── executes ──> postprocess_results.py
Terminologies
Parameter JSON File
A parameter_*.json file defines all the user-adjustable parameters for mesh generation, material properties, boundary conditions, and solver settings for finite element simulations. Each parameter file represents a unique configuration of these parameters that will be processed by the workflow system, e.g. parameter_1.json.
{
"configuration": "1",
}
The keyword "configuration" is a unique identifier for the provided parameter set. It is used in output file naming and workflow tracking and must be unique across all parameter files.
Configuration Generator
generate_config.py file writes a configuration file for the workflow managers (snakemake or nextflow) extracting the configuration information from parameter_*.json files. Further, it lists the simulation tools that are going to run the different parameter configurations, e.g. generate_config.py.
Mesh Generation
The create_mesh.py file contains the code for mesh generation. In case the mesh(es) are already available, the file is not needed. In the linear-elastic-plate-with-hole example the create_mesh.py file:
- receives inputs from
\parameter_*.jsonand outputs.mshfiles. - Uses
gmshlibrary for mesh generation. - Uses
pintlibrary for unit conversion to the SI units.
Summarize File
summarize_results.py creates a JSON file containing the solution metrics and their corresponding parameter configurations after simulation runs of a benchmark.
Environment Files
The environment files are YML files which configures the environment for running a script. They contain a list of software libraries that build up an environment. They are present inside the simulation tool's folder for the tool-specific scripts and inside the benchmark folder for common scripts.
benchmarks/
├── linear-elastic-plate-with-hole/
├── environment_mesh.yml
├── environment_postprocessing.yml
├── fenics
├── environment_simulation.yml
├── kratos
├── environment_simulation.yml