!======================================= ! 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(im,km,nuh,nuv,dx,dz,dtb, & & g_sqrt,g13x,g13z,g13xz, & & u_old,omg_old,ptemp_old2,km_sub_old2, & & ptemp) implicit none integer(8), intent(in) :: im, km real(8), intent(in) :: nuh, nuv real(8), intent(in) :: dx, dz real(8), intent(in) :: dtb real(8), intent(in) :: g_sqrt(-2:im+2,-2:km+2) real(8), intent(in) :: g13x(-2:im+2,-2:km+2) real(8), intent(in) :: g13z(-2:im+2,-2:km+2) real(8), intent(in) :: g13xz(-2:im+2,-2:km+2) real(8), intent(in) :: u_old(-2:im+2,-2:km+2) real(8), intent(in) :: omg_old(-2:im+2,-2:km+3) ! real(8), intent(in) :: qv_old(-2:im+2,-2:km+2) ! real(8), intent(in) :: qr_old(-2:im+2,-2:km+2) ! real(8), intent(in) :: qvs_old(-2:im+2,-2:km+2) real(8), intent(in) :: ptemp_old2(-2:im+2,-2:km+2) real(8), intent(in) :: km_sub_old2(-2:im+2,-2:km+2) real(8), intent(inout) :: ptemp(-2:im+2,-2:km+2) integer(8) :: i,k real(8) :: ptemp_dif(-2:im+2,-2:km+2) real(8) :: ptemp_adv(-2:im+2,-2:km+2) real(8) :: ptemp_trb(-2:im+2,-2:km+2) do k =0,km do i = 0,im !--- 温位の数値粘性項 ptemp_dif(i,k) = nuh*( & & ptemp(i+1,k) & & - 2.0d0*ptemp(i,k) & & + ptemp(i-1,k) & & )/(dx**2.0d0) & & + nuv*( & & ptemp(i,k+1) & & - 2.0d0*ptemp(i,k) & & + ptemp(i,k-1) & & )/(dz**2.0d0) !--- 温位の移流項 ptemp_adv(i,k) = (u_old(i+1,k) + u_old(i,k))/2.0d0 & & *(ptemp(i+1,k) - ptemp(i-1,k)) & & /(2.0d0*dx) & & + (omg_old(i,k+1) + omg_old(i,k)) & & /2.0d0 & & *(ptemp(i,k+1) - ptemp(i,k-1)) & & /(2.0d0*dz) & & + ptemp_dif(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 !--- 温位 ptemp(i,k) = ptemp_old2(i,k) & & + 2.0d0*dtb & & *(- ptemp_adv(i,k) + ptemp_trb(i,k)) end do end do end subroutine ptn_temp