!======================================= ! 2D cumulus model - kaminari ! - subroutine ptn_temp ! ! Author : TAKAHASHI Koko ! Date : 2003/11/25 最終更新 ! 2003/11/25 新規作成 ! Note : 2 ステップ目以降の温位 ! !======================================= !--- 1,2,3,4,5行目入力変数, 6行目入出力変数 subroutine ptn_temp(i,k,im,km,nuh,nuv,cp,ml,dx,dz,dtb, & & g_sqrt,g13x,g13z,g13xz, & & prss_bs,pi_bs,dens_bs,u_old,omg_old, & & qv_old,qr_old,qvs_old,ptemp_old, & & ptemp_old2,km_sub_old2, & & ptemp) implicit none integer(8), intent(in) :: i, k integer(8), intent(in) :: im, km real(8), intent(in) :: nuh, nuv,cp, ml real(8), intent(in) :: dx, dz real(8), intent(in) :: dtb real(8), intent(in) :: g_sqrt(-2:im+1,-2:km+1) real(8), intent(in) :: g13x(-2:im+1,-2:km+1) real(8), intent(in) :: g13z(-2:im+1,-2:km+1) real(8), intent(in) :: g13xz(-2:im+1,-2:km+1) real(8), intent(in) :: prss_bs(-2:im+1,-2:km+1) real(8), intent(in) :: pi_bs(-2:im+1,-2:km+1) real(8), intent(in) :: dens_bs(-2:im+1,-2:km+1) real(8), intent(in) :: u_old(-2:im+1,-2:km+1) real(8), intent(in) :: omg_old(-2:im+1,-2:km+1) real(8), intent(in) :: qv_old(-2:im+1,-2:km+1) real(8), intent(in) :: qr_old(-2:im+1,-2:km+1) real(8), intent(in) :: qvs_old(-2:im+1,-2:km+1) real(8), intent(in) :: ptemp_old(-2:im+1,-2:km+1) real(8), intent(in) :: ptemp_old2(-2:im+1,-2:km+1) real(8), intent(in) :: km_sub_old2(-2:im+1,-2:km+1) real(8), intent(inout) :: ptemp(-2:im+1,-2:km+1) real(8) :: ptemp_dif(-2:im+1,-2:km+1) real(8) :: ptemp_adv(-2:im+1,-2:km+1) real(8) :: ptemp_mic(-2:im+1,-2:km+1) real(8) :: ptemp_trb(-2:im+1,-2:km+1) real(8) :: c(-2:im+1,-2:km+1) real(8) :: er(-2:im+1,-2:km+1) real(8) :: gamma(-2:im+1,-2:km+1) !--- 温位の数値粘性項 ptemp_dif(i,k) = nuh*( & & ptemp_old(i+1,k) & & - 2.0d0*ptemp_old(i,k) & & + ptemp_old(i-1,k) & & )/(dx**2.0d0) & & + nuv*( & & ptemp_old(i,k+1) & & - 2.0d0*ptemp_old(i,k) & & + ptemp_old(i,k-1) & & )/(dz**2.0d0) !--- 温位の移流項 ptemp_adv(i,k) = (u_old(i+1,k) + u_old(i,k))/2.0d0 & & *(ptemp_old(i+1,k) - ptemp_old(i-1,k)) & & /(2.0d0*dx) & & + (omg_old(i,k+1) + omg_old(i,k))/2.0d0 & & *(ptemp_old(i,k+1) - ptemp_old(i,k-1)) & & /(2.0d0*dz)& & + ptemp_dif(i,k) !--- 温位の生成・消滅項の係数群 c(i,k) = 1.6d0 & & + 1.249d2*(dens_bs(i,k)*qr_old(i,k))**2.046d-1 er(i,k) = (1.0d0 - qv_old(i,k)/qvs_old(i,k))*c(i,k) & & *((dens_bs(i,k)*qr_old(i,k))**5.25d-1) & & /dens_bs(i,k) & & /(5.4d5 + 2.55d6/(prss_bs(i,k)*qvs_old(i,k))) !--- 温位の移流項 ptemp_trb(i,k) = 3.0d0 & & *( & & (km_sub_old2(i+1,k) + km_sub_old2(i,k))& & /2.0d0 & & *( & & (ptemp_old2(i+1,k) - ptemp_old2(i,k))& & /dx & & + g13z(i+1,k) & & *( & & ptemp_old2(i+1,k+1) & & + ptemp_old2(i,k+1) & & - ptemp_old2(i+1,k-1) & & - ptemp_old2(i,k-1) & & )/(4.0d0*dz) & & ) & & - ( & & km_sub_old2(i,k) & & + km_sub_old2(i-1,k) & & )/2.0d0 & & *( & & ( & & ptemp_old2(i,k) & & - ptemp_old2(i-1,k) & & )/dx & & + g13z(i,k) & & *( & & ptemp_old2(i,k+1) & & + ptemp_old2(i-1,k+1) & & - ptemp_old2(i,k-1) & & - ptemp_old2(i-1,k-1) & & )/(4.0d0*dz) & & ) & & )/dx & & + 3.0d0*g13xz(i,k) & & *( & & ( & & km_sub_old2(i,k+1) & & + km_sub_old2(i,k) & & )/2.0d0 & & *( & & ( & & ptemp_old2(i+1,k+1) & & + ptemp_old2(i+1,k) & & - ptemp_old2(i-1,k+1) & & - ptemp_old2(i-1,k) & & )/(4.0d0*dx) & & + g13x(i,k+1) & & *( & & ptemp_old2(i,k+1) & & - ptemp_old2(i,k) & & )/dz & & ) & & - ( & & km_sub_old2(i,k) & & + km_sub_old2(i,k-1) & & )/2.0d0 & & *( & & ( & & ptemp_old2(i+1,k) & & + ptemp_old2(i+1,k-1) & & - ptemp_old2(i-1,k) & & - ptemp_old2(i-1,k-1) & & )/(4.0d0*dx) & & + g13x(i,k) & & *( & & ptemp_old2(i,k) & & - ptemp_old2(i,k-1) & & )/dz & & ) & & ) & & + 3.0d0/g_sqrt(i,k) & & *( & & 1.0d0/g_sqrt(i,k)*km_sub_old2(i,k) & & *( & & ptemp_old2(i,k+1) & & - ptemp_old2(i,k) & & )/dz & & - 1.0d0/g_sqrt(i,k-1) & & *km_sub_old2(i,k-1) & & *( & & ptemp_old2(i,k) & & - ptemp_old2(i,k-1) & & )/dz & & )/dz !--- ガンマ gamma(i,k) = ml/(cp*pi_bs(i,k)) !--- 温位の生成・消滅項 ptemp_mic(i,k) = - gamma(i,k)*(er(i,k)) !--- 温位 ptemp(i,k) = ptemp_old2(i,k) & & + 2.0d0*dtb & & *( & & - ptemp_adv(i,k) + ptemp_mic(i,k) & & + ptemp_trb(i,k) & & ) end subroutine ptn_temp