  Data_* right = static_cast<Data_*> (r);

  // ULong rEl=right->N_Elements();
  ULong nEl = N_Elements();
  Data_* res = NewResult();
  // assert( rEl);
  assert(nEl);
  //if( !rEl || !nEl) throw GDLException("Variable is undefined.");
  if (nEl == 1) {   
    (*res)[0] =  (std::norm((*this)[0]) > 0)?(*this)[0] : (*right)[0]; // | Ty(1);
    return res;
  }
  if ((GDL_NTHREADS=parallelize( nEl))==1) {
    for (OMPInt i = 0; i < nEl; ++i)  (*res)[i] =  (std::norm((*this)[i]) > 0)?(*this)[i] : (*right)[i]; // | Ty(1);

  } else {
    TRACEOMP(__FILE__, __LINE__)
#pragma omp parallel for num_threads(GDL_NTHREADS)
      for (OMPInt i = 0; i < nEl; ++i)  (*res)[i] =  (std::norm((*this)[i]) > 0)?(*this)[i] : (*right)[i]; // | Ty(1);
  }
  //C delete right;
  return res;
