Ignore:
Timestamp:
Mar 3, 2015 2:18:16 PM (7 years ago)
Author:
maronga
Message:

land surface model released

File:
1 edited

Legend:

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

    r1360 r1551  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! Added suppport for land surface model and radiation model output. In the course
     23! of this action, the limits for vertical loops have been changed (from nzb and
     24! nzt+1 to nzb_do and nzt_do, respectively in order to allow soil model output).
     25! Moreover, a new vertical grid zs was introduced.
    2326!
    2427! Former revisions:
     
    127130               
    128131    USE kinds
    129        
     132   
     133    USE land_surface_model_mod,                                                &
     134        ONLY:  c_liq, c_liq_av, c_soil_av, c_veg, c_veg_av, ghf_eb,            &
     135               ghf_eb_av, lai, lai_av, m_liq_eb, m_liq_eb_av, m_soil,          &
     136               m_soil_av, nzb_soil, nzt_soil, qsws_eb, qsws_eb_av,             &
     137               qsws_liq_eb, qsws_liq_eb_av, qsws_soil_eb, qsws_soil_eb_av,     &
     138               qsws_veg_eb, qsws_veg_eb_av, shf_eb, shf_eb_av, t_soil,         &
     139               t_soil_av, zs
     140   
    130141    USE netcdf_control
    131142
     
    135146   
    136147    USE pegrid
     148
     149    USE radiation_model_mod,                                                   &
     150        ONLY:  rad_net, rad_net_av, rad_sw_in, rad_sw_in_av
    137151
    138152    IMPLICIT NONE
     
    157171    INTEGER(iwp) ::  n         !:
    158172    INTEGER(iwp) ::  ns        !:
     173    INTEGER(iwp) ::  nzb_do    !: lower limit of the data field (usually nzb)
     174    INTEGER(iwp) ::  nzt_do    !: upper limit of the data field (usually nzt+1)
    159175    INTEGER(iwp) ::  psi       !:
    160176    INTEGER(iwp) ::  s         !:
     
    343359
    344360       IF ( do2d_mode == mode )  THEN
     361
     362          nzb_do = nzb
     363          nzt_do = nzt+1
    345364!
    346365!--       Store the array chosen on the temporary array.
     
    356375                IF ( mode == 'xy' )  level_z = zu
    357376
     377             CASE ( 'c_liq*_xy' )        ! 2d-array
     378                IF ( av == 0 )  THEN
     379                   DO  i = nxlg, nxrg
     380                      DO  j = nysg, nyng
     381                         local_pf(i,j,nzb+1) = c_liq(j,i) * c_veg(j,i)
     382                      ENDDO
     383                   ENDDO
     384                ELSE
     385                   DO  i = nxlg, nxrg
     386                      DO  j = nysg, nyng
     387                         local_pf(i,j,nzb+1) = c_liq_av(j,i)
     388                      ENDDO
     389                   ENDDO
     390                ENDIF
     391                resorted = .TRUE.
     392                two_d = .TRUE.
     393                level_z(nzb+1) = zu(nzb+1)
     394
     395             CASE ( 'c_soil*_xy' )        ! 2d-array
     396                IF ( av == 0 )  THEN
     397                   DO  i = nxlg, nxrg
     398                      DO  j = nysg, nyng
     399                         local_pf(i,j,nzb+1) = 1.0_wp - c_veg(j,i)
     400                      ENDDO
     401                   ENDDO
     402                ELSE
     403                   DO  i = nxlg, nxrg
     404                      DO  j = nysg, nyng
     405                         local_pf(i,j,nzb+1) = c_soil_av(j,i)
     406                      ENDDO
     407                   ENDDO
     408                ENDIF
     409                resorted = .TRUE.
     410                two_d = .TRUE.
     411                level_z(nzb+1) = zu(nzb+1)
     412
     413             CASE ( 'c_veg*_xy' )        ! 2d-array
     414                IF ( av == 0 )  THEN
     415                   DO  i = nxlg, nxrg
     416                      DO  j = nysg, nyng
     417                         local_pf(i,j,nzb+1) = c_veg(j,i)
     418                      ENDDO
     419                   ENDDO
     420                ELSE
     421                   DO  i = nxlg, nxrg
     422                      DO  j = nysg, nyng
     423                         local_pf(i,j,nzb+1) = c_veg_av(j,i)
     424                      ENDDO
     425                   ENDDO
     426                ENDIF
     427                resorted = .TRUE.
     428                two_d = .TRUE.
     429                level_z(nzb+1) = zu(nzb+1)
     430
     431             CASE ( 'ghf_eb*_xy' )        ! 2d-array
     432                IF ( av == 0 )  THEN
     433                   DO  i = nxlg, nxrg
     434                      DO  j = nysg, nyng
     435                         local_pf(i,j,nzb+1) = ghf_eb(j,i)
     436                      ENDDO
     437                   ENDDO
     438                ELSE
     439                   DO  i = nxlg, nxrg
     440                      DO  j = nysg, nyng
     441                         local_pf(i,j,nzb+1) = ghf_eb_av(j,i)
     442                      ENDDO
     443                   ENDDO
     444                ENDIF
     445                resorted = .TRUE.
     446                two_d = .TRUE.
     447                level_z(nzb+1) = zu(nzb+1)
     448
     449             CASE ( 'lai*_xy' )        ! 2d-array
     450                IF ( av == 0 )  THEN
     451                   DO  i = nxlg, nxrg
     452                      DO  j = nysg, nyng
     453                         local_pf(i,j,nzb+1) = lai(j,i)
     454                      ENDDO
     455                   ENDDO
     456                ELSE
     457                   DO  i = nxlg, nxrg
     458                      DO  j = nysg, nyng
     459                         local_pf(i,j,nzb+1) = lai_av(j,i)
     460                      ENDDO
     461                   ENDDO
     462                ENDIF
     463                resorted = .TRUE.
     464                two_d = .TRUE.
     465                level_z(nzb+1) = zu(nzb+1)
     466
    358467             CASE ( 'lpt_xy', 'lpt_xz', 'lpt_yz' )
    359468                IF ( av == 0 )  THEN
     
    382491                two_d = .TRUE.
    383492                level_z(nzb+1) = zu(nzb+1)
     493
     494             CASE ( 'm_liq_eb*_xy' )        ! 2d-array
     495                IF ( av == 0 )  THEN
     496                   DO  i = nxlg, nxrg
     497                      DO  j = nysg, nyng
     498                         local_pf(i,j,nzb+1) = m_liq_eb(j,i)
     499                      ENDDO
     500                   ENDDO
     501                ELSE
     502                   DO  i = nxlg, nxrg
     503                      DO  j = nysg, nyng
     504                         local_pf(i,j,nzb+1) = m_liq_eb_av(j,i)
     505                      ENDDO
     506                   ENDDO
     507                ENDIF
     508                resorted = .TRUE.
     509                two_d = .TRUE.
     510                level_z(nzb+1) = zu(nzb+1)
     511
     512             CASE ( 'm_soil_xy', 'm_soil_xz', 'm_soil_yz' )
     513                nzb_do = nzb_soil
     514                nzt_do = nzt_soil
     515                IF ( av == 0 )  THEN
     516                   to_be_resorted => m_soil
     517                ELSE
     518                   to_be_resorted => m_soil_av
     519                ENDIF
     520                IF ( mode == 'xy' )  level_z = zs
    384521
    385522             CASE ( 'nr_xy', 'nr_xz', 'nr_yz' )
     
    665802                level_z(nzb+1) = zu(nzb+1)
    666803
     804             CASE ( 'qsws_eb*_xy' )        ! 2d-array
     805                IF ( av == 0 ) THEN
     806                   DO  i = nxlg, nxrg
     807                      DO  j = nysg, nyng
     808                         local_pf(i,j,nzb+1) =  qsws_eb(j,i)
     809                      ENDDO
     810                   ENDDO
     811                ELSE
     812                   DO  i = nxlg, nxrg
     813                      DO  j = nysg, nyng
     814                         local_pf(i,j,nzb+1) =  qsws_eb_av(j,i)
     815                      ENDDO
     816                   ENDDO
     817                ENDIF
     818                resorted = .TRUE.
     819                two_d = .TRUE.
     820                level_z(nzb+1) = zu(nzb+1)
     821
     822             CASE ( 'qsws_liq_eb*_xy' )        ! 2d-array
     823                IF ( av == 0 ) THEN
     824                   DO  i = nxlg, nxrg
     825                      DO  j = nysg, nyng
     826                         local_pf(i,j,nzb+1) =  qsws_liq_eb(j,i)
     827                      ENDDO
     828                   ENDDO
     829                ELSE
     830                   DO  i = nxlg, nxrg
     831                      DO  j = nysg, nyng
     832                         local_pf(i,j,nzb+1) =  qsws_liq_eb_av(j,i)
     833                      ENDDO
     834                   ENDDO
     835                ENDIF
     836                resorted = .TRUE.
     837                two_d = .TRUE.
     838                level_z(nzb+1) = zu(nzb+1)
     839
     840             CASE ( 'qsws_soil_eb*_xy' )        ! 2d-array
     841                IF ( av == 0 ) THEN
     842                   DO  i = nxlg, nxrg
     843                      DO  j = nysg, nyng
     844                         local_pf(i,j,nzb+1) =  qsws_soil_eb(j,i)
     845                      ENDDO
     846                   ENDDO
     847                ELSE
     848                   DO  i = nxlg, nxrg
     849                      DO  j = nysg, nyng
     850                         local_pf(i,j,nzb+1) =  qsws_soil_eb_av(j,i)
     851                      ENDDO
     852                   ENDDO
     853                ENDIF
     854                resorted = .TRUE.
     855                two_d = .TRUE.
     856                level_z(nzb+1) = zu(nzb+1)
     857
     858             CASE ( 'qsws_veg_eb*_xy' )        ! 2d-array
     859                IF ( av == 0 ) THEN
     860                   DO  i = nxlg, nxrg
     861                      DO  j = nysg, nyng
     862                         local_pf(i,j,nzb+1) =  qsws_veg_eb(j,i)
     863                      ENDDO
     864                   ENDDO
     865                ELSE
     866                   DO  i = nxlg, nxrg
     867                      DO  j = nysg, nyng
     868                         local_pf(i,j,nzb+1) =  qsws_veg_eb_av(j,i)
     869                      ENDDO
     870                   ENDDO
     871                ENDIF
     872                resorted = .TRUE.
     873                two_d = .TRUE.
     874                level_z(nzb+1) = zu(nzb+1)
     875
    667876             CASE ( 'qv_xy', 'qv_xz', 'qv_yz' )
    668877                IF ( av == 0 )  THEN
     
    680889                IF ( mode == 'xy' )  level_z = zu
    681890
     891             CASE ( 'rad_net*_xy' )        ! 2d-array
     892                IF ( av == 0 ) THEN
     893                   DO  i = nxlg, nxrg
     894                      DO  j = nysg, nyng
     895                         local_pf(i,j,nzb+1) =  rad_net(j,i)
     896                      ENDDO
     897                   ENDDO
     898                ELSE
     899                   DO  i = nxlg, nxrg
     900                      DO  j = nysg, nyng
     901                         local_pf(i,j,nzb+1) =  rad_net_av(j,i)
     902                      ENDDO
     903                   ENDDO
     904                ENDIF
     905                resorted = .TRUE.
     906                two_d = .TRUE.
     907                level_z(nzb+1) = zu(nzb+1)
     908
     909             CASE ( 'rad_sw_in*_xy' )        ! 2d-array
     910                IF ( av == 0 ) THEN
     911                   DO  i = nxlg, nxrg
     912                      DO  j = nysg, nyng
     913                         local_pf(i,j,nzb+1) =  rad_sw_in(j,i)
     914                      ENDDO
     915                   ENDDO
     916                ELSE
     917                   DO  i = nxlg, nxrg
     918                      DO  j = nysg, nyng
     919                         local_pf(i,j,nzb+1) =  rad_sw_in_av(j,i)
     920                      ENDDO
     921                   ENDDO
     922                ENDIF
     923                resorted = .TRUE.
     924                two_d = .TRUE.
     925                level_z(nzb+1) = zu(nzb+1)
     926
    682927             CASE ( 'rho_xy', 'rho_xz', 'rho_yz' )
    683928                IF ( av == 0 )  THEN
     
    719964                level_z(nzb+1) = zu(nzb+1)
    720965
     966             CASE ( 'shf_eb*_xy' )        ! 2d-array
     967                IF ( av == 0 ) THEN
     968                   DO  i = nxlg, nxrg
     969                      DO  j = nysg, nyng
     970                         local_pf(i,j,nzb+1) =  shf_eb(j,i)
     971                      ENDDO
     972                   ENDDO
     973                ELSE
     974                   DO  i = nxlg, nxrg
     975                      DO  j = nysg, nyng
     976                         local_pf(i,j,nzb+1) =  shf_eb_av(j,i)
     977                      ENDDO
     978                   ENDDO
     979                ENDIF
     980                resorted = .TRUE.
     981                two_d = .TRUE.
     982                level_z(nzb+1) = zu(nzb+1)
     983
    721984             CASE ( 't*_xy' )        ! 2d-array
    722985                IF ( av == 0 )  THEN
     
    736999                two_d = .TRUE.
    7371000                level_z(nzb+1) = zu(nzb+1)
     1001
     1002             CASE ( 't_soil_xy', 't_soil_xz', 't_soil_yz' )
     1003                nzb_do = nzb_soil
     1004                nzt_do = nzt_soil
     1005                IF ( av == 0 )  THEN
     1006                   to_be_resorted => t_soil
     1007                ELSE
     1008                   to_be_resorted => t_soil_av
     1009                ENDIF
     1010                IF ( mode == 'xy' )  level_z = zs
    7381011
    7391012             CASE ( 'u_xy', 'u_xz', 'u_yz' )
     
    8391112!--             User defined quantity
    8401113                CALL user_data_output_2d( av, do2d(av,if), found, grid,        &
    841                                           local_pf, two_d )
     1114                                          local_pf, two_d, nzb_do, nzt_do )
    8421115                resorted = .TRUE.
    8431116
     
    8481121                ELSEIF ( grid == 'zu1' ) THEN
    8491122                   IF ( mode == 'xy' )  level_z(nzb+1) = zu(nzb+1)
     1123                ELSEIF ( grid == 'zs' ) THEN
     1124                   IF ( mode == 'xy' )  level_z = zs
    8501125                ENDIF
    8511126
     
    8631138             DO  i = nxlg, nxrg
    8641139                DO  j = nysg, nyng
    865                    DO  k = nzb, nzt+1
     1140                   DO  k = nzb_do, nzt_do
    8661141                      local_pf(i,j,k) = to_be_resorted(k,j,i)
    8671142                   ENDDO
     
    8741149!--       section mode chosen.
    8751150          is = 1
    876    loop1: DO  WHILE ( section(is,s) /= -9999  .OR.  two_d )
     1151   loop1: DO WHILE ( section(is,s) /= -9999  .OR.  two_d )
    8771152
    8781153             SELECT CASE ( mode )
     
    8851160                   ELSE
    8861161                      layer_xy = section(is,s)
     1162                   ENDIF
     1163
     1164!
     1165!--                Exit the loop for layers beyond the data output domain
     1166!--                (used for soil model)
     1167                   IF ( layer_xy .GT. nzt_do )  THEN
     1168                      EXIT loop1
    8871169                   ENDIF
    8881170
     
    9161198!
    9171199!--                   Carry out the averaging (all data are on the PE)
    918                       DO  k = nzb, nzt+1
     1200                      DO  k = nzb_do, nzt_do
    9191201                         DO  j = nysg, nyng
    9201202                            DO  i = nxlg, nxrg
     
    9241206                      ENDDO
    9251207
    926                       local_2d = local_2d / ( nzt -nzb + 2.0_wp)
     1208                      local_2d = local_2d / ( nzt_do - nzb_do + 1.0_wp)
    9271209
    9281210                   ELSE
     
    9671249                         DO  i = 0, io_blocks-1
    9681250                            IF ( i == io_group )  THEN
    969                                WRITE ( 21 )  nxlg, nxrg, nysg, nyng
     1251                               WRITE ( 21 )  nxlg, nxrg, nysg, nyng, nysg, nyng
    9701252                               WRITE ( 21 )  local_2d
    9711253                            ENDIF
     
    11031385                   IF ( section(is,s) == -1 )  THEN
    11041386
    1105                       ALLOCATE( local_2d_l(nxlg:nxrg,nzb:nzt+1) )
     1387                      ALLOCATE( local_2d_l(nxlg:nxrg,nzb_do:nzt_do) )
    11061388                      local_2d_l = 0.0_wp
    1107                       ngp = ( nxrg-nxlg+1 ) * ( nzt-nzb+2 )
     1389                      ngp = ( nxrg-nxlg + 1 ) * ( nzt_do-nzb_do + 1 )
    11081390!
    11091391!--                   First local averaging on the PE
    1110                       DO  k = nzb, nzt+1
     1392                      DO  k = nzb_do, nzt_do
    11111393                         DO  j = nys, nyn
    11121394                            DO  i = nxlg, nxrg
     
    11201402!--                   Now do the averaging over all PEs along y
    11211403                      IF ( collective_wait )  CALL MPI_BARRIER( comm2d, ierr )
    1122                       CALL MPI_ALLREDUCE( local_2d_l(nxlg,nzb),                &
    1123                                           local_2d(nxlg,nzb), ngp, MPI_REAL,   &
     1404                      CALL MPI_ALLREDUCE( local_2d_l(nxlg,nzb_do),                &
     1405                                          local_2d(nxlg,nzb_do), ngp, MPI_REAL,   &
    11241406                                          MPI_SUM, comm1dy, ierr )
    11251407#else
     
    11361418                      IF ( section(is,s) >= nys  .AND.  section(is,s) <= nyn ) &
    11371419                      THEN
    1138                          local_2d = local_pf(:,section(is,s),nzb:nzt+1)
     1420                         local_2d = local_pf(:,section(is,s),nzb_do:nzt_do)
    11391421                      ENDIF
    11401422
     
    11571439!--                      output file afterwards to increase the performance.
    11581440                         DO  i = nxlg, nxrg
    1159                             DO  k = nzb, nzt+1
     1441                            DO  k = nzb_do, nzt_do
    11601442                               local_2d_sections_l(i,is,k) = local_2d(i,k)
    11611443                            ENDDO
     
    11841466                                      nys-1 == -1 ) )                          &
    11851467                               THEN
    1186                                   WRITE (22)  nxlg, nxrg, nzb, nzt+1
     1468                                  WRITE (22)  nxlg, nxrg, nzb_do, nzt_do, nzb, nzt+1
    11871469                                  WRITE (22)  local_2d
    11881470                               ELSE
    1189                                   WRITE (22)  -1, -1, -1, -1
     1471                                  WRITE (22)  -1, -1, -1, -1, -1, -1
    11901472                               ENDIF
    11911473                            ENDIF
     
    12031485                         CALL MPI_BARRIER( comm2d, ierr )
    12041486
    1205                          ngp = ( nxrg-nxlg+1 ) * ( nzt-nzb+2 )
     1487                         ngp = ( nxrg-nxlg + 1 ) * ( nzt_do-nzb_do + 1 )
    12061488                         IF ( myid == 0 )  THEN
    12071489!
     
    12111493                                 ( section(is,s) == -1  .AND.  nys-1 == -1 ) ) &
    12121494                            THEN
    1213                                total_2d(nxlg:nxrg,nzb:nzt+1) = local_2d
     1495                               total_2d(nxlg:nxrg,nzb_do:nzt_do) = local_2d
    12141496                            ENDIF
    12151497!
     
    12401522!--                         Relocate the local array for the next loop increment
    12411523                            DEALLOCATE( local_2d )
    1242                             ALLOCATE( local_2d(nxlg:nxrg,nzb:nzt+1) )
     1524                            ALLOCATE( local_2d(nxlg:nxrg,nzb_do:nzt_do) )
    12431525
    12441526#if defined( __netcdf )
    12451527                            nc_stat = NF90_PUT_VAR( id_set_xz(av),          &
    12461528                                                 id_var_do2d(av,if),        &
    1247                                                  total_2d(0:nx+1,nzb:nzt+1),&
     1529                                                 total_2d(0:nx+1,nzb_do:nzt_do),&
    12481530                            start = (/ 1, is, 1, do2d_xz_time_count(av) /), &
    1249                                              count = (/ nx+2, 1, nz+2, 1 /) )
     1531                                             count = (/ nx+2, 1, nzt_do-nzb_do+1, 1 /) )
    12501532                            CALL handle_netcdf_error( 'data_output_2d', 58 )
    12511533#endif
     
    12601542                            THEN
    12611543                               ind(1) = nxlg; ind(2) = nxrg
    1262                                ind(3) = nzb;   ind(4) = nzt+1
     1544                               ind(3) = nzb_do;   ind(4) = nzt_do
    12631545                            ELSE
    12641546                               ind(1) = -9999; ind(2) = -9999
     
    12701552!--                         If applicable, send data to PE0.
    12711553                            IF ( ind(1) /= -9999 )  THEN
    1272                                CALL MPI_SEND( local_2d(nxlg,nzb), ngp,         &
     1554                               CALL MPI_SEND( local_2d(nxlg,nzb_do), ngp,         &
    12731555                                              MPI_REAL, 0, 1, comm2d, ierr )
    12741556                            ENDIF
     
    12861568                   nc_stat = NF90_PUT_VAR( id_set_xz(av),                   &
    12871569                                           id_var_do2d(av,if),              &
    1288                                            local_2d(nxl:nxr+1,nzb:nzt+1),   &
     1570                                           local_2d(nxl:nxr+1,nzb_do:nzt_do),   &
    12891571                            start = (/ 1, is, 1, do2d_xz_time_count(av) /), &
    1290                                            count = (/ nx+2, 1, nz+2, 1 /) )
     1572                                           count = (/ nx+2, 1, nzt_do-nzb_do+1, 1 /) )
    12911573                   CALL handle_netcdf_error( 'data_output_2d', 451 )
    12921574#endif
     
    13221604                   IF ( section(is,s) == -1 )  THEN
    13231605
    1324                       ALLOCATE( local_2d_l(nysg:nyng,nzb:nzt+1) )
     1606                      ALLOCATE( local_2d_l(nysg:nyng,nzb_do:nzt_do) )
    13251607                      local_2d_l = 0.0_wp
    1326                       ngp = ( nyng-nysg+1 ) * ( nzt-nzb+2 )
     1608                      ngp = ( nyng-nysg+1 ) * ( nzt_do-nzb_do+1 )
    13271609!
    13281610!--                   First local averaging on the PE
    1329                       DO  k = nzb, nzt+1
     1611                      DO  k = nzb_do, nzt_do
    13301612                         DO  j = nysg, nyng
    13311613                            DO  i = nxl, nxr
     
    13391621!--                   Now do the averaging over all PEs along x
    13401622                      IF ( collective_wait )  CALL MPI_BARRIER( comm2d, ierr )
    1341                       CALL MPI_ALLREDUCE( local_2d_l(nysg,nzb),                &
    1342                                           local_2d(nysg,nzb), ngp, MPI_REAL,   &
     1623                      CALL MPI_ALLREDUCE( local_2d_l(nysg,nzb_do),                &
     1624                                          local_2d(nysg,nzb_do), ngp, MPI_REAL,   &
    13431625                                          MPI_SUM, comm1dx, ierr )
    13441626#else
     
    13551637                      IF ( section(is,s) >= nxl  .AND.  section(is,s) <= nxr ) &
    13561638                      THEN
    1357                          local_2d = local_pf(section(is,s),:,nzb:nzt+1)
     1639                         local_2d = local_pf(section(is,s),:,nzb_do:nzt_do)
    13581640                      ENDIF
    13591641
     
    13761658!--                      output file afterwards to increase the performance.
    13771659                         DO  j = nysg, nyng
    1378                             DO  k = nzb, nzt+1
     1660                            DO  k = nzb_do, nzt_do
    13791661                               local_2d_sections_l(is,j,k) = local_2d(j,k)
    13801662                            ENDDO
     
    14031685                                      nxl-1 == -1 ) )                          &
    14041686                               THEN
    1405                                   WRITE (23)  nysg, nyng, nzb, nzt+1
     1687                                  WRITE (23)  nysg, nyng, nzb_do, nzt_do, nzb, nzt+1
    14061688                                  WRITE (23)  local_2d
    14071689                               ELSE
    1408                                   WRITE (23)  -1, -1, -1, -1
     1690                                  WRITE (23)  -1, -1, -1, -1, -1, -1
    14091691                               ENDIF
    14101692                            ENDIF
     
    14221704                         CALL MPI_BARRIER( comm2d, ierr )
    14231705
    1424                          ngp = ( nyng-nysg+1 ) * ( nzt-nzb+2 )
     1706                         ngp = ( nyng-nysg+1 ) * ( nzt_do-nzb_do+1 )
    14251707                         IF ( myid == 0 )  THEN
    14261708!
     
    14301712                                 ( section(is,s) == -1  .AND.  nxl-1 == -1 ) ) &
    14311713                            THEN
    1432                                total_2d(nysg:nyng,nzb:nzt+1) = local_2d
     1714                               total_2d(nysg:nyng,nzb_do:nzt_do) = local_2d
    14331715                            ENDIF
    14341716!
     
    14591741!--                         Relocate the local array for the next loop increment
    14601742                            DEALLOCATE( local_2d )
    1461                             ALLOCATE( local_2d(nysg:nyng,nzb:nzt+1) )
     1743                            ALLOCATE( local_2d(nysg:nyng,nzb_do:nzt_do) )
    14621744
    14631745#if defined( __netcdf )
    14641746                            nc_stat = NF90_PUT_VAR( id_set_yz(av),          &
    14651747                                                 id_var_do2d(av,if),        &
    1466                                                  total_2d(0:ny+1,nzb:nzt+1),&
     1748                                                 total_2d(0:ny+1,nzb_do:nzt_do),&
    14671749                            start = (/ is, 1, 1, do2d_yz_time_count(av) /), &
    1468                                              count = (/ 1, ny+2, nz+2, 1 /) )
     1750                                             count = (/ 1, ny+2, nzt_do-nzb_do+1, 1 /) )
    14691751                            CALL handle_netcdf_error( 'data_output_2d', 61 )
    14701752#endif
     
    14791761                            THEN
    14801762                               ind(1) = nysg; ind(2) = nyng
    1481                                ind(3) = nzb;   ind(4) = nzt+1
     1763                               ind(3) = nzb_do;   ind(4) = nzt_do
    14821764                            ELSE
    14831765                               ind(1) = -9999; ind(2) = -9999
     
    14891771!--                         If applicable, send data to PE0.
    14901772                            IF ( ind(1) /= -9999 )  THEN
    1491                                CALL MPI_SEND( local_2d(nysg,nzb), ngp,         &
     1773                               CALL MPI_SEND( local_2d(nysg,nzb_do), ngp,         &
    14921774                                              MPI_REAL, 0, 1, comm2d, ierr )
    14931775                            ENDIF
     
    15051787                   nc_stat = NF90_PUT_VAR( id_set_yz(av),                   &
    15061788                                           id_var_do2d(av,if),              &
    1507                                            local_2d(nys:nyn+1,nzb:nzt+1),   &
     1789                                           local_2d(nys:nyn+1,nzb_do:nzt_do),   &
    15081790                            start = (/ is, 1, 1, do2d_xz_time_count(av) /), &
    1509                                            count = (/ 1, ny+2, nz+2, 1 /) )
     1791                                           count = (/ 1, ny+2, nzt_do-nzb_do+1, 1 /) )
    15101792                   CALL handle_netcdf_error( 'data_output_2d', 452 )
    15111793#endif
     
    15951877!
    15961878!--                      Distribute data over all PEs along y
    1597                          ngp = ( nxrg-nxlg+1 ) * ( nzt-nzb+2 ) * ns
     1879                         ngp = ( nxrg-nxlg+1 ) * ( nzt_do-nzb_do+1 ) * ns
    15981880                         IF ( collective_wait ) CALL MPI_BARRIER( comm2d, ierr )
    1599                          CALL MPI_ALLREDUCE( local_2d_sections_l(nxlg,1,nzb),  &
    1600                                              local_2d_sections(nxlg,1,nzb),    &
     1881                         CALL MPI_ALLREDUCE( local_2d_sections_l(nxlg,1,nzb_do),  &
     1882                                             local_2d_sections(nxlg,1,nzb_do),    &
    16011883                                             ngp, MPI_REAL, MPI_SUM, comm1dy,  &
    16021884                                             ierr )
     
    16121894                                             id_var_do2d(av,if),               &
    16131895                                             local_2d_sections(nxl:nxr+1,1:ns, &
    1614                                                 nzb:nzt+1),                    &
     1896                                                nzb_do:nzt_do),                &
    16151897                                             start = (/ nxl+1, 1, 1,           &
    16161898                                                do2d_xz_time_count(av) /),     &
    1617                                              count = (/ nxr-nxl+2, ns, nzt+2,  &
     1899                                             count = (/ nxr-nxl+2, ns, nzt_do-nzb_do+1,  &
    16181900                                                        1 /) )
    16191901                      ELSE
     
    16211903                                             id_var_do2d(av,if),               &
    16221904                                             local_2d_sections(nxl:nxr,1:ns,   &
    1623                                                 nzb:nzt+1),                    &
     1905                                                nzb_do:nzt_do),                &
    16241906                                             start = (/ nxl+1, 1, 1,           &
    16251907                                                do2d_xz_time_count(av) /),     &
    1626                                              count = (/ nxr-nxl+1, ns, nzt+2,  &
     1908                                             count = (/ nxr-nxl+1, ns, nzt_do-nzb_do+1,  &
    16271909                                                1 /) )
    16281910                      ENDIF
     
    16471929                         ngp = ( nyng-nysg+1 ) * ( nzt-nzb + 2 ) * ns
    16481930                         IF ( collective_wait ) CALL MPI_BARRIER( comm2d, ierr )
    1649                          CALL MPI_ALLREDUCE( local_2d_sections_l(1,nysg,nzb),  &
    1650                                              local_2d_sections(1,nysg,nzb),    &
     1931                         CALL MPI_ALLREDUCE( local_2d_sections_l(1,nysg,nzb_do),  &
     1932                                             local_2d_sections(1,nysg,nzb_do),    &
    16511933                                             ngp, MPI_REAL, MPI_SUM, comm1dx,  &
    16521934                                             ierr )
     
    16621944                                             id_var_do2d(av,if),               &
    16631945                                             local_2d_sections(1:ns,           &
    1664                                                 nys:nyn+1,nzb:nzt+1),          &
     1946                                                nys:nyn+1,nzb_do:nzt_do),      &
    16651947                                             start = (/ 1, nys+1, 1,           &
    16661948                                                do2d_yz_time_count(av) /),     &
    16671949                                             count = (/ ns, nyn-nys+2,         &
    1668                                                         nzt+2, 1 /) )
     1950                                                        nzt_do-nzb_do+1, 1 /) )
    16691951                      ELSE
    16701952                         nc_stat = NF90_PUT_VAR( id_set_yz(av),                &
    16711953                                             id_var_do2d(av,if),               &
    16721954                                             local_2d_sections(1:ns,nys:nyn,   &
    1673                                                 nzb:nzt+1),                    &
     1955                                                nzb_do:nzt_do),                &
    16741956                                             start = (/ 1, nys+1, 1,           &
    16751957                                                do2d_yz_time_count(av) /),     &
    16761958                                             count = (/ ns, nyn-nys+1,         &
    1677                                                         nzt+2, 1 /) )
     1959                                                        nzt_do-nzb_do+1, 1 /) )
    16781960                      ENDIF
    16791961
Note: See TracChangeset for help on using the changeset viewer.