12 subroutine gwdc_post_run( &
13 & im, levs, lssav, ldiag3d, dtf, dtp, con_cp, &
14 & tauctx, taucty, gwdcu, gwdcv, &
15 & dugwd, dvgwd, dtend, dtidx, index_of_x_wind, index_of_y_wind, &
16 & index_of_process_nonorographic_gwd, gu0, gv0, gt0, &
19 use machine,
only : kind_phys
22 integer,
intent(in) :: im, levs
23 logical,
intent(in) :: lssav, ldiag3d
24 real(kind=kind_phys),
intent(in) :: dtf, dtp, con_cp
25 real(kind=kind_phys),
intent(in) :: &
26 & tauctx(:), taucty(:), gwdcu(:,:), gwdcv(:,:)
28 real(kind=kind_phys),
intent(inout) :: dugwd(:), dvgwd(:), &
29 & gu0(:,:), gv0(:,:), gt0(:,:)
30 real(kind=kind_phys),
intent(inout),
optional :: dtend(:,:,:)
31 integer,
intent(in) :: dtidx(:,:)
32 integer,
intent(in) :: index_of_process_nonorographic_gwd
33 integer,
intent(in) :: index_of_x_wind, index_of_y_wind
35 character(len=*),
intent(out) :: errmsg
36 integer,
intent(out) :: errflg
38 integer :: i, k, idtend
39 real(kind=kind_phys) :: eng0, eng1
48 dugwd(:) = dugwd(:) + tauctx(:)*dtf
49 dvgwd(:) = dvgwd(:) + taucty(:)*dtf
53 idtend = dtidx(index_of_x_wind,index_of_process_nonorographic_g&
56 dtend(:,:,idtend) = dtend(:,:,idtend) + gwdcu(:,:) * dtf
58 idtend = dtidx(index_of_y_wind,index_of_process_nonorographic_g&
61 dtend(:,:,idtend) = dtend(:,:,idtend) + gwdcv(:,:) * dtf
69 eng0 = 0.5*(gu0(i,k)*gu0(i,k) + gv0(i,k)*gv0(i,k))
70 gu0(i,k) = gu0(i,k) + gwdcu(i,k) * dtp
71 gv0(i,k) = gv0(i,k) + gwdcv(i,k) * dtp
72 eng1 = 0.5*(gu0(i,k)*gu0(i,k) + gv0(i,k)*gv0(i,k))
73 gt0(i,k) = gt0(i,k) + (eng0-eng1)/(dtp*con_cp)