⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rayl_fric.f90

📁 CCSM Research Tools: Community Atmosphere Model (CAM)
💻 F90
字号:
#include <misc.h>!-----------------------------------------------------------------------!BOP! !IROUTINE: rayl_fric --- Rayleigh friction!! !INTERFACE:   subroutine rayl_fric(phys_state, phys_tend, dt, pe11k, pe11kln,     &                       cpair, cappa, rfac, rayf )! !USES:    use precision    use pmgrid    use ppgrid, only: pcols    use phys_grid    use physics_types, only: physics_state, physics_tend!-----------------------------------------------------------------------    implicit none! !INPUT PARAMETERS:    real(r8), intent(in) :: dt                             ! time step size    real(r8), intent(in) :: cpair                          !    real(r8), intent(in) :: cappa                          !    real(r8), intent(in) :: rfac(plev)                     ! Rayleigh friction factor    real(r8), intent(in) :: pe11k(plev+1)                  ! Reference pressure    real(r8), intent(in) :: pe11kln(plev+1)                ! Reference log    logical,  intent(in) :: rayf                           ! Rayleigh friction flag! !INPUT/OUTPUT PARAMETERS:    type(physics_state), intent(inout), dimension(begchunk:endchunk) :: phys_state    type(physics_tend),  intent(inout), dimension(begchunk:endchunk) :: phys_tend! !DESCRIPTION:!!   Computes Rayleigh friction!! !REVISION HISTORY:!   01.06.06   Mirin     Creation (from p_d_coupling)!   01.07.13   Mirin     Accommodate multi-2D decomposition!   01.07.20   Mirin     Use reference values for pe, peln!!EOP!-----------------------------------------------------------------------!BOC! !LOCAL VARIABLES:    integer :: nlonl, i, k, lchnk     ! indices    integer :: ncol                   ! number of columns in current chunk    integer :: lats(pcols)            ! array of latitude indices    integer :: lons(pcols)            ! array of longitude indices    real(r8) rdt                      ! Inverse of time step    real(r8) dt5                      ! 0.5 * dt    real(r8) rcp                      ! Inverse of cpair    real(r8) rtmp    real(r8) durf, dvrf!---------------------------End Local workspace-------------------------    rdt = 1. / dt    dt5 = 0.5*dt! -----------------------------! Perform Rayleigh friction! -----------------------------!$omp parallel do private(lchnk, i, k, ncol, rtmp, durf, dvrf, rcp)       do lchnk = begchunk,endchunk          ncol = get_ncols_p(lchnk)          call get_lat_all_p(lchnk, ncol, lats)         do k = 1, plev            rcp = 1. / ( cpair * ( 1. - cappa*pe11k(k)*    &                        ( pe11kln(k+1)-pe11kln(k) ) /      &                        ( pe11k(k+1)-pe11k(k) )  ) )            do i = 1, ncol               if ( rayf .and.  pe11k(k) < 3000. ) then    ! only above 30 mb                  rtmp = - rfac(k) / (1. + rfac(k))! Implicit-in-time                  durf = phys_state(lchnk)%u(i,k)*rtmp                  dvrf = phys_state(lchnk)%v(i,k)*rtmp! -----------------------------! Update t, u, v! -----------------------------                  phys_state(lchnk)%t(i,k) = phys_state(lchnk)%t(i,k)       &                            - (durf*(phys_state(lchnk)%u(i,k)+0.5*durf)     &                            +  dvrf*(phys_state(lchnk)%v(i,k)+0.5*dvrf))*rcp                  phys_state(lchnk)%u(i,k) = phys_state(lchnk)%u(i,k) + durf                  phys_state(lchnk)%v(i,k) = phys_state(lchnk)%v(i,k) + dvrf! -----------------------------! Update (u, v) tendencies! -----------------------------                  phys_tend(lchnk)%dudt(i,k) = phys_tend(lchnk)%dudt(i,k) + durf*rdt                  phys_tend(lchnk)%dvdt(i,k) = phys_tend(lchnk)%dvdt(i,k) + dvrf*rdt               endif            enddo         enddo                 ! k-loop       enddo                   ! lchnk-loop!EOC  end subroutine rayl_fric!-----------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -