Ignore:
Timestamp:
Nov 22, 2018 11:24:52 AM (5 years ago)
Author:
gronemeier
Message:

renamed variable if to ivar; add variable description

File:
1 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/SOURCE/data_output_2d.f90

    r3525 r3554  
    2525! -----------------
    2626! $Id$
     27! - add variable description
     28! - rename variable 'if' into 'ivar'
     29! - removed namelist LOCAL
     30! - removed variable rtext
     31!
     32! 3525 2018-11-14 16:06:14Z kanani
    2733! Changes related to clean-up of biometeorology (dom_dwd_user)
    2834!
     
    337343    IMPLICIT NONE
    338344
    339     CHARACTER (LEN=2)  ::  do2d_mode    !<
    340     CHARACTER (LEN=2)  ::  mode         !<
    341     CHARACTER (LEN=4)  ::  grid         !<
    342     CHARACTER (LEN=50) ::  rtext        !<
     345    CHARACTER (LEN=2)  ::  do2d_mode    !< output mode of variable ('xy', 'xz', 'yz')
     346    CHARACTER (LEN=2)  ::  mode         !< mode with which the routine is called ('xy', 'xz', 'yz')
     347    CHARACTER (LEN=4)  ::  grid         !< string defining the vertical grid
    343348   
    344     INTEGER(iwp) ::  av        !<
    345     INTEGER(iwp) ::  ngp       !<
    346     INTEGER(iwp) ::  file_id   !<
     349    INTEGER(iwp) ::  av        !< flag for (non-)average output
     350    INTEGER(iwp) ::  ngp       !< number of grid points of an output slice
     351    INTEGER(iwp) ::  file_id   !< id of output files
    347352    INTEGER(iwp) ::  flag_nr   !< number of masking flag
    348     INTEGER(iwp) ::  i         !<
    349     INTEGER(iwp) ::  if        !<
    350     INTEGER(iwp) ::  is        !<
    351     INTEGER(iwp) ::  iis       !<
    352     INTEGER(iwp) ::  j         !<
    353     INTEGER(iwp) ::  k         !<
    354     INTEGER(iwp) ::  l         !<
    355     INTEGER(iwp) ::  layer_xy  !<
    356     INTEGER(iwp) ::  m         !<
    357     INTEGER(iwp) ::  n         !<
    358     INTEGER(iwp) ::  nis       !<
    359     INTEGER(iwp) ::  ns        !<
     353    INTEGER(iwp) ::  i         !< loop index
     354    INTEGER(iwp) ::  iis       !< vertical index of a xy slice in array 'local_2d_sections'
     355    INTEGER(iwp) ::  is        !< slice index
     356    INTEGER(iwp) ::  ivar      !< variable index
     357    INTEGER(iwp) ::  j         !< loop index
     358    INTEGER(iwp) ::  k         !< loop index
     359    INTEGER(iwp) ::  l         !< loop index
     360    INTEGER(iwp) ::  layer_xy  !< vertical index of a xy slice in array 'local_pf'
     361    INTEGER(iwp) ::  m         !< loop index
     362    INTEGER(iwp) ::  n         !< loop index
     363    INTEGER(iwp) ::  nis       !< number of vertical slices to be written via parallel NetCDF output
     364    INTEGER(iwp) ::  ns        !< number of output slices
    360365    INTEGER(iwp) ::  nzb_do    !< lower limit of the data field (usually nzb)
    361366    INTEGER(iwp) ::  nzt_do    !< upper limit of the data field (usually nzt+1)
    362     INTEGER(iwp) ::  s_ind     !<
    363     INTEGER(iwp) ::  sender    !<
    364     INTEGER(iwp) ::  ind(4)    !<
     367    INTEGER(iwp) ::  s_ind     !< index of slice types (xy=1, xz=2, yz=3)
     368    INTEGER(iwp) ::  sender    !< PE id of sending PE
     369    INTEGER(iwp) ::  ind(4)    !< index limits (lower/upper bounds) of array 'local_2d'
     370
     371    LOGICAL ::  found          !< true if output variable was found
     372    LOGICAL ::  resorted       !< true if variable is resorted
     373    LOGICAL ::  two_d          !< true if variable is only two dimensional
     374
     375    REAL(wp) ::  mean_r        !< mean particle radius
     376    REAL(wp) ::  s_r2          !< sum( particle-radius**2 )
     377    REAL(wp) ::  s_r3          !< sum( particle-radius**3 )
    365378   
    366     LOGICAL ::  found          !<
    367     LOGICAL ::  resorted       !<
    368     LOGICAL ::  two_d          !<
    369    
    370     REAL(wp) ::  mean_r        !<
    371     REAL(wp) ::  s_r2          !<
    372     REAL(wp) ::  s_r3          !<
    373    
    374     REAL(wp), DIMENSION(:), ALLOCATABLE     ::  level_z             !<
    375     REAL(wp), DIMENSION(:,:), ALLOCATABLE   ::  local_2d            !<
    376     REAL(wp), DIMENSION(:,:), ALLOCATABLE   ::  local_2d_l          !<
    377 
    378     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  local_pf            !<
    379     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  local_2d_sections   !<
    380     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  local_2d_sections_l !<
     379    REAL(wp), DIMENSION(:), ALLOCATABLE     ::  level_z             !< z levels for output array
     380    REAL(wp), DIMENSION(:,:), ALLOCATABLE   ::  local_2d            !< local 2-dimensional array containing output values
     381    REAL(wp), DIMENSION(:,:), ALLOCATABLE   ::  local_2d_l          !< local 2-dimensional array containing output values
     382
     383    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  local_pf            !< output array
     384    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  local_2d_sections   !< local array containing values at all slices
     385    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  local_2d_sections_l !< local array containing values at all slices
    381386
    382387#if defined( __parallel )
    383     REAL(wp), DIMENSION(:,:),   ALLOCATABLE ::  total_2d    !<
    384 #endif
    385     REAL(wp), DIMENSION(:,:,:), POINTER ::  to_be_resorted  !<
    386 
    387     NAMELIST /LOCAL/  rtext
     388    REAL(wp), DIMENSION(:,:),   ALLOCATABLE ::  total_2d    !< same as local_2d
     389#endif
     390    REAL(wp), DIMENSION(:,:,:), POINTER ::  to_be_resorted  !< points to array which shall be output
    388391
    389392!
     
    543546!-- Loop of all variables to be written.
    544547!-- Output dimensions chosen
    545     if = 1
    546     l = MAX( 2, LEN_TRIM( do2d(av,if) ) )
    547     do2d_mode = do2d(av,if)(l-1:l)
    548 
    549     DO  WHILE ( do2d(av,if)(1:1) /= ' ' )
     548    ivar = 1
     549    l = MAX( 2, LEN_TRIM( do2d(av,ivar) ) )
     550    do2d_mode = do2d(av,ivar)(l-1:l)
     551
     552    DO  WHILE ( do2d(av,ivar)(1:1) /= ' ' )
    550553
    551554       IF ( do2d_mode == mode )  THEN
     
    567570!--       Store the array chosen on the temporary array.
    568571          resorted = .FALSE.
    569           SELECT CASE ( TRIM( do2d(av,if) ) )
     572          SELECT CASE ( TRIM( do2d(av,ivar) ) )
    570573             CASE ( 'e_xy', 'e_xz', 'e_yz' )
    571574                IF ( av == 0 )  THEN
     
    11351138!--             Substitute the values generated by "mirror" boundary condition
    11361139!--             at the bottom boundary by the real surface values.
    1137                 IF ( do2d(av,if) == 'u_xz'  .OR.  do2d(av,if) == 'u_yz' )  THEN
     1140                IF ( do2d(av,ivar) == 'u_xz'  .OR.  do2d(av,ivar) == 'u_yz' )  THEN
    11381141                   IF ( ibc_uv_b == 0 )  local_pf(:,:,nzb) = 0.0_wp
    11391142                ENDIF
     
    11861189!--             Substitute the values generated by "mirror" boundary condition
    11871190!--             at the bottom boundary by the real surface values.
    1188                 IF ( do2d(av,if) == 'v_xz'  .OR.  do2d(av,if) == 'v_yz' )  THEN
     1191                IF ( do2d(av,ivar) == 'v_xz'  .OR.  do2d(av,ivar) == 'v_yz' )  THEN
    11891192                   IF ( ibc_uv_b == 0 )  local_pf(:,:,nzb) = 0.0_wp
    11901193                ENDIF
     
    13161319!--             Quantities of other modules
    13171320                IF ( .NOT. found  .AND.  bulk_cloud_model )  THEN
    1318                    CALL bcm_data_output_2d( av, do2d(av,if), found, grid, mode,&
     1321                   CALL bcm_data_output_2d( av, do2d(av,ivar), found, grid, mode,&
    13191322                                            local_pf, two_d, nzb_do, nzt_do )
    13201323                ENDIF
    13211324
    13221325                IF ( .NOT. found  .AND.  gust_module_enabled )  THEN
    1323                    CALL gust_data_output_2d( av, do2d(av,if), found, grid,     &
     1326                   CALL gust_data_output_2d( av, do2d(av,ivar), found, grid,     &
    13241327                                             local_pf, two_d, nzb_do, nzt_do )
    13251328                ENDIF
     
    13271330                IF ( .NOT. found  .AND.  biometeorology                        &
    13281331                                  .AND.  mode == 'xy' )  THEN
    1329                    CALL bio_data_output_2d( av, do2d(av,if), found, grid,      &
     1332                   CALL bio_data_output_2d( av, do2d(av,ivar), found, grid,      &
    13301333                                            local_pf, two_d, nzb_do, nzt_do,   &
    13311334                                            fill_value )
     
    13331336
    13341337                IF ( .NOT. found  .AND.  land_surface )  THEN
    1335                    CALL lsm_data_output_2d( av, do2d(av,if), found, grid, mode,&
     1338                   CALL lsm_data_output_2d( av, do2d(av,ivar), found, grid, mode,&
    13361339                                            local_pf, two_d, nzb_do, nzt_do )
    13371340                ENDIF
    13381341
    13391342                IF ( .NOT. found  .AND.  ocean_mode )  THEN
    1340                    CALL ocean_data_output_2d( av, do2d(av,if), found, grid,    &
     1343                   CALL ocean_data_output_2d( av, do2d(av,ivar), found, grid,    &
    13411344                                              mode, local_pf, nzb_do, nzt_do )
    13421345                ENDIF
    13431346
    13441347                IF ( .NOT. found  .AND.  radiation )  THEN
    1345                    CALL radiation_data_output_2d( av, do2d(av,if), found, grid,&
     1348                   CALL radiation_data_output_2d( av, do2d(av,ivar), found, grid,&
    13461349                                                  mode, local_pf, two_d,       &
    13471350                                                  nzb_do, nzt_do  )
     
    13491352               
    13501353                IF ( .NOT. found  .AND.  salsa )  THEN
    1351                    CALL salsa_data_output_2d( av, do2d(av,if), found, grid,    &
     1354                   CALL salsa_data_output_2d( av, do2d(av,ivar), found, grid,    &
    13521355                                              mode, local_pf, two_d )
    13531356                ENDIF                 
    13541357
    13551358                IF ( .NOT. found  .AND.  uv_exposure )  THEN
    1356                    CALL uvem_data_output_2d( av, do2d(av,if), found, grid,     &
     1359                   CALL uvem_data_output_2d( av, do2d(av,ivar), found, grid,     &
    13571360                                             local_pf, two_d, nzb_do, nzt_do )
    13581361                ENDIF
    13591362
    13601363                IF ( .NOT. found  .AND.  air_chemistry )  THEN
    1361                    CALL chem_data_output_2d( av, do2d(av,if), found, grid, mode, &
     1364                   CALL chem_data_output_2d( av, do2d(av,ivar), found, grid, mode, &
    13621365                                             local_pf, two_d, nzb_do, nzt_do, fill_value )
    13631366                ENDIF
     
    13651368!--             User defined quantities
    13661369                IF ( .NOT. found )  THEN
    1367                    CALL user_data_output_2d( av, do2d(av,if), found, grid,     &
     1370                   CALL user_data_output_2d( av, do2d(av,ivar), found, grid,     &
    13681371                                             local_pf, two_d, nzb_do, nzt_do )
    13691372                ENDIF
     
    13831386                IF ( .NOT. found )  THEN
    13841387                   message_string = 'no output provided for: ' //              &
    1385                                     TRIM( do2d(av,if) )
     1388                                    TRIM( do2d(av,ivar) )
    13861389                   CALL message( 'data_output_2d', 'PA0181', 0, 0, 0, 6, 0 )
    13871390                ENDIF
     
    15561559                            IF ( two_d ) THEN
    15571560                               nc_stat = NF90_PUT_VAR( id_set_xy(av),       &
    1558                                                        id_var_do2d(av,if),  &
     1561                                                       id_var_do2d(av,ivar),  &
    15591562                                                       total_2d(0:nx,0:ny), &
    15601563                             start = (/ 1, 1, 1, do2d_xy_time_count(av) /), &
     
    15621565                            ELSE
    15631566                               nc_stat = NF90_PUT_VAR( id_set_xy(av),       &
    1564                                                        id_var_do2d(av,if),  &
     1567                                                       id_var_do2d(av,ivar),  &
    15651568                                                       total_2d(0:nx,0:ny), &
    15661569                            start = (/ 1, 1, is, do2d_xy_time_count(av) /), &
     
    15941597                   IF ( two_d ) THEN
    15951598                      nc_stat = NF90_PUT_VAR( id_set_xy(av),                &
    1596                                               id_var_do2d(av,if),           &
     1599                                              id_var_do2d(av,ivar),           &
    15971600                                              local_2d(nxl:nxr,nys:nyn),    &
    15981601                             start = (/ 1, 1, 1, do2d_xy_time_count(av) /), &
     
    16001603                   ELSE
    16011604                      nc_stat = NF90_PUT_VAR( id_set_xy(av),                &
    1602                                               id_var_do2d(av,if),           &
     1605                                              id_var_do2d(av,ivar),           &
    16031606                                              local_2d(nxl:nxr,nys:nyn),    &
    16041607                            start = (/ 1, 1, is, do2d_xy_time_count(av) /), &
     
    17861789#if defined( __netcdf )
    17871790                            nc_stat = NF90_PUT_VAR( id_set_xz(av),             &
    1788                                                  id_var_do2d(av,if),           &
     1791                                                 id_var_do2d(av,ivar),           &
    17891792                                                 total_2d(0:nx,nzb_do:nzt_do), &
    17901793                               start = (/ 1, is, 1, do2d_xz_time_count(av) /), &
     
    18271830#if defined( __netcdf )
    18281831                   nc_stat = NF90_PUT_VAR( id_set_xz(av),                   &
    1829                                            id_var_do2d(av,if),              &
     1832                                           id_var_do2d(av,ivar),              &
    18301833                                           local_2d(nxl:nxr,nzb_do:nzt_do), &
    18311834                            start = (/ 1, is, 1, do2d_xz_time_count(av) /), &
     
    20042007#if defined( __netcdf )
    20052008                            nc_stat = NF90_PUT_VAR( id_set_yz(av),             &
    2006                                                  id_var_do2d(av,if),           &
     2009                                                 id_var_do2d(av,ivar),           &
    20072010                                                 total_2d(0:ny,nzb_do:nzt_do), &
    20082011                            start = (/ is, 1, 1, do2d_yz_time_count(av) /),    &
     
    20452048#if defined( __netcdf )
    20462049                   nc_stat = NF90_PUT_VAR( id_set_yz(av),                   &
    2047                                            id_var_do2d(av,if),              &
     2050                                           id_var_do2d(av,ivar),              &
    20482051                                           local_2d(nys:nyn,nzb_do:nzt_do), &
    20492052                            start = (/ is, 1, 1, do2d_xz_time_count(av) /), &
     
    20792082!                      IF ( nxr == nx  .AND.  nyn /= ny )  THEN
    20802083!                         nc_stat = NF90_PUT_VAR( id_set_xy(av),                &
    2081 !                                                 id_var_do2d(av,if),           &
     2084!                                                 id_var_do2d(av,ivar),           &
    20822085!                                                 local_2d_sections(nxl:nxr+1,  &
    20832086!                                                    nys:nyn,1:nis),            &
     
    20892092!                      ELSEIF ( nxr /= nx  .AND.  nyn == ny )  THEN
    20902093!                         nc_stat = NF90_PUT_VAR( id_set_xy(av),                &
    2091 !                                                 id_var_do2d(av,if),           &
     2094!                                                 id_var_do2d(av,ivar),           &
    20922095!                                                 local_2d_sections(nxl:nxr,    &
    20932096!                                                    nys:nyn+1,1:nis),          &
     
    20992102!                      ELSEIF ( nxr == nx  .AND.  nyn == ny )  THEN
    21002103!                         nc_stat = NF90_PUT_VAR( id_set_xy(av),                &
    2101 !                                                 id_var_do2d(av,if),           &
     2104!                                                 id_var_do2d(av,ivar),           &
    21022105!                                                 local_2d_sections(nxl:nxr+1,  &
    21032106!                                                    nys:nyn+1,1:nis),          &
     
    21092112!                      ELSE
    21102113                         nc_stat = NF90_PUT_VAR( id_set_xy(av),                &
    2111                                                  id_var_do2d(av,if),           &
     2114                                                 id_var_do2d(av,ivar),           &
    21122115                                                 local_2d_sections(nxl:nxr,    &
    21132116                                                    nys:nyn,1:nis),            &
     
    21512154!                      IF ( nxr == nx )  THEN
    21522155!                         nc_stat = NF90_PUT_VAR( id_set_xz(av),                &
    2153 !                                             id_var_do2d(av,if),               &
     2156!                                             id_var_do2d(av,ivar),               &
    21542157!                                             local_2d_sections(nxl:nxr+1,1:ns, &
    21552158!                                                nzb_do:nzt_do),                &
     
    21602163!                      ELSE
    21612164                         nc_stat = NF90_PUT_VAR( id_set_xz(av),                &
    2162                                              id_var_do2d(av,if),               &
     2165                                             id_var_do2d(av,ivar),               &
    21632166                                             local_2d_sections(nxl:nxr,1:ns,   &
    21642167                                                nzb_do:nzt_do),                &
     
    22012204!                      IF ( nyn == ny )  THEN
    22022205!                         nc_stat = NF90_PUT_VAR( id_set_yz(av),                &
    2203 !                                             id_var_do2d(av,if),               &
     2206!                                             id_var_do2d(av,ivar),               &
    22042207!                                             local_2d_sections(1:ns,           &
    22052208!                                                nys:nyn+1,nzb_do:nzt_do),      &
     
    22102213!                      ELSE
    22112214                         nc_stat = NF90_PUT_VAR( id_set_yz(av),                &
    2212                                              id_var_do2d(av,if),               &
     2215                                             id_var_do2d(av,ivar),               &
    22132216                                             local_2d_sections(1:ns,nys:nyn,   &
    22142217                                                nzb_do:nzt_do),                &
     
    22312234       ENDIF
    22322235
    2233        if = if + 1
    2234        l = MAX( 2, LEN_TRIM( do2d(av,if) ) )
    2235        do2d_mode = do2d(av,if)(l-1:l)
     2236       ivar = ivar + 1
     2237       l = MAX( 2, LEN_TRIM( do2d(av,ivar) ) )
     2238       do2d_mode = do2d(av,ivar)(l-1:l)
    22362239
    22372240    ENDDO
Note: See TracChangeset for help on using the changeset viewer.