-
Notifications
You must be signed in to change notification settings - Fork 97
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ACCESS-OM experiment (MOM5 with -DACCESS) does not conserve heat well #175
Comments
See attached output containing budget diagnostics for a short 1 deg run. |
Hi,
Budgets are problematic.
…----Single time step diagnostics for tracer temp----
Total heat in ocean at (tau) referenced to 0degC =
1.96553786796853318E+25 J
Total heat change of full system for (taup1-taum1) =
4.55735042329028854E+19 J
Total heat input to ocean referenced to 0degC =
4.55733627495601603E+19 J
Heat input via surface heat fluxes =
4.56471713292401705E+19 J
Heat input via bottom heat fluxes =
0.00000000000000000E+00 J
Heat input via open boundaries =
0.00000000000000000E+00 J
Heat input via precip-evap+melt =
-2.71298854960967616E+17 J
Heat input via river runoff =
2.41016288597668203E+13 J
Heat input via calving land ice =
0.00000000000000000E+00 J
Heat input via frazil formation =
1.97466173652087488E+17 J
Heat input via sources in the source array =
0.00000000000000000E+00 J
Heat input via sources in th_tendency, or errors =
1.98973117968750000E+06 J
Heat input via eta_t smooth =
-2.60000000000000000E+01 J
Heat input via pbot_t smooth =
0.00000000000000000E+00 J
d(T*rho*dV) =
4.55735042329028854E+19 J
Tracer mismatch: cp*d(rho*dV*T)-input =
1.41483340735388812E+14 J
Mismatch converted to a surface flux =
1.08765602775233406E-04 W/m^2 (should be order 1e-10)
Measures of global
integrated tracer conservation over multiple time steps
Ocean heat content at timestep 5 = 1.96552398471843185E+25 J.
Ocean heat content at timestep 25 = 1.96549539821386377E+25 J.
Change in ocean heat content =
-2.85865045680784933E+20 J.
Total Heat input =
-2.85874966579149406E+20 J.
Error in heat content change =
9.92089835803017600E+15 J.
Error in rate of heat content change =
3.31596111652309334E-04 W/m^2. (should be order 1e-10)
Heat input by tendency terms =
6.44316800000000000E+06 J.
Heat input by surface fluxes =
-2.91061376462884700E+20 J.
Heat input by bottom fluxes =
0.00000000000000000E+00 J.
Heat input by runoff and calving =
4.94384615690320937E+14 J.
Heat input by precip-evap+calving =
-8.66052883228241920E+18 J.
Heat input by open boundaries =
0.00000000000000000E+00 J.
Heat input by frazil formation =
1.38464443314020229E+19 J.
Heat input by eta_t smoother =
-1.60000000000000000E+02 J.
Heat input by pbot_t smoother =
0.00000000000000000E+00 J.
Heat input by sources =
0.00000000000000000E+00 J.
Steve
On Tue, Jun 20, 2017 at 12:32 AM, Nic Hannah ***@***.***> wrote:
See attached output containing budget diagnostics for a short 1 deg run.
access-om2.out.txt
<https://github.com/mom-ocean/MOM5/files/1087019/access-om2.out.txt>
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
<#175 (comment)>, or mute
the thread
<https://github.com/notifications/unsubscribe-auth/ACBamwWrxweLQ2PWMKM2b4ynRyHJDO8Bks5sF0tkgaJpZM4N_EHE>
.
--
Dr. Stephen M. Griffies
NOAA Geophysical Fluid Dynamics Lab
201 Forrestal Road
Princeton, NJ 08542
USA
|
Pull request #176 makes improvements to SBCs are handled for ACCESS. The fixes are:
This does not fix the large heat content errors. |
Set melt consistently in SBC. #175.
Here's what I reported to Nic, Fabio and Simon yesterday:I've had a look at auscom_ice_formation_new() and have come to the conclusion that the method is slightly faulty. What happens is that starting at the deepest layer, kmxice, a test is made to see if ice can be formed. If so, the temperature is raised due to latent heat release. If layers above are warmer than the freezing point they can melt this ice and become cooler. They can also contribute more frazil if cool enough. Also, any accumulated ice during the coupling period can be melted again. This is all fine. The problem is that the heat due to frazil is calculated via PTR_FRAZIL = rho_cp * frazil_factor * ( PTR_TEMP - TEMP_BEFORE) * PTR_THICK This is wrong and dates way back to the original implementation of the algorithm. I looked at the POP code and the error has been copied from there. The correct amount of heat is cp_ocean * frazil_factor * ( PTR_TEMP - TEMP_BEFORE) * Thickness%rho_dzt(iisc:iiec,jjsc:jjec,k) That is, the real density should be used rather than a reference density. I also think that the changes of temperature should be made with respect to mass rather than just thickness/volume. This should make the diagnostic consistent. This means changing the thickness pointer to rho_dzt. This means that POTICE, QICE and AQICE now have units degC*kg/m^2
and
and
Does this look right? Also, for some reason, AQICE is being calculated in src/mom5/ocean_tracers/ocean_frazil.F90 but it doesn't seem to be used anywhere but in auscom_ice_formation_new. Nic, can you see it anywhere? It also has inconsistent units with what is in auscom_ice.F90. Maybe legacy code which should be removed? |
That's really more of a physics issue than the heat budget. There could
be some interplay with the incorrect algorithm.The standard MOM
algorithm probably has the same issues if you calculate frazil in the
deeper layers.
…On 22/06/17 10:42, Marshall Ward wrote:
Not sure if it's relevant, but I just noticed this warning about
|kmxice| and ice formation in lower layers:
! (???) WARNING: unless a monotone advection scheme is in place,
! advective errors could lead to temps that are far below freezing
! in some locations and this scheme will form lots of ice.
! ice formation should be limited to the top layer (kmxice=1)
! if the advection scheme is not monotone.
Looks like |kmxice| is set to 5 in these runs.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#175 (comment)>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AMHgB05Jnij2dg0Fl2wh_LK_ASF14bkDks5sGbiMgaJpZM4N_EHE>.
|
Russ, for the zstar model, rho_dzt = rho0*dzt with rho0=1035. So I think the two formula you wrote will give the same results. Thoughts? Another possibility is that the frazil contribution to the heat budget may not be computed properly for cases where frazil kicks in for k>1. Ocean_sfc%frazil(i,j) is a 2d array. When frazil is happening for k>1 then there needs to be a vertical sum to accumulate the interior frazil heating impacts. Is that done properly? It may be useful to run a test where frazil is allowed only in the k=1 cell. Steve |
Steve, Ah, yes you're right, I somehow got it into my head that that the
real density was used rather than rho0.
Yes, a test with kmxice=1 would be useful. If it fails then it it would
seem that the melting part of the scheme is causing problems. If it's
good then the vertical summation could be an issue.
…On 22/06/17 11:26, Stephen Griffies wrote:
Russ, for the zstar model, rho_dzt = rho0*dzt with rho0=1035. So I
think the two formula you wrote will give the same results. Thoughts?
Another possibility is that the frazil contribution to the heat budget
may not be computed properly for cases where frazil kicks in for k>1.
Ocean_sfc%frazil(i,j) is a 2d array. When frazil is happening for k>1
then there needs to be a vertical sum to accumulate the interior
frazil heating impacts. Is that done properly?
It may be useful to run a test where frazil is allowed only in the k=1
cell.
Steve
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#175 (comment)>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AMHgB2kj7awOq1n3TWijWvMOKDOGMjnPks5sGcK4gaJpZM4N_EHE>.
|
Hi Russ and Steve, I've done the test with kmxice=1 but the error magnitude diagnosed online still the same: Error in heat content change = 2.08752682505739200E+15 J. |
OK. Thanks for the test. As Russ hypothesizes, the problem must be in the melting part of the scheme... |
Good, that probably eliminates the vertical summation of frazil as the
problem. It looks to be something to do with the remelting of frazil.
No, I've just spotted something odd...
ARRRRRRRRGGGHHHHHHHHHHH!!!!!!!!!!!!!!!!!!! I think I've found it
There's 2 versions of cp_ocean and therefore rho_cp floating about!
In mom/src/mom5/ocean_core/ocean_parameters.F90
real, public :: cp_ocean = 3992.10322329649d0
real, public :: rho_cp = 1035.0 * 3992.10322329649d0
These can be changed via namelists.
In mom/src/shared/constants/constants.F90
real, public, parameter :: CP_OCEAN = 3989.24495292815
real, public, parameter :: RHO_CP = RHO0*CP_OCEAN
So a difference of nearly 3 or 0.1%
In mom/src/mom5/ocean_access/auscom_ice.F90
use constants_mod, only: rho_cp & !(J/m^3/deg C) rho_cp == rho0*cp_ocean
,rho0r & !(m^3/kg) rho0r == 1.0/rho0
,rho0 & ! 1.035e3 kg/m^3 (rho_sw)
,hlf & ! 3.34e5 J/kg
,cp_ocean ! 3989.24495292815 J/kg/deg
In mom/src/mom5/ocean_tracers/ocean_frazil.F90
use ocean_parameters_mod, only: missing_value, cp_ocean
In fact, everywhere in MOM uses the value in ocean_parameters_mod.
This means that when changing the temperature in auscom_ice an incorrect
amount of heat is calculated.
Try changing mom/src/mom5/ocean_access/auscom_ice.F90
use constants_mod, only: rho0r & !(m^3/kg) rho0r == 1.0/rho0
,rho0 & ! 1.035e3 kg/m^3 (rho_sw)
,hlf & ! 3.34e5 J/kg
use ocean_parameters_mod : rho_cp, cp_ocean
These values probably need to be checked in CICE.
Russ
…On 29/06/17 13:22, fabiobdias wrote:
Hi Russ and Steve,
I've done the test with kmxice=1 but the error magnitude diagnosed
online still the same:
Error in heat content change = 2.08752682505739200E+15 J.
Error in rate of heat content change = 6.82889551358594902E-05 W/m^2
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#175 (comment)>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AMHgB7c0DffFzv5BoIM6jiOGKl8dmud7ks5sIxhZgaJpZM4N_EHE>.
|
With this change cp_over_lhfusion needs to be calculated in the code rather than being initialised in a declaration statement as cp_ocean is no longer a parameter. |
Wow, that is a gotcha! Good catch. I hope this is the smoking gun. |
I just checked by scaling the frazil in one of Fabio's runs by cp_mom/cp_fms and it it matches the error to about 6 decimal places. Fabio is doing a quick run but I'm sure we've got it. |
Just to confirm that Russ really got it (yew!!!): Error in heat content change = 1.63592161600000000E+09 J. I'm sending the new auscom_ice.F90 to Russ so he should update here soon. |
Great news! And wonderful that the code fix is rather simple to implement. This is really wonderful. Great job Russ!! |
Well done @russfiedler! @fabiobdias I have not merged this fix. Can you send me the changes or do a PR? Thanks! |
From Fabio's email:
In the access.out file we can search for that segment:
Error in heat content change = 1.09666002438988800E+15 J.
Error in rate of heat content change = 3.66547652005596255E-05 W/m^2.
which is “Measures of global integrated tracer conservation over multiple time steps”. It should be printed in the .o files too, but I don’t have permittions to access these files in your experiment.
Following what Stephen Griffies said to me, the error in heat content change should be O(+11) Joules or less.
To ilustrate what that means, I plot the figure below with my ACCESS-OM (JRA-55 forcing) where the net heat flux crossing the surface is not equal of the time derivative of the ocean heat content:
and when I calculate the same for the Richard Matear’s model (MOM4-SIS, also forced with JRA55), both match perfectly:
The text was updated successfully, but these errors were encountered: