/[MITgcm]/MITgcm/pkg/bulk_force/bulkf_formula_vince.F
ViewVC logotype

Annotation of /MITgcm/pkg/bulk_force/bulkf_formula_vince.F

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


Revision 1.1 - (hide annotations) (download)
Thu Nov 21 19:11:42 2002 UTC (21 years, 6 months ago) by cheisey
Branch: MAIN
CVS Tags: checkpoint47b_post, checkpoint51f_post, checkpoint48i_post, checkpoint47a_post, checkpoint48d_post, checkpoint50b_post, checkpoint47i_post, checkpoint48g_post, branchpoint-genmake2, checkpoint50c_pre, checkpoint50, checkpoint51j_post, branch-exfmods-tag, checkpoint47e_post, checkpoint50f_post, checkpoint50a_post, checkpoint48e_post, checkpoint47c_post, checkpoint50f_pre, checkpoint48b_post, checkpoint47j_post, checkpoint47d_pre, checkpoint50d_pre, checkpoint47h_post, checkpoint51d_post, checkpoint51, checkpoint48c_pre, checkpoint48c_post, checkpoint50d_post, checkpoint47f_post, checkpoint51b_pre, checkpoint50e_post, checkpoint47g_post, checkpoint50h_post, checkpoint50c_post, checkpoint51a_post, checkpoint47d_post, checkpoint50e_pre, checkpoint50b_pre, checkpoint48d_pre, checkpoint50i_post, checkpoint51e_post, checkpoint51b_post, checkpoint48a_post, checkpoint51h_pre, checkpoint48f_post, checkpoint51i_pre, checkpoint50g_post, checkpoint51c_post, checkpoint51g_post, checkpoint48, checkpoint49, checkpoint51f_pre, checkpoint48h_post
Branch point for: branch-genmake2, branch-exfmods-curt
Two packages:  bulk_force (Bulk forcing)
and therm_seaice (thermodynamic_seaice) - adopted from LANL CICE.v2.0.2
Earlier integration from Stephaine Dutkiewicz
and Patrick Heimbach.

Two ifdef statements for compile time,
ALLOW_THERM_SEAICE and ALLOW_BULK_FORCE

Two switches in data.pkg to turn on at run-time:

cat data.pkg
# Packages
 &PACKAGES
 useBulkForce=.TRUE.,
 useThermSeaIce=.TRUE.,
 &

WARNING:  useSEAICE and useThermSEAICE are mutually exclusive.

The bulk package requires an additional parameter file
with two namelists, data.ice and data.blk.

c ADAPTED FROM:
c LANL CICE.v2.0.2
c-----------------------------------------------------------------------
c.. thermodynamics (vertical physics) based on M. Winton 3-layer model
c.. See Bitz, C. M. and W. H. Lipscomb, 1999:  "An energy-conserving
c..       thermodynamic sea ice model for climate study."  J. Geophys.
c..       Res., 104, 15669 - 15677.
c..     Winton, M., 1999:  "A reformulated three-layer sea ice model."
c..       Submitted to J. Atmos. Ocean. Technol.

c.. authors Elizabeth C. Hunke and William Lipscomb
c..         Fluid Dynamics Group, Los Alamos National Laboratory
c-----------------------------------------------------------------------

1 cheisey 1.1 c swd -- bulkf formula used in bulkf and ice pkgs
2     c cswd -- adapted from vince/andrei surf_flux.f
3    
4     #include "CPP_OPTIONS.h"
5     subroutine bulkf_formula_vince(
6     I uw, vw, us, Ta, Qa, nc, tsf_in,
7     I UFocean, flwup, flha, fsha, df0dT,
8     I ust, vst, evp, ssq,
9     I iceornot, readstress
10     & )
11    
12     IMPLICIT NONE
13     c
14     #include "EEPARAMS.h"
15     #include "SIZE.h"
16     #include "PARAMS.h"
17     #include "DYNVARS.h"
18     #include "GRID.h"
19     #include "FFIELDS.h"
20     #ifdef ALLOW_BULKFORMULA
21     #include "BULKF_ICE_CONSTANTS.h"
22     #endif
23     #ifdef ALLOW_TSEAICE
24     #include "ICE.h"
25     #endif
26    
27     c
28     c calculate bulk formula fluxes over open ocean or seaice
29     c
30     c input
31     _RL us ! wind speed
32     _RL uw ! zonal wind speed (at grid center)
33     _RL vw ! meridional wind speed (at grid center)
34     _RL Ta ! air temperature at ht
35     _RL Qa ! specific humidity at ht
36     _RL nc ! cloud cover
37     _RL tsf_in ! surface temperature (either ice or open water)
38     integer iceornot ! 0=open water, 1=ice cover
39     logical readstress
40     c output
41     _RL flwup ! upward long wave radiation
42     _RL flha ! latent heat flux
43     _RL fsha ! sensible heat flux
44     _RL df0dT ! derivative of heat flux with respect to Tsf
45     _RL ust ! zonal wind stress (at grid center)
46     _RL vst ! meridional wind stress (at grid center)
47     _RL evp ! evaporation rate (over open water)
48     _RL ssq ! surface specific humidity (kg/kg)
49     c
50     c input and output
51     _RL UFocean
52     c
53     c local variables
54     _RL ea
55     _RL mixratio
56     _RL stable
57     _RL tsf ! surface temperature in K
58     _RL ht ! reference height (m)
59     _RL usm ! wind speed limited
60     _RL deltap ! potential temperature diff (K)
61     _RL delq ! specific humidity difference
62     _RL lhcoef
63     _RL shcoef
64     _RL dflhdT ! derivative of latent heat with respect to T
65     _RL dfshdT ! derivative of sensible heat with respect to T
66     _RL dflwupdT ! derivative of long wave with respect to T
67     c from vinces
68     _RL elhx
69     _RL rough
70     _RL cdn
71     _RL surf_emissivity ! ocean or ice emissivity
72     _RL qg
73     _RL rigs
74     _RL dm
75     _RL dh
76     _RL cdm
77     _RL cdh
78     _RL rcdhws
79     _RL Tsv
80     _RL dqssdt
81     _RL x
82     integer lr
83    
84     _RL flwdown ! part of output eventually QQ
85     #ifdef ALLOW_BULKFORMULA
86    
87     _RL AROUGH(20),BROUGH(20),CROUGH(20),DROUGH(20),EROUGH(20)
88     DATA AROUGH/16.59,13.99,10.4,7.35,5.241,3.926,3.126,2.632,2.319,
89     *2.116,1.982,1.893,1.832,1.788,1.757,1.733,1.714,1.699,1.687,1.677/
90     DATA BROUGH/3.245,1.733,0.8481,0.3899,0.1832,0.9026E-1,0.4622E-1,
91     * .241E-1,.1254E-1,.6414E-2,.3199E-2,.1549E-2,.7275E-3,.3319E-3,
92     * .1474E-3,.6392E-4,.2713E-4,.1130E-4,.4630E-5,.1868E-5/
93     DATA CROUGH/5.111,3.088,1.682,.9239,.5626,.3994,.3282,.3017,.299
94     *,.3114,.3324,.3587,.3881,.4186,.4492,.4792,.5082,.5361,.5627,
95     * .5882/
96     DATA DROUGH/1.24,1.02,0.806,0.682,0.661,0.771,0.797,0.895,0.994,
97     * 1.09,1.18,1.27,1.35,1.43,1.50,1.58,1.65,1.71,1.78,1.84/
98     DATA EROUGH/0.128,0.130,0.141,0.174,0.238,0.330,0.438,0.550,0.660,
99     * 0.766,0.866,0.962,1.05,1.14,1.22,1.30,1.37,1.45,1.52,1.58/
100    
101    
102     c --- external functions ---
103     _RL exf_BulkCdn
104     external exf_BulkCdn
105    
106     c UFocean=1e-2 !QQ what is this and what is the number?
107    
108     c -- set all to zero
109     flwup = 0.d0 ! upward long wave radiation
110     flha = 0.d0 ! latent heat flux
111     fsha = 0.d0 ! sensible heat flux
112     df0dT = 0.d0 ! derivative of heat flux with respect to Tsf
113     ust = 0.d0 ! zonal wind stress (at grid center)
114     vst = 0.d0 ! meridional wind stress (at grid center)
115     evp = 0.d0 ! evaporation rate (over open water)
116     ssq = 0.d0 ! surface specific humidity (kg/kg)
117    
118    
119     Qa=max(Qa,1e-7)
120     Tsf=Tsf_in+Tf0kel
121     ht=10.e0
122     c Wind speed
123     if (us.eq.0.d0) then !in case we have a constant prescribed us
124     us = sqrt(uw*uw + vw*vw)
125     endif
126     usm = max(us,1.d-5)
127     cQQQ try to limit drag
128     cQQQ usm = min(usm,5.d0)
129    
130     c from vinces surfflux.F
131     if (iceornot.eq.0) then
132     c for open water
133     rough=max(0.018*UFocean/gravity,0.5E-5) !QQcheck
134     elhx=Lvap !QQcheck
135     else
136     c for sea ice cover
137     rough=10**(-3.37) !QQcheck
138     elhx = Lvap_ice
139     endif
140     Qg =3.797915*exp(elhx*(7.93252e-6-2.166847E-3/Ta))/p0
141     c
142     c find stability of atmospheric surface layer stratification
143     rough=log10(ht/rough)
144     cdn=.0231/(rough*rough) !QQcheck
145     lr=rough*2.d0 - 5.d-1 !QQcheck
146     lr=max(1,min(lr,20))
147     rigs=ht*gravity*(Tsf-Ta)/(Ta*usm*usm)
148     if (rigs.le.0.d0) then
149     c unstable
150     dm=sqrt((1.d0-AROUGH(lr)*rigs)*(1.d0-BROUGH(lr)*rigs)/
151     & (1.d0-CROUGH(lr)*rigs))
152     dh=1.35*sqrt((1.d0-DROUGH(lr)*rigs)/
153     & (1.d0-EROUGH(lr)*rigs)) !QQcheck
154     else
155     c stable
156     dm=1.d0/(1.d0+(11.238+89.9*rigs)*rigs) !QQcheck
157     dh=1.35/(1.d0+1.93*rigs) !QQcheck
158     endif
159     cdm = cdn * dm
160     cdh = cdn * dm * dh
161    
162     rcdhws = cdh*us*100*p0/(Rgas*Tsf) !QQ check units (take out 100)
163     ssq =3.797915*exp(elhx*(7.93252e-6-2.166847E-3/Tsf))/p0
164     cBB debugging
165     cBB print*,'ssq', qcoef, ssq
166     c
167    
168     if (Qa.le.ssq) then
169     Tsv=Tsf
170     ssq=ssq !QQQQ should be ssq=qa?
171     else
172     dqssdt=ssq*elhx/(Rvap*Tsf*Tsf)
173     x=(Qa-ssq)/(dqssdt+(sha/elhx))
174     Tsv=Tsf+x
175     ssq=Qa+x*(sha/elhx)
176     endif
177    
178     deltap = Ta - Tsv !tsv-Ta
179     delq = Qg - ssq !Qsv - Qg
180     cmine deltap = ta - tsf + gamma_blk*ht
181     cmine delq = Qa - ssq
182     c latent heat
183     c -------------
184     cvinc lhcoef = Lvap*rcdhws
185     cmine latent heat coeff. following Gill 2.4.6 and 2.6.2 formula
186     lhcoef =Lvap*rhoa*us*5e-3 !QQ name coeff. !QQwas 1.5e-3
187     flha = lhcoef*delq !QQQ
188     evp = lhcoef*delq/Lvap/rhosw
189     c sensible heat
190     c ----------------
191     cvinc shcoef=sha*rcdhws
192     cmine sensible heat coeff. following Gill 2.4.5 formula
193     stable = 5.d-1 + sign(5.d-1, deltap)
194     if (stable.gt.0) then
195     shcoef = 0.83e-3*rhoa*us*cpair
196     else
197     shcoef = 1.10e-3*rhoa*us*cpair
198     endif
199     fsha = shcoef*deltap
200    
201     c long wave
202     c ------------
203     cvinc if (iceornot.eq.1) then
204     cvinc#ifdef ALLOW_TSEAICE
205     cvinc if (snowheight.gt.0.d0) then
206     cvinc surf_emissivity=snow_emissivity
207     cvinc else
208     cvinc surf_emissivity=ice_emissivity
209     cvinc endif
210     cvinc#endif
211     cvinc else
212     cvinc surf_emissivity=ocean_emissivity
213     cvinc endif
214     cvinc flwup = -surf_emissivity*stefan*
215     cvinc & Tsf**4.0 !QQcheck
216     cvinc flwdown = atm_emissivity*stefan *
217     cvinc & Ta**4.0 * (1.0+0.275*nc) *
218     cvinc & (1.0-0.261*exp(-7.77e-4*(273.15-Ta)**2.0)) !QQcheck
219     cvinc flwup=flwup+flwdown !QQQQQ??
220     cmine up (net) long wave radiation
221     mixratio=Qa/(1-Qa)
222     ea=p0*mixratio/(0.62197+mixratio)
223     flwup=-0.985*stefan*tsf**4
224     & *(0.39-0.05*sqrt(ea))
225     & *(1-0.6*nc**2)
226     c -------------------------
227     UFocean=cdm*us*us
228    
229     #ifdef ALLOW_TSEAICE
230     if (iceornot.eq.1) then
231     c derivatives of heat flux
232     c -------------------------
233     c dflwupdT=-4.0*surf_emissivity*stefan *
234     c & Tsf**3.0 !QQcheck
235     cQQ corrected for Vince formula
236     dflhdT = -lhcoef*ssq*Lvap*2.166847E-3/(Tsf**2)
237     dfshdT = -shcoef !QQQQQQ not quite right
238     cmine derivatives with respect to Tsf
239     cmine dflhdT = -lhcoef*Tf0kel*ssq*22.47/(tsf**2)
240     cmine dfshdT = -shcoef
241     dflwupdT=-4.*0.985*stefan*tsf**3
242     & *(0.39-0.05*sqrt(ea))
243     c
244     c total derivative with respect to surface temperature
245     df0dT=dflwupdT+dfshdT+dflhdT
246     cBB
247     cBB print*,'derivatives:',df0dT,dflwupdT,dfshdT,dflhdT
248     endif
249     #endif /*ALLOW_TSEAICE*/
250     c
251     c wind stress at center points
252     c -----------------------------
253     if (.NOT.readstress) then
254     ust = rhoa*exf_BulkCdn(usm)*us*uw
255     vst = rhoa*exf_BulkCdn(usm)*us*vw
256     endif
257     #endif /*ALLOW_BULKFORMULA*/
258    
259     return
260     end

  ViewVC Help
Powered by ViewVC 1.1.22