Skip to main content


The GEOLIB is a publicly available Python library developed by Deltares. The GEOLIB provides functionality for the following Deltares software:

  • DFoundations
  • DSettlement
  • DSheetPiling
  • DStability

The GEOLIB replaces VIKTOR's D-Series bindings. These bindings won't be removed for now, but there won't follow any updates anymore.


To make use of the GEOLIB, add the following to your requirements.txt:

d-geolib==0.1.6  # or any other available version

For more information on how to use the GEOLIB, see the online documentation.

Executing jobs

All GEOLIB models have an execute() method. However, it's not possible to use this in a VIKTOR app. Fortunately, there is still a way to execute your model, making use of VIKTOR's corresponding analysis class and worker, by serializing your model into VIKTOR's writable File object:

from pathlib import Path
from viktor import File
from viktor.external.dsettlement import DSettlementAnalysis
from geolib import DSettlementModel

model = DSettlementModel()
# build up your model
file = File() # create a writable file (GEOLIB is going to write to it)
path = Path(file.source) # source returns the path in `str`, GEOLIB requires (in most cases) a Path object
model.serialize(path) # let GEOLIB write the serialized model to the file
dsettlement_analysis = DSettlementAnalysis(input_file=file) # pass the input file to the analysis as usual
dsettlement_analysis.execute() # requires a worker

The GEOLIB can be used in conjunction with the following VIKTOR analysis classes and workers:

Parsing in-memory data

GEOLIB also features the parsing of output files for the different models. It does however work with paths and includes a check on the file's suffix. If you have in-memory data (e.g. StringIO or BytesIO), you can convert it to a path with suffix by creating a temporary file with NamedTemporaryFile:


Creating a temporary path with VIKTOR's File.from_data(...).copy() does not work here, because GEOLIB requires the file path to have a valid suffix.

import os
from tempfile import NamedTemporaryFile
from pathlib import Path
from geolib import DSettlementModel

temp_file = NamedTemporaryFile(suffix='.sld', delete=False, mode='wb') # create a temporary file with correct suffix; don't delete on close(); remove mode 'b' in case of StringIO/str
temp_file.write(my_bytesio.getvalue()) # write in-memory content (bytes in this case) to file
temp_file.close() # close (does not delete) the file to ensure the data is actually written to file (instead of kept in buffer)
path = Path( # name returns the path in `str`, GEOLIB requires (in most cases) a Path object
dsettlement_model = DSettlementModel() # create empty model
dsettlement_model.parse(path) # parse file into DSettlementModel() model
os.remove( # remove the temporary file to avoid cluttering of files