Index: XIOS/dev/XIOS_DEV_CMIP6/src/node/field.cpp
===================================================================
--- XIOS/dev/XIOS_DEV_CMIP6/src/node/field.cpp	(revision 1314)
+++ XIOS/dev/XIOS_DEV_CMIP6/src/node/field.cpp	(revision 1315)
@@ -942,4 +942,6 @@
     if (!isReferenceSolvedAndTransformed) solveAllEnabledFieldsAndTransform();
 
+     checkAttributes();
+
      const bool detectMissingValues = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true);
      const double defaultValue  = detectMissingValues ? default_value : (!default_value.isEmpty() ? default_value : 0.0);
@@ -1012,7 +1014,5 @@
          // Check if the data is to be read from a file
          else if (file && !file->mode.isEmpty() && file->mode == CFile::mode_attr::read)
-           instantDataFilter = serverSourceFilter = boost::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, true,
-                                                                                                       freq_offset.isEmpty() ? NoneDu : freq_offset,
-                                                                                                       true,
+           instantDataFilter = serverSourceFilter = boost::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, true, freq_offset, true,
                                                                                                        detectMissingValues, defaultValue));
          else // The data might be passed from the model
@@ -1092,4 +1092,6 @@
      if (!selfReferenceFilter)
      {
+       checkAttributes();
+
        const bool detectMissingValues = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true);
        const double defaultValue  = detectMissingValues ? default_value : (!default_value.isEmpty() ? default_value : 0.0);
@@ -1098,7 +1100,5 @@
        {
          if (!serverSourceFilter)
-           serverSourceFilter = boost::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, true,
-                                                                                   freq_offset.isEmpty() ? NoneDu : freq_offset,
-                                                                                   true,
+           serverSourceFilter = boost::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, true, freq_offset, true,
                                                                                    detectMissingValues, defaultValue));
 
@@ -1146,6 +1146,7 @@
                << "An operation must be defined for field \"" << getId() << "\".");
 
+       checkAttributes();
+
        const bool detectMissingValues = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true);
-       checkAttributes() ;   
        boost::shared_ptr<CTemporalFilter> temporalFilter(new CTemporalFilter(gc, operation,
                                                                              CContext::getCurrent()->getCalendar()->getInitDate(),
@@ -1184,6 +1185,7 @@
                << "An operation must be defined for field \"" << getId() << "\".");
 
+       checkAttributes();
+
        const bool detectMissingValues = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true);
-       checkAttributes() ;   
        boost::shared_ptr<CTemporalFilter> temporalFilter(new CTemporalFilter(gc, operation,
                                                                              CContext::getCurrent()->getCalendar()->getInitDate(),
@@ -1576,7 +1578,13 @@
    void CField::checkAttributes(void)
    {
+     bool isFieldRead = file && !file->mode.isEmpty() && file->mode == CFile::mode_attr::read;
+     if (isFieldRead && operation.getValue() != "instant")
+       ERROR("void CField::checkAttributes(void)",
+             << "Unsupported operation for field '" << getFieldOutputName() << "'." << std::endl
+             << "Currently only \"instant\" is supported for fields read from file.")
+
      if (freq_op.isEmpty())
      {
-       if (operation.getValue()=="instant")
+       if (operation.getValue() == "instant")
          freq_op.setValue(file->output_freq.getValue());
        else
@@ -1584,5 +1592,5 @@
      }
      if (freq_offset.isEmpty())
-       freq_offset.setValue(freq_op.getValue()-TimeStep);
+       freq_offset.setValue(isFieldRead ? NoneDu : (freq_op.getValue() - TimeStep));
    }
 
