1 | subroutine calcenergy_kcm(Tsurf,T,Play,Plev,Qsurf,Q,muvar,Eatmtot) |
---|
2 | |
---|
3 | |
---|
4 | use params_h, only : Rc |
---|
5 | use watercommon_h, only : mH2O |
---|
6 | implicit none |
---|
7 | |
---|
8 | ! ---------------------------------------------------------------- |
---|
9 | ! Purpose: Calculate total energy of the (steam) atmosphere |
---|
10 | ! Authour: R. Wordsworth (2011) |
---|
11 | ! ---------------------------------------------------------------- |
---|
12 | |
---|
13 | #include "dimensions.h" |
---|
14 | #include "dimphys.h" |
---|
15 | #include "comcstfi.h" |
---|
16 | !#include "callkeys.h" |
---|
17 | |
---|
18 | |
---|
19 | |
---|
20 | ! inputs |
---|
21 | real Tsurf,T(1:nlayermx) |
---|
22 | real Play(1:nlayermx),Plev(1:nlayermx+1) |
---|
23 | real Qsurf,Q(1:nlayermx) |
---|
24 | real muvar(1,nlayermx+1) |
---|
25 | |
---|
26 | ! internal |
---|
27 | integer il |
---|
28 | real m_n,m_v,cp_n,cp_v,cp_a,Eatmlay |
---|
29 | real s_c,rho_v,L |
---|
30 | double precision p_v, s_v, nul |
---|
31 | real VMR(1:nlayermx) |
---|
32 | |
---|
33 | ! output |
---|
34 | real Eatmtot |
---|
35 | |
---|
36 | ! functions |
---|
37 | double precision cp_neutral |
---|
38 | |
---|
39 | m_n = mugaz/1000. |
---|
40 | m_v = mH2O/1000. |
---|
41 | |
---|
42 | |
---|
43 | do il=1,nlayermx |
---|
44 | VMR(il)=Q(il)*(muvar(1,il+1)/mH2O) |
---|
45 | end do |
---|
46 | |
---|
47 | |
---|
48 | Eatmtot = 0.0 |
---|
49 | do il=1,nlayermx |
---|
50 | |
---|
51 | |
---|
52 | cp_n = cp_neutral(dble(T(il))) |
---|
53 | cp_v = (32.24+1.923d-3*T(il) + 1.055d-5*T(il)**2-3.511d-9*T(il)**3)/m_v |
---|
54 | ! / by m_v makes it per kg not per mol |
---|
55 | |
---|
56 | call psat_H2O(dble(T(il)),p_v) |
---|
57 | p_v = p_v*1d6 |
---|
58 | rho_v = real(p_v)*m_v/(real(Rc)*T(il)) |
---|
59 | |
---|
60 | call therm(dble(T(il)),dble(rho_v)*1d-3,nul,nul,nul,nul,nul,nul,nul,& |
---|
61 | nul,nul,nul,s_v,nul) |
---|
62 | |
---|
63 | s_c = 2.06 * log(T(il)/273.15) |
---|
64 | s_v = s_v * 1d3 |
---|
65 | s_c = s_c * 1d3 |
---|
66 | L = (real(s_v)-s_c)*T(il) |
---|
67 | |
---|
68 | cp_a = (1-VMR(il))*cp_n + VMR(il)*cp_v |
---|
69 | !cp_a = (1-Q(il))*cp_n + Q(il)*cp_v |
---|
70 | |
---|
71 | Eatmlay = ( cp_a*T(il) + L*VMR(il) ) * (Plev(il)-Plev(il+1))/g |
---|
72 | |
---|
73 | Eatmtot = Eatmtot + Eatmlay |
---|
74 | enddo |
---|
75 | |
---|
76 | print*,'WARNING: E-calc currently assumes H2O saturation!' |
---|
77 | |
---|
78 | end subroutine calcenergy_kcm |
---|
79 | |
---|