Ignore:
Timestamp:
Jul 27, 2018 1:36:03 PM (3 years ago)
Author:
suehring
Message:

New Inifor features: grid stretching, improved command-interface, support start dates in different formats in both YYYYMMDD and YYYYMMDDHH, Ability to manually control input file prefixes (--radiation-prefix, --soil-preifx, --flow-prefix, --soilmoisture-prefix) for compatiblity with DWD forcast naming scheme; GNU-style short and long option; Prepared output of large-scale forcing profiles (no computation yet); Added preprocessor flag netcdf4 to switch output format between netCDF 3 and 4; Updated netCDF variable names and attributes to comply with PIDS v1.9; Inifor bugfixes: Improved compatibility with older Intel Intel compilers by avoiding implicit array allocation; Added origin_lon/_lat values and correct reference time in dynamic driver global attributes; corresponding PALM changes: adjustments to revised Inifor; variables names in dynamic driver adjusted; enable geostrophic forcing also in offline nested mode; variable names in LES-LES and COSMO offline nesting changed; lateral boundary flags for nesting, in- and outflow conditions renamed

Location:
palm/trunk/UTIL/inifor/tests
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/UTIL/inifor/tests/test-boundaries.f90

    r2718 r3182  
    2121! Current revisions:
    2222! -----------------
     23! Updated test for new PALM grid strechting
    2324!
    2425!
     
    5455    TYPE(grid_definition)           ::  boundary_grid
    5556
    56     REAL ::  dx, dy, dz, lx, ly, lz, x(2), y(10), z(10)
     57    REAL ::  dx, dy, dz, lx, ly, lz, x(2), y(10)
     58    REAL, TARGET :: z(10)
    5759
    5860    CALL begin_test(title, res)
     
    7981          xmin = x(i), xmax = x(i),                                            &
    8082          ymin =  0.5 * dy, ymax = ly - 0.5 * dy,                              &
    81           zmin =  0.5 * dz, zmax = lz - 0.5 * dz,                              &
    8283          x0 = 0.0, y0 = 0.0, z0 = 0.0,                                        &
    83           nx = 0, ny = ny, nz = nz,                                            &
    84           dx = dx, dy = dy, dz = dz )
     84          nx = 0, ny = ny, nz = nz, z = z)
     85         
    8586   
    8687       ! Assert
     
    103104    TYPE(grid_definition), INTENT(INOUT) ::  grid
    104105
    105     DEALLOCATE( grid % x, grid % y, grid % z )
     106    DEALLOCATE( grid % x, grid % y )
    106107    DEALLOCATE( grid % kk )
    107108    DEALLOCATE( grid % w_verti )
  • palm/trunk/UTIL/inifor/tests/test-grid.f90

    r2718 r3182  
    2121! Current revisions:
    2222! -----------------
     23! Updated test for new PALM grid strechting
    2324!
    2425!
     
    4142 PROGRAM test_grid
    4243
    43     USE grid, ONLY :  grid_definition, init_grid_definition
     44    USE grid, ONLY :  grid_definition, init_grid_definition, dx, dy, dz
    4445    USE test_utils
    4546   
     
    4950    LOGICAL                     ::  res
    5051
    51     TYPE(grid_definition) ::  mygrid
    52     INTEGER               ::  i
    53     INTEGER, PARAMETER    ::  nx = 9,   ny = 19,   nz = 29
    54     REAL, PARAMETER       ::  lx = 100., ly = 200., lz = 300.
    55     REAL, DIMENSION(0:nx) ::  x, xu
    56     REAL, DIMENSION(0:ny) ::  y, yv
    57     REAL, DIMENSION(0:nz) ::  z, zw
     52    TYPE(grid_definition)   ::  mygrid
     53    INTEGER                 ::  i
     54    INTEGER, PARAMETER      ::  nx = 9,   ny = 19,   nz = 29
     55    REAL, PARAMETER         ::  lx = 100., ly = 200., lz = 300.
     56    REAL, DIMENSION(0:nx)   ::  x, xu
     57    REAL, DIMENSION(0:ny)   ::  y, yv
     58    REAL, DIMENSION(1:nz)   ::  z
     59    REAL, DIMENSION(1:nz-1) ::  zw
    5860
    5961    CALL begin_test(title, res)
    6062
    6163    ! Arange
     64    dx = lx / (nx + 1)
     65    DO i = 0, nx
     66       xu(i) = real(i) / (nx+1) * lx
     67       x(i)  = 0.5*dx + xu(i)
     68    END DO
     69
     70    dy = ly / (ny + 1)
     71    DO i = 0, ny
     72       yv(i) = real(i) / (ny+1) * ly
     73       y(i)  = 0.5*dy + yv(i)
     74    END DO
     75
     76    dz(:) = lz / (nz + 1)
     77    DO i = 1, nz
     78       IF (i < nz)  zw(i) = real(i) / (nz+1) * lz
     79       z(i) = 0.5*dz(1) + zw(i)
     80    END DO
     81
     82    ! Act
    6283    CALL init_grid_definition('palm', grid = mygrid,                           &
    6384                              xmin = 0., xmax = lx,                            &
    6485                              ymin = 0., ymax = ly,                            &
    65                               zmin = 0., zmax = lz,                            &
    6686                              x0 = 0.0, y0 = 0.0, z0 = 0.0,                    &
    67                               nx = nx, ny = ny, nz = nz)
    68 
    69     ! Act
    70     DO i = 0, nx
    71        xu(i) = real(i) / (nx+1) * lx
    72        x(i)  = 0.5*mygrid%dx + xu(i)
    73     END DO
    74     DO i = 0, ny
    75        yv(i) = real(i) / (ny+1) * ly
    76        y(i)  = 0.5*mygrid%dy + yv(i)
    77     END DO
    78     DO i = 0, nz
    79        zw(i) = real(i) / (nz+1) * lz
    80        z(i)  = 0.5*mygrid%dz + zw(i)
    81     END DO
     87                              nx = nx, ny = ny, nz = nz,                       &
     88                              z = z, zw = zw)
    8289
    8390    ! Assert coordinates match
     
    8592    res = res .AND. assert_equal(xu(1:), mygrid%xu, "xu")
    8693    res = res .AND. assert_equal(y,      mygrid%y,  "y" )
    87     res = res .AND. assert_equal(yv(1:), mygrid%yv, "yu")
     94    res = res .AND. assert_equal(yv(1:), mygrid%yv, "yv")
    8895    res = res .AND. assert_equal(z,      mygrid%z,  "z" )
    89     res = res .AND. assert_equal(zw(1:), mygrid%zw, "zu")
     96    res = res .AND. assert_equal(zw(1:), mygrid%zw, "zw")
    9097
    9198    CALL end_test(title, res)
  • palm/trunk/UTIL/inifor/tests/test-input-files.f90

    r2718 r3182  
    2121! Current revisions:
    2222! -----------------
    23 !
     23! New test for negative start_hour and greater-than-one step_hour
     24!
    2425!
    2526! Former revisions:
     
    4445        ONLY :  PATH
    4546    USE grid,                                                                  &
    46         ONLY :  input_file_list
     47        ONLY :  get_input_file_list
    4748    USE test_utils
    4849   
    4950    IMPLICIT NONE
    5051
    51     CHARACTER(LEN=50)                              ::  title
     52    CHARACTER(LEN=60)                              ::  title
    5253    CHARACTER(LEN=PATH), ALLOCATABLE, DIMENSION(:) ::  file_list, ref_list
    5354    LOGICAL                                        ::  res
    54     INTEGER                                        ::  i     
     55    INTEGER                                        ::  i
    5556
    5657    title = "input files - daylight saving to standard time"
     
    7071
    7172    ! Act
    72     CALL input_file_list(start_date_string='2017102823',                       &
    73                          start_hour=0, end_hour=5, step_hour=1,                &
    74                          path='./', prefix="laf", suffix='-test',              &
    75                          file_list=file_list)
     73    CALL get_input_file_list(start_date_string='2017102823',                   &
     74                             start_hour=0, end_hour=5, step_hour=1,            &
     75                             path='./', prefix="laf", suffix='-test',          &
     76                             file_list=file_list)
    7677
    7778    ! Assert
     
    9596
    9697    ! Act
    97     CALL input_file_list(start_date_string='2016022823',                       &
    98                          start_hour=0, end_hour=1, step_hour=1,                &
    99                          path='./', prefix="laf", suffix='-test',              &
    100                          file_list=file_list)
     98    CALL get_input_file_list(start_date_string='2016022823',                   &
     99                             start_hour=0, end_hour=1, step_hour=1,            &
     100                             path='./', prefix="laf", suffix='-test',          &
     101                             file_list=file_list)
     102
     103    ! Assert
     104    DO i = 1, 2
     105       res = res .AND. (TRIM(ref_list(i)) .EQ. TRIM(file_list(i)))
     106    END DO
     107
     108    DEALLOCATE( ref_list, file_list )
     109    CALL end_test(title, res)
     110
     111
     112
     113    title = "input files - negative start_hour and step_hour > 1 hour"
     114    CALL begin_test(title, res)
     115
     116    ! Arange
     117    ! ...a date range that inlcudes a leap day (29. Feb. 2016) which should be
     118    ! inlcuded in UTC time stamps.
     119    ALLOCATE( ref_list(4) )
     120    ref_list(1)  = './laf2017102823-test.nc'
     121    ref_list(2)  = './laf2017102901-test.nc'
     122    ref_list(3)  = './laf2017102903-test.nc'
     123    ref_list(4)  = './laf2017102904-test.nc'
     124
     125    ! Act
     126    CALL get_input_file_list(start_date_string='2017102901',                   &
     127                             start_hour=-2, end_hour=3, step_hour=2,           &
     128                             path='./', prefix="laf", suffix='-test',          &
     129                             file_list=file_list)
     130
     131    PRINT *, file_list
    101132
    102133    ! Assert
  • palm/trunk/UTIL/inifor/tests/test-interpolation.f90

    r2718 r3182  
    2121! Current revisions:
    2222! -----------------
    23 !
     23! Updated test for new grid_definition
     24!
    2425!
    2526! Former revisions:
     
    7677                              xmin = -5.0 * TO_RADIANS, xmax = 5.5 * TO_RADIANS, &
    7778                              ymin = -5.0 * TO_RADIANS, ymax = 6.5 * TO_RADIANS, &
    78                               zmin =  0.0, zmax = 10.0,                        &
    7979                              x0 = 0.0, y0 = 0.0, z0 = 0.0,                    &
    8080                              nx = nlon-1, ny = nlat-1, nz = nlev-1)
     
    8686    res = assert_equal( (/cosmo_grid%lat(0), cosmo_grid % lon(0),              &
    8787                          cosmo_grid%lat(2), cosmo_grid % lon(2),              &
    88                           cosmo_grid%dx*TO_DEGREES, cosmo_grid%dy*TO_DEGREES/),&
     88                          (cosmo_grid%lon(1) - cosmo_grid%lon(0))*TO_DEGREES,  &
     89                          (cosmo_grid%lat(1) - cosmo_grid%lat(0))*TO_DEGREES/),&
    8990                        (/-5.0 * TO_RADIANS, -5.0 * TO_RADIANS,                &
    9091                           6.5 * TO_RADIANS,  5.5 * TO_RADIANS,                &
     
    9798                              xmin = 0.0, xmax = 1.0,                          &
    9899                              ymin = 0.0, ymax = 1.0,                          &
    99                               zmin = 0.0, zmax = 1.0,                          &
    100100                              x0 = 0.0, y0 = 0.0, z0 = 0.0,                    &
    101101                              nx = 1, ny = 1, nz = 1)
     
    127127    ! Act
    128128    CALL find_horizontal_neighbours(cosmo_grid % lat, cosmo_grid % lon,        &
    129        cosmo_grid % dxi, cosmo_grid % dyi, palm_grid % clat, palm_grid % clon, &
    130        palm_grid % ii, palm_grid % jj)
     129                                    palm_grid % clat, palm_grid % clon,        &
     130                                    palm_grid % ii, palm_grid % jj)
    131131
    132132    ! Assert
     
    178178    ! Act
    179179    CALL find_horizontal_neighbours(cosmo_grid % lat, cosmo_grid % lon,        &
    180        cosmo_grid % dxi, cosmo_grid % dyi, palm_grid % clat, palm_grid % clon, &
    181        palm_grid % ii, palm_grid % jj)
     180                                    palm_grid % clat, palm_grid % clon,        &
     181                                    palm_grid % ii, palm_grid % jj)
    182182
    183183    CALL compute_horizontal_interp_weights(cosmo_grid % lat, cosmo_grid % lon, &
    184        cosmo_grid % dxi, cosmo_grid % dyi, palm_grid % clat,                   &
    185        palm_grid % clon, palm_grid % ii, palm_grid % jj, palm_grid % w_horiz)
     184                                           palm_grid % clat, palm_grid % clon, &
     185                                           palm_grid % ii, palm_grid % jj,     &
     186                                           palm_grid % w_horiz)
    186187
    187188    ! Assert
  • palm/trunk/UTIL/inifor/tests/test-prototype.f90

    r2718 r3182  
    2121! Current revisions:
    2222! -----------------
    23 !
     23! Added usage hints
    2424!
    2525! Former revisions:
     
    5151
    5252    ! Arange
     53    !define parameters and reference values
    5354
    5455    ! Act
     56    !compute result
    5557
    5658    ! Assert
     59    !res = res .AND. assert_equal(<result_array>, <reference_array>, 'description')
    5760
    5861    CALL end_test(title, res)
  • palm/trunk/UTIL/inifor/tests/util.f90

    r2718 r3182  
    2121! Current revisions:
    2222! -----------------
     23! Expose error measure as parameter in assert_equal()
    2324!
    2425!
     
    7475    END SUBROUTINE end_test
    7576
    76     LOGICAL FUNCTION assert_equal(a, b, msg)
     77    LOGICAL FUNCTION assert_equal(a, b, msg, ratio)
     78       REAL, OPTIONAL, INTENT(IN)     ::  ratio
    7779       REAL, DIMENSION(:), INTENT(IN) ::  a, b
    78        CHARACTER(LEN=*), INTENT(IN)   :: msg
     80       CHARACTER(LEN=*), INTENT(IN)   ::  msg
    7981
    80        assert_equal = assert(a, b, 'eq')
     82       IF ( PRESENT(ratio) )  THEN
     83           assert_equal = assert(a, b, 'eq', ratio)
     84       ELSE
     85           assert_equal = assert(a, b, 'eq')
     86       END IF
     87
    8188       IF (assert_equal .eqv. .TRUE.)  THEN
    8289           PRINT *, "Equality assertion for ", msg, " was successful."
     
    8895    END FUNCTION assert_equal
    8996
    90     LOGICAL FUNCTION assert(a, b, mode, eps)
     97    LOGICAL FUNCTION assert(a, b, mode, ratio)
    9198
    9299       REAL, DIMENSION(:), INTENT(IN) ::  a, b
    93        REAL, OPTIONAL, INTENT(IN)     ::  eps
     100       REAL, OPTIONAL, INTENT(IN)     ::  ratio
    94101       CHARACTER(LEN=*), INTENT(IN)   ::  mode
    95102
     
    98105
    99106       max_rel_diff = 10 * EPSILON(1.0)
    100        IF (PRESENT(eps)) max_rel_diff = eps
     107       IF (PRESENT(ratio)) max_rel_diff = ratio
    101108
    102109       SELECT CASE( TRIM(mode) )
Note: See TracChangeset for help on using the changeset viewer.