You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@climate.apache.org by hu...@apache.org on 2019/06/17 22:21:21 UTC

[climate] branch master updated: CLIMATE-965 - Add an option to compare climatologies between climate models and observations

This is an automated email from the ASF dual-hosted git repository.

huikyole pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/climate.git


The following commit(s) were added to refs/heads/master by this push:
     new c8a1001  CLIMATE-965 - Add an option to compare climatologies between climate models and observations
     new 8ba9330  Merge branch 'CLIMATE-965'
c8a1001 is described below

commit c8a100194133b21527b007e08461762a4f28e8b0
Author: huikyole <hu...@jpl.nasa.gov>
AuthorDate: Thu Jun 13 15:54:41 2019 -0700

    CLIMATE-965 - Add an option to compare climatologies between climate models and observations
---
 RCMES/CORDEX/templates/CORDEX.yaml.template               |  1 +
 ....yaml.template => CORDEX_evaluation_run.yaml.template} |  1 +
 RCMES/run_RCMES.py                                        |  3 +++
 ocw/utils.py                                              | 15 +++++++++++++--
 4 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/RCMES/CORDEX/templates/CORDEX.yaml.template b/RCMES/CORDEX/templates/CORDEX.yaml.template
index c0a1994..a7fd492 100644
--- a/RCMES/CORDEX/templates/CORDEX.yaml.template
+++ b/RCMES/CORDEX/templates/CORDEX.yaml.template
@@ -10,6 +10,7 @@ output_netcdf_filename: {{ basename }}.nc
 time:
     maximum_overlap_period: True
     temporal_resolution: monthly
+    adjust_model_years_for_climatology_calculation: True  
 {% if season == "winter" %}
     month_start: 12
     month_end: 2
diff --git a/RCMES/CORDEX/templates/CORDEX.yaml.template b/RCMES/CORDEX/templates/CORDEX_evaluation_run.yaml.template
similarity index 96%
copy from RCMES/CORDEX/templates/CORDEX.yaml.template
copy to RCMES/CORDEX/templates/CORDEX_evaluation_run.yaml.template
index c0a1994..a823804 100644
--- a/RCMES/CORDEX/templates/CORDEX.yaml.template
+++ b/RCMES/CORDEX/templates/CORDEX_evaluation_run.yaml.template
@@ -10,6 +10,7 @@ output_netcdf_filename: {{ basename }}.nc
 time:
     maximum_overlap_period: True
     temporal_resolution: monthly
+    adjust_model_years_for_climatology_calculation: False 
 {% if season == "winter" %}
     month_start: 12
     month_end: 2
diff --git a/RCMES/run_RCMES.py b/RCMES/run_RCMES.py
index 3c7291e..8965412 100644
--- a/RCMES/run_RCMES.py
+++ b/RCMES/run_RCMES.py
@@ -125,6 +125,9 @@ for i, dataset in enumerate(datasets):
 
 """ Step 2: Subset the data for temporal and spatial domain """
 # Create a Bounds object to use for subsetting
+if 'adjust_model_years_for_climatology_calculation' in time_info:
+    if time_info['adjust_model_years_for_climatology_calculation']:
+        datasets = utils.adjust_model_years_for_climatology_calculation(datasets) 
 if maximum_overlap_period:
     start_time, end_time = utils.get_temporal_overlap(datasets)
     print('Maximum overlap period')
diff --git a/ocw/utils.py b/ocw/utils.py
index 455c26d..64050fe 100755
--- a/ocw/utils.py
+++ b/ocw/utils.py
@@ -383,8 +383,6 @@ def get_temporal_overlap(dataset_array):
     ''' Find the maximum temporal overlap across the observation and model datasets
 
     :param dataset_array: an array of OCW datasets
-    :param idx: start and end indices to denote subset of months used.
-    :type idx: class:`tuple`
     '''
     start_times = []
     end_times = []
@@ -397,6 +395,19 @@ def get_temporal_overlap(dataset_array):
 
     return np.max(start_times), np.min(end_times)
 
+def adjust_model_years_for_climatology_calculation(dataset_array):
+    ''' Using the time length of the first element in the input dataset_array, 
+        adjust years in the rest ofi the dataset_array so that every dataset ends in the same year.
+    :param dataset_array: an array of OCW datasets
+    '''
+    slc = trim_dataset(dataset_array[0])
+    obs_times = dataset_array[0].times[slc]
+    for idata, dataset in enumerate(dataset_array[1:]):
+        year_diff = obs_times[-1].year - dataset.times[-1].year    
+        nt = dataset.times.size
+        for it in np.arange(nt):
+            dataset.times[it] = dataset.times[it].replace(year = dataset.times[it].year + year_diff)
+    return dataset_array                              
 
 def trim_dataset(dataset):
     ''' Trim datasets such that first and last year of data have all 12 months