Ignore:
Timestamp:
Nov 21, 2014 5:14:03 PM (10 years ago)
Author:
maronga
Message:

Minor bugfixes in prandtl_fluxes.f90

File:
1 edited

Legend:

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

    r1362 r1494  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! Bugfixes: qs is now calculated before calculation of Rif. Ccalculation of
     23! buoyancy flux in Rif corrected (added missing humidity term), allow use of
     24! topography for coupled runs (not tested)
    2325!
    2426! Former revisions:
     
    129131   
    130132       IF ( large_scale_forcing .AND. lsf_surf )  THEN
    131           pt(0,:,:) = pt_surface
     133          pt(nzb_s_inner(j,i),:,:) = pt_surface
    132134       ENDIF
    133135
     
    153155                b = SQRT( 1.0_wp - 16.0_wp * rif(j,i) * z0h(j,i) / z_p )
    154156
    155                 ts(j,i) = kappa * ( pt(k+1,j,i) - pt(k,j,i) ) /  (          &
    156                           LOG( z_p / z0h(j,i) ) -                           &
     157                ts(j,i) = kappa * ( pt(k+1,j,i) - pt(k,j,i) ) /  (             &
     158                          LOG( z_p / z0h(j,i) ) -                              &
    157159                          2.0_wp * LOG( ( 1.0_wp + a ) / ( 1.0_wp + b ) ) )
    158160             ENDIF
     
    160162          ENDDO
    161163       ENDDO
     164    ENDIF
     165
     166!
     167!-- If required compute q*
     168    IF ( humidity  .OR.  passive_scalar )  THEN
     169       IF ( constant_waterflux )  THEN
     170!
     171!--       For a given water flux in the Prandtl layer:
     172          !$OMP PARALLEL DO
     173          !$acc kernels loop
     174          DO  i = nxlg, nxrg
     175             DO  j = nysg, nyng
     176                qs(j,i) = -qsws(j,i) / ( us(j,i) + 1E-30_wp )
     177             ENDDO
     178          ENDDO
     179         
     180       ELSE
     181          coupled_run = ( coupling_mode == 'atmosphere_to_ocean' .AND. run_coupled )
     182
     183           IF ( large_scale_forcing .AND. lsf_surf )  THEN
     184              q(nzb_s_inner(j,i),:,:) = q_surface
     185           ENDIF
     186
     187          !$OMP PARALLEL DO PRIVATE( a, b, k, z_p )
     188          !$acc kernels loop independent
     189          DO  i = nxlg, nxrg
     190             !$acc loop independent
     191             DO  j = nysg, nyng
     192
     193                k   = nzb_s_inner(j,i)
     194                z_p = zu(k+1) - zw(k)
     195
     196!
     197!--             Assume saturation for atmosphere coupled to ocean (but not
     198!--             in case of precursor runs)
     199                IF ( coupled_run )  THEN
     200                   e_q = 6.1_wp * &
     201                           EXP( 0.07_wp * ( MIN(pt(k,j,i),pt(k+1,j,i)) - 273.15_wp ) )
     202                   q(k,j,i) = 0.622_wp * e_q / ( surface_pressure - e_q )
     203                ENDIF
     204                IF ( rif(j,i) >= 0.0_wp )  THEN
     205!
     206!--                Stable stratification
     207                   qs(j,i) = kappa * ( q(k+1,j,i) - q(k,j,i) ) / (             &
     208                                  LOG( z_p / z0h(j,i) ) +                      &
     209                                  5.0_wp * rif(j,i) * ( z_p - z0h(j,i) ) / z_p &
     210                                                                 )
     211                ELSE
     212!
     213!--                Unstable stratification
     214                   a = SQRT( 1.0_wp - 16.0_wp * rif(j,i) )
     215                   b = SQRT( 1.0_wp - 16.0_wp * rif(j,i) * z0h(j,i) / z_p )
     216 
     217                   qs(j,i) = kappa * ( q(k+1,j,i) - q(k,j,i) ) /   (           &
     218                             LOG( z_p / z0h(j,i) ) -                           &
     219                              2.0_wp * LOG( (1.0_wp + a ) / ( 1.0_wp + b ) ) )
     220                ENDIF
     221
     222             ENDDO
     223          ENDDO
     224       ENDIF
    162225    ENDIF
    163226
     
    190253             k   = nzb_s_inner(j,i)
    191254             z_p = zu(k+1) - zw(k)
    192              rif(j,i) = z_p * kappa * g *                            &
    193                         ( ts(j,i) + 0.61_wp * pt(k+1,j,i) * qs(j,i) ) / &
     255             rif(j,i) = z_p * kappa * g *                                      &
     256                        ( ts(j,i) + 0.61_wp * pt(k+1,j,i) * qs(j,i) + 0.61_wp  &
     257                          * q(k+1,j,i) * ts(j,i)) /                            &
    194258                        ( vpt(k+1,j,i) * ( us(j,i)**2 + 1E-30_wp ) )
    195259!
     
    218282!--       Compute the absolute value of the horizontal velocity
    219283!--       (relative to the surface)
    220           uv_total = SQRT( ( 0.5_wp * ( u(k+1,j,i) + u(k+1,j,i+1)        &
    221                                       - u(k,j,i)   - u(k,j,i+1) ) )**2 + &
    222                            ( 0.5_wp * ( v(k+1,j,i) + v(k+1,j+1,i)        &
     284          uv_total = SQRT( ( 0.5_wp * ( u(k+1,j,i) + u(k+1,j,i+1)              &
     285                                      - u(k,j,i)   - u(k,j,i+1) ) )**2 +       &
     286                           ( 0.5_wp * ( v(k+1,j,i) + v(k+1,j+1,i)              &
    223287                                      - v(k,j,i)   - v(k,j+1,i) ) )**2 )   
    224288
     
    227291!
    228292!--          Stable stratification
    229              us(j,i) = kappa * uv_total / (                                &
    230                                   LOG( z_p / z0(j,i) ) +                   &
    231                                   5.0_wp * rif(j,i) * ( z_p - z0(j,i) ) / z_p &
     293             us(j,i) = kappa * uv_total / (                                    &
     294                                  LOG( z_p / z0(j,i) ) +                       &
     295                                  5.0_wp * rif(j,i) * ( z_p - z0(j,i) ) / z_p  &
    232296                                          )
    233297          ELSE
     
    237301             b = SQRT( SQRT( 1.0_wp - 16.0_wp * rif(j,i) / z_p * z0(j,i) ) )
    238302
    239              us(j,i) = kappa * uv_total / (                                  &
    240                        LOG( z_p / z0(j,i) ) -                                &
    241                        LOG( ( 1.0_wp + a )**2 * ( 1.0_wp + a**2 ) / (              &
    242                             ( 1.0_wp + b )**2 * ( 1.0_wp + b**2 )   ) ) +          &
    243                                2.0_wp * ( ATAN( a ) - ATAN( b ) )                  &
     303             us(j,i) = kappa * uv_total / (                                    &
     304                       LOG( z_p / z0(j,i) ) -                                  &
     305                       LOG( ( 1.0_wp + a )**2 * ( 1.0_wp + a**2 ) / (          &
     306                            ( 1.0_wp + b )**2 * ( 1.0_wp + b**2 )   ) ) +      &
     307                               2.0_wp * ( ATAN( a ) - ATAN( b ) )              &
    244308                                           )
    245309          ENDIF
     
    271335!
    272336!--          Stable stratification
    273              usws(j,i) = kappa * ( u(k+1,j,i) - u(k,j,i) )/ (              &
    274                                      LOG( z_p / z0(j,i) ) +               &
    275                                      5.0_wp * rifm * ( z_p - z0(j,i) ) / z_p &
     337             usws(j,i) = kappa * ( u(k+1,j,i) - u(k,j,i) )/ (                  &
     338                                     LOG( z_p / z0(j,i) ) +                    &
     339                                     5.0_wp * rifm * ( z_p - z0(j,i) ) / z_p   &
    276340                                                            )
    277341          ELSE
     
    281345             b = SQRT( SQRT( 1.0_wp - 16.0_wp * rifm / z_p * z0(j,i) ) )
    282346
    283              usws(j,i) = kappa * ( u(k+1,j,i) - u(k,j,i) ) / (            &
    284                          LOG( z_p / z0(j,i) ) -                           &
    285                          LOG( (1.0_wp + a )**2 * ( 1.0_wp + a**2 ) / (          &
    286                               (1.0_wp + b )**2 * ( 1.0_wp + b**2 )   ) ) +      &
    287                                  2.0_wp * ( ATAN( a ) - ATAN( b ) )             &
     347             usws(j,i) = kappa * ( u(k+1,j,i) - u(k,j,i) ) / (                 &
     348                         LOG( z_p / z0(j,i) ) -                                &
     349                         LOG( (1.0_wp + a )**2 * ( 1.0_wp + a**2 ) / (         &
     350                              (1.0_wp + b )**2 * ( 1.0_wp + b**2 )   ) ) +     &
     351                                 2.0_wp * ( ATAN( a ) - ATAN( b ) )            &
    288352                                                 )
    289353          ENDIF
     
    309373!
    310374!--          Stable stratification
    311              vsws(j,i) = kappa * ( v(k+1,j,i) -  v(k,j,i) ) / (           &
    312                                      LOG( z_p / z0(j,i) ) +               &
    313                                      5.0_wp * rifm * ( z_p - z0(j,i) ) / z_p &
     375             vsws(j,i) = kappa * ( v(k+1,j,i) -  v(k,j,i) ) / (                &
     376                                     LOG( z_p / z0(j,i) ) +                    &
     377                                     5.0_wp * rifm * ( z_p - z0(j,i) ) / z_p   &
    314378                                                              )
    315379          ELSE
     
    319383             b = SQRT( SQRT( 1.0_wp - 16.0_wp * rifm / z_p * z0(j,i) ) )
    320384
    321              vsws(j,i) = kappa * ( v(k+1,j,i) - v(k,j,i) ) / (            &
    322                          LOG( z_p / z0(j,i) ) -                           &
    323                          LOG( (1.0_wp + a )**2 * ( 1.0_wp + a**2 ) / (          &
    324                               (1.0_wp + b )**2 * ( 1.0_wp + b**2 )   ) ) +      &
    325                                  2.0_wp * ( ATAN( a ) - ATAN( b ) )             &
     385             vsws(j,i) = kappa * ( v(k+1,j,i) - v(k,j,i) ) / (                 &
     386                         LOG( z_p / z0(j,i) ) -                                &
     387                         LOG( (1.0_wp + a )**2 * ( 1.0_wp + a**2 ) / (         &
     388                              (1.0_wp + b )**2 * ( 1.0_wp + b**2 )   ) ) +     &
     389                                 2.0_wp * ( ATAN( a ) - ATAN( b ) )            &
    326390                                                 )
    327391          ENDIF
     
    331395
    332396!
    333 !-- If required compute q*
    334     IF ( humidity  .OR.  passive_scalar )  THEN
    335        IF ( constant_waterflux )  THEN
    336 !
    337 !--       For a given water flux in the Prandtl layer:
    338           !$OMP PARALLEL DO
    339           !$acc kernels loop
    340           DO  i = nxlg, nxrg
    341              DO  j = nysg, nyng
    342                 qs(j,i) = -qsws(j,i) / ( us(j,i) + 1E-30_wp )
    343              ENDDO
    344           ENDDO
    345          
    346        ELSE
    347           coupled_run = ( coupling_mode == 'atmosphere_to_ocean' .AND. run_coupled )
    348 
    349            IF ( large_scale_forcing .AND. lsf_surf )  THEN
    350               q(0,:,:) = q_surface
    351            ENDIF
    352 
    353           !$OMP PARALLEL DO PRIVATE( a, b, k, z_p )
    354           !$acc kernels loop independent
    355           DO  i = nxlg, nxrg
    356              !$acc loop independent
    357              DO  j = nysg, nyng
    358 
    359                 k   = nzb_s_inner(j,i)
    360                 z_p = zu(k+1) - zw(k)
    361 
    362 !
    363 !--             Assume saturation for atmosphere coupled to ocean (but not
    364 !--             in case of precursor runs)
    365                 IF ( coupled_run )  THEN
    366                    e_q = 6.1_wp * &
    367                            EXP( 0.07_wp * ( MIN(pt(0,j,i),pt(1,j,i)) - 273.15_wp ) )
    368                    q(k,j,i) = 0.622_wp * e_q / ( surface_pressure - e_q )
    369                 ENDIF
    370                 IF ( rif(j,i) >= 0.0_wp )  THEN
    371 !
    372 !--                Stable stratification
    373                    qs(j,i) = kappa * ( q(k+1,j,i) - q(k,j,i) ) / (          &
    374                                   LOG( z_p / z0h(j,i) ) +                   &
    375                                   5.0_wp * rif(j,i) * ( z_p - z0h(j,i) ) / z_p &
    376                                                                  )
    377                 ELSE
    378 !
    379 !--                Unstable stratification
    380                    a = SQRT( 1.0_wp - 16.0_wp * rif(j,i) )
    381                    b = SQRT( 1.0_wp - 16.0_wp * rif(j,i) * z0h(j,i) / z_p )
     397!-- If required compute qr* and nr*
     398    IF ( cloud_physics .AND. icloud_scheme == 0 .AND. precipitation )  THEN
     399
     400       !$OMP PARALLEL DO PRIVATE( a, b, k, z_p )
     401       !$acc kernels loop independent
     402       DO  i = nxlg, nxrg
     403          !$acc loop independent
     404          DO  j = nysg, nyng
     405
     406             k   = nzb_s_inner(j,i)
     407             z_p = zu(k+1) - zw(k)
     408
     409             IF ( rif(j,i) >= 0.0 )  THEN
     410!
     411!--             Stable stratification
     412                qrs(j,i) = kappa * ( qr(k+1,j,i) - qr(k,j,i) ) / (             &
     413                               LOG( z_p / z0h(j,i) ) +                         &
     414                               5.0 * rif(j,i) * ( z_p - z0h(j,i) ) / z_p )
     415                nrs(j,i) = kappa * ( nr(k+1,j,i) - nr(k,j,i) ) / (             &
     416                               LOG( z_p / z0h(j,i) ) +                         &
     417                               5.0 * rif(j,i) * ( z_p - z0h(j,i) ) / z_p )
     418
     419             ELSE
     420!
     421!--             Unstable stratification
     422                a = SQRT( 1.0 - 16.0 * rif(j,i) )
     423                b = SQRT( 1.0 - 16.0 * rif(j,i) * z0h(j,i) / z_p )
    382424 
    383                    qs(j,i) = kappa * ( q(k+1,j,i) - q(k,j,i) ) /   (        &
    384                              LOG( z_p / z0h(j,i) ) -                        &
    385                               2.0_wp * LOG( (1.0_wp + a ) / ( 1.0_wp + b ) ) )
    386                 ENDIF
    387 
    388              ENDDO
    389           ENDDO
    390        ENDIF
    391 
    392        IF ( cloud_physics  .AND.  icloud_scheme == 0  &
    393             .AND.  precipitation )  THEN
    394 
    395           !$OMP PARALLEL DO PRIVATE( a, b, k, z_p )
    396           !$acc kernels loop independent
    397           DO  i = nxlg, nxrg
    398              !$acc loop independent
    399              DO  j = nysg, nyng
    400 
    401                 k   = nzb_s_inner(j,i)
    402                 z_p = zu(k+1) - zw(k)
    403 
    404                 IF ( rif(j,i) >= 0.0 )  THEN
    405 !
    406 !--                Stable stratification
    407                    qrs(j,i) = kappa * ( qr(k+1,j,i) - qr(k,j,i) ) / (          &
    408                                   LOG( z_p / z0h(j,i) ) +                      &
    409                                   5.0 * rif(j,i) * ( z_p - z0h(j,i) ) / z_p )
    410                    nrs(j,i) = kappa * ( nr(k+1,j,i) - nr(k,j,i) ) / (          &
    411                                   LOG( z_p / z0h(j,i) ) +                      &
    412                                   5.0 * rif(j,i) * ( z_p - z0h(j,i) ) / z_p )
    413 
    414                 ELSE
    415 !
    416 !--                Unstable stratification
    417                    a = SQRT( 1.0 - 16.0 * rif(j,i) )
    418                    b = SQRT( 1.0 - 16.0 * rif(j,i) * z0h(j,i) / z_p )
    419  
    420                    qrs(j,i) = kappa * ( qr(k+1,j,i) - qr(k,j,i) ) /   (        &
    421                              LOG( z_p / z0h(j,i) ) -                           &
    422                              2.0 * LOG( (1.0 + a ) / ( 1.0 + b ) ) )
    423                    nrs(j,i) = kappa * ( nr(k+1,j,i) - nr(k,j,i) ) /   (        &
    424                              LOG( z_p / z0h(j,i) ) -                           &
    425                              2.0 * LOG( (1.0 + a ) / ( 1.0 + b ) ) )
    426 
    427                 ENDIF
    428 
    429              ENDDO
    430           ENDDO
    431 
    432        ENDIF
     425                qrs(j,i) = kappa * ( qr(k+1,j,i) - qr(k,j,i) ) /   (           &
     426                          LOG( z_p / z0h(j,i) ) -                              &
     427                          2.0 * LOG( (1.0 + a ) / ( 1.0 + b ) ) )
     428                nrs(j,i) = kappa * ( nr(k+1,j,i) - nr(k,j,i) ) /   (           &
     429                          LOG( z_p / z0h(j,i) ) -                              &
     430                          2.0 * LOG( (1.0 + a ) / ( 1.0 + b ) ) )
     431
     432             ENDIF
     433
     434          ENDDO
     435       ENDDO
    433436
    434437    ENDIF
Note: See TracChangeset for help on using the changeset viewer.