Ignore:
Timestamp:
10/25/17 16:36:53 (5 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/trunk/src/node/field.cpp

    r1307 r1315  
    788788     if (!areAllReferenceSolved) solveAllReferenceEnabledField(false); 
    789789 
     790     checkAttributes(); 
     791 
    790792     const bool detectMissingValues = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true); 
    791793     const double defaultValue  = detectMissingValues ? default_value : (!default_value.isEmpty() ? default_value : 0.0); 
     
    821823       // Check if the data is to be read from a file 
    822824       else if (file && !file->mode.isEmpty() && file->mode == CFile::mode_attr::read) 
    823          instantDataFilter = serverSourceFilter = boost::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, 
    824                                                                                                      freq_offset.isEmpty() ? NoneDu : freq_offset, 
    825                                                                                                      true, 
     825         instantDataFilter = serverSourceFilter = boost::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, freq_offset, true, 
    826826                                                                                                     detectMissingValues, defaultValue)); 
    827827       else // The data might be passed from the model 
     
    900900     if (!selfReferenceFilter) 
    901901     { 
     902       checkAttributes(); 
     903 
    902904       const bool detectMissingValues = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true); 
    903905       const double defaultValue  = detectMissingValues ? default_value : (!default_value.isEmpty() ? default_value : 0.0); 
     
    906908       { 
    907909         if (!serverSourceFilter) 
    908            serverSourceFilter = boost::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, 
    909                                                                                    freq_offset.isEmpty() ? NoneDu : freq_offset, 
    910                                                                                    true, 
     910           serverSourceFilter = boost::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, freq_offset, true, 
    911911                                                                                   detectMissingValues, defaultValue)); 
    912912 
     
    954954               << "An operation must be defined for field \"" << getId() << "\"."); 
    955955 
     956       checkAttributes(); 
     957 
    956958       const bool detectMissingValues = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true); 
    957        checkAttributes() ; 
    958959       boost::shared_ptr<CTemporalFilter> temporalFilter(new CTemporalFilter(gc, operation, 
    959960                                                                             CContext::getCurrent()->getCalendar()->getInitDate(), 
     
    991992               << "An operation must be defined for field \"" << getId() << "\"."); 
    992993 
     994       checkAttributes(); 
     995 
    993996       const bool detectMissingValues = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true); 
    994        checkAttributes(); 
    995997       boost::shared_ptr<CTemporalFilter> temporalFilter(new CTemporalFilter(gc, operation, 
    996998                                                                             CContext::getCurrent()->getCalendar()->getInitDate(), 
     
    14421444   void CField::checkAttributes(void) 
    14431445   { 
     1446     bool isFieldRead = file && !file->mode.isEmpty() && file->mode == CFile::mode_attr::read; 
     1447     if (isFieldRead && operation.getValue() != "instant") 
     1448       ERROR("void CField::checkAttributes(void)", 
     1449             << "Unsupported operation for field '" << getFieldOutputName() << "'." << std::endl 
     1450             << "Currently only \"instant\" is supported for fields read from file.") 
     1451 
    14441452     if (freq_op.isEmpty()) 
    14451453     { 
    1446        if (operation.getValue()=="instant") 
     1454       if (operation.getValue() == "instant") 
    14471455         freq_op.setValue(file->output_freq.getValue()); 
    14481456       else 
     
    14501458     } 
    14511459     if (freq_offset.isEmpty()) 
    1452        freq_offset.setValue(freq_op.getValue()-TimeStep); 
     1460       freq_offset.setValue(isFieldRead ? NoneDu : (freq_op.getValue() - TimeStep)); 
    14531461   } 
    14541462 
Note: See TracChangeset for help on using the changeset viewer.