Code Monkey home page Code Monkey logo

mom6's Introduction

Read The Docs Status codecov

MOM6

This is the MOM6 source code.

Where to find information

Start at the MOM6-examples wiki which has installation instructions.

Source code documentation is hosted on read the docs.

What files are what

The top level directory structure groups source code and input files as follow:

File/directory Purpose
LICENSE.md A copy of the Gnu lesser general public license, version 3.
README.md This file with basic pointers to more information.
src/ Contains the source code for MOM6 that is always compiled.
config_src/ Contains optional source code depending on mode and configuration such as dynamic-memory versus static, ocean-only versus coupled.
pkg/ Contains third party (non-MOM6 or FMS) code that is compiled into MOM6.
docs/ Workspace for generated documentation. See docs/README.md
.testing/ Contains the verification test suite. See .testing/README.md
ac/ Contains the autoconf build configuration files. See ac/README.md

Quick start guide

To quickly get started and build an ocean-only MOM6 executable, see the autoconf README.

For setting up an experiment, or building an executable for coupled modeling, consult the MOM6-examples wiki.

Disclaimer

The United States Department of Commerce (DOC) GitHub project code is provided on an "as is" basis and the user assumes responsibility for its use. DOC has relinquished control of the information and no longer has responsibility to protect the integrity, confidentiality, or availability of the information. Any claims against the Department of Commerce stemming from the use of its GitHub project will be governed by all applicable Federal law. Any reference to specific commercial products, processes, or services by service mark, trademark, manufacturer, or otherwise, does not constitute or imply their endorsement, recommendation or favoring by the Department of Commerce. The Department of Commerce seal and logo, or the seal and logo of a DOC bureau, shall not be used in any manner to imply endorsement of any commercial product or activity by DOC or the United States Government.

This project code is made available through GitHub but is managed by NOAA-GFDL at https://gitlab.gfdl.noaa.gov.

mom6's People

Contributors

adcroft avatar alperaltuntas avatar andrew-c-ross avatar angus-g avatar ashao avatar bmater avatar breichl avatar carolinecardinale avatar deniseworthen avatar gustavo-marques avatar hallberg-noaa avatar herrwang0 avatar hmkhatri avatar jiandewang avatar jkrasting avatar kshedstrom avatar marshallward avatar mfjansen avatar mjharrison-gfdl avatar nichannah avatar nikizadehgfdl avatar noraloose avatar olgasergienko avatar pjpegion avatar raphaeldussin avatar sdbachman avatar stephengriffies avatar wfcooke avatar wrongkindofdoctor avatar zhi-liang avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

mom6's Issues

update MOM6

need to update MOM6 to GFDL dev/master (May 29th commit hash # 48d208d), which refers to dev-master-candidate-2020-05-15

Add ocean stochastic physics

A first cut of ocean stochastic physics necessary for coupled data assimilation is needed. Development of ocean stochastically perturbed physics tendencies (SPPT) and energetic planetary boundary layer perturbations will be included in the initial implantation.

MOM6 configuration changes for compatibility with CICE6 B-grid

In the 1-deg MOM6 configuration, there is no land at the southern boundary (j=1). Since CICE6 obtains its land mask from the MOM6 configuration, CICE6 currently has no land at j=1 either.

MOM6 utilizes a C-grid while CICE6 utilizes the B-grid. During testing by the hygrid-godas team running the 1-deg configuration with the DATM, locations of very thick ice were seen developing in isolated single point locations.

Information provided by @apcraig addresses both these issues:

  1. The open boundary at j=1 is going to be problematic in the long term as the CICE6 ns_boundary_type='tripole' which means it's using "open" on the southern boundary.

  2. The thick ice seen in hybrid-godas configuration appear to be related to isolated ocean points. In other words, they are connected to only 1 other active gridcell. In pop, this was always a no-no because there could be no velocity in a gridcell that was isolated like that. I don't know what the restrictions are on MOM, but my guess is that the thick ice is related to this choice of masking. Because of the pop constraint, I don't have any experience running CICE with isolated cells like this. But the problem is that in a B-grid, you probably will not get any velocity at that cell.

bug fix: sign error in fprec passed to ocean in caps

NCAR has notified us that they found a sign error in the latent heat contribution for frozen precip (fprec) being passed to ocean in both the mct and nuopc caps. The required change is shown here.

Since this is a bug fix, we should merge the fix now rather than waiting for the change to come back in the next update from GFDL.

update EMC MOM6 repo (20210120)

GFDL updated their MOM6 main branch on 20210120 which contains EMC's wave coupling code, alone with some minor code standardization and documentation. EMC will need to update MOM6 repo corresponding to reflect the changes here.

remove cmeps dependencies

We should remove cmeps related ifdefs or conditionals from MOM6 so that the cmeps integration work can pull directly from develop rather than a branch.

Allow MOM6 to write restarts at a end of run in addition to at a restart frequency

Currently as implemented in UFS, MOM6 can write a restart at a certain frequency (eg every 6 hours). For restart tests, it is useful to be able to write a restart at the end of the run in addition to a set frequency. For example, a restart after 3 hours and another at the end of hour 4.

Currently this can only be accomplished by setting restart_n=1 and restart_option=nhours, which would require 2 extra restarts to be written. For the benchmark configurations, these restarts are both large and time-consuming to write.

There is also a legacy option present in the mom_cap currently to not use alarms to control restart behaviour. This can be removed because it is no longer used.

remove unneeded code

In the nuopc_driver, the public interface ocean_model_data_get which contains procedures ocean_model_data1D_get and ocean_model_data2D_get) appears un-used. The associated code should be removed if it is no longer needed.

update MOM6

GFDL updated MOM6 main branch on 20201022, need to update EMC MOM6 repo correspondingly.

restart control for MOM6

  1. Creating intermediate restarts for MOM6 is currently disabled in S2S-model because the relevant code is commented out in mom_cap.F90
  2. When running with CMEPS, duplicate final restarts are written, once when the restart_alarm rings and once when MOM6 is finalized.
  3. When creating restarts using the restart_alarm, currently all restarts will be timestamped. This conflicts with what FV3 is doing (creating non-stamped final restarts) and also creates unnecessary complications in our current regression tests.

Intermediate restarts when using the NEMS mediator can be controlled by the mom_cap if the relevant configuration variables are added to nems.configure for the ocean. Modifications to the mom_cap are required to address items 2 and 3 above.

MOM6 updating

MOM6 dev/master has been updated from GFDL on 20200108, we need to update on EMC side

Use of imported sea level pressure for the 1deg configuration

During development required for ufs-weather-model #366 it was determined that the 1deg MOM6 configuration is not making use of the sea level pressure imported from the mom6 cap.

The behaviour noted is that changing the mapping method of sea level pressure from atm->ocn in the CMEPS mediator produced bit identical results for the C96mx100 configuration. Since the values of sea level pressure did in fact change when the mapping method was changed, this means that MOM6 is apparently not using the imported sea level pressure in the 1deg configuration.

Testing of the C192mx050 configuration showed that the change of mapping method for sea level pressure did in fact change answers.

I have not been able to determine the MOM6 configuration setting which is controlling the different behavior of the 1deg vs 1/2 deg configuration.

update MOM6 to GFDL 20210308 commit

GFDL updated its main branch on 20210308 which contains their 2nd step of changes related to the using of FMS2. EMC will need to make corresponding changes.

Add IAU capability to MOM6

Alex Bozec and Alan Wallcraft from COAPS/Florida State University have developed Incremental analysis update capability for MOM6. An older commit has been tested in the UFS-datm with a "replay" to ORAS5 analysis. I will test it out the latest updates once hera come back online.

There will be an assoicate PR in the ufs-weather-model to modify the CMakeLists.txt file and add a IAU regression test to ocean model.

Draft PR is #68

update MOM6 (20211220 commit)

MOM6 main branch has been updated on 20211220, this updating contains modification from Phil on stochastic physics code, see detail at mom-ocean#1538
EMC repo will need to make corresponding updating.

restart reproducibility (without waves) when USE_LA_LI2016=True

When running the regression tests without waves for restart reproducibility, USE_LA_LI2016 is set to false to reproduce. Further description from @DeniseWorthen: This is a long-standing issue where the grid decomposition appears in the MOM6 fields after restart if this parameter is set true. It was not resolved when we switched to vertex_shear=F in the update to MOM6 (PR mom-ocean#290).

Fix MOM6SOLO build in the EMC branch.

There is an issue with compiling the standalone MOM6 within UFS (or even without UFS) in the dev/emc branch

There was a bug in the way the wave forcing subroutine was being called with incorrect number of arguments.

To reproduce the compilation error from the UFS-weather-model repo

CMAKE_FLAGS="-DMOM6SOLO=ON -DS2S=ON -DDATM=ON" BUILD_VERBOSE=1 BUILD_JOBS=1 BUILD_DIR=build-datmmom6 ./build.sh
[ 99%] Building Fortran object MOM6-interface/CMakeFiles/mom6solo.dir/MOM6/config_src/solo_driver/MOM_driver.F90.o
cd /Users/rmahajan/scratch/UFSwork/weather-develop/build-datmmom6/MOM6-interface && /opt/modules/gnu-9.3.0/mpich/3.3.1/bin/mpifort -DENABLE_QUAD_PRECISION -DGFS_PHYS -DINTERNAL_FILE_NML -Duse_libMPI -Duse_netCDF -I/Users/rmahajan/scratch/UFSwork/weather-develop/build-datmmom6/MOM6-interface/mod -I/Users/rmahajan/scratch/UFSwork/weather-develop/build-datmmom6/MOM6-interface/mod_solo -I/Users/rmahajan/scratch/UFSwork/weather-develop/MOM6-interface/MOM6/config_src/dynamic -I/Users/rmahajan/scratch/UFSwork/weather-develop/MOM6-interface/MOM6/src/framework -I/Users/rmahajan/scratch/UFSwork/weather-develop/FMS/include -I/Users/rmahajan/scratch/UFSwork/weather-develop/FMS/fms -I/Users/rmahajan/scratch/UFSwork/weather-develop/FMS/mpp/include -I/Users/rmahajan/scratch/UFSwork/weather-develop/build-datmmom6/FMS/mod -I/opt/modules/gnu-9.3.0/mpich-3.3.1/netcdf/4.7.4/include -g -fbacktrace -fdefault-real-8 -fdefault-double-8 -Waliasing -fcray-pointer -fconvert=big-endian -ffree-line-length-none -fno-range-check -fbacktrace -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk -mmacosx-version-min=10.15 -Jmod_solo -c /Users/rmahajan/scratch/UFSwork/weather-develop/MOM6-interface/MOM6/config_src/solo_driver/MOM_driver.F90 -o CMakeFiles/mom6solo.dir/MOM6/config_src/solo_driver/MOM_driver.F90.o
/Users/rmahajan/scratch/UFSwork/weather-develop/MOM6-interface/MOM6/config_src/solo_driver/MOM_driver.F90:491:79:

  491 |       call Update_Surface_Waves(grid, GV, US, time, time_step_ocean, waves_csp)
      |                                                                               1
Error: Missing actual argument for argument 'forces' at (1)
make[2]: *** [MOM6-interface/CMakeFiles/mom6solo.dir/MOM6/config_src/solo_driver/MOM_driver.F90.o] Error 1
make[1]: *** [MOM6-interface/CMakeFiles/mom6solo.dir/all] Error 2
make: *** [all] Error 2

river runoff

move river runoff input into a different routine and push back to NOAA-GFDL fork

default stagger locations

Fields in the import and export state using the NEMS mediator are on the A-grid by design. The default stagger for both ocean_surface_stagger and wind_stagger in the nuopc_driver should be set to "A" by default.

update MOM6 to 20220317 commit

MOM6 main branch was updated on 20220317 (see detail at mom-ocean#1559), this is based on FSU Alex "add call to restart_registry_lock when setting up ODA at initialization" PR. Need to update dev/emc correspondingly.

update MOM6

GFDL updated their dev/master on 20200401, need to do corresponding updating for EMC repository

lrunoff from data override should be moved

In mom_surface_forcing_nuopc, when using the parameter setting liquid_runoff_from_data=true the call to the data_override for lrunoff should be moved outside the do loop.

Allowing adjustment of ocean->land points at run time

At run time, MOM6 has the ability to apply topography overrides using the TOPO_EDITS_FILE. Edits are allowed to change land->ocean but not ocean->land.

The 1deg MOM6 configuration has an open boundary at j=1. In addition, it may be desired to remove isolated ocean grid points at run time. See ufs-issue issue 445 for more information.

Note that even when these topography overrides can change ocean->land at runtime, a matching CICE6 grid and mask file and consistent ice-ocean mesh file must also be created to match these desired topography edits.

A configuration parameter needs to be added to allow ocean->land for MOM6. This parameter could then be set True when ocean->land changes are desired in ufs.

threading

Investigate/implement threadding for MOM6. Currently the UFS coupled model builds MOM6 without threadding. However, if other models require running with threads and task geometry is not use for the forecast model, having the capability use threading for MOM6 could be helpful.

update MOM6 20210224

GFDL updated its main branch on 20210224 which contains 1st step of changes related to the using of FMS2. EMC will need to make corresponding changes.

update MOM6 code from GFDL (20210402)

It was noticed that the codes between EMC dev/emc and GFDL main branch contain some minor difference due to a mistakenly clicking of button by GFDL on 20210308's updating. A hot fixing will bring two sides' code on the same page again. See detail at https://github.com/NOAA-GFDL/MOM6/pull/1358

GFDL updated main branch on 20210402 (see detail at https://github.com/NOAA-GFDL/MOM6/pull/1358#event-4545482872). This updating will make EMC and GFDL main repository on the same page.

ocean mask created at run time is not same as ocean mask in INPUT for the 1deg configuration

For the 1deg model, the ocean mask in INPUT/ocean_mask.nc differs at a single location from the ocean mask produced at run time (MOM6_OUTPUT/ocean_geometry). The difference is located at i=88,j=133.

I did not think that the land mask could be changed at run time, only the bathymetry.

This affects the creation of the mapped ocean mask files for the frac grid, since in that case the ocean land mask is consistent with the INPUT/ocean_mask file.

In the 1/2 and 1/4 deg case, the INPUT/ocean_mask file and the MOM6_OUTPUT/ocean_geometry files are consistent.

time interpolation of river runoff

The river runoff added via data_override is interpolated in time to the end of the coupling timestep instead of the beginning of the coupling timestep. This is inconsistent with how MOM6 generally implements this function (see use of allow_flux_adjustment in mom_surface_forcing_nuopc).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.