Ignore:
Timestamp:
Oct 26, 2016 11:15:40 AM (8 years ago)
Author:
knoop
Message:

Anelastic approximation implemented

File:
1 edited

Legend:

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

    r2012 r2037  
    2020! Current revisions:
    2121! ------------------
    22 !
     22! Anelastic approximation implemented
    2323!
    2424! Former revisions:
     
    158158        ONLY:  e, kh, nr, nrs, nrsws, ol, pt, q, ql, qr, qrs, qrsws, qs, qsws, &
    159159               s, shf, ss, ssws, ts, u, us, usws, v, vpt, vsws, zu, zw, z0,    &
    160                z0h, z0q
     160               z0h, z0q, drho_air_zw, rho_air_zw
    161161
    162162    USE cloud_parameters,                                                      &
     
    540540                      rib(j,i) = - g * z_mo * ( ( 1.0_wp + 0.61_wp             &
    541541                                 * q(k+1,j,i) ) * shf(j,i) + 0.61_wp           &
    542                                  * pt(k+1,j,i) * qsws(j,i) )   &
     542                                 * pt(k+1,j,i) * qsws(j,i) ) * drho_air_zw(k)  &
    543543                                 / ( uv_total(j,i)**3 * vpt(k+1,j,i) * kappa**2&
    544544                                 + 1.0E-20_wp)
    545545                   ELSE
    546                       rib(j,i) = - g * z_mo * shf(j,i)                         &
     546                      rib(j,i) = - g * z_mo * shf(j,i) * drho_air_zw(k)        &
    547547                           / ( uv_total(j,i)**3 * pt(k+1,j,i) * kappa**2       &
    548548                           + 1.0E-20_wp )
     
    828828!--       For a given heat flux in the surface layer:
    829829          !$OMP PARALLEL DO
    830           !$acc kernels loop private( j )
     830          !$acc kernels loop private( j, k )
    831831          DO  i = nxlg, nxrg
    832832             DO  j = nysg, nyng
    833                 ts(j,i) = -shf(j,i) / ( us(j,i) + 1E-30_wp )
     833                k   = nzb_s_inner(j,i)
     834                ts(j,i) = -shf(j,i) * drho_air_zw(k) / ( us(j,i) + 1E-30_wp )
    834835!
    835836!--             ts must be limited, because otherwise overflow may occur in case
     
    888889             DO  i = nxlg, nxrg
    889890                DO  j = nysg, nyng
    890                    qs(j,i) = -qsws(j,i) / ( us(j,i) + 1E-30_wp )
     891                   k   = nzb_s_inner(j,i)
     892                   qs(j,i) = -qsws(j,i) * drho_air_zw(k) / ( us(j,i) + 1E-30_wp )
    891893                ENDDO
    892894             ENDDO
     
    10251027                                     + psi_m( z0(j,i) / ol_mid ) )
    10261028
    1027              usws(j,i) = -usws(j,i) * 0.5_wp * ( us(j,i-1) + us(j,i) )
     1029             usws(j,i) = -usws(j,i) * 0.5_wp * ( us(j,i-1) + us(j,i) )         &
     1030                                    * rho_air_zw(k)
    10281031          ENDDO
    10291032       ENDDO
     
    10521055                                     + psi_m( z0(j,i) / ol_mid ) )
    10531056
    1054              vsws(j,i) = -vsws(j,i) * 0.5_wp * ( us(j,i-1) + us(j,i) )
     1057             vsws(j,i) = -vsws(j,i) * 0.5_wp * ( us(j,i-1) + us(j,i) )         &
     1058                                    * rho_air_zw(k)
    10551059
    10561060          ENDDO
     
    10741078             !$acc loop independent
    10751079             DO  j = nysg, nyng
    1076                 shf(j,i) = -ts(j,i) * us(j,i)
     1080                k   = nzb_s_inner(j,i)
     1081                shf(j,i) = -ts(j,i) * us(j,i) * rho_air_zw(k)
    10771082             ENDDO
    10781083          ENDDO
     
    10901095             !$acc loop independent
    10911096             DO  j = nysg, nyng
    1092                 qsws(j,i) = -qs(j,i) * us(j,i)
     1097                k   = nzb_s_inner(j,i)
     1098                qsws(j,i) = -qs(j,i) * us(j,i) * rho_air_zw(k)
    10931099             ENDDO
    10941100          ENDDO
Note: See TracChangeset for help on using the changeset viewer.