Line data Source code
1 : !-----------------------------------------------------------------------
2 : !BOP
3 : ! !ROUTINE: diag_dynvar_ic --- record state variables to IC file
4 : !
5 : ! !INTERFACE:
6 16128 : subroutine diag_dynvar_ic(grid, phis, ps, t3, u3s, v3s, tracer)
7 :
8 : ! !USES:
9 : use shr_kind_mod , only: r8 => shr_kind_r8
10 : use cam_history , only: outfld, write_inithist
11 : use constituents , only: cnst_name, pcnst, cnst_type
12 : use dynamics_vars, only: T_FVDYCORE_GRID
13 :
14 : implicit none
15 : !
16 : !-----------------------------------------------------------------------
17 : !
18 : ! !INPUT PARAMETERS:
19 : !
20 : type (T_FVDYCORE_GRID), intent(in) :: grid
21 : ! surface geopotential (grav*zs)
22 : real(r8), intent(in) :: phis(grid%ifirstxy:grid%ilastxy, &
23 : grid%jfirstxy:grid%jlastxy)
24 : ! Surface pressure (pa)
25 : real(r8), intent(in) :: ps (grid%ifirstxy:grid%ilastxy, &
26 : grid%jfirstxy:grid%jlastxy)
27 : ! Temperature (K)
28 : real(r8), intent(in) :: t3 (grid%ifirstxy:grid%ilastxy, &
29 : grid%jfirstxy:grid%jlastxy, grid%km )
30 : ! u wind velocities, staggered grid
31 : real(r8), intent(in) :: u3s (grid%ifirstxy:grid%ilastxy, &
32 : grid%jfirstxy:grid%jlastxy, grid%km)
33 : ! v wind velocities, staggered grid
34 : real(r8), intent(in) :: v3s (grid%ifirstxy:grid%ilastxy, &
35 : grid%jfirstxy:grid%jlastxy, grid%km)
36 : ! Tracers
37 : real(r8), intent(in) :: tracer (grid%ifirstxy:grid%ilastxy, &
38 : grid%jfirstxy:grid%jlastxy, &
39 : grid%km,grid%ntotq)
40 :
41 : ! !HISTORY:
42 : ! 01.01.01 XXXXXX Delivery
43 : ! 05.07.12 Sawyer Simplified interface with grid argument, ProTeX
44 : ! 06.03.22 Sawyer Rewritten for XY decomposition
45 : ! 06.06.28 Sawyer T3 changed from IKJ to IJK indexing
46 : ! 06.07.01 Sawyer Transitioned tracers q3 to T_TRACERS
47 : !
48 : !EOP
49 : !-----------------------------------------------------------------------
50 : !BOC
51 : !---------------------------Local workspace-----------------------------
52 : integer :: i, j, k, m ! indices
53 : integer :: ifirstxy, ilastxy, jfirstxy, jlastxy, km, ntotq, idim
54 32256 : real(r8):: tmp(grid%ifirstxy:grid%ilastxy,grid%km)
55 : !
56 : !-----------------------------------------------------------------------
57 : !
58 :
59 16128 : ifirstxy = grid%ifirstxy
60 16128 : ilastxy = grid%ilastxy
61 16128 : jfirstxy = grid%jfirstxy
62 16128 : jlastxy = grid%jlastxy
63 16128 : km = grid%km
64 16128 : ntotq = grid%ntotq
65 16128 : idim = ilastxy - ifirstxy + 1
66 :
67 16128 : if( write_inithist() ) then
68 :
69 : !$OMP PARALLEL DO PRIVATE (I, J, K, M, TMP)
70 0 : do j = jfirstxy, jlastxy
71 :
72 0 : call outfld ('PS&IC ', ps (:,j) , idim, j)
73 :
74 0 : do k = 1, km
75 0 : do i = ifirstxy, ilastxy
76 0 : tmp(i,k) = t3(i,j,k)
77 : enddo
78 : enddo
79 0 : call outfld ('T&IC ', tmp , idim, j)
80 :
81 0 : do k = 1, km
82 0 : do i = ifirstxy, ilastxy
83 0 : tmp(i,k) = u3s(i,j,k)
84 : enddo
85 : enddo
86 0 : call outfld ('US&IC ', tmp , idim, j)
87 :
88 0 : do k = 1, km
89 0 : do i = ifirstxy, ilastxy
90 0 : tmp(i,k) = v3s(i,j,k)
91 : enddo
92 : enddo
93 0 : call outfld ('VS&IC ', tmp , idim, j)
94 :
95 : ! The tracers are all wet mixing ratios in the dycore. If cnst_type is dry
96 : ! then need to convert before writing to initial file.
97 0 : do m = 1, pcnst
98 0 : if (cnst_type(m) == 'dry') then
99 0 : do k = 1, km
100 0 : do i = ifirstxy, ilastxy
101 : ! convert wet to dry
102 0 : tmp(i,k) = tracer(i,j,k,m) / (1._r8 - tracer(i,j,k,1))
103 : enddo
104 : enddo
105 : else
106 0 : do k = 1, km
107 0 : do i = ifirstxy, ilastxy
108 0 : tmp(i,k) = tracer(i,j,k,m)
109 : enddo
110 : enddo
111 : end if
112 0 : call outfld(trim(cnst_name(m))//'&IC' , tmp , idim, j)
113 : end do
114 :
115 : enddo
116 :
117 : end if
118 :
119 16128 : end subroutine diag_dynvar_ic
|