FORtran library for Computational Environmental Systems


This is the FORTRAN library of the

Department Computational Hydrosystems
Helmholtz Centre for Environmental Research - UFZ
Permoserstr. 15
04318 Leipzig, Germany

It is a lightweight fork of the jams_fortran library maintained by Matthias Cuntz et al:

The jams_fortran library was formerly developed at the CHS department at the UFZ and is now released under the MIT license.

Using FORCES with your Fortran program

Let's assume, you want to write a fortran program using forces, like this example test.f90:

program test
use mo_message, only : message
implicit none
call message("This is working!")
end program test
Write out concatenated strings.
Definition: mo_message.F90:9
subroutine, public message(t01, t02, t03, t04, t05, t06, t07, t08, t09, t10, uni, advance)
Write out an error message to stdout.
Definition: mo_message.F90:95

You should create a minimal CMakeLists.txt file next to the test.f90 file like this:

cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
# get CPM (package manager)
# create project
project(MyProject LANGUAGES Fortran)
# add executable
add_executable(test test.f90)
# add FORCES dependency
# link dependencies
target_link_libraries(test forces)

There, CPM (the cmake package manager) is downloaded on the fly and used to get FORCES to be able to link against it.

Afterwards you only need to do the following to configure, compile and execute your program:

cmake -B build
cmake --build build --parallel

And it will happily write:

This is working!

For a more complex project, prepared for unit-tests, documentation and modules, have a look at the Fortran Template.

Dependencies and Requirements

It is recommended to have a clean installation at a custom location for a C compiler, a Fortran compiler, the NetCDF C library and the NetCDF Fortran library with consistent compilers.

We recommend to use a conda environment by using Miniconda to get all dependencies easily:

conda create -y --prefix ./forces_env
conda activate ./forces_env
conda config --add channels conda-forge
conda config --set channel_priority strict
conda install -y cmake make fortran-compiler netcdf-fortran fypp

With this you could now proceed with the example given above.


This file is part of the UFZ CHS FORCES code base.

The routines is released under the GNU Lesser General Public License. The following applies: The UFZ Fortran library is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

FORCES is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

Doxygen Awesome

Doxygen Awesome is included as subrepo under doc/doxygen-awesome-css/ from It is released under the MIT license.

Cmake Fortran Scripts

The CHS Cmake Fortran Scripts repository is included as subrepo under cmake/ from It is released under the GNU LGPLv3 license.

HPC Fortran Module Loads

The CHS HPC Fortran Module Loads repository is included as subrepo under hpc-module-loads/ from It is released under the GNU LGPLv3 license.