]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Remove SwappableVector 9785/head
authorDaniel Arndt <arndtd@ornl.gov>
Tue, 31 Mar 2020 23:38:45 +0000 (19:38 -0400)
committerDaniel Arndt <arndtd@ornl.gov>
Wed, 1 Apr 2020 16:35:00 +0000 (12:35 -0400)
doc/news/changes/incompatibilities/20200331DanielArndt [new file with mode: 0644]
include/deal.II/lac/swappable_vector.h [deleted file]
include/deal.II/lac/swappable_vector.templates.h [deleted file]
source/lac/CMakeLists.txt
source/lac/swappable_vector.cc [deleted file]

diff --git a/doc/news/changes/incompatibilities/20200331DanielArndt b/doc/news/changes/incompatibilities/20200331DanielArndt
new file mode 100644 (file)
index 0000000..3860957
--- /dev/null
@@ -0,0 +1,3 @@
+Removed: The deprecated class SwappableVector has been removed.
+<br>
+(Daniel Arndt, 2020/03/31)
diff --git a/include/deal.II/lac/swappable_vector.h b/include/deal.II/lac/swappable_vector.h
deleted file mode 100644 (file)
index 6c45f3f..0000000
+++ /dev/null
@@ -1,231 +0,0 @@
-// ---------------------------------------------------------------------
-//
-// Copyright (C) 2000 - 2018 by the deal.II authors
-//
-// This file is part of the deal.II library.
-//
-// The deal.II library is free software; you can use it, redistribute
-// it, and/or modify it under the terms of the GNU Lesser General
-// Public License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-// The full text of the license can be found in the file LICENSE.md at
-// the top level directory of deal.II.
-//
-// ---------------------------------------------------------------------
-
-#ifndef dealii_swappable_vector_h
-#  define dealii_swappable_vector_h
-
-
-#  include <deal.II/base/config.h>
-
-#  include <deal.II/base/thread_management.h>
-
-#  include <deal.II/lac/vector.h>
-
-#  include <string>
-
-DEAL_II_NAMESPACE_OPEN
-
-/*! @addtogroup Vectors
- *@{
- */
-
-/**
- * This class is a wrapper to the @p Vector class which allows to swap out the
- * data to a file and reload it later on. It handles the management of the
- * name of the file where the data is to be stored temporarily and removes the
- * file is necessary at the end of the lifetime of the vector.
- *
- * There are functions to swap the data to a file, and to reload it. There is
- * also a function @p alert that can be used to signal to an object of this
- * class that the data will be needed shortly, so the object can initiate that
- * the data be loaded already. While in non-multithreading mode, this function
- * has no effect since @p reload has to be called afterwards anyway. On the
- * other hand, in multithreading mode, the data is preloaded in the background
- * using a thread on its own, and may already be available at the time when @p
- * reload is called. If it is not available, @p reload waits until the
- * detached thread has loaded the data.
- *
- * @note Instantiations for this template are provided for <tt>@<float@> and
- * @<double@></tt>; others can be generated in application programs (see the
- * section on
- * @ref Instantiations
- * in the manual).
- *
- * @deprecated The usage of this class is deprecated.
- *
- * @author Wolfgang Bangerth, 1999, 2000
- */
-template <typename number>
-class DEAL_II_DEPRECATED SwappableVector : public Vector<number>
-{
-public:
-  /**
-   * Constructor. Does nothing apart from calling the constructor of the
-   * underlying class.
-   */
-  SwappableVector();
-
-  /**
-   * Copy constructor. Copies the data if @p v contains some, but does not do
-   * so if @p v is empty or has its data swapped out. In the latter case, warn
-   * about that. In particular do not take over ownership of any files that @p
-   * v might own.
-   */
-  SwappableVector(const SwappableVector &v);
-
-  /**
-   * Destructor. If this class still owns a file to which temporary data was
-   * stored, then it is deleted.
-   */
-  virtual ~SwappableVector() override;
-
-  /**
-   * Copy operator. Do mostly the same as the copy constructor does; if
-   * necessary, delete temporary files owned by this object at first.
-   */
-  SwappableVector &
-  operator=(const SwappableVector &);
-
-  /**
-   * Swap out the data of this vector to the file of which the name is given.
-   * It is assumed that the file can be overwritten if it exists, and
-   * ownership of this file is assumed by this object. The file is deleted
-   * either upon calling @p kill_file, or on destruction of this object.
-   *
-   * The content of the vector is cleared and it size is reset to zero.
-   *
-   * If this object owns another file, for example when @p swap_out but no @p
-   * kill_file has previously been called, then that is deleted first.
-   */
-  void
-  swap_out(const std::string &filename);
-
-  /**
-   * Reload the data of this vector from the file to which it has been stored
-   * previously using @p swap_out. Since the file is not deleted after
-   * reloading, you can call @p reload multiple times, in between you may do
-   * everything with the vector, including changing its size.
-   *
-   * This function resets the size of the vector to the number of elements
-   * there were upon calling @p swap_out before.
-   */
-  void
-  reload();
-
-  /**
-   * Calling this function can be used to alert this vector that it will need
-   * to reload its data soon. It has no effect if the data of the vector is
-   * already present, and it has no effect in single-thread mode as well, but
-   * in multithread mode, it spawns another thread that reads the data in
-   * parallel to the usual execution of the program, such that when @p reload
-   * is called, the data may eventually be available already. It might
-   * therefore be worthwhile to call this function some time in advance, if
-   * you know that the data will be needed, and loading takes some time, for
-   * instance if the file to which the data was written is not in a local tmp
-   * directory.
-   *
-   * Calling this function multiple times before calling @p reload is allowed
-   * and has no effect for subsequent calls. Calling this function while the
-   * data is still or already in memory is allowed and has no effect.
-   */
-  void
-  alert();
-
-
-  /**
-   * Remove the file to which the data has been stored the last time. After
-   * this, the object does not own any file any more, so of course you can't
-   * call @p reload again.
-   *
-   * If this object does not own a file, for example since @p swap_out was not
-   * called, or because @p kill_file has been called previously, then this
-   * function does nothing.
-   *
-   * This throws a ExcIO exception if, for any reason, deleting the file
-   * failed.
-   */
-  void
-  kill_file();
-
-  /**
-   * Return the name of the file to which the data was stored the last time
-   * you called @p swap_out. If @p swap_out was not called, or if in between
-   * @p kill_file was called, then the filename is an empty string.
-   */
-  const std::string &
-  get_filename() const;
-
-  /**
-   * Determine an estimate for the memory consumption (in bytes) of this
-   * object.
-   */
-  std::size_t
-  memory_consumption() const;
-
-  /**
-   * @addtogroup Exceptions
-   * @{
-   */
-  /**
-   * Exception.
-   */
-  DeclException0(ExcSizeZero);
-  /**
-   * Exception.
-   */
-  DeclException0(ExcSizeNonzero);
-  /**
-   * Exception.
-   */
-  DeclException1(ExcInvalidFilename,
-                 std::string,
-                 << "The filename <" << arg1 << "> is not a valid one here.");
-  /**
-   * Exception.
-   */
-  DeclException0(ExcInvalidCopyOperation);
-  //@}
-private:
-  /**
-   * Name of the file to which data was swapped out. If no data is presently
-   * swapped out (i.e. before calling @p swap_out and after @p kill_file), the
-   * string is empty, indicating no ownership of files.
-   */
-  std::string filename;
-
-  /**
-   * If in multithread mode, then the @p alert function has functionality, but
-   * needs to coordinate with the @p reload function. This is done through the
-   * following lock.
-   *
-   * If not in MT mode, then the class used here is empty, and we can as well
-   * get away with it.
-   */
-  std::mutex lock;
-
-  /**
-   * Flag by which the @p alert function signifies that the data has been
-   * preloaded already. This flag is always @p false in non-MT mode.
-   */
-  bool data_is_preloaded;
-
-  /**
-   * Internal function that actually reloads the vector. Called from @p reload
-   * and @p alert.
-   *
-   * The parameter specifies whether the function shall set @p
-   * data_is_preloaded or not. The calling functions can't sometimes do this
-   * themselves, since they call this function detached, so this function has
-   * to signal success itself if this is required.
-   */
-  void
-  reload_vector(const bool set_flag);
-};
-
-/*@}*/
-DEAL_II_NAMESPACE_CLOSE
-
-#endif // dealii_swappable_vector_h
-/*---------------------------   swappable_vector.h --------------------------*/
diff --git a/include/deal.II/lac/swappable_vector.templates.h b/include/deal.II/lac/swappable_vector.templates.h
deleted file mode 100644 (file)
index 2402e90..0000000
+++ /dev/null
@@ -1,272 +0,0 @@
-// ---------------------------------------------------------------------
-//
-// Copyright (C) 2000 - 2019 by the deal.II authors
-//
-// This file is part of the deal.II library.
-//
-// The deal.II library is free software; you can use it, redistribute
-// it, and/or modify it under the terms of the GNU Lesser General
-// Public License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-// The full text of the license can be found in the file LICENSE.md at
-// the top level directory of deal.II.
-//
-// ---------------------------------------------------------------------
-
-#ifndef dealii_swappable_vector_templates_h
-#define dealii_swappable_vector_templates_h
-
-
-#include <deal.II/base/config.h>
-
-#include <deal.II/base/memory_consumption.h>
-
-#include <deal.II/lac/swappable_vector.h>
-
-#include <fstream>
-
-DEAL_II_NAMESPACE_OPEN
-
-
-template <typename number>
-SwappableVector<number>::SwappableVector()
-  : data_is_preloaded(false)
-{}
-
-
-
-template <typename number>
-SwappableVector<number>::SwappableVector(const SwappableVector<number> &v)
-  : Vector<number>(v)
-  , filename()
-  , data_is_preloaded(false)
-{
-  Assert(v.filename.empty(), ExcInvalidCopyOperation());
-}
-
-
-
-template <typename number>
-SwappableVector<number>::~SwappableVector()
-{
-  // if the vector was stored in a
-  // file previously, and that has
-  // not been deleted in the
-  // meantime, then we kill that file
-  // first, before killing the vector
-  // itself
-
-  if (!filename.empty())
-    {
-      try
-        {
-          kill_file();
-        }
-      catch (...)
-        {}
-    }
-}
-
-
-
-template <typename number>
-SwappableVector<number> &
-SwappableVector<number>::operator=(const SwappableVector<number> &v)
-{
-  // if necessary, first delete data
-  if (!filename.empty())
-    kill_file();
-
-  // if in MT mode, block all other
-  // operations. if not in MT mode,
-  // this is a no-op
-  std::lock_guard<std::mutex> lock(this->lock);
-
-  Vector<number>::operator=(v);
-  data_is_preloaded       = false;
-
-  return *this;
-}
-
-
-
-template <typename number>
-void
-SwappableVector<number>::swap_out(const std::string &name)
-{
-  // if the vector was stored in
-  // another file previously, and
-  // that has not been deleted in the
-  // meantime, then we kill that file
-  // first
-  if (!filename.empty())
-    kill_file();
-
-  filename = name;
-
-  Assert(this->size() != 0, ExcSizeZero());
-
-  // if in MT mode, block all other
-  // operations. if not in MT mode,
-  // this is a no-op
-  std::lock_guard<std::mutex> lock(this->lock);
-
-  //  check that we have not called
-  //  @p alert without the respective
-  //  @p reload function
-  Assert(data_is_preloaded == false, ExcInternalError());
-
-  std::ofstream tmp_out(filename.c_str());
-  this->block_write(tmp_out);
-  tmp_out.close();
-
-  this->reinit(0);
-}
-
-
-
-template <typename number>
-void
-SwappableVector<number>::reload()
-{
-  // if in MT mode: synchronize with
-  // possibly existing @p alert
-  // calls. if not in MT mode, this
-  // is a no-op
-  lock.lock();
-
-  // if data was already preloaded,
-  // then there is no more need to
-  // load it
-  if (data_is_preloaded == false)
-    // reload data. note that this
-    // function also releases the
-    // lock
-    reload_vector(false);
-  else
-    {
-      // clear flag since no more
-      // needed
-      data_is_preloaded = false;
-
-      // release lock. the lock is
-      // also released in the other
-      // branch of the if-clause
-      lock.unlock();
-    }
-}
-
-
-
-template <typename number>
-void
-SwappableVector<number>::alert()
-{
-#ifndef DEAL_II_WITH_THREADS
-  // note: this function does nothing
-  // in non-MT mode
-  return;
-#else
-
-  // synchronize with possible other
-  // invocations of this function and
-  // other functions in this class
-  lock.lock();
-
-  // calling this function multiple
-  // times does no harm:
-  if ((data_is_preloaded == true) ||
-      // calling this function while the
-      // vector is active does no harm
-      // either
-      (this->size() != 0))
-    lock.unlock();
-  else
-    // data has not been preloaded so
-    // far, so go on! For this, start
-    // a detached thread
-    Threads::new_thread(&SwappableVector<number>::reload_vector, *this, true);
-    // note that reload_vector also
-    // releases the lock
-#endif
-}
-
-
-
-template <typename number>
-void
-SwappableVector<number>::reload_vector(const bool set_flag)
-{
-  (void)set_flag;
-
-  Assert(!filename.empty(), ExcInvalidFilename(filename));
-  Assert(this->size() == 0, ExcSizeNonzero());
-
-  std::ifstream tmp_in(filename.c_str());
-  this->block_read(tmp_in);
-  tmp_in.close();
-
-#ifdef DEAL_II_WITH_THREADS
-  // release the lock that was acquired by the calling functions
-
-  // set the flag if so required
-  if (set_flag)
-    data_is_preloaded = true;
-  lock.unlock();
-#endif
-}
-
-
-
-template <typename number>
-void
-SwappableVector<number>::kill_file()
-{
-  // if in MT mode, wait for other
-  // operations to finish first
-  // (there should be none, but who
-  // knows). if not in MT mode,
-  // this is a no-op
-  std::lock_guard<std::mutex> lock(this->lock);
-
-  // this is too bad: someone
-  // requested the vector in advance,
-  // but never got to fetch it. this
-  // is most probably an error, not?
-  Assert(data_is_preloaded == false, ExcInternalError());
-
-  if (!filename.empty())
-    {
-      int status = std::remove(filename.c_str());
-      (void)status;
-      AssertThrow(status == 0, ExcIO());
-
-      filename = "";
-    };
-}
-
-
-
-template <typename number>
-const std::string &
-SwappableVector<number>::get_filename() const
-{
-  return filename;
-}
-
-
-
-template <typename number>
-std::size_t
-SwappableVector<number>::memory_consumption() const
-{
-  return (MemoryConsumption::memory_consumption(filename) + sizeof(lock) +
-          MemoryConsumption::memory_consumption(data_is_preloaded) +
-          Vector<number>::memory_consumption());
-}
-
-
-
-DEAL_II_NAMESPACE_CLOSE
-
-#endif // dealii_swappable_vector_templates_h
index 7afbc26a98c9d08b7acd0efe886017b7da861971..420a5100d1526db24bc31286977e11017289f684 100644 (file)
@@ -45,7 +45,6 @@ SET(_unity_include_src
   sparse_vanka.cc
   sparsity_pattern.cc
   sparsity_tools.cc
-  swappable_vector.cc
   vector.cc
   vector_memory.cc
   )
diff --git a/source/lac/swappable_vector.cc b/source/lac/swappable_vector.cc
deleted file mode 100644 (file)
index 9041629..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-// ---------------------------------------------------------------------
-//
-// Copyright (C) 2000 - 2014 by the deal.II authors
-//
-// This file is part of the deal.II library.
-//
-// The deal.II library is free software; you can use it, redistribute
-// it, and/or modify it under the terms of the GNU Lesser General
-// Public License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-// The full text of the license can be found in the file LICENSE.md at
-// the top level directory of deal.II.
-//
-// ---------------------------------------------------------------------
-
-#include <deal.II/lac/swappable_vector.templates.h>
-
-DEAL_II_NAMESPACE_OPEN
-
-// explicit instantiations
-template class SwappableVector<double>;
-template class SwappableVector<float>;
-
-DEAL_II_NAMESPACE_CLOSE

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.