virtual std::string evaluate(index_tuple const & index, unsigned int /*simd_element*/) const
 {
   if(!access_name_.empty())
     return access_name_;
   else
     return generate_default(index);
 }
 void write_back(std::pair<std::string, std::string> const & index, std::set<std::string> & fetched, utils::kernel_generation_stream & stream) {
   std::string old_access_name = access_name_ ;
   access_name_ = "";
   if(fetched.find(name_)!=fetched.end()){
     stream << generate_default(index) << " = " << old_access_name << ';' << std::endl;
     fetched.erase(name_);
   }
 }
 void fetch(std::pair<std::string, std::string> const & index, unsigned int vectorization, std::set<std::string> & fetched, utils::kernel_generation_stream & stream) {
   std::string new_access_name = name_ + "_private";
   if(fetched.find(name_)==fetched.end()){
     stream << scalartype_;
     if(vectorization > 1) stream << vectorization;
     stream << " " << new_access_name << " = " << generate_default(index) << ';' << std::endl;
     fetched.insert(name_);
   }
   access_name_ = new_access_name;
 }
 virtual std::string generate(std::pair<std::string, std::string> const & index, int) const{
   if(!access_name_.empty())
     return access_name_;
   else
     return generate_default(index);
 }