File: C:\NOAA\NEMS_11731\src\chem\gocart\src\Components\GOCART_GridComp\CARMA_GridComp\hydrostat.F90
1
2
3
4
5
6 subroutine hydrostat ( carma, rc )
7
8
9 use carma_types_mod
10
11 implicit none
12
13 integer, intent(out) :: rc
14
15
16 integer :: iz, ios
17 real(kind=f), allocatable, dimension(:,:) :: dp, ptop, pstar, &
18 xymet, rhoa_mks
19
20 #include "carma_globaer.h"
21
22 rc = 0
23 allocate(dp(carma%NX,carma%NY), ptop(carma%NX,carma%NY), &
24 pstar(carma%NX,carma%NY), xymet(carma%NX,carma%NY), &
25 rhoa_mks(carma%NX,carma%NY), stat=ios)
26 if(ios /= 0) then
27 rc = 1
28 return
29 endif
30
31 #ifdef DEBUG
32 write(*,*) '+ hydrostat'
33 #endif
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67 if( igridv .eq. I_CART )then
68
69
70
71
72 = NZ
73 ptop = p_top
74 dp = dz(:,:,iz)*GRAV*rhoa(:,:,iz)
75 p(:,:,iz) = ptop * sqrt( 1. + dp/ptop )
76
77 do iz = NZ-1,1,-1
78 ptop = ptop + dp
79 dp = dz(:,:,iz)*GRAV*rhoa(:,:,iz)
80 p(:,:,iz) = ptop * sqrt( 1. + dp/ptop )
81 enddo
82 p_surf = ptop + dp
83
84
85
86
87
88
89 else if( igridv .eq. I_SIG )then
90
91 pstar = 0._f
92 do iz = 1,NZ
93 xymet = xmet(:,:,iz) * ymet(:,:,iz)
94 pstar = pstar + dz(:,:,iz) * GRAV * rhoa(:,:,iz) / xymet
95 enddo
96 p_surf = p_top + pstar
97
98 = p_surf
99
100 do iz = 1,NZ
101 xymet = xmet(:,:,iz) * ymet(:,:,iz)
102
103
104 (:,:,iz) = zc(:,:,iz) * p_surf
105
106 (:,:,iz) = pstar / GRAV * xymet
107 t(:,:,iz) = ptc(:,:,iz) / rhoa(:,:,iz) * &
108 ( p(:,:,iz) / PREF )**(R_AIR/CP)
109 rhoa_mks = p(:,:,iz) / ( R_AIR * t(:,:,iz) )
110 zmet(:,:,iz) = pstar / ( GRAV * rhoa_mks )
111 enddo
112
113 endif
114
115
116
117
118 deallocate(dp, ptop, pstar, xymet, rhoa_mks, stat=ios)
119 if(ios /= 0) rc = 1
120
121 return
122 end
123