Ignore:
Timestamp:
Sep 24, 2018 3:42:55 PM (3 years ago)
Author:
knoop
Message:

Modularization of all bulk cloud physics code components

File:
1 edited

Legend:

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

    r3241 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3241 2018-09-12 15:02:00Z raasch
    2730! unused variables removed
    2831!
     
    237240               precipitation_amount, prr, q, qc, ql, ql_c, ql_v, qr,           &
    238241               rho_ocean, s, sa, tend, u, v, vpt, w, zu, zw,                   &
    239                waterflux_output_conversion
    240        
     242               waterflux_output_conversion, hyrho, d_exner
     243
    241244    USE averaging
    242        
    243     USE cloud_parameters,                                                      &
    244         ONLY:  cp, hyrho, l_d_cp, l_v, pt_d_t
    245                
     245
     246    USE basic_constants_and_equations_mod,                                     &
     247        ONLY:  c_p, lv_d_cp, l_v
     248
     249    USE bulk_cloud_model_mod,                                                  &
     250        ONLY:  bulk_cloud_model, bcm_data_output_2d
     251
    246252    USE control_parameters,                                                    &
    247         ONLY:  cloud_physics, data_output_2d_on_each_pe, data_output_xy,       &
     253        ONLY:  data_output_2d_on_each_pe, data_output_xy,                      &
    248254               data_output_xz, data_output_yz, do2d,                           &
    249255               do2d_xy_last_time, do2d_xy_time_count,                          &
     
    254260               psolver, section, simulated_time,                               &
    255261               time_since_reference_point, uv_exposure
    256        
     262
    257263    USE cpulog,                                                                &
    258264        ONLY:  cpu_log, log_point
    259        
     265
    260266    USE gust_mod,                                                              &
    261267        ONLY:  gust_data_output_2d, gust_module_enabled
    262        
     268
    263269    USE indices,                                                               &
    264270        ONLY:  nbgp, nx, nxl, nxlg, nxr, nxrg, ny, nyn, nyng, nys, nysg,       &
    265271               nzb, nzt, wall_flags_0
    266                
     272
    267273    USE kinds
    268    
     274
    269275    USE land_surface_model_mod,                                                &
    270276        ONLY:  lsm_data_output_2d, zs
    271    
     277
    272278#if defined( __netcdf )
    273279    USE NETCDF
     
    579585                level_z(nzb+1) = zu(nzb+1)
    580586
    581              CASE ( 'nc_xy', 'nc_xz', 'nc_yz' )
    582                 IF ( av == 0 )  THEN
    583                    to_be_resorted => nc
    584                 ELSE
    585                    IF ( .NOT. ALLOCATED( nc_av ) ) THEN
    586                       ALLOCATE( nc_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    587                       nc_av = REAL( fill_value, KIND = wp )
    588                    ENDIF
    589                    to_be_resorted => nc_av
    590                 ENDIF
    591                 IF ( mode == 'xy' )  level_z = zu
    592 
    593              CASE ( 'nr_xy', 'nr_xz', 'nr_yz' )
    594                 IF ( av == 0 )  THEN
    595                    to_be_resorted => nr
    596                 ELSE
    597                    IF ( .NOT. ALLOCATED( nr_av ) ) THEN
    598                       ALLOCATE( nr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    599                       nr_av = REAL( fill_value, KIND = wp )
    600                    ENDIF
    601                    to_be_resorted => nr_av
    602                 ENDIF
    603                 IF ( mode == 'xy' )  level_z = zu
    604 
    605587             CASE ( 'ghf*_xy' )        ! 2d-array
    606588                IF ( av == 0 )  THEN
     
    756738                ENDIF
    757739
    758              CASE ( 'pra*_xy' )        ! 2d-array / integral quantity => no av
    759 !                CALL exchange_horiz_2d( precipitation_amount )
    760                    DO  i = nxl, nxr
    761                       DO  j = nys, nyn
    762                       local_pf(i,j,nzb+1) =  precipitation_amount(j,i)
    763                    ENDDO
    764                 ENDDO
    765                 precipitation_amount = 0.0_wp   ! reset for next integ. interval
    766                 resorted = .TRUE.
    767                 two_d = .TRUE.
    768                 level_z(nzb+1) = zu(nzb+1)
    769 
    770              CASE ( 'prr_xy', 'prr_xz', 'prr_yz' )
    771                 IF ( av == 0 )  THEN
    772 !                   CALL exchange_horiz( prr, nbgp )
    773                    DO  i = nxl, nxr
    774                       DO  j = nys, nyn
    775                          DO  k = nzb, nzt+1
    776                             local_pf(i,j,k) = prr(k,j,i) * hyrho(nzb+1)
    777                          ENDDO
    778                       ENDDO
    779                    ENDDO
    780                 ELSE
    781                    IF ( .NOT. ALLOCATED( prr_av ) ) THEN
    782                       ALLOCATE( prr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    783                       prr_av = REAL( fill_value, KIND = wp )
    784                    ENDIF
    785 !                   CALL exchange_horiz( prr_av, nbgp )
    786                    DO  i = nxl, nxr
    787                       DO  j = nys, nyn
    788                          DO  k = nzb, nzt+1
    789                             local_pf(i,j,k) = prr_av(k,j,i) * hyrho(nzb+1)
    790                          ENDDO
    791                       ENDDO
    792                    ENDDO
    793                 ENDIF
    794                 resorted = .TRUE.
    795                 IF ( mode == 'xy' )  level_z = zu
    796 
    797740             CASE ( 'pt_xy', 'pt_xz', 'pt_yz' )
    798741                IF ( av == 0 )  THEN
    799                    IF ( .NOT. cloud_physics ) THEN
     742                   IF ( .NOT. bulk_cloud_model ) THEN
    800743                      to_be_resorted => pt
    801744                   ELSE
     
    803746                      DO  j = nys, nyn
    804747                            DO  k = nzb, nzt+1
    805                                local_pf(i,j,k) = pt(k,j,i) + l_d_cp *          &
    806                                                              pt_d_t(k) *       &
     748                               local_pf(i,j,k) = pt(k,j,i) + lv_d_cp *         &
     749                                                             d_exner(k) *      &
    807750                                                             ql(k,j,i)
    808751                            ENDDO
     
    829772                   ENDIF
    830773                   to_be_resorted => q_av
    831                 ENDIF
    832                 IF ( mode == 'xy' )  level_z = zu
    833 
    834              CASE ( 'qc_xy', 'qc_xz', 'qc_yz' )
    835                 IF ( av == 0 )  THEN
    836                    to_be_resorted => qc
    837                 ELSE
    838                    IF ( .NOT. ALLOCATED( qc_av ) ) THEN
    839                       ALLOCATE( qc_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    840                       qc_av = REAL( fill_value, KIND = wp )
    841                    ENDIF
    842                    to_be_resorted => qc_av
    843774                ENDIF
    844775                IF ( mode == 'xy' )  level_z = zu
     
    921852                IF ( mode == 'xy' )  level_z = zu
    922853
    923              CASE ( 'qr_xy', 'qr_xz', 'qr_yz' )
    924                 IF ( av == 0 )  THEN
    925                    to_be_resorted => qr
    926                 ELSE
    927                    IF ( .NOT. ALLOCATED( qr_av ) ) THEN
    928                       ALLOCATE( qr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    929                       qr_av = REAL( fill_value, KIND = wp )
    930                    ENDIF
    931                    to_be_resorted => qr_av
    932                 ENDIF
    933                 IF ( mode == 'xy' )  level_z = zu
    934 
    935854             CASE ( 'qsws*_xy' )        ! 2d-array
    936855                IF ( av == 0 ) THEN
     
    1071990                      j = surf_lsm_h%j(m)
    1072991                      k = surf_lsm_h%k(m)
    1073                       local_pf(i,j,nzb+1) = surf_lsm_h%shf(m) * cp
     992                      local_pf(i,j,nzb+1) = surf_lsm_h%shf(m) * c_p
    1074993                   ENDDO
    1075994                   DO  m = 1, surf_usm_h%ns
     
    1077996                      j = surf_usm_h%j(m)
    1078997                      k = surf_usm_h%k(m)
    1079                       local_pf(i,j,nzb+1) = surf_usm_h%shf(m) * cp
     998                      local_pf(i,j,nzb+1) = surf_usm_h%shf(m) * c_p
    1080999                   ENDDO
    10811000                ELSE
     
    13871306
    13881307!
    1389 !--             Land surface model quantity
    1390                 IF ( land_surface )  THEN
    1391                    CALL lsm_data_output_2d( av, do2d(av,if), found, grid, mode,&
    1392                                             local_pf, two_d, nzb_do, nzt_do )
    1393                 ENDIF
    1394 
    1395 !
    13961308!--             Turbulence closure variables
    13971309                IF ( .NOT. found )  THEN
    13981310                   CALL tcm_data_output_2d( av, do2d(av,if), found, grid, mode,&
    13991311                                             local_pf, nzb_do, nzt_do )
     1312                ENDIF
     1313
     1314!
     1315!--             Microphysics module quantities
     1316                IF ( .NOT. found  .AND.  bulk_cloud_model )  THEN
     1317                   CALL bcm_data_output_2d( av, do2d(av,if), found, grid, mode,&
     1318                                            local_pf, two_d, nzb_do, nzt_do )
     1319                ENDIF
     1320
     1321!
     1322!--             Land surface model quantity
     1323                IF ( .NOT. found  .AND.  land_surface )  THEN
     1324                   CALL lsm_data_output_2d( av, do2d(av,if), found, grid, mode,&
     1325                                            local_pf, two_d, nzb_do, nzt_do )
    14001326                ENDIF
    14011327
     
    14171343!
    14181344!--             UV exposure model quantity
    1419                 IF ( uv_exposure )  THEN
     1345                IF ( .NOT. found  .AND.  uv_exposure )  THEN
    14201346                   CALL uvem_data_output_2d( av, do2d(av,if), found, grid,     &
    14211347                                             local_pf, two_d, nzb_do, nzt_do )
Note: See TracChangeset for help on using the changeset viewer.