Changeset 4861 for palm/trunk


Ignore:
Timestamp:
Feb 1, 2021 10:51:45 AM (4 years ago)
Author:
raasch
Message:

Implemented air temperature as diagnostic output quantity

File:
1 edited

Legend:

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

    r4828 r4861  
    1919! Current revisions:
    2020! ------------------
    21 !
     21! Implemented air temperature as diagnostic output quantity
    2222!
    2323! Former revisions:
     
    3131! 4671 2020-09-09 20:27:58Z pavelkrc
    3232! Implementation of downward facing USM and LSM surfaces
    33 ! 
     33!
    3434! 4583 2020-06-29 12:36:47Z raasch
    3535! file re-formatted to follow the PALM coding standard
     
    127127
    128128    USE basic_constants_and_equations_mod,                                                         &
    129         ONLY:  kappa,                                                                              &
     129        ONLY:  degc_to_k,                                                                          &
     130               kappa,                                                                              &
    130131               pi,                                                                                 &
    131132               magnus,                                                                             &
     
    203204    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  rh     !< relative humidity
    204205    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  rh_av  !< avg. relative humidity
     206    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  ta     !< air temperature
     207    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  ta_av  !< avg. air temperature
    205208    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  ti     !< rotation(u,v,w) aka turbulence intensity
    206209    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  ti_av  !< avg. rotation(u,v,w) aka turbulence intensity
     
    339342             rh_av = 0.0_wp
    340343
     344          CASE ( 'ta' )
     345             IF ( .NOT. ALLOCATED( ta_av ) )  THEN
     346                ALLOCATE( ta_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     347             ENDIF
     348             ta_av = 0.0_wp
     349
    341350          CASE ( 'ti' )
    342351             IF ( .NOT. ALLOCATED( ti_av ) )  THEN
     
    430439                      DO  k = nzb, nzt+1
    431440                         rh_av(k,j,i) = rh_av(k,j,i) + rh(k,j,i)
     441                      ENDDO
     442                   ENDDO
     443                ENDDO
     444             ENDIF
     445
     446          CASE ( 'ta' )
     447             IF ( ALLOCATED( ta_av ) )  THEN
     448                DO  i = nxl, nxr
     449                   DO  j = nys, nyn
     450                      DO  k = nzb, nzt+1
     451                         ta_av(k,j,i) = ta_av(k,j,i) + ta(k,j,i)
    432452                      ENDDO
    433453                   ENDDO
     
    584604             ENDIF
    585605
     606          CASE ( 'ta' )
     607             IF ( ALLOCATED( ta_av ) )  THEN
     608                DO  i = nxl, nxr
     609                   DO  j = nys, nyn
     610                      DO  k = nzb, nzt+1
     611                         ta_av(k,j,i) = ta_av(k,j,i) / REAL( average_count_3d, KIND=wp )
     612                      ENDDO
     613                   ENDDO
     614                ENDDO
     615             ENDIF
     616
    586617          CASE ( 'ti' )
    587618             IF ( ALLOCATED( ti_av ) )  THEN
     
    752783          unit = '%'
    753784
     785       CASE ( 'ta' )
     786          unit = 'degree_C'
     787
    754788       CASE ( 'ti' )
    755789          unit = '1/s'
     
    868902!--    s grid
    869903       CASE ( 'rh', 'rh_xy', 'rh_xz', 'rh_yz',                                                     &
     904              'ta', 'ta_xy', 'ta_xz', 'ta_yz',                                                     &
    870905              'ti', 'ti_xy', 'ti_xz', 'ti_yz',                                                     &
    871906              'wspeed', 'wspeed_xy', 'wspeed_xz', 'wspeed_yz',                                     &
     
    9741009           IF ( mode == 'xy' )  grid = 'zu'
    9751010
     1011       CASE ( 'ta_xy', 'ta_xz', 'ta_yz' )
     1012           IF ( av == 0 )  THEN
     1013              to_be_resorted => ta
     1014           ELSE
     1015              IF ( .NOT. ALLOCATED( ta_av ) )  THEN
     1016                 ALLOCATE( ta_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     1017                 ta_av = REAL( fill_value, KIND = wp )
     1018              ENDIF
     1019              to_be_resorted => ta_av
     1020           ENDIF
     1021           flag_nr = 0
     1022
     1023           IF ( mode == 'xy' )  grid = 'zu'
     1024
    9761025       CASE ( 'ti_xy', 'ti_xz', 'ti_yz' )
    9771026           IF ( av == 0 )  THEN
     
    12261275          flag_nr = 0
    12271276
     1277       CASE ( 'ta' )
     1278          IF ( av == 0 )  THEN
     1279             to_be_resorted => ta
     1280          ELSE
     1281             IF ( .NOT. ALLOCATED( ta ) )  THEN
     1282                ALLOCATE( ta(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     1283                ta = REAL( fill_value, KIND = wp )
     1284             ENDIF
     1285             to_be_resorted => ta
     1286          ENDIF
     1287          flag_nr = 0
     1288
    12281289       CASE ( 'ti' )
    12291290          IF ( av == 0 )  THEN
     
    14171478          ELSE
    14181479             to_be_resorted => rh_av
     1480          ENDIF
     1481          grid = 's'
     1482          flag_nr = 0
     1483
     1484       CASE ( 'ta' )
     1485          IF ( av == 0 )  THEN
     1486             to_be_resorted => ta
     1487          ELSE
     1488             to_be_resorted => ta_av
    14191489          ENDIF
    14201490          grid = 's'
     
    15971667             ENDIF
    15981668!
     1669!--       Allocate array for 'air temperature'
     1670          CASE ( 'ta' )
     1671             IF ( .NOT. ALLOCATED( ta ) )  THEN
     1672                ALLOCATE( ta(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     1673                ta = 0.0_wp
     1674             ENDIF
     1675!
    15991676!--       Allocate array for 'turbulence intensity'
    16001677          CASE ( 'ti' )
     
    17761853                                     * MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 1 ) )
    17771854                      ENDIF
     1855                   ENDDO
     1856                ENDDO
     1857             ENDDO
     1858!
     1859!--       ta (air temperature)
     1860          CASE ( 'ta' )
     1861             DO  i = nxl, nxr
     1862                DO  j = nys, nyn
     1863                   DO  k = nzb+1, nzt
     1864                      ta(k,j,i) = exner(k) * pt(k,j,i) - degc_to_k
    17781865                   ENDDO
    17791866                ENDDO
     
    22002287                      tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    22012288
     2289       CASE ( 'ta_av' )
     2290          IF ( .NOT. ALLOCATED( ta_av ) )  THEN
     2291             ALLOCATE( ta_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2292          ENDIF
     2293          IF ( k == 1 )  READ ( 13 )  tmp_3d
     2294          ta_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =                                       &
     2295                      tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     2296
    22022297       CASE ( 'ti_av' )
    22032298          IF ( .NOT. ALLOCATED( ti_av ) )  THEN
     
    23212416    ENDIF
    23222417
     2418    CALL rd_mpi_io_check_array( 'ta_av' , found = array_found )
     2419    IF ( array_found )  THEN
     2420       IF ( .NOT. ALLOCATED( ta_av ) )  ALLOCATE( ta_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2421       CALL rrd_mpi_io( 'ta_av', ta_av )
     2422    ENDIF
     2423
    23232424    CALL rd_mpi_io_check_array( 'ti_av' , found = array_found )
    23242425    IF ( array_found )  THEN
     
    24232524       ENDIF
    24242525
     2526       IF ( ALLOCATED( ta_av ) )  THEN
     2527          CALL wrd_write_string( 'ta_av' )
     2528          WRITE ( 14 )  ta_av
     2529       ENDIF
     2530
    24252531       IF ( ALLOCATED( ti_av ) )  THEN
    24262532          CALL wrd_write_string( 'ti_av' )
     
    24872593       IF ( ALLOCATED( pt_2m_av ) )     CALL wrd_mpi_io( 'pt_2m_av', pt_2m_av )
    24882594       IF ( ALLOCATED( rh_av ) )        CALL wrd_mpi_io( 'rh_av', rh_av )
     2595       IF ( ALLOCATED( ta_av ) )        CALL wrd_mpi_io( 'ta_av', ta_av )
    24892596       IF ( ALLOCATED( ti_av ) )        CALL wrd_mpi_io( 'ti_av', ti_av )
    24902597       IF ( ALLOCATED( u_center_av ) )  CALL wrd_mpi_io( 'u_center_av', u_center_av )
Note: See TracChangeset for help on using the changeset viewer.