/[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.20 - (show annotations) (download)
Wed Jul 14 14:50:04 2004 UTC (19 years, 10 months ago) by molod
Branch: MAIN
CVS Tags: checkpoint54c_post
Changes since 1.19: +3 -2 lines
Debugging

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

  ViewVC Help
Powered by ViewVC 1.1.22