Changeset 1315 for XIOS/dev


Ignore:
Timestamp:
10/25/17 16:36:53 (6 years ago)
Author:
rlacroix
Message:

Fix the default "freq_offset" for fields read from files.

Also throw an error when trying to use an invalid operation for such fields (currently only "instant" are supported).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/XIOS_DEV_CMIP6/src/node/field.cpp

    r1308 r1315  
    942942    if (!isReferenceSolvedAndTransformed) solveAllEnabledFieldsAndTransform(); 
    943943 
     944     checkAttributes(); 
     945 
    944946     const bool detectMissingValues = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true); 
    945947     const double defaultValue  = detectMissingValues ? default_value : (!default_value.isEmpty() ? default_value : 0.0); 
     
    10121014         // Check if the data is to be read from a file 
    10131015         else if (file && !file->mode.isEmpty() && file->mode == CFile::mode_attr::read) 
    1014            instantDataFilter = serverSourceFilter = boost::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, true, 
    1015                                                                                                        freq_offset.isEmpty() ? NoneDu : freq_offset, 
    1016                                                                                                        true, 
     1016           instantDataFilter = serverSourceFilter = boost::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, true, freq_offset, true, 
    10171017                                                                                                       detectMissingValues, defaultValue)); 
    10181018         else // The data might be passed from the model 
     
    10921092     if (!selfReferenceFilter) 
    10931093     { 
     1094       checkAttributes(); 
     1095 
    10941096       const bool detectMissingValues = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true); 
    10951097       const double defaultValue  = detectMissingValues ? default_value : (!default_value.isEmpty() ? default_value : 0.0); 
     
    10981100       { 
    10991101         if (!serverSourceFilter) 
    1100            serverSourceFilter = boost::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, true, 
    1101                                                                                    freq_offset.isEmpty() ? NoneDu : freq_offset, 
    1102                                                                                    true, 
     1102           serverSourceFilter = boost::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, true, freq_offset, true, 
    11031103                                                                                   detectMissingValues, defaultValue)); 
    11041104 
     
    11461146               << "An operation must be defined for field \"" << getId() << "\"."); 
    11471147 
     1148       checkAttributes(); 
     1149 
    11481150       const bool detectMissingValues = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true); 
    1149        checkAttributes() ;    
    11501151       boost::shared_ptr<CTemporalFilter> temporalFilter(new CTemporalFilter(gc, operation, 
    11511152                                                                             CContext::getCurrent()->getCalendar()->getInitDate(), 
     
    11841185               << "An operation must be defined for field \"" << getId() << "\"."); 
    11851186 
     1187       checkAttributes(); 
     1188 
    11861189       const bool detectMissingValues = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true); 
    1187        checkAttributes() ;    
    11881190       boost::shared_ptr<CTemporalFilter> temporalFilter(new CTemporalFilter(gc, operation, 
    11891191                                                                             CContext::getCurrent()->getCalendar()->getInitDate(), 
     
    15761578   void CField::checkAttributes(void) 
    15771579   { 
     1580     bool isFieldRead = file && !file->mode.isEmpty() && file->mode == CFile::mode_attr::read; 
     1581     if (isFieldRead && operation.getValue() != "instant") 
     1582       ERROR("void CField::checkAttributes(void)", 
     1583             << "Unsupported operation for field '" << getFieldOutputName() << "'." << std::endl 
     1584             << "Currently only \"instant\" is supported for fields read from file.") 
     1585 
    15781586     if (freq_op.isEmpty()) 
    15791587     { 
    1580        if (operation.getValue()=="instant") 
     1588       if (operation.getValue() == "instant") 
    15811589         freq_op.setValue(file->output_freq.getValue()); 
    15821590       else 
     
    15841592     } 
    15851593     if (freq_offset.isEmpty()) 
    1586        freq_offset.setValue(freq_op.getValue()-TimeStep); 
     1594       freq_offset.setValue(isFieldRead ? NoneDu : (freq_op.getValue() - TimeStep)); 
    15871595   } 
    15881596 
Note: See TracChangeset for help on using the changeset viewer.