Grpc4bmi can run containers with Docker engine.
Use the grpc4bmi.bmi_client_docker.BmiClientDocker
class to start a Docker container and get a client to interact with the model running inside the container.
For example the PCR-GLOBWB model can be started in a Docker container with
model = BmiClientDocker(image='ewatercycle/pcrg-grpc4bmi:latest', image_port=55555,
input_dir="./input",
output_dir="./output")
# Interact with model
model.initialize('config.cfg')
# Stop container
del model
Grpc4bmi can run containers on Singularity.
The Docker images build previously <building-docker-image>
can be either run directly or converted to singularity image file and run.
To run a Docker image directly use docker://<docker image name> as singularity image name.
To convert a Docker image to a singularity image file use
singularity build docker://<docker image name> <singularity image filename>
Use the grpc4bmi.bmi_client_singularity.BmiClientSingularity
class to start a Singularity container and get a client to interact with the model running inside the container.
from grpc4bmi.bmi_client_singularity import BmiClientSingularity
image = '<docker image name of grpc4bmi server of a bmi model>'
client = BmiClientSingularity(image, input_dir='<directory with models input data files>')
For example for the wflow Docker image the commands would be the following
from grpc4bmi.bmi_client_singularity import BmiClientSingularity
image = 'docker://ewatercycle/wflow-grpc4bmi:latest'
client = BmiClientSingularity(image, input_dir='wflow_rhine_sbm', output_dir='wflow_output')