1#ifndef DUNE_FEM_DATAOUTPUT_HH 
    2#define DUNE_FEM_DATAOUTPUT_HH 
   15#define USE_VTKWRITER 1 
   18#include <dune/common/hybridutilities.hh> 
   21#include <dune/fem/common/utility.hh> 
   22#include <dune/fem/function/adaptivefunction.hh> 
   23#include <dune/fem/gridpart/adaptiveleafgridpart.hh> 
   24#include <dune/fem/io/file/iointerface.hh> 
   25#include <dune/fem/io/file/iotuple.hh> 
   26#include <dune/fem/io/file/vtkio.hh> 
   27#include <dune/fem/io/parameter.hh> 
   28#include <dune/fem/operator/projection/vtxprojection.hh> 
   29#include <dune/fem/quadrature/cachingquadrature.hh> 
   30#include <dune/fem/solver/timeprovider.hh> 
   31#include <dune/fem/space/common/loadbalancer.hh> 
   32#include <dune/fem/space/common/interpolate.hh> 
   33#include <dune/fem/gridpart/adaptiveleafgridpart.hh> 
   34#include <dune/fem/space/lagrange.hh> 
   36#ifndef ENABLE_VTXPROJECTION 
   37#define ENABLE_VTXPROJECTION 1 
   41#include <dune/fem/io/file/vtkio.hh> 
   42#if ENABLE_VTXPROJECTION 
   43#include <dune/fem/operator/projection/vtxprojection.hh> 
   48#define USE_GRAPE HAVE_GRAPE 
   52#include <dune/grid/io/visual/grapedatadisplay.hh> 
   71    : 
public LocalParameter< DataOutputParameters, DataOutputParameters >
 
   75      const std::string keyPrefix_;
 
   76      ParameterReader parameter_;
 
   79      explicit DataOutputParameters ( std::string keyPrefix, 
const ParameterReader ¶meter = Parameter::container() )
 
   80        : keyPrefix_( std::move( keyPrefix ) ), parameter_( parameter )
 
   84        : keyPrefix_( 
"fem.io." ), parameter_( parameter )
 
   88      virtual std::string 
path()
 const 
   90        return parameter().getValue< std::string >( keyPrefix_ + 
"path", 
"./" );
 
   93      virtual std::string absolutePath ()
 const 
   95        std::string absPath = parameter().getValue< std::string >( 
"fem.prefix", 
"." ) + 
"/";
 
   96        const std::string relPath = 
path();
 
  105        return parameter().getValue< std::string >( keyPrefix_ + 
"datafileprefix", 
"" );
 
  111        static const std::string formatTable[]
 
  112          = { 
"vtk-cell", 
"vtk-vertex", 
"sub-vtk-cell", 
"binary" , 
"gnuplot" , 
"none" };
 
  113        int format = parameter().getEnum( keyPrefix_ + 
"outputformat", formatTable, 0 );
 
  117      virtual bool conformingoutput ()
 const 
  119        return parameter().getValue< 
bool >( keyPrefix_ + 
"conforming", false );
 
  126        return (parameter().getValue( keyPrefix_ + 
"grapedisplay", 0 ) == 1);
 
  135        return parameter().getValue< 
double >( keyPrefix_ + 
"savestep", 0 );
 
  141        return parameter().getValue< 
int >( keyPrefix_ + 
"savecount", 0 );
 
  147        return parameter().getValue< 
int >( keyPrefix_ + 
"subsamplinglevel", 1 );
 
  182      const ParameterReader ¶meter () const noexcept { 
return parameter_; }
 
  194    template< 
class Gr
idImp, 
class DataImp >
 
  201      template< 
class VTKIOType >
 
  204        virtual ~VTKListEntry ()
 
  206        virtual void add ( VTKIOType & ) 
const = 0;
 
  213#if ENABLE_VTXPROJECTION 
  214      template< 
class VTKIOType, 
class DFType >
 
  217      template< 
class VTKOut >
 
  218      struct VTKOutputerLagrange;
 
  221      template< 
class VTKOut >
 
  222      struct VTKOutputerDG;
 
  225      template< 
class Gr
idPartType >
 
  226      class GnuplotOutputer;
 
  230        FileWriter ( std::string name )
 
  234            std::cout << 
"could not write file: " << name << std::endl;
 
  237        void operator() ( 
const std::string &s ) { file_ << s << std::endl; }
 
  246        PVDWriter ( std::string name )
 
  249          file_ << 
"<?xml version=\"1.0\"?>" << std::endl;
 
  250          file_ << 
"<VTKFile type=\"Collection\" version=\"0.1\" byte_order=\"LittleEndian\">" << std::endl;
 
  251          file_ << 
"  <Collection>" << std::endl;
 
  256          file_ << 
"  </Collection>" << std::endl;
 
  257          file_ << 
"</VTKFile>" << std::endl;
 
  260        void operator() ( 
double sequenceStamp, std::string filename )
 
  265          auto pos = filename.find_last_of( 
'/' );
 
  266          if( pos != filename.npos )
 
  267            filename = filename.substr( pos+1, filename.npos );
 
  268          static_cast< FileWriter & 
>( *this )( 
"    <DataSet timestep=\"" + std::to_string( sequenceStamp ) + 
"\" group=\"\" part=\"0\" file=\"" + filename + 
"\"/>" );
 
  276      enum OutputFormat { vtk = 0, vtkvtx = 1, subvtk = 2 , binary = 3, gnuplot = 4, none = 5 };
 
  302      DataOutput ( 
const GridType &grid, 
OutPutDataType &data, 
const ParameterReader ¶meter = Parameter::container() )
 
  316        consistentSaveStep( tp );
 
  334      void consistentSaveStep ( 
const TimeProviderBase &tp ) 
const;
 
  341        consistentSaveStep( tp );
 
  343        const double saveTimeEps = 2*std::numeric_limits< double >::epsilon()*saveTime_;
 
  344        const bool writeStep  = (saveStep_ > 0) && (tp.
time() - saveTime_ >= -saveTimeEps);
 
  345        const bool writeCount = (saveCount_ > 0) && (writeCalls_ % saveCount_ == 0);
 
  346        return param_->willWrite( 
writeStep || writeCount );
 
  352        return param_->willWrite( (saveCount_ > 0) && (writeCalls_ % saveCount_ == 0) );
 
  358      void write( 
const std::string& outstring )
 const 
  396      void writeData ( 
double sequenceStamp, 
const std::string &outstring ) 
const;
 
  413      const std::string &
path ()
 const 
  437      auto getGridPart()
 const 
  439        static constexpr bool isNotEmpty = std::tuple_size< DataImp >::value > 0;
 
  440        return getGridPart( std::integral_constant< bool, isNotEmpty > () );
 
  443      auto getGridPart( std::integral_constant< bool, false > )
 const 
  445        typedef Dune::Fem::LeafGridPart< GridType > GridPartType;
 
  446        return GridPartType( 
const_cast<GridType&
> (
grid_) );
 
  449      auto getGridPart( std::integral_constant< bool, true > )
 const 
  451        return std::get< 0 >( data_ )->gridPart();
 
  455      std::string writeVTKOutput () 
const;
 
  458      std::string writeGnuPlotOutput () 
const;
 
  474      template< 
class OutputTupleType >
 
  483      std::string datapref_;
 
  488      mutable int writeStep_;
 
  490      mutable int writeCalls_;
 
  492      mutable double saveTime_;
 
  498      OutputFormat outputFormat_;
 
  499      bool conformingOutput_;
 
  500      std::unique_ptr< FileWriter > sequence_;
 
  501      std::unique_ptr< PVDWriter > pvd_;
 
  502      std::unique_ptr< const DataOutputParameters > param_;
 
  511#if ENABLE_VTXPROJECTION 
  512    template< 
class Gr
idImp, 
class DataImp >
 
  513    template< 
class VTKIOType, 
class DFType >
 
  515    : 
public VTKListEntry< VTKIOType >
 
  517      typedef typename VTKIOType::GridPartType GridPartType;
 
  524      VTKFunc ( 
const GridPartType &gridPart, 
const DFType &df )
 
  526        space_( 
const_cast< GridPartType & 
>( gridPart ) )
 
  529      virtual void add ( VTKIOType &vtkio )
 const 
  531        func_.reset( 
new NewFunctionType( df_.name()+
"vtx-prj" , space_ ) );
 
  532        if( df_.continuous() )
 
  538          WeightDefault<GridPartType> weight;
 
  539          VtxProjectionImpl::project( df_, *func_, weight );
 
  541        vtkio.addVertexData( *func_ );
 
  544      VTKFunc ( 
const VTKFunc & ) = 
delete;
 
  548      LagrangeSpaceType space_;
 
  549      mutable std::unique_ptr<NewFunctionType> func_;
 
  560    template< 
class Gr
idImp, 
class DataImp >
 
  561    template< 
class VTKOut >
 
  562    struct DataOutput< GridImp, DataImp >::VTKOutputerDG
 
  564      template< 
class... Args >
 
  565      explicit VTKOutputerDG ( 
bool conforming, Args &&... args )
 
  566        : conforming_( 
conforming ), vtkOut_( 
std::forward< Args >( args )... )
 
  569      template< 
typename ...  T >
 
  570      void forEach ( 
const std::tuple< T ... >& data )
 
  574                          auto df( std::get< i >( data ) );
 
  577                            if( conforming_ || ( df->order() == 0 ) )
 
  578                              vtkOut_.addCellData( *df );
 
  580                              vtkOut_.addVertexData( *df );
 
  585      template< 
typename T >
 
  588        std::tuple< T > tup( data );
 
  592      std::string 
write ( 
bool parallel, 
const std::string &name, 
const std::string &
path )
 
  594        return (parallel ? vtkOut_.pwrite( name, 
path, 
"." ) : vtkOut_.write( name ));
 
  609#if ENABLE_VTXPROJECTION 
  610    template< 
class Gr
idImp, 
class DataImp >
 
  611    template< 
class VTKOut >
 
  612    struct DataOutput< GridImp, DataImp >::VTKOutputerLagrange
 
  615      template< 
class... Args >
 
  616      explicit VTKOutputerLagrange ( Args &&... args )
 
  617        : vtkOut_( 
std::forward< Args >( args )... )
 
  620      template< 
typename ...  T >
 
  621      void forEach ( 
const std::tuple< T ... >& data )
 
  625                          auto df( std::get< i >( data ) );
 
  628                            typedef typename std::remove_pointer< 
decltype( df ) >::type DFType;
 
  629                            vec_.emplace_back( 
new VTKFunc< VTKOut, DFType >( vtkOut_.gridPart(), *df ) );
 
  630                            vec_.back()->add( vtkOut_ );
 
  635      template< 
typename T >
 
  638        std::tuple< T > tup( data );
 
  642      std::string 
write ( 
bool parallel, 
const std::string &name, 
const std::string &
path )
 
  644        return (parallel ? vtkOut_.pwrite( name, 
path, 
"." ) : vtkOut_.write( name ));
 
  648      std::vector< std::unique_ptr< VTKListEntry< VTKOut > > > vec_;
 
  658    template< 
class Gr
idImp, 
class DataImp >
 
  659    template< 
class Gr
idPartType >
 
  660    class DataOutput< GridImp, DataImp >::GnuplotOutputer
 
  662      typedef typename GridPartType::template Codim< 0 >::IteratorType::Entity Entity;
 
  664      CachingQuadrature<GridPartType,0> &quad_;
 
  670      GnuplotOutputer ( std::ostream& out,
 
  671                        CachingQuadrature<GridPartType,0> &quad,
 
  674      : out_(out), quad_(quad), i_(i), en_(en)
 
  677      template< 
typename ... T >
 
  678      void forEach ( 
const std::tuple< T ... >& data )
 
  682                          auto df( std::get< i >( data ));
 
  685                            ConstLocalFunction<std::decay_t<
decltype(*df)> > lf(*df);
 
  687                            typedef typename std::remove_pointer< 
decltype( df ) >::type DFType;
 
  688                            typename DFType::FunctionSpaceType::RangeType u;
 
  689                            lf.evaluate( quad_[ i_ ], u );
 
  691                            constexpr int dimRange = DFType::FunctionSpaceType::dimRange;
 
  692                            for( 
auto k = 0; k < dimRange; ++k )
 
  693                              out_ << 
"  " << u[ k ];
 
  699      template< 
typename T >
 
  702        std::tuple< T > tup( data );
 
  712    template< 
class Gr
idImp, 
class DataImp >
 
  715                     std::unique_ptr< const DataOutputParameters > parameters )
 
  723      outputFormat_(vtkvtx),
 
  724      conformingOutput_( false ),
 
  725      param_( 
std::move( parameters ) )
 
  727      const bool writeMode = param_->writeMode();
 
  728      path_ = param_->absolutePath();
 
  735      datapref_ += param_->prefix();
 
  737      auto outputFormat = param_->outputformat();
 
  738      switch( outputFormat )
 
  740        case 0: outputFormat_ = vtk; 
break;
 
  741        case 1: outputFormat_ = vtkvtx; 
break;
 
  742        case 2: outputFormat_ = subvtk; 
break;
 
  743        case 3: outputFormat_ = binary; 
break;
 
  744        case 4: outputFormat_ = gnuplot; 
break;
 
  745        case 5: outputFormat_ = none; 
break;
 
  750      conformingOutput_ = param_->conformingoutput();
 
  752      grapeDisplay_ = param_->grapedisplay();
 
  755      saveStep_ = param_->savestep();
 
  756      saveCount_ = param_->savecount();
 
  759      writeStep_ = param_->startcounter();
 
  760      writeCalls_ =  param_->startcall();
 
  761      saveTime_ = param_->startsavetime();
 
  768          sequence_.reset( 
new FileWriter( path_ + 
"/" + datapref_ + 
".series" ) );
 
  769          pvd_.reset( 
new PVDWriter( path_ + 
"/" + datapref_ + 
".pvd" ) );
 
  773        Parameter::write(
"parameter.log");
 
  778    template< 
class Gr
idImp, 
class DataImp >
 
  785        const auto oldTime = tp.
time() - saveStep_;
 
  786        while( saveTime_ <= oldTime )
 
  789          saveTime_ += saveStep_;
 
  795    template< 
class Gr
idImp, 
class DataImp >
 
  797      ::writeData ( 
double sequenceStamp, 
const std::string &outstring )
 const 
  799      std::string filename;
 
  802      switch( outputFormat_ )
 
  806        case binary: writeBinaryData( sequenceStamp ); 
break;
 
  812          filename = writeVTKOutput();
 
  817        case gnuplot : filename = writeGnuPlotOutput(); 
break;
 
  822      if( outputFormat_ != 
none )
 
  825          (*sequence_)( std::to_string( writeStep_ ) + 
" " + filename + 
" " + std::to_string( sequenceStamp ) + outstring );
 
  828          (*pvd_)( sequenceStamp, filename );
 
  834          std::cout << myClassName() << 
"[" << grid_.comm().rank() << 
"]::write data" 
  835                    << 
" writestep=" << writeStep_
 
  836                    << 
" sequenceStamp=" << sequenceStamp
 
  842      saveTime_ += saveStep_;
 
  847    template< 
class Gr
idImp, 
class DataImp >
 
  850      std::string filename;
 
  852      const bool vertexData = (outputFormat_ == vtkvtx);
 
  855      const bool parallel = (grid_.comm().size() > 1);
 
  858      auto name = generateFilename( (parallel ? datapref_ : path_ + 
"/" + datapref_ ), writeStep_ );
 
  861      const auto& gridPart = getGridPart();
 
  862      typedef typename std::decay< 
decltype( gridPart ) >::type GridPartType;
 
  866#if ENABLE_VTXPROJECTION 
  868        VTKOutputerLagrange< VTKIO< GridPartType > > io( gridPart, VTK::conforming, param_->parameter() );
 
  874        filename = io.write( parallel, name, path_ );
 
  877      else if ( outputFormat_ == vtk )
 
  880        VTKOutputerDG< VTKIO< GridPartType > > io( conformingOutput_, gridPart, conformingOutput_ ? VTK::conforming : VTK::nonconforming, param_->parameter() );
 
  886        filename = io.write( parallel, name, path_ );
 
  888      else if ( outputFormat_ == subvtk )
 
  891        VTKOutputerDG< SubsamplingVTKIO < GridPartType > > io( conformingOutput_, gridPart, 
static_cast< unsigned int >( param_->subsamplingLevel() ), param_->parameter() );
 
  897        filename = io.write( parallel, name, path_ );
 
  904    template< 
class Gr
idImp, 
class DataImp >
 
  905    inline std::string DataOutput< GridImp, DataImp >::writeGnuPlotOutput ()
 const 
  908      auto name = generateFilename( path_ + 
"/" + datapref_, writeStep_ );
 
  910      std::ofstream gnuout(name.c_str());
 
  911      gnuout << std::scientific << std::setprecision( 16 );
 
  914      const auto& gridPart = getGridPart();
 
  915      typedef typename std::decay< 
decltype( gridPart ) >::type GridPartType;
 
  916      for( 
const auto& entity : elements( gridPart ) )
 
  918        CachingQuadrature< GridPartType, 0 > quad( entity, 1 );
 
  919        for( 
decltype(quad.nop()) i = 0; i < quad.nop(); ++i )
 
  921          const auto x = entity.geometry().global( quad.point( i ) );
 
  922          for( 
auto k = 0; k < x.dimension; ++k )
 
  923            gnuout << (k > 0 ? 
" " : 
"") << x[ k ];
 
  924          GnuplotOutputer< GridPartType > io( gnuout, quad, i, entity );
 
  934    template< 
class Gr
idImp, 
class DataImp >
 
  935    template< 
class OutputTupleType >
 
  938      GrapeDataDisplay<GridType> grape(grid_);
 
  939      IOTuple<OutPutDataType>::addToDisplay(grape,data);
 
  943    template< 
class Gr
idImp, 
class DataImp >
 
  944    template< 
class OutputTupleType >
 
  947      std::cerr << 
"WARNING: HAVE_GRAPE == 0, but grapeDisplay == true, recompile with grape support for online display!" << std::endl;
 
  961        -> std::enable_if_t< std::is_reference< DF >::value && std::is_base_of< Fem::HasLocalFunction, std::decay_t< DF > >::value,
 
  962                             std::tuple< std::decay_t< DF > * > >
 
  964        return std::make_tuple( &df );
 
  974      template< 
class... Args >
 
  975      inline static auto makeIOTuple ( Args &&... args )
 
  977        return std::tuple_cat( makeSingleIOTuple( std::forward< Args >( args ), PriorityTag< 42 >() )... );
 
  985      inline static auto getSingleDataOutputParameters ( std::unique_ptr< const DataOutputParameters > parameters )
 
  987        return std::make_tuple( std::move( parameters ) );
 
  990      inline static auto getSingleDataOutputParameters ( 
const DataOutputParameters ¶meters )
 
  992        return std::make_tuple( std::unique_ptr< const DataOutputParameters >( parameters.clone() ) );
 
  995      inline static auto getSingleDataOutputParameters ( 
const ParameterReader ¶meter )
 
  997        return std::make_tuple( std::make_unique< const DataOutputParameters >( parameter ) );
 
 1000      template< 
class Arg >
 
 1001      inline static auto getSingleDataOutputParameters ( Arg &&arg, PriorityTag< 1 > )
 
 1002        -> 
decltype( getSingleDataOutputParameters( std::declval< Arg >() ) )
 
 1004        return getSingleDataOutputParameters( std::forward< Arg >( arg ) );
 
 1007      template< 
class Arg >
 
 1008      inline static std::tuple<> getSingleDataOutputParameters ( Arg &&arg, PriorityTag< 0 > )
 
 1013      template< 
class... Args >
 
 1014      inline static auto getDataOutputParametersTuple ( Args &&... args )
 
 1015        -> 
decltype( std::tuple_cat( getSingleDataOutputParameters( std::declval< Args >(), PriorityTag< 42 >() )... ) )
 
 1017        return std::tuple_cat( getSingleDataOutputParameters( std::forward< Args >( args ), PriorityTag< 42 >() )... );
 
 1020      template< 
class... Args >
 
 1021      inline static auto getDataOutputParameters ( Args &&... args )
 
 1022        -> std::enable_if_t< (std::tuple_size< decltype( getDataOutputParametersTuple( std::declval< Args >()... ) ) >::value == 0), std::unique_ptr< const DataOutputParameters > >
 
 1024        return std::make_unique< const DataOutputParameters >( Parameter::container() );
 
 1027      template< 
class... Args >
 
 1028      inline static auto getDataOutputParameters ( Args &&... args )
 
 1029        -> std::enable_if_t< (std::tuple_size< decltype( getDataOutputParametersTuple( std::declval< Args >()... ) ) >::value > 0), std::unique_ptr< const DataOutputParameters > >
 
 1031        static_assert( (std::tuple_size< decltype( Impl::getDataOutputParametersTuple( std::declval< Args >()... ) ) >::value == 1), 
"Cannot pass multiple DataOutputParameters to DataOutput" );
 
 1032        return std::get< 0 >( getDataOutputParametersTuple( std::forward< Args >( args )... ) );
 
 1040      template< 
class Arg, 
class = 
void >
 
 1041      struct ValidDataOutputArgument
 
 1042        : 
public std::false_type
 
 1045      template< 
class DF >
 
 1046      struct ValidDataOutputArgument< DF, 
std::enable_if_t< std::is_base_of< Fem::HasLocalFunction, std::decay_t< DF > >::value > >
 
 1047        : 
public std::true_type
 
 1050      template< 
class Arg >
 
 1051      struct ValidDataOutputArgument< Arg, 
void_t< decltype( getSingleDataOutputParameters( 
std::declval< Arg >() ) ) > >
 
 1052        : 
public std::true_type
 
 1062    template< 
class Grid, 
class... Args, std::enable_if_t< Std::And( Impl::ValidDataOutputArgument< Args >::value... ), 
int > = 0 >
 
 1063    inline static auto dataOutput ( 
const Grid &grid, Args &&... args )
 
 1065      auto ioTuple = Impl::makeIOTuple( std::forward< Args >( args )... );
 
 1066      auto parameters = Impl::getDataOutputParameters( std::forward< Args >( args )... );
 
 1067      return DataOutput< Grid, decltype( ioTuple ) >( grid, ioTuple, std::move( parameters ) );
 
 1070    template< 
class Grid, 
class... Args, std::enable_if_t< Std::And( Impl::ValidDataOutputArgument< Args >::value... ), 
int > = 0 >
 
 1071    inline static auto dataOutput ( 
const Grid &grid, 
const TimeProviderBase &tp, Args &&... args )
 
 1073      auto ioTuple = Impl::makeIOTuple( std::forward< Args >( args )... );
 
 1074      auto parameters = Impl::getDataOutputParameters( std::forward< Args >( args )... );
 
 1075      return DataOutput< Grid, decltype( ioTuple ) >( grid, ioTuple, tp, std::move( parameters ) );
 
Definition: adaptivefunction.hh:48
 
Implementation of the Dune::Fem::IOInterface. This class manages data output. Available output format...
Definition: dataoutput.hh:197
 
DataOutput(const GridType &grid, OutPutDataType &data, const TimeProviderBase &tp, const DataOutputParameters ¶meter)
Constructor creating data writer.
Definition: dataoutput.hh:326
 
const std::string & path() const
return output path name
Definition: dataoutput.hh:413
 
void write() const
write given data to disc, evaluates parameter savecount
Definition: dataoutput.hh:366
 
int writeCalls() const
return write calls
Definition: dataoutput.hh:425
 
DataOutput(const GridType &grid, OutPutDataType &data, const TimeProviderBase &tp, std::unique_ptr< const DataOutputParameters > parameters)
Constructor creating data writer.
Definition: dataoutput.hh:313
 
GridImp GridType
type of grid used
Definition: dataoutput.hh:279
 
void writeData(double sequenceStamp) const
write data with a given sequence stamp
Definition: dataoutput.hh:401
 
void write(const std::string &outstring) const
write given data to disc, evaluates parameter savecount
Definition: dataoutput.hh:358
 
void grapeDisplay(OutputTupleType &data) const
display data with grape
Definition: dataoutput.hh:945
 
virtual void display() const
display data with grape
Definition: dataoutput.hh:467
 
DataImp OutPutDataType
type of data tuple
Definition: dataoutput.hh:281
 
int writeStep() const
return write step
Definition: dataoutput.hh:419
 
void writeData(double sequenceStamp, const std::string &outstring) const
write data with a given sequence stamp and outstring
Definition: dataoutput.hh:797
 
virtual bool willWrite(const TimeProviderBase &tp) const
returns true if data will be written on next write call
Definition: dataoutput.hh:338
 
double saveTime() const
return save time
Definition: dataoutput.hh:431
 
void write(const TimeProviderBase &tp, const std::string &outstring) const
write given data to disc, evaluates parameter savecount and savestep
Definition: dataoutput.hh:377
 
virtual bool willWrite() const
returns true if data will be written on next write call
Definition: dataoutput.hh:350
 
virtual const char * myClassName() const
print class name
Definition: dataoutput.hh:407
 
virtual void writeBinaryData(const double) const
write binary data
Definition: dataoutput.hh:461
 
DataOutput(const GridType &grid, OutPutDataType &data, const DataOutputParameters ¶meter)
Constructor creating data output class.
Definition: dataoutput.hh:298
 
const GridType & grid_
type of this class
Definition: dataoutput.hh:478
 
DataOutput(const GridType &grid, OutPutDataType &data, std::unique_ptr< const DataOutputParameters > parameters)
Constructor creating data output class.
Definition: dataoutput.hh:714
 
void write(const TimeProviderBase &tp) const
write given data to disc, evaluates parameter savecount and savestep
Definition: dataoutput.hh:387
 
A vector valued function space.
Definition: functionspace.hh:60
 
IOInterface to write data to hard disk.
Definition: iointerface.hh:156
 
static void createGlobalPath(const CommunicatorType &comm, const std::string &path)
create global path for data output
Definition: iointerface.hh:262
 
static bool verbose()
obtain the cached value for fem.verbose with default verbosity level 2
Definition: parameter.hh:466
 
general base for time providers
Definition: timeprovider.hh:36
 
double time() const
obtain the current time
Definition: timeprovider.hh:94
 
Default exception for dummy implementations.
Definition: exceptions.hh:357
 
@ conforming
Output conforming data.
Definition: common.hh:73
 
typename Impl::voider< Types... >::type void_t
Is void for all valid input types. The workhorse for C++11 SFINAE-techniques.
Definition: typetraits.hh:40
 
static void interpolate(const GridFunction &u, DiscreteFunction &v)
perform native interpolation of a discrete function space
Definition: interpolate.hh:55
 
#define DUNE_THROW(E,...)
Definition: exceptions.hh:314
 
constexpr GeometryType none(unsigned int dim)
Returns a GeometryType representing a singular of dimension dim.
Definition: type.hh:471
 
constexpr void forEach(Range &&range, F &&f)
Range based for loop.
Definition: hybridutilities.hh:257
 
Dune namespace.
Definition: alignedallocator.hh:13
 
Parameter class for Dune::Fem::DataOutput.
Definition: dataoutput.hh:73
 
virtual int outputformat() const
format of output (fem.io.outputformat)
Definition: dataoutput.hh:109
 
virtual int savecount() const
save data every savecount calls to write method (fem.io.savecount)
Definition: dataoutput.hh:139
 
virtual int subsamplingLevel() const
save data every subsamplingLevel (fem.io.subsamplinglevel)
Definition: dataoutput.hh:145
 
virtual int startcounter() const
number for first data file (no parameter available)
Definition: dataoutput.hh:151
 
virtual int startcall() const
number of first call (no parameter available)
Definition: dataoutput.hh:157
 
virtual double startsavetime() const
value of first save time (no parameter available)
Definition: dataoutput.hh:163
 
virtual bool willWrite(bool write) const
Definition: dataoutput.hh:170
 
virtual std::string prefix() const
base of file name for data file (fem.io.datafileprefix)
Definition: dataoutput.hh:103
 
virtual std::string path() const
path where the data is stored (always relative to fem.prefix)
Definition: dataoutput.hh:88
 
virtual double savestep() const
save data every savestep interval (fem.io.savestep)
Definition: dataoutput.hh:133
 
virtual bool writeMode() const
Definition: dataoutput.hh:177
 
virtual bool grapedisplay() const
use online grape display (fem.io.grapedisplay)
Definition: dataoutput.hh:123
 
Helper class for tagging priorities.
Definition: typeutilities.hh:87
 
Helper class for tagging priorities.
Definition: typeutilities.hh:73
 
Utilities for type computations, constraining overloads, ...