FV3-JEDI
temperature_variables_mod.f90
Go to the documentation of this file.
1 ! (C) Copyright 2018-2019 UCAR
2 !
3 ! This software is licensed under the terms of the Apache Licence Version 2.0
4 ! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
5 
7 
11 
12 implicit none
13 private
14 
18 public t_to_pt
19 
20 contains
21 
22 !----------------------------------------------------------------------------
23 ! Temperature to Virtual Temperature ----------------------------------------
24 !----------------------------------------------------------------------------
25 
26 subroutine t_to_tv(geom,t,q,tv)
27 
28  implicit none
29  type(fv3jedi_geom) , intent(in ) :: geom !Geometry for the model
30  real(kind=kind_real), intent(in ) :: t(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz) !Temperature (K)
31  real(kind=kind_real), intent(in ) :: q(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz) !Specific humidity (kg/kg)
32  real(kind=kind_real), intent(out) :: tv(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz) !Virtual temperature (K)
33 
34  tv = t*(1.0_kind_real + epsilon*q)
35 
36 end subroutine t_to_tv
37 
38 !----------------------------------------------------------------------------
39 
40 subroutine t_to_tv_tl(geom,t,t_tl,q,q_tl,tv_tl)
41 
42  implicit none
43  type(fv3jedi_geom) , intent(in ) :: geom
44  real(kind=kind_real), intent(in ) :: t(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
45  real(kind=kind_real), intent(in ) :: t_tl(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
46  real(kind=kind_real), intent(in ) :: q(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
47  real(kind=kind_real), intent(in ) :: q_tl(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
48  real(kind=kind_real), intent(out) :: tv_tl(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
49 
50  tv_tl = t_tl*(1.0_kind_real + epsilon*q) + t*epsilon*q_tl
51 
52 end subroutine t_to_tv_tl
53 
54 !----------------------------------------------------------------------------
55 
56 subroutine t_to_tv_ad(geom,t,t_ad,q,q_ad,tv_ad)
57 
58  implicit none
59  type(fv3jedi_geom) , intent(in ) :: geom
60  real(kind=kind_real), intent(in ) :: t(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
61  real(kind=kind_real), intent(inout) :: t_ad(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
62  real(kind=kind_real), intent(in ) :: q(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
63  real(kind=kind_real), intent(inout) :: q_ad(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
64  real(kind=kind_real), intent(inout) :: tv_ad(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
65 
66  t_ad = t_ad + tv_ad * (1.0_kind_real + epsilon*q)
67  q_ad = q_ad + tv_ad * epsilon*t
68  tv_ad = 0.0_kind_real
69 
70 end subroutine t_to_tv_ad
71 
72 !----------------------------------------------------------------------------
73 ! Virtual Temperature to Temperature ----------------------------------------
74 !----------------------------------------------------------------------------
75 
76 subroutine tv_to_t(geom,tv,q,t)
77 
78  implicit none
79  type(fv3jedi_geom) , intent(in ) :: geom !Geometry for the model
80  real(kind=kind_real), intent(in ) :: tv(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz) !Temperature (K)
81  real(kind=kind_real), intent(in ) :: q(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz) !Specific humidity (kg/kg)
82  real(kind=kind_real), intent(out) :: t(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz) !Virtual temperature (K)
83 
84  t = tv/(1.0_kind_real + epsilon*q)
85 
86 end subroutine tv_to_t
87 
88 !----------------------------------------------------------------------------
89 
90 subroutine tv_to_t_tl(geom,tv,tv_tl,q,q_tl,t_tl)
91 
92  implicit none
93  type(fv3jedi_geom) , intent(in ) :: geom
94  real(kind=kind_real), intent(in ) :: tv(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
95  real(kind=kind_real), intent(in ) :: tv_tl(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
96  real(kind=kind_real), intent(in ) :: q(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
97  real(kind=kind_real), intent(in ) :: q_tl(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
98  real(kind=kind_real), intent(inout) :: t_tl(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
99 
100  t_tl = (tv_tl*(1.0_kind_real+epsilon*q)-tv*epsilon*q_tl)/(1.0_kind_real+epsilon*q)**2
101 
102 end subroutine tv_to_t_tl
103 
104 !----------------------------------------------------------------------------
105 
106 subroutine tv_to_t_ad(geom,tv,tv_ad,q,q_ad,t_ad)
107 
108  implicit none
109  type(fv3jedi_geom) , intent(in ) :: geom
110  real(kind=kind_real), intent(in ) :: tv(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
111  real(kind=kind_real), intent(inout) :: tv_ad(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
112  real(kind=kind_real), intent(in ) :: q(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
113  real(kind=kind_real), intent(inout) :: q_ad(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
114  real(kind=kind_real), intent(inout) :: t_ad(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
115 
116  real(kind=kind_real) :: temp(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
117 
118  temp = t_ad/(epsilon*q+1.0_kind_real)
119 
120  tv_ad = tv_ad + temp
121  q_ad = q_ad - tv*epsilon*temp/(epsilon*q+1.0_kind_real)
122  t_ad = 0.0_kind_real
123 
124 end subroutine tv_to_t_ad
125 
126 !----------------------------------------------------------------------------
127 ! Potential Temperature to Temperature --------------------------------------
128 !----------------------------------------------------------------------------
129 
130 subroutine pt_to_t(geom,pkz,pt,t)
131 
132  implicit none
133  type(fv3jedi_geom) , intent(in ) :: geom !Geometry for the model
134  real(kind=kind_real), intent(in ) :: pkz(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz) !Pressure to the kappa
135  real(kind=kind_real), intent(in ) :: pt(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz) !Potential temperature (K)
136  real(kind=kind_real), intent(out) :: t(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz) !Temperature (K)
137 
138  t = pt*pkz
139 
140 end subroutine pt_to_t
141 
142 !----------------------------------------------------------------------------
143 
144 subroutine pt_to_t_tl(geom,pkz,pkz_tl,pt,pt_tl,t_tl)
145 
146  implicit none
147  type(fv3jedi_geom) , intent(in ) :: geom
148  real(kind=kind_real), intent(in ) :: pkz(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
149  real(kind=kind_real), intent(in ) :: pkz_tl(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
150  real(kind=kind_real), intent(in ) :: pt(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
151  real(kind=kind_real), intent(in ) :: pt_tl(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
152  real(kind=kind_real), intent(inout) :: t_tl(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
153 
154  t_tl = pt_tl*pkz + pt*pkz_tl
155 
156 end subroutine pt_to_t_tl
157 
158 !----------------------------------------------------------------------------
159 
160 subroutine pt_to_t_ad(geom,pkz,pkz_ad,pt,pt_ad,t_ad)
161 
162  implicit none
163  type(fv3jedi_geom) , intent(in ) :: geom
164  real(kind=kind_real), intent(in ) :: pkz(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
165  real(kind=kind_real), intent(inout) :: pkz_ad(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
166  real(kind=kind_real), intent(in ) :: pt(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
167  real(kind=kind_real), intent(inout) :: pt_ad(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
168  real(kind=kind_real), intent(inout) :: t_ad(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz)
169 
170  pt_ad = pt_ad + pkz*t_ad
171  pkz_ad = pkz_ad + pt*t_ad
172  t_ad = 0.0
173 
174 end subroutine pt_to_t_ad
175 
176 !----------------------------------------------------------------------------
177 
178 subroutine t_to_pt(geom,pkz,t,pt)
179 
180  implicit none
181  type(fv3jedi_geom) , intent(in ) :: geom !Geometry for the model
182  real(kind=kind_real), intent(in ) :: pkz(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz) !Pressure to the kappa
183  real(kind=kind_real), intent(in ) :: t(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz) !Potential temperature (K)
184  real(kind=kind_real), intent(out) :: pt(geom%isc:geom%iec,geom%jsc:geom%jec,1:geom%npz) !Temperature (K)
185 
186  pt = t/pkz
187 
188 end subroutine t_to_pt
189 
190 !----------------------------------------------------------------------------
191 
192 end module temperature_vt_mod
temperature_vt_mod::t_to_tv
subroutine, public t_to_tv(geom, t, q, tv)
Definition: temperature_variables_mod.f90:27
temperature_vt_mod::tv_to_t
subroutine, public tv_to_t(geom, tv, q, t)
Definition: temperature_variables_mod.f90:77
temperature_vt_mod::pt_to_t_tl
subroutine, public pt_to_t_tl(geom, pkz, pkz_tl, pt, pt_tl, t_tl)
Definition: temperature_variables_mod.f90:145
temperature_vt_mod::t_to_tv_tl
subroutine, public t_to_tv_tl(geom, t, t_tl, q, q_tl, tv_tl)
Definition: temperature_variables_mod.f90:41
fv3jedi_geom_mod
Fortran module handling geometry for the FV3 model.
Definition: fv3jedi_geom_mod.f90:8
fv3jedi_geom_mod::fv3jedi_geom
Fortran derived type to hold geometry data for the FV3JEDI model.
Definition: fv3jedi_geom_mod.f90:46
fv3jedi_constants_mod::epsilon
real(kind=kind_real), parameter, public epsilon
Definition: fv3jedi_constants_mod.f90:35
temperature_vt_mod
Definition: temperature_variables_mod.f90:6
fv3jedi_constants_mod
Definition: fv3jedi_constants_mod.f90:6
fv3jedi_constants_mod::kappa
real(kind=kind_real), parameter, public kappa
Definition: fv3jedi_constants_mod.f90:34
temperature_vt_mod::t_to_pt
subroutine, public t_to_pt(geom, pkz, t, pt)
Definition: temperature_variables_mod.f90:179
temperature_vt_mod::tv_to_t_ad
subroutine, public tv_to_t_ad(geom, tv, tv_ad, q, q_ad, t_ad)
Definition: temperature_variables_mod.f90:107
fv3jedi_kinds_mod::kind_real
integer, parameter, public kind_real
Definition: fv3jedi_kinds_mod.f90:14
temperature_vt_mod::pt_to_t
subroutine, public pt_to_t(geom, pkz, pt, t)
Definition: temperature_variables_mod.f90:131
temperature_vt_mod::t_to_tv_ad
subroutine, public t_to_tv_ad(geom, t, t_ad, q, q_ad, tv_ad)
Definition: temperature_variables_mod.f90:57
temperature_vt_mod::pt_to_t_ad
subroutine, public pt_to_t_ad(geom, pkz, pkz_ad, pt, pt_ad, t_ad)
Definition: temperature_variables_mod.f90:161
fv3jedi_kinds_mod
Definition: fv3jedi_kinds_mod.f90:6
temperature_vt_mod::tv_to_t_tl
subroutine, public tv_to_t_tl(geom, tv, tv_tl, q, q_tl, t_tl)
Definition: temperature_variables_mod.f90:91