Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
amdis
amdis-core
Commits
c526c8b6
Commit
c526c8b6
authored
Jun 24, 2019
by
Praetorius, Simon
Browse files
add vtk sequence writer and modified the default filewriter settings accordingly
parent
65242abd
Changes
4
Hide whitespace changes
Inline
Side-by-side
src/amdis/CMakeLists.txt
View file @
c526c8b6
...
...
@@ -71,6 +71,7 @@ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/amdis)
add_subdirectory
(
"common"
)
add_subdirectory
(
"functions"
)
add_subdirectory
(
"gridfunctions"
)
add_subdirectory
(
"io"
)
add_subdirectory
(
"linearalgebra"
)
add_subdirectory
(
"localoperators"
)
add_subdirectory
(
"operations"
)
...
...
src/amdis/FileWriter.hpp
View file @
c526c8b6
...
...
@@ -5,8 +5,7 @@
#include
<dune/functions/functionspacebases/lagrangebasis.hh>
#include
<dune/grid/io/file/vtk/vtkwriter.hh>
#include
<dune/grid/io/file/vtk/vtksequencewriter.hh>
//#include <dune/geometry/referenceelements.hh>
#include
<dune/grid/io/file/vtk/subsamplingvtkwriter.hh>
#include
<dune/typetree/childextraction.hh>
#include
<amdis/FileWriterInterface.hpp>
...
...
@@ -15,6 +14,7 @@
#include
<amdis/common/StaticSize.hpp>
#include
<amdis/common/ValueCategory.hpp>
#include
<amdis/gridfunctions/DiscreteFunction.hpp>
#include
<amdis/io/VTKSequenceWriter.hpp>
namespace
AMDiS
{
...
...
@@ -86,7 +86,7 @@ namespace AMDiS
vtkWriter_
=
std
::
make_shared
<
Dune
::
VTKWriter
<
GridView
>>
(
gridView
());
if
(
animation_
)
vtkSeqWriter_
=
std
::
make_shared
<
Dune
::
VTKSequenceWriter
<
GridView
>>
(
vtkWriter_
,
filename_
,
dir_
,
""
);
vtkSeqWriter_
=
std
::
make_shared
<
VTKSequenceWriter
<
GridView
>>
(
vtkWriter_
);
vtkWriter_
->
addVertexData
(
discreteFct_
,
Dune
::
VTK
::
FieldInfo
(
name_
,
VTKFieldType
<
Range
>
,
VTKFieldSize
<
Range
>
));
}
...
...
@@ -97,11 +97,12 @@ namespace AMDiS
void
writeFiles
(
AdaptInfo
&
adaptInfo
,
bool
force
)
override
{
test_exit
(
dir_
==
"."
||
filesystem
::
exists
(
dir_
),
"Output directory '{}' does not exist!"
,
dir_
);
filesystem
::
create_directories
(
dir_
+
"/_piecefiles"
);
if
(
vtkSeqWriter_
)
vtkSeqWriter_
->
write
(
adaptInfo
.
time
(),
mode_
);
vtkSeqWriter_
->
p
write
(
adaptInfo
.
time
(),
filename_
,
dir_
,
"_piecefiles"
,
mode_
);
else
if
(
vtkWriter_
)
vtkWriter_
->
write
(
file
system
::
path
({
dir_
,
filename_
}).
string
()
,
mode_
);
vtkWriter_
->
p
write
(
file
name_
,
dir_
,
"_piecefiles"
,
mode_
);
}
protected:
...
...
@@ -114,7 +115,7 @@ namespace AMDiS
DiscreteFunction
<
GB
,
VT
,
TP
>
discreteFct_
;
std
::
shared_ptr
<
Dune
::
VTKWriter
<
GridView
>>
vtkWriter_
;
std
::
shared_ptr
<
Dune
::
VTKSequenceWriter
<
GridView
>>
vtkSeqWriter_
;
std
::
shared_ptr
<
VTKSequenceWriter
<
GridView
>>
vtkSeqWriter_
;
// write .pvd if animation=true, otherwise write only .vtu
bool
animation_
;
...
...
src/amdis/io/CMakeLists.txt
0 → 100644
View file @
c526c8b6
install
(
FILES
VtkSequenceWriter.hpp
DESTINATION
${
CMAKE_INSTALL_INCLUDEDIR
}
/amdis/io
)
src/amdis/io/VTKSequenceWriter.hpp
0 → 100644
View file @
c526c8b6
#pragma once
#include
<vector>
#include
<iostream>
#include
<sstream>
#include
<fstream>
#include
<iomanip>
#include
<memory>
#include
<dune/grid/io/file/vtk/common.hh>
#include
<dune/common/path.hh>
#include
<dune/grid/io/file/vtk/vtkwriter.hh>
namespace
AMDiS
{
/// \brief class to write pvd-files which contains a list of all collected vtk-files
/**
* Write pvd-file suitable for easy visualization with
* <a href="http://www.vtk.org/">The Visualization Toolkit (VTK)</a>.
*
* \tparam GridView Grid view of the grid we are writing
*/
template
<
class
GridView
>
class
VTKSequenceWriter
{
using
VTKWriter
=
Dune
::
VTKWriter
<
GridView
>
;
public:
/// \brief Set up the VTKSequenceWriter class
/**
* \param vtkWriter Writer object used to write the individual time step data files
*/
VTKSequenceWriter
(
std
::
shared_ptr
<
VTKWriter
>
vtkWriter
)
:
vtkWriter_
(
std
::
move
(
vtkWriter
))
{}
/// \brief Set up the VTKSequenceWriter class by creating a timestep writer of type \ref VTKWriter
/**
* \param gridView GridView object passed to the constructor of the VTKWriter
* \param args... Additional arguments forwarded to the VTKWriter constructor.
*/
template
<
class
...
Args
>
VTKSequenceWriter
(
GridView
const
&
gridView
,
Args
&&
...
args
)
:
VTKSequenceWriter
<
GridView
>
(
std
::
make_shared
<
VTKWriter
>
(
gridView
,
FWD
(
args
)...))
{}
/// accessor for the underlying VTKWriter instance
std
::
shared_ptr
<
VTKWriter
>
const
&
vtkWriter
()
const
{
return
vtkWriter_
;
}
/// \brief Adds a field of cell data to the VTK file
template
<
class
...
Args
>
void
addCellData
(
Args
&&
...
args
)
{
vtkWriter_
->
addCellData
(
FWD
(
args
)...);
}
/// \brief Adds a field of vertex data to the VTK file
template
<
class
...
Args
>
void
addVertexData
(
Args
&&
...
args
)
{
vtkWriter_
->
addVertexData
(
FWD
(
args
)...);
}
/// \brief Writes VTK data for the given time,
/**
* \param time The time(step) for the data to be written.
* \param name The basename of the .pvd file (without file extension)
* \param type VTK output type.
*/
virtual
void
write
(
double
time
,
std
::
string
const
&
name
,
Dune
::
VTK
::
OutputType
type
=
Dune
::
VTK
::
ascii
)
{
pwrite
(
time
,
name
,
"."
,
""
,
type
);
}
/// \brief Writes VTK data for the given time,
/**
* \param time The time(step) for the data to be written.
* \param name The basename of the .pvd file (without file extension)
* \param path The directory where to put the .pvd file
* \param extendpath The (relative) subdirectory to path, where to put the timestep files
* \param type VTK output type.
*/
virtual
void
pwrite
(
double
time
,
std
::
string
const
&
name
,
std
::
string
const
&
path
,
std
::
string
const
&
extendpath
,
Dune
::
VTK
::
OutputType
type
=
Dune
::
VTK
::
ascii
)
{
// remember current time step
unsigned
int
count
=
timesteps_
.
size
();
timesteps_
.
push_back
(
time
);
// write VTK file
vtkWriter_
->
pwrite
(
seqName
(
name
,
count
),
Dune
::
concatPaths
(
path
,
extendpath
),
""
,
type
);
// write pvd file ... only on rank 0
if
(
Environment
::
mpiRank
()
==
0
)
{
std
::
ofstream
pvdFile
;
pvdFile
.
exceptions
(
std
::
ios_base
::
badbit
|
std
::
ios_base
::
failbit
|
std
::
ios_base
::
eofbit
);
std
::
string
pvdname
=
path
+
"/"
+
name
+
".pvd"
;
pvdFile
.
open
(
pvdname
.
c_str
());
pvdFile
<<
"<?xml version=
\"
1.0
\"
?>
\n
"
<<
"<VTKFile type=
\"
Collection
\"
version=
\"
0.1
\"
byte_order=
\"
"
<<
Dune
::
VTK
::
getEndiannessString
()
<<
"
\"
>
\n
"
<<
"<Collection>
\n
"
;
for
(
unsigned
int
i
=
0
;
i
<=
count
;
++
i
)
{
std
::
string
piecepath
=
extendpath
;
std
::
string
fullname
=
getParallelHeaderName
(
seqName
(
name
,
i
),
piecepath
,
Environment
::
mpiSize
());
pvdFile
<<
"<DataSet timestep=
\"
"
<<
timesteps_
[
i
]
<<
"
\"
part=
\"
0
\"
file=
\"
"
<<
fullname
<<
"
\"
/>
\n
"
;
}
pvdFile
<<
"</Collection>
\n
"
<<
"</VTKFile>
\n
"
<<
std
::
flush
;
pvdFile
.
close
();
}
}
protected:
// create sequence name
static
std
::
string
seqName
(
std
::
string
const
&
name
,
unsigned
int
count
)
{
std
::
stringstream
n
;
n
.
fill
(
'0'
);
n
<<
name
<<
"-"
<<
std
::
setw
(
5
)
<<
count
;
return
n
.
str
();
}
static
std
::
string
getParallelHeaderName
(
std
::
string
const
&
name
,
std
::
string
const
&
path
,
int
commSize
)
{
std
::
ostringstream
s
;
if
(
path
.
size
()
>
0
)
{
s
<<
path
;
if
(
path
[
path
.
size
()
-
1
]
!=
'/'
)
s
<<
'/'
;
}
s
<<
's'
<<
std
::
setw
(
4
)
<<
std
::
setfill
(
'0'
)
<<
commSize
<<
'-'
;
s
<<
name
;
if
(
GridView
::
dimension
>
1
)
s
<<
".pvtu"
;
else
s
<<
".pvtp"
;
return
s
.
str
();
}
private:
std
::
shared_ptr
<
VTKWriter
>
vtkWriter_
;
std
::
vector
<
double
>
timesteps_
;
};
}
// end namespace AMDiS
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment