From c612a7dd7d6a6a05253cbe3a79e8985d294c1d4e Mon Sep 17 00:00:00 2001 From: Nicholas Hannah Date: Fri, 1 May 2015 08:36:14 -0700 Subject: [PATCH] Tests for the diagnostic system. Requires that a GNU repro ice_ocean_SIS2 exists. Then run with: $ module load python_nose (optional, necessary on gaea) $ nosetests See CommerceGov/NOAA-GFDL-MOM6/#147. --- ice_ocean_SIS2/Baltic/diag_checksums.txt | 513 +++++++++++++++++++++++ ice_ocean_SIS2/Baltic/input.nml | 5 + test/experiment.py | 62 +++ test/test_diagnostic_output.py | 198 +++++++++ 4 files changed, 778 insertions(+) create mode 100644 ice_ocean_SIS2/Baltic/diag_checksums.txt create mode 100644 test/experiment.py create mode 100644 test/test_diagnostic_output.py diff --git a/ice_ocean_SIS2/Baltic/diag_checksums.txt b/ice_ocean_SIS2/Baltic/diag_checksums.txt new file mode 100644 index 0000000000..d05c62aa24 --- /dev/null +++ b/ice_ocean_SIS2/Baltic/diag_checksums.txt @@ -0,0 +1,513 @@ +00010101.ice_model_AGE.nc:4fb3baadc9385d441a47a54fae8f4146 +00010101.ice_model_ALB.nc:b257107a37230342784af1e7daa50285 +00010101.ice_model_BHEAT.nc:962aa9e9fc0a846f152cf638afe4acbd +00010101.ice_model_BMELT.nc:319d1e9bb2627db7f9de4afb5cbdcd83 +00010101.ice_model_BSNK.nc:cabb5f92f6be8c9ce9658aecd939efe7 +00010101.ice_model_CALVING.nc:d67a92a552004d4663066e8baf866804 +00010101.ice_model_CALVING_HFLX.nc:8d9e551d496d8bf3192b8aa4811d1aa2 +00010101.ice_model_CI_hf.nc:58b1fc3c4479f228d83bb0400c63b282 +00010101.ice_model_CI_proj.nc:5a35c9c56d516d7fa60f58bb2185394f +00010101.ice_model_CI_tot.nc:81e2d351da18cd99e1e372c8da96b286 +00010101.ice_model_CN.nc:a7c35035d4ee9aa7a31a98d0be1ed4fa +00010101.ice_model_E2MELT.nc:01622abefdfbf2975c53b6c93b92b36e +00010101.ice_model_EVAP.nc:5d9a82f7473a79f814d3ee7eef142a41 +00010101.ice_model_EXT.nc:029c325c5efbffc89fab0b16f4f6ebff +00010101.ice_model_FA_X.nc:6034c9a27a65125569a5f85d2a927dc3 +00010101.ice_model_FA_Y.nc:e3a8b3472118d6c7688c9c33b10876e1 +00010101.ice_model_FC_X.nc:85952f97969a8dc0949a0ae0c7f83bd3 +00010101.ice_model_FC_Y.nc:a9a747664ddb28a114bbd99b6b149c9f +00010101.ice_model_FI_X.nc:fe9eea19ecdd6c34d1c0564c7e1fcbf4 +00010101.ice_model_FI_Y.nc:e2c8e5435106906926080e5217f0dfee +00010101.ice_model_FI_d_X.nc:56ca2d887bedf0d523d9b24bdd6ef612 +00010101.ice_model_FI_d_Y.nc:be48dfb4f5e9b2fddf51f7225959385a +00010101.ice_model_FI_s_X.nc:dd35519a0aa444390de1fb7d0ef95139 +00010101.ice_model_FI_s_Y.nc:4b6f8d9fa641e69205dc73539bddf025 +00010101.ice_model_FI_t_X.nc:04113356b4605aae342cc6538488e616 +00010101.ice_model_FI_t_Y.nc:744433bf502c944488fce0299fccd968 +00010101.ice_model_FP_X.nc:918d0ab6ef07e55cea970eb03dc53d44 +00010101.ice_model_FP_Y.nc:5339813aeaea84a98e4fa9dddecbbd77 +00010101.ice_model_FRAZIL.nc:8287c5e277df7659dace6406914f3503 +00010101.ice_model_FW_X.nc:b3c87074b7bbec53818a19d34271056b +00010101.ice_model_FW_Y.nc:32520bfa84f56db94cdedaf13debe35a +00010101.ice_model_HI.nc:e9c2fb21c2508a40c0baab254a0b4b46 +00010101.ice_model_HS.nc:dcf2125d4914b840363db4ce52d168bf +00010101.ice_model_IX_TRANS.nc:620c9d912256174dacf054fa9bc6712a +00010101.ice_model_IY_TRANS.nc:eb0c8cff6f3df61f630fd6b1d1b8ac19 +00010101.ice_model_LH.nc:62ae4f0e926e54b77a904630085f1bae +00010101.ice_model_LSNK.nc:027493b76ec86dcd9bf940f9decb3afa +00010101.ice_model_LSRC.nc:6bb9c92f017a25f55aff9bc0a43c45dd +00010101.ice_model_LW.nc:0ea33fc503204bbb3b45eb7a33186c18 +00010101.ice_model_LWDN.nc:fb3d563d1d9144a5d5e00ae438733828 +00010101.ice_model_MI.nc:c69bb0801e0655da9da76ee98dcc3885 +00010101.ice_model_MIB.nc:6b8f78c38fa911c55efc492c6fc58eaf +00010101.ice_model_MIS_tot.nc:c426a433b5bbda5dfc43669134759cd0 +00010101.ice_model_MI_U.nc:69a387230f1d553ec5c14d970c47ea9a +00010101.ice_model_MI_V.nc:df112661b1294364a00e7f4345bed2be +00010101.ice_model_Pfa_ui.nc:3952bd81aa22438ba9b75e62ce1003d9 +00010101.ice_model_Pfa_vi.nc:ee1e1a1b9ea31451a4ad4054b6051ea7 +00010101.ice_model_QFLX_LIMIT_ICE.nc:9af47c22d9471d2d91511c254a641931 +00010101.ice_model_QFLX_RESTORE_ICE.nc:442e80bbb3e09c0409f22d1e0011cc49 +00010101.ice_model_RAIN.nc:15a3da36af6b757372e531d68d618ec5 +00010101.ice_model_RUNOFF.nc:54712c59c74fe1f4f9a9f91f7b0ce8bc +00010101.ice_model_RUNOFF_HFLX.nc:70f6dcd3d997809acdedb43fe1571d57 +00010101.ice_model_SALTF.nc:fb80dff53289c9a10dcfeeef68319247 +00010101.ice_model_SH.nc:3d041890075f26e53b5774fc8129449f +00010101.ice_model_SIGI.nc:c318b0d8aa5884b25c345a717bc12356 +00010101.ice_model_SIGII.nc:37de4fb5465a981d91e3bd836c4c9743 +00010101.ice_model_SLP.nc:9ec95109d63b75470614c774b164827d +00010101.ice_model_SN2IC.nc:0d7de2c59382a53a9ee5ec46ace56b90 +00010101.ice_model_SNOWFL.nc:544cf5944a607507d3955f34191c219f +00010101.ice_model_SSH.nc:74175e01bc3b2725aba2a3e7d49dcb9f +00010101.ice_model_SSS.nc:4f1f2065beea68f1309c0473e19c7e01 +00010101.ice_model_SST.nc:be6b8fde257f37fa538bdc411ccf60bd +00010101.ice_model_STRENGTH.nc:d92066a0103c2025d27130f5bda3057c +00010101.ice_model_STRENGTH_hf.nc:764a3dace4f6d8ade9d49295d1eed64c +00010101.ice_model_STREN_0.nc:3ed1430f08d0fa7c0c4bcad2a4aa1351 +00010101.ice_model_SW.nc:07826c5a918e57e8979561337222980e +00010101.ice_model_SWDN.nc:8aa936eab822b69d83f99daa3e620515 +00010101.ice_model_SW_NIR_DIF.nc:3829eefa1e20263a797b5169f3bf9734 +00010101.ice_model_SW_NIR_DIR.nc:e1511ee968e73497dc3fdd3be1f3aec0 +00010101.ice_model_SW_VIS.nc:7a33f74b26b8c9d2d9aff8fa27f7a157 +00010101.ice_model_SW_VIS_DIF.nc:2a4d13cc6eb195183a2f212744b44c48 +00010101.ice_model_SW_VIS_DIR.nc:a8e4ff95676173ba382e9b3ebef24229 +00010101.ice_model_S_bulkice.nc:9809081fc350d0ef6eaa9417645fb5ab +00010101.ice_model_Sal1.nc:45eeae3a64a56ab372df15afa7159c60 +00010101.ice_model_Sal2.nc:90e335f11e82a9f9265ee473f6b7933d +00010101.ice_model_Sal3.nc:7567f56192a012464c79897a45538d0b +00010101.ice_model_Sal4.nc:145dd50ff3e8f4b23a8e66db328e8ba7 +00010101.ice_model_T1.nc:7ddecf1126ccde3e602b24acc96d4412 +00010101.ice_model_T2.nc:8014cb8128a8694e17caa787857bf336 +00010101.ice_model_T3.nc:77f0298e7c20ec170edc6d35f023b68f +00010101.ice_model_T4.nc:e81a65bbc2aeb9fb89fd1aa776fb26c9 +00010101.ice_model_TMELT.nc:eb128871bf30be1966ca03f51a677438 +00010101.ice_model_TS.nc:b65c7f54ce16a90b420f3595b867b62a +00010101.ice_model_TSN.nc:cc7609d7346a931dba935da2999c702f +00010101.ice_model_T_bulkice.nc:88249b3c8152ed4416d7631ade898404 +00010101.ice_model_UI.nc:3d3e496580e7d6588737c9fe2d3a4fb6 +00010101.ice_model_UO.nc:d402f774d6d4e8ab9b6e3a354ed7939f +00010101.ice_model_U_CHAN_OCN.nc:e7e6ef1da45db28596c814dc69128b33 +00010101.ice_model_U_CHAN_VISC.nc:2393d233a974b5e987104c5f764d7033 +00010101.ice_model_U_STAR.nc:7469992864b76ffd99b9b99726e37155 +00010101.ice_model_VI.nc:ef0c6931b7e7a758d79cda965396a82c +00010101.ice_model_VO.nc:50377e94cb688e72e1c5876eb28707da +00010101.ice_model_V_CHAN_OCN.nc:e053898f525bfe3381798ea9258b28f0 +00010101.ice_model_V_CHAN_VISC.nc:2b0dcb65caaaaff21d0bb06a712a98c3 +00010101.ice_model_V_STAR.nc:29e4c49941e52cffa564a6b3112fa967 +00010101.ice_model_XPRT.nc:5db43347c35f02d4df41d019ff262ac8 +00010101.ice_model_alb_nir_dif.nc:1674182db2bb9dc24a65791b1aec9394 +00010101.ice_model_alb_nir_dir.nc:6fd57be75df446994bdd1d9124f6d5d2 +00010101.ice_model_alb_vis_dif.nc:e5e4cf34ab93c631cdf5251b37478144 +00010101.ice_model_alb_vis_dir.nc:347c4024ff38ae286571e35474860b32 +00010101.ice_model_coszen.nc:60ae66b3494d311c3a21bdd097e528a2 +00010101.ice_model_del_sh.nc:206ec8fafe2827d3733041b122361192 +00010101.ice_model_del_sh_min.nc:eee58e2e15203810070ee797ca524e10 +00010101.ice_model_sh_d.nc:694ddb533ed2cce84c21113b4ce2827f +00010101.ice_model_sh_d_hf.nc:9bc969b83a84a668050e982c9ea1f41c +00010101.ice_model_sh_s.nc:f034ee93190abfc3e27c456676b23935 +00010101.ice_model_sh_s_hf.nc:44630e4e416dd13b0a5af63181ebd38a +00010101.ice_model_sh_t.nc:b132a70b3c39cf0b18c7ee5d095281b4 +00010101.ice_model_sh_t_hf.nc:544aa1a58407ced256a425f5e3485946 +00010101.ice_model_sigII_hf.nc:6b3f4ccac58ad76ee8c428ad1c97ae21 +00010101.ice_model_sigI_hf.nc:73915438fe215df336000f5848f0700b +00010101.ice_model_str_d.nc:2dc49baa3f42271cdf821f8f6182037e +00010101.ice_model_str_d_hf.nc:4dda7bbe6b94db2ab682a3eaf1d00bf0 +00010101.ice_model_str_s.nc:6b90d8ec1ad687c29c863b44e41c4ae8 +00010101.ice_model_str_s_hf.nc:63d3f6e0c4c342fc7ddb84bccfba60ec +00010101.ice_model_str_t.nc:2dce632746b0516c7ed7372d213cec2e +00010101.ice_model_str_t_hf.nc:335299c2a9ad587fcd8107cdb9149268 +00010101.ice_model_sw_abs_ice1.nc:f9a6d099738465127e99455ca717fc74 +00010101.ice_model_sw_abs_ice2.nc:1eece91b0f480f5fbf76c6a575850768 +00010101.ice_model_sw_abs_ice3.nc:85595dbe181744ac7468cb46a1f82a33 +00010101.ice_model_sw_abs_ice4.nc:98543b2faac971e983893a4a65589b4a +00010101.ice_model_sw_abs_ocn.nc:d2ec24b1205e61de16229b2114a1e5dd +00010101.ice_model_sw_abs_sfc.nc:101e7dacfd95334c75100f88e8f19ba4 +00010101.ice_model_sw_abs_snow.nc:bb721bb4fbef1e180e770dd1d3f18e75 +00010101.ice_model_sw_pen.nc:a02d06ad93a1023c1da66e05402e9c90 +00010101.ice_model_ui_hf.nc:19e7075df3d17d5409f86aa03aec58bf +00010101.ice_model_vi_hf.nc:efeefb1a627476c2f4cc375fcdadcdbc +00010101.ocean_model_Ahh.nc:0fc914e6f293539aa595fa5d7aacd2c9 +00010101.ocean_model_Ahq.nc:81af2c2cf99fea38bec19190703acae7 +00010101.ocean_model_CAu.nc:1a3b89f9442ec0d1e9c9855c74dd997b +00010101.ocean_model_CAv.nc:f0d256f33b80d59c30f09f14ce811925 +00010101.ocean_model_CFC11.nc:a1277ae27a451c41908847eff78a5c59 +00010101.ocean_model_CFC11_adx.nc:a6e9cdd06c00eb4bc53aaa4dd4da6a07 +00010101.ocean_model_CFC11_ady.nc:dc2f25b9d9385305d2a7ef08a9ec336d +00010101.ocean_model_CFC11_dfx.nc:9c27a3261232dbcfa33e969761c9a04a +00010101.ocean_model_CFC11_dfy.nc:adfee2eeec8b4c96a9b68808434d156a +00010101.ocean_model_CFC12.nc:901598f40e2120c2d5b78103896ab33a +00010101.ocean_model_CFC12_adx.nc:48d8a96da0cfbd18e447602aaf4f6ec9 +00010101.ocean_model_CFC12_ady.nc:a311f609854b5a1016b61c4fffbe539e +00010101.ocean_model_CFC12_dfx.nc:407eeb3155bffb0b7d3c18b51281d71f +00010101.ocean_model_CFC12_dfy.nc:9dd2734f6d115a4016874cfb262a1f2a +00010101.ocean_model_CFL_cg1.nc:e79aec70a5ad19fd6f5685298ea47c28 +00010101.ocean_model_CFL_cg1_x.nc:4066457419a5909b705c5082be58efef +00010101.ocean_model_CFL_cg1_y.nc:9dd1891a6a745b85d940067531ac42c7 +00010101.ocean_model_Chl_opac.nc:3f0374c52a29914613e8910688a2f070 +00010101.ocean_model_CoruBT.nc:d6b6557457a901604bd4929bc06f61b6 +00010101.ocean_model_CorvBT.nc:1e4e51d74b1acf4ee4511fce0bdfc196 +00010101.ocean_model_Fl_itides.nc:a7644d3de5d65fc3e097bdd97e76e655 +00010101.ocean_model_FrictWork.nc:5128287b01b58bb447c63afebb80d495 +00010101.ocean_model_GMwork.nc:e3add9e3b713219e49b8b2f7a83c02f0 +00010101.ocean_model_HMLu_visc.nc:947d155c6c28a707bce0af6e08692e9d +00010101.ocean_model_HMLv_visc.nc:621704e34d09e787a7fc73e5d9eb424b +00010101.ocean_model_Heat_PmE.nc:ceb274892e92025d35e81bc5f49ccf8f +00010101.ocean_model_Hs_max.nc:bcd5ce4865a370aa29fa83888e3f6027 +00010101.ocean_model_Hs_min.nc:ecd655952b3e21ed4b7e00f30bba9956 +00010101.ocean_model_Hs_used.nc:12e7a66828fb9306c94e69112bb6af6f +00010101.ocean_model_Hu_visc.nc:0dc2763b474bb585e4312246babc2bb6 +00010101.ocean_model_Hv_visc.nc:9a9abc7c591e5fda43ac26ff9da0ca7a +00010101.ocean_model_KE.nc:04ce123b302beb922da105d42555817b +00010101.ocean_model_KE_Coradv.nc:c70d7e0891f5596705a9bef20d7f6b3d +00010101.ocean_model_KE_adv.nc:a5a1cfd6935af282f4165f83faed4fd7 +00010101.ocean_model_KE_dia.nc:19862b96aca61a2adaa2bd9e29aa8132 +00010101.ocean_model_KE_horvisc.nc:704146627fbbb1b11ba1aecaa5a7da4a +00010101.ocean_model_KE_visc.nc:4855b5c9db66df70709539e5b0546dd4 +00010101.ocean_model_KHTH_u.nc:270e822c0dede5fb5154e391b428ce22 +00010101.ocean_model_KHTH_u1.nc:c4988f5040172876e5e577080fdfc603 +00010101.ocean_model_KHTH_v.nc:7ed88e7fcb29a85cfde515e57bb90f35 +00010101.ocean_model_KHTH_v1.nc:162e2de475ae155e00019833f482b3cc +00010101.ocean_model_KHTR_u.nc:f22a1668562b1a920a2a51639b192a6f +00010101.ocean_model_KHTR_v.nc:646fb3ec4b9b373b956414fd77562cb8 +00010101.ocean_model_Kd_BBL.nc:63d80a47976ded7bd449c48f079ca8d4 +00010101.ocean_model_Kd_Itidal_Work.nc:d6c684e2278a01cdff49f0a16c369fc3 +00010101.ocean_model_Kd_Nikurashin_Work.nc:e871c034e682acbf7aade0a76e3515e8 +00010101.ocean_model_Kd_Work.nc:542e22b24f1210fd629bcdb45239b68d +00010101.ocean_model_Kd_effective.nc:8aa3954bbdd4bfeccea4c55e34f0c45f +00010101.ocean_model_Kd_interface.nc:a413107a8f0bd355c405862619e98793 +00010101.ocean_model_Kd_itides.nc:fcc929dc15c2b41c3aebcac6f2acc88b +00010101.ocean_model_Kd_layer.nc:7115c77dbf2672abd3495bd22bc9b5be +00010101.ocean_model_Kd_shear.nc:c4e962bdb188ce358ef548c9132d0a22 +00010101.ocean_model_Khh.nc:822dda67c0b9c5d703dd4a798b4c411c +00010101.ocean_model_Khq.nc:4a006dab7ef15522d1993c8dd7c73c1c +00010101.ocean_model_L2u.nc:b42bf68b427676401f8e048bef66cb4b +00010101.ocean_model_L2v.nc:8df50d783f7862890fa7461b622d425b +00010101.ocean_model_LW.nc:26771e7afce3927f4f494f29c1e365b1 +00010101.ocean_model_LwLatSens.nc:918447600e027e0c8dc2db9e6210b114 +00010101.ocean_model_MLD_003.nc:4b4805f2f237cc405850526c8b642705 +00010101.ocean_model_MLD_0125.nc:7cb58dda93e1d06db0b062c1b6122683 +00010101.ocean_model_MLD_restrat.nc:9c2c958417a39d1d511f8b0a4345db8a +00010101.ocean_model_MLD_user.nc:8282b3f2bc87d6a9372364d46b0d42f9 +00010101.ocean_model_ML_buoy_restrat.nc:677fd6a6e7c883624d365471fb5af627 +00010101.ocean_model_MLu_restrat_time.nc:85cf4303494ba1c5e4caea8b35e500e8 +00010101.ocean_model_MLv_restrat_time.nc:6c9593e358f39b2fabc1fa30f6eedf8e +00010101.ocean_model_N2.nc:febd0c1a10d0d9a48e30ce3bf6ce49bd +00010101.ocean_model_N2_b.nc:64ac335d6a29dfac9181144e9eecc266 +00010101.ocean_model_N2_meanz.nc:c4eae64e05caac7d23e45eb4548b610c +00010101.ocean_model_Nb.nc:c40b556b9538efe94f671cf568fd40e7 +00010101.ocean_model_PE_detrain.nc:467f11acc15fe75cb4339b4a0c4a1cd8 +00010101.ocean_model_PE_detrain2.nc:fcf5e542144f4fcb5efd92e51132e77c +00010101.ocean_model_PE_to_KE.nc:1b2f503d24a987cb6d8ac998318ef1ab +00010101.ocean_model_PFu.nc:e128db5fd07e1b22bca04d1adc0dcf5e +00010101.ocean_model_PFuBT.nc:3e36cd16517212dc1081c4b355cfc405 +00010101.ocean_model_PFv.nc:62aa3977fe2a6e7ca432500af20de462 +00010101.ocean_model_PFvBT.nc:a1fdf483e47c9daaec625a0c95ebba64 +00010101.ocean_model_PRCmE.nc:7c4c68a00f7995f428f4fd8f6486fa11 +00010101.ocean_model_PV.nc:4bcfaab93ea81d1eb5ae4c0b2d73eda4 +00010101.ocean_model_Polzin_decay_scale.nc:11bea3904e83d8536258b1054caab143 +00010101.ocean_model_Polzin_decay_scale_scaled.nc:75310ed3a1ed255edac9e13bb8a5cacc +00010101.ocean_model_RV.nc:58362f16fa0ec6558c9a273e01b43c21 +00010101.ocean_model_Rayleigh_u.nc:d7da8b6a15373a0893c627ce4beaaa8b +00010101.ocean_model_Rayleigh_v.nc:f99b2e68197bb32633ab1b99a8b34d35 +00010101.ocean_model_Rd1.nc:844cf1ce011b0ea1142da6173c3643d1 +00010101.ocean_model_Rd_dx.nc:7c33f321003984c5a31e8b2f3143079b +00010101.ocean_model_Res_fn.nc:0a48c7a315638302bc9400e10168b03a +00010101.ocean_model_Rho_cv.nc:b395a23f2696c849ccee7b13e8d49ad9 +00010101.ocean_model_Rml.nc:fc954c005ce6eaafdb828f94ca21a7cc +00010101.ocean_model_SN_u.nc:1da5054f0b490d63d98bdc5b37bce2a0 +00010101.ocean_model_SN_v.nc:1562f2d5b543cdb6fc5c7bdc835e66e3 +00010101.ocean_model_SSH.nc:b5c20ce8f83ecc74131db7ebee889e0b +00010101.ocean_model_SSH_inst.nc:e225e6b6ce1ad51ef5a80132ff43afaa +00010101.ocean_model_SSS.nc:0712f88cd7fe69ecf072572dd4ecf67f +00010101.ocean_model_SST.nc:9fc77e3c9ee92df19b6246ca8fad6eb3 +00010101.ocean_model_SST_sq.nc:dfcbca3af950a8cd1bd5fb008b50fe72 +00010101.ocean_model_SSU.nc:e99f7ebd59eae919c0de2c425f6856f4 +00010101.ocean_model_SSV.nc:b9122d41de29d772b37636304c50ec2f +00010101.ocean_model_SW.nc:33709100cc8677fae17b6cf4f96de201 +00010101.ocean_model_SW_pen.nc:b629b8abf977f6ce0eef894c7b8275cf +00010101.ocean_model_SW_vis_pen.nc:5e244ca85056ef218cc0052adeb0a85e +00010101.ocean_model_S_adx.nc:aa4b3dc81f210d8b8adf20787b3ec30f +00010101.ocean_model_S_adx_2d.nc:f43557b6f35ab404544ef5f07e711bf2 +00010101.ocean_model_S_ady.nc:f479b7261c5cc0d81f29ad8c74be3409 +00010101.ocean_model_S_ady_2d.nc:8f9d0c8e6266363f8bf550515fd5802c +00010101.ocean_model_S_diffx.nc:7e1cdd50dfe3cdf7cb2aed571763cfe1 +00010101.ocean_model_S_diffx_2d.nc:69708bc75ec484abe1784087f5f0862a +00010101.ocean_model_S_diffy.nc:d0c3e0918972f2105ea6d12de3748def +00010101.ocean_model_S_diffy_2d.nc:f01c42be1eb06e0d7847a19d12abbd72 +00010101.ocean_model_Sflx_dia_adv.nc:76b11788a48348e6d362e3ad66598c4d +00010101.ocean_model_Sflx_dia_diff.nc:dc6045d756ef18a90660cf9bfd900f29 +00010101.ocean_model_TKE_RiBulk.nc:edb246a6a5b22b0520125a249484d61d +00010101.ocean_model_TKE_conv.nc:53d86904165543cd6360325d057cad94 +00010101.ocean_model_TKE_conv_decay.nc:b0c6280aa7001271a2a502bfd3a3ee67 +00010101.ocean_model_TKE_conv_s2.nc:d42594ed2457b0c5958e00acf6f5da6e +00010101.ocean_model_TKE_itidal.nc:386f57e81548d3dd5e8fdc202f43269d +00010101.ocean_model_TKE_mech_decay.nc:8dd3a9745e9863f670339bf119c38b66 +00010101.ocean_model_TKE_mixing.nc:81ed3d8161589f1618d2c61ee0f8dbf3 +00010101.ocean_model_TKE_pen_SW.nc:238b4d7e6bad06ac5ac7da000326d470 +00010101.ocean_model_TKE_shear.nc:222a3d71fe9232c206081ae4e446fb19 +00010101.ocean_model_TKE_tidal.nc:d5de37591d47d624398f4432d5d79cbc +00010101.ocean_model_TKE_to_Kd.nc:cb316ea601a6c2ef7d6d08771dc8c795 +00010101.ocean_model_TKE_wind.nc:c8b8529ea42355638f5a3f9d13a42d54 +00010101.ocean_model_T_adx.nc:c82c71a02348278f4113f4cdac19cbad +00010101.ocean_model_T_adx_2d.nc:f5bcb7197fc65d0373b86dbd44565793 +00010101.ocean_model_T_ady.nc:2cb5e7a163c57c44da83ef2a31709483 +00010101.ocean_model_T_ady_2d.nc:682bb56b02a319f9f2250302597b91af +00010101.ocean_model_T_diffx.nc:a306377f21c201507b7284bffc32213b +00010101.ocean_model_T_diffx_2d.nc:45340fe58f9fa4130dd40343d229e624 +00010101.ocean_model_T_diffy.nc:a072dec3fb77b7ee12378b244974fbab +00010101.ocean_model_T_diffy_2d.nc:e6b5a4acd61f8cecb39a6e488b50621b +00010101.ocean_model_Tflx_dia_adv.nc:3603a038e6ba58d60279a3f352abb3e2 +00010101.ocean_model_Tflx_dia_diff.nc:5bd4053527cc7b52e76315b096c3a8d3 +00010101.ocean_model_age.nc:953311432dbacff81c2340f231daab27 +00010101.ocean_model_age_adx.nc:c0e42b9a824a53dfcef3462f2d190818 +00010101.ocean_model_age_ady.nc:cc7690d87c667e8e9e33423d9ad688e4 +00010101.ocean_model_age_dfx.nc:1cf7b07f169c7ec22b6d4636728ed4ce +00010101.ocean_model_age_dfy.nc:189e454ffc92543ded2e0ce525e591f2 +00010101.ocean_model_au_visc.nc:512de8602d0b2f99273f28e94f8de9be +00010101.ocean_model_av_visc.nc:4f86c74bf06a849ef906c4acfd007283 +00010101.ocean_model_bbl_thick_u.nc:8c1dc18707f305cfb5a912dc2d130c72 +00010101.ocean_model_bbl_thick_v.nc:f20e3aadf6b41b9f34519e2fcf32399f +00010101.ocean_model_cg1.nc:5d805cbd921b68ac1352d26b1baab5a2 +00010101.ocean_model_col_height.nc:3189a4cb5f784731aa4dc03909a1ec0c +00010101.ocean_model_col_mass.nc:2587826dc8c1cfcb11c60f8c70868ada +00010101.ocean_model_dKE_dt.nc:800ffc301328c41d7407f3437b6bbfc1 +00010101.ocean_model_deficit_ratio.nc:48ec7ea66b3ebffba0d694eb94778d4f +00010101.ocean_model_dhdt.nc:04710b2751cf7a004d27eada9220c2bd +00010101.ocean_model_diff_work.nc:23b203c1a61bcdd944f128fb9693358c +00010101.ocean_model_diffu.nc:7f788c4335546e104f88db0747edfc0d +00010101.ocean_model_diffv.nc:86166c9403d06824c5254e16bb0f0009 +00010101.ocean_model_du_dt_visc.nc:503ee72b22c3be72c3a71ac608356bfd +00010101.ocean_model_dudt.nc:356a7a6f85efccd8f4601d7f5ecdce2e +00010101.ocean_model_dudt_dia.nc:0b406843c1ccaa2ef84b4fdc25ee3fdc +00010101.ocean_model_dv_dt_visc.nc:d0fde3cbcb1c75ae0cfe2512c20a9eaa +00010101.ocean_model_dvdt.nc:281f44e0f47defe3095decfe28c9b702 +00010101.ocean_model_dvdt_dia.nc:20156211a8a819035bb130b9722c8afd +00010101.ocean_model_e.nc:1185fba1ea1ec99855df10ca1b1d72c8 +00010101.ocean_model_e_D.nc:2c35ff1d02047a092c51532f6a7fc6c2 +00010101.ocean_model_e_predia.nc:08cb5f526f57b4b4608e71c8a5f53e12 +00010101.ocean_model_ea.nc:6572cafa181f07cd10cc832673819939 +00010101.ocean_model_eb.nc:cccbb489403d962db38f0ece64245657 +00010101.ocean_model_eta_bt.nc:0c06a729b445005f380616ded67d86eb +00010101.ocean_model_eta_cor.nc:311dd1aebc653164d0eeab24ea5e754f +00010101.ocean_model_eta_hifreq.nc:e1e96872b9de39234f14c5f6278d1614 +00010101.ocean_model_eta_pred_hifreq.nc:bcc175004d0b33ef10b1d6dd4d23cf5c +00010101.ocean_model_eta_st.nc:80f803d23c63c676df9ff92ddbf2c7b3 +00010101.ocean_model_evap.nc:6051f07d1f08c94ce0f9a06225a1a2c1 +00010101.ocean_model_evs.nc:b6346e1eda8f2fb5f325ac89cdb87311 +00010101.ocean_model_ficeberg.nc:c725b2030b1612a3467950fe616e50bc +00010101.ocean_model_fprec.nc:6f9af89de639f1f5566be0e35f627330 +00010101.ocean_model_frazil.nc:8e72bf83278d37e5b6d328a23c545d6f +00010101.ocean_model_frhatu.nc:cb48c471851b56227ffa3511dd2fd09c +00010101.ocean_model_frhatu1.nc:3a2be88bef2cd591354e696a9848ce36 +00010101.ocean_model_frhatv.nc:2c9e563effc1bc411931b915d49b6444 +00010101.ocean_model_frhatv1.nc:644ff22ae01a4daeba79eb25fc625a7e +00010101.ocean_model_friver.nc:03d77b567a6806651cafee628b995044 +00010101.ocean_model_frunoff.nc:2b8ea63ef2f722248d273a27e25f9ef3 +00010101.ocean_model_gKEu.nc:dffec83f62486d8b4d738d0f955a5275 +00010101.ocean_model_gKEv.nc:a5b072a1dbbfd5e1ab5a53422b9a93e4 +00010101.ocean_model_gtot_e.nc:fb7071b155f45337ee4f2b57d6527ceb +00010101.ocean_model_gtot_n.nc:2c66e2e94b0f8cd70f6e396cde557642 +00010101.ocean_model_gtot_s.nc:2151d09149a14234fb89a2c4f1f686a0 +00010101.ocean_model_gtot_w.nc:c5762856ed93515583d0b2a596e1ef6b +00010101.ocean_model_h.nc:28c9c991f41c1c812fada5f4ecca30d1 +00010101.ocean_model_h_ML.nc:2f2cc54dffbd91e3363fc1d15701c4ee +00010101.ocean_model_h_miss_ML.nc:f3f84030e0b84f75eba47b4c0f71253c +00010101.ocean_model_h_predia.nc:31d16ac33f6b8d13551fe04d93dca796 +00010101.ocean_model_h_rho.nc:41553c8cee120b392a2a920944ae259e +00010101.ocean_model_heat_content_cond.nc:ad05f6844095267101ccf0c7a9ed875a +00010101.ocean_model_heat_content_fprec.nc:53e462976e7b1cd3ab78a2d1fd2c4453 +00010101.ocean_model_heat_content_frunoff.nc:ef11b6b536926a49f8ef98f33e3d7a07 +00010101.ocean_model_heat_content_lprec.nc:2fcc7d1c4722a467802523dfa72fd872 +00010101.ocean_model_heat_content_lrunoff.nc:e973acc7a1715b91ee41a60d59518eda +00010101.ocean_model_heat_content_massin.nc:4e8d2a66c7a52acad4afc6842acddda1 +00010101.ocean_model_heat_content_massout.nc:6364fb828f995b9324a3b44c0e2c6164 +00010101.ocean_model_heat_content_surfwater.nc:ecb7bbd24c4ce0a6de3f7e6183be05f5 +00010101.ocean_model_heat_content_vprec.nc:4ad78fc2bee9811c5d56ccdbe3b97015 +00010101.ocean_model_hfevapds.nc:42d24c4d5d18c8d1207c756919a5c9d0 +00010101.ocean_model_hfibthermds.nc:49e7e7e18866311400e6c7ac5254f083 +00010101.ocean_model_hfls.nc:c1ed86a8ed23b57306a70b948d36dc75 +00010101.ocean_model_hfrainds.nc:22fe3f77e7889911f860cfb7338a162d +00010101.ocean_model_hfrunoffds.nc:49372067ee87cf6b74afa4b3c693b499 +00010101.ocean_model_hfsifrazil.nc:955dad24b9411c6726bb14dda495301f +00010101.ocean_model_hfsnthermds.nc:5abf3ac92daee9d07b5bd50b4fba9930 +00010101.ocean_model_hfsolidrunoffds.nc:eaa3e8b30ba818e1ab483d07758626d5 +00010101.ocean_model_hfss.nc:c5e84e7a406dc66e29df73c6521fa67f +00010101.ocean_model_internal_heat.nc:6279b6f3b5db3fb1b8662a9ddfb514a7 +00010101.ocean_model_kv_bbl_u.nc:ebb10888e16a4aa7eca7a2a5ffb56413 +00010101.ocean_model_kv_bbl_v.nc:c584c9868ceaafc92783a80cbc9769d2 +00010101.ocean_model_latent.nc:4194998e8d933a60b7337bff7e707c0d +00010101.ocean_model_latent_evap_diag.nc:42db9647814855caff32458fea4a8bc4 +00010101.ocean_model_latent_fprec_diag.nc:df1c83c4681afe06fdd9291b0da8a143 +00010101.ocean_model_latent_frunoff.nc:cbc11da81ee2a36ba6a9c764fa92e29b +00010101.ocean_model_lprec.nc:ec895e38e9624eecf3fb389ccb3c2569 +00010101.ocean_model_lrunoff.nc:5fe72a85c39096512b0d6d12d46a7aa0 +00010101.ocean_model_mass_wt.nc:960afcc85e5c4f63337cd6c6ffa16de7 +00010101.ocean_model_masscello.nc:3ad5bcda3931b5cd0a3dadf485b7863e +00010101.ocean_model_masso.nc:da3cb7c2bcc7fc37e548c6f21fc5c1fd +00010101.ocean_model_maxTKE.nc:df211e02983f6d91e80598dd000e43a1 +00010101.ocean_model_mlotst.nc:d629510029df5eb9a390e0d130ca658b +00010101.ocean_model_mlotstsq.nc:314a604c5b44fc69ca97de134105d3c0 +00010101.ocean_model_net_fresh_water_global_adjustment.nc:73e6ad8e74fba477f19887ebac53131f +00010101.ocean_model_net_fresh_water_global_scaling.nc:018d7b7c2bd5e8c65ab15f80009bb91a +00010101.ocean_model_net_heat_coupler.nc:585f9b9f0672c9322f1fba1ceb069ae2 +00010101.ocean_model_net_heat_surface.nc:dbc8c96ed24b111881c1d31d67e5526e +00010101.ocean_model_net_massin.nc:b24416bb9b444cc86a61e84d9ce93fea +00010101.ocean_model_net_massout.nc:4be939a60560b1c6d6f87344ecf74ecc +00010101.ocean_model_neutral_slope_x.nc:48e40ccb12b4df075bbb5edc9bf545f6 +00010101.ocean_model_neutral_slope_y.nc:3e496ff23b23cf29eeff194790210474 +00010101.ocean_model_nkml_visc_u.nc:c6381a7e14582bba1565d285a890dea8 +00010101.ocean_model_nkml_visc_v.nc:d5f57ff63b76e29ef2d4ec80122eb338 +00010101.ocean_model_opac_1.nc:36f5fb5c3de07c0f836e40d373693e97 +00010101.ocean_model_opac_2.nc:4f2797216f184ac3b24fc8cc29c28c35 +00010101.ocean_model_opac_3.nc:1f787c9d43a140270dfd147b5edeb3c3 +00010101.ocean_model_opottempmint.nc:7fbb57d9fe5498f188b7824e7907fcd4 +00010101.ocean_model_p_surf.nc:ea21251e7d5a7a26e50276f207660cc7 +00010101.ocean_model_pbo.nc:f9aac006d0c4b2406793663a9581f134 +00010101.ocean_model_pr.nc:b20011c8c8967f2f0c8159a48cc3b89f +00010101.ocean_model_precip.nc:6246ba297f92f82898bccea81880db6f +00010101.ocean_model_prsn.nc:3f52cb7d8bbff20003fb5c9107c64fb8 +00010101.ocean_model_pso.nc:89bc6f892e47959dfeaddf8f2cbd4c19 +00010101.ocean_model_rlds.nc:ba97ffb79e6d411906f37b147db726a3 +00010101.ocean_model_rsntds.nc:9e1957b145f7462d66c0f1d4e3ffa211 +00010101.ocean_model_rvxu.nc:ae76d595f87be0c77f2ca72811821ae0 +00010101.ocean_model_rvxv.nc:0f2a7d93da44ee7caf31180a314e3cab +00010101.ocean_model_salt.nc:c8a4d5614959c36f98f8d940c8b4c07b +00010101.ocean_model_salt_deficit.nc:423169125d8a02da29ab1a3402482f6c +00010101.ocean_model_salt_flux.nc:85b8b196502f509d01c6ed5c59add89c +00010101.ocean_model_salt_flux_global_restoring_adjustment.nc:4f15efc213beac00543913b3a0129048 +00010101.ocean_model_salt_flux_global_restoring_scaling.nc:195207a005a884bae1101eedd6d8ae42 +00010101.ocean_model_salt_flux_in.nc:2e7125bef9dc7d0851847dee8b153836 +00010101.ocean_model_salt_flux_restore.nc:6e19b969f460eee6a7e0576ac95de44a +00010101.ocean_model_salt_int.nc:760840694089a1eee45c03e619248848 +00010101.ocean_model_salt_layer_ave.nc:8b49732c1e4d8cb502d8d480ba255cc6 +00010101.ocean_model_salt_predia.nc:56d68068eb12c3cc6619e80da0b9bac1 +00010101.ocean_model_sensible.nc:479645e75a48658e6924c59572c91fac +00010101.ocean_model_sfdsi.nc:b36676b992af5dae7a8197d94e1b6af7 +00010101.ocean_model_so.nc:364684e30b7e76bbd51c9aba16b86b54 +00010101.ocean_model_sob.nc:e6c6e83cec875fea1c83c5f05e182be6 +00010101.ocean_model_soga.nc:a790d91e7b02b86b3d2b9d90e413da53 +00010101.ocean_model_somint.nc:f2ccfa04a08f679d1c85de9d50e76792 +00010101.ocean_model_sos.nc:657050704e4478b0246bc3452f8b9809 +00010101.ocean_model_sosga.nc:c20acdc92035dbb557ccd374079064d0 +00010101.ocean_model_speed.nc:0e2a50a5d7bb95def784b4caa3820395 +00010101.ocean_model_sss_global.nc:9c7aa7b21676bb53d8eb83d130816152 +00010101.ocean_model_sst_global.nc:f7294b77e599843043f896aaf0213ad5 +00010101.ocean_model_subML_N2.nc:bee022c4bf08d0118f47368cb7b819d6 +00010101.ocean_model_tauuo.nc:f3c787571f5cee9a373e628e292f1f0f +00010101.ocean_model_tauvo.nc:cb638fea9659fa85e5f87f818fe5fef9 +00010101.ocean_model_taux.nc:5d31608e45bfd556cae4287ed377522d +00010101.ocean_model_taux_bot.nc:7deb16a4e5e3cb8e758f28d9b8d1b026 +00010101.ocean_model_tauy.nc:67e1860653602506f0a3383c2b4bbf11 +00010101.ocean_model_tauy_bot.nc:645bb5d66141bda36881445a91501fa5 +00010101.ocean_model_temp.nc:e0a49002a91021beea39e93160e03b34 +00010101.ocean_model_temp_int.nc:680ed3b2a449b444615e86cf6d969964 +00010101.ocean_model_temp_layer_ave.nc:436ae4fc1cfb75c5498509af66ab3cbb +00010101.ocean_model_temp_predia.nc:a8cbb67b7b0f6fa6a1b1f0d0f4e01f09 +00010101.ocean_model_thetaoga.nc:2482692aead0fd607fafa4b1fef49860 +00010101.ocean_model_thkcello.nc:936daf5d3c71d643d8757bcbfcf8a692 +00010101.ocean_model_tob.nc:abc3f342f7e539889cbdcdfcded3e9fe +00010101.ocean_model_tos.nc:1bdbf6c2e412a6c3c73ed0f0f77f5b83 +00010101.ocean_model_tosga.nc:d74fa348dd5056f7c7206ab7719ba012 +00010101.ocean_model_tossq.nc:98cbecbefc7c1da974fdf57d908042aa +00010101.ocean_model_total_LwLatSens.nc:1f5cbf4f01a5597ab2ceffa0bb63f810 +00010101.ocean_model_total_PRCmE.nc:2a431a22d156d28c61e756ff8cdfc664 +00010101.ocean_model_total_evap.nc:02543815704eb4321a8c3b5d17f750e9 +00010101.ocean_model_total_fprec.nc:52b1cd52463138a297d878f66b0848bc +00010101.ocean_model_total_frunoff.nc:1f92f5e36917acce46864a63ee6f68bf +00010101.ocean_model_total_heat_content_cond.nc:1575f2a14b58be8cc79a051aed554bb2 +00010101.ocean_model_total_heat_content_fprec.nc:d9746de2923eac2239c9650ab445e824 +00010101.ocean_model_total_heat_content_frunoff.nc:55b0cce451222fbceb1e8a08557166c6 +00010101.ocean_model_total_heat_content_lprec.nc:4d1e4e28d24c75403291b470a33c344d +00010101.ocean_model_total_heat_content_lrunoff.nc:5b44dfec1932ce3018cc4d1a580eaef8 +00010101.ocean_model_total_heat_content_massin.nc:d18a53d81fa5e90e33af789c1a73290e +00010101.ocean_model_total_heat_content_massout.nc:c87cde9a20c22c16a001a82023438baa +00010101.ocean_model_total_heat_content_surfwater.nc:4256543f4a4aeda698c07eed5ff9180c +00010101.ocean_model_total_heat_content_vprec.nc:fbfaf4b8f8f33cf2693f56c1ebc91ca1 +00010101.ocean_model_total_lat.nc:12ecc01a420c71e318c2a3ef65edd6ed +00010101.ocean_model_total_lat_evap.nc:a316cced9b99d999a0f6881253be47f3 +00010101.ocean_model_total_lat_fprec.nc:00ce0216fcf577a15bfc8053cd6c9ebb +00010101.ocean_model_total_lat_frunoff.nc:60257494c7a35ff109793155ac475f84 +00010101.ocean_model_total_lprec.nc:1e9e8059f4b34ef0d1f66eb31ab30743 +00010101.ocean_model_total_lrunoff.nc:f318e750aadd2d5f48cb1ce83805c9fd +00010101.ocean_model_total_lw.nc:0a3dc4a329496e5304354cbff4cf0577 +00010101.ocean_model_total_net_heat_coupler.nc:8ea13937ae8d218589a474f81b1b34ee +00010101.ocean_model_total_net_heat_surface.nc:62c5fd6fcb017e46a5e374285931516f +00010101.ocean_model_total_net_massin.nc:b31dbc7b7aaca0347becb44fce0fdf82 +00010101.ocean_model_total_net_massout.nc:0a7beaae4583b7b901972f48465980cf +00010101.ocean_model_total_precip.nc:70bb4bd8a9bf967f1d1aead999838761 +00010101.ocean_model_total_salt_Flux_In.nc:586a1c6e59a201f130cbd8d4f608ca52 +00010101.ocean_model_total_salt_Flux_Restore.nc:9b53ddd9f46d7b66c4fef6f23a6e2d2e +00010101.ocean_model_total_salt_flux.nc:fbf846857ace2b862edc248937988156 +00010101.ocean_model_total_sens.nc:5fc8a8b5a6ac7bb6cd26d08a3a6d155c +00010101.ocean_model_total_sw.nc:b36d18fe04feaf0ca2992f0a5bd59c72 +00010101.ocean_model_total_vprec.nc:5033a5aebc1b803054280fe3c9895e72 +00010101.ocean_model_u.nc:b0f22879726ddf5d98e0479f50479564 +00010101.ocean_model_u_BT_accel.nc:31b5b3d413d67e7045e3715d16ad96ea +00010101.ocean_model_u_accel_bt.nc:677cb30c38cf0486cdfa56bd61663adb +00010101.ocean_model_u_predia.nc:3f80d155d4aef18e3b284420bac4e820 +00010101.ocean_model_uav.nc:676ec0a8554609cf492a0666537e82fb +00010101.ocean_model_ubt.nc:be19eda5b8434ced71600661708b1923 +00010101.ocean_model_ubt_hifreq.nc:83d85587d6201df0211010da1595619d +00010101.ocean_model_ubt_st.nc:08234124acd4f917b73a7f65c24daa60 +00010101.ocean_model_ubtav.nc:83741f9d28edae755498c97b7b815765 +00010101.ocean_model_ubtforce.nc:c4e6b51e5d7353bdb103f6cdac6e1a99 +00010101.ocean_model_udml_restrat.nc:ae151ee4596d81e6ca579c3075c73bfb +00010101.ocean_model_uh.nc:154831235209aa224b8d499b1403d0fd +00010101.ocean_model_uhGM.nc:974dd6165f6f02547ced88cf5967f8fd +00010101.ocean_model_uhGM_rho.nc:b1cee20fdb1ee6af10512a11f3c39ef4 +00010101.ocean_model_uh_rho.nc:2776936b191a221d3864debcccbba1e8 +00010101.ocean_model_uhbt.nc:dd35460d07f9ee7e75807ad937ee4d00 +00010101.ocean_model_uhbt_hifreq.nc:eb70bbf04865b98003a79a0ef2ca6ff3 +00010101.ocean_model_uhml.nc:e801487969a99428675f5f820023df0a +00010101.ocean_model_uo.nc:8f567339b9b5347560dc2b6eecbf2b5e +00010101.ocean_model_ustar.nc:ab171ec81a095a1b839a07a1955ae110 +00010101.ocean_model_v.nc:28edef8e2846734e954c45fa6159c444 +00010101.ocean_model_v_BT_accel.nc:4c15537a22e10b4b687184a265ef1f3b +00010101.ocean_model_v_accel_bt.nc:37751e47cad6c629205b4e01da300ced +00010101.ocean_model_v_predia.nc:9b448e05e4a180241cf40f25dd2c0182 +00010101.ocean_model_vav.nc:569aa3d024d0d60c8802a4457796551b +00010101.ocean_model_vbt.nc:3b766e99c2c6e13045f74fc25516c2cc +00010101.ocean_model_vbt_hifreq.nc:7d1a641f9cd23c08e6df57f869ebde24 +00010101.ocean_model_vbt_st.nc:1b872b013bbe1195fd3e3d118a9e9f72 +00010101.ocean_model_vbtav.nc:1f312b216fe35d89b0ca345bb1a09722 +00010101.ocean_model_vbtforce.nc:e555fa093da2fd7b66ce3a34a9a538ac +00010101.ocean_model_vdml_restrat.nc:bf1ab02686544775867eadbd4b2df5db +00010101.ocean_model_vh.nc:5b964441e2ec161a568efdd34188faab +00010101.ocean_model_vhGM.nc:90349f0f57f3f0471f3b4103ffbee492 +00010101.ocean_model_vhGM_rho.nc:8c864aa5dbf845dc7c44d5be666a8d03 +00010101.ocean_model_vh_rho.nc:3f092100acc585890f78c42462a2ae06 +00010101.ocean_model_vhbt.nc:ce356a61d109a49ffb40197c43158d6a +00010101.ocean_model_vhbt_hifreq.nc:7b58e5d4332a4976eb059c68505b3670 +00010101.ocean_model_vhml.nc:f5098003c7f74f588d7181a09304fd44 +00010101.ocean_model_visc_rem_u.nc:ed52dd7912b75b0137fb659fc324965c +00010101.ocean_model_visc_rem_v.nc:97b79b3ac815c3e9e98bc837e68ed932 +00010101.ocean_model_vo.nc:d21bfab3f1e05bdfe537472de64fa654 +00010101.ocean_model_volo.nc:66cc5aee95105f6af1f02d452e11626b +00010101.ocean_model_vprec.nc:fc8add95500c0395440a88c36b3f029a +00010101.ocean_model_vprec_global_adjustment.nc:d3bd2f002aa916081bcf133f072a5401 +00010101.ocean_model_vprec_global_scaling.nc:7660b91464db2ce8eb8fc07f388e0b3b +00010101.ocean_model_wd.nc:09ec3b00a7963476874a64d2f0c0e99a +00010101.ocean_model_wfo.nc:6da5ee5ad578b0a395288a876383d4ec +00010101.ocean_model_z_CFC11.nc:8a846b2d66840a48137a3065612e0d91 +00010101.ocean_model_z_CFC12.nc:5d266d81de7c68fccbd73fa45528bedd +00010101.ocean_model_z_Kd.nc:513c35fde3a1e2de6ceb1e4828a5397c +00010101.ocean_model_z_Kd_itides.nc:32db260ccf61fa196d0fcfe534667cfe +00010101.ocean_model_z_N2.nc:621a3caf3e09ac7c793e010b7c7c1de2 +00010101.ocean_model_z_Sflx_dia_adv.nc:8776566b1004d60ebcab42ece1bb798a +00010101.ocean_model_z_Sflx_dia_dif.nc:0a8cc9ea2d850e0072c1a25ab2b0ed76 +00010101.ocean_model_z_Tflx_dia_adv.nc:7c4bb293d698ddff841371de977c8e8f +00010101.ocean_model_z_Tflx_dia_dif.nc:540d187ae011ef61f7e884d96617a809 +00010101.ocean_model_z_age.nc:d79dd1f3c70bfac1268fb2931dfd0e4d +00010101.ocean_model_z_salt.nc:4c87d3fe739041a45acdfb87d65892a5 +00010101.ocean_model_z_so.nc:c99308b1fd6b60d6229f39d1e72b7325 +00010101.ocean_model_z_temp.nc:5abb8bfd6a74825c8e4d5949076f9a2b +00010101.ocean_model_z_thetao.nc:fe075df3ac201a29a651e7af4ef0172b +00010101.ocean_model_z_u.nc:9e2d21916707f3c8d51755ee1f11a115 +00010101.ocean_model_z_uh.nc:3435f6ccb80959293d51455853c3eded +00010101.ocean_model_z_umo.nc:39a2e7733eb9fe749e5f5670e555a8a9 +00010101.ocean_model_z_uo.nc:c0ab95c6a30b78f98fea087132a39035 +00010101.ocean_model_z_v.nc:3e05d119278cf304d3da41e2ad2a0856 +00010101.ocean_model_z_vh.nc:c8964b01fe4bdd75ccba2383e9e86323 +00010101.ocean_model_z_vmo.nc:a29dec297cf61d848bd14656957e0157 +00010101.ocean_model_z_vo.nc:6b23c24e1452d2aeefc8529cabb5662c +00010101.ocean_model_zos.nc:de2cb9c93c73e88e108181886c2ae398 +00010101.ocean_model_zossq.nc:0c7f300c5bad0653a1bf3ad1f5d00748 diff --git a/ice_ocean_SIS2/Baltic/input.nml b/ice_ocean_SIS2/Baltic/input.nml index 7d349aa028..c3c54c686e 100644 --- a/ice_ocean_SIS2/Baltic/input.nml +++ b/ice_ocean_SIS2/Baltic/input.nml @@ -15,6 +15,11 @@ 'SIS_override' / &diag_manager_nml + max_output_fields=1000 + max_input_fields=1000 + max_num_axis_sets=1000 + max_files=1000 + max_axes=2000 / &coupler_nml diff --git a/test/experiment.py b/test/experiment.py new file mode 100644 index 0000000000..da0863b07b --- /dev/null +++ b/test/experiment.py @@ -0,0 +1,62 @@ + +from __future__ import print_function + +import subprocess as sp +import os +import sys + +class Experiment(object): + + def __init__(self, model, exp_name, platform='gnu'): + """ + Python representation of an experiment / test case. + """ + + self.model = model + self.exp_name = exp_name + self.platform = platform + # Path to experiment + self.script_path = os.path.dirname(os.path.abspath(__file__)) + self.path = os.path.join(self.script_path, '../', model, self.exp_name) + + # Path to exec. + self.exec_path = os.path.join(self.script_path, + '../build/{}/{}/repro/MOM6'.format(platform, model)) + assert(os.path.exists(self.exec_path)) + + def force_build(self): + """ + Do a clean build of the configuration. + """ + raise NotImplementedError + + + def build(self): + """ + Build the configuration for this experiment. + """ + raise NotImplementedError + + + def run(self): + """ + Run the given experiment. + + FIXME: should do a build when necessary. + """ + + print('Experiment: running {}'.format(self.exec_path)) + + ret = 0 + saved_path = os.getcwd() + + os.chdir(self.path) + try: + output = sp.check_output([self.exec_path], stderr=sp.STDOUT) + except sp.CalledProcessError as e: + ret = e.returncode + print(e.output, file=sys.stderr) + finally: + os.chdir(saved_path) + + return (ret == 0) diff --git a/test/test_diagnostic_output.py b/test/test_diagnostic_output.py new file mode 100644 index 0000000000..4ebdb2fc42 --- /dev/null +++ b/test/test_diagnostic_output.py @@ -0,0 +1,198 @@ + +from __future__ import print_function + +import os +import re +import sys +import numpy as np +import hashlib +from scipy.io import netcdf as nc +from experiment import Experiment + +from nose import with_setup + +def get_expected_diags(exp): + """ + Parse available_diags.000001 and SIS.available_diags files to get a list of + all possible diags for this experiment. + """ + + mom_av_file = os.path.join(exp.path, 'available_diags.000000') + sis_av_file = os.path.join(exp.path, 'SIS.available_diags') + assert(os.path.exists(mom_av_file)) + assert(os.path.exists(sis_av_file)) + + expected_diags = [] + for fname in [mom_av_file, sis_av_file]: + with open(fname) as f: + # Seach or strings like: "ocean_model", "N2_u" [Unused] and + # pull out the model name and variable name. + expected_diags.extend(re.findall('^\"(\w+)\", \"(\w+)\".*$', + f.read(), re.MULTILINE)) + return expected_diags + +def dump_diags(exp, diags): + """ + Create a new diag_table based on the given diags in experiment 'exp', run + the experiment so that all diagnostics are written out. + """ + + # Create a new diag_table that dumps all diagnostics into individual + # files. This is a trick to get the highest frequency output for each + # diagnostic. By default if only a single file is used, when '0' is set + # as the frequency, the diag manager will choose the minimum frequency + # and dump all diagnostics with that. This will result in the slower + # diagnostics being filled up with missing values, which is not what we + # want. + with open(os.path.join(exp.path, 'diag_table'), 'w') as f: + print('test_diags_coverage', file=f) + print('1 1 1 0 0 0', file=f) + for m, d in diags: + print('"{}_{}", 0, "seconds", 1, "seconds", "time"'.format(m, d), file=f) + for m, d in diags: + print('"{}", "{}", "{}", "{}_{}", "all",' \ + '.false., "none", 2'.format(m, d, d, m, d), file=f) + + # Run model again. An output file for each diagnostic will be written. + assert(exp.run()) + +def diag_filenames(exp, diags): + """ + Take a list of diagnostics and return a list of tuples, first element of + tuple is the full path to the file containing the diagnostic. + """ + + with_filenames = [] + for m, d in diags: + fname = os.path.join(exp.path, '00010101.{}_{}.nc'.format(m, d)) + with_filenames.append((fname, d)) + + return with_filenames + + +class TestDiagnosticOutput: + + exp = ('ice_ocean_SIS2', 'Baltic') + + def __init__(self): + + self.exp = Experiment(*TestDiagnosticOutput.exp) + + # These are diagnostics which have been registered but have not been + # implemented yet, so no post_data called. This list should to be + # updated as the diags are finished. + unfinished_diags = [('ocean_model', 'uml_restrat'), + ('ocean_model', 'vml_restrat'), + ('ocean_model', 'created_H'), + ('ocean_model', 'seaice_melt'), + ('ocean_model', 'fsitherm'), + ('ocean_model', 'total_seaice_melt'), + ('ocean_model', 'heat_restore'), + ('ocean_model', 'total_heat_restore'), + ('ice_model', 'Cor_ui'), + ('ice_model', 'Cor_vi'), + ('ice_model', 'OBI'), + ('ice_model', 'RDG_OPEN'), + ('ice_model', 'RDG_RATE'), + ('ice_model', 'RDG_VOSH'), + ('ice_model', 'STRAIN_ANGLE'), + ('ice_model', 'SW_DIF'), + ('ice_model', 'SW_DIR'), + ('ice_model', 'TA')] + self.unfinished_diags = diag_filenames(self.exp, unfinished_diags) + self.expected_diags = diag_filenames(self.exp, + get_expected_diags(self.exp)) + self.available_diags = list(set(self.expected_diags) - \ + set(self.unfinished_diags)) + + + @classmethod + def setUpClass(cls): + """ + Called once for this class. Sets up the external state used by all + tests. + """ + + exp = Experiment(*cls.exp) + # Build and run the model to begin to pick up recent code changes. + assert(exp.run()) + + diags = get_expected_diags(exp) + # Delete any existing diag output + for f, _ in diag_filenames(exp, diags): + try: + os.remove(f) + except: + pass + + # Update the diag table and run again, this should dump all available + # diagnostics. + dump_diags(exp, diags) + + def test_diags_coverage(self): + """ + Test that all available diagnostics are created. + """ + + # Check that none of the unfinished diags have been implemented, if so + # the unifinished_diags list above should be updated. + assert(not any([os.path.exists(f) for f, _ in self.unfinished_diags])) + + # Check that diags that should have been written out are. + assert(len(self.available_diags) > 0) + assert(all([os.path.exists(f) for f, _ in self.available_diags])) + + def test_diags_valid(self): + """ + Check that that all output files contain the expected variable, that + the variable contains data, and that that data doesn't contain NaNs. + """ + + for fname, diag in self.available_diags: + with nc.netcdf_file(fname) as f: + assert(diag in f.variables.keys()) + data = f.variables[diag][:].copy() + assert(len(data) > 0) + + if hasattr(data, 'mask'): + assert(not data.mask.all()) + assert(not np.isnan(np.sum(data))) + + + def make_diag_checksums(self): + """ + Return a string of checksums for all diagnostic output files. + + The files need to be in netCDF3 format, netCDF4 is not bit reproducible. + """ + + s = '' + for fname, _ in sorted(self.available_diags): + with open(fname, 'rb') as in_f: + checksum = hashlib.md5(in_f.read()).hexdigest() + s += '{}:{}\n'.format(os.path.basename(fname), checksum) + + return s + + def test_diag_checksums(self): + """ + Test that checksums of diagnostic output are the same as a baseline. + """ + + checksum_file = os.path.join(self.exp.path, 'diag_checksums.txt') + tmp_file = os.path.join(self.exp.path, 'tmp_diag_checksums.txt') + new_checksums = self.make_diag_checksums() + + # Read in the baseline and check against calculated. + with open(checksum_file) as f: + baseline = f.read() + if baseline != new_checksums: + with open(tmp_file, 'w') as f: + f.write(new_checksums) + print('Error: diagnostic checksums do not match.', + file=sys.stderr) + print('Compare {} and {}'.format(checksum_file, tmp_file), + file=sys.stderr) + print('If the difference is expected then' \ + ' update {}'.format(checksum_file), file=sys.stderr) + assert(False)