]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
Added binary Tecplot support in the DataOutBase class and added necessary hooks in...
authorbenkirk <benkirk@0785d39b-7218-0410-832d-ea1e28bc413d>
Tue, 12 Feb 2002 14:37:27 +0000 (14:37 +0000)
committerbenkirk <benkirk@0785d39b-7218-0410-832d-ea1e28bc413d>
Tue, 12 Feb 2002 14:37:27 +0000 (14:37 +0000)
git-svn-id: https://svn.dealii.org/trunk@5510 0785d39b-7218-0410-832d-ea1e28bc413d

13 files changed:
deal.II/aclocal.m4
deal.II/base/include/base/config.h.in
deal.II/base/include/base/data_out_base.h
deal.II/base/source/data_out_base.all_dimensions.cc
deal.II/base/source/data_out_base.cc
deal.II/common/Make.global_options.in
deal.II/configure
deal.II/configure.in
deal.II/doc/development/Makefile
deal.II/doc/development/makefiles.1.html
deal.II/doc/news/2002/c-3-3.html
deal.II/doc/news/news.html
deal.II/doc/readme.html

index 69fe36eeed32395d3c93a030a9ba60919cadc067..4239941b69b6920d9342ae82e716b46e58509cd1 100644 (file)
@@ -704,3 +704,27 @@ void f (const std::ostream &out);
     ])
 )
 
+
+dnl Check for the Tecplot API. If it is found we will be able to write
+dnl Tecplot binary files directly.
+dnl
+dnl This is a little ugly since we aren't guaranteed that TECHOME
+dnl will point to the installation directory.  It could just as
+dnl easily be TEC80HOME, TEC90HOME, etc...  So, better check them all
+dnl
+dnl Usage: DEAL_II_CONFIGURE_TECPLOT
+dnl
+AC_DEFUN(DEAL_II_CONFIGURE_TECPLOT, dnl
+[
+  AC_CHECK_FILE($TECHOME/lib/tecio.a, TECPLOT_LIBRARY_PATH=$TECHOME/lib/tecio.a)
+  AC_CHECK_FILE($TEC80HOME/lib/tecio.a, TECPLOT_LIBRARY_PATH=$TEC80HOME/lib/tecio.a)
+  AC_CHECK_FILE($TEC90HOME/lib/tecio.a, TECPLOT_LIBRARY_PATH=$TEC90HOME/lib/tecio.a)
+  AC_SUBST(TECPLOT_LIBRARY_PATH)
+  AC_CHECK_FILE($TECHOME/include/TECIO.h, TECPLOT_INCLUDE_PATH=$TECHOME/include)
+  AC_CHECK_FILE($TEC80HOME/include/TECIO.h, TECPLOT_INCLUDE_PATH=$TEC80HOME/include)
+  AC_CHECK_FILE($TEC90HOME/include/TECIO.h, TECPLOT_INCLUDE_PATH=$TEC90HOME/include)
+  AC_SUBST(TECPLOT_INCLUDE_PATH)
+  if test -r $TECPLOT_LIBRARY_PATH -a -r $TECPLOT_INCLUDE_PATH/TECIO.h ; then
+    AC_DEFINE(DEAL_II_HAVE_TECPLOT, 1,[Flag indicating whether the library shall be compiled to use the Tecplot interface])
+  fi
+])
index 6b04e2b73b4c6ae26fc71e49c98e92f3fb3edbc9..979597596b712a488ddf890abf5fee022c50fbf6 100644 (file)
@@ -82,5 +82,8 @@
 /* Enable the multigrid components of the library */
 #undef ENABLE_MULTIGRID
 
+/* Flag indicating whether the library shall be compiled to use the Tecplot interface */
+#undef DEAL_II_HAVE_TECPLOT
+
 
 #endif
index d8c999054ce40348c2267a05983f713b54e4eb46..c87d3d09c405f67690f122b8f7407aa32577828e 100644 (file)
 #include <vector>
 #include <string>
 
+// Only include the Tecplot API header if the appropriate files
+// were detected by configure
+#ifdef DEAL_II_HAVE_TECPLOT
+#  include "TECIO.h"
+#  include <string.h>
+#endif
+
 // we only need output streams, but older compilers did not provide
 // them in a separate include file
 #ifdef HAVE_STD_OSTREAM_HEADER
@@ -286,14 +293,22 @@ class ParameterHandler;
  * @sect3{Tecplot format}
  *
  * The @p{write_tecplot} function and the @p{write} function through the @p{tecplot}
- * parameter write the data in the Tecplot (http://www.amtec.com) FEBLOCK format. The
+ * parameter write the data in the Tecplot @url{http://www.amtec.com} FEBLOCK format. The
  * program supports 1, 2, and 3D data and has features such as contouring, slicing,
  * drawing streamlines, and animation. Patches are written as a collection of
  * quadrilaterals in 2D or bricks in 3D, with the nodal values interpolated to
- * (bi-,tri-) linear elements.
+ * (bi-,tri-) linear elements. These functions will write Tecplot ASCII formatted files.
+ * 
+ * Additionally, Tecplot binary output is supported through the @p{write_tecplot_binary}
+ * and the @p{write} function through the @p{tecplot_binary} parameter.  For this to work
+ * properly @p{./configure} checks for the Tecplot API at build time. To write Tecplot binary
+ * files directly make sure that the TECHOME environment variable points to the
+ * Tecplot installation directory, and that the files $TECHOME/include/TECIO.h
+ * and $TECHOME/lib/tecio.a are readable.  If these files are not availabe (or in the
+ * case of 1D) @p{write_tecplot_binary} will simply call @{write_tecplot} and thus larger
+ * ASCII data files will be produced rather than more efficient Tecplot binary files.
+ * For more information consult the Tecplot Users and Reference manuals.
  *
- * Future work will write Tecplot binary files directly rather than the current
- * ASCI text files provided the proper libraries are detected at compile time.
  *
  *
  * @sect3{VTK format}
@@ -1140,18 +1155,25 @@ class DataOutBase
                                      */
     struct TecplotFlags 
     {
-      private:
-                                        /**
-                                         * Dummy entry to suppress compiler
-                                         * warnings when copying an empty
-                                         * structure. Remove this member
-                                         * when adding the first flag to
-                                         * this structure (and remove the
-                                         * @p{private} as well).
-                                         */
-       int dummy;
 
       public:
+
+                                        /**
+                                         * This variable is needed to hold the
+                                         * output file name when using the
+                                         * Tecplot API to write binary files.
+                                         * If the user doesn't set the file
+                                         * name with this variable only
+                                         * ASCII Tecplot output will be
+                                         * produced.
+                                         */
+        const char* tecplot_binary_file_name;
+      
+                                        /**
+                                         * Constructor
+                                         **/
+       TecplotFlags (const char* tecplot_binary_file_name = NULL);
+      
                                         /**
                                          * Declare all flags with name
                                          * and type as offered by this
@@ -1327,7 +1349,7 @@ class DataOutBase
                                     /**
                                      * Write the given list of patches
                                      * to the output stream in Tecplot
-                                     * format. See the general
+                                     * ASCII format. See the general
                                      * documentation for more information
                                      * on the parameters.
                                      */
@@ -1337,6 +1359,27 @@ class DataOutBase
                               const TecplotFlags                      &flags,
                               std::ostream                            &out);
 
+                                    /**
+                                     * Write the given list of patches
+                                     * to the output stream in Tecplot
+                                     * binary format. See the general
+                                     * documentation for more information
+                                     * on the parameters. @p{tecplot_binary_file_name}
+                                     * (specified through the TecplotFlags
+                                     * struct) indicates the name of the file
+                                     * to be written.  If the file name is not
+                                     * set ASCII output is produced.
+                                     *
+                                     * If the Tecplot API is not present this simply
+                                     * calls the standard write_tecplot file so that
+                                     * ASCII output is still produced.
+                                     */
+    template <int dim, int spacedim>
+    static void write_tecplot_binary (const typename std::vector<Patch<dim,spacedim> > &patches,
+                                     const std::vector<std::string>          &data_names,
+                                     const TecplotFlags                      &flags,
+                                     std::ostream                            &out);
+
                                     /**
                                      * Write the given list of
                                      * patches to the output stream
@@ -1406,7 +1449,19 @@ class DataOutBase
                                      * Exception
                                      */
     DeclException0 (ExcIO);
-
+                                    /**
+                                      * Exception
+                                      */
+    DeclException0 (ExcTecplotAPIError);
+                                     /**
+                                      * Exception
+                                      */
+    DeclException1 (ExcErrorOpeningTecplotFile,
+                   char*,
+                   << "There was an error opening Tecplot file " << arg1
+                   << " for output");
+    
+      
   private:
                                     /**
                                      * Class holding the data of one
@@ -1600,7 +1655,7 @@ class DataOutInterface : private DataOutBase
                                      * the presently supported output
                                      * formats.
                                      */
-    enum OutputFormat { default_format, dx, ucd, gnuplot, povray, eps, gmv, tecplot, vtk };
+    enum OutputFormat { default_format, dx, ucd, gnuplot, povray, eps, gmv, tecplot, tecplot_binary, vtk };
 
                                     /**
                                      * Obtain data through the
@@ -1659,6 +1714,16 @@ class DataOutInterface : private DataOutBase
                                      */
     void write_tecplot (std::ostream &out) const;
 
+                                    /**
+                                     * Obtain data through the
+                                     * @p{get_patches} function and
+                                     * write it in the Tecplot binary
+                                     * output format. Note that the name
+                                     * of the output file must be specified
+                                     * through the TecplotFlags interface.
+                                     */
+    void write_tecplot_binary (std::ostream &out) const;
+
                                     /**
                                      * Obtain data through the
                                      * @p{get_patches} function and
index 9788987fbd0aeebf4301aa32682ec80a2409cd55..873378832262f3e1362cbe5848b4163dabe85601 100644 (file)
@@ -382,6 +382,13 @@ DataOutBase::GmvFlags::memory_consumption () const
 
 
 
+DataOutBase::TecplotFlags::TecplotFlags (const char* tecplot_binary_file_name) :
+  tecplot_binary_file_name(tecplot_binary_file_name)
+{
+};
+
+
+
 void DataOutBase::TecplotFlags::declare_parameters (ParameterHandler &/*prm*/)
 {};
 
index 9e6516b6f08c9bd555e64319ceb47d3968c7d584..157797a7a36c9bda98d63a670637acc0cee41b17 100644 (file)
@@ -2305,8 +2305,8 @@ void DataOutBase::write_gmv (const typename std::vector<Patch<dim,spacedim> > &p
 template <int dim, int spacedim>
 void DataOutBase::write_tecplot (const typename std::vector<Patch<dim,spacedim> > &patches,
                                 const std::vector<std::string>          &data_names,
-                                const TecplotFlags                      &/*flags*/,
-                                std::ostream                            &out) 
+                                const TecplotFlags                      &flags,
+                                std::ostream                            &out)
 {
   AssertThrow (out, ExcIO());
 
@@ -2320,8 +2320,8 @@ void DataOutBase::write_tecplot (const typename std::vector<Patch<dim,spacedim>
   Assert (n_data_sets == patches[0].data.n_rows(),
          ExcUnexpectedNumberOfDatasets (patches[0].data.n_rows(), n_data_sets));
   
-  
 
+  
                                   // first count the number of cells
                                   // and cells for later use
   unsigned int n_cells = 0,
@@ -2353,7 +2353,9 @@ void DataOutBase::write_tecplot (const typename std::vector<Patch<dim,spacedim>
       };
 
   
-                                  ///////////////////////
+
+
+                                  ///////////
                                   // preamble
   {
     std::time_t  time1= std::time (0);
@@ -2371,7 +2373,7 @@ void DataOutBase::write_tecplot (const typename std::vector<Patch<dim,spacedim>
        << "# For a description of the Tecplot format see the Tecplot documentation."
        << std::endl
        << "#" << std::endl;
-
+    
 
     out << "Variables=";
 
@@ -2396,21 +2398,21 @@ void DataOutBase::write_tecplot (const typename std::vector<Patch<dim,spacedim>
       };
     
     out << std::endl;
-
+    
     if (dim > 1)
       {
        out << "zone f=feblock, n=" << n_nodes << ", e=" << n_cells << ", et=";
-    
+       
        switch (dim)
          {
-           case 2:
-                 out << "quadrilateral" << std::endl;
-                 break;
-           case 3:
-                 out << "brick" << std::endl;
-                 break;
-           default:
-                 Assert (false, ExcNotImplemented());
+         case 2:
+           out << "quadrilateral" << std::endl;
+           break;
+         case 3:
+           out << "brick" << std::endl;
+           break;
+         default:
+           Assert (false, ExcNotImplemented());
          };
       }
     else
@@ -2420,7 +2422,7 @@ void DataOutBase::write_tecplot (const typename std::vector<Patch<dim,spacedim>
   };
 
 
-                                   // in Tecplot block format the vertex
+                                   // in Tecplot FEBLOCK format the vertex
                                    // coordinates and the data have an
                                    // order that is a bit unpleasant
                                    // (first all x coordinates, then
@@ -2441,6 +2443,7 @@ void DataOutBase::write_tecplot (const typename std::vector<Patch<dim,spacedim>
                                    // separate thread and when wanting
                                    // to write out the data, we wait
                                    // for that thread to finish
+  
    std::vector<std::vector<double> > data_vectors (n_data_sets,
                                                   std::vector<double> (n_nodes));
    Threads::ThreadManager thread_manager;
@@ -2458,7 +2461,8 @@ void DataOutBase::write_tecplot (const typename std::vector<Patch<dim,spacedim>
 
   
    for (unsigned int d=1; d<=spacedim; ++d)
-     {
+     {       
+          
        for (typename std::vector<Patch<dim,spacedim> >::const_iterator patch=patches.begin();
            patch!=patches.end(); ++patch)
         {
@@ -2485,6 +2489,7 @@ void DataOutBase::write_tecplot (const typename std::vector<Patch<dim,spacedim>
                      
                                                        // compute coordinates for
                                                        // this patch point
+
                       out << (((patch->vertices[1](d-1) * x_frac) +
                                (patch->vertices[0](d-1) * (1-x_frac))) * (1-y_frac) +
                               ((patch->vertices[2](d-1) * x_frac) +
@@ -2513,6 +2518,7 @@ void DataOutBase::write_tecplot (const typename std::vector<Patch<dim,spacedim>
                        
                                                          // compute coordinates for
                                                          // this patch point
+                        
                         out << ((((patch->vertices[1](d-1) * x_frac) +
                                   (patch->vertices[0](d-1) * (1-x_frac))) * (1-y_frac) +
                                  ((patch->vertices[2](d-1) * x_frac) +
@@ -2523,7 +2529,6 @@ void DataOutBase::write_tecplot (const typename std::vector<Patch<dim,spacedim>
                                   (patch->vertices[7](d-1) * (1-x_frac))) * y_frac)   * z_frac)
                             << '\n';
                       };
-               
                 break;
               };
              
@@ -2546,6 +2551,7 @@ void DataOutBase::write_tecplot (const typename std::vector<Patch<dim,spacedim>
                                    // then write data.
    for (unsigned int data_set=0; data_set<n_data_sets; ++data_set)
      {
+       
        copy(data_vectors[data_set].begin(),
            data_vectors[data_set].end(),
            std::ostream_iterator<double>(out, "\n"));
@@ -2576,11 +2582,14 @@ void DataOutBase::write_tecplot (const typename std::vector<Patch<dim,spacedim>
           {
             for (unsigned int i=0; i<n_subdivisions; ++i)
               for (unsigned int j=0; j<n_subdivisions; ++j)
-                out << first_vertex_of_patch+i*(n_subdivisions+1)+j+1 << ' '
-                    << first_vertex_of_patch+(i+1)*(n_subdivisions+1)+j+1 << ' '
-                    << first_vertex_of_patch+(i+1)*(n_subdivisions+1)+j+1+1 << ' '
-                    << first_vertex_of_patch+i*(n_subdivisions+1)+j+1+1
-                    << std::endl;
+                {
+
+                  out << first_vertex_of_patch+i*(n_subdivisions+1)+j+1 << ' '
+                      << first_vertex_of_patch+(i+1)*(n_subdivisions+1)+j+1 << ' '
+                      << first_vertex_of_patch+(i+1)*(n_subdivisions+1)+j+1+1 << ' '
+                      << first_vertex_of_patch+i*(n_subdivisions+1)+j+1+1
+                      << std::endl;
+                };
             break;
           };
              
@@ -2591,6 +2600,7 @@ void DataOutBase::write_tecplot (const typename std::vector<Patch<dim,spacedim>
                 for (unsigned int k=0; k<n_subdivisions; ++k)
                   {
                                                      // note: vertex indices start with 1!
+                    
                     out << first_vertex_of_patch+(i*(n_subdivisions+1)+j      )*(n_subdivisions+1)+k  +1 << ' '
                         << first_vertex_of_patch+((i+1)*(n_subdivisions+1)+j  )*(n_subdivisions+1)+k  +1 << ' '
                         << first_vertex_of_patch+((i+1)*(n_subdivisions+1)+j+1)*(n_subdivisions+1)+k  +1 << ' '
@@ -2628,7 +2638,9 @@ void DataOutBase::write_tecplot (const typename std::vector<Patch<dim,spacedim>
           default:
                 Assert (false, ExcNotImplemented());
         };
+       
      };
+
   
                                    // assert the stream is still ok
    AssertThrow (out, ExcIO());
@@ -2636,6 +2648,459 @@ void DataOutBase::write_tecplot (const typename std::vector<Patch<dim,spacedim>
 
 
 
+//--------------------------------------------------------
+// Macros for handling Tecplot API data
+
+#ifdef DEAL_II_HAVE_TECPLOT
+
+namespace
+{
+  class TecplotMacros
+  {
+  public:
+    TecplotMacros(const unsigned int n_nodes = 0,
+                 const unsigned int n_vars = 0,
+                 const unsigned int n_cells = 0,
+                 const unsigned int n_vert = 0);
+    ~TecplotMacros();
+    float & nd(const unsigned int i, const unsigned int j);
+    int   & cd(const unsigned int i, const unsigned int j);
+    float* nodalData;
+    int*   connData;
+  private:
+    unsigned int n_nodes;
+    unsigned int n_vars;
+    unsigned int n_cells;
+    unsigned int n_vert;
+  };
+}
+
+
+
+TecplotMacros::TecplotMacros(const unsigned int n_nodes,
+                            const unsigned int n_vars,
+                            const unsigned int n_cells,
+                            const unsigned int n_vert) :
+  n_nodes(n_nodes),
+  n_vars(n_vars),
+  n_cells(n_cells),
+  n_vert(n_vert)
+{
+  nodalData = new float[n_nodes*n_vars];
+  connData  = new int[n_cells*n_vert];
+};
+
+
+
+TecplotMacros::~TecplotMacros()
+{
+  delete [] nodalData;
+  delete [] connData;
+};
+
+
+
+inline
+float & TecplotMacros::nd(const unsigned int i, const unsigned int j)
+{
+  return nodalData[(i)*(n_nodes) + (j)]; 
+};
+
+
+
+inline
+int & TecplotMacros::cd(const unsigned int i, const unsigned int j)
+{
+  return connData[(i) + (j)*(n_vert)]; 
+};
+
+#endif
+//--------------------------------------------------------
+
+
+
+template <int dim, int spacedim>
+void DataOutBase::write_tecplot_binary (const typename std::vector<Patch<dim,spacedim> > &patches,
+                                       const std::vector<std::string>          &data_names,
+                                       const TecplotFlags                      &flags,
+                                       std::ostream                            &out)
+{
+  
+#ifndef DEAL_II_HAVE_TECPLOT
+  
+  // simply call the ASCII output function if the Tecplot API isn't present
+  write_tecplot (patches, data_names, flags, out);
+  return;
+  
+#else
+  
+  // Tecplot binary output only good for 2D & 3D
+  if (dim == 1)
+    {
+      write_tecplot (patches, data_names, flags, out);
+      return;
+    };
+
+  // if the user hasn't specified a file name we should
+  // call the ASCII function and use the ostream @p{out}
+  // instead of doing something silly later
+  char* file_name = (char*) flags.tecplot_binary_file_name;
+
+  if (file_name == NULL)
+    {
+      write_tecplot (patches, data_names, flags, out);
+      return;      
+    };
+  
+  
+  AssertThrow (out, ExcIO());
+
+  Assert (patches.size() > 0, ExcNoPatches());
+  const unsigned int n_data_sets = data_names.size();
+                                  // check against # of data sets in
+                                  // first patch. checks against all
+                                  // other patches are made in
+                                  // write_gmv_reorder_data_vectors
+  Assert (n_data_sets == patches[0].data.n_rows(),
+         ExcUnexpectedNumberOfDatasets (patches[0].data.n_rows(), n_data_sets));
+  
+
+  
+                                  // first count the number of cells
+                                  // and cells for later use
+  unsigned int n_cells = 0,
+               n_nodes = 0;
+  for (typename std::vector<Patch<dim,spacedim> >::const_iterator patch=patches.begin();
+       patch!=patches.end(); ++patch)
+    switch (dim)
+      {
+       case 2:
+             n_cells += patch->n_subdivisions *
+                        patch->n_subdivisions;
+             n_nodes += (patch->n_subdivisions+1) *
+                        (patch->n_subdivisions+1);
+             break;
+       case 3:
+             n_cells += patch->n_subdivisions *
+                        patch->n_subdivisions *
+                        patch->n_subdivisions;
+             n_nodes += (patch->n_subdivisions+1) *
+                        (patch->n_subdivisions+1) *
+                        (patch->n_subdivisions+1);
+             break;
+       default:
+             Assert (false, ExcNotImplemented());
+      };
+
+  
+
+  
+  
+                                    // local variables only needed to write Tecplot
+                                    // binary output files  
+  const unsigned int vars_per_node  = (dim+n_data_sets),  
+                     nodes_per_cell = GeometryInfo<dim>::vertices_per_cell;
+  
+  TecplotMacros tm(n_nodes, vars_per_node, n_cells, nodes_per_cell);
+  
+  int is_double = 0,
+      tec_debug = 0,
+      cell_type;
+
+  
+  unsigned int string_size = 0;
+
+  if (dim==2)
+    string_size = 3;
+  else if (dim==3)
+    string_size = 5;
+  
+
+  for (unsigned int data_set=0; data_set<n_data_sets; ++data_set)
+    {
+      string_size += 1;
+      string_size += data_names[data_set].size();
+    };
+
+  
+  char *tecVarNames = new char[string_size];
+  *tecVarNames = 0;
+
+  
+  switch (dim)
+    {
+      case 2:
+           cell_type = 1;
+           tecVarNames  = strncat(tecVarNames, "x y", 3);
+           break;
+      case 3:
+           cell_type = 3;
+           tecVarNames  = strncat(tecVarNames, "x y z", 5);
+           break;
+      default:
+            Assert(false, ExcNotImplemented());
+    };
+
+  
+  for (unsigned int data_set=0; data_set<n_data_sets; ++data_set)
+    {
+      tecVarNames = strncat(tecVarNames, " ", 1);
+      tecVarNames = strncat(tecVarNames, data_names[data_set].c_str(), data_names[data_set].size());
+    };
+
+                                   // in Tecplot FEBLOCK format the vertex
+                                   // coordinates and the data have an
+                                   // order that is a bit unpleasant
+                                   // (first all x coordinates, then
+                                   // all y coordinate, ...; first all
+                                   // data of variable 1, then
+                                   // variable 2, etc), so we have to
+                                   // copy the data vectors a bit around
+                                   //
+                                   // note that we copy vectors when
+                                   // looping over the patches since we
+                                   // have to write them one variable
+                                   // at a time and don't want to use
+                                   // more than one loop
+                                   //
+                                   // this copying of data vectors can
+                                   // be done while we already output
+                                   // the vertices, so do this on a
+                                   // separate thread and when wanting
+                                   // to write out the data, we wait
+                                   // for that thread to finish
+  
+   std::vector<std::vector<double> > data_vectors (n_data_sets,
+                                                  std::vector<double> (n_nodes));
+   Threads::ThreadManager thread_manager;
+   void (*fun_ptr) (const typename std::vector<Patch<dim,spacedim> > &,
+                   std::vector<std::vector<double> >                &)
+     = &DataOutBase::template write_gmv_reorder_data_vectors<dim,spacedim>;
+   Threads::spawn (thread_manager,
+                  Threads::encapsulate (fun_ptr)
+                  .collect_args(patches, data_vectors));
+
+                                   ///////////////////////////////
+                                   // first make up a list of used
+                                   // vertices along with their
+                                   // coordinates
+
+  
+   for (unsigned int d=1; d<=spacedim; ++d)
+     {       
+       unsigned int entry=0;
+       
+       for (typename std::vector<Patch<dim,spacedim> >::const_iterator patch=patches.begin();
+           patch!=patches.end(); ++patch)
+        {
+          const unsigned int n_subdivisions = patch->n_subdivisions;
+         
+          switch (dim)
+            {
+              case 2:
+              {
+                for (unsigned int i=0; i<n_subdivisions+1; ++i)
+                  for (unsigned int j=0; j<n_subdivisions+1; ++j)
+                    {
+                      const double x_frac = i * 1./n_subdivisions,
+                                   y_frac = j * 1./n_subdivisions;
+                     
+                                                       // compute coordinates for
+                                                       // this patch point
+                      tm.nd((d-1),entry) = static_cast<float>(
+                                                              (((patch->vertices[1](d-1) * x_frac) +
+                                                                (patch->vertices[0](d-1) * (1-x_frac))) * (1-y_frac) +
+                                                               ((patch->vertices[2](d-1) * x_frac) +
+                                                                (patch->vertices[3](d-1) * (1-x_frac))) * y_frac)
+                                                              );
+                      entry++;
+                    };
+                break;
+              };
+             
+              case 3:
+              {
+                for (unsigned int i=0; i<n_subdivisions+1; ++i)
+                  for (unsigned int j=0; j<n_subdivisions+1; ++j)
+                    for (unsigned int k=0; k<n_subdivisions+1; ++k)
+                      {
+                                                         // note the broken
+                                                         // design of hexahedra
+                                                         // in deal.II, where
+                                                         // first the z-component
+                                                         // is counted up, before
+                                                         // increasing the y-
+                                                         // coordinate
+                        const double x_frac = i * 1./n_subdivisions,
+                                     y_frac = k * 1./n_subdivisions,
+                                     z_frac = j * 1./n_subdivisions;
+                       
+                                                         // compute coordinates for
+                                                         // this patch point
+                        tm.nd((d-1),entry) = static_cast<float>(
+                                                                ((((patch->vertices[1](d-1) * x_frac) +
+                                                                   (patch->vertices[0](d-1) * (1-x_frac))) * (1-y_frac) +
+                                                                  ((patch->vertices[2](d-1) * x_frac) +
+                                                                   (patch->vertices[3](d-1) * (1-x_frac))) * y_frac)   * (1-z_frac) +
+                                                                 (((patch->vertices[5](d-1) * x_frac) +
+                                                                   (patch->vertices[4](d-1) * (1-x_frac))) * (1-y_frac) +
+                                                                  ((patch->vertices[6](d-1) * x_frac) +
+                                                                   (patch->vertices[7](d-1) * (1-x_frac))) * y_frac)   * z_frac)
+                                                                );
+                        entry++;
+                      };
+                break;
+              };
+             
+              default:
+                    Assert (false, ExcNotImplemented());
+            };
+        };
+     };
+
+
+                                   ///////////////////////////////////////
+                                   // data output.
+                                   //
+   thread_manager.wait ();
+
+                                   // then write data.
+   for (unsigned int data_set=0; data_set<n_data_sets; ++data_set)
+     for (unsigned int entry=0; entry<data_vectors[data_set].size(); entry++)
+       tm.nd((dim+data_set),entry) = static_cast<float>(data_vectors[data_set][entry]);
+
+
+
+  
+                                   /////////////////////////////////
+                                   // now for the cells. note that
+                                   // vertices are counted from 1 onwards
+
+   unsigned int first_vertex_of_patch = 0;
+   unsigned int elem=0;
+      
+   for (typename std::vector<Patch<dim,spacedim> >::const_iterator patch=patches.begin();
+       patch!=patches.end(); ++patch)
+     {
+       const unsigned int n_subdivisions = patch->n_subdivisions;
+      
+                                       // write out the cells making
+                                       // up this patch
+       switch (dim)
+        {
+          case 2:
+          {
+            for (unsigned int i=0; i<n_subdivisions; ++i)
+              for (unsigned int j=0; j<n_subdivisions; ++j)
+                {
+
+                  tm.cd(0,elem) = first_vertex_of_patch+i*(n_subdivisions+1)+j+1;
+                  tm.cd(1,elem) = first_vertex_of_patch+(i+1)*(n_subdivisions+1)+j+1;
+                  tm.cd(2,elem) = first_vertex_of_patch+(i+1)*(n_subdivisions+1)+j+1+1;
+                  tm.cd(3,elem) = first_vertex_of_patch+i*(n_subdivisions+1)+j+1+1;
+                  
+                  elem++;
+                };
+            break;
+          };
+             
+          case 3:
+          {
+            for (unsigned int i=0; i<n_subdivisions; ++i)
+              for (unsigned int j=0; j<n_subdivisions; ++j)
+                for (unsigned int k=0; k<n_subdivisions; ++k)
+                  {
+                                                     // note: vertex indices start with 1!
+
+                    
+                    tm.cd(0,elem) = first_vertex_of_patch+(i*(n_subdivisions+1)+j      )*(n_subdivisions+1)+k  +1;
+                    tm.cd(1,elem) = first_vertex_of_patch+((i+1)*(n_subdivisions+1)+j  )*(n_subdivisions+1)+k  +1;
+                    tm.cd(2,elem) = first_vertex_of_patch+((i+1)*(n_subdivisions+1)+j+1)*(n_subdivisions+1)+k  +1;
+                    tm.cd(3,elem) = first_vertex_of_patch+(i*(n_subdivisions+1)+j+1    )*(n_subdivisions+1)+k  +1;
+                    tm.cd(4,elem) = first_vertex_of_patch+(i*(n_subdivisions+1)+j      )*(n_subdivisions+1)+k+1+1;
+                    tm.cd(5,elem) = first_vertex_of_patch+((i+1)*(n_subdivisions+1)+j  )*(n_subdivisions+1)+k+1+1;
+                    tm.cd(6,elem) = first_vertex_of_patch+((i+1)*(n_subdivisions+1)+j+1)*(n_subdivisions+1)+k+1+1;
+                    tm.cd(7,elem) = first_vertex_of_patch+(i*(n_subdivisions+1)+j+1    )*(n_subdivisions+1)+k+1+1;
+                    
+                    elem++;
+                  };
+            break;
+          };
+
+          default:
+                Assert (false, ExcNotImplemented());
+        };
+
+
+                                       // finally update the number
+                                       // of the first vertex of this patch
+       switch (dim)
+        {
+          case 2:
+                first_vertex_of_patch += (n_subdivisions+1) *
+                                         (n_subdivisions+1);
+                break;
+          case 3:
+                first_vertex_of_patch += (n_subdivisions+1) *
+                                         (n_subdivisions+1) *
+                                         (n_subdivisions+1);
+                break;
+          default:
+                Assert (false, ExcNotImplemented());
+        };      
+     };
+
+
+   {     
+     int ierr      = 0,
+         num_nodes = static_cast<int>(n_nodes),
+         num_cells = static_cast<int>(n_cells);
+   
+     ierr = TECINI (NULL,
+                   tecVarNames,
+                   file_name,
+                   static_cast<char*>("."),
+                   &tec_debug,
+                   &is_double);
+     
+     Assert (ierr == 0, ExcErrorOpeningTecplotFile(file_name));
+     
+     ierr = TECZNE (NULL,
+                   &num_nodes,
+                   &num_cells,
+                   &cell_type,
+                   static_cast<char*>("FEBLOCK"),
+                   NULL);
+     
+     Assert (ierr == 0, ExcTecplotAPIError());
+     
+     int total = (vars_per_node*num_nodes);
+
+     ierr = TECDAT (&total,
+                   tm.nodalData,
+                   &is_double);
+     
+     Assert (ierr == 0, ExcTecplotAPIError());
+     
+     ierr = TECNOD (tm.connData);
+     
+     Assert (ierr == 0, ExcTecplotAPIError());
+     
+     ierr = TECEND ();
+     
+     Assert (ierr == 0, ExcTecplotAPIError());
+     
+   };
+
+      
+   delete [] tecVarNames;
+         
+#endif
+};
+
+
+
 template <int dim, int spacedim>
 void DataOutBase::write_vtk (const typename std::vector<Patch<dim,spacedim> > &patches,
                             const std::vector<std::string>          &data_names,
@@ -3120,6 +3585,15 @@ void DataOutInterface<dim,spacedim>::write_tecplot (std::ostream &out) const
 
 
 
+template <int dim, int spacedim>
+void DataOutInterface<dim,spacedim>::write_tecplot_binary (std::ostream &out) const 
+{
+  DataOutBase::write_tecplot_binary (get_patches(), get_dataset_names(),
+                                    tecplot_flags, out);
+};
+
+
+
 template <int dim, int spacedim>
 void DataOutInterface<dim,spacedim>::write_vtk (std::ostream &out) const 
 {
@@ -3168,6 +3642,10 @@ DataOutInterface<dim,spacedim>::write (std::ostream &out,
            write_tecplot (out);
            break;
            
+      case tecplot_binary:
+           write_tecplot_binary (out);
+           break;
+           
       case vtk:
            write_vtk (out);
            break;
@@ -3283,6 +3761,9 @@ DataOutInterface<dim,spacedim>::default_suffix (const OutputFormat output_format
       case tecplot:
            return ".dat";
            
+      case tecplot_binary:
+           return ".plt";
+           
       case vtk:
            return ".vtk";
            
@@ -3319,6 +3800,9 @@ DataOutInterface<dim,spacedim>::parse_output_format (const std::string &format_n
   if (format_name == "tecplot")
     return tecplot;
   
+  if (format_name == "tecplot_binary")
+    return tecplot_binary;
+  
   if (format_name == "vtk")
     return vtk;
   
index f7ea380a34b15722a3fa2f46e6276edd830c39bc..1878cd5c49dba44c518cb8a68a55649b0ca6017d 100644 (file)
@@ -35,6 +35,8 @@ enable-shared        = @enableshared@
 DEAL_II_MAJOR        = @DEAL_II_MAJOR@
 DEAL_II_MINOR        = @DEAL_II_MINOR@
 USE_CONTRIB_HSL      = @USE_CONTRIB_HSL@
+TECIO_INCLUDE        = @TECPLOT_INCLUDE_PATH@
+TECIO_LIBRARY        = @TECPLOT_LIBRARY_PATH@
 
 # if HSL sublibs are used, add F77 libs to linker flags
 ifeq ($(USE_CONTRIB_HSL),yes)
@@ -42,6 +44,9 @@ ifeq ($(USE_CONTRIB_HSL),yes)
   LIBS    += $(F77LIBS)
 endif
 
+# if Tecplot is used, link against tecio.a
+LIBS += $(TECIO_LIBRARY)
+
 ######################################################
 # now configuration for compiler flags, pathes, etc
 
@@ -90,12 +95,14 @@ include-path-base        = $D/base/include
 include-path-lac         = $D/lac/include
 include-path-deal2       = $D/deal.II/include
 include-path-contrib-hsl = $D/contrib/hsl/include
+include-path-tecplot     = $(TECIO_INCLUDE)
 
 
 INCLUDE           = $(addprefix -I, $(include-path-base) \
                                     $(include-path-lac)  \
                                     $(include-path-deal2)\
-                                   $(include-path-contrib-hsl))
+                                   $(include-path-contrib-hsl)\
+                                   $(include-path-tecplot))
 
 # compiler flags for debug and optimized mode
 CXXFLAGS.g   = @DEFS@ @CXXFLAGSG@  $(INCLUDE)
index cffa47a084efd737a6228cfc2ae32a9d46d74dfd..6920c88e30a16f94a8015ebf3ba7ca91e3db32a3 100755 (executable)
@@ -68,6 +68,8 @@
 
 
 
+
+
 
 
 
@@ -666,7 +668,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
 fi
 
 echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:670: checking host system type" >&5
+echo "configure:672: checking host system type" >&5
 
 host_alias=$host
 case "$host_alias" in
@@ -687,7 +689,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
 echo "$ac_t""$host" 1>&6
 
 echo $ac_n "checking target system type""... $ac_c" 1>&6
-echo "configure:691: checking target system type" >&5
+echo "configure:693: checking target system type" >&5
 
 target_alias=$target
 case "$target_alias" in
@@ -705,7 +707,7 @@ target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
 echo "$ac_t""$target" 1>&6
 
 echo $ac_n "checking build system type""... $ac_c" 1>&6
-echo "configure:709: checking build system type" >&5
+echo "configure:711: checking build system type" >&5
 
 build_alias=$build
 case "$build_alias" in
@@ -743,7 +745,7 @@ cross_compiling=$ac_cv_prog_cxx_cross
 # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:747: checking for $ac_word" >&5
+echo "configure:749: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -773,7 +775,7 @@ if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:777: checking for $ac_word" >&5
+echo "configure:779: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -824,7 +826,7 @@ fi
       # Extract the first word of "cl", so it can be a program name with args.
 set dummy cl; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:828: checking for $ac_word" >&5
+echo "configure:830: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -856,7 +858,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:860: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:862: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
 
 ac_ext=c
 # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -867,12 +869,12 @@ cross_compiling=$ac_cv_prog_cc_cross
 
 cat > conftest.$ac_ext << EOF
 
-#line 871 "configure"
+#line 873 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:876: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:878: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cc_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -898,12 +900,12 @@ if test $ac_cv_prog_cc_works = no; then
   { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:902: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:904: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
 cross_compiling=$ac_cv_prog_cc_cross
 
 echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:907: checking whether we are using GNU C" >&5
+echo "configure:909: checking whether we are using GNU C" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -912,7 +914,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:916: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:918: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gcc=yes
 else
   ac_cv_prog_gcc=no
@@ -931,7 +933,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
 ac_save_CFLAGS="$CFLAGS"
 CFLAGS=
 echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:935: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:937: checking whether ${CC-cc} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -965,7 +967,7 @@ fi
 # Extract the first word of "$CC", so it can be a program name with args.
 set dummy $CC; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:969: checking for $ac_word" >&5
+echo "configure:971: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1006,7 +1008,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1010: checking for $ac_word" >&5
+echo "configure:1012: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1038,7 +1040,7 @@ test -n "$CXX" || CXX="gcc"
 
 
 echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1042: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
+echo "configure:1044: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
 
 ac_ext=C
 # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -1049,12 +1051,12 @@ cross_compiling=$ac_cv_prog_cxx_cross
 
 cat > conftest.$ac_ext << EOF
 
-#line 1053 "configure"
+#line 1055 "configure"
 #include "confdefs.h"
 
 int main(){return(0);}
 EOF
-if { (eval echo configure:1058: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1060: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cxx_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -1080,12 +1082,12 @@ if test $ac_cv_prog_cxx_works = no; then
   { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1084: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1086: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6
 cross_compiling=$ac_cv_prog_cxx_cross
 
 echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6
-echo "configure:1089: checking whether we are using GNU C++" >&5
+echo "configure:1091: checking whether we are using GNU C++" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1094,7 +1096,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1098: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1100: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gxx=yes
 else
   ac_cv_prog_gxx=no
@@ -1113,7 +1115,7 @@ ac_test_CXXFLAGS="${CXXFLAGS+set}"
 ac_save_CXXFLAGS="$CXXFLAGS"
 CXXFLAGS=
 echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
-echo "configure:1117: checking whether ${CXX-g++} accepts -g" >&5
+echo "configure:1119: checking whether ${CXX-g++} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1144,11 +1146,62 @@ else
   fi
 fi
 
+for ac_declaration in \
+   ''\
+   '#include <stdlib.h>' \
+   'extern "C" void std::exit (int) throw (); using std::exit;' \
+   'extern "C" void std::exit (int); using std::exit;' \
+   'extern "C" void exit (int) throw ();' \
+   'extern "C" void exit (int);' \
+   'void exit (int);'
+do
+  cat > conftest.$ac_ext <<EOF
+#line 1160 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+$ac_declaration
+int main() {
+exit (42);
+; return 0; }
+EOF
+if { (eval echo configure:1168: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  :
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  continue
+fi
+rm -f conftest*
+  cat > conftest.$ac_ext <<EOF
+#line 1178 "configure"
+#include "confdefs.h"
+$ac_declaration
+int main() {
+exit (42);
+; return 0; }
+EOF
+if { (eval echo configure:1185: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  break
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+fi
+rm -f conftest*
+done
+if test -n "$ac_declaration"; then
+  echo '#ifdef __cplusplus' >>confdefs.h
+  echo $ac_declaration      >>confdefs.h
+  echo '#endif'             >>confdefs.h
+fi
+
+
 CXXFLAGS="$OLDCXXFLAGS"
 # Extract the first word of "$CXX", so it can be a program name with args.
 set dummy $CXX; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1152: checking for $ac_word" >&5
+echo "configure:1205: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_CXX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1342,9 +1395,9 @@ cross_compiling=$ac_cv_prog_cxx_cross
 
   CXXFLAGS="$CXXFLAGSG -Werror"
   echo $ac_n "checking for std::advance warning""... $ac_c" 1>&6
-echo "configure:1346: checking for std::advance warning" >&5
+echo "configure:1399: checking for std::advance warning" >&5
   cat > conftest.$ac_ext <<EOF
-#line 1348 "configure"
+#line 1401 "configure"
 #include "confdefs.h"
 
 #include <map>
@@ -1358,7 +1411,7 @@ int main() {
        
 ; return 0; }
 EOF
-if { (eval echo configure:1362: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1415: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
                  echo "$ac_t""no" 1>&6
@@ -1441,12 +1494,12 @@ fi
 
 if test "$GXX" = yes ; then
   echo $ac_n "checking whether -ggdb works for long symbols""... $ac_c" 1>&6
-echo "configure:1445: checking whether -ggdb works for long symbols" >&5
+echo "configure:1498: checking whether -ggdb works for long symbols" >&5
   case "$target" in
           alpha*-osf*)
          CXXFLAGS="-ggdb $CXXFLAGSG"
          cat > conftest.$ac_ext <<EOF
-#line 1450 "configure"
+#line 1503 "configure"
 #include "confdefs.h"
 
 #include <string>
@@ -1467,7 +1520,7 @@ int main() {
            
 ; return 0; }
 EOF
-if { (eval echo configure:1471: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1524: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
               CXXFLAGSG="-ggdb $CXXFLAGSG"
@@ -1558,7 +1611,7 @@ if test "$enablemultithreading" = yes ; then
   if test "$GXX" = yes ; then
     
   echo $ac_n "checking for platform specific thread flags""... $ac_c" 1>&6
-echo "configure:1562: checking for platform specific thread flags" >&5
+echo "configure:1615: checking for platform specific thread flags" >&5
   
   for i in threads mt pthread pthreads mthreads Kthread kthread invalid_last_entry; do
     CXXFLAGS="$CXXFLAGSG -$i"
@@ -1594,7 +1647,7 @@ echo "configure:1562: checking for platform specific thread flags" >&5
 
     
   echo $ac_n "checking for platform specific multi-threading defines""... $ac_c" 1>&6
-echo "configure:1598: checking for platform specific multi-threading defines" >&5
+echo "configure:1651: checking for platform specific multi-threading defines" >&5
   ac_ext=C
 # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
 ac_cpp='$CXXCPP $CPPFLAGS'
@@ -1603,7 +1656,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
 cross_compiling=$ac_cv_prog_cxx_cross
 
   cat > conftest.$ac_ext <<EOF
-#line 1607 "configure"
+#line 1660 "configure"
 #include "confdefs.h"
 
 #if !defined (_REENTRANT) && !defined (_THREAD_SAFE)
@@ -1617,7 +1670,7 @@ int main() {
    
 ; return 0; }
 EOF
-if { (eval echo configure:1621: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1674: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
        echo "$ac_t"""not necessary"" 1>&6
@@ -1662,7 +1715,7 @@ fi
 
 if test "$withmultithreading" != no ; then
   echo $ac_n "checking for ACE""... $ac_c" 1>&6
-echo "configure:1666: checking for ACE" >&5
+echo "configure:1719: checking for ACE" >&5
   if test -d "$withmultithreading" ; then
     echo "$ac_t""found" 1>&6
   else
@@ -1683,7 +1736,7 @@ fi
 if test "$enablemultithreading" = yes ; then
   if test "$GXX" = yes ; then
       echo $ac_n "checking whether compilation with ACE disallows flags""... $ac_c" 1>&6
-echo "configure:1687: checking whether compilation with ACE disallows flags" >&5
+echo "configure:1740: checking whether compilation with ACE disallows flags" >&5
   ac_ext=C
 # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
 ac_cpp='$CXXCPP $CPPFLAGS'
@@ -1693,7 +1746,7 @@ cross_compiling=$ac_cv_prog_cxx_cross
 
   CXXFLAGS="-ansi -I$withmultithreading"
   cat > conftest.$ac_ext <<EOF
-#line 1697 "configure"
+#line 1750 "configure"
 #include "confdefs.h"
 
 #  include <ace/Thread_Manager.h>
@@ -1703,7 +1756,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:1707: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1760: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
       deal_II_ace_remove_ansi="no"
@@ -1719,7 +1772,7 @@ fi
 rm -f conftest*
   CXXFLAGS="-pedantic -Werror -I$withmultithreading"
   cat > conftest.$ac_ext <<EOF
-#line 1723 "configure"
+#line 1776 "configure"
 #include "confdefs.h"
 
 #  include <ace/Thread_Manager.h>
@@ -1729,7 +1782,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:1733: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1786: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
       deal_II_ace_remove_pedantic="no"
@@ -1816,7 +1869,7 @@ done
 
 
   echo $ac_n "checking whether AssertThrow works with debug flags""... $ac_c" 1>&6
-echo "configure:1820: checking whether AssertThrow works with debug flags" >&5
+echo "configure:1873: checking whether AssertThrow works with debug flags" >&5
   ac_ext=C
 # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
 ac_cpp='$CXXCPP $CPPFLAGS'
@@ -1826,7 +1879,7 @@ cross_compiling=$ac_cv_prog_cxx_cross
 
   CXXFLAGS=$CXXFLAGSG
   cat > conftest.$ac_ext <<EOF
-#line 1830 "configure"
+#line 1883 "configure"
 #include "confdefs.h"
 
 #include <exception>
@@ -1905,7 +1958,7 @@ int main() {
     
 ; return 0; }
 EOF
-if { (eval echo configure:1909: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1962: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
        echo "$ac_t"""yes"" 1>&6
@@ -1922,7 +1975,7 @@ fi
 rm -f conftest*
 
   echo $ac_n "checking whether AssertThrow works with optimized flags""... $ac_c" 1>&6
-echo "configure:1926: checking whether AssertThrow works with optimized flags" >&5
+echo "configure:1979: checking whether AssertThrow works with optimized flags" >&5
   ac_ext=C
 # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
 ac_cpp='$CXXCPP $CPPFLAGS'
@@ -1932,7 +1985,7 @@ cross_compiling=$ac_cv_prog_cxx_cross
 
   CXXFLAGS=$CXXFLAGSO
   cat > conftest.$ac_ext <<EOF
-#line 1936 "configure"
+#line 1989 "configure"
 #include "confdefs.h"
 
 #include <exception>
@@ -2011,7 +2064,7 @@ int main() {
     
 ; return 0; }
 EOF
-if { (eval echo configure:2015: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2068: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
        echo "$ac_t"""yes"" 1>&6
@@ -2029,7 +2082,7 @@ rm -f conftest*
 
 
   echo $ac_n "checking for std::vector bug""... $ac_c" 1>&6
-echo "configure:2033: checking for std::vector bug" >&5
+echo "configure:2086: checking for std::vector bug" >&5
   ac_ext=C
 # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
 ac_cpp='$CXXCPP $CPPFLAGS'
@@ -2039,7 +2092,7 @@ cross_compiling=$ac_cv_prog_cxx_cross
 
   CXXFLAGS="$CXXFLAGSG"
   cat > conftest.$ac_ext <<EOF
-#line 2043 "configure"
+#line 2096 "configure"
 #include "confdefs.h"
 
       namespace std {
@@ -2059,7 +2112,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:2063: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2116: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
       echo "$ac_t""no" 1>&6
@@ -2080,7 +2133,7 @@ rm -f conftest*
 
 
   echo $ac_n "checking for std::iterator class""... $ac_c" 1>&6
-echo "configure:2084: checking for std::iterator class" >&5
+echo "configure:2137: checking for std::iterator class" >&5
   ac_ext=C
 # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
 ac_cpp='$CXXCPP $CPPFLAGS'
@@ -2090,7 +2143,7 @@ cross_compiling=$ac_cv_prog_cxx_cross
 
   CXXFLAGS="$CXXFLAGSG"
   cat > conftest.$ac_ext <<EOF
-#line 2094 "configure"
+#line 2147 "configure"
 #include "confdefs.h"
 
 #include <iterator>
@@ -2101,7 +2154,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:2105: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2158: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
       echo "$ac_t""yes" 1>&6
@@ -2121,7 +2174,7 @@ fi
 rm -f conftest*
 
   echo $ac_n "checking for std::i/ostringstream classes""... $ac_c" 1>&6
-echo "configure:2125: checking for std::i/ostringstream classes" >&5
+echo "configure:2178: checking for std::i/ostringstream classes" >&5
   ac_ext=C
 # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
 ac_cpp='$CXXCPP $CPPFLAGS'
@@ -2131,7 +2184,7 @@ cross_compiling=$ac_cv_prog_cxx_cross
 
   CXXFLAGS="$CXXFLAGSG"
   cat > conftest.$ac_ext <<EOF
-#line 2135 "configure"
+#line 2188 "configure"
 #include "confdefs.h"
 
 #include <sstream>
@@ -2143,7 +2196,7 @@ int main() {
     
 ; return 0; }
 EOF
-if { (eval echo configure:2147: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2200: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
       echo "$ac_t""yes" 1>&6
@@ -2163,7 +2216,7 @@ fi
 rm -f conftest*
 
   echo $ac_n "checking for std::numeric_limits classes""... $ac_c" 1>&6
-echo "configure:2167: checking for std::numeric_limits classes" >&5
+echo "configure:2220: checking for std::numeric_limits classes" >&5
   ac_ext=C
 # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
 ac_cpp='$CXXCPP $CPPFLAGS'
@@ -2173,7 +2226,7 @@ cross_compiling=$ac_cv_prog_cxx_cross
 
   CXXFLAGS="$CXXFLAGSG"
   cat > conftest.$ac_ext <<EOF
-#line 2177 "configure"
+#line 2230 "configure"
 #include "confdefs.h"
 
 #include <limits>
@@ -2184,7 +2237,7 @@ int main() {
     
 ; return 0; }
 EOF
-if { (eval echo configure:2188: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2241: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
       echo "$ac_t""yes" 1>&6
@@ -2204,7 +2257,7 @@ fi
 rm -f conftest*
 
   echo $ac_n "checking for <ostream> header""... $ac_c" 1>&6
-echo "configure:2208: checking for <ostream> header" >&5
+echo "configure:2261: checking for <ostream> header" >&5
   ac_ext=C
 # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
 ac_cpp='$CXXCPP $CPPFLAGS'
@@ -2214,7 +2267,7 @@ cross_compiling=$ac_cv_prog_cxx_cross
 
   CXXFLAGS="$CXXFLAGSG"
   cat > conftest.$ac_ext <<EOF
-#line 2218 "configure"
+#line 2271 "configure"
 #include "confdefs.h"
 
 #include <ostream>
@@ -2225,7 +2278,7 @@ int main() {
     
 ; return 0; }
 EOF
-if { (eval echo configure:2229: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2282: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
       echo "$ac_t""yes" 1>&6
@@ -2245,7 +2298,7 @@ fi
 rm -f conftest*
 
   echo $ac_n "checking for <iosfwd> header""... $ac_c" 1>&6
-echo "configure:2249: checking for <iosfwd> header" >&5
+echo "configure:2302: checking for <iosfwd> header" >&5
   ac_ext=C
 # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
 ac_cpp='$CXXCPP $CPPFLAGS'
@@ -2255,7 +2308,7 @@ cross_compiling=$ac_cv_prog_cxx_cross
 
   CXXFLAGS="$CXXFLAGSG"
   cat > conftest.$ac_ext <<EOF
-#line 2259 "configure"
+#line 2312 "configure"
 #include "confdefs.h"
 
 #include <iosfwd>
@@ -2266,7 +2319,7 @@ int main() {
     
 ; return 0; }
 EOF
-if { (eval echo configure:2270: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2323: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
       echo "$ac_t""yes" 1>&6
@@ -2290,7 +2343,7 @@ rm -f conftest*
 
 
   echo $ac_n "checking whether lrand48 needs to be declared with -ansi""... $ac_c" 1>&6
-echo "configure:2294: checking whether lrand48 needs to be declared with -ansi" >&5
+echo "configure:2347: checking whether lrand48 needs to be declared with -ansi" >&5
   ac_ext=C
 # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
 ac_cpp='$CXXCPP $CPPFLAGS'
@@ -2300,7 +2353,7 @@ cross_compiling=$ac_cv_prog_cxx_cross
 
   CXXFLAGS="$CXXFLAGSG"
   cat > conftest.$ac_ext <<EOF
-#line 2304 "configure"
+#line 2357 "configure"
 #include "confdefs.h"
 
 #include <vector>
@@ -2316,7 +2369,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:2320: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2373: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
       echo "$ac_t""no" 1>&6
@@ -2337,7 +2390,7 @@ rm -f conftest*
 
 
   echo $ac_n "checking whether getrusage is properly declared""... $ac_c" 1>&6
-echo "configure:2341: checking whether getrusage is properly declared" >&5
+echo "configure:2394: checking whether getrusage is properly declared" >&5
   ac_ext=C
 # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
 ac_cpp='$CXXCPP $CPPFLAGS'
@@ -2346,7 +2399,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
 cross_compiling=$ac_cv_prog_cxx_cross
 
   cat > conftest.$ac_ext <<EOF
-#line 2350 "configure"
+#line 2403 "configure"
 #include "confdefs.h"
 
 #include <sys/resource.h>
@@ -2358,7 +2411,7 @@ int main() {
     
 ; return 0; }
 EOF
-if { (eval echo configure:2362: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2415: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
        echo "$ac_t"""yes"" 1>&6
@@ -2376,7 +2429,7 @@ fi
 rm -f conftest*
 
     echo $ac_n "checking whether isnan is declared with debug flags""... $ac_c" 1>&6
-echo "configure:2380: checking whether isnan is declared with debug flags" >&5
+echo "configure:2433: checking whether isnan is declared with debug flags" >&5
   ac_ext=C
 # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
 ac_cpp='$CXXCPP $CPPFLAGS'
@@ -2387,7 +2440,7 @@ cross_compiling=$ac_cv_prog_cxx_cross
   CXXFLAGS=$CXXFLAGSG
   deal_II_isnan_flag=""
   cat > conftest.$ac_ext <<EOF
-#line 2391 "configure"
+#line 2444 "configure"
 #include "confdefs.h"
 
 #include <cmath>
@@ -2399,7 +2452,7 @@ int main() {
     
 ; return 0; }
 EOF
-if { (eval echo configure:2403: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2456: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
        echo "$ac_t"""yes"" 1>&6
@@ -2415,7 +2468,7 @@ rm -f conftest*
 
   if test "x$deal_II_isnan_flag" = "x" ; then
             cat > conftest.$ac_ext <<EOF
-#line 2419 "configure"
+#line 2472 "configure"
 #include "confdefs.h"
 
 #include <cmath>
@@ -2427,7 +2480,7 @@ int main() {
       
 ; return 0; }
 EOF
-if { (eval echo configure:2431: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2484: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
          echo "$ac_t"""yes"" 1>&6
@@ -2447,7 +2500,7 @@ rm -f conftest*
     for testflag in -D_ISOC99_SOURCE -D__EXTENSIONS__ ; do 
       CXXFLAGS="$CXXFLAGSG $testflag"
       cat > conftest.$ac_ext <<EOF
-#line 2451 "configure"
+#line 2504 "configure"
 #include "confdefs.h"
 
 #include <cmath>
@@ -2459,7 +2512,7 @@ int main() {
        
 ; return 0; }
 EOF
-if { (eval echo configure:2463: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2516: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
                          deal_II_isnan_flag="-DHAVE_ISNAN $testflag"
@@ -2472,7 +2525,7 @@ fi
 rm -f conftest*
 
                         cat > conftest.$ac_ext <<EOF
-#line 2476 "configure"
+#line 2529 "configure"
 #include "confdefs.h"
 
 #include <cmath>
@@ -2484,7 +2537,7 @@ int main() {
        
 ; return 0; }
 EOF
-if { (eval echo configure:2488: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2541: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
                          deal_II_isnan_flag="-DHAVE_UNDERSCORE_ISNAN $testflag"
@@ -2506,7 +2559,7 @@ rm -f conftest*
   fi
 
     echo $ac_n "checking whether isnan is declared with optimized flags""... $ac_c" 1>&6
-echo "configure:2510: checking whether isnan is declared with optimized flags" >&5
+echo "configure:2563: checking whether isnan is declared with optimized flags" >&5
   ac_ext=C
 # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
 ac_cpp='$CXXCPP $CPPFLAGS'
@@ -2517,7 +2570,7 @@ cross_compiling=$ac_cv_prog_cxx_cross
   CXXFLAGS=$CXXFLAGSO
   deal_II_isnan_flag=""
   cat > conftest.$ac_ext <<EOF
-#line 2521 "configure"
+#line 2574 "configure"
 #include "confdefs.h"
 
 #include <cmath>
@@ -2529,7 +2582,7 @@ int main() {
     
 ; return 0; }
 EOF
-if { (eval echo configure:2533: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2586: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
        echo "$ac_t"""yes"" 1>&6
@@ -2545,7 +2598,7 @@ rm -f conftest*
 
   if test "x$deal_II_isnan_flag" = "x" ; then
             cat > conftest.$ac_ext <<EOF
-#line 2549 "configure"
+#line 2602 "configure"
 #include "confdefs.h"
 
 #include <cmath>
@@ -2557,7 +2610,7 @@ int main() {
       
 ; return 0; }
 EOF
-if { (eval echo configure:2561: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2614: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
          echo "$ac_t"""yes"" 1>&6
@@ -2577,7 +2630,7 @@ rm -f conftest*
     for testflag in -D_ISOC99_SOURCE -D__EXTENSIONS__ ; do 
       CXXFLAGS="$CXXFLAGSO $testflag"
       cat > conftest.$ac_ext <<EOF
-#line 2581 "configure"
+#line 2634 "configure"
 #include "confdefs.h"
 
 #include <cmath>
@@ -2589,7 +2642,7 @@ int main() {
        
 ; return 0; }
 EOF
-if { (eval echo configure:2593: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2646: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
                          deal_II_isnan_flag="-DHAVE_ISNAN $testflag"
@@ -2602,7 +2655,7 @@ fi
 rm -f conftest*
 
                         cat > conftest.$ac_ext <<EOF
-#line 2606 "configure"
+#line 2659 "configure"
 #include "confdefs.h"
 
 #include <cmath>
@@ -2614,7 +2667,7 @@ int main() {
        
 ; return 0; }
 EOF
-if { (eval echo configure:2618: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2671: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
                          deal_II_isnan_flag="-DHAVE_UNDERSCORE_ISNAN $testflag"
@@ -2645,9 +2698,9 @@ cross_compiling=$ac_cv_prog_cxx_cross
 
   CXXFLAGS=$CXXFLAGSG
   echo $ac_n "checking for rand_r""... $ac_c" 1>&6
-echo "configure:2649: checking for rand_r" >&5
+echo "configure:2702: checking for rand_r" >&5
   cat > conftest.$ac_ext <<EOF
-#line 2651 "configure"
+#line 2704 "configure"
 #include "confdefs.h"
 
 #include <cstdlib>
@@ -2659,7 +2712,7 @@ int i=rand_r(&i);
        
 ; return 0; }
 EOF
-if { (eval echo configure:2663: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2716: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
          echo "$ac_t""found" 1>&6
@@ -2682,12 +2735,12 @@ rm -f conftest*
 for ac_func in gethostname
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2686: checking for $ac_func" >&5
+echo "configure:2739: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2691 "configure"
+#line 2744 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -2713,7 +2766,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:2717: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2770: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -2742,7 +2795,7 @@ done
 # Extract the first word of "f77", so it can be a program name with args.
 set dummy f77; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2746: checking for $ac_word" >&5
+echo "configure:2799: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_F77'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2778,7 +2831,7 @@ if test "x$F77" = "x" ; then
         # Extract the first word of "g77", so it can be a program name with args.
 set dummy g77; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2782: checking for $ac_word" >&5
+echo "configure:2835: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_F77'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2929,7 +2982,7 @@ fi
 # Extract the first word of "perl", so it can be a program name with args.
 set dummy perl; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2933: checking for $ac_word" >&5
+echo "configure:2986: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2967,7 +3020,7 @@ fi
 
 
 echo $ac_n "checking for HSL subroutines""... $ac_c" 1>&6
-echo "configure:2971: checking for HSL subroutines" >&5
+echo "configure:3024: checking for HSL subroutines" >&5
 hsl_subroutines=""
 if test -r contrib/hsl/source/ma27.f ; then
   hsl_subroutines="$hsl_subroutines MA27"
@@ -3032,7 +3085,7 @@ else
 fi
 
 echo $ac_n "checking for kdoc""... $ac_c" 1>&6
-echo "configure:3036: checking for kdoc" >&5
+echo "configure:3089: checking for kdoc" >&5
 if test "$kdocdir" != ${DEAL2_DIR}/contrib/kdoc/bin ; then
   if test -r $kdocdir/kdoc ; then
     echo "$ac_t""found" 1>&6
@@ -3068,7 +3121,7 @@ if test "$docxx" = to-be-determined ; then
   # Extract the first word of ""doc++"", so it can be a program name with args.
 set dummy "doc++"; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3072: checking for $ac_word" >&5
+echo "configure:3125: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_docxx'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3102,7 +3155,7 @@ fi
 
 else
   echo $ac_n "checking for doc++""... $ac_c" 1>&6
-echo "configure:3106: checking for doc++" >&5
+echo "configure:3159: checking for doc++" >&5
   if test -x "$docxx" ; then
     echo "$ac_t""yes" 1>&6
   else
@@ -3116,6 +3169,170 @@ fi
 
 
 
+
+  
+ac_safe=`echo "$TECHOME/lib/tecio.a" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $TECHOME/lib/tecio.a""... $ac_c" 1>&6
+echo "configure:3177: checking for $TECHOME/lib/tecio.a" >&5
+if eval "test \"`echo '$''{'ac_cv_file_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test "$cross_compiling" = yes; then
+    { echo "configure: error: Cannot check for file existence when cross compiling" 1>&2; exit 1; }
+else
+  if test -r $TECHOME/lib/tecio.a; then
+    eval "ac_cv_file_$ac_safe=yes"
+  else
+    eval "ac_cv_file_$ac_safe=no"
+  fi
+fi
+fi
+if eval "test \"`echo '$ac_cv_file_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  TECPLOT_LIBRARY_PATH=$TECHOME/lib/tecio.a
+else
+  echo "$ac_t""no" 1>&6
+
+fi
+
+  
+ac_safe=`echo "$TEC80HOME/lib/tecio.a" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $TEC80HOME/lib/tecio.a""... $ac_c" 1>&6
+echo "configure:3202: checking for $TEC80HOME/lib/tecio.a" >&5
+if eval "test \"`echo '$''{'ac_cv_file_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test "$cross_compiling" = yes; then
+    { echo "configure: error: Cannot check for file existence when cross compiling" 1>&2; exit 1; }
+else
+  if test -r $TEC80HOME/lib/tecio.a; then
+    eval "ac_cv_file_$ac_safe=yes"
+  else
+    eval "ac_cv_file_$ac_safe=no"
+  fi
+fi
+fi
+if eval "test \"`echo '$ac_cv_file_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  TECPLOT_LIBRARY_PATH=$TEC80HOME/lib/tecio.a
+else
+  echo "$ac_t""no" 1>&6
+
+fi
+
+  
+ac_safe=`echo "$TEC90HOME/lib/tecio.a" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $TEC90HOME/lib/tecio.a""... $ac_c" 1>&6
+echo "configure:3227: checking for $TEC90HOME/lib/tecio.a" >&5
+if eval "test \"`echo '$''{'ac_cv_file_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test "$cross_compiling" = yes; then
+    { echo "configure: error: Cannot check for file existence when cross compiling" 1>&2; exit 1; }
+else
+  if test -r $TEC90HOME/lib/tecio.a; then
+    eval "ac_cv_file_$ac_safe=yes"
+  else
+    eval "ac_cv_file_$ac_safe=no"
+  fi
+fi
+fi
+if eval "test \"`echo '$ac_cv_file_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  TECPLOT_LIBRARY_PATH=$TEC90HOME/lib/tecio.a
+else
+  echo "$ac_t""no" 1>&6
+
+fi
+
+  
+  
+ac_safe=`echo "$TECHOME/include/TECIO.h" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $TECHOME/include/TECIO.h""... $ac_c" 1>&6
+echo "configure:3253: checking for $TECHOME/include/TECIO.h" >&5
+if eval "test \"`echo '$''{'ac_cv_file_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test "$cross_compiling" = yes; then
+    { echo "configure: error: Cannot check for file existence when cross compiling" 1>&2; exit 1; }
+else
+  if test -r $TECHOME/include/TECIO.h; then
+    eval "ac_cv_file_$ac_safe=yes"
+  else
+    eval "ac_cv_file_$ac_safe=no"
+  fi
+fi
+fi
+if eval "test \"`echo '$ac_cv_file_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  TECPLOT_INCLUDE_PATH=$TECHOME/include
+else
+  echo "$ac_t""no" 1>&6
+
+fi
+
+  
+ac_safe=`echo "$TEC80HOME/include/TECIO.h" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $TEC80HOME/include/TECIO.h""... $ac_c" 1>&6
+echo "configure:3278: checking for $TEC80HOME/include/TECIO.h" >&5
+if eval "test \"`echo '$''{'ac_cv_file_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test "$cross_compiling" = yes; then
+    { echo "configure: error: Cannot check for file existence when cross compiling" 1>&2; exit 1; }
+else
+  if test -r $TEC80HOME/include/TECIO.h; then
+    eval "ac_cv_file_$ac_safe=yes"
+  else
+    eval "ac_cv_file_$ac_safe=no"
+  fi
+fi
+fi
+if eval "test \"`echo '$ac_cv_file_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  TECPLOT_INCLUDE_PATH=$TEC80HOME/include
+else
+  echo "$ac_t""no" 1>&6
+
+fi
+
+  
+ac_safe=`echo "$TEC90HOME/include/TECIO.h" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $TEC90HOME/include/TECIO.h""... $ac_c" 1>&6
+echo "configure:3303: checking for $TEC90HOME/include/TECIO.h" >&5
+if eval "test \"`echo '$''{'ac_cv_file_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test "$cross_compiling" = yes; then
+    { echo "configure: error: Cannot check for file existence when cross compiling" 1>&2; exit 1; }
+else
+  if test -r $TEC90HOME/include/TECIO.h; then
+    eval "ac_cv_file_$ac_safe=yes"
+  else
+    eval "ac_cv_file_$ac_safe=no"
+  fi
+fi
+fi
+if eval "test \"`echo '$ac_cv_file_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  TECPLOT_INCLUDE_PATH=$TEC90HOME/include
+else
+  echo "$ac_t""no" 1>&6
+
+fi
+
+  
+  if test -r $TECPLOT_LIBRARY_PATH -a -r $TECPLOT_INCLUDE_PATH/TECIO.h ; then
+    cat >> confdefs.h <<\EOF
+#define DEAL_II_HAVE_TECPLOT 1
+EOF
+
+  fi
+
+
+
+
+
 ac_ext=C
 # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
 ac_cpp='$CXXCPP $CPPFLAGS'
@@ -3125,16 +3342,16 @@ cross_compiling=$ac_cv_prog_cxx_cross
 
 CXXFLAGS="$CXXFLAGSG"
 echo $ac_n "checking for consistency of CXXFLAGSG flags""... $ac_c" 1>&6
-echo "configure:3129: checking for consistency of CXXFLAGSG flags" >&5
+echo "configure:3346: checking for consistency of CXXFLAGSG flags" >&5
 cat > conftest.$ac_ext <<EOF
-#line 3131 "configure"
+#line 3348 "configure"
 #include "confdefs.h"
 
 int main() {
 ;
 ; return 0; }
 EOF
-if { (eval echo configure:3138: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3355: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
     echo "$ac_t""yes" 1>&6
@@ -3152,16 +3369,16 @@ rm -f conftest*
 
 CXXFLAGS="$CXXFLAGSO"
 echo $ac_n "checking for consistency of CXXFLAGSO flags""... $ac_c" 1>&6
-echo "configure:3156: checking for consistency of CXXFLAGSO flags" >&5
+echo "configure:3373: checking for consistency of CXXFLAGSO flags" >&5
 cat > conftest.$ac_ext <<EOF
-#line 3158 "configure"
+#line 3375 "configure"
 #include "confdefs.h"
 
 int main() {
 ;
 ; return 0; }
 EOF
-if { (eval echo configure:3165: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3382: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
     echo "$ac_t""yes" 1>&6
@@ -3314,6 +3531,8 @@ s%@enablemultigrid@%$enablemultigrid%g
 s%@kdocdir@%$kdocdir%g
 s%@kdocversion@%$kdocversion%g
 s%@docxx@%$docxx%g
+s%@TECPLOT_LIBRARY_PATH@%$TECPLOT_LIBRARY_PATH%g
+s%@TECPLOT_INCLUDE_PATH@%$TECPLOT_INCLUDE_PATH%g
 s%@subdirs@%$subdirs%g
 
 CEOF
index d3579fbe62b86cacdf1acfb7b7532b909cca026c..b811cbdd75c422e628d8723995edb0dc61bc9e62 100644 (file)
@@ -956,6 +956,13 @@ AC_SUBST(docxx)
 
 
 
+dnl    Find the Tecplot libraries and headers if available
+dnl
+DEAL_II_CONFIGURE_TECPLOT
+
+
+
+
 dnl -------------------------------------------------------------
 dnl Last check: test whether CXXFLAGS and F77FLAGS are ok
 dnl -------------------------------------------------------------
index ea6944d8c196a5df351eea07c1feb2a8ef82b1a2..e7d96bac5fb8d3b56d16a6280ae4d463921a7e82 100644 (file)
@@ -50,6 +50,8 @@ makefiles.html: Makefile makefiles.1.html $D/common/Make.global_options makefile
        @echo '<li><code>ACE_ROOT=$(ACE_ROOT)</code>' >> $@
        @echo '<li><code>lib-ACE=$(lib-ACE)</code>' >> $@
        @echo '<li><code>with-multithreading=$(with-multithreading)</code>' >> $@
+       @echo '<li><code>TECIO_INCLUDE=$(TECIO_INCLUDE)</code>' >> $@
+       @echo '<li><code>TECIO_LIBRARY=$(TECIO_LIBRARY)</code>' >> $@
        @cat makefiles.2.html >> $@
 
 
index 65f055dde85d185d912a650c76477e8c42f34842..246d7e2d7636c5649205c9dbf205ff4e77b74427 100644 (file)
       <dt> <code>LIBS</code> </dt>
       <dd> <p>
            Additional libraries to be linked in, such as Fortran
-           support or the ACE library when multithreading is enabled.
+           support, the ACE library when multithreading is enabled, or
+           Tecplot libraries when binary output is available.
            </p>
       </dd>
 
     your program shall use multithreading or not. 
     </p>
 
-    </ul>
 
+    <li><h4>Variables associated with Tecplot binary support</h4>
+    <p>
+    If ./configure, detects a valid Tecplot API installation $(INCLUDE) and
+    $(LIBS) are augmented by the Tecplot API include and library paths, and
+    the following symbols are meaningful:
+
+    <dl>
+      <dt> <code>TECIO_INCLUDE</code> </dt>
+      <dd> <p>
+           Path to the Tecplot API header files as found by ./configure
+           </p>
+      </dd>
+
+
+      <dt> <code>TECIO_LIBRARY</code> </dt>
+      <dd> <p>
+           Path to the Tecplot API library
+           </p>
+      </dd>
+    </dl>
+
+    </ul>
 
 
     <a name="values">
index 80e3a6dee9852d54cd067e1c1ce5c461c6afe4bf..0ca59afb35aa8a6f9208d650287d59bc35a8699a 100644 (file)
@@ -47,14 +47,28 @@ documentation, etc</a>.
   <code class="member">n</code> to be compliant wth the new class <code
   class="class">PolynomialSpace</code>.
   <br>
-  GK 2002/02/11)
+  (GK 2002/02/11)
   </p>
 
   <li> <p> New: The class <code class="class">PolynomialSpace</code>
   implements the space of polynomials at most a certain degree in
   arbitrary space dimensions.
   <br>
-  GK 2002/02/11)
+  (GK 2002/02/11)
+  </p>
+
+  <li> <p> New: The function <code class="class">DataOutBase</code>::
+  <code class="member">write_tecplot_binary</code> has been added.  This
+  function will write Tecplot binary files if the Tecplot API is detected
+  by ./configure.  To use this feature be sure that the environment
+  variable TECHOME points to a valid Tecplot installation and that the files
+  $TECHOME/include/TECIO.h and $TECHOME/lib/tecio.a exist.  The name of the
+  file to be written is specified through the <code class="class">DataOutBase</code>
+  ::<code class="member">TecplotFlags</code>.
+  <code class="member">tecplot_binary_file_name</code> variable. If the API is not
+  available this code simply calls the existing ASCII output function.
+  <br>
+  (BK 2002/02/11)
   </p>
 
 <ol>
@@ -83,7 +97,7 @@ documentation, etc</a>.
   <li> <p> New: Finite element family with complete polynomial spaces
   for discontinuous Galerkin: <code class="class">FE_DGP</code>
   <br>
-  GK 2002/02/11)
+  (GK 2002/02/11)
   </p>
 
 <ol>
index 22afc127ec7d4a2d917c4f1c9c9ec429ac8d1040..e04fee756eb0afbcf5d6b9a37a9d7dac813f1991 100644 (file)
 
     <dir>
     <dl>
+      <dt>
+          <strong>2002/02/11: New support for Tecplot binary output</strong>
+      </dt>
+      <dd>
+          Benjamin Shelton Kirk contributed binary
+          <a href="http://www.amtec.com">Tecplot</a> support.
+          This feature can be used to create more efficient data files
+          in the Tecplot FEBLOCK finite element format. For more information
+          look <a href="2002/c-3-3.html" target="body">here</a>.
+         </p>
+      </dd>
+      
       <dt>
           <strong>Changes between version 3.3 and the
          main branch</strong>
index a856643ddb4991ffff396544fb4b71efcad87420..95d5597a142f1482c409cf99e3525b38d9754e86 100644 (file)
            GNUPLOT, 
           <a href="http://www-xdiv.lanl.gov/XCM/gmv/" target="_top">GMV
                                      (general mesh viewer)</a>, 
-          <a href="http://www.amtec.com" target="_top">Tecplot</a>, 
+          <a href="http://www.amtec.com" target="_top">Tecplot</a> (ASCII and binary)
            <a href="http://www.kitware.com/vtk.html"
                  target="_top">Visualization Toolkit (Vtk)</a>,
           <a href="http://www.avs.com" target="_top">AVS Explorer</a>,
       include these functions, see
       <a href="external-libs/hsl.html" target="body">this page</a>.
       </p>
+      
+      <li>
+      <p>
+      Deal.II supports writing <a href="http://www.amtec.com">Tecplot</a>
+      binary files directly. For this feature to work properly be sure that the
+      environment variable TECHOME points to a valid Tecplot installation and that
+      the files $TECHOME/include/TECIO.h and $TECHOME/lib/tecio.a exist.
+      </p>
     </ul>
     </p>
 

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.