/[MITgcm]/MITgcm/pkg/fizhi/do_fizhi.F
ViewVC logotype

Contents of /MITgcm/pkg/fizhi/do_fizhi.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.15 - (show annotations) (download)
Thu Jun 24 15:06:51 2004 UTC (19 years, 11 months ago) by molod
Branch: MAIN
Changes since 1.14: +6 -1 lines
Code to fill some fizhi diagnostics from do_fizhi

1 C $Header: /u/gcmpack/MITgcm/pkg/fizhi/do_fizhi.F,v 1.14 2004/06/21 16:23:56 molod Exp $
2 C $Name: $
3 #include "CPP_EEOPTIONS.h"
4 subroutine do_fizhi(myid,uphy,vphy,thphy,sphy,pephy,lons,lats,
5 . ctmt,xxmt,yymt,zetamt,xlmt,khmt,tke,
6 . tgz,sice,phis_var,landtype,fracland,emiss,albnidr,albnirdf,
7 . albvisdr,albvisdf,ityp,chfr,alai,agrn,igrd,chlat,chlon,
8 . tcanopy,tdeep,ecanopy,swetshal,swetroot,swetdeep,snodep,capac,
9 . o3,qstr,co2,cfc11,cfc12,cfc22,n2o,methane,
10 . idim1,idim2,jdim1,jdim2,Nrphys,Nsx,Nsy,im1,im2,jm1,jm2,bi,bj,
11 . nchp,nchpland,
12 . duphy,dvphy,dthphy,dsphy)
13 c-----------------------------------------------------------------------
14 c Interface routine to calculate physics increments - calls fizhi_driver.
15 c Purpose of this routine is to set up arrays local to fizhi and 'save'
16 c them from one iteration to the next, and act as interface between the
17 c model common blocks (held in fizhi_wrapper) and fizhi_driver.
18 c Copies of variables that are 'shadowed' are made here without shadows
19 c for passing to fizhi_driver.
20 c Note: routine is called from inside a bi-bj loop
21 c
22 c-----------------------------------------------------------------------
23 implicit none
24
25 C Argument list declarations
26 integer myid,im1,im2,jm1,jm2,idim1,idim2,jdim1,jdim2
27 integer Nrphys,Nsx,Nsy,bi,bj,nchp,nchpland,
28 _RL uphy(idim1:idim2,jdim1:jdim2,Nrphys,Nsx,Nsy)
29 _RL vphy(idim1:idim2,jdim1:jdim2,Nrphys,Nsx,Nsy)
30 _RL thphy(idim1:idim2,jdim1:jdim2,Nrphys,Nsx,Nsy)
31 _RL sphy(idim1:idim2,jdim1:jdim2,Nrphys,Nsx,Nsy)
32 _RL pephy(idim1:idim2,jdim1:jdim2,Nrphys+1,Nsx,Nsy)
33 _RL lons(idim1:idim2,jdim1:jdim2,Nsx,Nsy)
34 _RL lats(idim1:idim2,jdim1:jdim2,Nsx,Nsy)
35 _RL ctmt(nchp,Nsx,Nsy),xxmt(nchp,Nsx,Nsy),yymt(nchp,Nsx,Nsy)
36 _RL zetamt(nchp,Nsx,Nsy)
37 _RL xlmt(nchp,Nrphys,Nsx,Nsy),khmt(nchp,Nrphys,Nsx,Nsy)
38 _RL tke(nchp,Nrphys,Nsx,Nsy)
39 _RL tgz(im2,jm2,Nsx,Nsy)
40 _RL sice(idim1:idim2,jdim1:jdim2,Nsx,Nsy)
41 _RL phis_var(im2,jm2,Nsx,Nsy),landtype(im2,jm2,Nsx,Nsy)
42 _RL fracland(im2,jm2,Nsx,Nsy),emiss(im2,jm2,10,Nsx,Nsy)
43 _RL albvisdr(im2,jm2,Nsx,Nsy),albvisdf(im2,jm2,Nsx,Nsy)
44 _RL albnirdr(im2,jm2,Nsx,Nsy),albnirdf(im2,jm2,Nsx,Nsy)
45 _RL chfr(nchp,Nsx,Nsy),alai(nchp,Nsx,Nsy),agrn(nchp,Nsx,Nsy)
46 integer ityp(nchp,Nsx,Nsy),igrd(nchp,Nsx,Nsy)
47 _RL chlat(nchp,Nsx,Nsy),chlon(nchp,Nsx,Nsy)
48 _RL tcanopy(nchp,Nsx,Nsy),tdeep(nchp,Nsx,Nsy)
49 _RL ecanopy(nchp,Nsx,Nsy),swetshal(nchp,Nsx,Nsy)
50 _RL swetroot(nchp,Nsx,Nsy),swetdeep(nchp,Nsx,Nsy)
51 _RL snodep(nchp,Nsx,Nsy),capac(nchp,Nsx,Nsy),
52 _RL o3(im2,jm2,Nsx,Nsy),qstr(im2,jm2,Nsx,Nsy)
53 _RL co2,cfc11,cfc12,cfc22,n2o(Nrphys),methane(Nrphys)
54 _RL duphy(idim1:idim2,jdim1:jdim2,Nrphys,Nsx,Nsy)
55 _RL dvphy(idim1:idim2,jdim1:jdim2,Nrphys,Nsx,Nsy)
56 _RL dthphy(idim1:idim2,jdim1:jdim2,Nrphys,Nsx,Nsy)
57 _RL dsphy(idim1:idim2,jdim1:jdim2,Nrphys,Nsx,Nsy)
58 c
59 integer ptracer,ntracer
60 integer iras,nlwcld,nlwlz,nswcld,nswlz
61 integer imstturbsw,imstturblw
62
63 real xlats(im2,jm2), xlons(im2,jm2), sea_ice(im2,jm2), p(im2,jm2)
64 real u(im2,jm2,Nrphys), v(im2,jm2,Nrphys), t(im2,jm2,Nrphys)
65 real q(im2,jm2,Nrphys,ntracer)
66 real pl(im2,jm2,Nrphys),pkl(im2,jm2,Nrphys+1)
67 real ple(im2,jm2,Nrphys+1),pkle(im2,jm2,Nrphys)
68 real dpres(im2,jm2,Nrphys)
69 real lwdt(im2,jm2,Nrphys,Nsx,Nsy),lwdtclr(im2,jm2,Nrphys,Nsx,Nsy)
70 real swdt(im2,jm2,Nrphys,Nsx,Nsy),swdtclr(im2,jm2,Nrphys,Nsx,Nsy)
71 real turbu(im2,jm2,Nrphys,Nsx,Nsy),turbv(im2,jm2,Nrphys,Nsx,Nsy)
72 real turbt(im2,jm2,Nrphys,Nsx,Nsy),turbq(im2,jm2,Nrphys,Nsx,Nsy)
73 real moistu(im2,jm2,Nrphys,Nsx,Nsy),moistv(im2,jm2,Nrphys,Nsx,Nsy)
74 real moistt(im2,jm2,Nrphys,Nsx,Nsy),moistq(im2,jm2,Nrphys,Nsx,Nsy)
75 real radswt(im2,jm2,Nsx,Nsy),radswg(im2,jm2,Nsx,Nsy)
76 real swgclr(im2,jm2,Nsx,Nsy)
77 real fdirpar(im2,jm2,Nsx,Nsy),fdifpar(im2,jm2,Nsx,Nsy)
78 real osr(im2,jm2,Nsx,Nsy),osrclr(im2,jm2,Nsx,Nsy)
79 real tg0(im2,jm2,Nsx,Nsy),radlwg(im2,jm2,Nsx,Nsy)
80 real st4(im2,jm2,Nsx,Nsy)
81 real dst4(im2,jm2,Nsx,Nsy),dlwdtg(im2,jm2,Nrphys,Nsx,Nsy)
82 real rainlsp(im2,jm2,Nsx,Nsy),raincon(im2,jm2,Nsx,Nsy)
83 real snowfall(im2,jm2,Nsx,Nsy)
84 real cldtot_lw(im2,jm2,Nrphys,Nsx,Nsy)
85 real clras_lw(im2,jm2,Nrphys,Nsx,Nsy)
86 real cldlsp_lw(im2,jm2,Nrphys,Nsx,Nsy)
87 real lwlz(im2,jm2,Nrphys,Nsx,Nsy)
88 real cldtot_sw(im2,jm2,Nrphys,Nsx,Nsy)
89 real clras_sw(im2,jm2,Nrphys,Nsx,Nsy)
90 real cldlsp_sw(im2,jm2,Nrphys,Nsx,Nsy)
91 real swlz(im2,jm2,Nrphys,Nsx,Nsy)
92 real qliqavesw(im2,jm2,Nrphys,Nsx,Nsy)
93 real qliqavelw(im2,jm2,Nrphys,Nsx,Nsy)
94 real fccavesw(im2,jm2,Nrphys,Nsx,Nsy)
95 real fccavelw(im2,jm2,Nrphys,Nsx,Nsy)
96 real qq(im2,jm2,Nrphys,Nsx,Nsy)
97
98 integer i,j,L
99 real getcon, kappa, p0kappa, s0, ra
100 real cosz(im2,jm2)
101
102 logical alarm
103 external alarm
104
105 save lwdt,lwdtclr,swdt,swdtclr,turbu,turbv,turbt,turbq
106 save moistu,moistv,moistt,moistq
107 save radswg,swgclr,fdirpar,fdifpar,osr,osrclr,tg0,radlwg
108 save st4,dst4,dlwdtg,rainlsp,raincon,snowfall,iras
109 save nlwcld,cldtot_lw,clras_lw,cldlsp_lw,nlwlz,lwlz
110 save nswcld,cldtot_sw,clras_sw,cldlsp_sw,nswlz,swlz,
111 save imstturbsw,imstturblw,qliqavesw,qliqavelw,fccavesw,fccavelw
112 save qq
113
114 C***********************************************************************
115 C Unshadow input arrays (and make 'fizhi theta' from true theta)
116 C***********************************************************************
117
118 kappa = getcon('KAPPA')
119 p0kappa = 1000.0 ** kappa
120 S0 = getcon('S0')
121
122 call astro ( nymd,nhms, xlats,xlons, im2*jm2, cosz,ra )
123 do j=jm1,jm2
124 do i=im1,im2
125 radswt(i,j) = S0*(1.0/ra**2)*cosz(i,j)
126 enddo
127 enddo
128
129 ptracer = 1
130 ntracer = 1
131
132 if( alarm('moist') .or. alarm('turb') .or.
133 . alarm('radsw') .or. alarm('radlw') ) then
134
135 do j = jm1,jm2
136 do i = im1,im2
137 ple(i,j,Nrphys+1) = pephy(i,j,Nrphys+1,bi,bj)
138 pkle(i,j,Nrphys+1) = pephy(i,j,Nrphys+1,bi,bj) **kappa
139 p(i,j) = pephy(i,j,Nrphys+1,bi,bj)
140 xlats(i,j) = lats(i,j,bi,bj)
141 xlons(i,j) = lons(i,j,bi,bj)
142 sea_ice(i,j) = sice(i,j,bi,bj)
143 enddo
144 enddo
145 do L = 1,Nrphys
146 do j = jm1,jm2
147 do i = im1,im2
148 u(i,j,L) = uphy(i,j,L,bi,bj)
149 v(i,j,L) = vphy(i,j,L,bi,bj)
150 t(i,j,L) = thphy(i,j,L,bi,bj)/p0kappa
151 q(i,j,L,1) = sphy(i,j,L,bi,bj)
152 pl(i,j,L) = (pephy(i,j,L,bi,bj)+pephy(i,j,L+1))/2.
153 dpres(i,j,L) = pephy(i,j,L+1,bi,bj)-pephy(i,j,L)
154 ple(i,j,L) = pephy(i,j,L,bi,bj)
155 pkle(i,j,L) = ple(i,j,L) **kappa
156 enddo
157 enddo
158 enddo
159
160 call pkappa (ple,pkle,im2,jm2,Nrphys,pkl)
161
162 call fizhi_driver(myid,im2,jm2,Nrphys,ptracer,ntracer,xlats,xlons,
163 . p,u,v,t,q,pl,ple,dpres,pkle,pkl,fracland(1,1,bi,bj),
164 . landtype(1,1,bi,bj),radswt,
165 . phis_var(1,1,bi,bj),tgz(1,1,bi,bj),sea_ice,
166 . nchp,chlat(1,bi,bj),chlon(1,bi,bj),igrd(1,bi,bj),nchpland,
167 . chfr(1,bi,bj),ityp(1,bi,bj),
168 . tcanopy(1,bi,bj),tdeep(1,bi,bj),ecanopy(1,bi,bj),
169 . swetshal(1,bi,bj),swetroot(1,bi,bj),swetdeep(1,bi,bj),
170 . capac(1,bi,bj),snodep(1,bi,bj),
171 . ctmt(1,bi,bj),xxmt(1,bi,bj),yymt(1,bi,bj),zetamt(1,bi,bj),
172 . xlmt(1,1,bi,bj),khmt(1,1,bi,bj),tke(1,1,bi,bj),
173 . albvisdr(1,bi,bj),albvisdf(1,bi,bj),albnirdr(1,bi,bj),
174 . albnirdf(1,bi,bj),emiss(1,bi,bj),alai(1,bi,bj),agrn(1,bi,bj),
175 . qstr(1,1,bi,bj),o3(1,1,bi,bj),co2,cfc11,cfc12,cfc22,methane,n2o,
176 . lwdt(1,1,1,bi,bj),lwdtclr(1,1,1,bi,bj),swdt(1,1,1,bi,bj),
177 . swdtclr(1,1,1,bi,bj),turbu(1,1,1,bi,bj),turbv(1,1,1,bi,bj),
178 . turbt(1,1,1,bi,bj),turbq(1,1,1,bi,bj),
179 . moistu(1,1,1,bi,bj),moistv(1,1,1,bi,bj),moistt(1,1,1,bi,bj),
180 . moistq(1,1,1,bi,bj),
181 . radswg(1,1,bi,bj),swgclr(1,1,bi,bj),fdirpar(1,1,bi,bj),
182 . fdifpar(1,1,bi,bj),osr(1,1,bi,bj),osrclr(1,1,bi,bj),
183 . tg0(1,1,bi,bj),radlwg(1,1,bi,bj),
184 . st4(1,1,bi,bj),dst4(1,1,bi,bj),dlwdtg(1,1,1,bi,bj),
185 . rainlsp(1,1,bi,bj),raincon(1,1,bi,bj),snowfall(1,1,bi,bj),iras,
186 . nlwcld,cldtot_lw(1,1,1,bi,bj),clras_lw(1,1,1,bi,bj),
187 . cldlsp_lw(1,1,1,bi,bj),nlwlz,lwlz(1,1,1,bi,bj),
188 . nswcld,cldtot_sw(1,1,1,bi,bj),clras_sw(1,1,1,bi,bj),
189 . cldlsp_sw(1,1,1,bi,bj),nswlz,swlz(1,1,1,bi,bj),
190 . imstturbsw,imstturblw,qliqavesw(1,1,1,bi,bj),
191 . qliqavelw(1,1,1,bi,bj),fccavesw(1,1,1,bi,bj),
192 . fccavelw(1,1,1,bi,bj),qq(1,1,1,bi,bj))
193
194 endif
195
196 do L = 1,Nrphys
197 do j = jm1,jm2
198 do i = im1,im2
199 duphy(i,j,L,bi,bj) = moistu(i,j,L,bi,bj) + turbu(i,j,L,bi,bj)
200 dvphy(i,j,L,bi,bj) = moistv(i,j,L,bi,bj) + turbv(i,j,L,bi,bj)
201 dthphy(i,j,L,bi,bj) = ((moistt(i,j,L,bi,bj)+turbt(i,j,L,bi,bj)+
202 . lwdt(i,j,L,bi,bj) +
203 . dlwdtg(i,j,L,bi,bj) * (tgz(i,j,bi,bj)-tg0(i,j,bi,bj)) +
204 . swdt(i,j,L,bi,bj) * radswt(i,j,bi,bj) ) * p0kappa ) / p(i,j)
205 dsphy(i,j,L,bi,bj) = (moistq(i,j,L,1,bi,bj)+turbq(i,j,L,1,bi,bj))
206 . /p(i,j)
207 enddo
208 enddo
209 enddo
210
211 call fizhi_step_diag(myThid,p,uphy,vphy,thphy,sphy,qq,
212 . radswt,radswg,swgclr,osr,osrclr,st4,dst4,tgz,tg0,radlwg,lwgclr,
213 . turbu,turbv,turbt,turbq,moistu,moistv,moistt,moistq,
214 . lwdt,swdt,lwdtclr,swdtclr,im1,im2,jm1,jm2,Nrphys,Nsx,Nsy,bi,bj)
215
216 return
217 end

  ViewVC Help
Powered by ViewVC 1.1.22