From 1ac8416da9b8401d8fb0598a96d7b8ede145754e Mon Sep 17 00:00:00 2001
From: Thomas Witkowski <thomas.witkowski@gmx.de>
Date: Tue, 8 May 2012 15:42:39 +0000
Subject: [PATCH] Removed SolutionDataStorage, was never used.

---
 AMDiS/src/AMDiS.h                |   1 -
 AMDiS/src/SolutionDataStorage.h  | 419 -------------------------------
 AMDiS/src/SolutionDataStorage.hh | 163 ------------
 3 files changed, 583 deletions(-)
 delete mode 100644 AMDiS/src/SolutionDataStorage.h
 delete mode 100644 AMDiS/src/SolutionDataStorage.hh

diff --git a/AMDiS/src/AMDiS.h b/AMDiS/src/AMDiS.h
index a49908d1..59bd9223 100644
--- a/AMDiS/src/AMDiS.h
+++ b/AMDiS/src/AMDiS.h
@@ -100,7 +100,6 @@
 #include "RefinementManager2d.h"
 #include "RefinementManager3d.h"
 #include "RobinBC.h"
-#include "SolutionDataStorage.h"
 #include "SurfaceOperator.h"
 #include "SurfaceQuadrature.h"
 #include "SystemVector.h"
diff --git a/AMDiS/src/SolutionDataStorage.h b/AMDiS/src/SolutionDataStorage.h
deleted file mode 100644
index 65d90622..00000000
--- a/AMDiS/src/SolutionDataStorage.h
+++ /dev/null
@@ -1,419 +0,0 @@
-// ============================================================================
-// ==                                                                        ==
-// == AMDiS - Adaptive multidimensional simulations                          ==
-// ==                                                                        ==
-// ==  http://www.amdis-fem.org                                              ==
-// ==                                                                        ==
-// ============================================================================
-//
-// Software License for AMDiS
-//
-// Copyright (c) 2010 Dresden University of Technology 
-// All rights reserved.
-// Authors: Simon Vey, Thomas Witkowski et al.
-//
-// This file is part of AMDiS
-//
-// See also license.opensource.txt in the distribution.
-
-
-
-/** \file SolutionDataStorage.h */
-
-#ifndef AMDIS_SOLUTION_DATA_STORAGE_H
-#define AMDIS_SOLUTION_DATA_STORAGE_H
-
-#include <iostream>
-#include <fstream>
-#include <vector>
-#include <map>
-#include "DOFVector.h"
-#include "SystemVector.h"
-#include "Initfile.h"
-
-namespace AMDiS {
-
-  template<typename T>
-  struct SolutionHelper
-  {
-    typedef FiniteElemSpace* type;
-  };
-
-  template <>
-  struct SolutionHelper<SystemVector>
-  {
-    typedef std::vector<FiniteElemSpace*> type;
-  };
-  
-
-
-  /** \brief
-   * Class to store solution data for one timestep.
-   *
-   * Within this class, the solution data for one timestep is stored. The 
-   * type of the solution data is the typename of the class, i.e., either
-   * DOFVector or SystemVector. The class is resonsible for serialization
-   * and deserialization of the solution.
-   *
-   * The class is used only from class \ref SolutionDataStorage, and must
-   * not be used by the user in other context.
-   */
-  template<typename T>
-  class SolutionData 
-  {
-  public:
-
-    /** \brief 
-     * The constructor requires already the data. So no empty data class
-     * can be created.
-     */
-    SolutionData(T* sol, 
-		 typename SolutionHelper<T>::type fes,
-		 double ts,
-		 int i) 
-      : solution(sol),
-	feSpace(fes),
-	timestamp(ts),
-	id(i),
-	serialized(false),
-	filename("")
-    {}
-
-    /** \brief
-     * The destructor either deletes the data files or deletes the pointers
-     * to the data.
-     */
-    ~SolutionData() 
-    {
-      if (!serialized) {
-	//delete solution;
-	//deleteFeSpace(feSpace);
-      }
-    }
-
-    /// Serialize the data to a file.
-    void serialize(std::string fn) 
-    {
-      std::ofstream out(fn.c_str());
-      serializeFeSpace(out, feSpace);
-      solution->serialize(out);
-      out.close();
-
-      serialized = true;
-      filename = fn;   
-
-      delete solution;
-      deleteFeSpace(feSpace);
-    }
-
-    /// Deserialize the data from file.
-    void deserialize()
-    {
-      std::string feName = "";
-      int dim = 0;
-      int degree = 0;
-
-      std::ifstream in(filename.c_str());
-      deserializeFeSpace(in, feSpace);
-      solution = new T("", feSpace, 0);
-      solution->deserialize(in);
-      in.close();
-
-      serialized = false;
-      filename = "";
-    }
-
-    /** \brief
-     * Returns the data. In the case the data was serialized to the disk,
-     * it will be first deserialized from the corresponding file.
-     */
-    void getData(T** ptrSolution, double *ptrTimestamp)
-    {
-      if (serialized)
- 	deserialize();
-
-      *ptrSolution = solution;
-      *ptrTimestamp = timestamp;      
-    }
-
-    /// Returns \ref serialized.
-    bool isSerialized() 
-    {
-      return serialized;
-    }
-
-  protected:
-    /// Serialize a fe space to a file.
-    void serializeFeSpace(std::ofstream &out, FiniteElemSpace* fe) 
-    {     
-      // Write the mesh to file.
-      out << fe->getMesh()->getName() << "\n";
-
-      int dim = fe->getMesh()->getDim();
-      SerUtil::serialize(out, dim);
-
-      fe->getMesh()->serialize(out);
-
-      // Then, write all other fe space data to file.
-      dim = fe->getBasisFcts()->getDim();
-      int degree = fe->getBasisFcts()->getDegree();
-      out << ((fe->getName() != "") ? fe->getName() : "noname") << "\n";
-      SerUtil::serialize(out, dim);
-      SerUtil::serialize(out, degree);
-    }
-
-    /** \brief 
-     * Serialize a vector of fe spaces to a file. 
-     *
-     * Takes special care about multiple fe space pointers, pointing to the
-     * same fe space. In this case, only the first fe space is serialized
-     * completely.
-     */
-    void serializeFeSpace(std::ofstream &out, std::vector<FiniteElemSpace*>& fe)
-    {
-      int size = fe.size();     
-      SerUtil::serialize(out, size);
-
-      for (int i = 0; i < size; i++) {
-	// Check, if the pointer points to an fe space serialized before.
-	int found = -1;
-	for (int j = 0; j < i; j++) {
-	  if (fe[j] == fe[i]) {
-	    found = j;
-	    break;
-	  }
-	}
-
-	SerUtil::serialize(out, found);
-	// Only in case this fe space was not serialized before, write it to the file.
-	if (found == -1)
-	  serializeFeSpace(out, fe[i]);
-      }
-    }
-
-    void deserializeFeSpace(std::ifstream &in, FiniteElemSpace** fe) 
-    {
-      std::string name = "";
-      int dim = 0;
-      int degree = 0;
-
-      in >> name;
-      in.get();
-      SerUtil::deserialize(in, dim);
-      Mesh *mesh = new Mesh(name, dim);
-      mesh->deserialize(in);
-
-      in >> name;
-      in.get();
-      SerUtil::deserialize(in, dim);
-      SerUtil::deserialize(in, degree);
-      *fe = FiniteElemSpace::provideFeSpace(NULL,
-					    Lagrange::getLagrange(dim, degree),
-					    mesh,
-					    name);
-      (*fe)->setAdmin(const_cast<DOFAdmin*>(&(mesh->getDofAdmin(0))));
-    }
-
-    void deserializeFeSpace(std::ifstream &in, std::vector<FiniteElemSpace*>& fe)
-    {
-      int size;
-      SerUtil::deserialize(in, size);
-
-      fe.resize(size);
-      for (int i = 0; i < size; i++) {
-	int found;
-	SerUtil::deserialize(in, found);
-	if (found == -1)
-	  deserializeFeSpace(in, &(fe[i]));
-	else
-	  fe[i] = fe[found];	
-      }
-    }
-
-    /// Remove one fe space from memory.
-    void deleteFeSpace(FiniteElemSpace* fe)
-    {
-      if (fe) {
-	delete fe->getMesh();
-	delete fe;
-	fe = NULL;
-      }
-    }
-
-    /// Remove a vector of fe spaces from memory. 
-    void deleteFeSpace(std::vector<FiniteElemSpace*>& fe)
-    {
-      // Stores all pointers to fe spaces, that were deleted. This should
-      // avoid double deletion of pointer.
-      std::map<FiniteElemSpace*, bool> deletedFeSpaces;
-
-      for (int i = 0; i < static_cast<int>(fe.size()); i++) {
-	if (deletedFeSpaces.find(fe[i]) == deletedFeSpaces.end()) {
-	  deleteFeSpace(fe[i]);
-	  deletedFeSpaces[fe[i]] = true;
-	}
-      }
-
-      fe.clear();
-    }
-
-    public:
-    /// Here, all the solutions (i.e. either DOFVectors or SystemVectors) are stored.
-    T* solution;
-
-    /** \brief
-     * Stores to every solution its FE Space. If \ref fixedFeSpace is set
-     * to true, only one entry exists. This is than the FE Space for all
-     * solutions.
-     */
-    typename SolutionHelper<T>::type feSpace;
-
-    /** \brief
-     * Stores to every solutions the timestamp at which the solution was
-     * created in the adaption loop.
-     */
-    double timestamp;
-
-    /** \brief
-     * If true, the solution data is serialied to disk and the pointers
-     * are not valid.
-     */
-    bool serialized;
-
-    /// If solution data is serialied, here the corresponding filename is stored.
-    std::string filename;
-
-    ///
-    int id;
-  };
-
-
-
-  /** \brief
-   * Storage for solution datas with optimization process.
-   *
-   * This class may be used to store solutions within an optimization process. 
-   * Within the forward step, solutions are stored within this data storage, and
-   * are then used within the backward step. The storage supports serialization
-   * and deserialization of solutions (and the corresponding fe spaces) to save
-   * memory.
-   *
-   * The template typename must be the type of the solution data to be stored, i.e,
-   * either DOFVector<double> or SystemVector.
-   */
-  template<typename T>
-  class SolutionDataStorage 
-  {
-  public:
-    /** \brief
-     * Constructor. The parameter is a string that will be used to search for 
-     * parameters of the storage within the init file.
-     */
-    SolutionDataStorage(std::string name);
-
-    /// Destructor. Deletes all stored solutions and deletes all serialized files.
-    ~SolutionDataStorage();
-
-    /// Add a solution and its timestamp to the storage.
-    void push(T *solution, double timestamp);
-
-    /// Get solution data from storage. Returns true, if solution data is valid.
-    bool pop(T **solution, double *timestep);
-
-    /// Delete all pointers and empties all internal vectors.
-    void clear();
-	     
-    /** \brief
-     * Return for a given solution number the corresponding fe Space. If the
-     * the fe Space is fixed, the fe Space for all solutions is stored at
-     * position 0.
-     */
-    typename SolutionHelper<T>::type getFeSpace(int i = 0) 
-    {
-      return solutions[i]->feSpace;
-    }
-
-    /// Returns \ref poped.
-    bool isPoped() 
-    {
-      return poped;
-    }
-
-    /// Add a new container to the storage.
-    void addContainer(std::string name);
-
-    /// Add value to a container.
-    void push(std::string name, WorldVector<double> value);
-
-    /// Get value from a container.
-    void pop(std::string name, WorldVector<double> &value);
-
-    /// Reset, , a container/
-    void reset(std::string name);
-
-    /// Clear, i.e. delete all values, a container.
-    void clear(std::string name);
-
-  protected:
-    ///
-    int addMemoryUsage(FiniteElemSpace* feSpace) 
-    {
-      memoryUsage += feSpace->getMesh()->calcMemoryUsage();
-
-      return memoryUsage;
-    }
-
-    ///
-    int addMemoryUsage(std::vector<FiniteElemSpace*> feSpaces) {
-      // Is used to determine equal meshes for different components.
-      std::vector<Mesh*> meshes;
-
-      for (int i = 0; i < static_cast<int>(feSpaces.size()); i++) {
-	if (find(meshes.begin(), meshes.end(), feSpaces[i]->getMesh()) != meshes.end()) {
-	  memoryUsage += feSpaces[i]->getMesh()->calcMemoryUsage();
-	  meshes.push_back(feSpaces[i]->getMesh());
-	}
-      }
-
-      return memoryUsage;
-    }
-
-    /// Number of MBytes of memory that can be used for solution storage.
-    int maxMemoryUsage;
-
-    /// If true, it is allowed to write solutions also to disk.
-    bool useDisk;
-
-    /// Directory, where solutions can be written temporarly.
-    std::string writeDirectory;
-
-    /// Position of the latest valid solution.
-    int lastPos;
-
-    /// If true, the last operation on the data storage was pop.
-    bool poped;
-
-    /// Counts the memory usage of all solutions stored in memory.
-    int memoryUsage;
-
-    /** \brief
-     * Storage for the solutions, i.e., the DOFVector, the FeSpace and the 
-     * corresponding timestep.
-     */
-    std::vector<SolutionData<T>* > solutions;
-
-    ///
-    std::map<std::string, std::vector<WorldVector<double > > > containers;
-
-    ///
-    std::map<std::string, int> containersPos;
-
-    ///
-    int idcounter;
-  };
-
-}
-
-#include "SolutionDataStorage.hh"
-
-#endif // AMDIS_SOLUTION_DATA_STORAGE_H
diff --git a/AMDiS/src/SolutionDataStorage.hh b/AMDiS/src/SolutionDataStorage.hh
deleted file mode 100644
index b7bebeeb..00000000
--- a/AMDiS/src/SolutionDataStorage.hh
+++ /dev/null
@@ -1,163 +0,0 @@
-//
-// Software License for AMDiS
-//
-// Copyright (c) 2010 Dresden University of Technology 
-// All rights reserved.
-// Authors: Simon Vey, Thomas Witkowski et al.
-//
-// This file is part of AMDiS
-//
-// See also license.opensource.txt in the distribution.
-
-
-#include <iostream>
-#include <sstream>
-
-namespace AMDiS {
-
-  template<typename T>
-  SolutionDataStorage<T>::SolutionDataStorage(std::string name)
-    : maxMemoryUsage(100),
-      useDisk(true),
-      writeDirectory(""),
-      lastPos(-1),
-      poped(false),
-      memoryUsage(0),
-      idcounter(0)
-  {
-    solutions.clear();
-    
-    int tmp = 0;
-    Parameters::get(name + "->memory usage", maxMemoryUsage);
-    Parameters::get(name + "->use disk", tmp);
-    useDisk = (tmp == 0) ? false : true;
-    Parameters::get(name + "->directory", writeDirectory);
-  }
-
-  template<typename T>
-  SolutionDataStorage<T>::~SolutionDataStorage()
-  {
-    clear();
-  }
-
-  template<typename T>
-  void SolutionDataStorage<T>::push(T *solution,
-				    double timestamp)
-  {
-    FUNCNAME("SolutionDataStorage<T>::push()");
-
-    // If pop was the last operation, cleanup and reset the data storage.
-    if (poped) {
-      clear();
-      poped = false;
-    }
-    
-    std::vector<FiniteElemSpace*> feSpace(solution->getFeSpaces().size());
-    for (int i = 0; i < feSpace.size(); i++) {
-
-      int found = -1;
-      for (int j = 0; j < i; j++) {
-	if (solution->getFeSpace(j) == solution->getFeSpace(i)) {
-	  found = j;
-	  break;
-	}
-      }
-
-      if (found == -1) {
-	feSpace[i] = new FiniteElemSpace();
-	*(feSpace[i]) = *(solution->getFeSpace(i));       	    
-	memoryUsage += feSpace[i]->calcMemoryUsage();
-      } else {
-	feSpace[i] = feSpace[found];
-      }	  
-    }
-
-    SystemVector *vec = new SystemVector("tmp", feSpace, solution->getFeSpaces().size());
-    vec->createNewDOFVectors("tmp");
-    vec->setCoarsenOperation(COARSE_INTERPOL);
-    vec->interpol(solution, 1.0);
-    memoryUsage += vec->calcMemoryUsage();
-
-    solutions.push_back(new SolutionData<T>(vec, feSpace, timestamp, idcounter++));
-
-    lastPos++;
-
-    /*
-    
-    if (memoryUsage / (1024 * 1024) > maxMemoryUsage) {
-      for (int i = 0; i < solutions.size() - 1; i++) {
-	if (solutions[i]->isSerialized() == false) {
-	  std::ostringstream oss;
-	  oss << writeDirectory << "/solutiondata_" << i << ".ser";
-	  solutions[i]->serialize(oss.str());
-	}
-      }
-    } 
-    */  
-  }
-
-  template<typename T>
-  bool SolutionDataStorage<T>::pop(T **solution,
-				   double *timestamp)
-  {
-    if (lastPos < 0) {
-      return false;
-    }
-
-    solutions[lastPos]->getData(solution, timestamp);
-
-    lastPos--;
-    poped = true;
-
-    return true;
-  }
-
-  template<typename T>
-  void SolutionDataStorage<T>::clear()
-  {
-    for (int i = 0; i < static_cast<int>(solutions.size()); i++) {
-      delete solutions[i];
-    }
-
-    solutions.clear();
-
-    lastPos = -1;
-    memoryUsage = 0;
-  }
-
-  template<typename T>	  
-  void SolutionDataStorage<T>::addContainer(std::string name)
-  {
-    std::vector<WorldVector<double> > emptyVec;
-    containers.insert(std::pair<std::string, std::vector<WorldVector<double> > >(name, emptyVec) );
-    containersPos.insert(std::pair<std::string, int>(name, -1));
-  }
-
-  template<typename T>	  
-  void SolutionDataStorage<T>::push(std::string name, WorldVector<double> value)
-  {
-    containers[name].push_back(value);
-    containersPos[name] = containers[name].size() - 1;
-  }
-
-  template<typename T>	  
-  void SolutionDataStorage<T>::pop(std::string name, WorldVector<double> &value)
-  {
-    value = containers[name][containersPos[name]];
-    containersPos[name]--;
-  }
-
-  template<typename T>
-  void SolutionDataStorage<T>::reset(std::string name)
-  {
-    containersPos[name] = containers[name].size() - 1;
-  }
-
-  template<typename T>
-  void SolutionDataStorage<T>::clear(std::string name)
-  {
-    containers[name].clear();
-    containersPos[name] = -1;
-  }
-
-}
-- 
GitLab