diff --git a/docs/developers_guide/api.rst b/docs/developers_guide/api.rst index 1eec21451..e23a0e839 100644 --- a/docs/developers_guide/api.rst +++ b/docs/developers_guide/api.rst @@ -127,6 +127,9 @@ Sea ice tasks ClimatologyMapSeaIceConc ClimatologyMapSeaIceThick ClimatologyMapSeaIceSnowDepth + ClimatologyMapSeaIceSnowiceFormation + ClimatologyMapSeaIceSnowMelt + ClimatologyMapSeaIcePondArea ClimatologyMapSeaIceAreaFractionRidge ClimatologyMapSeaIceVolumeRidge ClimatologyMapSeaIceAlbedo diff --git a/docs/users_guide/analysis_tasks.rst b/docs/users_guide/analysis_tasks.rst index a4cfa1866..22fb85158 100644 --- a/docs/users_guide/analysis_tasks.rst +++ b/docs/users_guide/analysis_tasks.rst @@ -52,6 +52,12 @@ Analysis Tasks tasks/climatologyMapSeaIceSnowDepthNH tasks/climatologyMapSeaIceSnowDepthSH + tasks/climatologyMapSeaIceSnowiceFormationNH + tasks/climatologyMapSeaIceSnowiceFormationSH + tasks/climatologyMapSeaIceSnowMeltNH + tasks/climatologyMapSeaIceSnowMeltSH + tasks/climatologyMapSeaIcePondAreaNH + tasks/climatologyMapSeaIcePondAreaSH tasks/climatologyMapSeaIceAreaFractionRidgeNH tasks/climatologyMapSeaIceAreaFractionRidgeSH tasks/climatologyMapSeaIceVolumeRidgeNH diff --git a/docs/users_guide/tasks/climatologyMapSeaIceAlbedoNH.rst b/docs/users_guide/tasks/climatologyMapSeaIceAlbedoNH.rst index ae81357eb..290179c07 100644 --- a/docs/users_guide/tasks/climatologyMapSeaIceAlbedoNH.rst +++ b/docs/users_guide/tasks/climatologyMapSeaIceAlbedoNH.rst @@ -11,7 +11,7 @@ part of the averaging period and albedo is not well-defined. Component and Tags:: component: seaIce - tags: climatology, horizontalMap, seaIceBroadbandAlbedo, publicObs, snow + tags: climatology, horizontalMap, seaIceBroadbandAlbedo, publicObs, snow_on_sea_ice Configuration Options --------------------- diff --git a/docs/users_guide/tasks/climatologyMapSeaIceAlbedoSH.rst b/docs/users_guide/tasks/climatologyMapSeaIceAlbedoSH.rst index 558869829..f3e7733d5 100644 --- a/docs/users_guide/tasks/climatologyMapSeaIceAlbedoSH.rst +++ b/docs/users_guide/tasks/climatologyMapSeaIceAlbedoSH.rst @@ -11,7 +11,7 @@ part of the averaging period and albedo is not well-defined. Component and Tags:: component: seaIce - tags: climatology, horizontalMap, seaIceBroadbandAlbedo, publicObs, snow + tags: climatology, horizontalMap, seaIceBroadbandAlbedo, publicObs, snow_on_sea_ice Configuration Options --------------------- diff --git a/docs/users_guide/tasks/climatologyMapSeaIcePondAreaNH.rst b/docs/users_guide/tasks/climatologyMapSeaIcePondAreaNH.rst new file mode 100644 index 000000000..d4534052c --- /dev/null +++ b/docs/users_guide/tasks/climatologyMapSeaIcePondAreaNH.rst @@ -0,0 +1,67 @@ +.. _task_climatologyMapSeaIcePondAreaNH: + +climatologyMapSeaIcePondAreaNH +======================================= + +An analysis task for plotting maps of Arctic sea ice pond area fraction. + +Component and Tags:: + + component: seaIce + tags: climatology, horizontalMap, seaIcePondArea, publicObs + +Configuration Options +--------------------- + +The following configuration options are available for this task:: + + [climatologyMapSeaIcePondAreaNH] + # options related to plotting horizontally remapped climatologies of + # pond area fraction against control model results and observations + # in the northern hemisphere (NH) + + # colormap for model/observations + colormapNameResult = deep + # whether the colormap is indexed or continuous + colormapTypeResult = indexed + # color indices into colormapName for filled contours + colormapIndicesResult = [20, 80, 110, 140, 170, 200, 230, 255] + # colormap levels/values for contour boundaries + colorbarLevelsResult = [0.001, 0.005, 0.01, 0.03, 0.05, 0.1, 0.2, 0.3, 0.4] + + # colormap for differences + colormapNameDifference = balance + # whether the colormap is indexed or continuous + colormapTypeDifference = indexed + # color indices into colormapName for filled contours + colormapIndicesDifference = [0, 32, 64, 96, 128, 128, 160, 192, 224, 255] + # colormap levels/values for contour boundaries + colorbarLevelsDifference = [-0.2, -0.1, -0.05, -0.01, -0.005, 0, 0.005, 0.01, 0.05, 0.1, 0.2] + + # Months or seasons to plot + seasons = ['FM', 'ON'] + + # comparison grid(s) (typically 'arctic_extended') on which to plot analysis + comparisonGrids = ['arctic_extended'] + + # a list of prefixes describing the sources of the observations to be used + observationPrefixes = [''] + + # arrange subplots vertically? + vertical = False + +The option ``vertical = True`` can be used to plot 3 panels one above another +(resulting in a tall, thin image) rather than next to each other, the default +(resulting in a short, wide image). + +For details on the remaining configration options, see: + * :ref:`config_colormaps` + * :ref:`config_seasons` + * :ref:`config_comparison_grids` + +Example Result +-------------- + +.. image:: examples/ice_pondarea_nh.png + :width: 720 px + :align: center diff --git a/docs/users_guide/tasks/climatologyMapSeaIcePondAreaSH.rst b/docs/users_guide/tasks/climatologyMapSeaIcePondAreaSH.rst new file mode 100644 index 000000000..7ac3acc5c --- /dev/null +++ b/docs/users_guide/tasks/climatologyMapSeaIcePondAreaSH.rst @@ -0,0 +1,67 @@ +.. _task_climatologyMapSeaIcePondAreaSH: + +climatologyMapSeaIcePondAreaSH +======================================= + +An analysis task for plotting maps of Antarctic sea ice pond area fraction. + +Component and Tags:: + + component: seaIce + tags: climatology, horizontalMap, seaIcePondArea, publicObs + +Configuration Options +--------------------- + +The following configuration options are available for this task:: + + [climatologyMapSeaIcePondAreaSH] + # options related to plotting horizontally remapped climatologies of + # snow melt against control model results and observations + # in the southern hemisphere (SH) + + # colormap for model/observations + colormapNameResult = deep + # whether the colormap is indexed or continuous + colormapTypeResult = indexed + # color indices into colormapName for filled contours + colormapIndicesResult = [20, 80, 110, 140, 170, 200, 230, 255] + # colormap levels/values for contour boundaries + colorbarLevelsResult = [0.001, 0.005, 0.01, 0.03, 0.05, 0.1, 0.2, 0.3, 0.4] + + # colormap for differences + colormapNameDifference = balance + # whether the colormap is indexed or continuous + colormapTypeDifference = indexed + # color indices into colormapName for filled contours + colormapIndicesDifference = [0, 32, 64, 96, 128, 128, 160, 192, 224, 255] + # colormap levels/values for contour boundaries + colorbarLevelsDifference = [-0.2, -0.1, -0.05, -0.01, -0.005, 0, 0.005, 0.01, 0.05, 0.1, 0.2] + + # Months or seasons to plot + seasons = ['FM', 'ON'] + + # comparison grid(s) (typically 'antarctic_extended') on which to plot analysis + comparisonGrids = ['antarctic_extended'] + + # a list of prefixes describing the sources of the observations to be used + observationPrefixes = [''] + + # arrange subplots vertically? + vertical = False + +The option ``vertical = True`` can be used to plot 3 panels one above another +(resulting in a tall, thin image) rather than next to each other, the default +(resulting in a short, wide image). + +For details on the remaining configration options, see: + * :ref:`config_colormaps` + * :ref:`config_seasons` + * :ref:`config_comparison_grids` + +Example Result +-------------- + +.. image:: examples/ice_pondarea_sh.png + :width: 720 px + :align: center diff --git a/docs/users_guide/tasks/climatologyMapSeaIceSnowMeltNH.rst b/docs/users_guide/tasks/climatologyMapSeaIceSnowMeltNH.rst new file mode 100644 index 000000000..9af891f21 --- /dev/null +++ b/docs/users_guide/tasks/climatologyMapSeaIceSnowMeltNH.rst @@ -0,0 +1,67 @@ +.. _task_climatologyMapSeaIceSnowMeltNH: + +climatologyMapSeaIceSnowMeltNH +======================================= + +An analysis task for plotting maps of Arctic sea ice cell-averaged snow melt rate. + +Component and Tags:: + + component: seaIce + tags: climatology, horizontalMap, seaIceSnowMelt, publicObs + +Configuration Options +--------------------- + +The following configuration options are available for this task:: + + [climatologyMapSeaIceSnowMeltNH] + # options related to plotting horizontally remapped climatologies of + # snow melt against control model results and observations + # in the northern hemisphere (NH) + + # colormap for model/observations + colormapNameResult = inferno + # whether the colormap is indexed or continuous + colormapTypeResult = indexed + # color indices into colormapName for filled contours + colormapIndicesResult = [20, 80, 110, 140, 170, 200, 230, 255] + # colormap levels/values for contour boundaries + colorbarLevelsResult = [0, 0.01, 0.02, 0.05, 0.1, 0.25, 0.5, 1., 1.5] + + # colormap for differences + colormapNameDifference = balance + # whether the colormap is indexed or continuous + colormapTypeDifference = indexed + # color indices into colormapName for filled contours + colormapIndicesDifference = [0, 32, 64, 96, 128, 128, 160, 192, 224, 255] + # colormap levels/values for contour boundaries + colorbarLevelsDifference = [-0.2, -0.1, -0.05, -0.01, -0.005, 0, 0.005, 0.01, 0.05, 0.1, 0.2] + + # Months or seasons to plot + seasons = ['ANN', 'FM', 'ON'] + + # comparison grid(s) (typically 'arctic_extended') on which to plot analysis + comparisonGrids = ['arctic_extended'] + + # a list of prefixes describing the sources of the observations to be used + observationPrefixes = [''] + + # arrange subplots vertically? + vertical = False + +The option ``vertical = True`` can be used to plot 3 panels one above another +(resulting in a tall, thin image) rather than next to each other, the default +(resulting in a short, wide image). + +For details on the remaining configration options, see: + * :ref:`config_colormaps` + * :ref:`config_seasons` + * :ref:`config_comparison_grids` + +Example Result +-------------- + +.. image:: examples/ice_snowmelt_nh.png + :width: 720 px + :align: center diff --git a/docs/users_guide/tasks/climatologyMapSeaIceSnowMeltSH.rst b/docs/users_guide/tasks/climatologyMapSeaIceSnowMeltSH.rst new file mode 100644 index 000000000..21326de35 --- /dev/null +++ b/docs/users_guide/tasks/climatologyMapSeaIceSnowMeltSH.rst @@ -0,0 +1,67 @@ +.. _task_climatologyMapSeaIceSnowMeltSH: + +climatologyMapSeaIceSnowMeltSH +======================================= + +An analysis task for plotting maps of Antarctic sea ice cell-averaged snow melt rate. + +Component and Tags:: + + component: seaIce + tags: climatology, horizontalMap, seaIceSnowMelt, publicObs + +Configuration Options +--------------------- + +The following configuration options are available for this task:: + + [climatologyMapSeaIceSnowMeltSH] + # options related to plotting horizontally remapped climatologies of + # snow melt rate against control model results and observations + # in the southern hemisphere (SH) + + # colormap for model/observations + colormapNameResult = inferno + # whether the colormap is indexed or continuous + colormapTypeResult = indexed + # color indices into colormapName for filled contours + colormapIndicesResult = [20, 80, 110, 140, 170, 200, 230, 255] + # colormap levels/values for contour boundaries + colorbarLevelsResult = [0, 0.01, 0.02, 0.05, 0.1, 0.25, 0.5, 1., 1.5] + + # colormap for differences + colormapNameDifference = balance + # whether the colormap is indexed or continuous + colormapTypeDifference = indexed + # color indices into colormapName for filled contours + colormapIndicesDifference = [0, 32, 64, 96, 128, 128, 160, 192, 224, 255] + # colormap levels/values for contour boundaries + colorbarLevelsDifference = [-0.2, -0.1, -0.05, -0.01, -0.005, 0, 0.005, 0.01, 0.05, 0.1, 0.2] + + # Months or seasons to plot + seasons = ['ANN', 'FM', 'ON'] + + # comparison grid(s) (typically 'antarctic_extended') on which to plot analysis + comparisonGrids = ['antarctic_extended'] + + # a list of prefixes describing the sources of the observations to be used + observationPrefixes = [''] + + # arrange subplots vertically? + vertical = False + +The option ``vertical = True`` can be used to plot 3 panels one above another +(resulting in a tall, thin image) rather than next to each other, the default +(resulting in a short, wide image). + +For details on the remaining configration options, see: + * :ref:`config_colormaps` + * :ref:`config_seasons` + * :ref:`config_comparison_grids` + +Example Result +-------------- + +.. image:: examples/ice_snowmelt_sh.png + :width: 720 px + :align: center diff --git a/docs/users_guide/tasks/climatologyMapSeaIceSnowiceFormationNH.rst b/docs/users_guide/tasks/climatologyMapSeaIceSnowiceFormationNH.rst new file mode 100644 index 000000000..ee0dff92d --- /dev/null +++ b/docs/users_guide/tasks/climatologyMapSeaIceSnowiceFormationNH.rst @@ -0,0 +1,67 @@ +.. _task_climatologyMapSeaIceSnowiceFormationNH: + +climatologyMapSeaIceSnowiceFormationNH +======================================= + +An analysis task for plotting maps of Arctic sea ice cell-averaged snow-ice formation rate. + +Component and Tags:: + + component: seaIce + tags: climatology, horizontalMap, seaIceSnowiceFormation, publicObs + +Configuration Options +--------------------- + +The following configuration options are available for this task:: + + [climatologyMapSeaIceSnowiceFormationNH] + # options related to plotting horizontally remapped climatologies of + # snow-ice formation against control model results and observations + # in the northern hemisphere (NH) + + # colormap for model/observations + colormapNameResult = cork + # whether the colormap is indexed or continuous + colormapTypeResult = indexed + # color indices into colormapName for filled contours + colormapIndicesResult = [20, 80, 110, 140, 170, 200, 230, 255] + # colormap levels/values for contour boundaries + colorbarLevelsResult = [0, 0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 1.0, 1.5] + + # colormap for differences + colormapNameDifference = balance + # whether the colormap is indexed or continuous + colormapTypeDifference = indexed + # color indices into colormapName for filled contours + colormapIndicesDifference = [0, 32, 64, 96, 128, 128, 160, 192, 224, 255] + # colormap levels/values for contour boundaries + colorbarLevelsDifference = [-0.2, -0.1, -0.05, -0.02, -0.01, 0, 0.01, 0.02, 0.05, 0.1, 0.2] + + # Months or seasons to plot + seasons = ['ANN', 'FM', 'ON'] + + # comparison grid(s) (typically 'arctic_extended') on which to plot analysis + comparisonGrids = ['arctic_extended'] + + # a list of prefixes describing the sources of the observations to be used + observationPrefixes = [''] + + # arrange subplots vertically? + vertical = False + +The option ``vertical = True`` can be used to plot 3 panels one above another +(resulting in a tall, thin image) rather than next to each other, the default +(resulting in a short, wide image). + +For details on the remaining configration options, see: + * :ref:`config_colormaps` + * :ref:`config_seasons` + * :ref:`config_comparison_grids` + +Example Result +-------------- + +.. image:: examples/ice_snowiceformation_nh.png + :width: 720 px + :align: center diff --git a/docs/users_guide/tasks/climatologyMapSeaIceSnowiceFormationSH.rst b/docs/users_guide/tasks/climatologyMapSeaIceSnowiceFormationSH.rst new file mode 100644 index 000000000..f6ecd44a6 --- /dev/null +++ b/docs/users_guide/tasks/climatologyMapSeaIceSnowiceFormationSH.rst @@ -0,0 +1,67 @@ +.. _task_climatologyMapSeaIceSnowiceFormationSH: + +climatologyMapSeaIceSnowiceFormationSH +======================================= + +An analysis task for plotting maps of Antarctic sea ice cell-averaged snow-ice formation rate. + +Component and Tags:: + + component: seaIce + tags: climatology, horizontalMap, seaIceSnowiceFormation, publicObs + +Configuration Options +--------------------- + +The following configuration options are available for this task:: + + [climatologyMapSeaIceSnowiceFormationSH] + # options related to plotting horizontally remapped climatologies of + # snow-ice formation against control model results and observations + # in the southern hemisphere (SH) + + # colormap for model/observations + colormapNameResult = cork + # whether the colormap is indexed or continuous + colormapTypeResult = indexed + # color indices into colormapName for filled contours + colormapIndicesResult = [20, 80, 110, 140, 170, 200, 230, 255] + # colormap levels/values for contour boundaries + colorbarLevelsResult = [0, 0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 1.0, 1.5] + + # colormap for differences + colormapNameDifference = balance + # whether the colormap is indexed or continuous + colormapTypeDifference = indexed + # color indices into colormapName for filled contours + colormapIndicesDifference = [0, 32, 64, 96, 128, 128, 160, 192, 224, 255] + # colormap levels/values for contour boundaries + colorbarLevelsDifference = [-0.2, -0.1, -0.05, -0.02, -0.01, 0, 0.01, 0.02, 0.05, 0.1, 0.2] + + # Months or seasons to plot + seasons = ['ANN', 'FM', 'ON'] + + # comparison grid(s) (typically 'antarctic_extended') on which to plot analysis + comparisonGrids = ['antarctic_extended'] + + # a list of prefixes describing the sources of the observations to be used + observationPrefixes = [''] + + # arrange subplots vertically? + vertical = False + +The option ``vertical = True`` can be used to plot 3 panels one above another +(resulting in a tall, thin image) rather than next to each other, the default +(resulting in a short, wide image). + +For details on the remaining configration options, see: + * :ref:`config_colormaps` + * :ref:`config_seasons` + * :ref:`config_comparison_grids` + +Example Result +-------------- + +.. image:: examples/ice_snowiceformation_sh.png + :width: 720 px + :align: center diff --git a/docs/users_guide/tasks/examples/ice_pondarea_nh.png b/docs/users_guide/tasks/examples/ice_pondarea_nh.png new file mode 100644 index 000000000..e5edcc6e0 Binary files /dev/null and b/docs/users_guide/tasks/examples/ice_pondarea_nh.png differ diff --git a/docs/users_guide/tasks/examples/ice_pondarea_sh.png b/docs/users_guide/tasks/examples/ice_pondarea_sh.png new file mode 100644 index 000000000..0573c6ceb Binary files /dev/null and b/docs/users_guide/tasks/examples/ice_pondarea_sh.png differ diff --git a/docs/users_guide/tasks/examples/ice_snowiceformation_nh.png b/docs/users_guide/tasks/examples/ice_snowiceformation_nh.png new file mode 100644 index 000000000..7953634d3 Binary files /dev/null and b/docs/users_guide/tasks/examples/ice_snowiceformation_nh.png differ diff --git a/docs/users_guide/tasks/examples/ice_snowiceformation_sh.png b/docs/users_guide/tasks/examples/ice_snowiceformation_sh.png new file mode 100644 index 000000000..532a61411 Binary files /dev/null and b/docs/users_guide/tasks/examples/ice_snowiceformation_sh.png differ diff --git a/docs/users_guide/tasks/examples/ice_snowmelt_nh.png b/docs/users_guide/tasks/examples/ice_snowmelt_nh.png new file mode 100644 index 000000000..c1cf90946 Binary files /dev/null and b/docs/users_guide/tasks/examples/ice_snowmelt_nh.png differ diff --git a/docs/users_guide/tasks/examples/ice_snowmelt_sh.png b/docs/users_guide/tasks/examples/ice_snowmelt_sh.png new file mode 100644 index 000000000..72a0d45e8 Binary files /dev/null and b/docs/users_guide/tasks/examples/ice_snowmelt_sh.png differ diff --git a/mpas_analysis/__main__.py b/mpas_analysis/__main__.py index 36cb01e2c..4bbb7c88b 100644 --- a/mpas_analysis/__main__.py +++ b/mpas_analysis/__main__.py @@ -268,6 +268,15 @@ def build_analysis_list(config, controlConfig): analyses.append(sea_ice.ClimatologyMapSeaIceSnowDepth( config=config, mpas_climatology_task=seaIceClimatologyTask, hemisphere='NH', control_config=controlConfig)) + analyses.append(sea_ice.ClimatologyMapSeaIceSnowiceFormation( + config=config, mpas_climatology_task=seaIceClimatologyTask, + hemisphere='NH', control_config=controlConfig)) + analyses.append(sea_ice.ClimatologyMapSeaIceSnowMelt( + config=config, mpas_climatology_task=seaIceClimatologyTask, + hemisphere='NH', control_config=controlConfig)) + analyses.append(sea_ice.ClimatologyMapSeaIcePondArea( + config=config, mpas_climatology_task=seaIceClimatologyTask, + hemisphere='NH', control_config=controlConfig)) analyses.append(sea_ice.ClimatologyMapSeaIceAreaFractionRidge( config=config, mpas_climatology_task=seaIceClimatologyTask, hemisphere='NH', control_config=controlConfig)) @@ -304,6 +313,15 @@ def build_analysis_list(config, controlConfig): analyses.append(sea_ice.ClimatologyMapSeaIceSnowDepth( config=config, mpas_climatology_task=seaIceClimatologyTask, hemisphere='SH', control_config=controlConfig)) + analyses.append(sea_ice.ClimatologyMapSeaIceSnowiceFormation( + config=config, mpas_climatology_task=seaIceClimatologyTask, + hemisphere='SH', control_config=controlConfig)) + analyses.append(sea_ice.ClimatologyMapSeaIceSnowMelt( + config=config, mpas_climatology_task=seaIceClimatologyTask, + hemisphere='SH', control_config=controlConfig)) + analyses.append(sea_ice.ClimatologyMapSeaIcePondArea( + config=config, mpas_climatology_task=seaIceClimatologyTask, + hemisphere='SH', control_config=controlConfig)) analyses.append(sea_ice.ClimatologyMapSeaIceAreaFractionRidge( config=config, mpas_climatology_task=seaIceClimatologyTask, hemisphere='SH', control_config=controlConfig)) diff --git a/mpas_analysis/default.cfg b/mpas_analysis/default.cfg index d01f58f16..a9f160216 100755 --- a/mpas_analysis/default.cfg +++ b/mpas_analysis/default.cfg @@ -4475,7 +4475,7 @@ colormapTypeDifference = indexed # color indices into colormapName for filled contours colormapIndicesDifference = [0, 32, 64, 96, 112, 128, 128, 144, 160, 192, 224, 255] # colormap levels/values for contour boundaries -colorbarLevelsDifference = [-1., -0.8, -0.6, -0.4, -0.2, -0.1, 0, 0.1, 0.2, 0.4, 0.6, 0.8, 1.] +colorbarLevelsDifference = [-0.5, -0.4, -0.3, -0.2, -0.1, -0.05, 0, 0.05, 0.1, 0.2, 0.3, 0.4, 0.5] # Months or seasons to plot (These should be left unchanged, since # observations are only available for these seasons) @@ -4521,7 +4521,7 @@ colormapTypeDifference = indexed # color indices into colormapName for filled contours colormapIndicesDifference = [0, 32, 64, 96, 112, 128, 128, 144, 160, 192, 224, 255] # colormap levels/values for contour boundaries -colorbarLevelsDifference = [-1., -0.8, -0.6, -0.4, -0.2, -0.1, 0, 0.1, 0.2, 0.4, 0.6, 0.8, 1.] +colorbarLevelsDifference = [-0.5, -0.4, -0.3, -0.2, -0.1, -0.05, 0, 0.05, 0.1, 0.2, 0.3, 0.4, 0.5] # Months or seasons to plot (These should be left unchanged, since # observations are only available for these seasons) @@ -4722,10 +4722,10 @@ colormapTypeDifference = indexed # color indices into colormapName for filled contours colormapIndicesDifference = [0, 32, 64, 96, 112, 128, 128, 144, 160, 192, 224, 255] # colormap levels/values for contour boundaries -colorbarLevelsDifference = [-1., -0.8, -0.6, -0.4, -0.2, -0.1, 0, 0.1, 0.2, 0.4, 0.6, 0.8, 1.] +colorbarLevelsDifference = [-0.4, -0.3, -0.2, -0.1, -0.05, -0.01, 0, 0.01, 0.05, 0.1, 0.2, 0.3, 0.4] # Times for comparison -seasons = ['FM', 'ON'] +seasons = ['ANN', 'JFM', 'AMJ', 'JAS', 'OND'] # comparison grid(s) (typically 'arctic_extended') on which to plot analysis comparisonGrids = ['arctic_extended'] @@ -4759,10 +4759,10 @@ colormapTypeDifference = indexed # color indices into colormapName for filled contours colormapIndicesDifference = [0, 32, 64, 96, 112, 128, 128, 144, 160, 192, 224, 255] # colormap levels/values for contour boundaries -colorbarLevelsDifference = [-1., -0.8, -0.6, -0.4, -0.2, -0.1, 0, 0.1, 0.2, 0.4, 0.6, 0.8, 1.] +colorbarLevelsDifference = [-0.4, -0.3, -0.2, -0.1, -0.05, -0.01, 0, 0.01, 0.05, 0.1, 0.2, 0.3, 0.4] -# Times for comparison times -seasons = ['FM', 'ON'] +# Times for comparison +seasons = ['ANN', 'DJF', 'MAM', 'JJA', 'SON'] # comparison grid(s) (typically 'antarctic_extended') on which to plot analysis comparisonGrids = ['antarctic_extended'] @@ -4802,8 +4802,8 @@ normArgsDifference = {'vmin': -3., 'vmax': 3.} # place the ticks automatically by default colorbarTicksDifference = [-3, -2, -1, 0, 1, 2, 3] -# Times for comparison times -seasons = ['ANN', 'DJF', 'JJA'] +# Times for comparison +seasons = ['ANN', 'JFM', 'AMJ', 'JAS', 'OND'] # comparison grid(s) (typically 'arctic_extended') on which to plot analysis comparisonGrids = ['arctic_extended'] @@ -4843,8 +4843,8 @@ normArgsDifference = {'vmin': -3., 'vmax': 3.} # place the ticks automatically by default colorbarTicksDifference = [-3, -2, -1, 0, 1, 2, 3] -# Times for comparison times -seasons = ['ANN', 'DJF', 'JJA'] +# Times for comparison +seasons = ['ANN', 'DJF', 'MAM', 'JJA', 'SON'] # comparison grid(s) (typically 'antarctic_extended') on which to plot analysis comparisonGrids = ['antarctic_extended'] @@ -4887,8 +4887,8 @@ normArgsDifference = {'vmin': -3., 'vmax': 3.} # place the ticks automatically by default colorbarTicksDifference = [-3, -2, -1, 0, 1, 2, 3] -# Times for comparison times -seasons = ['ANN', 'DJF', 'JJA'] +# Times for comparison +seasons = ['ANN', 'JFM', 'AMJ', 'JAS', 'OND'] # comparison grid(s) (typically 'arctic_extended') on which to plot analysis comparisonGrids = ['arctic_extended'] @@ -4928,8 +4928,8 @@ normArgsDifference = {'vmin': -3., 'vmax': 3.} # place the ticks automatically by default colorbarTicksDifference = [-3, -2, -1, 0, 1, 2, 3] -# Times for comparison times -seasons = ['ANN', 'DJF', 'JJA'] +# Times for comparison +seasons = ['ANN', 'DJF', 'MAM', 'JJA', 'SON'] # comparison grid(s) (typically 'antarctic_extended') on which to plot analysis comparisonGrids = ['antarctic_extended'] @@ -4967,9 +4967,8 @@ colormapIndicesDifference = [0, 32, 64, 96, 128, 128, 160, 192, 224, 255] # colormap levels/values for contour boundaries colorbarLevelsDifference = [-1.5, -1, -0.5, -0.25, -0.05, 0, 0.05, 0.25, 0.5, 1, 1.5] -# Months or seasons to plot (These should be left unchanged, since -# observations are only available for these seasons) -seasons = ['FM', 'ON'] +# Months or seasons to plot +seasons = ['ANN', 'JFM', 'AMJ', 'JAS', 'OND'] # comparison grid(s) (typically 'arctic_extended') on which to plot analysis comparisonGrids = ['arctic_extended'] @@ -4980,12 +4979,6 @@ observationPrefixes = [''] # arrange subplots vertically? vertical = False -# observations files -#echmod - no snow obs yet -#thicknessNH_ON = ICESat/ICESat_gridded_mean_thickness_NH_on.interp0.5x0.5_20180710.nc -#thicknessNH_FM = ICESat/ICESat_gridded_mean_thickness_NH_fm.interp0.5x0.5_20180710.nc - - [climatologyMapSeaIceSnowDepthSH] # options related to plotting horizontally remapped climatologies of # snow depth against control model results and observations @@ -5009,9 +5002,8 @@ colormapIndicesDifference = [0, 32, 64, 96, 128, 128, 160, 192, 224, 255] # colormap levels/values for contour boundaries colorbarLevelsDifference = [-1.5, -1, -0.5, -0.25, -0.05, 0, 0.05, 0.25, 0.5, 1, 1.5] -# Months or seasons to plot (These should be left unchanged, since -# observations are only available for these seasons) -seasons = ['FM', 'ON'] +# Months or seasons to plot +seasons = ['ANN', 'DJF', 'MAM', 'JJA', 'SON'] # comparison grid(s) (typically 'antarctic_extended') on which to plot analysis comparisonGrids = ['antarctic_extended'] @@ -5022,10 +5014,215 @@ observationPrefixes = [''] # arrange subplots vertically? vertical = False -# observations files -#echmod - no snow obs yet -#thicknessSH_ON = ICESat/ICESat_gridded_mean_thickness_SH_on.interp0.5x0.5_20180710.nc -#thicknessSH_FM = ICESat/ICESat_gridded_mean_thickness_SH_fm.interp0.5x0.5_20180710.nc +[climatologyMapSeaIceSnowiceFormationNH] +# options related to plotting horizontally remapped climatologies of +# snow-ice formation against control model results and observations +# in the northern hemisphere (NH) + +# colormap for model/observations +colormapNameResult = cork +# whether the colormap is indexed or continuous +colormapTypeResult = indexed +# color indices into colormapName for filled contours +colormapIndicesResult = [20, 80, 110, 140, 170, 200, 230, 255] +# colormap levels/values for contour boundaries +colorbarLevelsResult = [0, 0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 1.0, 1.5] + +# colormap for differences +colormapNameDifference = balance +# whether the colormap is indexed or continuous +colormapTypeDifference = indexed +# color indices into colormapName for filled contours +colormapIndicesDifference = [0, 32, 64, 96, 128, 128, 160, 192, 224, 255] +# colormap levels/values for contour boundaries +colorbarLevelsDifference = [-1.0, -0.5, -0.25, -0.1, -0.05, 0, 0.05, 0.1, 0.25, 0.5, 1.0] + +# Months or seasons to plot +seasons = ['ANN', 'JFM', 'AMJ', 'JAS', 'OND'] + +# comparison grid(s) (typically 'arctic_extended') on which to plot analysis +comparisonGrids = ['arctic_extended'] + +# a list of prefixes describing the sources of the observations to be used +observationPrefixes = [''] + +# arrange subplots vertically? +vertical = False + +[climatologyMapSeaIceSnowiceFormationSH] +# options related to plotting horizontally remapped climatologies of +# snow-ice formation against control model results and observations +# in the southern hemisphere (SH) + +# colormap for model/observations +colormapNameResult = cork +# whether the colormap is indexed or continuous +colormapTypeResult = indexed +# color indices into colormapName for filled contours +colormapIndicesResult = [20, 80, 110, 140, 170, 200, 230, 255] +# colormap levels/values for contour boundaries +colorbarLevelsResult = [0, 0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 1.0, 1.5] + +# colormap for differences +colormapNameDifference = balance +# whether the colormap is indexed or continuous +colormapTypeDifference = indexed +# color indices into colormapName for filled contours +colormapIndicesDifference = [0, 32, 64, 96, 128, 128, 160, 192, 224, 255] +# colormap levels/values for contour boundaries +colorbarLevelsDifference = [-1.0, -0.5, -0.25, -0.1, -0.05, 0, 0.05, 0.1, 0.25, 0.5, 1.0] + +# Months or seasons to plot +seasons = ['ANN', 'DJF', 'MAM', 'JJA', 'SON'] + +# comparison grid(s) (typically 'antarctic_extended') on which to plot analysis +comparisonGrids = ['antarctic_extended'] + +# a list of prefixes describing the sources of the observations to be used +observationPrefixes = [''] + +# arrange subplots vertically? +vertical = False + +[climatologyMapSeaIceSnowMeltNH] +# options related to plotting horizontally remapped climatologies of +# snow melt against control model results and observations +# in the northern hemisphere (NH) + +# colormap for model/observations +colormapNameResult = inferno +# whether the colormap is indexed or continuous +colormapTypeResult = indexed +# color indices into colormapName for filled contours +colormapIndicesResult = [20, 80, 110, 140, 170, 200, 230, 255] +# colormap levels/values for contour boundaries +colorbarLevelsResult = [0, 0.01, 0.02, 0.05, 0.1, 0.25, 0.5, 1., 1.5] + +# colormap for differences +colormapNameDifference = balance +# whether the colormap is indexed or continuous +colormapTypeDifference = indexed +# color indices into colormapName for filled contours +colormapIndicesDifference = [0, 32, 64, 96, 128, 128, 160, 192, 224, 255] +# colormap levels/values for contour boundaries +colorbarLevelsDifference = [-1.0, -0.5, -0.25, -0.1, -0.05, 0, 0.05, 0.1, 0.25, 0.5, 1.0] + +# Months or seasons to plot +seasons = ['ANN', 'JFM', 'AMJ', 'JAS', 'OND'] + +# comparison grid(s) (typically 'arctic_extended') on which to plot analysis +comparisonGrids = ['arctic_extended'] + +# a list of prefixes describing the sources of the observations to be used +observationPrefixes = [''] + +# arrange subplots vertically? +vertical = False + +[climatologyMapSeaIceSnowMeltSH] +# options related to plotting horizontally remapped climatologies of +# snow melt against control model results and observations +# in the southern hemisphere (SH) + +# colormap for model/observations +colormapNameResult = inferno +# whether the colormap is indexed or continuous +colormapTypeResult = indexed +# color indices into colormapName for filled contours +colormapIndicesResult = [20, 80, 110, 140, 170, 200, 230, 255] +# colormap levels/values for contour boundaries +colorbarLevelsResult = [0, 0.01, 0.02, 0.05, 0.1, 0.25, 0.5, 1., 1.5] + +# colormap for differences +colormapNameDifference = balance +# whether the colormap is indexed or continuous +colormapTypeDifference = indexed +# color indices into colormapName for filled contours +colormapIndicesDifference = [0, 32, 64, 96, 128, 128, 160, 192, 224, 255] +# colormap levels/values for contour boundaries +colorbarLevelsDifference = [-1.0, -0.5, -0.25, -0.1, -0.05, 0, 0.05, 0.1, 0.25, 0.5, 1.0] + +# Months or seasons to plot +seasons = ['ANN', 'DJF', 'MAM', 'JJA', 'SON'] + +# comparison grid(s) (typically 'antarctic_extended') on which to plot analysis +comparisonGrids = ['antarctic_extended'] + +# a list of prefixes describing the sources of the observations to be used +observationPrefixes = [''] + +# arrange subplots vertically? +vertical = False + +[climatologyMapSeaIcePondAreaNH] +# options related to plotting horizontally remapped climatologies of +# pond area fraction against control model results and observations +# in the northern hemisphere (NH) + +# colormap for model/observations +colormapNameResult = deep +# whether the colormap is indexed or continuous +colormapTypeResult = indexed +# color indices into colormapName for filled contours +colormapIndicesResult = [20, 80, 110, 140, 170, 200, 230, 255] +# colormap levels/values for contour boundaries +colorbarLevelsResult = [0.001, 0.005, 0.01, 0.03, 0.05, 0.1, 0.2, 0.3, 0.4] + +# colormap for differences +colormapNameDifference = balance +# whether the colormap is indexed or continuous +colormapTypeDifference = indexed +# color indices into colormapName for filled contours +colormapIndicesDifference = [0, 32, 64, 96, 128, 128, 160, 192, 224, 255] +# colormap levels/values for contour boundaries +colorbarLevelsDifference = [-0.2, -0.1, -0.05, -0.01, -0.005, 0, 0.005, 0.01, 0.05, 0.1, 0.2] + +# Months or seasons to plot +seasons = ['ANN', 'JFM', 'AMJ', 'JAS', 'OND'] + +# comparison grid(s) (typically 'arctic_extended') on which to plot analysis +comparisonGrids = ['arctic_extended'] + +# a list of prefixes describing the sources of the observations to be used +observationPrefixes = [''] + +# arrange subplots vertically? +vertical = False + +[climatologyMapSeaIcePondAreaSH] +# options related to plotting horizontally remapped climatologies of +# snow melt against control model results and observations +# in the southern hemisphere (SH) + +# colormap for model/observations +colormapNameResult = deep +# whether the colormap is indexed or continuous +colormapTypeResult = indexed +# color indices into colormapName for filled contours +colormapIndicesResult = [20, 80, 110, 140, 170, 200, 230, 255] +# colormap levels/values for contour boundaries +colorbarLevelsResult = [0.001, 0.005, 0.01, 0.03, 0.05, 0.1, 0.2, 0.3, 0.4] + +# colormap for differences +colormapNameDifference = balance +# whether the colormap is indexed or continuous +colormapTypeDifference = indexed +# color indices into colormapName for filled contours +colormapIndicesDifference = [0, 32, 64, 96, 128, 128, 160, 192, 224, 255] +# colormap levels/values for contour boundaries +colorbarLevelsDifference = [-0.2, -0.1, -0.05, -0.01, -0.005, 0, 0.005, 0.01, 0.05, 0.1, 0.2] + +# Months or seasons to plot +seasons = ['ANN', 'DJF', 'MAM', 'JJA', 'SON'] + +# comparison grid(s) (typically 'antarctic_extended') on which to plot analysis +comparisonGrids = ['antarctic_extended'] + +# a list of prefixes describing the sources of the observations to be used +observationPrefixes = [''] + +# arrange subplots vertically? +vertical = False [climatologyMapSeaIceAreaFractionRidgeNH] ## options related to plotting horizontally remapped climatologies of @@ -5037,9 +5234,9 @@ colormapNameResult = tokyo # whether the colormap is indexed or continuous colormapTypeResult = indexed # color indices into colormapName for filled contours -colormapIndicesResult = [20, 50, 80, 110, 140, 170, 200, 230, 255] +colormapIndicesResult = [10, 20, 50, 80, 110, 140, 170, 200, 230, 255] # colormap levels/values for contour boundaries -colorbarLevelsResult = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1] +colorbarLevelsResult = [0.01,0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1] # colormap for differences colormapNameDifference = balance @@ -5048,11 +5245,10 @@ colormapTypeDifference = indexed # color indices into colormapName for filled contours colormapIndicesDifference = [0, 32, 64, 96, 112, 128, 128, 144, 160, 192, 224, 255] # colormap levels/values for contour boundaries -colorbarLevelsDifference = [-1., -0.8, -0.6, -0.4, -0.2, -0.1, 0, 0.1, 0.2, 0.4, 0.6, 0.8, 1.] +colorbarLevelsDifference = [-0.25, -0.2, -0.15, -0.1, -0.05, -0.025, 0, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25] -# Months or seasons to plot (These should be left unchanged, since -# observations are only available for these seasons) -seasons = ['FM', 'ON'] +# Months or seasons to plot +seasons = ['ANN', 'JFM', 'AMJ', 'JAS', 'OND'] # comparison grid(s) (typically 'arctic_extended') on which to plot analysis comparisonGrids = ['arctic_extended'] @@ -5073,9 +5269,9 @@ colormapNameResult = tokyo # whether the colormap is indexed or continuous colormapTypeResult = indexed # color indices into colormapName for filled contours -colormapIndicesResult = [20, 50, 80, 110, 140, 170, 200, 230, 255] +colormapIndicesResult = [10, 20, 50, 80, 110, 140, 170, 200, 230, 255] # colormap levels/values for contour boundaries -colorbarLevelsResult = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1] +colorbarLevelsResult = [0.01,0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1] # colormap for differences colormapNameDifference = balance @@ -5084,11 +5280,10 @@ colormapTypeDifference = indexed # color indices into colormapName for filled contours colormapIndicesDifference = [0, 32, 64, 96, 112, 128, 128, 144, 160, 192, 224, 255] # colormap levels/values for contour boundaries -colorbarLevelsDifference = [-1., -0.8, -0.6, -0.4, -0.2, -0.1, 0, 0.1, 0.2, 0.4, 0.6, 0.8, 1.] +colorbarLevelsDifference = [-0.25, -0.2, -0.15, -0.1, -0.05, -0.025, 0, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25] -# Months or seasons to plot (These should be left unchanged, since -# observations are only available for these seasons) -seasons = ['FM', 'ON'] +# Months or seasons to plot +seasons = ['ANN', 'DJF', 'MAM', 'JJA', 'SON'] # comparison grid(s) (typically 'antarctic_extended') on which to plot analysis comparisonGrids = ['antarctic_extended'] @@ -5120,11 +5315,10 @@ colormapTypeDifference = indexed # color indices into colormapName for filled contours colormapIndicesDifference = [0, 32, 64, 96, 128, 128, 160, 192, 224, 255] # colormap levels/values for contour boundaries -colorbarLevelsDifference = [-3., -2.5, -2, -0.5, -0.1, 0, 0.1, 0.5, 2, 2.5, 3.] +colorbarLevelsDifference = [-1., -0.5, -0.25, -0.1, -0.05, 0, 0.05, 0.1, 0.25, 0.5, 1.] -# Months or seasons to plot (These should be left unchanged, since -# observations are only available for these seasons) -seasons = ['FM', 'ON'] +# Months or seasons to plot +seasons = ['ANN', 'JFM', 'AMJ', 'JAS', 'OND'] # comparison grid(s) (typically 'arctic_extended') on which to plot analysis comparisonGrids = ['arctic_extended'] @@ -5156,11 +5350,10 @@ colormapTypeDifference = indexed # color indices into colormapName for filled contours colormapIndicesDifference = [0, 32, 64, 96, 128, 128, 160, 192, 224, 255] # colormap levels/values for contour boundaries -colorbarLevelsDifference = [-3., -2.5, -2, -0.5, -0.1, 0, 0.1, 0.5, 2, 2.5, 3.] +colorbarLevelsDifference = [-1., -0.5, -0.25, -0.1, -0.05, 0, 0.05, 0.1, 0.25, 0.5, 1.] -# Months or seasons to plot (These should be left unchanged, since -# observations are only available for these seasons) -seasons = ['FM', 'ON'] +# Months or seasons to plot +seasons = ['ANN', 'DJF', 'MAM', 'JJA', 'SON'] # comparison grid(s) (typically 'antarctic_extended') on which to plot analysis comparisonGrids = ['antarctic_extended'] @@ -5184,7 +5377,6 @@ colormapTypeResult = indexed # color indices into colormapName for filled contours colormapIndicesResult = [0, 32, 64, 96, 112, 128, 128, 144, 160, 192, 224, 255] # colormap levels/values for contour boundaries -#colorbarLevelsResult = [-1., -0.8, -0.6, -0.4, -0.2, -0.1, 0, 0.1, 0.2, 0.4, 0.6, 0.8, 1.] colorbarLevelsResult = [-5., -4., -3., -2., -1., -0.5, 0, 0.5, 1., 2., 3., 4., 5.] # colormap for differences @@ -5194,10 +5386,10 @@ colormapTypeDifference = indexed # color indices into colormapName for filled contours colormapIndicesDifference = [0, 32, 64, 96, 112, 128, 128, 144, 160, 192, 224, 255] # colormap levels/values for contour boundaries -colorbarLevelsDifference = [-1., -0.8, -0.6, -0.4, -0.2, -0.1, 0, 0.1, 0.2, 0.4, 0.6, 0.8, 1.] +colorbarLevelsDifference = [-2.0, -1.5, -1.0, -0.7, -0.4, -0.1, 0, 0.1, 0.4, 0.7, 1.0, 1.5, 2.0] -# Times for comparison -seasons = ['FM', 'ON'] +# Months or seasons to plot +seasons = ['ANN', 'JFM', 'AMJ', 'JAS', 'OND'] # comparison grid(s) (typically 'arctic_extended') on which to plot analysis comparisonGrids = ['arctic_extended'] @@ -5222,7 +5414,6 @@ colormapTypeResult = indexed # color indices into colormapName for filled contours colormapIndicesResult = [0, 32, 64, 96, 112, 128, 128, 144, 160, 192, 224, 255] # colormap levels/values for contour boundaries -#colorbarLevelsResult = [-3., -2.4, -1.8, -1.2, -0.6, -0.3, 0, 0.3, 0.6, 1.2, 1.8, 2.4, 3.] colorbarLevelsResult = [-5., -4., -3., -2., -1., -0.5, 0, 0.5, 1., 2., 3., 4., 5.] # colormap for differences @@ -5232,10 +5423,10 @@ colormapTypeDifference = indexed # color indices into colormapName for filled contours colormapIndicesDifference = [0, 32, 64, 96, 112, 128, 128, 144, 160, 192, 224, 255] # colormap levels/values for contour boundaries -colorbarLevelsDifference = [-1., -0.8, -0.6, -0.4, -0.2, -0.1, 0, 0.1, 0.2, 0.4, 0.6, 0.8, 1.] +colorbarLevelsDifference = [-2.0, -1.5, -1.0, -0.7, -0.4, -0.1, 0, 0.1, 0.4, 0.7, 1.0, 1.5, 2.0] -# Times for comparison times -seasons = ['FM', 'ON'] +# Months or seasons to plot +seasons = ['ANN', 'DJF', 'MAM', 'JJA', 'SON'] # comparison grid(s) (typically 'antarctic_extended') on which to plot analysis comparisonGrids = ['antarctic_extended'] @@ -5260,7 +5451,6 @@ colormapTypeResult = indexed # color indices into colormapName for filled contours colormapIndicesResult = [0, 32, 64, 96, 112, 128, 128, 144, 160, 192, 224, 255] # colormap levels/values for contour boundaries -#colorbarLevelsResult = [-1., -0.8, -0.6, -0.4, -0.2, -0.1, 0, 0.1, 0.2, 0.4, 0.6, 0.8, 1.] colorbarLevelsResult = [-5., -4., -3., -2., -1., -0.5, 0, 0.5, 1., 2., 3., 4., 5.] # colormap for differences @@ -5270,10 +5460,10 @@ colormapTypeDifference = indexed # color indices into colormapName for filled contours colormapIndicesDifference = [0, 32, 64, 96, 112, 128, 128, 144, 160, 192, 224, 255] # colormap levels/values for contour boundaries -colorbarLevelsDifference = [-1., -0.8, -0.6, -0.4, -0.2, -0.1, 0, 0.1, 0.2, 0.4, 0.6, 0.8, 1.] +colorbarLevelsDifference = [-2.0, -1.5, -1.0, -0.7, -0.4, -0.1, 0, 0.1, 0.4, 0.7, 1.0, 1.5, 2.0] -# Times for comparison -seasons = ['FM', 'ON'] +# Months or seasons to plot +seasons = ['ANN', 'JFM', 'AMJ', 'JAS', 'OND'] # comparison grid(s) (typically 'arctic_extended') on which to plot analysis comparisonGrids = ['arctic_extended'] @@ -5298,7 +5488,6 @@ colormapTypeResult = indexed # color indices into colormapName for filled contours colormapIndicesResult = [0, 32, 64, 96, 112, 128, 128, 144, 160, 192, 224, 255] # colormap levels/values for contour boundaries -#colorbarLevelsResult = [-3., -2.4, -1.8, -1.2, -0.6, -0.3, 0, 0.3, 0.6, 1.2, 1.8, 2.4, 3.] colorbarLevelsResult = [-5., -4., -3., -2., -1., -0.5, 0, 0.5, 1., 2., 3., 4., 5.] # colormap for differences @@ -5308,10 +5497,10 @@ colormapTypeDifference = indexed # color indices into colormapName for filled contours colormapIndicesDifference = [0, 32, 64, 96, 112, 128, 128, 144, 160, 192, 224, 255] # colormap levels/values for contour boundaries -colorbarLevelsDifference = [-1., -0.8, -0.6, -0.4, -0.2, -0.1, 0, 0.1, 0.2, 0.4, 0.6, 0.8, 1.] +colorbarLevelsDifference = [-2.0, -1.5, -1.0, -0.7, -0.4, -0.1, 0, 0.1, 0.4, 0.7, 1.0, 1.5, 2.0] -# Times for comparison times -seasons = ['FM', 'ON'] +# Months or seasons to plot +seasons = ['ANN', 'DJF', 'MAM', 'JJA', 'SON'] # comparison grid(s) (typically 'antarctic_extended') on which to plot analysis comparisonGrids = ['antarctic_extended'] @@ -5335,7 +5524,6 @@ colormapTypeResult = indexed # color indices into colormapName for filled contours colormapIndicesResult = [0, 32, 64, 96, 112, 128, 128, 144, 160, 192, 224, 255] # colormap levels/values for contour boundaries -#colorbarLevelsResult = [-1., -0.8, -0.6, -0.4, -0.2, -0.1, 0, 0.1, 0.2, 0.4, 0.6, 0.8, 1.] colorbarLevelsResult = [-5., -4., -3., -2., -1., -0.5, 0, 0.5, 1., 2., 3., 4., 5.] # colormap for differences @@ -5345,10 +5533,10 @@ colormapTypeDifference = indexed # color indices into colormapName for filled contours colormapIndicesDifference = [0, 32, 64, 96, 112, 128, 128, 144, 160, 192, 224, 255] # colormap levels/values for contour boundaries -colorbarLevelsDifference = [-1., -0.8, -0.6, -0.4, -0.2, -0.1, 0, 0.1, 0.2, 0.4, 0.6, 0.8, 1.] +colorbarLevelsDifference = [-2.0, -1.5, -1.0, -0.7, -0.4, -0.1, 0, 0.1, 0.4, 0.7, 1.0, 1.5, 2.0] -# Times for comparison -seasons = ['FM', 'ON'] +# Months or seasons to plot +seasons = ['ANN', 'JFM', 'AMJ', 'JAS', 'OND'] # comparison grid(s) (typically 'arctic_extended') on which to plot analysis comparisonGrids = ['arctic_extended'] @@ -5373,7 +5561,6 @@ colormapTypeResult = indexed # color indices into colormapName for filled contours colormapIndicesResult = [0, 32, 64, 96, 112, 128, 128, 144, 160, 192, 224, 255] # colormap levels/values for contour boundaries -#colorbarLevelsResult = [-3., -2.4, -1.8, -1.2, -0.6, -0.3, 0, 0.3, 0.6, 1.2, 1.8, 2.4, 3.] colorbarLevelsResult = [-5., -4., -3., -2., -1., -0.5, 0, 0.5, 1., 2., 3., 4., 5.] # colormap for differences @@ -5383,10 +5570,10 @@ colormapTypeDifference = indexed # color indices into colormapName for filled contours colormapIndicesDifference = [0, 32, 64, 96, 112, 128, 128, 144, 160, 192, 224, 255] # colormap levels/values for contour boundaries -colorbarLevelsDifference = [-1., -0.8, -0.6, -0.4, -0.2, -0.1, 0, 0.1, 0.2, 0.4, 0.6, 0.8, 1.] +colorbarLevelsDifference = [-2.0, -1.5, -1.0, -0.7, -0.4, -0.1, 0, 0.1, 0.4, 0.7, 1.0, 1.5, 2.0] -# Times for comparison times -seasons = ['FM', 'ON'] +# Months or seasons to plot +seasons = ['ANN', 'DJF', 'MAM', 'JJA', 'SON'] # comparison grid(s) (typically 'antarctic_extended') on which to plot analysis comparisonGrids = ['antarctic_extended'] @@ -5411,7 +5598,6 @@ colormapTypeResult = indexed # color indices into colormapName for filled contours colormapIndicesResult = [0, 32, 64, 96, 112, 128, 128, 144, 160, 192, 224, 255] # colormap levels/values for contour boundaries -#colorbarLevelsResult = [-1., -0.8, -0.6, -0.4, -0.2, -0.1, 0, 0.1, 0.2, 0.4, 0.6, 0.8, 1.] colorbarLevelsResult = [-5., -4., -3., -2., -1., -0.5, 0, 0.5, 1., 2., 3., 4., 5.] # colormap for differences @@ -5421,10 +5607,10 @@ colormapTypeDifference = indexed # color indices into colormapName for filled contours colormapIndicesDifference = [0, 32, 64, 96, 112, 128, 128, 144, 160, 192, 224, 255] # colormap levels/values for contour boundaries -colorbarLevelsDifference = [-1., -0.8, -0.6, -0.4, -0.2, -0.1, 0, 0.1, 0.2, 0.4, 0.6, 0.8, 1.] +colorbarLevelsDifference = [-2.0, -1.5, -1.0, -0.7, -0.4, -0.1, 0, 0.1, 0.4, 0.7, 1.0, 1.5, 2.0] -# Times for comparison -seasons = ['FM', 'ON'] +# Months or seasons to plot +seasons = ['ANN', 'JFM', 'AMJ', 'JAS', 'OND'] # comparison grid(s) (typically 'arctic_extended') on which to plot analysis comparisonGrids = ['arctic_extended'] @@ -5449,7 +5635,6 @@ colormapTypeResult = indexed # color indices into colormapName for filled contours colormapIndicesResult = [0, 32, 64, 96, 112, 128, 128, 144, 160, 192, 224, 255] # colormap levels/values for contour boundaries -#colorbarLevelsResult = [-3., -2.4, -1.8, -1.2, -0.6, -0.3, 0, 0.3, 0.6, 1.2, 1.8, 2.4, 3.] colorbarLevelsResult = [-5., -4., -3., -2., -1., -0.5, 0, 0.5, 1., 2., 3., 4., 5.] # colormap for differences @@ -5459,10 +5644,10 @@ colormapTypeDifference = indexed # color indices into colormapName for filled contours colormapIndicesDifference = [0, 32, 64, 96, 112, 128, 128, 144, 160, 192, 224, 255] # colormap levels/values for contour boundaries -colorbarLevelsDifference = [-1., -0.8, -0.6, -0.4, -0.2, -0.1, 0, 0.1, 0.2, 0.4, 0.6, 0.8, 1.] +colorbarLevelsDifference = [-2.0, -1.5, -1.0, -0.7, -0.4, -0.1, 0, 0.1, 0.4, 0.7, 1.0, 1.5, 2.0] -# Times for comparison times -seasons = ['FM', 'ON'] +# Months or seasons to plot +seasons = ['ANN', 'DJF', 'MAM', 'JJA', 'SON'] # comparison grid(s) (typically 'antarctic_extended') on which to plot analysis comparisonGrids = ['antarctic_extended'] diff --git a/mpas_analysis/sea_ice/__init__.py b/mpas_analysis/sea_ice/__init__.py index 3eed38d5b..dfc8ccca7 100644 --- a/mpas_analysis/sea_ice/__init__.py +++ b/mpas_analysis/sea_ice/__init__.py @@ -25,3 +25,9 @@ ClimatologyMapSeaIceProduction from mpas_analysis.sea_ice.climatology_map_melting import \ ClimatologyMapSeaIceMelting +from mpas_analysis.sea_ice.climatology_map_snowice import \ + ClimatologyMapSeaIceSnowiceFormation +from mpas_analysis.sea_ice.climatology_map_snowmelt import \ + ClimatologyMapSeaIceSnowMelt +from mpas_analysis.sea_ice.climatology_map_area_pond import \ + ClimatologyMapSeaIcePondArea diff --git a/mpas_analysis/sea_ice/climatology_map_albedo.py b/mpas_analysis/sea_ice/climatology_map_albedo.py index 1e1f9dbd0..685838377 100755 --- a/mpas_analysis/sea_ice/climatology_map_albedo.py +++ b/mpas_analysis/sea_ice/climatology_map_albedo.py @@ -54,7 +54,7 @@ def __init__(self, config, mpas_climatology_task, hemisphere, field_name = 'seaIceBroadbandAlbedo' - tags = ['climatology', 'horizontalMap', field_name, 'publicObs', 'snow'] + tags = ['climatology', 'horizontalMap', field_name, 'publicObs', 'snow_on_sea_ice'] if hemisphere == 'NH': tags = tags + ['arctic'] else: @@ -160,7 +160,7 @@ def __init__(self, config, mpas_climatology_task, hemisphere, groupSubtitle=None, groupLink=f'{hemisphere.lower()}_albedo', galleryName=gallery_name, - extend='neither', + extend='both', prependComparisonGrid=False) self.add_subtask(subtask) diff --git a/mpas_analysis/sea_ice/climatology_map_area_pond.py b/mpas_analysis/sea_ice/climatology_map_area_pond.py new file mode 100755 index 000000000..516c28d17 --- /dev/null +++ b/mpas_analysis/sea_ice/climatology_map_area_pond.py @@ -0,0 +1,258 @@ +# Copyright (c) 2017, Los Alamos National Security, LLC (LANS) +# and the University Corporation for Atmospheric Research (UCAR). +# +# Unless noted otherwise source code is licensed under the BSD license. +# Additional copyright and license information can be found in the LICENSE file +# distributed with this code, or at http://mpas-dev.github.com/license.html +# + +import xarray as xr +from pyremap import LatLon2DGridDescriptor + +from mpas_analysis.shared import AnalysisTask + +from mpas_analysis.shared.climatology import RemapMpasClimatologySubtask, \ + RemapObservedClimatologySubtask + +from mpas_analysis.shared.plot import PlotClimatologyMapSubtask + +from mpas_analysis.shared.io.utility import build_obs_path + + +class ClimatologyMapSeaIcePondArea(AnalysisTask): + """ + An analysis task for melt pond area + """ + # Authors + # ------- + # Elizabeth Hunke, Xylar Asay-Davis + + def __init__(self, config, mpas_climatology_task, hemisphere, + control_config=None): + """ + Construct the analysis task. + + Parameters + ---------- + config : mpas_tools.config.MpasConfigParser + Configuration options + + mpas_climatology_task : mpas_analysis.shared.climatology.MpasClimatologyTask + The task that produced the climatology to be remapped and plotted + + hemisphere : {'NH', 'SH'} + The hemisphere to plot + + control_config : mpas_tools.config.MpasConfigParser, optional + Configuration options for a control run (if any) + """ + # Authors + # ------- + # Elizabeth Hunke, Xylar Asay-Davis + + task_name = f'climatologyMapSeaIcePondArea{hemisphere}' + + field_name = 'meltPondAreaFinalArea' + + tags = ['climatology', 'horizontalMap', field_name, 'publicObs'] + if hemisphere == 'NH': + tags = tags + ['arctic'] + else: + tags = tags + ['antarctic'] + + # call the constructor from the base class (AnalysisTask) + super().__init__(config=config, taskName=task_name, + componentName='seaIce', tags=tags) + + self.mpas_climatology_task = mpas_climatology_task + + section_name = self.taskName + + if hemisphere == 'NH': + hemisphere_long= 'Northern' + else: + hemisphere_long= 'Southern' + + # read in what seasons we want to plot + seasons = config.getexpression(section_name, 'seasons') + + if len(seasons) == 0: + raise ValueError(f'config section {section_name} does not contain ' + f'valid list of seasons') + + comparison_grid_names = config.getexpression(section_name, + 'comparisonGrids') + + if len(comparison_grid_names) == 0: + raise ValueError(f'config section {section_name} does not contain ' + f'valid list of comparison grids') + + variable_list = ['timeMonthly_avg_meltPondAreaFinalArea'] + + remap_climatology_subtask = RemapMpasPondAreaClimatology( + mpas_climatology_task=mpas_climatology_task, + parent_task=self, + climatology_name=f'{field_name}{hemisphere}', + variable_list=variable_list, + comparison_grid_names=comparison_grid_names, + seasons=seasons) + + self.add_subtask(remap_climatology_subtask) + + for season in seasons: + for comparison_grid_name in comparison_grid_names: + + if control_config is None: +#echmod - no observations yet +# if hemisphere == 'SH' and season == 'ANN': +# ref_title_label = 'Observations (AnIceFlux)' +# gallery_name = 'Pond Area Fraction' +# diff_title_label = 'Model - Observations' +# obs_file_name = build_obs_path( +# config, 'seaIce', +# relativePathOption=f'melting{hemisphere}', +# relativePathSection=section_name) + +# remap_observations_subtask = RemapAnIceFluxMeltingClimatology( +# parentTask=self, seasons=seasons, +# fileName=obs_file_name, +# outFilePrefix=f'{field_name}{hemisphere}', +# comparisonGridNames=comparison_grid_names) +# self.add_subtask(remap_observations_subtask) +# else: + remap_observations_subtask = None + gallery_name = 'Pond Area Fraction' + ref_title_label = None + ref_field_name = None + diff_title_label = 'Model - Observations' + + else: + control_run_name = control_config.get('runs', 'mainRunName') + gallery_name = 'Pond Area Fraction' + ref_title_label = f'Control: {control_run_name}' + field_name = field_name + diff_title_label = 'Main - Control' + + remap_observations_subtask = None + + image_caption = f'Climatology Map of ' \ + f'{hemisphere_long}-Hemisphere ' \ + f'Fraction of Cell Covered in Ponds' + gallery_group = f'{hemisphere_long}-Hemisphere Melt Ponds' + # make a new subtask for this season and comparison grid + subtask = PlotClimatologyMapSubtask( + parentTask=self, season=season, + comparisonGridName=comparison_grid_name, + remapMpasClimatologySubtask=remap_climatology_subtask, + remapObsClimatologySubtask=remap_observations_subtask, + controlConfig=control_config) + + subtask.set_plot_info( + outFileLabel=f'seaice_pondarea{hemisphere}', + fieldNameInTitle='Pond Area Fraction', + mpasFieldName=field_name, + refFieldName=field_name, + refTitleLabel=ref_title_label, + diffTitleLabel=diff_title_label, + unitsLabel=r' ', + imageCaption=image_caption, + galleryGroup=gallery_group, + groupSubtitle=None, + groupLink=f'{hemisphere.lower()}_pondarea', + galleryName=gallery_name, + extend='both', + prependComparisonGrid=False) + + self.add_subtask(subtask) + + +class RemapMpasPondAreaClimatology(RemapMpasClimatologySubtask): + """ + A subtask for computing climatologies of melt pond area fraction + """ + def __init__(self, mpas_climatology_task, parent_task, climatology_name, + variable_list, seasons, comparison_grid_names): + + """ + Construct the analysis task and add it as a subtask of the + ``parent_task``. + Parameters + ---------- + mpas_climatology_task : mpas_analysis.shared.climatology.MpasClimatologyTask + The task that produced the climatology to be remapped + parent_task : mpas_analysis.shared.AnalysisTask + The parent task, used to get the ``taskName``, ``config`` and + ``componentName`` + climatology_name : str + A name that describes the climatology (e.g. a short version of + the important field(s) in the climatology) used to name the + subdirectories for each stage of the climatology + variable_list : list of str + A list of variable names in ``timeSeriesStatsMonthly`` to be + included in the climatologies + seasons : list of str, optional + A list of seasons (keys in ``shared.constants.monthDictionary``) + to be computed or ['none'] (not ``None``) if only monthly + climatologies are needed. + comparison_grid_names : list of {'latlon', 'antarctic'} + The name(s) of the comparison grid to use for remapping. + """ + + subtask_name = f'remapMpasClimatology_meltPondArea' + # call the constructor from the base class + # (RemapMpasClimatologySubtask) + super().__init__( + mpas_climatology_task, parent_task, climatology_name, + variable_list, seasons, comparison_grid_names) + + self.mpas_climatology_task = mpas_climatology_task + self.variable_list = variable_list + + def setup_and_check(self): + """ + Perform steps to set up the analysis and check for errors in the setup. + """ + + # first, call setup_and_check from the base class + # (RemapMpasClimatologySubtask), which will set up remappers and add + # variables to mpas_climatology_task + super().setup_and_check() + + # don't add the variables and seasons to mpas_climatology_task until + # we're sure this subtask is supposed to run + self.mpas_climatology_task.add_variables(self.variable_list, + self.seasons) + + def customize_masked_climatology(self, climatology, season): + """ + Compute the melt pond fraction + Parameters + ---------- + climatology : xarray.Dataset + the climatology data set + season : str + The name of the season to be masked + Returns + ------- + climatology : xarray.Dataset + the modified climatology data set + """ + + pondarea = self._compute_pondarea(climatology) + + climatology['meltPondAreaFinalArea'] = pondarea + climatology.meltPondAreaFinalArea.attrs['units'] = ' ' + climatology = climatology.drop_vars(self.variable_list) + + return climatology + + def _compute_pondarea(self, climatology): + """ + Compute the melt pond area fraction + """ + ds_restart = xr.open_dataset(self.restartFileName) + ds_restart = ds_restart.isel(Time=0) + + pondarea = climatology['timeMonthly_avg_meltPondAreaFinalArea'] + + return pondarea diff --git a/mpas_analysis/sea_ice/climatology_map_area_ridge.py b/mpas_analysis/sea_ice/climatology_map_area_ridge.py index 6addade66..953a4863b 100755 --- a/mpas_analysis/sea_ice/climatology_map_area_ridge.py +++ b/mpas_analysis/sea_ice/climatology_map_area_ridge.py @@ -164,7 +164,7 @@ def __init__(self, config, mpas_climatology_task, hemisphere, # groupLink=f'{hemisphere.lower()}_ridgearea', groupLink=f'{hemisphere.lower()}_ridge', galleryName=gallery_name, - extend='neither', + extend='both', prependComparisonGrid=False) self.add_subtask(subtask) diff --git a/mpas_analysis/sea_ice/climatology_map_snow_depth.py b/mpas_analysis/sea_ice/climatology_map_snow_depth.py index c8de8dde8..9511b7700 100755 --- a/mpas_analysis/sea_ice/climatology_map_snow_depth.py +++ b/mpas_analysis/sea_ice/climatology_map_snow_depth.py @@ -54,7 +54,7 @@ def __init__(self, config, mpas_climatology_task, hemisphere, field_name = 'seaIceSnowDepth' - tags = ['climatology', 'horizontalMap', field_name, 'publicObs', 'snow'] + tags = ['climatology', 'horizontalMap', field_name, 'publicObs'] if hemisphere == 'NH': tags = tags + ['arctic'] else: @@ -161,7 +161,7 @@ def __init__(self, config, mpas_climatology_task, hemisphere, groupSubtitle=None, groupLink=f'{hemisphere.lower()}_snowdepth', galleryName=gallery_name, - extend='max', + extend='both', prependComparisonGrid=False) self.add_subtask(subtask) diff --git a/mpas_analysis/sea_ice/climatology_map_snowice.py b/mpas_analysis/sea_ice/climatology_map_snowice.py new file mode 100755 index 000000000..595401138 --- /dev/null +++ b/mpas_analysis/sea_ice/climatology_map_snowice.py @@ -0,0 +1,266 @@ +# Copyright (c) 2017, Los Alamos National Security, LLC (LANS) +# and the University Corporation for Atmospheric Research (UCAR). +# +# Unless noted otherwise source code is licensed under the BSD license. +# Additional copyright and license information can be found in the LICENSE file +# distributed with this code, or at http://mpas-dev.github.com/license.html +# + +import xarray as xr +from pyremap import LatLon2DGridDescriptor + +from mpas_analysis.shared import AnalysisTask + +from mpas_analysis.shared.climatology import RemapMpasClimatologySubtask, \ + RemapObservedClimatologySubtask + +from mpas_analysis.shared.plot import PlotClimatologyMapSubtask + +from mpas_analysis.shared.io.utility import build_obs_path + + +class ClimatologyMapSeaIceSnowiceFormation(AnalysisTask): + """ + An analysis task for snow-ice formation rate + """ + # Authors + # ------- + # Elizabeth Hunke, Xylar Asay-Davis + + def __init__(self, config, mpas_climatology_task, hemisphere, + control_config=None): + """ + Construct the analysis task. + + Parameters + ---------- + config : mpas_tools.config.MpasConfigParser + Configuration options + + mpas_climatology_task : mpas_analysis.shared.climatology.MpasClimatologyTask + The task that produced the climatology to be remapped and plotted + + hemisphere : {'NH', 'SH'} + The hemisphere to plot + + control_config : mpas_tools.config.MpasConfigParser, optional + Configuration options for a control run (if any) + """ + # Authors + # ------- + # Elizabeth Hunke, Xylar Asay-Davis + + task_name = f'climatologyMapSeaIceSnowiceFormation{hemisphere}' + + field_name = 'snowiceFormation' + + tags = ['climatology', 'horizontalMap', field_name, 'publicObs'] + if hemisphere == 'NH': + tags = tags + ['arctic'] + else: + tags = tags + ['antarctic'] + + # call the constructor from the base class (AnalysisTask) + super().__init__(config=config, taskName=task_name, + componentName='seaIce', tags=tags) + + self.mpas_climatology_task = mpas_climatology_task + + section_name = self.taskName + + if hemisphere == 'NH': + hemisphere_long= 'Northern' + else: + hemisphere_long= 'Southern' + + # read in what seasons we want to plot + seasons = config.getexpression(section_name, 'seasons') + + if len(seasons) == 0: + raise ValueError(f'config section {section_name} does not contain ' + f'valid list of seasons') + + comparison_grid_names = config.getexpression(section_name, + 'comparisonGrids') + + if len(comparison_grid_names) == 0: + raise ValueError(f'config section {section_name} does not contain ' + f'valid list of comparison grids') + + variable_list = ['timeMonthly_avg_snowiceFormation'] + + remap_climatology_subtask = RemapMpasSnowiceFormationClimatology( + mpas_climatology_task=mpas_climatology_task, + parent_task=self, + climatology_name=f'{field_name}{hemisphere}', + variable_list=variable_list, + comparison_grid_names=comparison_grid_names, + seasons=seasons) + + self.add_subtask(remap_climatology_subtask) + + for season in seasons: + for comparison_grid_name in comparison_grid_names: + + if control_config is None: +#echmod - no observations yet +# if hemisphere == 'SH' and season == 'ANN': +# ref_title_label = 'Observations (AnIceFlux)' +# gallery_name = 'Snow-ice Formation Rate' +# diff_title_label = 'Model - Observations' +# obs_file_name = build_obs_path( +# config, 'seaIce', +# relativePathOption=f'melting{hemisphere}', +# relativePathSection=section_name) + +# remap_observations_subtask = RemapAnIceFluxMeltingClimatology( +# parentTask=self, seasons=seasons, +# fileName=obs_file_name, +# outFilePrefix=f'{field_name}{hemisphere}', +# comparisonGridNames=comparison_grid_names) +# self.add_subtask(remap_observations_subtask) +# else: +# remap_observations_subtask = None +# gallery_name = 'Snow-ice Formation Rate' +# ref_title_label = None +# ref_field_name = None +# diff_title_label = 'Model - Observations' + remap_observations_subtask = None + gallery_name = 'Snow-ice Formation Rate' + ref_title_label = None + ref_field_name = None + diff_title_label = 'Model - Observations' + + else: + control_run_name = control_config.get('runs', 'mainRunName') + gallery_name = 'Snow-ice Formation Rate' + ref_title_label = f'Control: {control_run_name}' + field_name = field_name + diff_title_label = 'Main - Control' + + remap_observations_subtask = None + + image_caption = f'Climatology Map of ' \ + f'{hemisphere_long}-Hemisphere ' \ + f'Snow-ice Formation Rate' + gallery_group = f'{hemisphere_long}-Hemisphere Snow Loss Processes' + # make a new subtask for this season and comparison grid + subtask = PlotClimatologyMapSubtask( + parentTask=self, season=season, + comparisonGridName=comparison_grid_name, + remapMpasClimatologySubtask=remap_climatology_subtask, + remapObsClimatologySubtask=remap_observations_subtask, + controlConfig=control_config) + + subtask.set_plot_info( + outFileLabel=f'seaice_snowice{hemisphere}', + fieldNameInTitle='Snow-ice formation rate', + mpasFieldName=field_name, + refFieldName=field_name, + refTitleLabel=ref_title_label, + diffTitleLabel=diff_title_label, + unitsLabel=r'm yr$^{-1}$', + imageCaption=image_caption, + galleryGroup=gallery_group, + groupSubtitle=None, + groupLink=f'{hemisphere.lower()}_snowice', + galleryName=gallery_name, + extend='both', + prependComparisonGrid=False) + + self.add_subtask(subtask) + + +class RemapMpasSnowiceFormationClimatology(RemapMpasClimatologySubtask): + """ + A subtask for computing climatologies of snow-ice formation rate + """ + def __init__(self, mpas_climatology_task, parent_task, climatology_name, + variable_list, seasons, comparison_grid_names): + + """ + Construct the analysis task and add it as a subtask of the + ``parent_task``. + Parameters + ---------- + mpas_climatology_task : mpas_analysis.shared.climatology.MpasClimatologyTask + The task that produced the climatology to be remapped + parent_task : mpas_analysis.shared.AnalysisTask + The parent task, used to get the ``taskName``, ``config`` and + ``componentName`` + climatology_name : str + A name that describes the climatology (e.g. a short version of + the important field(s) in the climatology) used to name the + subdirectories for each stage of the climatology + variable_list : list of str + A list of variable names in ``timeSeriesStatsMonthly`` to be + included in the climatologies + seasons : list of str, optional + A list of seasons (keys in ``shared.constants.monthDictionary``) + to be computed or ['none'] (not ``None``) if only monthly + climatologies are needed. + comparison_grid_names : list of {'latlon', 'antarctic'} + The name(s) of the comparison grid to use for remapping. + """ + + subtask_name = f'remapMpasClimatology_SnowiceFormation' + # call the constructor from the base class + # (RemapMpasClimatologySubtask) + super().__init__( + mpas_climatology_task, parent_task, climatology_name, + variable_list, seasons, comparison_grid_names) + + self.mpas_climatology_task = mpas_climatology_task + self.variable_list = variable_list + + def setup_and_check(self): + """ + Perform steps to set up the analysis and check for errors in the setup. + """ + + # first, call setup_and_check from the base class + # (RemapMpasClimatologySubtask), which will set up remappers and add + # variables to mpas_climatology_task + super().setup_and_check() + + # don't add the variables and seasons to mpas_climatology_task until + # we're sure this subtask is supposed to run + self.mpas_climatology_task.add_variables(self.variable_list, + self.seasons) + + def customize_masked_climatology(self, climatology, season): + """ + Compute the snow-ice formation rate. + Parameters + ---------- + climatology : xarray.Dataset + the climatology data set + season : str + The name of the season to be masked + Returns + ------- + climatology : xarray.Dataset + the modified climatology data set + """ + + snowice = self._compute_snowice(climatology) + + climatology['snowiceFormation'] = snowice + climatology.snowiceFormation.attrs['units'] = 'm yr^-1' + climatology = climatology.drop_vars(self.variable_list) + + return climatology + + def _compute_snowice(self, climatology): + """ + Compute the snow-ice formation rate in m yr^-1 + """ + ds_restart = xr.open_dataset(self.restartFileName) + ds_restart = ds_restart.isel(Time=0) + + units_scale_factor = 60 * 60 * 24 * 365 + + rate = climatology['timeMonthly_avg_snowiceFormation'] + + snowice = rate * units_scale_factor + return snowice diff --git a/mpas_analysis/sea_ice/climatology_map_snowmelt.py b/mpas_analysis/sea_ice/climatology_map_snowmelt.py new file mode 100755 index 000000000..74bd49724 --- /dev/null +++ b/mpas_analysis/sea_ice/climatology_map_snowmelt.py @@ -0,0 +1,261 @@ +# Copyright (c) 2017, Los Alamos National Security, LLC (LANS) +# and the University Corporation for Atmospheric Research (UCAR). +# +# Unless noted otherwise source code is licensed under the BSD license. +# Additional copyright and license information can be found in the LICENSE file +# distributed with this code, or at http://mpas-dev.github.com/license.html +# + +import xarray as xr +from pyremap import LatLon2DGridDescriptor + +from mpas_analysis.shared import AnalysisTask + +from mpas_analysis.shared.climatology import RemapMpasClimatologySubtask, \ + RemapObservedClimatologySubtask + +from mpas_analysis.shared.plot import PlotClimatologyMapSubtask + +from mpas_analysis.shared.io.utility import build_obs_path + + +class ClimatologyMapSeaIceSnowMelt(AnalysisTask): + """ + An analysis task for snow melt rate + """ + # Authors + # ------- + # Elizabeth Hunke, Xylar Asay-Davis + + def __init__(self, config, mpas_climatology_task, hemisphere, + control_config=None): + """ + Construct the analysis task. + + Parameters + ---------- + config : mpas_tools.config.MpasConfigParser + Configuration options + + mpas_climatology_task : mpas_analysis.shared.climatology.MpasClimatologyTask + The task that produced the climatology to be remapped and plotted + + hemisphere : {'NH', 'SH'} + The hemisphere to plot + + control_config : mpas_tools.config.MpasConfigParser, optional + Configuration options for a control run (if any) + """ + # Authors + # ------- + # Elizabeth Hunke, Xylar Asay-Davis + + task_name = f'climatologyMapSeaIceSnowMelt{hemisphere}' + + field_name = 'snowMelt' + + tags = ['climatology', 'horizontalMap', field_name, 'publicObs'] + if hemisphere == 'NH': + tags = tags + ['arctic'] + else: + tags = tags + ['antarctic'] + + # call the constructor from the base class (AnalysisTask) + super().__init__(config=config, taskName=task_name, + componentName='seaIce', tags=tags) + + self.mpas_climatology_task = mpas_climatology_task + + section_name = self.taskName + + if hemisphere == 'NH': + hemisphere_long= 'Northern' + else: + hemisphere_long= 'Southern' + + # read in what seasons we want to plot + seasons = config.getexpression(section_name, 'seasons') + + if len(seasons) == 0: + raise ValueError(f'config section {section_name} does not contain ' + f'valid list of seasons') + + comparison_grid_names = config.getexpression(section_name, + 'comparisonGrids') + + if len(comparison_grid_names) == 0: + raise ValueError(f'config section {section_name} does not contain ' + f'valid list of comparison grids') + + variable_list = ['timeMonthly_avg_snowMelt'] + + remap_climatology_subtask = RemapMpasSnowMeltClimatology( + mpas_climatology_task=mpas_climatology_task, + parent_task=self, + climatology_name=f'{field_name}{hemisphere}', + variable_list=variable_list, + comparison_grid_names=comparison_grid_names, + seasons=seasons) + + self.add_subtask(remap_climatology_subtask) + + for season in seasons: + for comparison_grid_name in comparison_grid_names: + + if control_config is None: +#echmod - no observations yet +# if hemisphere == 'SH' and season == 'ANN': +# ref_title_label = 'Observations (AnIceFlux)' +# gallery_name = 'Snow Melt Rate' +# diff_title_label = 'Model - Observations' +# obs_file_name = build_obs_path( +# config, 'seaIce', +# relativePathOption=f'melting{hemisphere}', +# relativePathSection=section_name) + +# remap_observations_subtask = RemapAnIceFluxMeltingClimatology( +# parentTask=self, seasons=seasons, +# fileName=obs_file_name, +# outFilePrefix=f'{field_name}{hemisphere}', +# comparisonGridNames=comparison_grid_names) +# self.add_subtask(remap_observations_subtask) +# else: + remap_observations_subtask = None + gallery_name = 'Snow Melt Rate' + ref_title_label = None + ref_field_name = None + diff_title_label = 'Model - Observations' + + else: + control_run_name = control_config.get('runs', 'mainRunName') + gallery_name = 'Snow Melt Rate' + ref_title_label = f'Control: {control_run_name}' + field_name = field_name + diff_title_label = 'Main - Control' + + remap_observations_subtask = None + + image_caption = f'Climatology Map of ' \ + f'{hemisphere_long}-Hemisphere ' \ + f'Snow Melt Rate' + gallery_group = f'{hemisphere_long}-Hemisphere Snow Loss Processes' + # make a new subtask for this season and comparison grid + subtask = PlotClimatologyMapSubtask( + parentTask=self, season=season, + comparisonGridName=comparison_grid_name, + remapMpasClimatologySubtask=remap_climatology_subtask, + remapObsClimatologySubtask=remap_observations_subtask, + controlConfig=control_config) + + subtask.set_plot_info( + outFileLabel=f'seaice_snowmelt{hemisphere}', + fieldNameInTitle='Snow melt rate', + mpasFieldName=field_name, + refFieldName=field_name, + refTitleLabel=ref_title_label, + diffTitleLabel=diff_title_label, + unitsLabel=r'm yr$^{-1}$', + imageCaption=image_caption, + galleryGroup=gallery_group, + groupSubtitle=None, + groupLink=f'{hemisphere.lower()}_snowmelt', + galleryName=gallery_name, + extend='both', + prependComparisonGrid=False) + + self.add_subtask(subtask) + + +class RemapMpasSnowMeltClimatology(RemapMpasClimatologySubtask): + """ + A subtask for computing climatologies of snow melt rate + """ + def __init__(self, mpas_climatology_task, parent_task, climatology_name, + variable_list, seasons, comparison_grid_names): + + """ + Construct the analysis task and add it as a subtask of the + ``parent_task``. + Parameters + ---------- + mpas_climatology_task : mpas_analysis.shared.climatology.MpasClimatologyTask + The task that produced the climatology to be remapped + parent_task : mpas_analysis.shared.AnalysisTask + The parent task, used to get the ``taskName``, ``config`` and + ``componentName`` + climatology_name : str + A name that describes the climatology (e.g. a short version of + the important field(s) in the climatology) used to name the + subdirectories for each stage of the climatology + variable_list : list of str + A list of variable names in ``timeSeriesStatsMonthly`` to be + included in the climatologies + seasons : list of str, optional + A list of seasons (keys in ``shared.constants.monthDictionary``) + to be computed or ['none'] (not ``None``) if only monthly + climatologies are needed. + comparison_grid_names : list of {'latlon', 'antarctic'} + The name(s) of the comparison grid to use for remapping. + """ + + subtask_name = f'remapMpasClimatology_SnowMelt' + # call the constructor from the base class + # (RemapMpasClimatologySubtask) + super().__init__( + mpas_climatology_task, parent_task, climatology_name, + variable_list, seasons, comparison_grid_names) + + self.mpas_climatology_task = mpas_climatology_task + self.variable_list = variable_list + + def setup_and_check(self): + """ + Perform steps to set up the analysis and check for errors in the setup. + """ + + # first, call setup_and_check from the base class + # (RemapMpasClimatologySubtask), which will set up remappers and add + # variables to mpas_climatology_task + super().setup_and_check() + + # don't add the variables and seasons to mpas_climatology_task until + # we're sure this subtask is supposed to run + self.mpas_climatology_task.add_variables(self.variable_list, + self.seasons) + + def customize_masked_climatology(self, climatology, season): + """ + Compute the snow melt rate. + Parameters + ---------- + climatology : xarray.Dataset + the climatology data set + season : str + The name of the season to be masked + Returns + ------- + climatology : xarray.Dataset + the modified climatology data set + """ + + snowmelt = self._compute_snowmelt(climatology) + + climatology['snowMelt'] = snowmelt + climatology.snowMelt.attrs['units'] = 'm s-1' + climatology = climatology.drop_vars(self.variable_list) + + return climatology + + def _compute_snowmelt(self, climatology): + """ + Compute the snow melt rate in m yr^-1 + """ + ds_restart = xr.open_dataset(self.restartFileName) + ds_restart = ds_restart.isel(Time=0) + + units_scale_factor = 60 * 60 * 24 * 365 + + rate = climatology['timeMonthly_avg_snowMelt'] + + snowmelt = rate * units_scale_factor + return snowmelt diff --git a/mpas_analysis/sea_ice/climatology_map_volume_ridge.py b/mpas_analysis/sea_ice/climatology_map_volume_ridge.py index 7568c72a8..987edbd91 100755 --- a/mpas_analysis/sea_ice/climatology_map_volume_ridge.py +++ b/mpas_analysis/sea_ice/climatology_map_volume_ridge.py @@ -163,7 +163,7 @@ def __init__(self, config, mpas_climatology_task, hemisphere, # groupLink=f'{hemisphere.lower()}_ridgevolume', groupLink=f'{hemisphere.lower()}_ridge', galleryName=gallery_name, - extend='max', + extend='both', prependComparisonGrid=False) self.add_subtask(subtask) diff --git a/mpas_analysis/shared/constants/constants.py b/mpas_analysis/shared/constants/constants.py index d0a4d70ef..d46aefeb7 100644 --- a/mpas_analysis/shared/constants/constants.py +++ b/mpas_analysis/shared/constants/constants.py @@ -30,7 +30,8 @@ 'Nov': [11], 'Dec': [12], 'JFM': [1, 2, 3], 'AMJ': [4, 5, 6], 'JAS': [7, 8, 9], 'OND': [10, 11, 12], 'ANN': list(np.arange(1, 13)), 'ON': [10, 11], 'FM': [2, 3], - 'DJF': [12, 1, 2], 'JJA': [6, 7, 8]} + 'DJF': [12, 1, 2], 'MAM': [3, 4, 5], 'JJA': [6, 7, 8], + 'SON': [9, 10, 11]} daysInMonth = np.array([31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31])