Urban-Meteorology-Reading / SUEWS

Surface Urban Energy and Water Balance Scheme
https://suews.readthedocs.io/
Mozilla Public License 2.0
6 stars 15 forks source link
land-surface-modeling suews urban-climate-model

SUEWS

THIS PROJECT IS ARCHIVED AND NOW MAINTAINED BY @UMEP-dev.


This is a public repo for SUEWS source code and documentation.

Documentation

Developer Note

Branch

Central curated branches

These branches are regularly curated by admin members with specific purposes and set with triggers for automatic deployment (via MS Azure Pipeline) in the releases page named Latest Release Test:

Manual

Test

Whenever changes are made, please run make test in the repo root to check if your changes are working or not. If any error, please resolve it or justify that the test is giving false alarm.

Tests and purposes

make test will perform the following checks:

Workflow

The test workflow is as follows (details refer to the Makefile test recipe and related python code):

  1. clean existing build and rebuild the code;
  2. create a temporary directory as working directory to perform checks;
  3. copy the rebuilt SUEWS_{version} binary to the temporary folder;
  4. copy the version specific input files under Release/InputTables/{version} to the temporary folder (see below for its preparation);
  5. run python code to perform the above checks and write out test results to the console:
    1. if all tests are successful, the code is generally good to go;
    2. if any test failed, we NEED to look into the reasons for the failure and resolve them before any further feature-added operations.

Preparation of tests

  1. Prepare a base run:

    • under Test/BaseRun, create a folder named with version/feature info (e.g., 2019a);
    • perform a simulation to produce example output files, which will later be used as standard run to verify the correct code functionalities.

    Note: all the above input files will be automatically copied under Release/InputTables with explicit version/feature (e.g., Release/InputTables/2019a) and later archived in public releases for users; so carefully construct test data to include in the input files.

  2. Configure test namelist file Test/code/BTS_config.nml:

    • name_exe: the SUEWS binary name that will be used for testing.
    • dir_exe: the directory to copy name_exe.
    • dir_input: the directory to copy input files; suggested to be Release/InputTables/{version}.
    • dir_baserun: the base run against which to test identity in results.

Debugging with GDB

GDB is a generic debugging tool used along with gfortran. Here are some tips to debug SUEWS code:

GDB on macOS

Recent macOS (since High Sierra) introduces extra security procedures for system level operations that makes installation GDB more tedious than before. The best practice, in TS's option, to avoid hacking your macOS, is to use Linux docker images with gfortran&gdb installations: e.g., alpine-gfortran.

Once the docker image is installed, simply run this from the SUEWS root folder for debugging:

 docker run --rm -it -v $(pwd):/source cmplopes/alpine-gfortran /bin/bash

which will mount the current SUEWS directory to docker's path /source and enter the interactive mode for debugging.

debugging with GDB

  1. enable the debugging related flags in Makefile under SUEWS-SourceCode by removing the # after the equal sign =:
FCNOOPT = -O0
FFLAGS = -O3 $(STATIC) $(FCDEBUG) -Wall -Wtabs -fbounds-check -cpp \
                    -Wno-unused-dummy-argument -Wno-unused-variable
  1. fully clean and recompile SUEWS:

    make clean; make
  2. copy the recompiled SUEWS binary into your SUEWS testing folder (e.g., Test/BaseRun/2019a) and load it into GDB:

gdb SUEWS

run

then you should have stack info printed out by GDB if any runtime error occurs.

More detailed GDB tutorial can be found here.

Questions