/[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.18 - (hide annotations) (download)
Wed Jul 7 19:33:48 2004 UTC (19 years, 11 months ago) by molod
Branch: MAIN
CVS Tags: checkpoint54b_post
Changes since 1.17: +9 -8 lines
Almost last code to get rid of references to sigma coordinate

1 molod 1.18 C $Header: /u/gcmpack/MITgcm/pkg/fizhi/do_fizhi.F,v 1.17 2004/06/24 19:57:02 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.18 C compute pressures - all pressure are converted here to hPa
138 molod 1.11 do j = jm1,jm2
139     do i = im1,im2
140 molod 1.18 ple(i,j,Nrphys+1,bi,bj) = pephy(i,j,Nrphys+1,bi,bj)/100.
141     pkle(i,j,Nrphys+1,bi,bj)=(pephy(i,j,Nrphys+1,bi,bj)/100.) **kappa
142     p(i,j,bi,bj) = pephy(i,j,Nrphys+1,bi,bj)/100.
143 molod 1.11 xlats(i,j) = lats(i,j,bi,bj)
144     xlons(i,j) = lons(i,j,bi,bj)
145     sea_ice(i,j) = sice(i,j,bi,bj)
146     enddo
147     enddo
148 molod 1.13 do L = 1,Nrphys
149     do j = jm1,jm2
150     do i = im1,im2
151     u(i,j,L) = uphy(i,j,L,bi,bj)
152     v(i,j,L) = vphy(i,j,L,bi,bj)
153     t(i,j,L) = thphy(i,j,L,bi,bj)/p0kappa
154     q(i,j,L,1) = sphy(i,j,L,bi,bj)
155 molod 1.18 pl(i,j,L,bi,bj) = (pephy(i,j,L,bi,bj)+pephy(i,j,L+1))/200.
156     dpres(i,j,L,bi,bj) = (pephy(i,j,L+1,bi,bj)-pephy(i,j,L))/100.
157     ple(i,j,L,bi,bj) = pephy(i,j,L,bi,bj)/100.
158     pkle(i,j,L,bi,bj) = (ple(i,j,L) /100.) **kappa
159 molod 1.13 enddo
160 molod 1.12 enddo
161     enddo
162    
163 molod 1.16 call pkappa (ple(1,1,1,bi,bj),pkle(1,1,1,bi,bj),im2,jm2,Nrphys,
164     . pkl(1,1,1,bi,bj))
165 molod 1.1
166 molod 1.17 call fizhi_driver(myid,im2,jm2,Nrphys,bi,bj,ptracer,ntracer,xlats,
167     . xlons,p(1,1,bi,bj),u,v,t,q,pl(1,1,1,bi,bj),ple(1,1,1,bi,bj),
168 molod 1.16 . dpres(1,1,1,bi,bj),pkle(1,1,1,bi,bj),pkl(1,1,1,bi,bj),
169     . fracland(1,1,bi,bj),landtype(1,1,bi,bj),radswt,
170 molod 1.12 . phis_var(1,1,bi,bj),tgz(1,1,bi,bj),sea_ice,
171     . nchp,chlat(1,bi,bj),chlon(1,bi,bj),igrd(1,bi,bj),nchpland,
172     . chfr(1,bi,bj),ityp(1,bi,bj),
173     . tcanopy(1,bi,bj),tdeep(1,bi,bj),ecanopy(1,bi,bj),
174     . swetshal(1,bi,bj),swetroot(1,bi,bj),swetdeep(1,bi,bj),
175     . capac(1,bi,bj),snodep(1,bi,bj),
176     . ctmt(1,bi,bj),xxmt(1,bi,bj),yymt(1,bi,bj),zetamt(1,bi,bj),
177     . xlmt(1,1,bi,bj),khmt(1,1,bi,bj),tke(1,1,bi,bj),
178     . albvisdr(1,bi,bj),albvisdf(1,bi,bj),albnirdr(1,bi,bj),
179     . albnirdf(1,bi,bj),emiss(1,bi,bj),alai(1,bi,bj),agrn(1,bi,bj),
180     . qstr(1,1,bi,bj),o3(1,1,bi,bj),co2,cfc11,cfc12,cfc22,methane,n2o,
181 molod 1.14 . lwdt(1,1,1,bi,bj),lwdtclr(1,1,1,bi,bj),swdt(1,1,1,bi,bj),
182     . swdtclr(1,1,1,bi,bj),turbu(1,1,1,bi,bj),turbv(1,1,1,bi,bj),
183     . turbt(1,1,1,bi,bj),turbq(1,1,1,bi,bj),
184     . moistu(1,1,1,bi,bj),moistv(1,1,1,bi,bj),moistt(1,1,1,bi,bj),
185     . moistq(1,1,1,bi,bj),
186     . radswg(1,1,bi,bj),swgclr(1,1,bi,bj),fdirpar(1,1,bi,bj),
187     . fdifpar(1,1,bi,bj),osr(1,1,bi,bj),osrclr(1,1,bi,bj),
188     . tg0(1,1,bi,bj),radlwg(1,1,bi,bj),
189     . st4(1,1,bi,bj),dst4(1,1,bi,bj),dlwdtg(1,1,1,bi,bj),
190     . rainlsp(1,1,bi,bj),raincon(1,1,bi,bj),snowfall(1,1,bi,bj),iras,
191     . nlwcld,cldtot_lw(1,1,1,bi,bj),clras_lw(1,1,1,bi,bj),
192     . cldlsp_lw(1,1,1,bi,bj),nlwlz,lwlz(1,1,1,bi,bj),
193     . nswcld,cldtot_sw(1,1,1,bi,bj),clras_sw(1,1,1,bi,bj),
194     . cldlsp_sw(1,1,1,bi,bj),nswlz,swlz(1,1,1,bi,bj),
195     . imstturbsw,imstturblw,qliqavesw(1,1,1,bi,bj),
196     . qliqavelw(1,1,1,bi,bj),fccavesw(1,1,1,bi,bj),
197     . fccavelw(1,1,1,bi,bj),qq(1,1,1,bi,bj))
198 molod 1.13
199     endif
200 molod 1.12
201     do L = 1,Nrphys
202     do j = jm1,jm2
203     do i = im1,im2
204 molod 1.14 duphy(i,j,L,bi,bj) = moistu(i,j,L,bi,bj) + turbu(i,j,L,bi,bj)
205     dvphy(i,j,L,bi,bj) = moistv(i,j,L,bi,bj) + turbv(i,j,L,bi,bj)
206     dthphy(i,j,L,bi,bj) = ((moistt(i,j,L,bi,bj)+turbt(i,j,L,bi,bj)+
207     . lwdt(i,j,L,bi,bj) +
208     . dlwdtg(i,j,L,bi,bj) * (tgz(i,j,bi,bj)-tg0(i,j,bi,bj)) +
209 molod 1.16 . swdt(i,j,L,bi,bj)*radswt(i,j,bi,bj) )*p0kappa ) / p(i,j,bi,bj)
210 molod 1.14 dsphy(i,j,L,bi,bj) = (moistq(i,j,L,1,bi,bj)+turbq(i,j,L,1,bi,bj))
211 molod 1.16 . /p(i,j,bi,bj)
212 molod 1.12 enddo
213     enddo
214     enddo
215 molod 1.5
216 molod 1.16 call fizhi_step_diag(myThid,p,uphy,vphy,thphy,sphy,qq,pkl,dpres,
217 molod 1.15 . radswt,radswg,swgclr,osr,osrclr,st4,dst4,tgz,tg0,radlwg,lwgclr,
218     . turbu,turbv,turbt,turbq,moistu,moistv,moistt,moistq,
219     . lwdt,swdt,lwdtclr,swdtclr,im1,im2,jm1,jm2,Nrphys,Nsx,Nsy,bi,bj)
220    
221 molod 1.5 return
222     end

  ViewVC Help
Powered by ViewVC 1.1.22