Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 15 additions & 1 deletion config.default
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,21 @@ preprocessedReferenceRunName = None

# directory containing model results
baseDirectory = /dir/to/model/output
# names of namelist and streams files. If not in baseDirectory, give full path

# Note: an absolute path can be supplied for any of these subdirectories.
# A relative path is assumed to be relative to baseDirectory.
# By default, results are assumed to be directly in baseDirectory,
# i.e. <baseDirecory>/./

# subdirectory containing restart files
runSubdirectory = .
# subdirectory for ocean history files
oceanHistorySubdirectory = .
# subdirectory for sea ice history files
seaIceHistorySubdirectory = .

# names of namelist and streams files, either a path relative to baseDirectory
# or an absolute path.
oceanNamelistFileName = mpas-o_in
oceanStreamsFileName = streams.ocean
seaIceNamelistFileName = mpas-cice_in
Expand Down
77 changes: 36 additions & 41 deletions mpas_analysis/ocean/meridional_overturning_circulation.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@

Authors
-------
Milena Veneziani, Mark Petersen, Phillip Wolfram
Milena Veneziani, Mark Petersen, Phillip Wolfram, Xylar Asay-Davis

Last Modified
-------------
03/14/2017
03/23/2017
"""

import xarray as xr
Expand All @@ -24,17 +24,18 @@
from ..shared.plot.plotting import plot_vertical_section,\
timeseries_analysis_plot, setup_colormap

from ..shared.io import NameList, StreamsFile
from ..shared.io.utility import buildConfigFullPath
from ..shared.io.utility import build_config_full_path

from ..shared.generalized_reader.generalized_reader \
import open_multifile_dataset

from ..shared.timekeeping.utility import get_simulation_start_time, \
days_to_datetime

from ..shared.analysis_task import setup_task

def moc_streamfunction(config, streamMap=None, variableMap=None): # {{{

def moc_streamfunction(config): # {{{
"""
Process MOC analysis member data if available, or compute MOC at
post-processing if not. Plots streamfunction climatolgoical sections
Expand All @@ -56,22 +57,18 @@ def moc_streamfunction(config, streamMap=None, variableMap=None): # {{{

Authors
-------
Milena Veneziani, Mark Petersen, Phillip J. Wolfram
Milena Veneziani, Mark Petersen, Phillip J. Wolfram, Xylar Asay-Davis

Last Modified
-------------
03/14/2017
03/23/2017
"""

# **** Initial settings ****
# read parameters from config file
inDirectory = config.get('input', 'baseDirectory')

namelistFileName = config.get('input', 'oceanNamelistFileName')
namelist = NameList(namelistFileName, path=inDirectory)

streamsFileName = config.get('input', 'oceanStreamsFileName')
streams = StreamsFile(streamsFileName, streamsdir=inDirectory)
# perform common setup for the task
namelist, runStreams, historyStreams, calendar, streamMap, \
variableMap, plotsDirectory = setup_task(config, componentName='ocean')

timeSeriesStatsMonthlyAnalysisMemberFlag = namelist.get(
'config_am_timeseriesstatsmonthly_enable')
Expand All @@ -83,14 +80,13 @@ def moc_streamfunction(config, streamMap=None, variableMap=None): # {{{
# Get a list of timeSeriesStats output files from the streams file,
# reading only those that are between the start and end dates
# First a list necessary for the streamfunctionMOC climatology
streamName = streams.find_stream(streamMap['timeSeriesStats'])
streamName = historyStreams.find_stream(streamMap['timeSeriesStats'])
startDateClimo = config.get('climatology', 'startDate')
endDateClimo = config.get('climatology', 'endDate')
calendar = namelist.get('config_calendar_type')
inputFilesClimo = streams.readpath(streamName,
startDate=startDateClimo,
endDate=endDateClimo,
calendar=calendar)
inputFilesClimo = historyStreams.readpath(streamName,
startDate=startDateClimo,
endDate=endDateClimo,
calendar=calendar)
print '\n List of files for climatologies:\n{} through {}'.format(
inputFilesClimo[0], inputFilesClimo[-1])
startYearClimo = config.getint('climatology', 'startYear')
Expand All @@ -105,10 +101,10 @@ def moc_streamfunction(config, streamMap=None, variableMap=None): # {{{
# Then a list necessary for the streamfunctionMOC Atlantic timeseries
startDateTseries = config.get('timeSeries', 'startDate')
endDateTseries = config.get('timeSeries', 'endDate')
inputFilesTseries = streams.readpath(streamName,
startDate=startDateTseries,
endDate=endDateTseries,
calendar=calendar)
inputFilesTseries = historyStreams.readpath(streamName,
startDate=startDateTseries,
endDate=endDateTseries,
calendar=calendar)
print '\n List of files for timeSeries:\n{} through {}'.format(
inputFilesTseries[0], inputFilesTseries[-1])
startYearTseries = config.getint('timeSeries', 'startYear')
Expand All @@ -133,15 +129,14 @@ def moc_streamfunction(config, streamMap=None, variableMap=None): # {{{
# streams, calendar, sectionName, dictClimo, dictTseries)
else:
mocDictClimo, dictRegion = _compute_moc_climo_postprocess(
config, streams, variableMap, calendar, sectionName, regionNames,
dictClimo)
config, runStreams, variableMap, calendar, sectionName,
regionNames, dictClimo)
dsMOCTimeSeries = _compute_moc_time_series_postprocess(
config, streams, variableMap, calendar, sectionName, regionNames,
dictTseries, mocDictClimo, dictRegion)
config, runStreams, variableMap, calendar, sectionName,
regionNames, dictTseries, mocDictClimo, dictRegion)

# **** Plot MOC ****
# Define plotting variables
plotsDirectory = buildConfigFullPath(config, 'output', 'plotsSubdirectory')
mainRunName = config.get('runs', 'mainRunName')
movingAveragePoints = config.getint(sectionName, 'movingAveragePoints')
colorbarLabel = '[Sv]'
Expand Down Expand Up @@ -184,10 +179,10 @@ def moc_streamfunction(config, streamMap=None, variableMap=None): # {{{
# }}}


def _load_mesh(streams): # {{{
def _load_mesh(runStreams): # {{{
# Load mesh related variables
try:
restartFile = streams.readpath('restart')[0]
restartFile = runStreams.readpath('restart')[0]
except ValueError:
raise IOError('No MPAS-O restart file found: need at least one '
'restart file for MOC calculation')
Expand All @@ -210,13 +205,13 @@ def _load_mesh(streams): # {{{
refTopDepth, refLayerThickness # }}}


def _compute_moc_climo_postprocess(config, streams, variableMap, calendar,
def _compute_moc_climo_postprocess(config, runStreams, variableMap, calendar,
sectionName, regionNames, dictClimo): # {{{

'''compute mean MOC streamfunction as a post-process'''

dvEdge, areaCell, refBottomDepth, latCell, nVertLevels, \
refTopDepth, refLayerThickness = _load_mesh(streams)
refTopDepth, refLayerThickness = _load_mesh(runStreams)

variableList = ['avgNormalVelocity',
'avgVertVelocityTop']
Expand Down Expand Up @@ -257,9 +252,9 @@ def _compute_moc_climo_postprocess(config, streams, variableMap, calendar,
# Compute and plot annual climatology of MOC streamfunction
print '\n Compute and/or plot post-processed MOC climatological '\
'streamfunction...'
simulationStartTime = get_simulation_start_time(streams)
outputDirectory = buildConfigFullPath(config, 'output',
'mpasClimatologySubdirectory')
simulationStartTime = get_simulation_start_time(runStreams)
outputDirectory = build_config_full_path(config, 'output',
'mpasClimatologySubdirectory')
try:
os.makedirs(outputDirectory)
except OSError:
Expand Down Expand Up @@ -375,7 +370,7 @@ def _compute_moc_climo_postprocess(config, streams, variableMap, calendar,
return mocDictClimo, dictRegion # }}}


def _compute_moc_time_series_postprocess(config, streams, variableMap,
def _compute_moc_time_series_postprocess(config, runStreams, variableMap,
calendar, sectionName, regionNames,
dictTseries, mocDictClimo,
dictRegion): # {{{
Expand All @@ -397,12 +392,12 @@ def write_file(dsMOCTimeSeries):
'time series...'
print ' Load data...'

simulationStartTime = get_simulation_start_time(streams)
simulationStartTime = get_simulation_start_time(runStreams)
variableList = ['avgNormalVelocity',
'avgVertVelocityTop']

dvEdge, areaCell, refBottomDepth, latCell, nVertLevels, \
refTopDepth, refLayerThickness = _load_mesh(streams)
refTopDepth, refLayerThickness = _load_mesh(runStreams)

ds = open_multifile_dataset(fileNames=dictTseries['inputFilesTseries'],
calendar=calendar,
Expand All @@ -422,8 +417,8 @@ def write_file(dsMOCTimeSeries):
transectEdgeMaskSigns = dictRegion['transectEdgeMaskSignsAtlantic']
regionCellMask = dictRegion['AtlanticCellMask']

outputDirectory = buildConfigFullPath(config, 'output',
'timeseriesSubdirectory')
outputDirectory = build_config_full_path(config, 'output',
'timeseriesSubdirectory')
try:
os.makedirs(outputDirectory)
except OSError:
Expand Down
Loading