= The PALM Test Suite = PALM features a test suite to ensure its reliability while development goes forward. It can be executed locally. For available options and their description type: {{{ #!sh palmtest --help }}} == How to add a test case == Any developer can add new test cases. All test cases are stored within trunk/TESTS/cases. Please follow the layout of already existing cases and make sure the reference files in the MONITORING and OUTPUT sub-directories are valid and reproducible according to the parameters specified in its respective case_config.yml file. It is the developers responsibility to make sure that the newly added test case succeeds at the time it is added! All methodical errors associated with a specific test case that arise later, are also the initial developers responsibility. In case a commit breaks a test, the developer who performed that specific commit is responsible for fixing it. == Rules for test case development == Please to comply with the following Rules while developing new test cases: 1. The test case must be executable at least on 4 cores. 2. The execution time of the test case on a single core should not exceed 10 seconds. 3. The test case is only allowed to be committed after the developer made sure that the test can run successful on the server. 4. If a test case creates problems that are not fixable within an acceptable timeframe, the test case will be disabled. The test case may be added again, once all problems are solved. == List of proposed test cases == ||='''Name''' =||='''Description''' =||='''Status''' =||='''Responsible Developers''' =|| || ex_lsm_clearsky ||Basic LSM setup ||Implemented ||Katrin || || ||FFTW / MG setup ||Missing || || || dispersion_eulerian_and_lpm ||passive scalar and pssive particle (LPM) setup - for passive tracers with SGS fluctuations ||Implemented || Johannes || || warm_air_bubble_lcm ||particle LCM setup - for cloud droplets including collision ||Implemented || Johannes || || warm_air_bubble_with_bcm ||bulk-microphysics setup ||Implemented || Johannes || || ||non-cyclic recycling setup ||Missing || || || ||non-cyclic turbulence generator setup ||Missing || || || ||cyclic fill setup ||Missing || || || ||all output activated setup ||Missing || || || ||nesting setup ||Missing || || || ||Setup for testing the wind turbine model ||Missing || || == List of proposed build setups == ||='''Name''' =||='''Description''' =||='''Status''' =||='''Responsible Developers''' =|| || ||different compiler: intel/cray/pgi ? ||Missing || || || ||non-MPI - should be serial. i.e. without {{{-D__parallel}}} (Siggi) ||Missing || || || ||hybrid MPI-OpenMP ||Missing || || || ||non-NetCDF - I think this is not necessary (Siggi) ||Missing || || || ||FFTW - only required after OpenACC is part of default code (Siggi) ||Missing || || || ||KPP_CHEM ||Missing || || ---- = The PALM Testserver = The server responsible for testing is a 32 Core shared memory node running Ubuntu Server 16.04. All software requirements for PALM have been installed using the following command: {{{ #!sh apt-get install subversion cmake gfortran mpich libmpich-dev libnetcdff-dev netcdf-bin libfftw3-dev }}} All palmtest specific requirements have been installed using the following commands: {{{ #!sh apt-get install python3-pip python3-urllib3 libcurl4-openssl-dev python-setuptools python3 -m pip install numpy netCDF4 PyYAML }}} An automation server called Jenkins monitors our Subversion trunk and triggered by any commit onto the trunk it executes all PALM tests. Its front-end is served by an ngenx web-server and can be found [https://testserver.palm-model.org/ here]. Jenkins and all its dependencies were installed using the following command: {{{ #!sh apt-get install mailutils postfix nginx jenkins }}} Currently Let’s Encrypt is utilized to provide a valid certificate for a https connection. The Jenkins server hosts a project called palm_trunk, which runs the following test script based on a plain PALM installation within its workspace. {{{ #!sh #!/bin/bash palmtest --no-color --test-id "${BUILD_NUMBER}" result=$? if [[ ${result} -ne 0 ]]; then echo "" echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" echo "%%%%%%%%%%%%%%%%%%%% DUMPING palmtest.log %%%%%%%%%%%%%%%%%%%%%%%%" echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" cat ${WORKSPACE}/tests/${BUILD_NUMBER}/palmtest.log exit 1 else exit 0 fi }}}