/[MITgcm]/MITgcm_contrib/ifenty/Fenty_Thermo_Code_Updates/README.txt
ViewVC logotype

Contents of /MITgcm_contrib/ifenty/Fenty_Thermo_Code_Updates/README.txt

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


Revision 1.1 - (show annotations) (download)
Fri Sep 3 13:09:20 2010 UTC (14 years, 11 months ago) by ifenty
Branch: MAIN
CVS Tags: HEAD
File MIME type: text/plain
Error occurred while calculating annotation data.
Added readme.txt to Fenty_thermo_code_updates

1 I went through the seaice_*_if.F codes in the repository and made some updates to seaice_budget_ice_if.F and seaice_growth_if.F, brought the code into spec as per Jean-Michel's suggestions (remove unnecessary overlaps, send myIter and myThid to seaice_budget_ice, removed seaice_budget_ocean_if.F, etc.), and clarified most of the comments/in line documentation.
2
3 In addition, I configured two verification-type setups. The first is a modification of the existing verification/lab sea setup and the other is basically a 1-D column. In both one can run forward and adjoint calculations to compare
4
5 If you have the time, please look at the code updates or try them in one of your setups. I would like to know if you find any problems.
6
7 The verification experiments and code updates can be found in the /MITgcm_contrib/ifenty/Fenty_Thermo_Code_Updates
8
9 Code updates (which include changes to SEAICE_PARAM.h, seaice_readparams.F, and seaice_summary.F), are found in the directory code_updates.
10
11 ===== Verification Experiments =====
12
13 The lab sea verification setup is found in code_20x16_verification_experiment and input_20x16_verification_experiment while the the 1d colum is in code_1D_verification_experiment and input_1D_verification_experiment. In addition, there are code_XXX_variation_1 in which the default thermodynamic codes are used instead.
14
15 The 1D setup uses a vertical T,S profile from the central Arctic that An made and atmospheric forcing which is similar to the Labrador Sea. Using the default thermo code, the adjoint NaN's in a run over 11,000 time steps.
16
17 Since the handling of salt in the salt plume is somewhat different between the default and _if codes, useSalt_PLUME is set to false by default in data.pkg to faciliate comparison between the _if and default codes.
18 Note: regardless of which thermodynamic ice codes are used, the adjoint run loops enlessly unless SEAICE_ALLOW_DYNAMICS is defined, for reasons which are not clear to me.
19
20
21 ===== Major code changes/thoughts =====
22
23 1) Ocean-ice heat fluxes
24 2) salt plume
25 3) ice salinity
26 4) ice age
27
28 === Ocean-ice heat fluxes ===
29
30 Now the model can use two alternative schemes to
31 calculate turbulent ocean-ice heat fluxes.
32 Each is described in turn
33
34 = METHOD 1 =
35
36 The first uses an empircal relationship between the
37 'far-field' ocean temperature and ocean to sea ice turbulent heat fluxes
38 given by McPhee:
39
40 Flux = rho_sw * cp_sw * <w'T'>
41 <w'T'>= S_t * u_star * (T_o - T_f)
42
43 Where,
44 rho_sw : seawater density (kg m^-3)
45 cp_sw : seawater heat capcity (J kg^-1 K^-1)
46 S_t : Stanton Number ~ 0.0056 (dimensionless)
47 u_star : friction velocity beneath ice ~ 0.015 m s^-1
48 T_o, T_f : The 'far-field' ocean temperature and ice
49 freezing point (deg C)
50
51 Using typical values, ice advected over waters warmer by 1 degree
52 will be subjected to a basal heat flux of ~ 345 W m^-2.
53
54 In the model, the criteria for ice growth is that the air-sea
55 heat loss must exceed the potential ocean-ice heat flux (i.e., more
56 potential ice production over one time step than melt).
57 Using the above parameterization, ice will form in waters which
58 are much warmer than its salinity-determined freezing point
59 using typical wintertime conditions in, say, the North Atlantic.
60
61 Therefore, when no ice is present, an additional factor is applied
62 to the above <w'T'> (mixedLayerTurbulenceFactor) to represent the idea that
63 turbulent mixing at and near the surface of an ice-free ocean
64 is much greater than mixing beneath an ice-covered one.
65
66 A factor of 12.5 is chosen for mixedLayerTurbulenceFactor. Consequently,
67 for each 0.1 degree above freezing of the upper ocean grid cell,
68 the air-sea heat losses must exceed ~ 515 W m^-2 before ice forms.
69
70 Once ice gains a foothold in a grid cell, the McPhee parameterization
71 is immediately invoked.
72
73 = METHOD 2 =
74
75 The second scheme (the original version)
76 subsumes (S_t * u_star) into a single variable (SEAICE_gamma_t)
77 in the following way:
78
79 Flux = rho_sw * cp_sw * GAMMA
80 GAMMA = dRf(1)/SEAICE_gamma_t * (T_o - T_f)
81
82 Where,
83 dRf(1) : depth of surface level grid cell (originally
84 assumed to be 10 m)
85 SEAICE_gamma_t : an empirical parameter (~ 3 days in seconds)
86
87 Using typical values, ice advected into a grid cell
88 that is warmer than the sea ice freezing point by 1 degree
89 will be subjected to a basal heat flux of ~ 160 W m^-2. Therefore,
90 as written, one should choose a SEAICE_gamma_t = 1.4 days in seconds
91 to have flux magnitudes match those of the McPhee parameterization.
92 Of course, even with this shorter SEAICE_gamma_t, ice will form
93 in grid cells which are far above freezing (> 1 degree) when
94 subjected to air-sea heat fluxes of ~ 345 W m^-2. (To get around
95 this I choose SEAICE_gamma_t to be ~ 10^4 seconds for my thesis,
96 but I really should have just added a mixedLayerTurbulenceFactor
97 instead.)
98
99 The original scheme is accessed by defining #SEAICE_USE_ORIGINAL_HEAT FLUX
100
101
102 === Seaice salinity ===
103
104 At present, melting and growing ice is assumed to have a
105 constant salinity specified by SEAICE_salinity_fixed. I plan to
106 put in Dimitris' variable salt fraction and HSALT to store
107 the total mass of salt stored within each grid cell's ice, but
108 it would take some more thinking on my part to be sure that I
109 conserve salt correctly.
110
111 === Salt Plumes ===
112
113 I assume that ice production in leads can generate
114 salt plumes. The fraction of the salt sent to the plume package
115 from ice produced in leads (defined by the open water
116 fraction) is a nonlinear function of ice concentration, AREA.
117
118 Specifically, the function is a logistic curve (sigmoid) with a range and
119 domain {0,1}. The function, f(AREA), has a single free parameter,
120 SEAICE_plumeInflectionPoint, the inflection point of the curve.
121
122 By construction, the function has the following properties:
123 f(1) \approx 1.0
124 f(SEAICE_plumeInflectionPoint) = 0.5
125 f(0) \approx 0.0 (when SEAICE_plumeInflectionPoint \geq 0.5)
126 f(0) > 0.0 (when SEAICE_plumeInflectionPoint < 0.5)
127
128 As AREA --> 1, the open water fraction is confined to
129 narrow leads implying that new ice production is spatially non-uniform,
130 therby violating the assumption of spatially uniform forcing over
131 the grid cell required by KPP.
132
133 To treat the vertical overturning of the high-salinity brine
134 in a more physically realistic way, the salt produced
135 in the leads is sent to depth via the plume package. To assure
136 only narrow leads generate plumes, choose a relatively high
137 SEAICE_plumeInflectionPoint. For testing purposes, I chose 0.8
138 but I don't know what the "right" value should be.
139
140 === Ice Age ===
141
142 Adding ice age means just adding a short snippet at the end
143 of seaice_growth.F. I propose that adding to ice age be done
144 in a separate subroutine which takes as arguments, AREA, AREANm1,
145 HEFF, HEFFNm1, and whatever other variables from seaice_growth
146 it needs. Interfacing with a separate subroutine will make
147 for a cleaner seaice growth code in the long run.

  ViewVC Help
Powered by ViewVC 1.1.22