SundanceFieldWriter.hpp
Go to the documentation of this file.
00001 /* @HEADER@ */
00002 // ************************************************************************
00003 // 
00004 //                             Sundance
00005 //                 Copyright 2011 Sandia Corporation
00006 // 
00007 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
00008 // the U.S. Government retains certain rights in this software.
00009 //
00010 // Redistribution and use in source and binary forms, with or without
00011 // modification, are permitted provided that the following conditions are
00012 // met:
00013 //
00014 // 1. Redistributions of source code must retain the above copyright
00015 // notice, this list of conditions and the following disclaimer.
00016 //
00017 // 2. Redistributions in binary form must reproduce the above copyright
00018 // notice, this list of conditions and the following disclaimer in the
00019 // documentation and/or other materials provided with the distribution.
00020 //
00021 // 3. Neither the name of the Corporation nor the names of the
00022 // contributors may be used to endorse or promote products derived from
00023 // this software without specific prior written permission.
00024 //
00025 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
00026 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00027 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00028 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
00029 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00030 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00031 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00032 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00033 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00034 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00035 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00036 //
00037 // Questions? Contact Kevin Long (kevin.long@ttu.edu)
00038 // 
00039 
00040 /* @HEADER@ */
00041 
00042 #ifndef SUNDANCE_FIELDWRITER_H
00043 #define SUNDANCE_FIELDWRITER_H
00044 
00045 #include "SundanceDefs.hpp"
00046 #include "SundanceFieldWriterBase.hpp"
00047 #include "PlayaHandle.hpp"
00048 
00049 namespace Sundance
00050 {
00051   /**
00052    * FieldWriter is the user level object for writing fields and meshes
00053    * to output stream. 
00054    *
00055    * <h4> Example: </h4> Write fields u0 and w0 to a VTK file "results.vtu"
00056    * \code
00057    * FieldWriter vtkWriter = new VTKWriter("results");
00058    * vtkWriter.addField(u0);
00059    * vtkWriter.addField(w0);
00060    * vtkWriter.write();
00061    * \endcode
00062    *
00063    * <h4> Example: </h4> Write verbose mesh information to cout
00064    * \code
00065    * FieldWriter writer = new VerboseFieldWriter();
00066    * writer.addMesh(mesh);
00067    * writer.write();
00068    * \endcode
00069    */
00070   class FieldWriter : public Playa::Handle<FieldWriterBase>
00071   {
00072   public:
00073     /* Boilerplate handle ctors */
00074     HANDLE_CTORS(FieldWriter, FieldWriterBase);
00075 
00076     /** add a mesh to the list of things to be written */
00077     void addMesh(const Mesh& mesh) const ;
00078 
00079     /** add a field, tagging it with the given std::string as a name */
00080     void addField(const std::string& name, 
00081       const Playa::Handle<FieldBase>& field) ;
00082 
00083     /** set the numerical value to be written at cells on which
00084      * a field is undefined. Default value is 0.0. */
00085     void setUndefinedValue(const double& x);
00086 
00087     /** 
00088      * Tell the writer to pretend that it is running as one of nProc processes
00089      * with the given rank. This is used when partitioning meshes in serial.
00090      */
00091     void impersonateParallelProc(int nProc, int rank)
00092       {
00093         ptr()->impersonateParallelProc(nProc, rank);
00094       }
00095     
00096     
00097 
00098     /** write to stream */
00099     void write() const ;
00100   };
00101 }
00102 
00103 #endif

Site Contact