MITgcmTools.jl

Set of tools for running MITgcm, analyzing its results, and preparing model inputs. Examples are provided in test/runtests.jl as well as in examples/run_MITgcm.jl, monitor_run.jl, etc.

Simulated particles from HS94 on cube sphere grid

Index

MITgcm path and run script

The MITgcm_path variable provides the path to the MITgcm folder being used. The MITgcm_compile and MITgcm_run functions can be used to, respectively, compile and run a MITgcm configuration (via the testreport script). An interactive / reactive example can be found in the examples/run_MITgcm.jl Pluto notebook shown below.

Compiling and running MITgcm

Reading MITgcm outputs

MITgcmTools.read_mdsioFunction
read_mdsio(datafile)

Read a MITgcm mdsio file (".data" binary + ".meta" text pair), and return as an Array

p="./hs94.cs-32x32x5/run/"
x=read_mdsio(p*"surfDiag.0000000020.002.001.data")
y=read_mdsio(p*"pickup.ckptA.002.001.data")
z=read_mdsio(p*"T.0000000000.002.001.data")
read_mdsio(pth::String,fil::String)

Read a MITgcm's MDSIO files (".data" binary + ".meta" text pair), combine, and return as an Array

p="./hs94.cs-32x32x5/run/"
x=read_mdsio(p,"surfDiag.0000000020")
y=read_mdsio(p,"pickup.ckptA")
z=read_mdsio(p,"T.0000000000")
MITgcmTools.read_metaFunction
read_meta(metafile)

Read a MITgcm metadata file, parse it, and return as a NamedTuple

p="./hs94.cs-32x32x5/run/"
meta=read_meta(p*"surfDiag.0000000020.002.001.meta")
pairs(meta)
meta.dimList
read_meta(pth::String,fil::String)

Read a MITgcm metadata files, parse them, and return as an array of NamedTuple

p="./hs94.cs-32x32x5/run/"
meta=read_meta(p,"surfDiag.0000000020")
pairs(meta[end])
[meta[i].dimList for i in 1:length(meta)]
MITgcmTools.read_namelistFunction
read_namelist(fil)

Read a MITgcm namelist file, parse it, and return as a NamedTuple

using MITgcmTools
testreport("advect_xy")
fil=joinpath(MITgcm_path,"verification","advect_xy","run","data")
namelist=read_namelist(fil)
MITgcmTools.read_available_diagnosticsFunction
read_available_diagnostics(fldname::String; filename="available_diagnostics.log")

Get the information for a particular variable fldname from the available_diagnostics.log text file generated by MITgcm.

MITgcmTools.read_binFunction
read_bin(fil::String,kt::Union{Int,Missing},kk::Union{Int,Missing},prec::DataType,mygrid::gcmgrid)

Read model output from binary file and convert to MeshArray. Other methods:

read_bin(fil::String,prec::DataType,mygrid::gcmgrid)
read_bin(fil::String,mygrid::gcmgrid)
MITgcmTools.read_fltFunction
read_flt(dirIn::String,prec::DataType)

Read displacements from MITgcm/pkg/flt output file into a DataFrame.

MITgcmTools.read_nctilesFunction
read_nctiles(fileName,fldName,mygrid)

Read model output from NCTiles file and convert to MeshArray instance.

mygrid=GridSpec("LatLonCap")
fileName="nctiles_grid/GRID"
Depth=read_nctiles(fileName,"Depth",mygrid)
hFacC=read_nctiles(fileName,"hFacC",mygrid)
hFacC=read_nctiles(fileName,"hFacC",mygrid,I=(:,:,1))

Format conversions

The impossible MITgcm rendering

MITgcmTools.findtilesFunction
findtiles(ni::Int,nj::Int,mygrid::gcmgrid)
findtiles(ni::Int,nj::Int,grid::String="LatLonCap",GridParentDir="../inputs/GRID_LLC90/")

Return a MeshArray map of tile indices, mytiles["tileNo"], for tile size ni,nj and extract grid variables accordingly.

MITgcmTools.cube2compactFunction
cube2compact(x::Array)

Reshape from e.g. size (192, 32, 5) in cube format to (32, 192, 5) in compact format.

MITgcmTools.compact2cubeFunction
compact2cube(x::Array)

Reshape from e.g. size (32, 192, 5) in cube format to (192, 32, 5) in compact format.

Formulae etc

MITgcmTools.SeaWaterDensityFunction

SeaWaterDensity(Θ,Σ,Π,Π0)

Compute potential density (ρP), in situ density (ρI), and density referenced to PREF (Π0 in decibars) from potential temperature (Θ in °C), salinity (Σ in psu) and pressure (Π in decibars) according to the UNESCO / Jackett & McDougall 1994 equation of state.

Credits: code based on a Matlab implementation by B. Ferron Reference: https://www.jodc.go.jp/info/iocdoc/UNESCOtech/059832eb.pdf Check value: ρI = 1041.83267kg/m^3 for Θ=3°Celcius, Σ=35psu, Π=3000dbar

(ρP,ρI,ρR) = SeaWaterDensity(3.,35.5,3000.)
isapprox(ρI,1041.83267, rtol=1e-6)
MITgcmTools.MixedLayerDepthFunction

MixedLayerDepth(Θ,Σ,Δ,mthd)

Compute mixed layer depth from potential temperature (Θ in °C), salinity (Σ in psu) and depth (Δ in method) according to various formulas (mthd == "BM", "Suga", "Kara"). Inputs must be dense vectors without any missing value (or NaN, etc).

D=collect(0.0:1.0:500.0); tmp=(1.0.-tanh.(5*(-1 .+ 2/D[end]*D)));
T=2.0 .+ 8.0*tmp; S=34.0 .+ 0.5*tmp;
(ρP,ρI,ρR) = SeaWaterDensity(T,S,D);

mld=MixedLayerDepth(T,S,D,"BM"); isapprox(mld,134.0)

using Plots
plot(ρP,-D,w=2,label="Potential Density",ylabel="Depth")
plot!(vec([ρP[1] ρP[end]]),-fill(mld,2),label="Mixed Layer Depth",w=2,c="black",s=:dash)