{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":94265772,"defaultBranch":"dev/ncar","name":"MOM6","ownerLogin":"NCAR","currentUserCanPush":false,"isFork":true,"isEmpty":false,"createdAt":"2017-06-13T23:01:19.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/2007542?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1727372058.0","currentOid":""},"activityList":{"items":[{"before":"a3e2f1485cf3a2e91c82c9d4c7934f12574deebb","after":"00beb269fcb4b9e2ac7b9ff2c9143bb981918dc6","ref":"refs/heads/dev/ncar","pushedAt":"2024-09-29T00:17:39.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"alperaltuntas","name":"Alper Altuntas","path":"/alperaltuntas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12533965?s=80&v=4"},"commit":{"message":"add timestamp to rpointer files (#304)\n\n* add timestamp to rpointer files\r\n\r\n* fix restart file names","shortMessageHtmlLink":"add timestamp to rpointer files (#304)"}},{"before":"dfb37154abff846b5edf5116ef0940d77df6f61d","after":null,"ref":"refs/heads/willy_tracer","pushedAt":"2024-09-26T17:34:18.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"alperaltuntas","name":"Alper Altuntas","path":"/alperaltuntas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12533965?s=80&v=4"}},{"before":"e75d1da90addc49b5db640d45e7183083b139682","after":null,"ref":"refs/heads/dev/ncar-candidate-240319","pushedAt":"2024-09-26T17:34:00.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"alperaltuntas","name":"Alper Altuntas","path":"/alperaltuntas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12533965?s=80&v=4"}},{"before":"dc16329eab86c9afe3e7413c51a43d4925017f70","after":null,"ref":"refs/heads/revert-221-missing_commits_main_25jul","pushedAt":"2024-09-26T17:33:54.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"alperaltuntas","name":"Alper Altuntas","path":"/alperaltuntas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12533965?s=80&v=4"}},{"before":"37411fb6d20387799aa7d24e53728cf025953481","after":"a3e2f1485cf3a2e91c82c9d4c7934f12574deebb","ref":"refs/heads/dev/ncar","pushedAt":"2024-09-24T00:58:27.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"alperaltuntas","name":"Alper Altuntas","path":"/alperaltuntas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12533965?s=80&v=4"},"commit":{"message":"fix memory leak in NUOPC State_getImport method (#303)","shortMessageHtmlLink":"fix memory leak in NUOPC State_getImport method (#303)"}},{"before":"15deea43ecb97a3920b3a06162363f1bac2b8ba5","after":"37411fb6d20387799aa7d24e53728cf025953481","ref":"refs/heads/dev/ncar","pushedAt":"2024-09-09T20:49:17.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"alperaltuntas","name":"Alper Altuntas","path":"/alperaltuntas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12533965?s=80&v=4"},"commit":{"message":"Check if fluxes%salt_flux is associated (#301)\n\nDo not want to compute net_salt_rate or any of the flux_from_salt_flux(:,:)\r\nterms if salt_flux is not being used in the fluxes derived type","shortMessageHtmlLink":"Check if fluxes%salt_flux is associated (#301)"}},{"before":"a077a61f9b1f3fd081713b560af72459fa6ca729","after":"15deea43ecb97a3920b3a06162363f1bac2b8ba5","ref":"refs/heads/dev/ncar","pushedAt":"2024-09-09T05:21:05.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"alperaltuntas","name":"Alper Altuntas","path":"/alperaltuntas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12533965?s=80&v=4"},"commit":{"message":"*Updates in FPMix and Stokes Most (#283)\n\nThis PR revises the formulation of the legacy K-profile parameterization (KPP) ocean boundary layer scheme. It incorporates:\r\n\r\n1. a non-local momentum flux—the Flux-profile parameterization (`FPMIX`); when the local shear is not aligned with the wind, this scheme adds a non-local momentum flux in the direction of the wind; and \r\n2. mixing with and without waves following the Monin-Obukhov Similarity Theory expanded to include Stokes drift (`STOKES_MOST`). This option provides the transition from waveless to ocean surface waves in any stage of growth or decay.\r\n\r\n**Summary:**\r\n\r\n* Uncomment omega w2x entries;\r\n* Simplify the nonlocal increments in `vertFPMix`;\r\n* In the call to `CVmix_kpp_compute_unresolved_shear`, passes the 2D surface buoyancy flux (`surfBuoyFlux2`) instead of the 1D version (`surfBuoyFlux`), which is preferable. **This is answer changing**;\r\n* Remove `uold` and `vold` diagnostics. These were used in an alternative time-stepping scheme that is now obsolete; \r\n* Pass boundary layer depths to the RK2 and add consistency check to make sure `FPMix` is always used with `SPLIT`;\r\n* Add the capability to mix down the Eulerian gradient instead of the Lagrangian;\r\n* Make a minimum set of `FPMix` diagnostics available.\r\n\r\nThis PR relies on https://github.com/CVMix/CVMix-src/pull/94/. \r\n\r\nNew diagnostics:\r\n```\r\n\r\n\"StokesXI\" \r\n ! modules: {ocean_model,ocean_model_d2}\r\n ! long_name: Stokes Similarity Parameter\r\n ! units: nondim\r\n ! cell_methods: xh:mean yh:mean area:mean\r\n\r\n\"Lam2\" \r\n ! modules: {ocean_model,ocean_model_d2}\r\n ! long_name: Ustk0_ustar\r\n ! units: nondim\r\n ! cell_methods: xh:mean yh:mean area:mean\r\n\r\n\"uE_h\" \r\n ! modules: {ocean_model,ocean_model_z,ocean_model_rho2,ocean_model_d2,ocean_model_z_d2,ocean_model_rho2_d2}\r\n ! long_name: x-zonal Eulerian\r\n ! units: m s-1\r\n ! cell_methods: xh:mean yh:mean zl:mean area:mean\r\n ! variants: {uE_h,uE_h_xyave}\r\n\r\n\"vE_h\" \r\n ! modules: {ocean_model,ocean_model_z,ocean_model_rho2,ocean_model_d2,ocean_model_z_d2,ocean_model_rho2_d2}\r\n ! long_name: y-merid Eulerian\r\n ! units: m s-1\r\n ! cell_methods: xh:mean yh:mean zl:mean area:mean\r\n ! variants: {vE_h,vE_h_xyave}\r\n\r\n\"uInc_h\" \r\n ! modules: {ocean_model,ocean_model_z,ocean_model_rho2,ocean_model_d2,ocean_model_z_d2,ocean_model_rho2_d2}\r\n ! long_name: x-zonal Eulerian\r\n ! units: m s-1\r\n ! cell_methods: xh:mean yh:mean zl:mean area:mean\r\n ! variants: {uInc_h,uInc_h_xyave}\r\n\r\n\"vInc_h\" \r\n ! modules: {ocean_model,ocean_model_z,ocean_model_rho2,ocean_model_d2,ocean_model_z_d2,ocean_model_rho2_d2}\r\n ! long_name: x-zonal Eulerian\r\n ! units: m s-1\r\n ! cell_methods: xh:mean yh:mean zl:mean area:mean\r\n ! variants: {vInc_h,vInc_h_xyave}\r\n\r\n\"uStk\" \r\n ! modules: {ocean_model,ocean_model_z,ocean_model_rho2,ocean_model_d2,ocean_model_z_d2,ocean_model_rho2_d2}\r\n ! long_name: x-FP du increment\r\n ! units: m s-1\r\n ! cell_methods: xh:mean yh:mean zl:mean area:mean\r\n ! variants: {uStk,uStk_xyave}\r\n\r\n\"vStk\" \r\n ! modules: {ocean_model,ocean_model_z,ocean_model_rho2,ocean_model_d2,ocean_model_z_d2,ocean_model_rho2_d2}\r\n ! long_name: y-FP dv increment\r\n ! units: m s-1\r\n ! cell_methods: xh:mean yh:mean zl:mean area:mean\r\n ! variants: {vStk,vStk_xyave}\r\n\r\n\"Omega_tau2s\" \r\n ! modules: {ocean_model,ocean_model_z,ocean_model_rho2,ocean_model_d2,ocean_model_z_d2,ocean_model_rho2_d2}\r\n ! long_name: Stress direction from shear\r\n ! units: radians\r\n ! cell_methods: xh:mean yh:mean zi:point area:mean\r\n ! variants: {Omega_tau2s,Omega_tau2s_xyave}\r\n\r\n\"Omega_tau2w\" \r\n ! modules: {ocean_model,ocean_model_z,ocean_model_rho2,ocean_model_d2,ocean_model_z_d2,ocean_model_rho2_d2}\r\n ! long_name: Stress direction from wind\r\n ! units: radians\r\n ! cell_methods: xh:mean yh:mean zi:point area:mean\r\n ! variants: {Omega_tau2w,Omega_tau2w_xyave}\r\n\r\n\"uStk0\" \r\n ! modules: {ocean_model,ocean_model_d2}\r\n ! long_name: Zonal Surface Stokes\r\n ! units: m s-1\r\n ! cell_methods: xh:mean yh:mean area:mean\r\n\r\n\"vStk0\" \r\n ! modules: {ocean_model,ocean_model_d2}\r\n ! long_name: Merid Surface Stokes\r\n ! units: m s-1\r\n ! cell_methods: xh:mean yh:mean area:mean\r\n```","shortMessageHtmlLink":"*Updates in FPMix and Stokes Most (#283)"}},{"before":"b5641afbe21f8fd1c7c8045adf196b88d5664b3e","after":"a077a61f9b1f3fd081713b560af72459fa6ca729","ref":"refs/heads/dev/ncar","pushedAt":"2024-09-06T21:37:26.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"alperaltuntas","name":"Alper Altuntas","path":"/alperaltuntas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12533965?s=80&v=4"},"commit":{"message":"Use longString in MAX_LAYER_THICKNESS (#299)\n\nUpdated MAX_LAYER_THICKNESS to use longString for\r\nhandling extended path+filename.","shortMessageHtmlLink":"Use longString in MAX_LAYER_THICKNESS (#299)"}},{"before":"621107b9999b4af52c1887e99b84e8a1ec441415","after":"b5641afbe21f8fd1c7c8045adf196b88d5664b3e","ref":"refs/heads/dev/ncar","pushedAt":"2024-09-03T16:38:35.000Z","pushType":"pr_merge","commitsCount":3,"pusher":{"login":"mnlevy1981","name":"Michael Levy","path":"/mnlevy1981","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4297161?s=80&v=4"},"commit":{"message":"Merge pull request #298 from klindsay28/marbl_stf_salt_fluxes\n\nMARBL: convert salt_flux to tracer flux and add to STF","shortMessageHtmlLink":"Merge pull request #298 from klindsay28/marbl_stf_salt_fluxes"}},{"before":"5904666efe252907b4c0577dc7318708fa0d9dac","after":"621107b9999b4af52c1887e99b84e8a1ec441415","ref":"refs/heads/dev/ncar","pushedAt":"2024-08-30T15:34:21.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"alperaltuntas","name":"Alper Altuntas","path":"/alperaltuntas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12533965?s=80&v=4"},"commit":{"message":"Modify NUOPC cap to accept separate glc runoff fluxes (#288)\n\n* Modify NUOPC cap to accept separate glc runoff fluxes\r\n* (1/2) Add separate fluxes for glc runoff. (2/2) Add heat content fields for lrunoff_glc and frunoff_glc.\r\n* fix merge bugs and add more glc runoff diags\r\n* enable glc runoff flux only if use_glc_runoff is present\r\n* add ALLOW_GLC_RUNOFF_DIAGNOSTICS param to control whether to allow separate glacier runoff fluxes.","shortMessageHtmlLink":"Modify NUOPC cap to accept separate glc runoff fluxes (#288)"}},{"before":"05cd9b97b25eb80dc9fb913dbe889be330b6b708","after":null,"ref":"refs/heads/lbe","pushedAt":"2024-08-27T01:03:17.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"alperaltuntas","name":"Alper Altuntas","path":"/alperaltuntas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12533965?s=80&v=4"}},{"before":"5578478a7ab9dabe4d8b01f5c42e5e8d2323b658","after":null,"ref":"refs/heads/merge_main2","pushedAt":"2024-08-27T01:03:16.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"alperaltuntas","name":"Alper Altuntas","path":"/alperaltuntas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12533965?s=80&v=4"}},{"before":"f53b5e94bfb73d36a5413610f9d2bebfaa6a6781","after":null,"ref":"refs/heads/glc_rof_flux","pushedAt":"2024-08-27T01:03:10.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"alperaltuntas","name":"Alper Altuntas","path":"/alperaltuntas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12533965?s=80&v=4"}},{"before":null,"after":"f53b5e94bfb73d36a5413610f9d2bebfaa6a6781","ref":"refs/heads/glc_rof_flux","pushedAt":"2024-08-27T01:02:45.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"alperaltuntas","name":"Alper Altuntas","path":"/alperaltuntas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12533965?s=80&v=4"},"commit":{"message":"fix merge bugs and add more glc runoff diags","shortMessageHtmlLink":"fix merge bugs and add more glc runoff diags"}},{"before":"e96a46e406a520fe73879fa4d46aed317a8a881c","after":"5904666efe252907b4c0577dc7318708fa0d9dac","ref":"refs/heads/dev/ncar","pushedAt":"2024-08-09T21:54:12.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"alperaltuntas","name":"Alper Altuntas","path":"/alperaltuntas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12533965?s=80&v=4"},"commit":{"message":"Options to enforce KHTR_MIN and KHTH_MIN in the whole water column and fix naming inconsistency (#294)\n\n* Rename KhTh_use_ebt_struct to KhTr_use_ebt_struct\r\n\r\nThe parameter KHTR_USE_EBT_STRUCT was introduced with an incorrect\r\nvariable name within the local control structure. The variable was\r\nnamed KhTh_use_ebt_struct, indicating thickness diffusivity, instead\r\nof the correct KhTr_use_ebt_struct, which indicates tracer diffusivity.\r\nThis commit rectifies the naming inconsistency.\r\n\r\n* Option to apply KHTR_MIN in the whole water column\r\n\r\nThis commit introduces a new parameter, FULL_DEPTH_KHTR_MIN, which\r\nenforces a user-specified minimum diffusivity (KHTR_MIN) to be\r\napplied throughout the entire water column, instead of only at\r\nthe surface. This option is available only when\r\nKHTR_USE_EBT_STRUCT=True and KHTR_MIN > 0.\r\n\r\n* Option to apply KHTH_MIN in the whole water column\r\n\r\nThis commit introduces a new parameter, FULL_DEPTH_KHTH_MIN, which\r\nenforces a user-specified minimum diffusivity (KHTH_MIN) to be\r\napplied throughout the entire water column instead of only at\r\nthe surface. This option is available only when\r\nKHTH_USE_EBT_STRUCT=True and KHTH_MIN > 0.","shortMessageHtmlLink":"Options to enforce KHTR_MIN and KHTH_MIN in the whole water column an…"}},{"before":"225c0d8290ea94bbe5490e6686fef2b74c7a6b8f","after":"e96a46e406a520fe73879fa4d46aed317a8a881c","ref":"refs/heads/dev/ncar","pushedAt":"2024-08-09T21:16:59.000Z","pushType":"pr_merge","commitsCount":159,"pusher":{"login":"alperaltuntas","name":"Alper Altuntas","path":"/alperaltuntas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12533965?s=80&v=4"},"commit":{"message":"Merge pull request #291 from gustavo-marques/merge_main_073024\n\nMain to NCAR (30 July 2024)","shortMessageHtmlLink":"Merge pull request #291 from gustavo-marques/merge_main_073024"}},{"before":"8b9ba9767e4c28d33800117f6abcaf2e9f4b516d","after":"225c0d8290ea94bbe5490e6686fef2b74c7a6b8f","ref":"refs/heads/dev/ncar","pushedAt":"2024-08-07T19:03:41.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"alperaltuntas","name":"Alper Altuntas","path":"/alperaltuntas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12533965?s=80&v=4"},"commit":{"message":"remove incorrect comma in write statements (#293)","shortMessageHtmlLink":"remove incorrect comma in write statements (#293)"}},{"before":"e413c299d190254967b18922b682f2d797405810","after":"8b9ba9767e4c28d33800117f6abcaf2e9f4b516d","ref":"refs/heads/dev/ncar","pushedAt":"2024-08-02T17:52:29.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"gustavo-marques","name":"Gustavo Marques","path":"/gustavo-marques","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/11339137?s=80&v=4"},"commit":{"message":"Add MARBL to MOM6 (#157)\n\n* Update MOM6_DA_hooks submodule\r\n\r\n* Create a placeholder MARBL tracer module\r\n\r\nCopied dye_example.F90, renamed all public routines. This module does not\r\nactually tie into MARBL at this time.\r\n\r\n* Add flag to turn on MARBL tracers\r\n\r\nAdding USE_MARBL_TRACERS = True to override file turns on MARBL tracers. At\r\nthis point, we call marbl_instances%init and register all 32 tracers but don't\r\ndo anything else (so they are initialized to 0 and there is no source term for\r\nadvecting them yet)\r\n\r\n* Add MARBL as submodule\r\n\r\nCESM will use MARBL via manage_externals, but other systems may need to bring\r\nit in via submodules\r\n\r\n* Add doxygen documentation to marbl_instances\r\n\r\n* Update submodules to use https not ssh\r\n\r\n* Softlink to MARBL source code\r\n\r\nI think this is just needed for TravisCI, since it doesn't know to look for\r\ncode in pkg/\r\n\r\n* Remove diag_to_Z_CS\r\n\r\nThis looks like it was removed from everywhere else when I merged in the latest\r\ndev/ncar branch\r\n\r\n* Move MARBL%init out of register_MARBL_tracers\r\n\r\nCreated new configure_MARBL_tracers() subroutine to be called from\r\ncall_tracer_register() [between get_param() calls and register_* calls]\r\n\r\n* Read marbl_in from run directory\r\n\r\nAlso uses put_settings() to update the MARBL settings before initialization\r\n(tested by setting ciso_on = .true. via user_nl_marbl)\r\n\r\n* Add ability to write MARBL log to stdout\r\n\r\nmarbl_instance%StatusLog is written after the call to init and in\r\nmarbl_tracers_end (which is now called from tracer_flow_control_end())\r\n\r\n* Add doxygen documentation for print_marbl_log()\r\n\r\nFailed a TravisCI test due to missing documentation\r\n\r\n* Call MARBL's shutdown() routine\r\n\r\nAlso added a placeholder for parsing the MARBL timing information\r\n\r\n* Erase MARBL log after printing to stdout\r\n\r\nEvery call to print_marbl_log() is followed by a call to %erase()\r\n\r\n* Read in MARBL tracers IC file\r\n\r\nInstead of passively advecting 0s, the MARBL_tracers module now correctly\r\ninitializes each tracer (but doesn't compute any source-sink terms yet)\r\n\r\n* Update MARBL to latest development commit\r\n\r\nWent from 0a806cf to 479f914\r\n\r\n* Change git submodule commit for MOM6_DA_hooks\r\n\r\n* Make configure_MARBL_tracers() private\r\n\r\ncall the function from register_MARBL_tracers() rather than\r\nMOM_tracer_flow_control.\r\n\r\n* Removed MARBL as submodule\r\n\r\nMARBL will be brought in to CESM via manage_externals, and we will use\r\n-DUSE_MARBL_TRACERS to build with access to MARBL.\r\n\r\n* Add pkg/MARBL to .gitignore\r\n\r\nNow that it comes in from manage_externals, we want to ignore it\r\n\r\n* Introduce _USE_MARBL_TRACERS macro\r\n\r\nCan build MOM without pkg/MARBL, but if USE_MARBL_TRACERS is True in the param\r\nfile and the build does not include -D_USE_MARBL_TRACERS then the model aborts.\r\n\r\n* Register MARBL diagnostics\r\n\r\nWill allow MARBL diagnostics to be added to history files.\r\n\r\n* call MARBL_tracers_surface_state()\r\n\r\nAnd, from that routine, call marbl_instances%surface_flux_compute().\r\n\r\nNote that forcings, surface tracers, and surface fluxes are all zeroed out in\r\nthis commit. I'd like to get diagnostics posted in the next commit, and then I\r\ncan start updating tracer surface values, saving saved state, and looking into\r\nhow to read forcing fields.\r\n\r\n* Move call to surface_flux_compute()\r\n\r\nLooks like column_physics() is the better place for this call\r\n\r\n* add surface flux diags to history output\r\n\r\ncalls post_data (note that created a temporary data structure to hold both the\r\ndiagnostic id and a buffer to fill column-by-column as MARBL runs)\r\n\r\n* Initialize surface flux forcings better\r\n\r\nDuring configuration, set indices for each of the surface flux forcings so that\r\neach forcing can be set to a different value in column_physics(); all are set\r\nto zero except u10_sqr (2.5e5), atmpress (1), and xco2 / xco2_alt_co2 (284.7)\r\n\r\n* Move module memory into CS type\r\n\r\n* Provide T & S for surface forcing\r\n\r\nAlso, cleaned out remnants of old dye_tracer code\r\n\r\n* Add saved state for surface fluxes\r\n\r\n* Get ice fraction from the coupler\r\n\r\n* Get u10_sqr from coupler\r\n\r\nAlso updated how a few other forcing fields are passed\r\n\r\n* Clean up old comment\r\n\r\n* Better unit conversion\r\n\r\n* Module parameters for unit conversion\r\n\r\nMARBL still wants things in cgs, so the conversion factors are private in the\r\nMARBL_tracers module\r\n\r\n* Easy clean-up based on feedback from Andrew\r\n\r\n* Add missing variable declaration\r\n\r\n* Add saved state to restart file\r\n\r\n* Add surface flux to tracer_vertdiff call\r\n\r\n* If tracers mandatory in restart, so is saved state\r\n\r\nAlso, playing around with some debugging diagnostic output because it appears\r\nthat register_restart() isn't actually updating the field values (saved state\r\nis initialized to 0 even when available in saved state)\r\n\r\n* Move call to setup_saved_state()\r\n\r\nIt needs to be in the tracer_registry stage, not the initialize_tracers stage\r\nso that fields will be updated from the restart file.\r\n\r\n* Get dust and iron fluxes from coupler\r\n\r\ncomputes iron flux from dust and black carbon fluxes, adding some new variables\r\nto parameter file\r\n\r\n* Add option to read NDEP from a file\r\n\r\nAlso, only call surface_flux_compute() from ocean cells\r\n\r\n* Update NDEP scale factor, work to interior_tend\r\n\r\n1. Stale change that I forgot to commit earlier this month about how we apply\r\nscale factor to NDEP forcing\r\n\r\n2. Starting to put in calls that will be necessary prior to calling\r\ninterior_tendency_compute() [copying saved state, getting forcing fields,\r\nsetting up domain, etc]\r\n\r\n* More support for interior_tendency_compute() call\r\n\r\nStill don't actually make the call, but I register interior tendency\r\ndiagnostics and hopefully have all the data copies set up properly.\r\n\r\n* Update MARBL domain per-column\r\n\r\nIn loop that will eventually call interior_tendency_compute(), update\r\ndomain%zw, domain%delta_z, and domain%zt to get depths in m (and then convert\r\nto cm when copying to MARBL structure)\r\n\r\n* Add indices for interior tendency forcings\r\n\r\nNote that this commit does not support tracer restoring; that is disabled in a\r\ntemporary block of code after reading marbl_in.\r\n\r\n* Copy t & s -> interior_tendency_forcing\r\n\r\n* Call marbl_interior_tendency_compute()\r\n\r\nThere's a kludgy work-around where we set KMT to be the bottom-most level that\r\nis more than 1 cm thick (to avoid sediment from accumulating in vanishing\r\nlayers) and we still don't read iron sediment flux\r\n\r\n* Add parameters to read in fe sed / vent fluxes\r\n\r\nRead in (and do unit conversion) for fesedflux and feventflux as part of\r\ninitialization. Still need to figure out the vertical remap inside the time\r\nstep loop.\r\n\r\n* Get FESEDFLUX into MARBL\r\n\r\nUse reintegrate_column() to map fesedflux from WOA z-grid to whatever vertical\r\nlevels MOM6 is using at the current time step. This is a very kludgy commit!\r\n\r\n1. Loop through all levels (from bottom to top) and move any subsurface\r\n sediment flux up a level. The way the loop is ordered results in all\r\n subsurface flux ending up in the bottom-most layer. [On the source grid, so\r\n vanishing layers are not a concern.]\r\n1. I created a 3D array to store the WOA vertical thicknesses, except I\r\n modified the thickness of the cell containing the bottom of the column\r\n (G%bathyT) to only be distance from the cell interface to bathyT, and the\r\n thickness of all cells below it are 0. This is the kludgy part of the\r\n commit.\r\n2. apply a dilation factor of sum(thickness)/bathyT to the thicknesses of the\r\n source grid, so we are effectively always mapping between two columns of the\r\n same thickness.\r\n\r\n* Had a few issues in last commit\r\n\r\n1. read_z_edges returns depths that are 0 at surface and positive UP; algorithm\r\n I was using assumed positive DOWN\r\n2. the logic in determining dz was hard to follow, so I rewrote the if\r\n statements to make it clearer\r\n3. use dz(:) rather than marbl_instance%domain%delta_z to keep MOM units\r\n\r\n* Use time_interp_external() not MOM_read_data()\r\n\r\nThis is just for reading nitrogen deposition, and it relies on FMS to handle\r\ntime interpolation for climatological forcing.\r\n\r\n* Add surface_flux and tendency to diagnostic output\r\n\r\nFor now I use the POP naming convention of STF_{tracer} and J_{tracer}\r\n\r\n* Fix bug in units of z-coordinate vars\r\n\r\nWas trying to convert MOM's variables in units of m to MARBL's desired units of\r\ncm by multiplying by 0.01 instead of 100\r\n\r\n* Remove _USE_MARBL_TRACERS CPP macro\r\n\r\nCopying the changes to generic_tracers, there are now stubs for the MARBL API\r\nin config_src/external/MARBL so if pkg/MARBL is not available users can still\r\nbuild MOM. Note that these stubs will trigger cause MOM to abort if they are\r\nrun with USE_MARBL_TRACERS=True in the parameters file.\r\n\r\n* Update ndep file\r\n\r\nUse a file with _FillValue=-1e34 rather than a file with NaNs\r\n\r\n* Ignore levels below kmt from marbl_instance object\r\n\r\nSince we are ignoring vanishingly thin layers at the bottom of the column when\r\npassing data into MARBL, we also need to ignore what MARBL returns from those\r\nlevels. Now all tendency and diagnostic values for k>kmt are replaced with the\r\nvalue from the kmt level. I also replace saved state below kmt with 0s though I\r\nsuppose an argument could be made for using the kmt value there as well\r\n\r\n* Refactor where MARBL forcings are defined\r\n\r\nIntroduced marbl_forcing_type, and fluxes%MARBL_forcings of that type. Also\r\nintroduced marbl_forcing_CS to handle all the parameter settings. Both of these\r\nchanges are aimed at reducing the footprint of the changes in\r\nconfig_src/mct_driver needed to run MARBL; that will make it easier to bring\r\nthe same changes to config_src/nuopc_driver.\r\n\r\nI think the last big change will be to create marbl_ice_ocean_boundary_type and\r\na function to make it easy to copy data from the new type into\r\nmarbl_forcing_type.\r\n\r\n* Finish refactoring mct driver\r\n\r\nAll MARBL-related forcing code is ready to be shared with nuopc cap\r\n\r\n* Start updating forcings in nuopc cap\r\n\r\nPassing ice_frac, u10_sqr, and seaice_dust_flux; need another round of updates\r\nto handle the atm_dust_flux (split coarse / fine plus wet / dry) and the black\r\ncarbon fluxes (split between hydrophilic and hydrophobic)\r\n\r\n* Add several new diagnostics for tracers\r\n\r\nBesides cleaning up some formatting, this commit adds {tracer}_zint,\r\n{tracer}_zint_100m, and {tracer}_SURF diagnostics. For MARBL tracers, it also\r\nadds Jint_{tracer} and Jint_100m_{tracer} (where J is the source / sink term\r\nreturned by MARBL)\r\n\r\nAlso renames marbl_forcing_type_main.F90 -> marbl_forcing_type_mod.F90 since I\r\nended up not needing _main / _aux designations.\r\n\r\n* Register and post FLUX_CPL diagnostics\r\n\r\nCoupler recieves five fluxes used to compute dust_flux and iron_flux for MARBL\r\n(atm fine dust, atm coarse dust, atm black carbon, sea ice dust, and sea ice\r\nblack carbon). These five fields are now available in history files.\r\n\r\n* First pass at adding support for river fluxes\r\n\r\n* Fix to read_attribute_str()\r\n\r\nIf present(found), then return found=.false. instead of aborting if the\r\nattribute isn't defined (needed for DEPTH:edges from my initial condition file)\r\n\r\n* Code clean-up:\r\n\r\nContinued lines that previously extended beyond 132 characters\r\n\r\n* Update doxygen documentation\r\n\r\n* One more round of formatting clean-up\r\n\r\ngfortran imposes line limit of 132 characters, but a script in .testing/ checks\r\nfor lines longer than 120...\r\n\r\n* Proper units for _zint and _zint_100m\r\n\r\nThese diagnostics need to be computed with a length scale in m, since we are\r\nintegrating over the column, but I had defined the diagnostic with the H_to_m\r\nconversion. Also, I need to use H_to_m instead of H_to_z (or H_to_RZ)\r\n\r\n* More river flux clean-up\r\n\r\nIntroduced Time_riv_flux to force reading the file at the first times step.\r\nAlso switched to a newer version of the file, which is already in mmol / m^2 /\r\ns (so no need to convert from nmol / cm^2 / s).\r\n\r\n* Add more fluxes to nuopc cap\r\n\r\nFor additive fluxes, e.g. atm_bc_flux = bcphidry + bcphodry, this commit\r\nintroduces a temporary array named marbl_work and computes the flux in multiple\r\nsteps:\r\n\r\n1. atm_bc_flux = 0\r\n2. import bcphidry -> marbl_work\r\n3. atm_bc_flux += marbl_work\r\n4. import bcphodry -> marbl_work\r\n5. atm_bc_flux += marbl_work\r\n\r\nas it turns out, state_getimport() is cummulative so this could be accomplished\r\nwith\r\n\r\n1. atm_bc_flux = 0\r\n2. import bcphidry -> atm_bc_flux\r\n3. import bcphodry -> atm_bc_flux\r\n\r\nThat's coming in the next commit\r\n\r\n* Remove marbl_work from mom_cap_methods\r\n\r\nSince state_getimport() is cummulative, we call it repeated for the forcing\r\nfields that are the sum of multiple coupler fields\r\n\r\n* Refactor interacting with time_interp_external\r\n\r\nIntroduce tracer_forcing_utils_mod to handle common interactions with\r\ntime_interp_external (tracking offset if model / data time axes are different,\r\nsetting an earliest / latest time to read from the file, etc) and then modify\r\nmarbl_forcing_type_mod to use this new code for the river fluxes.\r\n\r\n* Fix formatting to make doxygen happy\r\n\r\nA few lines exceeded the character limit imposed by the \"Doxygen and Style\"\r\ncontinuous integration test\r\n\r\n* Pass bot_flux_to_tend to MARBL\r\n\r\ncurrently still using the KMT kludge, so this passes 1/dz in the bottom-most\r\nnon-vanishing layer. Next step will be to remove kmt from the driver and use\r\ntracer_vertdiff to compute unit flux.\r\n\r\n* Use bot_flux_to_tend from tracer_vertdiff\r\n\r\nThis commit still uses the KMT kludge, but now computes bot_flux_to_tend(:) by\r\napplying a unit bottom flux to a column of 0s in tracer_vertdiff. This commit\r\nincludes a check to ensure that sum(dz(:) * bot_flux_to_tend(:)) == 1, though I\r\nam not sure if we want that in the code base long-term.\r\n\r\nThis commit also fixes the units of the sfc_flux argument passed to\r\ntracer_vertdiff() -- it should be Rho0 * STF instead of just STF. This requires\r\nan update to MOM_tracer_diabatic (merged to dev/NCAR in 276954f but not yet on\r\nthis branch); for testing, I copied the updated version of that file but am not\r\ncommitting it to make the future merge easier.\r\n\r\nLast note: I believe the btm_flux argument to tracer_vertdiff is actually\r\npositive upward, although the comments in MOM_tracer_diabatic.F90 claim it is\r\nnegative upward. I'll investigate a little more and open an issue ticket with\r\nGFDL if that turns out to be the case, but in this commit I'm multiplying\r\nbot_flux_to_tend(:) by -m_per_cm instead of just m_per_cm and I suspect it's\r\ndue to the sign of btm_flux\r\n\r\n* Remove KMT kludge\r\n\r\nNote that this required increasing max_bracket_grow_it (I used 5 instead of 3,\r\nbut perhaps 4 would have been sufficient?)\r\n\r\n* Add bot_flux_to_tend to diagnostic output\r\n\r\nAlso moved the conservation check (sum(dz * bot_flux_to_tend) == 1) into MARBL\r\n\r\n* Avoid allocating MARBL memory unless needed\r\n\r\nFunctions in marbl_forcing_type_mod.F90 return immediately unless\r\nUSE_MARBL_TRACERS=True. I also cleaned up the way that module knows what\r\ndirectory contains netCDF files to match how it is set up in MARBL_tracers.F90\r\n(and make it easier to switch to DIN_LOC_ROOT when the time comes).\r\n\r\n* Add bot_flux_to_tend to dummy interface\r\n\r\nBuilding without pkg/MARBL was failing because the dummy interface was out of\r\ndate\r\n\r\n* Split long line that doxygen flagged\r\n\r\n* Add BOT_FLUX_MIX_THICKNESS parameter\r\n\r\nRather than relying on tracer_vertdiff, compute bot_flux_to_tend such that, for\r\na parameter BOT_FLUX_MIX_THICKNESS, bot_flux_to_tend = 1/BOT_FLUX_MIX_THICKNESS\r\nfor cells entirely contained that close to the ocean floor and then a weighted\r\nvalue for the cell that is partially within the bottom boundary layer (0\r\nelsewhere).\r\n\r\nRelying on tracer_vertdiff led to convergence issues in the CO2 solver which\r\nhave not cropped up under this implementation\r\n\r\n* Reformulate bot_flux_to_tend algorithm\r\n\r\nThe previous algorithm had a (bathyT - zw(k)) term in it, and if these values\r\nare close together then we can lose precision in the resulting difference.\r\nHowever, this term can also be represented as the cummulative sum of dz(:) from\r\nthe bottom to layer k and that formulation is much more accurate\r\n\r\n* Set default thickness for bot_flux_to_tend to 1m\r\n\r\n* Set tracer_inds outside of (.not. restart) block\r\n\r\nThis is the first pass at a code cleanup; these indices should be set in\r\nregister_MARBL_tracers(), not initialize_MARBL_tracers(). The next commit will\r\nfurther refactor this code.\r\n\r\n* Clean up how / where tracer_inds are set\r\n\r\nThere was a bug in the code where CS%tracer_inds would not be set during a\r\nrestart. Fixing the bug included a little more clean-up:\r\n\r\n1. tracer_inds are set in a new routine rather than inline in\r\n initialize_MARBL_tracers()\r\n2. This new routine is called from register_MARBL_tracers()\r\n3. It should be possible to turn on BGC tracers in a branch / restart now\r\n\r\n* Clean up some comments\r\n\r\n* Check ref_depth for 2D diagnostics from MARBL\r\n\r\nIf ref_depth is below the bottom of the column, MOM should use _FillValue\r\nrather than whatever value is reported from MARBL\r\n\r\n* Initialize negative tracer concentrations to 0\r\n\r\nIf the model is not initializing from a restart file, then we treat all\r\nnegative tracer ICs as 0.\r\n\r\nI also swapped a couple of i- and j- loops to run through contiguous memory\r\n\r\n* Fix bugs in iron_flux computation\r\n\r\nTwo major issues:\r\n\r\n1. iron_flux was missing a few terms\r\n2. I was keeping the units as kg / m^2 / s when MARBL wanted nmol / cm^2 / s\r\n\r\nI also switched the default riv_nut file to one interpolated from JRA\r\n\r\n* Need marbl_constants_mod.F90 for non-MARBL builds\r\n\r\nI added a reference to molw_Fe in marbl_forcing.F90, so I needed to update the\r\ndummy driver in config_src/externals/MARBL to recognize that use statement\r\n\r\n* Update doxygen documentation\r\n\r\nForgot to document molw_Fe in the dummy marbl_constants module\r\n\r\n* Clean up how we read FESEDFLUX files\r\n\r\n1. Default files now have DEPTH_EDGES variable so dz can be length ke\r\n2. Improve logic for moving flux from below the ocean floor to bottom column\r\n3. use v_extensive=.true. when registering FESEDFLUX diagnostic\r\n\r\nAlso cleaned up how conversion factors are applied to dust / iron flux\r\n\r\n* Don't modify values read from restart!\r\n\r\nI had the logic to set negative tracer values to 0 in the wrong place; now it\r\nonly applies to tracers read from initial conditions instead of also applying\r\nto tracers read from restart\r\n\r\n* Fix bug in accumulating 2D fields at ref_depth\r\n\r\nUse post_data(mask) instead of accumulating missing_val - this avoids\r\ninadvertently introducing round-off error when taking the average of an array\r\nfull of missing_val (which would then not be missing_val any more)\r\n\r\n* Only allocate memory we plan to use\r\n\r\nDon't need to allocate memory in the diagnostic type for diagnostics that MOM6\r\nis not including in any history files\r\n\r\n* Include (i,j) indices in MARBL errors\r\n\r\nWhen a specific column in MARBL returns an error, MARBL will now print both the\r\nglobal lat,lon (which it printed previously) and the global (i,j) indices\r\n\r\n* NUOPC cap improvements\r\n\r\nFields that were posted from the cap (MARBL forcing fields) were not appearing\r\ncorrectly in the netCDF output because we needed to enable averaging\r\n\r\n* Bugfix in NUOPC cap\r\n\r\nI was using (i,j) indices instead of (i-i0,j-j0) when pulling data from\r\nMARBL_IOB\r\n\r\n* Fix formatting\r\n\r\nA couple of lines failed the line-length check in the CI\r\n\r\n* Add KPP Nonlocal Terms to MARBL tracers\r\n\r\nThis commit mimics the changes made to MOM_CFC_cap.F90 and\r\npseudo_salt_tracer.F90 to apply KPP Nonlocal terms to that MARBL tracers\r\n\r\n* Convert dust_flux to cgs before sending to MARBL\r\n\r\n* Move riv_flux to applyTracerBoundaryFluxesInOut\r\n\r\nRather than adding river fluxes to CS%STF, created new array CS%RIV_FLUX that\r\nis used as in_flux_optional argument to applying boundary fluxes\r\n\r\nAlso added a missing doxygen comment\r\n\r\n* Major refactor of MARBL forcing fields\r\n\r\nRemoved marbl_forcing_type and marbl_ice_ocean_boundary_type, keeping the flat\r\nstructure of forcing and ice_ocean_boundary_type, respectively. This greatly\r\nreduces the amount of code in marbl_forcing_type_mod.F90 (which now needs a new\r\nname), and adds a little more overhead to the driver layer but with the benefit\r\nof reusing pointers for things like ice_fraction and u10_sqr which are needed\r\nin the CFC cap as well.\r\n\r\nI also started the process of adding multiple ice category support, but there's\r\nmore to do for that feature.\r\n\r\n* REVERT MCT CAP\r\n\r\nFrom this point forward, MCT will not support the MARBL driver. CESM users must\r\nuse NUOPC cap for runs with MARBL\r\n\r\n* Rename marbl_forcing_type_mod.F90\r\n\r\nThere is no longer a forcing type, but this module does handle some forcing\r\nfields for MARBL so marbl_forcing_mod.F90 is a more appropriate name.\r\n\r\n* NUOPC cap set to receive all ice cat fields\r\n\r\nIf CPL_I2O_PER_CAT=TRUE, then the nuopc cap allocates memory in\r\nice_ocean_boundary_type to store the five fields that POP uses with MCOG:\r\n\r\n* sf_afrac\r\n* sf_afracr\r\n* Foxx_swnet_afracr\r\n* Fioi_swpen_ifrac_n\r\n* Si_ifrac_n\r\n\r\nNext step will be to work from the forcing_type side, and make sure those\r\nfields get copied into the appropriate arrays if the user requests running with\r\nmultiple ice categories.\r\n\r\n* More per-category forcing updates\r\n\r\n1. ice_ncat is stored as-is, rather than storing ice_ncat+1\r\n2. Memory is now allocated on the forcing type if USE_ICE_CATEGORIES is true\r\n (Default is false, want default to be true when running with MARBL)\r\n\r\n* More ice category cleanup\r\n\r\nMARBL_tracers will get ICE_NCAT from parameters file (still need to set default\r\ncorrectly!) instead of passing it down the calling tree.\r\n\r\n* More ice category bug fixes\r\n\r\n1. several off-by-one errors due to using ice_ncat+1 instead of ice_ncat\r\n2. needed i0 and j0 when copying from IOB to fluxes\r\n3. NUOPC is case sensitive when getting field, but doesn't abort when case is\r\nwrong\r\n\r\nAlso added the fields passed to MARBL as MOM6 diagnostics (FRACR_CAT_N and\r\nQSW_CAT_N, for N from 1 to ice_ncat+1) -- should probably switch range so it is\r\n0 to ice_ncat, with category 0 representing open ocean\r\n\r\n* don't post diagnostics if not requested\r\n\r\nwhen the _CAT_ diags were not in the diag_table, the run was aborting. Adding a\r\ncheck to make sure the id > 0 avoids that.\r\n\r\n* Remove kludgy threshold\r\n\r\nBefore tracking down issue with i0 and j0, I had set an artificial threshold on\r\nfracr_cat, where I was treating values below 1e-5 as 0. This commit undoes\r\nthat, and only treats negative values as 0 (leaving small positive values\r\nalone)\r\n\r\n* Rudimentary MARBL support in solo_driver\r\n\r\nAll the MARBL-specific forcings the NUOPC cap gets from the mediator are set to\r\n0:\r\n\r\n* ice_fraction\r\n* u10_sqr\r\n* dust_flux\r\n* iron_flux\r\n\r\nWill need to work out details on how else to populate these fields\r\n(ice_fraction is set to 0 when allocated, so that's probably okay)\r\n\r\n* Change dust / iron parameter defaults\r\n\r\nFortran defaults are now what we want for C / G compsets, and MOM_interface\r\nwill override them for B compsets\r\n\r\n* atm_press = 1 atm when p_surf_full is unavailable\r\n\r\nA kludge to set surface pressure to 1 atm when using solo_driver (which\r\nallocates memory for p_surf but not p_surf_full and then does not set p_surf)\r\n\r\n* Update IC file and units of RIV_FLUXES\r\n\r\nThe old MARBL initial condition file had some issues at depth when the MOM\r\ntopography was deeper than POP; these cells were all set to 0 because the\r\nrestart file we mapped tracers from does not include a land mask. Fix was to\r\nmask out the POP data prior to mapping it, then the lateral fill was applied\r\ncorrectly.\r\n\r\nAdditionally, Keith noticed a bug in our call to\r\napplyTracerBoundaryFluxesInOut() -- the in_flux_optional argument should be in\r\nunits of conc m, but we were passing CS%RIV_FLUXES with units of conc m/s.\r\nSince the in_flux should be the time-integrated value, we set\r\n\r\nCS%RIV_FLUXES = CS%RIV_FLUXES * dt\r\n\r\nprior to passing it to applyTracerBoundaryFluxesInOut()\r\n\r\nThe comments in the declaration of RIV_FLUXES was also updated to account for\r\nthe unit change.\r\n\r\n* update fesedflux files\r\n\r\nSomewhere in transition from testing in cesm2_3_alpha05b to testing in\r\ncesm2_3_beta08, I forgot to commit a change to update the iron sediment flux\r\nforcing files. The previous files were generated in a buggy manner, and these\r\nnew files provide better forcing.\r\n\r\n* Use data_override for some MARBL forcing\r\n\r\nice fraction, u10_sqr, and the various dust / black carbon fluxes that MOM and\r\nPOP receive from the CESM coupler in the NUOPC cap can now be read in from\r\nnetCDF file using data_override in solo_driver/\r\n\r\nalso, added a flag (READ_RIV_FLUXES, default: .true.) to let us turn off\r\nlooking for river flux files.\r\n\r\n* Support CHL_FROM_FILE=FALSE when using with MARBL\r\n\r\nIf CHL_FROM_FILE is FALSE, then MARBL_tracers will request total_Chl from MARBL\r\nand MOM_tracer_flow_control::get_chl_from_model() can retrieve it.\r\n\r\n* Expand dummy cap for MARBL\r\n\r\nThe previous commit used more of the MARBL interface, so I expanded the dummy\r\ncap to allow MOM6 to build without the full library (as before, setting\r\nUSE_MARBL_TRACERS=TRUE but building the dummy cap will result in a FATAL error)\r\n\r\n* Refactor to use MARBL's get_output_for_GCM()\r\n\r\nRemoved code that relied on interior_tendency_output since that no longer\r\nexists in MARBL\r\n\r\n* API for MARBL's get_output_for_GCM() changed\r\n\r\nUpdated MARBL_tracers_get_output_for_GCM() to account for fact that MARBL\r\ndoesn't want tracers passed in as an argument, it just wants to use\r\nself%tracers(). Also did some minor clean-up to\r\nMARBL_tracers_get_output_for_GCM():\r\n\r\n1. pass in G and GV so that we can index arrays properly / loop through i,j\r\n (and skip land cells)\r\n2. the do j= and do i= loops are on the same line\r\n3. abort if the MARBL function returns an error\r\n\r\nLastly, cleaned up the interface to hopefully pass CI again (needed to create\r\nmarbl_settings_mod and add dummy get_output_for_GCM() function to interface)\r\n\r\n* Use MOM_initialize_tracer_from_Z not tracer_Z_init\r\n\r\nI added an optional argument ongrid to MOM_initialize_tracer_from_Z() which\r\ngets passed through to horiz_interp_and_extrap_tracer()\r\n\r\n* More updates for reading IC file\r\n\r\nSwitched CESM default to use IC file written on 1x1 grid (with WOA depths)\r\ninstead of using a file on the tx0.66v1 grid. Also changed some of the defaults\r\nset in get_param() calls in MOM_initialize_tracer_from_Z() to match the\r\ndefaults elsewhere in the code.\r\n\r\n* Update dummy interface for get_output_from_GCM()\r\n\r\nIn MARBL, this changed from a function to a subroutine but I forgot to make the\r\ncorresponding change in the dummy MARBL cap\r\n\r\n* Get NDEP from NUOPC instead of reading from file\r\n\r\n* Update solo_driver to handle ndep\r\n\r\nLast commit broke solo_driver because the API to\r\nconvert_marbl_IOB_to_forcings() changed. Also, cleaned up some comments in\r\nMARBL_tracers.F90 and the NUOPC cap.\r\n\r\n* Remove NDEP_SCALE_FACTOR from parameters file\r\n\r\nI think this was a parameter because I was mimicking shr_stream (which includes\r\na scale factor as part of the namelist options), but it makes far more sense to\r\ncombine it with the existing ndep_conversion variable.\r\n\r\nGiven the way the parentheses were used, this should be bit-for-bit.\r\n\r\n* Add MARBL_TRACERS_INIT_VERTICAL_REMAP_ONLY option\r\n\r\nIf the initial condition file for the MARBL tracers is already on the MOM grid,\r\nthis will skip the horizontal interpolation step. This option is not necessary\r\nfor CESM-MOM6 (we want to interpolate ICs from the WOA grid), but is useful for\r\nMOM6-examples, where we are interpolating to a single column grid offline.\r\n\r\n* Update MARBL tracer IC file\r\n\r\nThis one has been updated to set negative values -> 0 and then was run through\r\nthe autotroph consistency check (if any of Chl, C, P, Fe, or Si are 0 they\r\nshould all be 0)\r\n\r\n* Move atm_co2 and atm_alt_co2 to MOM_forcing_type\r\n\r\nThis commit also moves ATM_CO2_CONST and ATM_ALT_CO2_CONST to marbl_forcing_mod\r\nand uses those values for the new forcing fields as preparation for possibly\r\ngetting Sa_co2diag and Sa_co2prog from the mediator.\r\n\r\nUnrelated, I changed a handful of instances of \"else if\" to \"elseif\" to match\r\nwhat is done elsewhere in the code (these are all elseif statements I\r\nintroduced on this branch earlier in development)\r\n\r\n* NUOPC cap can receive CO2 if provided\r\n\r\nMOM6 advertises for it, but if it is not available then it gets removed from\r\nimportState and memory is deallocated so there is no attempt to get it (i.e.\r\nthere is no error condition if the atmosphere does not provide it)\r\n\r\n* Support using coupler-provided atm_co2\r\n\r\nAdded ATM_CO2_OPT and ATM_ALT_CO2_OPT, which default to \"const\" but also\r\nsupport \"prognostic\" or \"diagnostic\" if the coupler is providing those fields.\r\n\r\nAlso renamed marbl_forcing_mod -> MARBL_forcing_mod to be consistent with\r\ncapitalization in MARBL_tracers.F90\r\n\r\n* Replace logical flags with integer\r\n\r\nFor ATM_CO2_OPT and ATM_ALT_CO2_OPT, we do a string -> integer conversion\r\ninstead of trying to track all possible options via logicals. This introduces\r\nsome new module-level parameters in MARBL_forcing_mod.F90 (and I noticed a\r\nformatting issue in MARBL_tracers.F90 when checking how other modules handle\r\nparameters)\r\n\r\n* NUOPC cap can pass CO2_FLUX to atmosphere\r\n\r\nAdded Faoo_fco2_ocn to the exportState and modified sfc_state to be able to\r\npass ocn_co2 to ocean_public, which then gets exported in\r\nmom_cap_methods:mom_export()\r\n\r\nIn src/tracer/, I needed to set up MARBL's surface_flux_output and use it to\r\nrequest co2_flux. MOM_tracer_flow_control now calls\r\nMARBL_tracers_surface_state(), which copies the flux from MARBL's control\r\nstructure to sfc_state.\r\n\r\nI also did a bit of code cleanup, deallocating more arrays in the MARBL control\r\nstructure prior to deallocating CS itself.\r\n\r\n* Only copy co2 to srf_state if memory was allocated\r\n\r\nsolo_driver doesn't allocate memory in sfc_state to pass CO2 flux back to the\r\natmosphere and was seg-faulting without the if (allocated) check\r\n\r\n* Code clean-up following review\r\n\r\n1. sfc_state%sfc_co2 -> sfc_state%fco2\r\n2. re-order some if states and do loops (want if statements outside do loops as\r\n much as possible)\r\n\r\n* Remove spaces in \"end if\" and \"end do\"\r\n\r\nThe MOM6 style guide explicitly states we should use endif and enddo with no\r\nspace\r\n\r\n* More code clean-up\r\n\r\n1. solo_driver has callTree_leave() call in MARBL forcing override routine\r\n2. allocate() statements use the source= argument as much as possible\r\n3. cleaned up spacing in if statements [a mix of \"if(condition) then\" and \"if\r\n (condition)then\"\r\n4. removed unnecessary use statement in mom_cap_methods, and cleaned up vague\r\n comment\r\n5. renamed ocean_public%ocn_co2 -> ocean_public%fco2_ocn\r\n\r\n* Clean up NUOPC cap\r\n\r\nMove more calls into if (cesm_coupled) blocks because they require CESM\r\nforcings from CMEPS\r\n\r\n* Updates to use support_mks branch of MARBL\r\n\r\nThis branch of MARBL requires the unit_system argument in a few places;\r\nsticking with cgs introduces a few round-off level differences due to\r\nrestructing some internal MARBL computations.\r\n\r\n* Update dummy driver to add unit_system args\r\n\r\nBecause the API to MARBL changed, I needed to update some code in\r\nconfig_src/externals/MARBL\r\n\r\n* Use MARBL in mks, not cgs\r\n\r\nRequires the support_mks branch of MARBL as well as generating marbl_in with\r\n--unit_system mks\r\n\r\n* Update default for iron forcing files\r\n\r\nMARBL_FESEDFLUX_FILE and MARBL_FEVENTFLUX_FILE were updated to remove the\r\nincorrect 1D horizontal dimensions (and rename the dimensions nx and ny so that\r\ncategorize_axes could still figure out how to read the files)\r\n\r\n* Updated pkg/MARBL, which changed API\r\n\r\nA couple arguments changed in functions called from MARBL_tracers.F90 and I\r\ncaught a mistake in the comments of MARBL_forcing_mod.F90.\r\n\r\nAlso updated the dummy API so the model continues to build when MARBL is not\r\navailable.\r\n\r\n* Dummy MARBL API needs one more function\r\n\r\nThe MARBL driver calls marbl_instances%get_conc_flux_units(), which I had\r\nforgotten to add to the dummy cap\r\n\r\n* MARBL API changed\r\n\r\nreplaced surface_flux_output%add_output with add_output_from_GCM(); this commit\r\nuses the new API from MARBL and also updates the dummy API so we can still\r\nbuild without MARBL\r\n\r\n* Don't need to overwrite tracer_restore_vars\r\n\r\nA MARBL update (reflected in MOM_interface) puts empty strings in\r\ntracer_restore_vars by default for MOM6, so we don't need to remove the POP\r\ndefaults in the Fortran code anymore\r\n\r\n* Use time_interp_external for restoring\r\n\r\nThis is still a work in progress, but I cleaned up how the MARBL tracer\r\nrestoring fields are translated into something the MARBL_tracers control\r\nstructure can parse and also call init_external_field. One issue I'm having is\r\nthat time_interp_external needs a time_type argument, and that's not available\r\nin MARBL_tracers_column_physics. I think the solution will be to move a lot of\r\nthis code to MARBL_forcing.F90, but I want to do that in a separate commit.\r\n\r\n* First pass at implementing tracer restoring\r\n\r\nUses time_interp_external to temporally interpolate restoring fields; assumes\r\ndata is on correct spatial grid, and then does vertical interpolation to go\r\nfrom data's vertical grid to current MOM6 grid (similar to iron sediment flux).\r\n\r\nStill to do: vertical interpolation of restoring time scale\r\n\r\n* Clean-up to avoid truncation errors\r\n\r\nWas failing some CI tests due to truncation issues\r\n\r\n* Switch from interpolate_column to remapping_core_h\r\n\r\ninterpolate_column() is meant for interpolating from cell interfaces, not cell\r\ncenters. MOM_initialize_tracer_from_Z() uses ALE_remap_scalar(), which just\r\ncalls remapping_core_h() under the hood, so that's what we want to use for\r\nvertical interpolation of the restoring fields and time scales.\r\n\r\n* enable_averaging -> enable_averages\r\n\r\nprevious merge contained a change to this function name, so my MARBL code\r\nadditions were stuck calling the wrong one\r\n\r\n* Move river flux code into MARBL_tracers\r\n\r\n1. MARBL_forcing_mod should just be for fields that pass through the MOM6 cap\r\n2. River fluxes shouldn't be in the forcing datatype\r\n3. MARBL_tracers_set_forcing() is already set up to handle fields read in with\r\n time_interp_external\r\n\r\n* move post_data calls for river nutrient fluxes\r\n\r\nDiags are posted after files are read in set_forcing(). Also, cleaned up where\r\nI apply the dt factor to convert from flux to time-integrated flux because\r\nset_forcing is only called once during the first two time steps so we were\r\ninadvertently applying a factor of dt^2 on the second time step.\r\n\r\nThis commit is bit-for-bit with 69202f7 in my CESM testing, which wasn't the\r\ncase for 5540525\r\n\r\n* Code cleanup: doxygen test\r\n\r\nSeveral \"Line length exceeded\" messages in CI, addressed by adding continuation\r\nlines instead\r\n\r\n* More doxygen clean-up\r\n\r\n* Missing \"<\" in one comment\r\n\r\nHad a ! instead of !< when documenting a variable in a class\r\n\r\n* First pass at adding ABIO\r\n\r\nStill need to update d14c forcing, currently hardcoded to use -4 (we want to\r\nread from a file with dimensions time,lat_band and interpolate in time)\r\n\r\n* Add MARBL_TRACERS_MAY_REINIT to param file\r\n\r\nThe default is still false, but in some cases (branching off a run that did not\r\nhave MARBL enabled) it would be useful to set as true instead\r\n\r\n* Add dummy get_setting() to marbl_interface_class\r\n\r\nNow that I call get_setting() to determine which MARBL tracer modules are\r\nenabled, the dummy cap also needs this function\r\n\r\n* Skip some processes when not base_bio_on\r\n\r\nIf base_bio_on is false, we don't want to request any output from the GCM or\r\ndeal with the iron flux forcing fields\r\n\r\n* Add support for reading d14c forcing from netcdf\r\n\r\nUse time_interp_external to read in d14c in three latitude bands; in putting\r\nthis together, I also found a bug in tracer_forcing_utils that resulted in\r\nbeing off by a year when reading constant forcing (river fluxes were\r\ninterpolated to Jan 1, 1901, rather than Jan 1, 1900; fixing it also meant\r\nupdating the forcing file so there was data to read on Jan 1, 1900, since the\r\noriginal dataset begins on July 1 of that year).\r\n\r\nAlso, following the GFDL MOM6 call, I added parentheses around the square term\r\nin \"a * b**2\" constructs [this was a bit-for-bit change on derecho, but some\r\nmachines treat \"a * b**2\" as \"(a*b)*b\" instead of \"a*(b*b)\"]\r\n\r\n* Update to support marbl0.46.0\r\n\r\nThat tag changed how total 3d chlorophyll is passed from MARBL to the GCM\r\n\r\n* Update interface to build without MARBL\r\n\r\nmarbl0.46.0 updated the MARBL interface, so that needs to be reflected in the\r\nconfig_src/ version\r\n\r\n* Shorten line that exceeded max length\r\n\r\ndoxygen test was failing because I added some whitespace between variable\r\ndeclaration and inline comment; I broke the comment over two lines to fix\r\n\r\n* Fix whitespace\r\n\r\nMARBL_tracers.F90 and MARBL_forcing_mod.F90 now comply with whitespace rules\r\nfrom the MOM6 style guide\r\n\r\n* Check abio_dic_on and base_bio_on before posting\r\n\r\nThere are a few diagnostics that are only defined if base_bio_on=.true. (the\r\nriver flux nutrient forcing fields), and one that is only defined if\r\nabio_dic_on=.true. (the d14c forcing); some compilers won't initialize the\r\ndiagnostic ids to 0 in the control structure, so we need to either explicitly\r\ninitialize all the ids or only call post_data when we know the ids have been\r\nset. This commit does the latter.\r\n\r\n* Updates for dimensional scaling test\r\n\r\nCurrently fails T-scaling test with solo driver, probably fails lots of other\r\nscaling tests as well. This commit\r\n\r\n1. Adds debug output to MARBL_tracers.F90\r\n2. Gets dimensions correct in comments of MOM_forcing_type, MARBL_forcing_mod,\r\n and MARBL_tracers\r\n3. Scales forcings correctly for the MARBL surface_flux_compute() step (at\r\n least in T); output highlights issues in computing source / sink term from\r\n interior_tendency_compute()\r\n\r\nOne of the biggest changes from this commit is the handling of units for the\r\nnitrogen deposition fluxes. It looks like they were coming in as kg/m^2/s,\r\nbeing converted to mol/L^2/T in fluxes%{nhx_dep,noy_dep}, and then converted to\r\nmmol/m^2/s when copied into MARBL. Now the intermediate stage is mmol/m^3 Z/T;\r\nthis is not bit-for-bit with the previous setup because I went from multiplying\r\nby (1000/14) (kg -> mol) and then another 1000 in the third step (mol -> mmol)\r\nto just multiplying by 1e6/14 (kg -> mmol) in the second step.\r\n\r\n* More dimensional scaling updates\r\n\r\nWith solo_driver, the following runs are all bit-for-bit with non-scaled runs:\r\n\r\nC_RESCALE_POWER = 10\r\nH_RESCALE_POWER = 10\r\nL_RESCALE_POWER = 10\r\nS_RESCALE_POWER = 10\r\nT_RESCALE_POWER = 10\r\nZ_RESCALE_POWER = 10\r\n\r\n* Clean up line-lengths in some comments\r\n\r\nShould pass doxygen test again\r\n\r\n* pass phys units to convert_marbl_IOB_to_forcings()\r\n\r\nThe function is meant to help copy fields from the ice_ocean_boundary_type\r\n(which is in physical units in all the caps) to the forcing_type (which wants\r\nscaled units). So the solo_driver should NOT scale the dust, black carbon, or\r\nNDEP inputs from data_override, and instead that scaling should happen in\r\nMARBL_forcing_mod.F90\r\n\r\n* scale riv flux\r\n\r\napplyTracerBoundaryFluxesInOut expects in_flux_optional in units of conc H, and\r\nwe were passing conc m T/s. Since riv_flux_loc is now conc H, I also added a\r\ndebug-gated hchksum on it.\r\n\r\n* Introduce MARBL_IC_MIN_VAL for testing\r\n\r\nThe dimensional scaling tests fail if the MARBL tracer concentrations are very\r\nvery small (O(1e-300)); this can be avoided by setting the minimum tracer value\r\nto be 1e-100 instead of 0. We don't want to do this for production runs,\r\nthough, so the default for this parameter is still 0.\r\n\r\n* Fixed a few area correction bugs\r\n\r\nSa_co2prog and Sa_co2diag should not be area corrected (they are states) but\r\nFaoo_fco2_ocn should be (it's a flux)\r\n\r\n* No support for global ops yet\r\n\r\nWhen calling marbl_instance%init(), we should tell MARBL that MOM6 doesn't have\r\nthe global operators that MARBL expects (global sums / running means) so we get\r\nthe appropriate error message when trying to run with ladjust_bury_coeff = True\r\n\r\n* Add chksum calls for MARBL forcings\r\n\r\nUpdated ice_ocn_bnd_type_chksum() in the NUOPC cap, though I don't think this\r\nfunction is ever called\r\n\r\n* MARBL input data is now in INPUTDATA\r\n\r\nI had created CESM_INPUTDATA as a parameter to point to my work directory, but\r\nit is no longer necessary because INPUTDATA points to the CESM input data\r\nrepository and I've moved necessary files there\r\n\r\n* Changes following code review\r\n\r\n-- cleaned up a lot of comments and whitespace\r\n-- used source argument in more allocate statements, and deallocated more\r\n arrays\r\n-- 3D diags now have zl:mean in cell_methods attribute\r\n-- marbl_instances%domain%kmt is set once (during initialization)\r\n\r\n* Call MARBL_tracers_stock()\r\n\r\n* Only use MARBL for Chl when using base_bio tracers\r\n\r\nIf MARBL is not configured to provide the base biotic tracers, then it will not\r\nbe able to provide chlorophyll. In that case, if CHL_FROM_FILE=False, MOM6\r\nneeds to get chlorophyll from the generic tracers.\r\n\r\n* tracer_forcing_utils moved into MOM_interpolate\r\n\r\nTo make these subroutines more accessible, they were moved out of src/tracer/\r\nand made available through MOM_interpolate\r\n\r\n* Fix whitespace in comments\r\n\r\n* Add some variable descriptions\r\n\r\nIf variable was described in POP comment, I copied the comment over. Otherwise\r\nI came up with a description on my own.\r\n\r\n* Use do loops instead of ':'\r\n\r\ntime_interp_external() does not update halo regions, so running CESM with\r\nDEBUG=TRUE was triggering some overflows from uninitialized memory. Intead of\r\ncopying the entire array, we now loop through (is:ie,js:je) when accessing an\r\narray returned from time_interp_external()\r\n\r\n* Add parameter to change restoring time scale name\r\n\r\nMost use cases don't include restoring for MARBL tracers, but when that feature\r\nis enabled and the time scale is read from a file the user can specify what\r\nvariable to read from the netCDF file (default is I_TAU to match naming\r\nconvention in MOM6, but some test cases are based on POP files and will need to\r\nread RTAU)","shortMessageHtmlLink":"Add MARBL to MOM6 (#157)"}},{"before":"9ff6ca419265b275e697e2724af8911385222d5a","after":"e413c299d190254967b18922b682f2d797405810","ref":"refs/heads/dev/ncar","pushedAt":"2024-07-31T16:35:31.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"gustavo-marques","name":"Gustavo Marques","path":"/gustavo-marques","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/11339137?s=80&v=4"},"commit":{"message":"Adding Ohlmann solar penetration scheme to MOM_opacity (#289)\n\n* Adding Ohlmann solar pentration scheme to MOM_optics\r\n\r\n* Fixed some violations of code style guide\r\n\r\n* Fixing a few more code style violations\r\n\r\n* Fixing yet another code style guide violation\r\n\r\n* Cleaned up some coment statements. No changes to code.\r\n\r\n* Fixed formatting of string in get_param. Cleaned up extraneous FOB\r\nfootprints in comments\r\n\r\n* Fix spelling (Ohlman to Ohlmann)\r\n\r\n---------\r\n\r\nCo-authored-by: Gustavo Marques ","shortMessageHtmlLink":"Adding Ohlmann solar penetration scheme to MOM_opacity (#289)"}},{"before":"99edf23b0e22e96ff22eccb79f11e223fe0c23d1","after":"9ff6ca419265b275e697e2724af8911385222d5a","ref":"refs/heads/dev/ncar","pushedAt":"2024-07-16T12:54:17.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"alperaltuntas","name":"Alper Altuntas","path":"/alperaltuntas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12533965?s=80&v=4"},"commit":{"message":"Scale checksums in hor_bnd_diffusion\n\n Added missing scale arguments to the hchksum and global_mass_integral calls\nfor debugging in hor_bnd_diffusion, so that they now give messages to stdout\nthat do not change when tracers (including temperature and salinity) are\nrescaled. Also added a missing debuggingParam argument to the get_Param call\nfor HBD_DEBUG so that is will be logged in MOM_parameter_doc.debugging rather\nthat MOM_parameter_doc.all. This commit partially addresses the scaling\nproblems that were noted in github.com/NCAR/MOM6/issues/275. All solutions are\nbitwise identical, but some debugging output can change to become more robust.","shortMessageHtmlLink":"Scale checksums in hor_bnd_diffusion"}},{"before":"8a03b63c208f0f77fdeab4932d4d5ffd4fb0fee9","after":"99edf23b0e22e96ff22eccb79f11e223fe0c23d1","ref":"refs/heads/dev/ncar","pushedAt":"2024-07-16T11:29:20.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"alperaltuntas","name":"Alper Altuntas","path":"/alperaltuntas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12533965?s=80&v=4"},"commit":{"message":"*+Make Leith viscosity runs layout-invariant\n\n Added the new function hor_visc_vel_stencil to return the velocity stencil of\nthe velocity fields used by horizontal_viscosity depending on the options that\nare in use, and then use this information in the group_pass calls for the\nvelocities that are passed to horizontal_viscosity. Also adjusted the size of\nthe loops used to set up DX_dyBu and DY_dxBu in the hor_visc control structure\ndepending on the horizontal viscosity options and added a test in hor_visc_init\nfor a large enough halo size for the options that are in use. Both of these\nanswer-changing modifications are necessary for MOM6 to reproduce across PE\ncount and layout) when Leith viscosity parameterizations are in use.\n\n The MOM_hor_visc code was also revised slightly in several places to more\nclosely adhere to MOM6 style with respect to using a 2-point indent and similar\npurely cosmetic considerations.\n\n This commit does change answers when a Leith viscosity is in use, and adds a\nnew publicly visible function. Answers are bitwise identical when a Leith\nviscosity is not being used.","shortMessageHtmlLink":"*+Make Leith viscosity runs layout-invariant"}},{"before":"51a98c7c42511357deb2dc3a3b34e2e28693d143","after":"8a03b63c208f0f77fdeab4932d4d5ffd4fb0fee9","ref":"refs/heads/dev/ncar","pushedAt":"2024-07-15T19:57:22.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"alperaltuntas","name":"Alper Altuntas","path":"/alperaltuntas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12533965?s=80&v=4"},"commit":{"message":"append ensemble num to geom filename in ensemble runs","shortMessageHtmlLink":"append ensemble num to geom filename in ensemble runs"}},{"before":"6ad1530c3770fb400e980aff6b724e1c5639a1cf","after":"51a98c7c42511357deb2dc3a3b34e2e28693d143","ref":"refs/heads/dev/ncar","pushedAt":"2024-07-13T09:22:50.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"alperaltuntas","name":"Alper Altuntas","path":"/alperaltuntas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12533965?s=80&v=4"},"commit":{"message":"+Reproducing KPP_smooth_BLD when KPP%N_SMOOTH > 1\n\n Revised KPP_smooth_BLD() to reproduce across processor count and layout when\nUSE_KPP is true and KPP%N_SMOOTH > 1. The specific changes include adding a\nvariable with the total ocean depth before doing the iterations, doing a halo\nupdate on this total ocean depth, marching in the working do-loop size with\nsuccessive iterations, and moving the code to calculate CS%kOBL into a separate\nloop that is exercised after all of the iterations for the smoothing passes on\nCS%OBLdepth. This commit will change answers (so that they reproduce across\nprocessor count and layout) when USE_KPP is true and KPP%N_SMOOTH >= 2, but it\ngives bitwise identical answers when KPP%N_SMOOTH <= 1.","shortMessageHtmlLink":"+Reproducing KPP_smooth_BLD when KPP%N_SMOOTH > 1"}},{"before":"2b1201a87259c912c93e4c11039b8e59971e3c26","after":"6ad1530c3770fb400e980aff6b724e1c5639a1cf","ref":"refs/heads/dev/ncar","pushedAt":"2024-07-02T20:00:14.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"gustavo-marques","name":"Gustavo Marques","path":"/gustavo-marques","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/11339137?s=80&v=4"},"commit":{"message":"Stochastic GM+E (#280)\n\n* SKEB+GM\r\n\r\nThis commit adds a Stochastic Kinetic Energy Backscatter Scheme (SKEBS)\r\nwhere the amplitude of the backscatter is based on either the GM\r\nwork rate and/or the viscous work rate (FrictWork). Each of these\r\ncan be multiplied by a coefficient so that, e.g. the backscatter rate\r\ncould be 50% of the GM work rate plus 20% of the viscous work rate.\r\nThe vertical structure of the backscatter rate associated with GM has\r\nvertical structure given by the EBT profile. This code was developed\r\nstarting from Phil Pegion's branch, and it builds on the stochastic\r\nphysics package (external) developed by Phil Pegion, Niraj Agarwal,\r\nand collaborators. This package allows the length and time scales\r\nof the backscatter to be set via namelist parameters. This commit\r\nmay break the stochastic EPBL and SPPT schemes developed by P.\r\nPegion.\r\n\r\n* Fix merge\r\n\r\n* Whitespace","shortMessageHtmlLink":"Stochastic GM+E (#280)"}},{"before":"95259e42f0c7faf259ecac26917e231b985417af","after":"2b1201a87259c912c93e4c11039b8e59971e3c26","ref":"refs/heads/dev/ncar","pushedAt":"2024-05-24T19:11:43.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"gustavo-marques","name":"Gustavo Marques","path":"/gustavo-marques","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/11339137?s=80&v=4"},"commit":{"message":"KE-conserving correction to velocity remap (#277)\n\n* KE-conserving Remap Correction\r\n\r\nThis commit introduces a method that corrects the remapped velocity so\r\nthat it conserves KE. The correction is activated by setting\r\n`REMAP_VEL_CONSERVE_KE = True`\r\nThe commit also introduces two new diagnostics:\r\n`ale_u2` and `ale_v2`\r\nThese track the change in depth-integrated KE of the u and v components\r\nof velocity before the correction is applied. They can be used even\r\nif the remapping correction is not turned on.\r\n\r\n* Limit KE-conserving correction\r\n\r\nThis commit does two main things.\r\n- Limit the magnitude of the multiplicative correction applied to\r\nthe baroclinic velocity to +25%. This prevents rare occasions where\r\nthe correction creates very large baroclinic velocities.\r\n- Move the diagnostic of KE loss/gain from before the correction\r\nto after the correction. Without the limit (above) the correction\r\nis exact to machine precision, so there was no point in computing\r\nit after the correction. With the new limit it makes sense to\r\ncompute the diagnostic after the correction.\r\n\r\n* Fix dimensional scaling error\r\n\r\n* Correct Units\r\n\r\nThis commit addresses @Hallberg-NOAA's comments on\r\n[the PR](https://github.com/NCAR/MOM6/pull/277). Computations of\r\n`ale_u2` and `ale_v2` are updated to work correctly in both\r\nBoussinesq and non-Boussinesq modes.","shortMessageHtmlLink":"KE-conserving correction to velocity remap (#277)"}},{"before":"d16c330a09de85b4f170f20710ca0ac5f5563821","after":"95259e42f0c7faf259ecac26917e231b985417af","ref":"refs/heads/dev/ncar","pushedAt":"2024-05-10T16:23:55.000Z","pushType":"pr_merge","commitsCount":4,"pusher":{"login":"alperaltuntas","name":"Alper Altuntas","path":"/alperaltuntas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12533965?s=80&v=4"},"commit":{"message":"Revert a comment that was changed unintentionally.","shortMessageHtmlLink":"Revert a comment that was changed unintentionally."}},{"before":"a30e7c8d971bb24d1c41c6d099ad206a1520a39e","after":"d16c330a09de85b4f170f20710ca0ac5f5563821","ref":"refs/heads/dev/ncar","pushedAt":"2024-05-10T00:57:32.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"alperaltuntas","name":"Alper Altuntas","path":"/alperaltuntas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12533965?s=80&v=4"},"commit":{"message":"Introduce GEOM_FILE runtime parameter to set ocean_geometry file name.\n\nThis is to enable the prefixing of the ocean geometry file with the case\n(experiment) name, and thus enable adherence to CESM output file naming\nconvention and allow short term archiving of ocean_geometry file.","shortMessageHtmlLink":"Introduce GEOM_FILE runtime parameter to set ocean_geometry file name."}},{"before":"db64408fd9f403325aa5a006c75bc99b869261ea","after":"a30e7c8d971bb24d1c41c6d099ad206a1520a39e","ref":"refs/heads/dev/ncar","pushedAt":"2024-04-30T17:48:26.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"alperaltuntas","name":"Alper Altuntas","path":"/alperaltuntas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12533965?s=80&v=4"},"commit":{"message":"Disable codecov upload requirement\n\nThis patch removes the code coverage upload requirement. Constraints\naround codecov.io upload rules have made it impossible to keep this as a\nrequirement. However, we will still attempt an upload, which should be\nmore successful for accounts with a stored URL token, such as NOAA-GFDL.","shortMessageHtmlLink":"Disable codecov upload requirement"}},{"before":"13fbeb74975df410f92ccb93e43c2b99a8be3350","after":"db64408fd9f403325aa5a006c75bc99b869261ea","ref":"refs/heads/dev/ncar","pushedAt":"2024-04-04T22:52:15.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"alperaltuntas","name":"Alper Altuntas","path":"/alperaltuntas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12533965?s=80&v=4"},"commit":{"message":"Enable relative path specification for IC files\n\nThese include velocity, thickness, ts, salt, sponge, and ODA inc. files.\nThis change was needed to enable hybrid CESM experiments, allowing the\nutilization of restart file(s) from different experiment(s).","shortMessageHtmlLink":"Enable relative path specification for IC files"}},{"before":"13fbeb74975df410f92ccb93e43c2b99a8be3350","after":"e75d1da90addc49b5db640d45e7183083b139682","ref":"refs/heads/dev/ncar-candidate-240319","pushedAt":"2024-03-20T18:58:49.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"alperaltuntas","name":"Alper Altuntas","path":"/alperaltuntas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12533965?s=80&v=4"},"commit":{"message":"Merge pull request #272 from Hallberg-NOAA/fix_dev_ncar_20240319\n\nMake the US argument to MOM_domains_init optional","shortMessageHtmlLink":"Merge pull request #272 from Hallberg-NOAA/fix_dev_ncar_20240319"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"startCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0yOVQwMDoxNzozOS4wMDAwMDBazwAAAATDmZQA","endCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wMy0yMFQxODo1ODo0OS4wMDAwMDBazwAAAAQbA9_5"}},"title":"Activity · NCAR/MOM6"}