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

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

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


Revision 1.16 - (hide annotations) (download)
Thu Jun 24 18:56:57 2004 UTC (19 years, 10 months ago) by molod
Branch: MAIN
Changes since 1.15: +21 -17 lines
Fizhi diagnostics that are computed every dynamics time step

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

  ViewVC Help
Powered by ViewVC 1.1.22