Model Configurations
In MITgcm.jl, a model configuration is represented as a MITgcm_config. Model parameters are handled as ordered dictionaries and stored as TOML files. Standard model configurations are readily supported.
MITgcm_config
The data structure that enables MITgcm.jl is called MITgcm_config.
MITgcm.MITgcm_config — TypeMITgcm_config()Concrete type of AbstractModelConfig for MITgcm (as part of the ClimateModels.jl interface for MITgcm) which contains
model :: String = "MITgcm"
configuration :: String = ""
inputs :: OrderedDict{Any,Any} = OrderedDict{Any,Any}()
outputs :: OrderedDict{Any,Any} = OrderedDict{Any,Any}()
channel :: Channel{Any} = Channel{Any}(10)
folder :: String = tempdir()
ID :: UUID = UUIDs.uuid4()and can be constructed using keywords as follows
unknown_config=MITgcm_config(configuration="unknown")Model Parameters
Model parameters can be stored as a TOML file, and represented as a nested OrderedDic.
read_toml(fil)OrderedCollections.OrderedDict{Any, Any} with 20 entries:
:main => OrderedDict{Any, Any}(:PARM01=>OrderedDict{Any, Any}(:tRef…
:autodiff => OrderedDict{Any, Any}(:AUTODIFF_PARM01=>OrderedDict{Any, A…
:cal => OrderedDict{Any, Any}(:CAL_NML=>OrderedDict{Any, Any}(:The…
:cost => OrderedDict{Any, Any}(:COST_NML=>OrderedDict{Any, Any}())
:ctrl => OrderedDict{Any, Any}(:ctrl_nml=>OrderedDict{Any, Any}(:do…
:diagnostics => OrderedDict{Any, Any}(:diagnostics_list=>OrderedDict{Any, …
:ecco => OrderedDict{Any, Any}(:ECCO_COST_NML=>OrderedDict{Any, Any…
:exch2 => OrderedDict{Any, Any}(:W2_EXCH2_PARM01=>OrderedDict{Any, A…
:exch2_192cores => OrderedDict{Any, Any}(:W2_EXCH2_PARM01=>OrderedDict{Any, A…
:exf => OrderedDict{Any, Any}(:EXF_NML_01=>OrderedDict{Any, Any}(:…
:ggl90 => OrderedDict{Any, Any}(:GGL90_PARM01=>OrderedDict{Any, Any}…
:gmredi => OrderedDict{Any, Any}(:GM_PARM01=>OrderedDict{Any, Any}(:G…
:optim => OrderedDict{Any, Any}(:OPTIM=>OrderedDict{Any, Any}(:optim…
:pkg => OrderedDict{Any, Any}(:PACKAGES=>OrderedDict{Any, Any}(:us…
:profiles => OrderedDict{Any, Any}(:PROFILES_NML=>OrderedDict{Any, Any}…
:salt_plume => OrderedDict{Any, Any}(:SALT_PLUME_PARM01=>OrderedDict{Any,…
:seaice => OrderedDict{Any, Any}(:SEAICE_PARM01=>OrderedDict{Any, Any…
:smooth => OrderedDict{Any, Any}(:SMOOTH_NML=>OrderedDict{Any, Any}(S…
:eedata => OrderedDict{Any, Any}(:EEPARMS=>OrderedDict{Any, Any}(:use…
:setup => OrderedDict{Any, Any}(:main=>OrderedDict{Any, Any}(:catego…Global ECCO Configuration
Global ocean model configurations used in NASA's ECCO ocean state estimation program.
- ECCO4 : Forget et al., 2015 (
doi:10.5194/gmd-8-3071-2015) - OCCA2 : Forget, 2024 (under review).
Running these solutions requires at least 16 cores (preferably 96) and downloading forcing fields (96G at least). To try with a smaller model solution, see Verification Experiments.
MITgcm.setup_ECCO4! — Functionsetup_ECCO4!(config::MITgcm_config)Setup method for ECCO4 and OCCA2 solutions.
using MITgcm
params=read_toml(:ECCO4)
folder=joinpath(pwd(),"tmp1")
MC=MITgcm_config(inputs=params,folder=folder)
#providing executable (optional)
#push!(MC.inputs[:setup][:main],(:exe => joinpath(pwd(),"mitgcmuv")))
#providing input folder (optional)
#push!(MC.inputs[:setup][:main],(:input_folder => joinpath(pwd(),"input_folder")))
#modifying run time options (optional)
#MC.inputs[:pkg][:PACKAGES][:useECCO]=false
setup(MC)
#modifying build options (optional)
#MC.inputs[:setup][:build][:options]=MITgcm.build_options_pleiades
build(MC)
launch(MC)Tools
MITgcm.ECCO4_inputs.download_input_folder — Functiondownload_input_folder(config::MITgcm_config)MITgcm.ECCO4_inputs.get_files — Functionget_files(list1::DataFrame,nam1::String,path1::String)Create a list of Dataverse files from folder with specified name.
list1=ECCO4_inputs.get_list()
nam1="model initialization"
ECCO4_inputs.get_files(list1,nam1,tempname())MITgcm.ECCO4_inputs.get_list — Functionget_list(; write_file=false)Create a list of Dataverse folders for ECCOv4r2. If write_file=true then write to file joinpath(tempdir(),"Dataverse_list.csv")/
get_list(list1::DataFrame,name::String)Create a list of Dataverse files from folder with specified name.
list1=ECCO4_inputs.get_list()
nam1="surface forcing fields"
list2=ECCO4_inputs.get_list(list1,nam1)MITgcm.ECCO4_testreport.compute — Functioncompute(pth0)@everywhere begin
using MITgcm
using ECCO4_testreport.SharedArrays
end
report=ECCO4_testreport.compute("run")MITgcm.ECCO4_testreport.compare — Functioncompare(A::DataFrame,B::DataFrame)using ClimateModels.DataFrames, ClimateModels.CSV
ref_file="test/testreport_baseline2.csv"
ref=CSV.read(ref_file,DataFrame)
using MITgcm
ECCO4_testreport.compare(report,ref)compare(A::DataFrame,B::DataFrame,v::AbstractString)Verification Experiments
The MITgcm/verification sub-folder of the MITgcm source code provides a suite of small model configurations, often used by model developers for testing.
To list of these available model configurations is provided by scan_verification.
list_main,list_adj,list_inp,list_out=scan_verification()
list_main10-element Vector{String}:
"MLAdjust"
"advect_cs"
"advect_xy"
"aim.5l_cs"
"exp4"
"flt_example"
"hs94.cs-32x32x5"
"isomip"
"tutorial_global_oce_biogeo"
"tutorial_held_suarez_cs"They can be used via a MITgcm_config as follows.
MITgcm_config(configuration=list_main[1]) ID = 93b533b5-b1df-46b8-b044-62c47956e4ee
model = MITgcm
configuration = MLAdjust
run folder = /tmp/93b533b5-b1df-46b8-b044-62c47956e4ee
log subfolder = /tmp/93b533b5-b1df-46b8-b044-62c47956e4ee/log
Tools
MITgcm.setup_verification! — Functionsetup_verification!(config::MITgcm_config)Setup method for verification experiments.
MITgcm.scan_verification — Functionscan_verification(; path=MITgcm_path[2])Scan the verification folder for
- experiments (list_main)
- adjoint experiments (list_adj)
- input folders (list_inp)
- reference results (list_out)
list_main,list_adj,list_inp,list_out=MITgcm.scan_verification()
config="exp4"
ii=findall(list_main.=="exp4")[1]
println.(list_inp[ii]);
inputs=Dict(:input_folder=>"input.with_flt")
MC=MITgcm_config(configuration=config,inputs=inputs)MITgcm.verification_loop — Functionverification_loop(ii=:)Run verification experiments in a loop.
- to override the default MITgcm folder and use your own, set MITgcm_path[1:2]
- all 56 forward experiments should run to completion as expected.
- 10 experiments do not contain an
inputfolder, and will be skipped.
list_skip=[ "tutorial_dic_adjoffline", "tutorial_global_oce_optim", "tutorial_tracer_adjsens" ,
"flt_example", "global_oce_latlon", "global_with_exf",
"bottom_ctrl_5x5", "cpl_aim+ocn","natl_box", "obcs_ctrl"]MITgcm.verification_experiments — Functionverification_experiments()
Get list of all most-standard configurations of MITgcm and return as an Array of MITgcm_config
exps=verification_experiments()verification_experiments(nam::String)Get one configurations of MITgcm and return as a MITgcm_config
advect_xy=verification_experiments("advect_xy")MITgcm.testreport — Functiontestreport(config::MITgcm_config,ext="")Run the testreport script for one model config, with additional options specified in ext if needed.
using MITgcm
testreport(MITgcm_config(configuration="front_relax"))
#testreport(MITgcm_config(configuration="front_relax"),"-norun")