Commit d6328b9f authored by Jakub Klinkovský's avatar Jakub Klinkovský
Browse files

Added VTU format to MeshFunction::write, VectorField::write and tnl-view

parent f8199238
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
#include <TNL/Functions/MeshFunctionNormGetter.h>
#include <TNL/Functions/MeshFunctionGnuplotWriter.h>
#include <TNL/Meshes/Writers/VTKWriter.h>
#include <TNL/Meshes/Writers/VTUWriter.h>

#pragma once

@@ -413,6 +414,14 @@ write( const String& fileName,
      else
         writer.writeCellData( getData(), "pointFunctionValues", 1 );
   }
   else if( format == "vtu" ) {
      Meshes::Writers::VTUWriter< Mesh > writer( file );
      writer.template writeEntities< getEntitiesDimension() >( *meshPointer );
      if( MeshFunction::getEntitiesDimension() == 0 )
         writer.writePointData( getData(), "cellFunctionValues", 1 );
      else
         writer.writeCellData( getData(), "pointFunctionValues", 1 );
   }
   else if( format == "gnuplot" )
      return MeshFunctionGnuplotWriter< MeshFunction >::write( *this, file );
   else {
+9 −0
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
#include <TNL/Functions/MeshFunctionNormGetter.h>
#include <TNL/Functions/MeshFunctionGnuplotWriter.h>
#include <TNL/Meshes/Writers/VTKWriter.h>
#include <TNL/Meshes/Writers/VTUWriter.h>

#pragma once

@@ -498,6 +499,14 @@ write( const String& fileName,
      else
         writer.writeCellData( getData(), "pointFunctionValues", 1 );
   }
   else if( format == "vtu" ) {
      Meshes::Writers::VTUWriter< Mesh > writer( file );
      writer.template writeEntities< getEntitiesDimension() >( *meshPointer );
      if( MeshFunctionView::getEntitiesDimension() == 0 )
         writer.writePointData( getData(), "cellFunctionValues", 1 );
      else
         writer.writeCellData( getData(), "pointFunctionValues", 1 );
   }
   else if( format == "gnuplot" )
      return MeshFunctionGnuplotWriter< MeshFunctionView >::write( *this, file );
   else {
+42 −25
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
#include <TNL/Functions/MeshFunctionView.h>
#include <TNL/Functions/VectorFieldGnuplotWriter.h>
#include <TNL/Meshes/Writers/VTKWriter.h>
#include <TNL/Meshes/Writers/VTUWriter.h>

namespace TNL {
namespace Functions {
@@ -259,10 +260,7 @@ class VectorField< Size, MeshFunction< Mesh, MeshEntityDimension, Real > >
            std::cerr << "Unable to open a file " << fileName << "." << std::endl;
            return false;
         }
         if( format == "vtk" ) {
            Meshes::Writers::VTKWriter< Mesh > writer( file );
            writer.template writeEntities< getEntitiesDimension() >( *getMeshPointer() );

         if( format == "vtk" || format == "vtu" ) {
            // copy all values from the vector field into a contiguous array
            using BufferType = Containers::Array< typename VectorField::RealType, Devices::Host, IndexType >;
            const IndexType entitiesCount = getMeshPointer()->template getEntitiesCount< getEntitiesDimension() >();
@@ -270,17 +268,28 @@ class VectorField< Size, MeshFunction< Mesh, MeshEntityDimension, Real > >
            IndexType k = 0;
            for( IndexType i = 0; i < entitiesCount; i++ ) {
               const VectorType vector = getElement( i );
               static_assert( getVectorDimension() <= 3, "The VTK format supports only up to 3D vector fields." );
               static_assert( getVectorDimension() <= 3, "VTK formats support only up to 3D vector fields." );
               for( int j = 0; j < 3; j++ )
                  buffer[ k++ ] = ( j < vector.getSize() ? vector[ j ] : 0 );
            }

            // write the buffer
            if( format == "vtk" ) {
               Meshes::Writers::VTKWriter< Mesh > writer( file );
               writer.template writeEntities< getEntitiesDimension() >( *getMeshPointer() );
               if( getEntitiesDimension() == 0 )
                  writer.writePointData( buffer, "cellVectorFieldValues", 3 );
               else
                  writer.writeCellData( buffer, "pointVectorFieldValues", 3 );
            }
            else if( format == "vtu" ) {
               Meshes::Writers::VTUWriter< Mesh > writer( file );
               writer.template writeEntities< getEntitiesDimension() >( *getMeshPointer() );
               if( getEntitiesDimension() == 0 )
                  writer.writePointData( buffer, "cellVectorFieldValues", 3 );
               else
                  writer.writeCellData( buffer, "pointVectorFieldValues", 3 );
            }
         }
         else if( format == "gnuplot" )
            return VectorFieldGnuplotWriter< VectorField >::write( *this, file );
         else {
@@ -524,10 +533,7 @@ class VectorField< Size, MeshFunctionView< Mesh, MeshEntityDimension, Real > >
            std::cerr << "Unable to open a file " << fileName << "." << std::endl;
            return false;
         }
         if( format == "vtk" ) {
            Meshes::Writers::VTKWriter< Mesh > writer( file );
            writer.template writeEntities< getEntitiesDimension() >( *getMeshPointer() );

         if( format == "vtk" || format == "vtu" ) {
            // copy all values from the vector field into a contiguous array
            using BufferType = Containers::Array< typename VectorField::RealType, Devices::Host, IndexType >;
            const IndexType entitiesCount = getMeshPointer()->template getEntitiesCount< getEntitiesDimension() >();
@@ -535,17 +541,28 @@ class VectorField< Size, MeshFunctionView< Mesh, MeshEntityDimension, Real > >
            IndexType k = 0;
            for( IndexType i = 0; i < entitiesCount; i++ ) {
               const VectorType vector = getElement( i );
               static_assert( getVectorDimension() <= 3, "The VTK format supports only up to 3D vector fields." );
               static_assert( getVectorDimension() <= 3, "VTK formats support only up to 3D vector fields." );
               for( int j = 0; j < 3; j++ )
                  buffer[ k++ ] = ( j < vector.getSize() ? vector[ j ] : 0 );
            }

            // write the buffer
            if( format == "vtk" ) {
               Meshes::Writers::VTKWriter< Mesh > writer( file );
               writer.template writeEntities< getEntitiesDimension() >( *getMeshPointer() );
               if( getEntitiesDimension() == 0 )
                  writer.writePointData( buffer, "cellVectorFieldValues", 3 );
               else
                  writer.writeCellData( buffer, "pointVectorFieldValues", 3 );
            }
            else if( format == "vtu" ) {
               Meshes::Writers::VTUWriter< Mesh > writer( file );
               writer.template writeEntities< getEntitiesDimension() >( *getMeshPointer() );
               if( getEntitiesDimension() == 0 )
                  writer.writePointData( buffer, "cellVectorFieldValues", 3 );
               else
                  writer.writeCellData( buffer, "pointVectorFieldValues", 3 );
            }
         }
         else if( format == "gnuplot" )
            return VectorFieldGnuplotWriter< VectorField >::write( *this, file );
         else {
+7 −0
Original line number Diff line number Diff line
@@ -24,6 +24,13 @@ if( DCMTK_FOUND )
   target_link_libraries(tnl-dicom-reader ${DCMTK_LIBRARIES} )
endif()

find_package( ZLIB )
if( ZLIB_FOUND )
   target_compile_definitions(tnl-view PUBLIC "-DHAVE_ZLIB")
   target_include_directories(tnl-view PUBLIC ${ZLIB_INCLUDE_DIRS})
   target_link_libraries(tnl-view ${ZLIB_LIBRARIES})
endif()

IF( BUILD_CUDA )
   CUDA_ADD_EXECUTABLE( tnl-cuda-arch tnl-cuda-arch.cu )
   INSTALL( TARGETS tnl-cuda-arch
+1 −0
Original line number Diff line number Diff line
@@ -77,6 +77,7 @@ void setupConfig( Config::ConfigDescription& config )
   config.addEntry        < String >( "output-format", "Output file format.", "gnuplot" );
      config.addEntryEnum< String > ( "gnuplot" );
      config.addEntryEnum< String > ( "vtk" );
      config.addEntryEnum< String > ( "vtu" );
   config.addEntry        < int >   ( "verbose", "Set the verbosity of the program.", 1 );
}

Loading