Parent Directory | Revision Log | Revision Graph
Links to HEAD: | (view) (download) (annotate) |
Links to checkpoint63m: | (view) (download) (annotate) |
Sticky Tag: |
adding snowPrecip as per discussion here: http://mitgcm.org/pipermail/mitgcm-devel/2012-April/005472.html
reverting to 1.64, see discussion in http://mitgcm.org/pipermail/mitgcm-devel/2012-April/005472.html
Changes to avoid truncation errors in output - see discussion here: http://mitgcm.org/pipermail/mitgcm-devel/2012-April/005458.html
Added variable "rainPrecip" which contains fraction of precip in m/s that is dumped in open ocean: rainPrecip = max(0,precip-snowPrecip), when snowPrecip is defined rainPrecip = precip*(1-AREA), when snowPrecip is undefined
add snowPrecip to HSNOW in seaice_growth
Part two of ECCO-CLIVAR code merges. Completes merge of seaice area relax. code. Requires unified CPP option EXF_ALLOW_SEAICE_RELAX to be set in EXF_OPTIONS.h since this pkg controls its I/O (and avoids second CPP option in SEAICE_OPTIONS.h)
fix a comment
fix typo (#idef instead of #ifdef) so that it compiles ; + document few "#endif" blocks
Merging JPLs o seaice AREA relaxation code o modified global mean cost imbalance code
rename parameters: SIsalFrac to SEAICE_saltFrac & SIsal0 to SEAICE_salt0
- merging SEAICE_MULTICATEGORY define and undef cases. Now the same code is compiled either way, and is tested in all exps (multidim was only tested in lab_sea ad before). - cosmetic change to prepare for future addition of ITD. no change to results. no defaults change. - by lack of adequate verification experiments, I further used custom versions of global_ocean.cs32x15 to test multicat or not, with pickup or not. All should be correct. - details : - added SEAICE_multDim run time param to be able to switch from single to multi cat. - "ifdef SEAICE_MULTICATEGORY" switches are replaced with "IF (SEAICE_multDim.GT.1) THEN". - "DO IT=1,MULTDIM" is replaced with "DO IT=1,SEAICE_multDim" in seaice_growth.F. For pickups and initializations I kept full loops (did not want to mess with the somewhat funky TICE/TICES pickup logic). - homogeneize seaice_growth names (heffActualP->heffActualMult and latentHeatFluxMaxP->latentHeatFluxMaxMult). - in growth, add extra MULTDIM dimension in all relevant local fields (needed to simplify logic, and get taf to behave). - clean-up growth/solve4temp interface by adding ticeInMult (TSURFin entering solve4etmp) and ticeOutMult (TSURFout leaving solve4temp). update seaice_solve4temp accordingly. - avoid recomputations (added store directives and clear logic of solve4temp input/output).
- seaice_growth.F : fix pathological case treatment for SEAICE_MULTICATEGORY. In case ice just disappeared, reset TICES to celsius2K as done already for TICE. - seaice_tracer_phys.F : fix typo in diagnostic name ('Fx' not 'FX'). - no change to tested results.
- final version of turbulent flux params, as agreed at MIT ice meet: SEAICE_mcPheePiston (default is ~ 0.000875) SEAICE_mcPheeTaper (default is 0.) SEAICE_frazilFrac (defualt is 1.) SEAICE_mcPheeStepFunc (default is false) - changes results at trunction error level. -------- - retire short lived SEAICEturbFluxFormula (1,2,3,4) and instead add SEAICE_mcPheeStepFunc (true replaces SEAICEturbFluxFormula=4) - seaice_check.F : -- map old params to SEAICE_mcPheePiston, SEAICE_mcPheeTaper, SEAICE_frazilFrac -- stops to make default change known to common user (that most likely had undef MCPHEE_OCEAN_ICE_HEAT_FLUX and GRADIENT_MIXED_LAYER_TURBULENCE_FACTOR) - SEAICE_OPTIONS.h : define MCPHEE_OCEAN_ICE_HEAT_FLUX and GRADIENT_MIXED_LAYER_TURBULENCE_FACTOR that only serve the purpose of stopping in seaice_check to aknowledge the change of defaults. - seaice_growth.F : use new params. - SEAICE_PARAMS.h, seaice_init_fixed.F, seaice_readparms.F, seaice_summary.F : handle new params.
- avoid recomputations.
- simple propagation of SItrNumInUse.
calculate recip_nDim using real*8 arithmetic (fix to previous modif)
remove (almost) all divisions by constants within loops, without changing the results
- simplify McPhee tapering, and allow to use it with SEAICEturbFluxFormula.EQ. 1 or 2, using newly added run time parameter SEAICE_availHeatTaper. - fix d_AREAbyATM, d_AREAbyOCN, d_AREAbyICE diags I broke in r1.148. - add permanent SItflux diag that corresponds to TFLUX but includes ice+snow. Hence SItflux-TFLUX should match the ice+snow heat budget. - allow activation/testing of a fix for suspected missing term in ocn-ice heat budget (to be confirmed). To test this, you want to undef SEAICE_DISABLE_HEATCONSFIX, and then set the run time param SEAICEheatConsFix to .TRUE. that also allows the 'SIaaflux' diagnostic.
- bug fix : typo in mcphee step function tapering (divide not multiply with MCPHEE_TAPER_FAC) spotted by M. Losch (thanks). - no change in results.
- unified freezing point treatment : the old SEAICE_VARIABLE_FREEZING_POINT is now the default, and the old default constant freezing point is recovered with SEAICE_tempFrz0 = -1.96, SEAICE_dTempFrz_dS = 0., - retire SEAICE_freeze that was the old way of specifycing the constant freezing point. - remove ALLOW_SEAICE_FLOODING brackets; run time switch is already there. - bug fix (thanks to M. Losch) : the sublimation term that was missing is now activated. To reproduce old results that had this bug define SEAICE_DISABLE_SUBLIM. - bug fix (silly me) : flooding sign term (seaice_growth.F r 1.149line 1211) was wrong for SIsal0.NE.0. Changes cs32x15 results (see upcoming checkin for detail). - bug fix (thanks to O. Jahn) : area loss for melting got messed up in seaice_growth r149 for legacy branch (no results change). - introduce SEAICE_CAP_SUBLIM : caps sublimation heat flux in solve4temp (code from I. Fenty). - results did not change except for global_ocean.cs32x15, mostly due to the switch to variable freezing point (see upcoming checkin of results for details).
- replace with run time parameters SEAICE_doOpenWaterGrowth, SEAICE_doOpenWaterMelt SEAICE_areaLossFormula, SEAICE_areaGainFormula the now retired CPP switches SEAICE_OCN_MELT_ACT_ON_AREA, SEAICE_DO_OPEN_WATER_GROWTH SEAICE_DO_OPEN_WATER_MELT, FENTY_AREA_EXPANSION_CONTRACTION - added checks : retired CPPs and consistency of run time params - only changes global_ocean.cs32x15 fwd result at truncation level (cgd2d 11) - couple things left to polish (soon) : seaice_summary and d_AREAbyATM, d_AREAbyICE, d_AREAbyOCN diags
pkg/seaice : turbulent flux term specification via run time params. - replace CPP switches with run time switches to facilitate testing - retired CPPs : MCPHEE_OCEAN_ICE_HEAT_FLUX, GRADIENT_MIXED_LAYER_TURBULENCE_FACTOR - added runtime parameter : SEAICEturbFluxFormula - move Mcphee constants to SEAICE_PARAMS.h - seaice_readparms.F : read turbulent flux term params (SEAICEturbFluxFormula; SEAICE_availHeatFrac/Frz, or SEAICE_gamma_t/_frz if apply); remove seaice_summary call (moved to seaice_init_fixed) - seaice_init_fixed.F : set SEAICE_availHeatFrac/Frz depending on SEAICEturbFluxFormula, and seaice_summary call (moved from seaice_readparms) - seaice_summary.F : add missing report of read turbulent flux term set up (and SITRACER). - seaice_check.F : check range; inform and stop if retired CPPs are used (incl. SEAICE_AGE). - seaice_growth.F : unified use of SEAICE_availHeatFrac/Frz, without CPP switch, same computation as before for the different options.
- removal of the old way of seaice age tracer, which is now replaced by particular cases of SITRACER. - retired params : SEAICEadvAge, SEAICEadvSchAge, SEAICEdiffKhAge, IceAgeTrFile. - added to SITRACER : IceAgeTrFile, check pickups, monitor, output.
add mask to avoid non-zero ice thickness over land (non-legacy code)
- fix bug reported on Dec 02, 2011 (mitgcm-devel): was not compiling with #undef SEAICE_GROWTH_LEGACY and #undef SHORTWAVE_HEATING) - change TMIX (previously in common block) to a local var (without overlap)
comment out filling of User-reserved Diagnostics (UDIAG#, SDIAG#)
- allow tocompile with exf options ALLOW_ATM_TEMP undefined. - fix for the case where ALLOW_RUNOFF is undefined.
- fix heat conservation of the coupled ocean-seaice system. (some polishing is still needed but this should do it for now)
- add missing term, which was breaking conservation.
small changes that permit vectorizable adjoint code. In general statements like tmpscal=fld(i,j) (just a simple copy) are problematic and should be avoided where possible. Other places where this is a frequent problem is find_rho.F
More fixes to store dirs (common blocks and keys were also wrong)
Quick fix of store directives. May need another closer look.
- fix recomputation with FENTY_AREA_EXPANSION_CONTRACTION code, remove then obsolete STORE directives - fix STORE directives for tice and tices, so that only the appropriate part of the fields are stored (and not the entire field) - cosmetic changes: adjust CPP flags and indentation for better legibilty
sea ice sublimation conservation fixes: make the calculation of the maximum latent heat flux standard (even if it's not always used to cap the actual latent heat flux) for diagnostic purposes
seaice package/sublimation treatment: added a cap on the latent heat flux over sea ice such that the amount of sublimation over one time step cannot exceed the amount of mass in the sea ice and snow. Works for the non-legacy version of seaice_solve4temp. Added diagnostics SImaxLHF, SIactLHF (max and actual latent heat flux) and SIrsSubl (residual freshwater flux following removal of ice and snow) ---------------------------------------------------------------------- Modified Files: seaice_diagnostics_init.F seaice_growth.F seaice_solve4temp.F ----------------------------------------------------------------------
fix un-closed parenthesis so that it can at least compile.
- bug fix : frWtrAtm needs a_FWbySublim ifdef SEAICE_ADD_SUBLIMATION_TO_FWBUDGET. - bug fix : missing part to Martin's r_FWbySublim pathological case fix.
- remove the CPP switch around the *_FWbySublim unit change and move diagnostic fill for SIatmQnt, SIfwSubl, SIatmFW to the end of seaice_growth.F. - add diagnostic of the actual sublimation freshwater flux (that is 0. ifndef SEAICE_ADD_SUBLIMATION_TO_FWBUDGET) and of the latent heat flux (evap+sublim).
Minor changes to seaice package. 1) Retired old variables (A22, SEAICE_lhsublim, areaMax, areaMin, hiceMin) and added some new ones (SEAICE_area_reg, SEAICE_hice_reg, SEAICE_area_floor) - Differentiated "regularization variables" from "floor variables" * areaMin became SEAICE_area_reg (old A22) and SEAICE_area_floor * hiceMin became SEAICE_hice_reg (old hiceMin) (with _reg meaning regularization variable) - SEAICE_lhSublim becomes lhSublim, the sum of SEAICE_lhEvap and SEAICE_lhFusion so as to ensure energy conservation when going between phases - A22 was not used anywhere 2) Changed regularization procedure for heffActual and hsnowActual to ensure well-boundedness and smooth adjoint in seaice_growth.F 3) Fixed a bug where seaice_solve4temp would not recognize ice-free grid cells because the old regularization always set heffActual >= 0.05 cm 4) Changed the model so that the default behavior is to put a small (10^-5) "floor" on AREA when HEFF > 0. - went from requiring ALLOW_PRECLUDE_INFINITESIMAL_AREA to be defined to requiring that DISABLE_AREA_FLOOR *not* be defined Modified Files: SEAICE_PARAMS.h seaice_check.F seaice_growth.F seaice_readparms.F seaice_solve4temp.F seaice_summary.F
- switch SIdH*, SIdA*, SIdS* increment diags to rate diags (m->m/s typically).
- added diagnostics for seaice genereic tracers (SItr*). - added SItrUnit and SItrNameLong run time param (for SItr* diags). - in diag names, replaced 'PrTh' abbrev. of 'preceeding thermo' with 'PT'.
- re-order diags inits so that they appear in order in available_diagnostics.log - added diags: hsnow thermo. increments, area preceeding ridiging process, area/heff/hsnow preceeding thermodynamic growth/melt. - modified diag: SIdA; output actual effect, as the description states. - modified description: SIqneti, SIqneto, SIuheff, SIvheff, SIdAb*, HSNOW. - retired redundant diags: SIyneg, SIfice, SIsnwice, SIthdgrh.
- seaice_tracer_phys.F and seaice_advdiff.F do ice cover tracers, in addition to ice volume tracers. - seaice_readparms.F add SItrMate ('HEFF' or 'AREA') in PARAMS03 to switch from ice volume tracer (defualt) to ice cover tracer - seaice_growth.F use areaMax in AREA update (part 4), consistent with ridging step (part 2.5). store AREA in SItrAREA at the ridging and update steps (for use with SItracer).
- introduce SPsalFRAC run time parameter that sets the fraction of the salt by-product of ice growth (SPsalFRAC*(1-SIsalFRAC)*salt typically) that gets vertically redistributed by pkg/salt_plume.
-re-organization of diagnostics and sublimation. -spotted bug in sublimation? see line 1501.
- introducing ALLOW_SITRACER and seaice_tracer_phys.F to handle generic seaice tracer. For now it covers, and was tested for, salinity and age (work in progress). - introducing siEps (1e-5, parameter, defined in SEAICE_PARAMS.h).
cleanup of part 4 (d_AREA computation) - remove d_HEFFbyFLOODING in LEGACY branch (has not been computed at the point when d_AREA=0). - move FENTY_AREA_EXPANSION_CONTRACTION within EVOLUTION branch where it belongs. - add a MAX in EVOLUTION branch which is needed since SEAICE_DO_OPEN_WATER_MELT was added. - abbreviate a few comments.
- use Ian Fenty's capping formulas for actual ice thickness thoughout EVOLUTION branch. - put treatment pathological case #2) in CPP brackets (ALLOW_AVOID_INFINITESIMAL_AREA, undef by default). - update global_ocean.cs32x15 and 1D_ocean_ice_column results accordingly
-seaice_growth.F : 1) in EVOLUTION branch, always include a_QSWbyATM_cover in qnet (as it should be). 2) remove the Reproduce_v1p109 bloc that is essentially the same as the reference code. 3) remove duplicated blocs of code. After the a_QSWbyATM_cover fix (thanks to I. Fenty) FENTY_DELTA_HEFF_OPEN_WATER_FLUXES is redundant with SEAICE_DO_OPEN_WATER_GROWTH and FENTY_OPEN_WATER_FLUXES_MELT_ICE is redundant with SEAICE_DO_OPEN_WATER_MELT. - seaice_check.F : FENTY_AREA_EXPANSION_CONTRACTION requires SEAICE_DO_OPEN_WATER_GROWTH. - verif/1D_ocean_ice_column : update SEAICE_OPTIONS.h according to item 3). - verif/global_ocean.cs32x15 : update results according to item 1) note: it turns out that FENTY_OPEN_WATER_FLUXES_MELT_ICE is not actually tested in 1D_ocean_ice_column over 10 time steps, so I did tests over a year to check that SEAICE_DO_OPEN_WATER_MELT was indeed equivalent to FENTY_OPEN_WATER_FLUXES_MELT_ICE. It is.
Merge iceage code of Pierre Rampal * update/change/correct ice age calculations * add age updates for pathological cases Probably needs more testing...
Renaming of compile time flag SEAICE_SALINITY to SEAICE_VARIABLE_SALINITY and SEAICE_salinity to SIsalFRAC. Added logical checks for the use of the retired variable names in seaice_readparms and seaice_check. ---------------------------------------------------------------------- Modified Files: pkg/autodiff/autodiff_restore.F pkg/autodiff/autodiff_store.F pkg/obcs/obcs_apply_seaice.F pkg/seaice/SEAICE.h pkg/seaice/SEAICE_OPTIONS.h pkg/seaice/SEAICE_PARAMS.h pkg/seaice/seaice_ad_check_lev1_dir.h pkg/seaice/seaice_advdiff.F pkg/seaice/seaice_check.F pkg/seaice/seaice_diagnostics_state.F pkg/seaice/seaice_growth.F pkg/seaice/seaice_init_varia.F pkg/seaice/seaice_model.F pkg/seaice/seaice_monitor.F pkg/seaice/seaice_output.F pkg/seaice/seaice_read_pickup.F pkg/seaice/seaice_readparms.F pkg/seaice/seaice_write_pickup.F ----------------------------------------------------------------------
Fixed 2 bugs in seaice_growth.F Bug 1: calculation of saltFlux (and saltPlumeFlux) by removing dependence on now-defunct parameter ICE2WATR. and slightly simplifying the equation. Now if the sea ice salinity equals the local seawater salinity, the growth of sea ice will not alter the seawater salinity. old equation: saltFlux(I,J,bi,bj) = & HEFFM(I,J,bi,bj)/SEAICE_deltaTtherm & *SEAICE_salinity*salt(I,j,kSurface,bi,bj) ! & *tmpscal1*ICE2WATR*rhoConstFresh new equation: saltFlux(I,J,bi,bj) = & HEFFM(I,J,bi,bj)/SEAICE_deltaTtherm & *SEAICE_salinity*salt(I,j,kSurface,bi,bj) ! & *tmpscal1*SEAICE_rhoIce As ICE2WATR equaled SEAICE_rhoICE/rhoConst and not SEAICE_rhoICE/rhoConstFresh, verification experiments where rhoConstFresh did not equal rhoConst need to be updated. Bug 2: replaced hFacC with maskC in the calculation of the turbulent ocean-ice flux (found by Gael) (doesn't change results). : : Modified Files: : seaice_growth.F : ----------------------------------------------------------------------
Start a seaice tracer-like code but for now confinded to ice age
redefined actual sea ice age to be ICEAGE/HEFF ifdef SEAICE_AGE_VOL see Gael's February 25, 2011 message to MITgcm Devel
change two comments to indicate where ridging takes place for usePW79thermodynamics
Renaming and reordering of a couple of additions in order to satisfy global_ocean.cs32x15/results/output.seaice.txt exactly.
Reverting seaice_growth to v 1.111 in order to have code with exact bit compatibility with MITgcm_contrib/ifenty/Fenty_seaice_thermo_code_merge CPP option SEAICE_OCN_MELT_ACT_ON_AREA removed in v 1.112 is reintroduced runtime flag SEAICEareaFormula is kept but is inactive The code is now consistent with MITgcm_contrib/ifenty/Fenty_seaice_thermo_code_merge/documentation/Seaice_Growth_Forward_and_Adjoint_comparisons.pdf Modified Files: doc/tag-index pkg/seaice/SEAICE_OPTIONS.h pkg/seaice/seaice_diagnostics_init.F pkg/seaice/seaice_growth.F verification/global_ocean.cs32x15/code/SEAICE_OPTIONS.h verification/global_ocean.cs32x15/code_ad/SEAICE_OPTIONS.h
- replace d_AREAbyOCN with d_AREA, which is now split in d_AREAbyOCN/d_AREAbyATM_cover/d_AREAbyATM_open - simplify notations -- d_HEFFbyOCNonICE->d_HEFFbyOCN, d_HEFFbyATMonOCN-> d_HEFFbyATM, etc. - introduce SEAICEareaFormula run time parameter, which selects the recipe for computing the ice cover tendency from effective thickness tendencies. It ranges between 1 and 3: -SEAICEareaFormula=1 default in LEGACY branch -SEAICEareaFormula=2 default in EVOLUTION branch -SEAICEareaFormula=3 Ian Fenty's recipe - remove 'undef SEAICE_OCN_MELT_ACT_ON_AREA' which may now be achieved using SEAICEareaFormula
- for SEAICE_DO_OPEN_WATER_GROWTH, replace Gael's implementation with Ian's. - the new SEAICE_DO_OPEN_WATER_MELT allows open-water air-sea heat fluxes to also melt ice.
- McPhee formula for Ice-Ocean fluxes (provided by Ian Fenty).
- first attempt to close budgets by taking into account the freshwater flux implied by the sublimation of snow and ice. So far only the volume budget is closed successfully.
add diagnostics for snow precipitation
- avoid recomputation when using pkg/salt_plume - fix constant seaice salinity (>0) case
- code that handles a constant seaice salinity equal to SIsal0 (0 g/kg by default) when the variable salinity is undef. - allow use of pkg/salt_plume regardless of SEAICE_SALINITY option.
- adjoint related changes. 1) bring store directives up to date. 2) allow adjoint approximations (see SEAICEadjMODE). 3) replace a pair of if/then/else with min/max expressions.
avoid unused variables; + other editing changes.
fix another bug in the implemtation of capping too thick ice (I hope nobody noticed this one)
remove 2d field that was used for capping to thick ice, now this contribution is counted more naturally in d_HEFFbyNEG
- replace irritating parameters SEAICE_latentWater/Ice and SEAICE_sensHeat by something more sensible (parameters that are what their name implies) - change some defaults, so that by default exf-parameters are used for things like rhoAir, cpAir,latent/sensible heat parameters
fix bug in conservation of freshwater connected to capping of heff
1) fix ice apparition scenario in case when SEAICE_DO_OPEN_WATER_GROWTH is defined. Matters for evolution branch only. 2) avoid extensive recomputation in case when SEAICE_MULTICATEGORY is undef. Issue had appeared in v1.98. No additional lines.
a few cosmetic changes that reduce the number of lines of code
make capping of ice volume conserving by returning the capped ice as freshwater to EmPmR. This does not change the verification experiments but will change runs where the capping is acutally active. Remove comment about "vintage bug" and fix another comment (_cover -> _open)
- move areaMin, hiceMin, areaMax to common blocks. - sort out diagnostics in seaice_growth.F. - practical approximations in seaice_growth.F adjoint. - reset TICE to celsius2K when no ice is present.
Introducting SEAICE_ZERO_ADHEFFACTUAL that cuts the potentially troublesome dependency to HEFFACTUAL.
move OPTIONS (formerly locally defined) to SEAICE_OPTIONS.h
avoiding recomputations.
- treat the case of very thin ice in 'evolution' branch. HEFF<1. _d -5 implies that we instantaneoously melt the residual ice&snow. - introduce SEAICE_CAP_ICELOAD. In cases when excessive an ice thickness introduces an excessive depletion of the (non-linear) free surface, on may use SEAICE_CAP_HEFF (only availble in legacy branch) to ultimately limit sIceLoad, or directly cap sIceLoad (using SEAICE_CAP_ICELOAD).
move back cvs Header and Name to the top.
'evolution' branch fixes. No effect on verification exps results, which all use the 'legacy' branch. - introduce SEAICE_OCN_MELT_ACT_ON_AREA to switch on/off the ocean heat contribution to sea ice cover reduction. - revise SEAICE_DO_OPEN_WATER_GROWTH that now works ok. - treat the case of area but no ice/snow.
Merging seaice_growth codes -- part 3 -- the merging, at last. This check-in completes the overall 10/2010 revision and merging process, by - adding a header that explains unit/sign/naming conventions. - introducing areaMax parameter that is, for now, hardcoded to 1. - re-including the 'vintage bug' as a comment -- in case I got it wrong. - bracketing 'IF (useRelativeWind)' with '#ifdef ALLOW_ATM_WIND' consistent with what pkg/exf does. - merging the '_if.F' features that differ from what is in legacy code: - option to actually grow ice over open water, which legacy code only virtually takes into account in the area tendency (I think). - let melting by ocean reduce area (as melting by atm alone does in legacy). - different criteria for rain->snow (incl. as comments). The added features are bracketed out of legacy code, so this revision did not affect forward results. A couple cosmetic modifications changed adjoint results by only three digits. I will only update those.
Merging seaice_growth codes -- part 3 -- the merging, at last. - re-arranging the blocks of code in a more logical order. That is c =================PART 0: constants and initializations============= c ===========PART 1: treat pathological cases (post advdiff)=========== c ================PART 2: determine heat fluxes/reservoirs=========== c =========PART 3: determine effective thicknesses increments======== c ==========PART 4: determine ice cover fraction increments=========- c =============PART 5: determine ice salinity increments============= c =====LEGACY PART 5.5: treat pathological cases, then do flooding ====== c ===============PART 6: determine ice age increments================ c ==============PART 7: determine ocean model forcing================ This is only cosmetic change, by virtue of the previous revisions. It does not affect fwd results, which I wont update. On Faulks, with g77: Y Y Y Y>16<16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 . . . . . . . . . . . . . . . . . . . . pass lab_sea Y Y Y Y>16<16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 . . . . . . . . . . . . . . . . . . . . pass lab_sea.fd Y Y Y Y>16<16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 . . . . . . . . . . . . . . . . . . . . pass lab_sea.hb87 Y Y Y Y>16<16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 . . . . . . . . . . . . . . . . . . . . pass lab_sea.salt_plume Y Y Y Y -- 16 16 16 16 16 16 16 16 22 22 22 22 22 22 22 22 16 16 16>16< . . . . . . . . . . . . . . . . pass offline_exf_seaice Y Y Y Y -- 16 16 16 16 16 16 16 16 22 22 22 22 22 22 22 22 16 16 16 16 16 16 16>16< . . . . . . . . . . . . pass offline_exf_seaice.seaicetd Y Y Y Y>16<16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 . . . . . . . . . . . . . . . . . . . . pass seaice_obcs In ad tests, the revision did not affect the foward run, but it did the gradients Y Y Y Y 16> 4<FAIL lab_sea Y Y Y Y 16> 4<FAIL lab_sea.evp Y Y Y Y 16>16<pass lab_sea.noseaice Y Y Y Y 16> 4<FAIL lab_sea.noseaicedyn Y Y Y Y 16>16<pass offline_exf_seaice The gradient check were precise to 4 digits. They remain so, and improved slightly. The gradient change due to the revision is at the noise level. There is no additional recomputations. So we are fine. I will update those results.
Merging seaice_growth codes -- part 3 -- the merging, at last. - introducing HEFFpreTH, HSNWpreTH, and AREApreTH that allows the switch from the 'legacy' code to the 'merged' code. In 'legacy' HEFFpreTH=HEFFnm1 (pre adv-diff), HSNWpreTH=hsnow (post adv-diff), AREApreTH=areanm1 (pre adv-diff), while HEFF/HSNOW/ARE (post adv-diff) are the stocks that get updated by seaice-growth.F, and we treat pathological cases along the way, and at the end mostly (after all thermo updates, but for the flooding). - in the 'merged' way, we start with post-advection HEFF/HSNOW/AREA, treat pathological cases at once, and use the result (a self-consistent HEFF/HSNOW/AREA set) as our starting point. - the CPP switch is SEAICE_GROWTH_LEGACY, which for now is hard-coded to #define. - cosmetic changes the salinity and age blocks, which will ease the rest of the merging. - I will update results, although they barely changed. On faulks with g77: Y Y Y Y>16<16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 . . . . . . . . . . . . . . . . . . . . pass lab_sea Y Y Y Y>16<16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 . . . . . . . . . . . . . . . . . . . . pass lab_sea.fd Y Y Y Y>16<16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 . . . . . . . . . . . . . . . . . . . . pass lab_sea.hb87 Y Y Y Y>12<16 16 16 16 16 16 16 16 14 16 13 16 12 13 13 14 . . . . . . . . . . . . . . . . . . . . FAIL lab_sea.salt_plume Y Y Y Y -- 16 16 16 16 16 16 16 16 22 22 22 22 22 22 22 22 16 16 16>16< . . . . . . . . . . . . . . . . pass offline_exf_seaice Y Y Y Y -- 16 16 16 16 16 16 16 16 22 22 22 22 22 22 22 22 16 16 16 16 16 16 16>16< . . . . . . . . . . . . pass offline_exf_seaice.seaicetd Y Y Y Y>14<16 16 16 16 16 16 16 16 16 14 13 14 14 16 16 14 . . . . . . . . . . . . . . . . . . . . pass seaice_obcs Y Y Y Y 16>14<pass lab_sea Y Y Y Y 16>13<pass lab_sea.evp Y Y Y Y 16>16<pass lab_sea.noseaice Y Y Y Y 16>14<pass lab_sea.noseaicedyn Y Y Y Y 16>16<pass offline_exf_seaice
fix syntax error
Merging seaice_growth codes -- part 2 -- actual changes. - consitently compute QI (hardcoded as 3.02 _d 8 before) as Lfusion*SEAICE_rhoIce (3.039 _d 8 using defaults) and QS (1.1 _d 8 bfore) as Lfusion*SEAICE_rhoSnow (1.102 _d 8 now), with Lfusion=3.34 _d 5. - in flooding, use rhoConst (rather than 1000.) for sea water density. => These constants changes obviously changes all results significantly, => so all the relevant experiments results will be updated. - couple of small cosmetic changes included.
Merging seaice_growth codes -- part 2 -- actual changes. - changing the sign of heat flux terms (*Qby* that are in ice m) to match that of the thickness terms (*HEFF*, *HSNOW*, etc.). Hence everything >0 corresponds to more ice and/or snow. - rid of inessential arrays. Now it becomes clear that my earlier additions were a bit overkill. Also it appeared that temporary scalar can be used instead of saltWtrIce and frWtrIce -- those global arrays could eventually be removed from SEAICE.h - compute budget terms (to include in EmPmR, QNET, and in area derivative) using d_HEFF*/d_HSNOW* tendendcy terms. This allowed getting rid of d_Qby* arrays. It will allow moving blocks of code to more logical organization (upcoming revision). This is only cosmetic change. Yet, on faulks with g77, I got Y Y Y Y>10<16 16 16 16 16 16 16 16 14 16 13 16 16 16 11 16 . . . . . . . . . . . . . . . . . . . . FAIL lab_sea Y Y Y Y>11<16 16 16 16 16 16 16 16 16 16 13 13 16 16 13 16 . . . . . . . . . . . . . . . . . . . . FAIL lab_sea.fd Y Y Y Y> 3< 8 9 7 6 13 11 8 6 5 7 2 4 6 6 3 4 . . . . . . . . . . . . . . . . . . . . FAIL lab_sea.hb87 Y Y Y Y>12<16 16 16 16 16 16 16 16 16 16 13 16 16 16 13 14 . . . . . . . . . . . . . . . . . . . . FAIL lab_sea.salt_plume Y Y Y Y -- 16 16 16 16 16 16 16 16 22 22 22 22 22 22 22 22 16 16 16>16< . . . . . . . . . . . . . . . . pass offline_exf_seaice Y Y Y Y -- 16 16 16 16 16 16 16 16 22 22 22 22 22 22 22 22 16 16 16 16 16 16 16>16< . . . . . . . . . . . . pass offline_exf_seaice.seaicetd Y Y Y Y>13<16 16 16 16 16 16 16 16 16 14 14 16 14 16 16 14 . . . . . . . . . . . . . . . . . . . . pass seaice_obcs Y Y Y Y 13> 4<FAIL lab_sea Y Y Y Y 4> 4<FAIL lab_sea.evp Y Y Y Y 16>16<pass lab_sea.noseaice Y Y Y Y 10> 4<FAIL lab_sea.noseaicedyn Y Y Y Y 16>16<pass offline_exf_seaice So I will update results.
Merging seaice_growth codes -- part 2 -- actual changes. - change the units of flux terms (a_QbyATM, a_QbyICE, etc.) to ice meters, and make them 'effective' (i.e. multiply by area or 1-area accordingly) early on, and only go back to W/m2 once at the end of seaice_growth.F. The point is to avoid repeated multiplications/divisions by area and scaling factors. This is only cosmetic change. Yet, on faulks with g77, I got Y Y Y Y>10<16 16 16 16 16 16 16 16 13 16 13 16 16 16 11 16 . . . . . . . . . . . . . . . . . . . . FAIL lab_sea Y Y Y Y>11<16 16 16 16 16 16 16 16 12 16 13 13 16 12 12 14 . . . . . . . . . . . . . . . . . . . . FAIL lab_sea.fd Y Y Y Y> 3< 8 10 9 8 13 12 10 8 6 7 2 4 6 7 3 5 . . . . . . . . . . . . . . . . . . . . FAIL lab_sea.hb87 Y Y Y Y>12<16 16 16 16 16 16 16 16 16 14 13 16 16 16 13 14 . . . . . . . . . . . . . . . . . . . . FAIL lab_sea.salt_plume Y Y Y Y -- 16 16 16 16 16 16 16 16 22 22 22 22 22 22 22 22 16 16 16>16< . . . . . . . . . . . . . . . . pass offline_exf_seaice Y Y Y Y -- 16 16 16 16 16 16 16 16 22 22 22 22 22 22 22 22 16 16 3 4 16 16 3> 3< . . . . . . . . . . . . FAIL offline_exf_seaice.seaicetd Y Y Y Y>13<16 16 16 16 16 16 16 16 16 14 16 16 14 16 16 14 . . . . . . . . . . . . . . . . . . . . pass seaice_obcs Y Y Y Y 16>14<pass lab_sea Y Y Y Y 16>13<pass lab_sea.evp Y Y Y Y 16>16<pass lab_sea.noseaice Y Y Y Y 16>13<pass lab_sea.noseaicedyn Y Y Y Y 6>12<FAIL offline_exf_seaice So I will update results.
Merging seaice_growth codes -- part 2 -- actual changes. - change the units of d_HSNWbyOCNonSNW to snow meters. In warming condition, when ice gets melted, a 1/area factor appeared to be missing. It is added in V1.82. This revision is not just a cosmetic one, since it would change results in warming conditions. Yet the test experiments results were not changed, since they all start in January. It appears that the block of code that does this ice melting is not tested! I included a comment in seaice_growth.F in this regard. Ultimately we should set some of the experiments to start e.g. in the spring.
Merging seaice_growth codes -- part 2 -- actual changes. - change the units of d_HSNWbyOCNonSNW to snow meters. Cosmetic change that does not affect results.
Merging seaice_growth codes -- part 2 -- actual changes. - compute ICE2SNOW as SEAICE_rhoIce/SEAICE_rhoSnow (2.7576) rather than 1000.0 _d 0/SEAICE_rhoSnow*ICE2WATR (2.7879 in lab_sea) >> This obviously changes all results significantly, >> so all the relevant experiments results will be updated. - rid of WATR2SNOW - use convertPRECIP2HI/convertHI2PRECIP to go back and forth between precip m/s units and ice meters
Merging seaice_growth codes -- part 2 -- actual changes. use convertQ2HI/convertHI2Q to go back and forth between W/m2 units and ice meters in SNOW/ATM interaction too Cosmetic change that does not affect results.
Merging seaice_growth codes -- part 2 -- actual changes. use convertQ2HI/convertHI2Q to go back and forth between W/m2 units and ice meters Again this is only cosmetic change. Yet, on faulks with g77, I got Y Y Y Y>11<16 16 16 16 16 16 16 16 13 13 13 16 13 16 11 16 . . . . . . . . FAIL lab_sea Y Y Y Y>11<16 16 16 16 16 16 16 16 16 16 13 16 16 16 12 14 . . . . . . . . FAIL lab_sea.fd Y Y Y Y> 2< 8 9 8 7 13 12 9 7 6 7 2 4 6 7 3 4 . . . . . . . . FAIL lab_sea.hb87 Y Y Y Y>13<16 16 16 16 16 16 16 16 16 16 13 16 16 16 13 16 . . . . . . . . pass lab_sea.salt_plume Y Y Y Y -- 16 16 16 16 16 16 16 16 22 22 22 22 22 22 22 22 16 16 16>16< . . . . pass offline_exf_seaice Y Y Y Y -- 16 16 16 16 16 16 16 16 22 22 22 22 22 22 22 22 16 16 3 3 16 16 3> 3<FAIL offline_exf_seaice.seaicetd Y Y Y Y>13<16 16 16 16 16 16 16 16 16 16 14 16 16 16 14 16 . . . . . . . . pass seaice_obcs Y Y Y Y 16>13<pass lab_sea Y Y Y Y 16>13<pass lab_sea.evp Y Y Y Y 16>16<pass lab_sea.noseaice Y Y Y Y 16>13<pass lab_sea.noseaicedyn Y Y Y Y 5> 3<FAIL offline_exf_seaice So I will update results.
Merging seaice_growth codes -- part 2 -- actual changes. - get rid of the x1/72.0764 hardcoded factor. - it is replaced with x( HeatCapacity_Cp*rhoConst/QI ) that is 1/73.6255 for the default parameters. This obviously changes all results significantly, so all the relevant experiments results will be updated.
Merging seaice_growth codes -- part 2 -- actual changes. Summary of what has happened so far: - the code got cleaned-up (revisions 1.71 to 1.75) while keeping results unchanged. - the lab_sea forward verification experiments were revised, because they appeared to be too fragile to provide a reliable safety net. Typically, minor changes that should only affect truncation errors (such as the present check-in) would lead to complete failures (loosing ~ all digits) of lab_sea tests even on Faulks with g77. The revised tests seem to better discriminate between issues (see below). Hopefully the upcoming modifications to seaice_growth.F will further stabilize the tests... Present check-in: switch the unit of QbyIce (i.e. heat that may be extracted by ice from the ocean) from ice meters to W/m2, consistent with the other heat stocks. This change should only affect truncation errors. Result on Faulks, with g77: Y Y Y Y>11<16 16 16 16 16 16 16 16 12 16 13 13 16 16 11 14 . . . . . . . . FAIL lab_sea Y Y Y Y>11<16 16 16 16 16 16 16 16 16 16 13 16 16 16 13 16 . . . . . . . . FAIL lab_sea.fd Y Y Y Y> 2< 8 9 9 8 13 11 10 8 5 6 2 4 6 6 3 4 . . . . . . . . FAIL lab_sea.hb87 Y Y Y Y>16<16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 . . . . . . . . pass lab_sea.salt_plume Comment: except for lab_sea.hb87 (that uses evp) truncation errors lead to the loss of a few digits. Fair enough. I proceed with the commit and will update the results. Other results: adjoint lab_sea went fine, seaice_obcs went fine, offline_exf_seaice went bad (so I update its results too).
Merging seaice_growth codes -- preliminary steps. Done with this part! This part, as intended, has not changed anything to the actual computation results (lab_sea ad&fwd). It was "simply" a matter untying the many logical knots and rendering what we have been using understandable. I will give it a rest for a couple days, and let the testing proceed unaltered over the week end. Then we will make a tag and move on. The next part will consist of actually changing the computations, which will change verification experiments results. We will most likely let go of rigorous backward compatibility soon after the upcoming tagged version. Cheers.
Merging seaice_growth codes -- preliminary steps. Part 1: replacing variable names with more meaningful ones, aiming for improved readability + introducing variables for the various updates, aiming for improved modularity. One more to go, which will just be a clean up, to wrap up part 1. I promise...
Merging seaice_growth codes -- preliminary steps. Part 1: replacing variable names with more meaningful ones, aiming for improved readability + introducing variables for the various updates, aiming for improved modularity. This commit was expected to wrap this part up... well... I will need one or two more to get out of this maze.
Merging seaice_growth codes -- preliminary steps. Part 1: replacing variable names with more meaningful ones, aiming for improved readability + introducing variables for the various updates, aiming for improved modularity. Next commit is expected to wrap this part up...
Merging seaice_growth codes -- preliminary steps. Part 1: replacing variable names with more meaningful ones, aiming for improved readability + introducing variables for the various updates, aiming for improved modularity. Bare with me...
new S/R seaice_solve4temp.F: this is the merged version of Ian Fenty code (seaice_budget_ice_if.F) which enable to recover old standard code (seaice_budget_ice.F) when option USE_ORIGINAL_SBI is defined.
removing ^M from end of file please "select for diffs" and compare with 1.67
SEAICE_AGE_VOL: adding option to use volume instead of area for integrating SEAICE_AGE
Fixing bug in treatment of SaltPlumeSouthernOcean Flag should be applied prior to modifying surfaceForcingS Moved SaltPlumeSouthernOcean to seaice_growth.F
account for melting in seaice age evolution: tested by Pierre
remove "recip_QS" (not used and wrong)
re-introduce global field frWtrAtm for the case of ALLOW_MEAN_SFLUX_COST_CONTRIBUTION defined
revert to version 1.61, what was I thinking?
- move if-statement out of loop for better vectorization
third and step of replacing 3D versions of UICE,VICE,HEFF,AREA by 2D versions. Keep your fingers crossed.
first steps in cleaning up the 3-time levels of UICE,VICE,HEFF,AREA: 1. introduce fields for time step (N-1 = *Nm1) 2. do not use levels 2 and 3 anymore (but they are still around) these changes probably break the adjoint, but the pickup is still working, so I am stopping now to give P. a chance to fix the adjoint if necessary and then I will get rid of the 3D fields altogether carefully taking into account the pickup (not clear how).
o adding JM's doc/diags_changes.txt: a very useful summary that I refer to all the time o adding pkg/seaice diagnostics for atmospheric and oceanic heat flux and for atmospheric and oceanic ice growth
Added SEAICE_CLIM_AIR code, which permits modulation of surface air temperature and humidity over sea ice based on climatological values.
This check is redundant. It is already included in seaice_check.F
adding HO to parameters that can be separately specified in North and South
forgot a few instances of 330., when replace this number by a runtime parameter SEAICE_rhoSnow. There is still one instance in cost_ice_test.F, which I am not touching
simplify and operation that does not affect the verification experiments (I wonder why)
turn a few hard wired parameters into run time parameters this does not change any results
Update tamc.h for single-prec comlev option
changing ice age to effective ice age
added sea ice age tracer; #define SEAICE_AGE in SEAICE_PARAMS.h
Make frWtrAtm global for FW balancing in presence of sea-ice, and I need it outside of seaice code. Also move DIAGNOSTICS_FILL(frWtrAtm ... (hope I'm not making a betise).
fix a bug in diagnostic SIatmFW and changed the units from m/s to kg/m^2/s
Rearrange some almost impenetrable #ifdef blocks which reach across I,J loops (wow).
fix two diagnostics after someone removed the overlaps of GHEFF
o Update stores after recent IF (DIFFERENT_MULTIPLE ... o re-initialise to break some dependencies (not sure if all correct) o turn some scalares into tw-dim.
removed uneeded arrays KGEO, GWATX, and GWATY from SEAICE_CGRID code
o pkg/seaice: use different time constant for melting (SEAICE_gamma_t) and freezing (SEAICE_gamma_t_frz) ice due to mixed layer temperature
o pkg/seaice/seaice_growth.F: use a different time constant for freezing ice due to supercooled sea water, hardwired to SEAICE_deltaTtherm/0.1
- reformulated availHeat in seaice_growth.F to be independent of AREA
o pkg/exf: added useRelativeWind EXF_PARAM.h option for subtracting U/VVEL or U/VICE from U/VWIND before computing U/VSTRESS
pkg/seaice: removed some unused halos
o pkg/seaice: removed SEAICE_FFIELDS.h and seaice_get_forcing.F seaice forcing fields can now be read only through pkg/exf
added pkg/salt_plume by gathering code, which were previously spread around various files in model/inc and model/src results remain numerically identical to before, as a first step towards adding more options, etc., to this package
o add new diagnostics to seaice: advective, diffusive fluxes (only for multidim-advection, for scheme 2 they are not filled) and transports, thermodynamic growth rates
Change EmPmR units: from m/s to kg/m2/s
Add CPP option to remove code for precise gradient checks (for testing) SEAICE_EXCLUDE_FOR_EXACT_AD_TESTING
Update lab_sea adjoint output which now reverts to LSR solver and SEAICE_SALT.
Include SEAICE_SALINITY in adjoint.
Committing An Nguyen's modifications to SALT_PLUME code. This includes addition of a saltPlumeFlux array to FFIELDS and of routine plumefrac.F
oops! * -> / ... at least I found it before JM got to it ;-)
initialization of variable saltfluxadjust
define SEAICE_salinity as a fraction of the model's surface level salinity
reordering for some extreme scenarios
initial HSALT set to ICE2WATR*rhoConstFresh*SEAICE_salinity
A simple HSALT time stepping equation has been checked in.
Updating treatment of sea ice salinity. HSALT units are now g / m^2,
adding ice salinity HSALT as a prognostic variable
replace "recip_rhoConst*horiVertRatio" by mass2rUnit and "rhoConst*recip_horiVertRatio" by rUnit2mass
Break a few loops and CADJ STORE.
* commented out cap of HICE: it helps keep ice thinner * reintroduced cap of HEFF via MAX_HEFF and SEAICE_CAP_HEFF option
* replaced dRf(1) with dRf(kSurface)*hFacC(kSurface) in seaice_growth.F * added SEAICE_availHeatFrac, which specifies fraction of surface level heat content used to melt or grow ice (this is a placeholder until Ian checks in code meant to reduce adjoint sensitivities).
removing bug fix: 24-Jun-07: bug fix for SEAICE_salinity: salt rejection was being double-counted recovering previous version of verification/lab_sea/results/output* files SEAICE_salinity=0 should not change results if fix is correct changing sign of saltWtrIce to saltFlux it should oppose contribution to EmPmR, which has opposite sign convention
bug fix for SEAICE_salinity: salt rejection was being double-counted
o pkg/seaice: added computation of saltFlux in seaice_growth; For time being, sea ice salinity is assumed constant contribution of snow flooding to freshening of sea ice is neglected. SEAICE_salinity is set in SEAICE_PARM01 of data.seaice and it defaults to 0.0 in order to maintain backward compatibility. Typical values for SEAICE_salinity are 4 to 10 g/kg.
add diagnostics for Net fresh-water flux from the atmosphere.
remove ALLOW_SEAICE from exf pkg files and add #define ALLOW_RUNOFF in SEAICE_OPTIONS.h
add all needed EXF #ifdef and define them in SEAICE_OPTIONS.h if not using EXF
make pLoad & sIceLoad always available (but still only used if ATMOSPHERIC_LOADING is #define).
- add myThid to argument list of seaice_budget_ice/ocean
fix a bug in the flooding algorithm: turn off the snow machine
more comments, try to clarify the use of precip(itation)
rewritting parts of growth in an effort to make it comprehensable: - give resonalbe variable names - avoid reusing the same variable for different purposes (still some instances left for the next time around) - lets hope for the adjoint (but that should actually be happier now)
o fix multi-category seaice: - change cpp flag SEAICE_MULTILEVEL to more meaningful name: SEAICE_MULTICATEGORY - fix short wave heat flux o replace field areaLoc by scalar variable
transfering all regularization of local ice thickness to seaice_growth as a first step towards possibly getting rid of A22 alltogether
fix bug reported by DM
Just remove one CADJ STORE (and add a comment marking sensitive piece of code)
- replace area(i,j,3,bi,bj) by a local array. - rearrange routine a little more (Patrick is going to love this, but I moved the store directives as well): move the budget computations (seaice_budget_ocean/ice) to the beginning of the routine. Results are not changed and I don't expect any problems for the adjoint because the switched blocks are completely independent.
Updating seaice adjoint, step 1 (everything, except SEAICE_EVP).
overhaul of thermodynamics - growth.F and groatb.F are replaced by new routine seaice_growth.F - budget.F is replaced by two new routines seaice_budget_ocean/ice.F - move a few global fields out of SEAICE.h into seaice_growth.F and make them 2D (FICE/QNETO/ ...) - remove FO (it is the same as QNETO) - introduce a few local fields to avoid modifying external fields such as atemp, etc. lab_sea does not change, but hopefully it will be easier for Patrick do the adjoint
This form allows you to request diffs between any two revisions of this file. For each of the two "sides" of the diff, select a symbolic revision name using the selection box, or choose 'Use Text Field' and enter a numeric revision.
ViewVC Help | |
Powered by ViewVC 1.1.22 |