Browse Source

update to store changes

master
Florian Boergel 3 years ago
parent
commit
e8a534a001
  1. 75
      README.md
  2. 2
      docker-compose.yml
  3. 8
      docker_run.sh
  4. 49
      dockerfile
  5. 26
      model_setup/.ipynb_checkpoints/README-checkpoint.md
  6. 36
      model_setup/.ipynb_checkpoints/cp_forcing-checkpoint
  7. 136
      model_setup/.ipynb_checkpoints/create_model_setup-checkpoint.py
  8. 76
      model_setup/.ipynb_checkpoints/create_submit_python-checkpoint.py
  9. 48
      model_setup/.ipynb_checkpoints/forcing_file-checkpoint.yaml
  10. 71
      model_setup/.ipynb_checkpoints/job_v02_r01-checkpoint
  11. 58
      model_setup/.ipynb_checkpoints/prod_driver-checkpoint
  12. 35
      model_setup/.ipynb_checkpoints/run_script1-checkpoint
  13. 1
      model_setup/RUNYEAR01
  14. BIN
      model_setup/__pycache__/create_submit_python.cpython-37.pyc
  15. BIN
      model_setup/__pycache__/create_submit_python.cpython-38.pyc
  16. BIN
      model_setup/binary/fms_MOM_SIS.x
  17. 136
      model_setup/create_model_setup.py
  18. 45
      model_setup/forcing_file.yaml
  19. 3
      model_setup/git_submit.py
  20. BIN
      model_setup/init/init.tar.gz
  21. BIN
      model_setup/init/ocean_ergom.res.nc
  22. BIN
      model_setup/init/ocean_temp_salt.res.nc
  23. BIN
      model_setup/init/sst_ice_clim.nc
  24. 72
      model_setup/input/data_table
  25. 70
      model_setup/input/data_table~
  26. 2243
      model_setup/input/diag_table
  27. 339
      model_setup/input/diag_table~
  28. 55
      model_setup/input/field_table
  29. BIN
      model_setup/input/grid_spec.nc
  30. 979
      model_setup/input/input.nml
  31. 905
      model_setup/input/input.nml~
  32. 123
      model_setup/input/mask_table.121.14x17
  33. 16
      model_setup/input/mask_table.14.6x7
  34. 38
      model_setup/input/mask_table.36.9x10
  35. 11
      model_setup/input/postprocessing.sh
  36. BIN
      model_setup/input/roughness_cdbot.nc
  37. 323
      model_setup/input/xbt-gen/diag_table.stats
  38. 53
      model_setup/input/xbt-gen/gen_xbts.sh
  39. 39
      model_setup/input/xbt-gen/xbts.balt01
  40. 26
      model_setup/job_driver
  41. 77
      model_setup/job_reference_run50_init
  42. 15
      model_setup/job_submit_git
  43. 71
      model_setup/job_v02_r01
  44. 65
      model_setup/log
  45. 65
      model_setup/logfile
  46. 199
      model_setup/logtest
  47. 331
      model_setup/test
  48. 0
      model_setup/tst

75
README.md

@ -0,0 +1,75 @@
# Docker MOM-5
This repository creates a docker image that compiles MOM5 using Ubuntu 18.04. The docker image can be distributed to students or can be used as a first introductin to MOM5.
This image can be used on your personal computer. However, docker allows multi-processing, hence, computing on the phy server should be also possible.
In the following you will find a step by step guide to run your own first MOM5 ocean only (MOM-SIS) simulation.
## Step-by-step guide
### Install docker on your local machine
Docker Engine is supported on `x86_64` (or `amd64`), `armhf`, and `arm64` architectures.
It is advised to follow the description give on the offical [docker homepage](https://docs.docker.com/engine/install/)
### What is a dockerfile
Probably you are already familiar with Virtual Machine (`VMs`). Docker is similiar. The key difference that docker is is a **container** based technology and containers are just user space of the operating system.
The dockerfile is giving a description on how to build the container.
```docker
FROM ubuntu:18.04
RUN apt-get update && apt-get install -y git \
tcsh \
pkg-config \
gfortran \
netcdf-bin \
libnetcdf-dev \
libnetcdff-dev \
openmpi-bin \
libopenmpi-dev \
libnetcdff-dev \
vim
ADD ModelCode512 /home/mom5/ModelCode512
ADD ERGOM /home/mom5/ERGOM
RUN cd /home/mom5/ModelCode512/
RUN ./build
```
### docker-compose.yml
For largers applications the docker-compose file can give some structure on how to build the application. In this case it might be a little bit over the top.
```docker
services:
MOM:
build: .
image: mom5:0.1
```
### Building the docker image
Use
```bash
./build_docker.sh
```
to build the docker image.
```bash
# cat build_docker.sh
docker-compose -f docker-compose.yml build
```
### docker_run.sh
with ``docker_run.sh`` you can execute
```bash
docker run -it mom5:0.1 bash
```

2
docker-compose.yml

@ -1,4 +1,4 @@
services:
redis:
MOM:
build: .
image: mom5:0.1

8
docker_run.sh

@ -1 +1,7 @@
docker run -it mom5:0.1 bash
#docker run -it mom5:0.1 bash
docker run -v $(pwd)/model_setup:/home/mom5/model_setup \
-v $(pwd)/model_simulations:/home/mom5/model_simulations \
-it mom5:0.1 bash

49
dockerfile

@ -1,17 +1,48 @@
FROM ubuntu:18.04
ENV PATH="/home/mom5/miniconda3/bin:${PATH}"
ARG PATH="/home/mom5/miniconda3/bin:${PATH}"
RUN apt-get update
RUN apt-get update && apt-get install -y git \
tcsh \
pkg-config \
gfortran \
netcdf-bin \
libnetcdf-dev \
libnetcdff-dev \
openmpi-bin \
libopenmpi-dev \
libnetcdff-dev \
vim \
wget
RUN apt-get install -y git tcsh pkg-config
RUN apt-get install -y gfortran
RUN apt-get install -y netcdf-bin libnetcdf-dev libnetcdff-dev
RUN apt-get install -y openmpi-bin libopenmpi-dev
RUN apt-get install -y libnetcdff-dev
RUN apt-get install -y vim
RUN useradd -ms /bin/bash mom5
COPY --chown=mom5:mom5 mom_512_iow /home/mom5/MOM_code
COPY --chown=mom5:mom5 ERGOM /home/mom5/ERGOM
RUN rm -rf /var/lib/apt/lists/*
USER mom5
WORKDIR /home/mom5/
RUN pwd
RUN cd /home/mom5/MOM_code && ./build_pocNP
RUN wget \
https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh \
&& mkdir .conda \
&& bash Miniconda3-latest-Linux-x86_64.sh -b \
&& rm -f Miniconda3-latest-Linux-x86_64.sh
WORKDIR /home/mom5
RUN conda --version && conda init
RUN conda install -y pyyaml pandas xarray netcdf4 scipy
ADD ModelCode512 /home/mom5/ModelCode512
ADD ERGOM /home/mom5/ERGOM

26
model_setup/.ipynb_checkpoints/README-checkpoint.md

@ -0,0 +1,26 @@
# Create MOM Setup from scratch
The idea is that `create_model_setup.py` is the only file that needs to be used for creating a MOM setup.
## Folder structure
* binary/
* fms_MOM_SIS.x
* create_model_setup.py
* create_submit_python.py
* forcing_file.yaml
* init/
* ocean_ergom.res.nc
* ocean_temp_salt.res.nc
* sst_ice_clim.nc
* input/
* data_table
* diag_table
* field_table
* grid_spec.nc
* input.nml
* mask_table.121.14x17
* postprocessing.sh
* roughness_cdbot.nc
## Usage

36
model_setup/.ipynb_checkpoints/cp_forcing-checkpoint

@ -0,0 +1,36 @@
#!/bin/sh
# cp_forcing <zielverz> <jahr>
WDIR=$1
YEAR=$2
# Pegel
ln -sf /gfs2/work/mviowmod/DATABASE/BALTIC_MOM/forcing_950-1800/mom/$YEAR/obc_trop_west.dta.nc $WDIR
# OBCs sind periodisch
#ln -s /gfs2/work/mviowmod/DATABASE/BALTIC_MOM/forcing_950-1800/mom/OBC/Clin/obc_clin_west.dta.nc $WDIR
ln -sf /gfs2/work/mviowmod/DATABASE/BALTIC_MOM/forcing_950-1800/mom/obc_clin_west.dta.nc $WDIR
# atmosphaerischer Antrieb
#cp /gfs2/work/mviowmod/DATABASE/BALTIC_MOM/forcing_950-1800/mom/$YEAR/* $WDIR
#ln -s /gfs2/work/mviowmod/DATABASE/BALTIC_MOM/forcing_950-1800/mom/$YEAR/clour.mom.dta.nc $WDIR
ln -sf /gfs2/work/mviowmod/DATABASE/BALTIC_MOM/forcing_950-1800/mom/$YEAR/lwdn.mom.dta.nc $WDIR
ln -sf /gfs2/work/mviowmod/DATABASE/BALTIC_MOM/forcing_950-1800/mom/$YEAR/pair.mom.dta.nc $WDIR
#ln -s /gfs2/work/mviowmod/DATABASE/BALTIC_MOM/forcing_950-1800/mom/$YEAR/prec.mom.dta.nc $WDIR
ln -sf /gfs2/work/mviowmod/DATABASE/BALTIC_MOM/forcing_950-1800/mom/$YEAR/rain.mom.dta.nc $WDIR
ln -sf /gfs1/work/mvkfbiow/forcing_950-1800/mom/$YEAR/shumi_amplitude_0.4.mom.data.nc $WDIR/shumi.mom.dta.nc
ln -sf /gfs2/work/mviowmod/DATABASE/BALTIC_MOM/forcing_950-1800/mom/$YEAR/snow.mom.dta.nc $WDIR
ln -sf /gfs1/work/mvkfbiow/forcing_950-1800/mom/$YEAR/swdn.rco.dta.nc $WDIR
ln -sf /gfs1/work/mvkfbiow/forcing_950-1800/mom/$YEAR/tairK_amplitude_0.4.mom.data.nc $WDIR/tairK.mom.dta.nc
ln -sf /gfs2/work/mviowmod/DATABASE/BALTIC_MOM/forcing_950-1800/mom/$YEAR/windxy2.mom.dta.nc $WDIR
#ln -s /gfs2/work/mviowmod/DATABASE/BALTIC_MOM/forcing_950-1800/mom/$YEAR/windy.mom.dta.nc $WDIR
#mv $WDIR/lwdn2.mom.dta.nc $WDIR/lwdn.mom.dta.nc
# atmosphaerische Eintraege
ln -sf /gfs2/work/mviowmod/DATABASE/BALTIC_MOM/forcing_950-1800/mom/AtmDep/depflux.nc $WDIR
# diff. Eintraege
ln -sf /gfs2/work/mviowmod/DATABASE/BALTIC_MOM/forcing_950-1800/mom/river/9nm/DIFF_LOADS/0001/diffloads.nc $WDIR
# Flusseintraege
ln -sf /gfs2/work/mviowmod/DATABASE/BALTIC_MOM/forcing_950-1800/mom/river/9nm/RivDat/$YEAR/runoff.nc $WDIR

136
model_setup/.ipynb_checkpoints/create_model_setup-checkpoint.py

@ -0,0 +1,136 @@
import argparse
from pathlib import Path
import shutil
import os
import yaml
import glob
from os import symlink
from stat import *
import pandas as pd
import xarray as xr
import logging
parser = argparse.ArgumentParser()
parser.add_argument("-n", "--name", required=True,
help="Name of model experiment; defines folder name")
parser.add_argument('-nforcing', '--nameforcingfile', required=True, help="Name of forcing file")
parser.add_argument("-inputfolder", required=True, help="Folder containing setup dependent files")
parser.add_argument("-logname", help = "name of log file created; default 'logfile'")
period = parser.add_argument_group('Time range', 'Defines simulation period')
period.add_argument('-begin', required = True, help='Begin of simulation')
period.add_argument('-end', required= True, help='End of simulation')
args = parser.parse_args()
if args.logname:
logging.basicConfig(level=logging.DEBUG, filename="{}".format(args.logname), filemode="a+",
format="%(asctime)-15s %(levelname)-8s %(message)s")
else:
logging.basicConfig(level=logging.DEBUG, filename="logfile", filemode="a+",
format="%(asctime)-15s %(levelname)-8s %(message)s")
if args.name:
logging.info("Creating model setup ../model_simulations/{}".format(args.name))
Path("../model_simulations/{}".format(args.name)).mkdir(parents=True, exist_ok=True)
logging.info("Creating folders for years {} to {} with INPUT/ and RESTART/".format(args.begin, args.end))
for year in range(int(args.begin), int(args.end)):
dirpath = "../model_simulations/{}/{}".format(args.name, year)
Path(dirpath).mkdir(exist_ok=False)
Path(dirpath + "/INPUT").mkdir(exist_ok=True)
Path(dirpath + "/RESTART").mkdir(exist_ok=True)
shutil.copyfile("binary/fms_MOM_SIS.x", dirpath + "/fms_MOM_SIS.x")
for filename in glob.glob("init/*.nc"):
logging.info("Copying from initfolder ... {}".format(filename))
shutil.copy(filename, dirpath + "/INPUT/.")
for filename in glob.glob(args.inputfolder + "/*"):
logging.info("Copying {} ...".format(filename))
try:
shutil.copy(filename, dirpath + "/.")
except:
logging.info("Skipping directory in {}".format(args.inputfolder))
for mask_table in glob.glob(dirpath + "/mask_table.*"):
logging.info("Moving mask table to INPUT/.")
shutil.move(mask_table, dirpath + "/INPUT/.")
logging.info("Moving roughness_cdbot.nc and grid_spec.nc to INPUT/.")
shutil.move(dirpath + "/roughness_cdbot.nc", dirpath + "/INPUT/.")
shutil.move(dirpath + "/grid_spec.nc", dirpath + "/INPUT/.")
logging.info("Changing file permissions")
for filename in glob.glob(dirpath + "/*.*"):
os.chmod(filename, 0o664)
os.chmod(dirpath + "/fms_MOM_SIS.x", 0o755)
logging.info("Linking forcing ...")
with open(args.nameforcingfile) as file:
forcingfile = yaml.load(file, Loader=yaml.FullLoader)
for keys, forcingelement in forcingfile.items():
logging.info("{} to INPUT/{}".format(forcingelement['path'].replace("$YEAR", str(year)), forcingelement["name"]))
os.symlink(forcingelement['path'].replace("$YEAR", str(year)), dirpath + "/INPUT/{}".format(forcingelement['name']))
### The following procedure checks whether the defined variable names in the data_table
### is in the defined forcing in args.nameforcingfile
data = pd.read_table(dirpath + "/data_table", skiprows = 4, delimiter=",", header = None).dropna()
data = data[data[3].str.contains(forcingelement["name"])]
if data is not None:
for line in range(len(data)):
try:
_ = xr.open_dataset(forcingelement['path'].replace("$YEAR", str(year)), decode_times = False)[data.iloc[line][2].replace('"','').strip()]
except Exception as e:
logging.warning("{} with variable {} could not be opened".format(forcingelement['path'].replace("$YEAR", str(year)), data.iloc[line][2].replace('"','').strip()))
### end validation of forcing
logging.info("Writing experiment name to diag_table")
diag_table = pd.read_table(args.inputfolder + "/diag_table", skiprows = 2)
with open(dirpath + "/diag_table") as f:
lines = f.readlines()
lines[0] = '"' + str(args.name) + '"\n'
lines[1] = str(args.begin) + " 2 1 0 0 0\n"
with open(dirpath + "/diag_table", 'w') as f:
f.writelines(lines)
# logging.info("Creating job script")
# run = jobscript(name = str(args.name),
# cluster = "HLRN",
# walltime = "12:00:00",
# nodes = 20,
# ey = args.end,
# number_of_loops = 5,
# projectname = str(args.name),
# folder = "",
# ppn = 5)
# run.writeHeader()
# run.writeLoop()
# run.fileclose()
# shutil.move("{}".format(args.name), dirpath + "/../.")
# os.chmod(dirpath + "/../{}".format(args.name), 0o755)
shutil.copy("job_driver", dirpath + "/../.")
shutil.copy("job_v02_r01", dirpath + "/../job_{}".format(args.name))
with open(dirpath + "/../job_driver") as f:
lines = f.readlines()
lines[3] = "job=job_{}\n".format(args.name)
with open(dirpath + "/../job_driver", 'w') as f:
f.writelines(lines)
with open(dirpath + "/../job_{}".format(args.name)) as f:
lines = f.readlines()
lines[27] = "EY={}\n".format(args.end)
with open(dirpath + "/../job_{}".format(args.name), 'w') as f:
f.writelines(lines)
with open(dirpath +"/../RUNYEAR01", 'w') as f:
f.write(args.begin)
print("Remember to set months to 11 in input nml for {}".format(args.begin))

76
model_setup/.ipynb_checkpoints/create_submit_python-checkpoint.py

@ -0,0 +1,76 @@
import numpy as np
import argparse
class jobscript():
def __init__(self,
name,
cluster,
walltime,
nodes,
ey,
folder,
ppn,
number_of_loops,
projectname=None):
self.name = name
self.cluster = cluster
self.walltime = walltime
self.nodes = nodes
self.ppn = ppn
self.folder = folder
self.bin = "fms_MOM_SIS.x"
self.EY = ey
if projectname:
self.project = projectname
self.loops = number_of_loops
self.f = open(name, 'w')
def writeHeader(self):
self.f.write("#!/bin/bash\n")
if self.cluster == 'hlrn' or self.cluster == 'HLRN':
self.f.write('#PBS -N {} \n'.format(self.name))
self.f.write('#PBS -l nodes={}:ppn{}\n'.format(self.nodes,
self.ppn))
self.f.write('#PBS -l walltime={}\n'.format(self.walltime))
self.f.write("#PBS -j oe \n" + '#PBS -l feature=mpp\n')
self.f.write("#PBS -A {} \n".format(self.project))
self.f.write("EXPDIR={}\n".format(self.folder))
self.f.write("BIN={}\n".format(self.bin))
self.f.write("COUNTER=RUNYEAR01\n")
self.f.write("EY={}\n".format(self.EY))
def writeLoop(self):
self.f.write("YEAR=`cat $COUNTER`\n")
self.f.write("for i in {{1..{}}}\n".format(self.loops))
self.f.write("do\n" +
" if [ $YEAR -le $EY ]; then\n" +
" cd ./${EXPDIR}${YEAR}\n" +
" let 'YEAR = YEAR + 1'\n" +
" echo $YEAR > ../$COUNTER\n" +
" echo $YEAR\n" +
" date > start\n" +
" aprun -n 117 ./$BIN > ergom.out\n" +
" date > end\n" +
" fi\n"+
" if grep NaN ergom.out > /dev/null ; then\n"+
" let 'YEAR = EY + 1'\n" +
" fi\n" +
" if grep MPP_STACK ergom.out > /dev/null ; then\n"+
" echo okay\n" +
" else\n"+
" let 'YEAR = EY + 1'\n"+
" fi\n" +
" if [ $YEAR -le $EY ]; then\n" +
" cp RESTART/* ../${EXPDIR}${YEAR}/INPUT\n" +
" echo $YEAR data copied to concecutive directory\n" +
" fi\n" +
"done\n")
def fileclose(self):
if self.f:
self.f.close()
self.f = None

48
model_setup/.ipynb_checkpoints/forcing_file-checkpoint.yaml

@ -0,0 +1,48 @@
obc_barotrop:
path: /scratch/usr/mviowmod/DATABASE/METEO/INFLOW1000_Forcing/OBC_TROP_8nm/$YEAR/obc_trop_west.dta.nc
name: obc_trop_west.dta.nc
obc_barocline:
path: /scratch/usr/mviowmod/DATABASE/OBC_CLIN/SKAG_8nm/obc_clin_westIFLOW_1000.dta.nc
name: obc_clin_west.dta.nc
lwdn:
path: /scratch/usr/mviowmod/DATABASE/METEO/INFLOW1000_Forcing/$YEAR/lwdn.mom.dta.nc
name: lwdn.mom.dta.nc
pair:
path: /scratch/usr/mviowmod/DATABASE/METEO/INFLOW1000_Forcing/$YEAR/pair.mom.dta.nc
name: pair.mom.dta.nc
rain:
path: /scratch/usr/mviowmod/DATABASE/METEO/INFLOW1000_Forcing/$YEAR/rain.mom.dta.nc
name: rain.mom.dta.nc
shumi:
path: /scratch/usr/mviowmod/DATABASE/METEO/INFLOW1000_Forcing/$YEAR/shumi.mom.dta.nc
name: shumi.mom.dta.nc
snow:
path: /scratch/usr/mviowmod/DATABASE/METEO/INFLOW1000_Forcing/$YEAR/snow.mom.dta.nc
name: snow.mom.dta.nc
swdn:
path: /scratch/usr/mviowmod/DATABASE/METEO/INFLOW1000_Forcing/$YEAR/swdn.mom.dta.nc
name: swdn.mom.dta.nc
tair:
path: /scratch/usr/mviowmod/DATABASE/METEO/INFLOW1000_Forcing/$YEAR/tairK.mom.dta.nc
name: tairK.mom.dta.nc
wind:
path: /scratch/usr/mviowmod/DATABASE/METEO/INFLOW1000_Forcing/$YEAR/windxy.mom.dta.nc
name: windxy.mom.dta.nc
gustiness:
path: /scratch/usr/mviowmod/DATABASE/METEO/INFLOW1000_Forcing/$YEAR/gustiness.mom.dta.nc
name: gustiness.mom.dta.nc
depflux:
path: /scratch/usr/mviowmod/DATABASE/METEO/INFLOW1000_Forcing/AtmDep/depflux.nc
name: depflux.nc
diffloads:
path: /scratch/usr/mviowmod/DATABASE/METEO/INFLOW1000_Forcing/DiffLoads/diffloads.nc
name: diffloads.nc
runoff:
path: /scratch/usr/mviowmod/DATABASE/METEO/INFLOW1000_Forcing/RivDat/$YEAR/runoff.nc
name: runoff.nc
pco2:
path: /scratch/usr/mviowmod/DATABASE/AtmPCO2/pco2.nc
name: pco2.nc

71
model_setup/.ipynb_checkpoints/job_v02_r01-checkpoint

@ -0,0 +1,71 @@
#!/bin/bash
#SBATCH -t 12:00:00
#SBATCH -N 1
#SBATCH --tasks-per-node 96
#SBATCH -p standard96
##SBATCH -p standard96:test
#SBATCH -A mvkfbiow
#export I_MPI_PMI_LIBRARY=libpmi.so
#export I_MPI_FABRICS=shm:ofi
#export I_MPI_OFI_PROVIDER=psm2
export SLURM_CPU_BIND=none
# load modules
module unload netcdf
module unload intel/compiler
module unload openmpi
module unload impi
module unload intel/mpi
module load intel/18.0.6
module load impi/2018.5
NUMPE=91
# Anzahl der Jahre
NOCY=30
COUNTER=RUNYEAR01
EY=1798
BIN=fms_MOM_SIS.x
YEAR=`cat $COUNTER`
######################################################
CY=1
while [ $CY -le $NOCY ]
do
let "CY = CY + 1"
if [ $YEAR -le $EY ]; then
cd ./${YEAR}
echo $YEAR
let "YEAR = YEAR + 1"
echo $YEAR > ../$COUNTER
date > start
# mpirun -n $NUMPE ./$BIN > ergom.out
srun --mpi=pmi2 -n $NUMPE ./$BIN > ergom.out
date > end
sbatch ./postprocessing.sh
fi
if grep NaN ergom.out > /dev/null ; then
let "YEAR = EY + 1"
fi
if grep MPP_STACK ergom.out > /dev/null ; then
echo okay
else
let "YEAR = EY + 1"
fi
if [ $YEAR -le $EY ]; then
cp RESTART/* ../${YEAR}/INPUT
echo $YEAR data copied to consecutive directory
fi
cd ..
done
#######################################################

58
model_setup/.ipynb_checkpoints/prod_driver-checkpoint

@ -0,0 +1,58 @@
#!/bin/sh
#################
##
## make sure all fits your experiment:
#
## YEAR
## WZ
## BINARY
## NAMELIST
## TOPO
## POST_STUFF
## editieren
##
#################
YEAR=962
INIT=1
while [[ $YEAR -le 1100 ]]
do
WZ=${YEAR}
echo $WZ
if [[ -e $WZ ]]
then
echo directory $WZ exists
exit 1
fi
# verzeichnise anlegen
mkdir $WZ
mkdir ${WZ}/INPUT
mkdir ${WZ}/RESTART
# init daten kopieren
if [ $INIT -eq 1 ]; then
INIT=0
cp init/* ${WZ}/INPUT
fi
# binary copieren
cp binary/fms_MOM_SIS.x ${WZ}/fms_MOM_SIS.x
chmod a+rx ${WZ}/fms_MOM_SIS.x
# forcing kopieren
./cp_forcing ${WZ}/INPUT $YEAR
# topo, namelist etc kopieren
cp input/* $WZ
mv $WZ/mask_table.* $WZ/INPUT
mv $WZ/roughness_cdbot.nc $WZ/INPUT
mv $WZ/grid_spec.nc $WZ/INPUT
# results
# mal sehen, was hier noch hinkommt
let "YEAR = YEAR + 1"
chmod a+r $WZ/*
done

35
model_setup/.ipynb_checkpoints/run_script1-checkpoint

@ -0,0 +1,35 @@
#!/bin/bash
#PBS -N run_script1
#PBS -j oe
#PBS -l feature=mpp
#PBS -l nodes=20:ppn5
#PBS -l walltime 12:00:00
EXPDIR=bla
BIN=fms_MOM_SIS.x
COUNTER=RUNYEAR01
EY=1800
YEAR=`cat $COUNTER`
for i in {1..5}
if [ $YEAR -le $EY ]; then
cd ./${EXPDIR}${YEAR}
let 'YEAR = YEAR + 1'
echo $YEAR > ../$COUNTER
echo $YEAR
date > start
aprun -n 117 ./$BIN > ergom.out
date > end
fi
if grep NaN ergom.out > /dev/null ; then
let 'YEAR = EY + 1'
fi+
if grep MPP_STACK ergom.out > /dev/null ; then
echo okay
else
let 'YEAR = EY + 1'
fi
if [ $YEAR -le $EY ]; then
cp RESTART/* ../${EXPDIR}${YEAR}/INPUT
echo $YEAR data copied to concecutive directory
fi
fi

1
model_setup/RUNYEAR01

@ -0,0 +1 @@
1101

BIN
model_setup/__pycache__/create_submit_python.cpython-37.pyc

Binary file not shown.

BIN
model_setup/__pycache__/create_submit_python.cpython-38.pyc

Binary file not shown.

BIN
model_setup/binary/fms_MOM_SIS.x

Binary file not shown.

136
model_setup/create_model_setup.py

@ -0,0 +1,136 @@
import argparse
from pathlib import Path
import shutil
import os
import yaml
import glob
from os import symlink
from stat import *
import pandas as pd
import xarray as xr
import logging
parser = argparse.ArgumentParser()
parser.add_argument("-n", "--name", required=True,
help="Name of model experiment; defines folder name")
parser.add_argument('-nforcing', '--nameforcingfile', required=True, help="Name of forcing file")
parser.add_argument("-inputfolder", required=True, help="Folder containing setup dependent files")
parser.add_argument("-logname", help = "name of log file created; default 'logfile'")
period = parser.add_argument_group('Time range', 'Defines simulation period')
period.add_argument('-begin', required = True, help='Begin of simulation')
period.add_argument('-end', required= True, help='End of simulation')
args = parser.parse_args()
if args.logname:
logging.basicConfig(level=logging.DEBUG, filename="{}".format(args.logname), filemode="a+",
format="%(asctime)-15s %(levelname)-8s %(message)s")
else:
logging.basicConfig(level=logging.DEBUG, filename="logfile", filemode="a+",
format="%(asctime)-15s %(levelname)-8s %(message)s")
if args.name:
logging.info("Creating model setup ../model_simulations/{}".format(args.name))
Path("../model_simulations/{}".format(args.name)).mkdir(parents=True, exist_ok=True)
logging.info("Creating folders for years {} to {} with INPUT/ and RESTART/".format(args.begin, args.end))
for year in range(int(args.begin), int(args.end)):
dirpath = "../model_simulations/{}/{}".format(args.name, year)
Path(dirpath).mkdir(exist_ok=False)
Path(dirpath + "/INPUT").mkdir(exist_ok=True)
Path(dirpath + "/RESTART").mkdir(exist_ok=True)
shutil.copyfile("binary/fms_MOM_SIS.x", dirpath + "/fms_MOM_SIS.x")
for filename in glob.glob("init/*.nc"):
logging.info("Copying from initfolder ... {}".format(filename))
shutil.copy(filename, dirpath + "/INPUT/.")
for filename in glob.glob(args.inputfolder + "/*"):
logging.info("Copying {} ...".format(filename))
try:
shutil.copy(filename, dirpath + "/.")
except:
logging.info("Skipping directory in {}".format(args.inputfolder))
for mask_table in glob.glob(dirpath + "/mask_table.*"):
logging.info("Moving mask table to INPUT/.")
shutil.move(mask_table, dirpath + "/INPUT/.")
logging.info("Moving roughness_cdbot.nc and grid_spec.nc to INPUT/.")
shutil.move(dirpath + "/roughness_cdbot.nc", dirpath + "/INPUT/.")
shutil.move(dirpath + "/grid_spec.nc", dirpath + "/INPUT/.")
logging.info("Changing file permissions")
for filename in glob.glob(dirpath + "/*.*"):
os.chmod(filename, 0o664)
os.chmod(dirpath + "/fms_MOM_SIS.x", 0o755)
logging.info("Linking forcing ...")
with open(args.nameforcingfile) as file:
forcingfile = yaml.load(file, Loader=yaml.FullLoader)
for keys, forcingelement in forcingfile.items():
logging.info("{} to INPUT/{}".format(forcingelement['path'].replace("$YEAR", str(year)), forcingelement["name"]))
os.symlink(forcingelement['path'].replace("$YEAR", str(year)), dirpath + "/INPUT/{}".format(forcingelement['name']))
### The following procedure checks whether the defined variable names in the data_table
### is in the defined forcing in args.nameforcingfile
data = pd.read_table(dirpath + "/data_table", skiprows = 4, delimiter=",", header = None).dropna()
data = data[data[3].str.contains(forcingelement["name"])]
if data is not None:
for line in range(len(data)):
try:
_ = xr.open_dataset(forcingelement['path'].replace("$YEAR", str(year)), decode_times = False)[data.iloc[line][2].replace('"','').strip()]
except Exception as e:
logging.warning("{} with variable {} could not be opened".format(forcingelement['path'].replace("$YEAR", str(year)), data.iloc[line][2].replace('"','').strip()))
### end validation of forcing
logging.info("Writing experiment name to diag_table")
diag_table = pd.read_table(args.inputfolder + "/diag_table", skiprows = 2)
with open(dirpath + "/diag_table") as f:
lines = f.readlines()
lines[0] = '"' + str(args.name) + '"\n'
lines[1] = str(args.begin) + " 2 1 0 0 0\n"
with open(dirpath + "/diag_table", 'w') as f:
f.writelines(lines)
# logging.info("Creating job script")
# run = jobscript(name = str(args.name),
# cluster = "HLRN",
# walltime = "12:00:00",
# nodes = 20,
# ey = args.end,
# number_of_loops = 5,
# projectname = str(args.name),
# folder = "",
# ppn = 5)
# run.writeHeader()
# run.writeLoop()
# run.fileclose()
# shutil.move("{}".format(args.name), dirpath + "/../.")
# os.chmod(dirpath + "/../{}".format(args.name), 0o755)
shutil.copy("job_driver", dirpath + "/../.")
shutil.copy("job_v02_r01", dirpath + "/../job_{}".format(args.name))
with open(dirpath + "/../job_driver") as f:
lines = f.readlines()
lines[3] = "job=job_{}\n".format(args.name)
with open(dirpath + "/../job_driver", 'w') as f:
f.writelines(lines)
with open(dirpath + "/../job_{}".format(args.name)) as f:
lines = f.readlines()
lines[27] = "EY={}\n".format(args.end)
with open(dirpath + "/../job_{}".format(args.name), 'w') as f:
f.writelines(lines)
with open(dirpath +"/../RUNYEAR01", 'w') as f:
f.write(args.begin)
print("Remember to set months to 11 in input nml for {}".format(args.begin))

45
model_setup/forcing_file.yaml

@ -0,0 +1,45 @@
obc_barotrop:
path: /home/mom5/model_setup/data/$YEAR/obc_trop_west.dta.nc
name: obc_trop_west.dta.nc
obc_barocline:
path: /home/mom5/model_setup/data/obc_clin_west.dta.nc
name: obc_clin_west.dta.nc
lwdn:
path: /home/mom5/model_setup/data/$YEAR/lwdn.mom.dta.nc
name: lwdn.mom.dta.nc
pair:
path: /home/mom5/model_setup/data/$YEAR/pressure.mom.dta.nc
name: pressure.mom.dta.nc
rain:
path: /home/mom5/model_setup/data/$YEAR/rain.mom.dta.nc
name: rain.mom.dta.nc
shumi:
path: /home/mom5/model_setup/data/$YEAR/shumi.mom.dta.nc
name: shumi.mom.dta.nc
snow:
path: /home/mom5/model_setup/data/$YEAR/snow.mom.dta.nc
name: snow.mom.dta.nc
swdn:
path: /home/mom5/model_setup/data/$YEAR/swdn.mom.dta.nc
name: swdn.mom.dta.nc
tair:
path: /home/mom5/model_setup/data/$YEAR/tair.mom.dta.nc
name: tair.mom.dta.nc
wind:
path: /home/mom5/model_setup/data/$YEAR/windxy.mom.dta.nc
name: windxy.mom.dta.nc
gustiness:
path: /home/mom5/model_setup/data/$YEAR/gustiness.mom.dta.nc
name: gustiness.mom.dta.nc
depflux:
path: /home/mom5/model_setup/data/AtmDep/depflux.nc
name: depflux.nc
diffloads:
path: /home/mom5/model_setup/data/DiffLoads/diffloads.nc
name: diffloads.nc
runoff:
path: /home/mom5/model_setup/data/$YEAR/runoff.nc
name: runoff.nc

3
model_setup/git_submit.py

@ -0,0 +1,3 @@
import subprocess
subprocess.call("git push --repo git@github.hlrn:florianboergel/950-1800-mom-ergom.git", shell=True)

BIN
model_setup/init/init.tar.gz

Binary file not shown.

BIN
model_setup/init/ocean_ergom.res.nc

Binary file not shown.

BIN
model_setup/init/ocean_temp_salt.res.nc

Binary file not shown.

BIN
model_setup/init/sst_ice_clim.nc

Binary file not shown.

72
model_setup/input/data_table

@ -0,0 +1,72 @@
# format for data_table:
# gridname, fieldname_code, fieldname_file, filename, ongrid, factor
# If user wants to override fieldname_code with a const set fieldname_file = ""
# and factor = const
"ATM", "slp" , "pair" , "./INPUT/pair.mom.dta.nc" ,"default", 1.0
"ATM", "p_surf" , "pair" , "./INPUT/pair.mom.dta.nc" ,"default", 1.0
"ATM", "p_bot" , "pair" , "./INPUT/pair.mom.dta.nc" ,"default", 1.0
"ATM", "t_bot" , "tairK" , "./INPUT/tair.mom.dta.nc" ,"default", 1.0
"ATM", "sphum_bot" , "shumi" , "./INPUT/shumi.mom.dta.nc" ,"default", 1.0
"ATM", "u_bot" , "windx" , "./INPUT/windxy.mom.dta.nc" ,"bicubic", 1.0
"ATM", "v_bot" , "windy" , "./INPUT/windxy.mom.dta.nc" ,"bicubic", 1.0
"ATM", "z_bot" , "" , "" ,"default", 10.0
#"ATM", "gust" ,"" , "" ,"default", 0.0
"ATM", "gust" , "gustiness", "./INPUT/gustiness.mom.dta.nc","bicubic", 0.5
"ATM", "t_n2_flux_pcair_atm", "" , "" ,"default", 0.78084
"ATM", "t_o2_flux_pcair_atm", "" , "" ,"default", 0.20942
#"ATM", "co2_flux_pcair_atm", "" , "" ,"default", 0.00038
#"ATM", "co2_flux_pcair_atm", "carbon_dioxide", "./INPUT/pco2.nc" ,"default", 1.0
"ICE", "lw_flux_dn" , "lwdn" , "./INPUT/lwdn.mom.dta.nc" ,"default", 1.0
"ICE", "sw_flux_vis_dir_dn", "swdn" , "./INPUT/swdn.mom.dta.nc" ,"default", 1.0
"ICE", "lprec" , "rain" , "./INPUT/rain.mom.dta.nc" ,"default", 0.8
"ICE", "fprec" , "snow" , "./INPUT/snow.mom.dta.nc" ,"default", 0.8
"ICE", "runoff" , "runoff" , "./INPUT/runoff.nc" ,"none", 1.0
"ICE", "calving" , "" , "" ,"default", 0.0
"ICE", "dhdt" , "" , "" ,"default", 40.0
"ICE", "dedt" , "" , "" ,"default", 2.0e-6
"ICE", "drdt" , "" , "" ,"default", 10.0
"ICE", "sic_obs" , "SIC" , "./INPUT/sst_ice_clim.nc" ,"default", 0.0
"ICE", "sit_obs" , "SIT" , "./INPUT/sst_ice_clim.nc" ,"default", 0.0
"ICE", "sst_obs" , "SST" , "./INPUT/sst_ice_clim.nc" ,"default", 1.0
"LND", "t_surf" , "" , "" ,"default", 273.0
"LND", "t_ca" , "" , "" ,"default", 273.0
"LND", "q_ca" , "" , "" ,"default", 0.0
"LND", "rough_mom" , "" , "" ,"default", 0.01
"LND", "rough_heat" , "" , "" ,"default", 0.1
"LND", "albedo" , "" , "" ,"default", 0.1
"LND", "t_ca" , "" , "" ,"default", 273.0
"LND", "t_surf" , "" , "" ,"default", 273.0
"LND", "q_ca" , "" , "" ,"default", 0.0
"LND", "t_flux" , "" , "" ,"default", 0.0
"LND", "q_flux" , "" , "" ,"default", 0.0
"LND", "lw_flux" , "" , "" ,"default", 0.0
"LND", "sw_flux" , "" , "" ,"default", 0.0
"LND", "lprec" , "" , "" ,"default", 0.0
"LND", "fprec" , "" , "" ,"default", 0.0
"LND", "dhdt" , "" , "" ,"default", 5.0
"LND", "dedt" , "" , "" ,"default", 2e-6
"LND", "dedq" , "" , "" ,"default", 0.0
"LND", "drdt" , "" , "" ,"default", 5.0
"LND", "drag_q" , "" , "" ,"default", 0.0
"LND", "p_surf" , "" , "" ,"default", 1.e5
"OCN", "u_bot" , "windx" , "./INPUT/windxy.mom.dta.nc" ,"bicubic", 1.0
"OCN", "v_bot" , "windy" , "./INPUT/windxy.mom.dta.nc" ,"bicubic", 1.0
"OCN", "runoff_salt_flux_ice_ocn", "", "" ,"default", 0.001
"OCN", "runoff_temp_flux_ice_ocn", "temp", "./INPUT/runoff.nc" ,"none", 1.0
#
"OCN", "runoff_t_o2_flux_ice_ocn", "", "" ,"none", 0.00035
"OCN", "runoff_t_dic_flux_ice_ocn", "t_dic", "./INPUT/runoff.nc" ,"none", 1.0
"OCN", "runoff_t_alk_flux_ice_ocn", "t_alk", "./INPUT/runoff.nc" ,"none", 1.0
# wegen 20% erhoehten runoff weniger load Konzentration, fuer river-N 75%, river-P 100%
# weil P durch Det. Reduktion auch reduziert wird, Ausgleich durch mehr PO4
# der Erhoehungsfaktor ist 1.4412, beruecksichtigt erhoehter runoff -> 1.201
"OCN", "runoff_t_nh4_flux_ice_ocn", "t_nh4", "./INPUT/runoff.nc" ,"none", 1.0
"OCN", "dry_dep_t_no3_flux_ice_ocn", "t_no3", "./INPUT/diffloads.nc" ,"none", -1.0
"OCN", "runoff_t_no3_flux_ice_ocn", "t_no3", "./INPUT/runoff.nc" ,"none", 1.0
"OCN", "dry_dep_t_po4_flux_ice_ocn", "t_po4", "./INPUT/diffloads.nc" ,"none", -1.0
"OCN", "runoff_t_po4_flux_ice_ocn", "t_po4", "./INPUT/runoff.nc" ,"none", 1.0
"OCN", "runoff_t_det_flux_ice_ocn", "t_det", "./INPUT/runoff.nc" ,"none", 1.0
"OCN", "wet_dep_t_nh4_flux_ice_ocn", "t_nh4_wet_dep","./INPUT/depflux.nc", "none" , -1.0
"OCN", "wet_dep_t_no3_flux_ice_ocn", "t_no3_wet_dep","./INPUT/depflux.nc", "none" , -1.0
"OCN", "wet_dep_t_po4_flux_ice_ocn", "t_po4_wet_dep","./INPUT/depflux.nc", "none" , -1.0

70
model_setup/input/data_table~

@ -0,0 +1,70 @@
# format for data_table:
# gridname, fieldname_code, fieldname_file, filename, ongrid, factor
# If user wants to override fieldname_code with a const set fieldname_file = ""
# and factor = const
"ATM", "slp" , "pair" , "./INPUT/pair.mom.dta.nc" ,"default", 1.0
"ATM", "p_surf" , "pair" , "./INPUT/pair.mom.dta.nc" ,"default", 1.0
"ATM", "p_bot" , "pair" , "./INPUT/pair.mom.dta.nc" ,"default", 1.0
"ATM", "t_bot" , "tairK" , "./INPUT/tairK.mom.dta.nc" ,"default", 1.0
"ATM", "sphum_bot" , "shumi" , "./INPUT/shumi.mom.dta.nc" ,"default", 1.0
"ATM", "u_bot" , "WINDX" , "./INPUT/windxy.mom.dta.nc" ,"bicubic", 1.0
"ATM", "v_bot" , "WINDY" , "./INPUT/windxy.mom.dta.nc" ,"bicubic", 1.0
"ATM", "z_bot" , "" , "" ,"default", 10.0
"ATM", "gust" , "" , "" ,"default", 0.0
"ATM", "t_n2_flux_pcair_atm", "" , "" ,"default", 0.78084
"ATM", "t_o2_flux_pcair_atm", "" , "" ,"default", 0.20942
"ATM", "co2_flux_pcair_atm", "" , "" ,"default", 0.00038
"ICE", "lw_flux_dn" , "lwdn" , "./INPUT/lwdn.mom.dta.nc" ,"default", 1.0
"ICE", "sw_flux_vis_dir_dn", "swdn" , "./INPUT/swdn.mom.dta.nc" ,"default", 1.0
"ICE", "lprec" , "rain" , "./INPUT/rain.mom.dta.nc" ,"default", 1.0
"ICE", "fprec" , "snow" , "./INPUT/snow.mom.dta.nc" ,"default", 1.0
"ICE", "runoff" , "runoff" , "./INPUT/runoff.nc" ,"none", 1.0
"ICE", "calving" , "" , "" ,"default", 0.0
"ICE", "dhdt" , "" , "" ,"default", 40.0
"ICE", "dedt" , "" , "" ,"default", 2.0e-6
"ICE", "drdt" , "" , "" ,"default", 10.0
"ICE", "sic_obs" , "SIC" , "./INPUT/sst_ice_clim.nc" ,"default", 0.0
"ICE", "sit_obs" , "SIT" , "./INPUT/sst_ice_clim.nc" ,"default", 0.0
"ICE", "sst_obs" , "SST" , "./INPUT/sst_ice_clim.nc" ,"default", 1.0
"LND", "t_surf" , "" , "" ,"default", 273.0
"LND", "t_ca" , "" , "" ,"default", 273.0
"LND", "q_ca" , "" , "" ,"default", 0.0
"LND", "rough_mom" , "" , "" ,"default", 0.01
"LND", "rough_heat" , "" , "" ,"default", 0.1
"LND", "albedo" , "" , "" ,"default", 0.1
"LND", "t_ca" , "" , "" ,"default", 273.0
"LND", "t_surf" , "" , "" ,"default", 273.0
"LND", "q_ca" , "" , "" ,"default", 0.0
"LND", "t_flux" , "" , "" ,"default", 0.0
"LND", "q_flux" , "" , "" ,"default", 0.0
"LND", "lw_flux" , "" , "" ,"default", 0.0
"LND", "sw_flux" , "" , "" ,"default", 0.0
"LND", "lprec" , "" , "" ,"default", 0.0
"LND", "fprec" , "" , "" ,"default", 0.0
"LND", "dhdt" , "" , "" ,"default", 5.0
"LND", "dedt" , "" , "" ,"default", 2e-6
"LND", "dedq" , "" , "" ,"default", 0.0
"LND", "drdt" , "" , "" ,"default", 5.0
"LND", "drag_q" , "" , "" ,"default", 0.0
"LND", "p_surf" , "" , "" ,"default", 1.e5
"OCN", "u_bot" , "WINDX" , "./INPUT/windxy.mom.dta.nc" ,"bicubic", 1.0
"OCN", "v_bot" , "WINDY" , "./INPUT/windxy.mom.dta.nc" ,"bicubic", 1.0
"OCN", "runoff_salt_flux_ice_ocn", "", "" ,"default", 0.001
"OCN", "runoff_temp_flux_ice_ocn", "temp", "./INPUT/runoff.nc" ,"none", 1.0
#
"OCN", "runoff_t_o2_flux_ice_ocn", "", "" ,"none", 0.00035
"OCN", "runoff_t_dic_flux_ice_ocn", "t_dic", "./INPUT/runoff.nc" ,"none", 1.0
"OCN", "runoff_t_alk_flux_ice_ocn", "t_alk", "./INPUT/runoff.nc" ,"none", 1.0
# wegen 20% erhoehten runoff weniger load Konzentration, fuer river-N 75%, river-P 100%
# weil P durch Det. Reduktion auch reduziert wird, Ausgleich durch mehr PO4
# der Erhoehungsfaktor ist 1.4412, beruecksichtigt erhoehter runoff -> 1.201
"OCN", "runoff_t_nh4_flux_ice_ocn", "t_nh4", "./INPUT/runoff.nc" ,"none", 1.0
"OCN", "dry_dep_t_no3_flux_ice_ocn", "t_no3", "./INPUT/diffloads.nc" ,"none", -1.0
"OCN", "runoff_t_no3_flux_ice_ocn", "t_no3", "./INPUT/runoff.nc" ,"none", 1.0
"OCN", "dry_dep_t_po4_flux_ice_ocn", "t_po4", "./INPUT/diffloads.nc" ,"none", -1.0
"OCN", "runoff_t_po4_flux_ice_ocn", "t_po4", "./INPUT/runoff.nc" ,"none", 1.0
"OCN", "runoff_t_det_flux_ice_ocn", "t_det", "./INPUT/runoff.nc" ,"none", 1.0
"OCN", "wet_dep_t_nh4_flux_ice_ocn", "t_nh4_wet_dep","./INPUT/depflux.nc", "default" , -1.0
"OCN", "wet_dep_t_no3_flux_ice_ocn", "t_no3_wet_dep","./INPUT/depflux.nc", "default" , -1.0
"OCN", "wet_dep_t_po4_flux_ice_ocn", "t_po4_wet_dep","./INPUT/depflux.nc", "default" , -1.0

2243
model_setup/input/diag_table

File diff suppressed because it is too large Load Diff

339
model_setup/input/diag_table~

@ -0,0 +1,339 @@
"ERGOM2.0-MOM5.12 3 n.m. coastDat2 Forcing RUN V02R58"
1850 2 1 0 0 0
"gridinfo", -1, "years", 1, "days", "time"
"atmos_day", 1, "months", 1, "days", "time"
"ice_day", 1, "months", 1, "days", "time"
"ocean_day2d", 1, "months", 1, "days", "time"
"ocean_day3d", 1, "months", 1, "days", "time"
#"ocean_snap", 24, "hours", 1, "days", "time"
#"ocean_STO", 1, "days", 1, "days", "time"
#"ocean_obc_w", 1, "months", 1, "days", "time"
"ocean_trps", 1, "months", 1, "days", "time"
#"_GreatBelt ", 1, "hours", 1, "days", "time"
#"_FehmarnBelt ", 1, "hours", 1, "days", "time"
#"_AnholtE ", 1, "hours", 1, "days", "time"
#"_LandskronaW ", 1, "hours", 1, "days", "time"
#"_ArkonaBY2 ", 1, "hours", 1, "days", "time"
#"_BornholmDeepBY5 ", 1, "hours", 1, "days", "time"
#"_SEGotlandBasin ", 1, "hours", 1, "days", "time"
#"_GdanskDeep ", 1, "hours", 1, "days", "time"
#"_GotlandDeepBY15 ", 1, "hours", 1, "days", "time"
#"_LandsortDeepBY31", 1, "hours", 1, "days", "time"
#"_BothnianSeaSR5 ", 1, "hours", 1, "days", "time"
#"_BothnianSeaUS3 ", 1, "hours", 1, "days", "time"
#"_BothnianBayF9 ", 1, "hours", 1, "days", "time"
#"_GulfFinlandLL7 ", 1, "hours", 1, "days", "time"
#"_GulfofFinlandF1 ", 1, "hours", 1, "days", "time"
#"_GulfofRiga ", 1, "hours", 1, "days", "time"
#
#===========================================================================
#diagnostic field entries
#===========================================================================
# ocean model grid quantities (static fields and so not time averaged)
"ocean_model","geolon_t","geolon_t","gridinfo" ,"all",.false.,"none",2
"ocean_model","geolat_t","geolat_t","gridinfo" ,"all",.false.,"none",2
"ocean_model","geolon_c","geolon_c","gridinfo" ,"all",.false.,"none",2
"ocean_model","geolat_c","geolat_c","gridinfo" ,"all",.false.,"none",2
"ocean_model","area_t","area_t", "gridinfo" ,"all",.false.,"none",2
"ocean_model","area_u","area_u", "gridinfo" ,"all",.false.,"none",2
"ocean_model","ht","ht", "gridinfo" ,"all",.false.,"none",2
"ocean_model","hu","hu", "gridinfo" ,"all",.false.,"none",2
#======================================================================================
# 2D time means
#======================================================================================
#"ocean_model","geolon_t","geolon_t","ocean_day2d" ,"all",.false.,"none",2
#"ocean_model","geolat_t","geolat_t","ocean_day2d" ,"all",.false.,"none",2
#"ocean_model","geolon_c","geolon_c","ocean_day2d" ,"all",.false.,"none",2
#"ocean_model","geolat_c","geolat_c","ocean_day2d" ,"all",.false.,"none",2
"ocean_model","area_t","area_t", "ocean_day2d" ,"all",.false.,"none",2
"ocean_model","area_u","area_u", "ocean_day2d" ,"all",.false.,"none",2
"ocean_model","ht","ht", "ocean_day2d" ,"all",.false.,"none",2
"ocean_model","hu","hu", "ocean_day2d" ,"all",.false.,"none",2
# sea level (gauges)
"ocean_model","eta_t","eta_t", "ocean_day2d", "all",.true.,"none",2
# mixed layer depths
"ocean_model","mld","mld", "ocean_day2d", "all",.true.,"none",2
# surface forcing
"ocean_model","river","river", "ocean_day2d", "all",.true.,"none",2
# wave model quantities
"ocean_model","windx_wave","windx_wave","ocean_day2d" ,"all",.true.,"none",2
"ocean_model","windy_wave","windy_wave","ocean_day2d" ,"all",.true.,"none",2
"ocean_model","xmom" ,"xmom" ,"ocean_day2d" ,"all",.true.,"none",2
"ocean_model","ymom" ,"ymom" ,"ocean_day2d" ,"all",.true.,"none",2
"ocean_model","height" ,"height" ,"ocean_day2d" ,"all",.true.,"none",2
"ocean_model","wave_p" ,"wave_p" ,"ocean_day2d" ,"all",.true.,"none",2
"ocean_model","wave_k" ,"wave_k" ,"ocean_day2d" ,"all",.true.,"none",2
"ocean_model","wave_s" ,"wave_s" ,"ocean_day2d" ,"all",.true.,"none",2
"ocean_model","wave_u" ,"wave_u" ,"ocean_day2d" ,"all",.true.,"none",2
#"ocean_model","iter" ,"iter" ,"ocean_day2d" ,"all",.true.,"none",2
"ocean_model","current_wave_stress","current_wave_stress", "ocean_day2d" ,"all",.true.,"none",2
#======================================================================================
# 2D atmos time means
#======================================================================================
#"ocean_model","geolon_t","geolon_t", "atmos_day","all",.false.,"none",2
#"ocean_model","geolat_t","geolat_t", "atmos_day","all",.false.,"none",2
#"ocean_model","geolon_c","geolon_c", "atmos_day","all",.false.,"none",2
#"ocean_model","geolat_c","geolat_c", "atmos_day","all",.false.,"none",2
"ocean_model","area_t","area_t", "atmos_day","all",.false.,"none",2
"ocean_model","area_u","area_u", "atmos_day","all",.false.,"none",2
"ocean_model","ht","ht", "atmos_day","all",.false.,"none",2
"ocean_model","hu","hu", "atmos_day","all",.false.,"none",2
# atmos forcing
"ocean_model","patm_t","patm_t", "atmos_day", "all",.true.,"none",2
"ocean_model","pme_net","pme_net", "atmos_day", "all",.true.,"none",2
"ocean_model","tau_x","tau_x", "atmos_day", "all",.true.,"none",2
"ocean_model","tau_y","tau_y", "atmos_day", "all",.true.,"none",2
"ocean_model","swflx","swflx", "atmos_day", "all",.true.,"none",2
"ocean_model","lw_heat","lw_heat", "atmos_day", "all",.true.,"none",2
"ocean_model","sens_heat","sens_heat", "atmos_day", "all",.true.,"none",2
"ocean_model","evap_heat","evap_heat", "atmos_day", "all",.true.,"none",2
# bottom forcing
"ocean_model","drag_coeff","drag_coeff", "ocean_day2d","all",.true.,"none",2
#======================================================================================
# 3D time means for selected variables
#======================================================================================
#"ocean_model", "geolon_t","geolon_t", "ocean_snap","all",.false.,"none",2
#"ocean_model", "geolat_t","geolat_t", "ocean_snap","all",.false.,"none",2
#"ocean_model", "geolon_c","geolon_c", "ocean_snap","all",.false.,"none",2
#"ocean_model", "geolat_c","geolat_c", "ocean_snap","all",.false.,"none",2
#"ocean_model", "area_t","area_t", "ocean_snap","all",.false.,"none",2
#"ocean_model", "area_u","area_u", "ocean_snap","all",.false.,"none",2
#"ocean_model", "temp","temp", "ocean_snap","all",.true., "none",2
#"ocean_model", "salt","salt", "ocean_snap","all",.true., "none",2
#======================================================================================
#"ocean_model", "geolon_t","geolon_t", "ocean_STO","all",.false.,"none",2
#"ocean_model", "geolat_t","geolat_t", "ocean_STO","all",.false.,"none",2
#"ocean_model", "geolon_c","geolon_c", "ocean_STO","all",.false.,"none",2
#"ocean_model", "geolat_c","geolat_c", "ocean_STO","all",.false.,"none",2
#"ocean_model", "area_t","area_t", "ocean_STO","all",.false.,"none",2
#"ocean_model", "area_u","area_u", "ocean_STO","all",.false.,"none",2
#"ocean_model", "temp","temp", "ocean_STO","all",.true., "none",2
#"ocean_model", "salt","salt", "ocean_STO","all",.true., "none",2
#"generic_ergom","t_o2","t_o2", "ocean_STO","all",.true., "none",2
#"generic_ergom","t_h2s","t_h2s", "ocean_STO","all",.true., "none",2
#"generic_ergom","p_poc_resp","p_poc_resp", "ocean_STO","all",.true.,"none",2
#"generic_ergom","p_poc_denit","p_poc_denit", "ocean_STO","all",.true.,"none",2
#"generic_ergom","p_poc_sulf","p_poc_sulf", "ocean_STO","all",.true.,"none",2
#"generic_ergom","p_h2s_oxno3_sul","p_h2s_oxno3_sul", "ocean_STO","all",.true.,"none",2
#"generic_ergom","p_det_denit_nh4","p_det_denit_nh4", "ocean_STO","all",.true.,"none",2
#"generic_ergom","p_det_resp_nh4","p_det_resp_nh4", "ocean_STO","all",.true.,"none",2
#"generic_ergom","p_det_sulf_nh4","p_det_sulf_nh4", "ocean_STO","all",.true.,"none",2
#"generic_ergom","p_sed_resp_nh4","p_sed_resp_nh4", "ocean_STO","all",.true.,"none",2
#"generic_ergom","p_sed_sulf_nh4","p_sed_sulf_nh4", "ocean_STO","all",.true.,"none",2
#"generic_ergom","p_nh4_nitdenit_n2","p_nh4_nitdenit_n2", "ocean_STO","all",.true.,"none",2
#"generic_ergom","p_sed_denit_nh4","p_sed_denit_nh4", "ocean_STO","all",.true.,"none",2
#"generic_ergom","opacity_water","opacity_water", "ocean_STO","all",.true.,"none",2
#"generic_ergom","opacity_bio", "opacity_bio", "ocean_STO","all",.true.,"none",2
#"generic_ergom ", "irr_inst ", "irr_inst ", "ocean_STO","all",.true.,"none",2
#======================================================================================
# transports
#======================================================================================
#"ocean_model","geolon_t","geolon_t", "ocean_trps" ,"all",.false.,"none",2
#"ocean_model","geolat_t","geolat_t","ocean_trps" ,"all",.false.,"none",2
#"ocean_model","geolon_c","geolon_c","ocean_trps" ,"all",.false.,"none",2
#"ocean_model","geolat_c","geolat_c","ocean_trps" ,"all",.false.,"none",2
"ocean_model","area_t","area_t", "ocean_trps" ,"all",.false.,"none",2
"ocean_model","area_u","area_u", "ocean_trps" ,"all",.false.,"none",2
#"ocean_model","ht","ht", "ocean_trps" ,"all",.false.,"none",2
#"ocean_model","hu","hu", "ocean_trps" ,"all",.false.,"none",2
# transports
"ocean_model","tx_trans","tx_trans", "ocean_trps", "all",.true.,"none",2
"ocean_model","ty_trans","ty_trans", "ocean_trps", "all",.true.,"none",2
"ocean_model","salt_xflux_adv","salt_xflux_adv", "ocean_trps", "all",.true.,"none",2
"ocean_model","salt_yflux_adv","salt_yflux_adv", "ocean_trps", "all",.true.,"none",2
"ocean_model","salt_xflux_diff","salt_xflux_dif","ocean_trps", "all",.true.,"none",2
"ocean_model","salt_yflux_diff","salt_yflux_dif","ocean_trps", "all",.true.,"none",2
#"ocean_model", "salt","salt", "ocean_trps", "all",.true.,"none",2
#"ocean_model","t_o2_xflux_adv","t_o2_xflux_adv", "ocean_trps", "all",.true.,"none",2
#"ocean_model","t_o2_yflux_adv","t_o2_yflux_adv", "ocean_trps", "all",.true.,"none",2
#"ocean_model","t_o2_xflux_diff","t_o2_xflux_dif","ocean_trps", "all",.true.,"none",2
#"ocean_model","t_o2_yflux_diff","t_o2_yflux_dif","ocean_trps", "all",.true.,"none",2
#======================================================================================
# 3D time means
#======================================================================================
#"ocean_model","geolon_t","geolon_t", "ocean_day3d","all",.false.,"none",2
#"ocean_model","geolat_t","geolat_t", "ocean_day3d","all",.false.,"none",2
#"ocean_model","geolon_c","geolon_c", "ocean_day3d","all",.false.,"none",2
#"ocean_model","geolat_c","geolat_c", "ocean_day3d","all",.false.,"none",2
"ocean_model","area_t","area_t", "ocean_day3d","all",.false.,"none",2
"ocean_model","area_u","area_u", "ocean_day3d","all",.false.,"none",2
## t,s,u,v,w
"ocean_model","ht","ht", "ocean_day3d","all",.false.,"none",2
"ocean_model","hu","hu", "ocean_day3d","all",.false.,"none",2
"ocean_model","dzt","dzt", "ocean_day3d","all",.true.,"none",2
"ocean_model","temp","temp", "ocean_day3d","all",.true.,"none",2
#"ocean_model","pot_temp","pot_temp", "ocean_day3d","all",.true.,"none",2
"ocean_model","salt","salt", "ocean_day3d","all",.true.,"none",2
"ocean_model","u","u", "ocean_day3d","all",.true.,"none",2
"ocean_model","v","v", "ocean_day3d","all",.true.,"none",2
"ocean_model","wrhot","wrhot", "ocean_day3d","all",.true.,"none",2
# biomodel 3d auxiliary variables
#"generic_ergom","k0_co2 ","k0_co2 ", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","k1_co2 ","k1_co2 ", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","k2_co2 ","k2_co2 ", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","alk_boron ","alk_boron ", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","alk_h2s ","alk_h2s ", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","alk_water ","alk_water ", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","alk_po4 ","alk_po4 ", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","alk_co2 ","alk_co2 ", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","alk_residual ","alk_residual ", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","dalkp_dh3o ","dalkp_dh3o ", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","dalkc_dh3o ","dalkc_dh3o ", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","dalkresidual_dpH","dalkresidual_dpH", "ocean_day3d","all",.true.,"none",2
"generic_ergom","ph ","ph ", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","h3o ","h3o ", "ocean_day3d","all",.true.,"none",2
"generic_ergom","pco2 ","pco2 ", "ocean_day3d","all",.true.,"none",2
"generic_ergom","co2 ","co2 ", "ocean_day3d","all",.true.,"none",2
"generic_ergom","t_dic_stf", "sfc_flux_t_dic ", "ocean_day3d", "all",.true.,"none",2
# biomodel 3d process rates
#"generic_ergom","p_no3_assim_lpp","p_no3_assim_lpp", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","p_nh4_assim_lpp","p_nh4_assim_lpp", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","p_no3_assim_spp","p_no3_assim_spp", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","p_nh4_assim_spp","p_nh4_assim_spp", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","p_n2_assim_cya ","p_n2_assim_cya ", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","p_assim_lpp_poc","p_assim_lpp_poc", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","p_assim_spp_poc","p_assim_spp_poc", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","p_assim_cya_poc","p_assim_cya_poc", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","p_poc_resp","p_poc_resp", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","p_poc_denit","p_poc_denit", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","p_poc_sulf","p_poc_sulf", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","p_lpp_resp_nh4","p_lpp_resp_nh4", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","p_spp_resp_nh4","p_spp_resp_nh4", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","p_cya_resp_nh4","p_cya_resp_nh4", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","p_zoo_resp_nh4","p_zoo_resp_nh4", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","p_h2s_oxo2_sul","p_h2s_oxo2_sul", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","p_sul_oxo2_so4","p_sul_oxo2_so4", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","p_nh4_nit_no3","p_nh4_nit_no3", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","p_h2s_oxno3_sul","p_h2s_oxno3_sul", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","p_det_denit_nh4","p_det_denit_nh4", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","p_det_resp_nh4","p_det_resp_nh4", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","p_det_sulf_nh4","p_det_sulf_nh4", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","p_sed_resp_nh4","p_sed_resp_nh4", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","p_sed_sulf_nh4","p_sed_sulf_nh4", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","p_nh4_nitdenit_n2","p_nh4_nitdenit_n2", "ocean_day3d","all",.true.,"none",2
#"generic_ergom","p_sed_denit_nh4","p_sed_denit_nh4", "ocean_day3d","all",.true.,"none",2
"generic_ergom","p_ips_burial","p_ips_burial", "ocean_day3d","all",.true.,"none",2
"generic_ergom","p_sed_burial","p_sed_burial", "ocean_day3d","all",.true.,"none",2
# biomodel 3d variables
"generic_ergom","t_n2","t_n2", "ocean_day3d","all",.true.,"none",2
"generic_ergom","t_o2","t_o2", "ocean_day3d","all",.true.,"none",2
"generic_ergom","t_dic","t_dic", "ocean_day3d","all",.true.,"none",2
"generic_ergom","t_nh4","t_nh4", "ocean_day3d","all",.true.,"none",2
"generic_ergom","t_no3","t_no3", "ocean_day3d","all",.true.,"none",2
"generic_ergom","t_po4","t_po4", "ocean_day3d","all",.true.,"none",2
"generic_ergom","t_spp","t_spp", "ocean_day3d","all",.true.,"none",2
"generic_ergom","t_zoo","t_zoo", "ocean_day3d","all",.true.,"none",2
"generic_ergom","t_h2s","t_h2s", "ocean_day3d","all",.true.,"none",2
"generic_ergom","t_sul","t_sul", "ocean_day3d","all",.true.,"none",2
"generic_ergom","t_alk","t_alk", "ocean_day3d","all",.true.,"none",2
"generic_ergom","t_ipw","t_ipw", "ocean_day3d","all",.true.,"none",2
"generic_ergom","t_lpp","t_lpp", "ocean_day3d","all",.true.,"none",2
"generic_ergom","t_cya","t_cya", "ocean_day3d","all",.true.,"none",2
"generic_ergom","t_det","t_det", "ocean_day3d","all",.true.,"none",2
"generic_ergom","t_don","t_don", "ocean_day3d","all",.true.,"none",2
"generic_ergom","t_poc","t_poc", "ocean_day3d","all",.true.,"none",2
# biomodel 2d variables
"generic_ergom","t_sed","t_sed", "ocean_day3d", "all",.true.,"none",2
"generic_ergom","t_ips","t_ips", "ocean_day3d", "all",.true.,"none",2
# river input
"generic_ergom","runoff_flux_t_dic","runoff_flux_t_dic", "ocean_day3d", "all",.true.,"none",2
"generic_ergom","runoff_flux_t_nh4","runoff_flux_t_nh4", "ocean_day3d", "all",.true.,"none",2
"generic_ergom","runoff_flux_t_no3","runoff_flux_t_no3", "ocean_day3d", "all",.true.,"none",2
"generic_ergom","runoff_flux_t_po4","runoff_flux_t_po4", "ocean_day3d", "all",.true.,"none",2
"generic_ergom","runoff_flux_t_alk","runoff_flux_t_alk", "ocean_day3d", "all",.true.,"none",2
"generic_ergom","runoff_flux_t_det","runoff_flux_t_det", "ocean_day3d", "all",.true.,"none",2
# atmospheric deposition as wet deposition
"generic_ergom","dep_wet_t_nh4","dep_wet_t_nh4", "ocean_day3d", "all",.true.,"none",2
"generic_ergom","dep_wet_t_no3","dep_wet_t_no3", "ocean_day3d", "all",.true.,"none",2
"generic_ergom","dep_wet_t_po4","dep_wet_t_po4", "ocean_day3d", "all",.true.,"none",2
# diffusive fluxes handled in MOM as dry depositions, var names look like diffusive fluxes
"generic_ergom","diffusive_flux_t_no3","diffusive_flux_t_no3", "ocean_day3d", "all",.true.,"none",2
"generic_ergom","diffusive_flux_t_po4","diffusive_flux_t_po4", "ocean_day3d", "all",.true.,"none",2
#"generic_ergom","chl","chl", "ocean_day3d", "all",.true.,"none",2
#"generic_ergom","opacity_water","opacity_water", "ocean_day3d", "all",.true.,"none",2
"generic_ergom","opacity_bio","opacity_bio", "ocean_day3d", "all",.true.,"none",2
"generic_ergom ", "irr_inst ", "irr_inst ", "ocean_day3d","all",.true.,"none",2
#======================================================================================
# OBC diagnostics
#======================================================================================
#"ocean_model" ,"obc_salt_flux_west","obc_salt_flux_west", "ocean_obc_w", "all",.true.,"none",2
#"ocean_model" ,"obc_t_no3_flux_west","obc_t_no3_flux_west" , "ocean_obc_w", "all",.true.,"none",2
#"ocean_model" ,"obc_t_nh4_flux_west","obc_t_nh4_flux_west" , "ocean_obc_w", "all",.true.,"none",2
#"ocean_model" ,"obc_t_po4_flux_west","obc_t_po4_flux_west" , "ocean_obc_w", "all",.true.,"none",2
#"ocean_model" ,"obc_t_o2_flux_west","obc_t_o2_flux_west" , "ocean_obc_w", "all",.true.,"none",2
#"ocean_model" ,"obc_t_dic_flux_west","obc_t_dic_flux_west" , "ocean_obc_w", "all",.true.,"none",2
#"ocean_model" ,"obc_t_alk_flux_west","obc_t_alk_flux_west" , "ocean_obc_w", "all",.true.,"none",2
#======================================================================================
# ICE DIAGNOSTICS:
# time averages
#=============================================================================
"ice_model", "FRAZIL", "FRAZIL", "ice_day", "all", .true., "none", 2
"ice_model", "CN", "CN", "ice_day", "all", .true., "none", 2
"ice_model", "MI", "MI", "ice_day", "all", .true., "none", 2
"ice_model", "HI", "HI", "ice_day", "all", .true., "none", 2
"ice_model", "HS", "HS", "ice_day", "all", .true., "none", 2
"ice_model", "TS", "TS", "ice_day", "all", .true., "none", 2
"ice_model", "T1", "T1", "ice_day", "all", .true., "none", 2
"ice_model", "T2", "T2", "ice_day", "all", .true., "none", 2
"ice_model", "ALB", "ALB", "ice_day", "all", .true., "none", 2
"ice_model", "SW", "SW", "ice_day", "all", .true., "none", 2
"ice_model", "LW", "LW", "ice_day", "all", .true., "none", 2
#"ice_model", "SH", "SH", "ice_day", "all", .true., "none", 2
#"ice_model", "LH", "LH", "ice_day", "all", .true., "none", 2
"ice_model", "TMELT", "TMELT", "ice_day", "all", .true., "none", 2
"ice_model", "BMELT", "BMELT", "ice_day", "all", .true., "none", 2
#"ice_model", "BHEAT", "BHEAT", "ice_day", "all", .true., "none", 2
"ice_model", "UI", "UI", "ice_day", "all", .true., "none", 2
"ice_model", "VI", "VI", "ice_day", "all", .true., "none", 2
"ice_model", "SLP", "SLP", "ice_day", "all", .true., "none", 2
"ice_model", "SST", "SST", "ice_day", "all", .true., "none", 2
"ice_model", "SSS", "SSS", "ice_day", "all", .true., "none", 2
#"ice_model", "SSH", "SSH", "ice_day", "all", .true., "none", 2
#"ice_model", "UO", "UO", "ice_day", "all", .true., "none", 2
#"ice_model", "VO", "VO", "ice_day", "all", .true., "none", 2
"ice_model", "SNOWFL", "SNOWFL", "ice_day", "all", .true., "none", 2
"ice_model", "RAIN", "RAIN", "ice_day", "all", .true., "none", 2
"ice_model", "EVAP", "EVAP", "ice_day", "all", .true., "none", 2
#"ice_model", "CALVING", "CALVING", "ice_day", "all", .true., "none", 2
"ice_model", "RUNOFF", "RUNOFF", "ice_day", "all", .true., "none", 2
#"ice_model", "CELL_AREA", "CELL_AREA", "ice_day", "all", .true., "none", 2
#"ice_model", "GEOLON", "GEOLON", "ice_day", "all", .true., "none", 2
#"ice_model", "GEOLAT", "GEOLAT", "ice_day", "all", .true., "none", 2
#"ice_model", "IX_TRANS", "IX_TRANS", "ice_day", "all", .true., "none", 2
#"ice_model", "IY_TRANS", "IY_TRANS", "ice_day", "all", .true., "none", 2
"ice_model", "SALTF", "SALTF", "ice_day", "all", .true., "none", 2
#"ice_model", "SINROT", "SINROT", "ice_day", "all", .true., "none", 2
#"ice_model", "COSROT", "COSROT", "ice_day", "all", .true., "none", 2
#===============================================================================
#
# FORMATS FOR FILE ENTRIES (not all input values are used)
# ------------------------
#
#"file_name", output_freq, "output_units", format, "time_units", "long_name"
#
#
# output_freq: > 0 output frequency in "output_units"
# = 0 output frequency every time step
# =-1 output frequency at end of run
#
# output_units = units used for output frequency
# (years, months, days, minutes, hours, seconds)
#
# time_units = units used to label the time axis
# (days, minutes, hours, seconds)
#
#
# FORMAT FOR FIELD ENTRIES (not all input values are used)
# ------------------------
#
#"module_name", "field_name", "output_name", "file_name", "time_sampling", time_avg, "other_opts", packing
#
# time_avg = .true. or .false. or min or max
#
# packing = 1 double precision
# = 2 float
# = 4 packed 16-bit integers
# = 8 packed 1-byte (not tested?)
#=============================================================================
#

55
model_setup/input/field_table

@ -0,0 +1,55 @@
"diag_tracers","ocean_mod","frazil"
restart_file = ocean_frazil.res.nc
/
"prog_tracers","ocean_mod","temp"
horizontal-advection-scheme = mdfl_sweby
vertical-advection-scheme = mdfl_sweby
restart_file = ocean_temp_salt.res.nc
/
"prog_tracers","ocean_mod","salt"
horizontal-advection-scheme = mdfl_sweby
vertical-advection-scheme = mdfl_sweby
restart_file = ocean_temp_salt.res.nc
/
"TRACER", "atmos_mod", "sphum"
"longname", "specific humidity"
"units", "kg/kg"
"profile_type", "fixed", "surface_value=3.e-6" /
# sphum must be present on land as well
"TRACER", "land_mod", "sphum"
"longname", "specific humidity"
"units", "kg/kg" /
# enable carbon flux
"TRACER", "atmos_mod", "co2"
"longname", "carbon dioxide conc."
"units", "mol/mol" /
"TRACER", "land_mod", "co2"
"longname", "carbon dioxide conc."
"units", "mol/mol" /
"tracer_packages","ocean_mod","generic_ergom"
names = _
horizontal-advection-scheme = mdfl_sweby
vertical-advection-scheme = mdfl_sweby
min_tracer_limit=0.0
/
"prog_tracers", "ocean_mod","t_cdom"
"const_init_value", "1.0e-7"
"const_init_tracer", "T" /
"prog_tracers", "ocean_mod","t_pocp"
"const_init_value", "0.0"
"const_init_tracer", "T" /
"prog_tracers", "ocean_mod","t_pocn"
"const_init_value", "0.0"
"const_init_tracer", "T" /

BIN
model_setup/input/grid_spec.nc

Binary file not shown.

979
model_setup/input/input.nml

@ -0,0 +1,979 @@
&coupler_nml
months = 12
days = 0
hours = 0
minutes = 0
seconds = 0
current_date = 2012,1,1,0,0,0
calendar = 'julian'
dt_cpld = 3600
dt_atmos = 3600
do_atmos = .false.
do_land = .false.
do_ice = .true.
do_ocean = .true.
atmos_npes = 0
ocean_npes = 0
concurrent = .false.
use_lag_fluxes=.false.
/
&data_override_nml
debug_data_override=.false.
/