Index: XIOS/dev/branch_openmp/src/parse_expr/filter_expr_node.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/parse_expr/filter_expr_node.cpp	(revision 1545)
+++ XIOS/dev/branch_openmp/src/parse_expr/filter_expr_node.cpp	(revision 1642)
@@ -11,27 +11,42 @@
   { /* Nothing to do */ }
 
+  
   std::shared_ptr<COutputPin> CFilterFieldExprNode::reduce(CGarbageCollector& gc, CField& thisField) const
   {
     std::shared_ptr<COutputPin> outputPin;
 
-    if (fieldId == "this")
-      outputPin = thisField.getSelfReference(gc);
-    else if (CField::has(fieldId))
+    if (fieldId == "this") outputPin = thisField.getSelfReference(gc);
+    else
     {
-      CField* field = CField::get(fieldId);
-      if (field == &thisField)
-        ERROR("std::shared_ptr<COutputPin> CFilterFieldExprNode::reduce(CGarbageCollector& gc, CField& thisField) const",
-              << "The field " << fieldId << " has an invalid reference to itself. "
-              << "Use the keyword \"this\" if you want to reference the input data sent to this field.");
-
-      field->buildFilterGraph(gc, false);
-      outputPin = field->getInstantDataFilter();
+      string id ;
+
+      if (fieldId == "this_ref")
+      {
+        if (thisField.field_ref.isEmpty())
+        {
+          ERROR("shared_ptr<COutputPin> CFilterFieldExprNode::reduce(CGarbageCollector& gc, CField& thisField) const",
+                << "field_ref attribute is empty.");
+        }
+        else id = thisField.field_ref ;
+      }
+      else id= fieldId ;
+       
+      if (CField::has(id))
+      {
+        CField* field = CField::get(id);
+        if (field == &thisField)
+          ERROR("shared_ptr<COutputPin> CFilterFieldExprNode::reduce(CGarbageCollector& gc, CField& thisField) const",
+                << "The field " << id << " has an invalid reference to itself. "
+                << "Use the keyword \"this\" if you want to reference the input data sent to this field.");
+
+        field->buildFilterGraph(gc, false);
+        outputPin = field->getInstantDataFilter();
+      }
+      else ERROR("boost::shared_ptr<COutputPin> CFilterFieldExprNode::reduce(CGarbageCollector& gc, CField& thisField) const",
+                  << "The field " << id << " does not exist.");
     }
-    else
-      ERROR("std::shared_ptr<COutputPin> CFilterFieldExprNode::reduce(CGarbageCollector& gc, CField& thisField) const",
-            << "The field " << fieldId << " does not exist.");
-
     return outputPin;
   }
+
 
   CFilterTemporalFieldExprNode::CFilterTemporalFieldExprNode(const std::string& fieldId)
@@ -39,4 +54,5 @@
   { /* Nothing to do */ }
 
+
   std::shared_ptr<COutputPin> CFilterTemporalFieldExprNode::reduce(CGarbageCollector& gc, CField& thisField) const
   {
@@ -45,21 +61,37 @@
     if (fieldId == "this")
       outputPin = thisField.getSelfTemporalDataFilter(gc, thisField.freq_op.isEmpty() ? TimeStep : thisField.freq_op);
-    else if (CField::has(fieldId))
+    else
     {
-      CField* field = CField::get(fieldId);
-      if (field == &thisField)
-        ERROR("std::shared_ptr<COutputPin> CFilterTemporalFieldExprNode::reduce(CGarbageCollector& gc, CField& thisField) const",
-              << "The field " << fieldId << " has an invalid reference to itself. "
-              << "Use the keyword \"this\" if you want to reference the input data sent to this field.");
-
-      field->buildFilterGraph(gc, false);
-      outputPin = field->getTemporalDataFilter(gc, thisField.freq_op.isEmpty() ? TimeStep : thisField.freq_op);
+      string id ;
+
+      if (fieldId == "this_ref")
+      {
+        if (thisField.field_ref.isEmpty())
+        {
+          ERROR("shared_ptr<COutputPin> CFilterFieldExprNode::reduce(CGarbageCollector& gc, CField& thisField) const",
+                << "field_ref attribute is empty.");
+        }
+        else id = thisField.field_ref ;
+      }
+      else id = fieldId ;
+
+      if (CField::has(id))
+      {
+        CField* field = CField::get(id);
+        if (field == &thisField)
+          ERROR("shared_ptr<COutputPin> CFilterTemporalFieldExprNode::reduce(CGarbageCollector& gc, CField& thisField) const",
+                << "The field " << fieldId << " has an invalid reference to itself. "
+                << "Use the keyword \"this\" if you want to reference the input data sent to this field.");
+
+        field->buildFilterGraph(gc, false);
+        outputPin = field->getTemporalDataFilter(gc, thisField.freq_op.isEmpty() ? TimeStep : thisField.freq_op);
+      }
+      else
+        ERROR("shared_ptr<COutputPin> CFilterTemporalFieldExprNode::reduce(CGarbageCollector& gc, CField& thisField) const",
+              << "The field " << fieldId << " does not exist.");
     }
-    else
-      ERROR("std::shared_ptr<COutputPin> CFilterTemporalFieldExprNode::reduce(CGarbageCollector& gc, CField& thisField) const",
-            << "The field " << fieldId << " does not exist.");
-
     return outputPin;
   }
+
 
   CFilterUnaryOpExprNode::CFilterUnaryOpExprNode(const std::string& opId, IFilterExprNode* child)
