Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Houman Mirzaalian Dastjerdi
waLBerla
Commits
ed316e2c
Commit
ed316e2c
authored
Jan 10, 2018
by
Felix Winterhalter
Browse files
Merge remote-tracking branch 'origin/master' into new-pe-world
parents
2e0b843e
121d0f65
Changes
201
Expand all
Hide whitespace changes
Inline
Side-by-side
CMakeLists.txt
View file @
ed316e2c
...
...
@@ -67,6 +67,7 @@ option ( WALBERLA_BUILD_TESTS "Build Testcases"
option
(
WALBERLA_BUILD_BENCHMARKS
"Build Benchmarks"
ON
)
option
(
WALBERLA_BUILD_TOOLS
"Build Tools"
)
option
(
WALBERLA_BUILD_TUTORIALS
"Build Tutorials"
ON
)
option
(
WALBERLA_BUILD_SHOWCASES
"Build Showcases"
OFF
)
option
(
WALBERLA_BUILD_WITH_MPI
"Build with MPI"
ON
)
option
(
WALBERLA_BUILD_WITH_METIS
"Build with metis graph partitioner"
OFF
)
...
...
@@ -930,6 +931,9 @@ if( (NOT DEFINED WALBERLA_BUILD_WITH_OPENMESH) OR WALBERLA_BUILD_WITH_OPENMESH )
set
(
WALBERLA_BUILD_WITH_OPENMESH ON CACHE BOOL
"Build with OpenMesh support"
)
include_directories
(
SYSTEM
${
OPENMESH_INCLUDE_DIRS
}
)
list
(
APPEND SERVICE_LIBS
${
OPENMESH_LIBRARIES
}
)
if
(
WALBERLA_CXX_COMPILER_IS_MSVC
)
add_definitions
(
-D_USE_MATH_DEFINES
)
endif
()
else
()
set
(
WALBERLA_BUILD_WITH_OPENMESH OFF CACHE BOOL
"Build with OpenMesh support"
FORCE
)
endif
()
...
...
apps/CMakeLists.txt
View file @
ed316e2c
...
...
@@ -22,6 +22,12 @@ else ()
add_subdirectory
(
tutorials EXCLUDE_FROM_ALL
)
endif
()
# Showcases
if
(
WALBERLA_BUILD_SHOWCASES
)
add_subdirectory
(
showcases
)
else
()
add_subdirectory
(
showcases EXCLUDE_FROM_ALL
)
endif
()
# Python module
if
(
WALBERLA_BUILD_WITH_PYTHON
)
...
...
apps/benchmarks/CMakeLists.txt
View file @
ed316e2c
add_subdirectory
(
ComplexGeometry
)
add_subdirectory
(
MeshDistance
)
add_subdirectory
(
CouetteFlow
)
add_subdirectory
(
ForcesOnSphereNearPlaneInShearFlow
)
add_subdirectory
(
NonUniformGrid
)
add_subdirectory
(
MotionSingleHeavySphere
)
add_subdirectory
(
PoiseuilleChannel
)
...
...
apps/benchmarks/ComplexGeometry/CMakeLists.txt
0 → 100644
View file @
ed316e2c
if
(
WALBERLA_BUILD_WITH_OPENMESH
)
waLBerla_link_files_to_builddir
(
"*.obj"
)
waLBerla_link_files_to_builddir
(
"*.conf"
)
waLBerla_add_executable
(
NAME ComplexGeometry FILES ComplexGeometry.cpp DEPENDS boundary core lbm mesh vtk
)
##############
# Some tests #
##############
waLBerla_execute_test
(
NO_MODULE_LABEL NAME ComplexGeometry COMMAND $<TARGET_FILE:ComplexGeometry> test.conf DEPENDS_ON_TARGETS ComplexGeometry
)
endif
()
apps/benchmarks/ComplexGeometry/ComplexGeometry.cpp
0 → 100644
View file @
ed316e2c
//======================================================================================================================
//
// This file is part of waLBerla. waLBerla is free software: you can
// redistribute it and/or modify it under the terms of the GNU General Public
// License as published by the Free Software Foundation, either version 3 of
// the License, or (at your option) any later version.
//
// waLBerla is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with waLBerla (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
//
//! \file ComplexGeometry.cpp
//! \ingroup mesh
//! \author Christian Godenschwager <christian.godenschwager@fau.de>
//
//======================================================================================================================
#include "blockforest/Initialization.h"
#include "blockforest/SetupBlockForest.h"
#include "blockforest/communication/UniformBufferedScheme.h"
#include "blockforest/loadbalancing/StaticParMetis.h"
#include "core/SharedFunctor.h"
#include "core/Environment.h"
#include "core/logging/Logging.h"
#include "core/math/IntegerFactorization.h"
#include "domain_decomposition/SharedSweep.h"
#include "field/AddToStorage.h"
#include "field/StabilityChecker.h"
#include "lbm/boundary/factories/DefaultBoundaryHandling.h"
#include "lbm/communication/PdfFieldPackInfo.h"
#include "lbm/communication/SparsePdfFieldPackInfo.h"
#include "lbm/field/AddToStorage.h"
#include "lbm/lattice_model/D3Q19.h"
#include "lbm/lattice_model/D3Q27.h"
#include "lbm/lattice_model/CollisionModel.h"
#include "lbm/lattice_model/ForceModel.h"
#include "lbm/refinement/TimeStep.h"
#include "lbm/sweeps/CellwiseSweep.h"
#include "lbm/sweeps/SplitPureSweep.h"
#include "lbm/vtk/VTKOutput.h"
#include "lbm/BlockForestEvaluation.h"
#include "lbm/PerformanceEvaluation.h"
#include "lbm/PerformanceLogger.h"
#include "geometry/mesh/TriangleMesh.h"
#include "geometry/mesh/TriangleMeshIO.h"
#include "geometry/InitBoundaryHandling.h"
#include "mesh/TriangleMeshes.h"
#include "mesh/MeshOperations.h"
#include "mesh/DistanceComputations.h"
#include "mesh/MeshIO.h"
#include "mesh/MatrixVectorOperations.h"
#include "mesh/blockforest/BlockForestInitialization.h"
#include "mesh/blockforest/BlockWorkloadMemory.h"
#include "mesh/blockforest/BlockExclusion.h"
#include "mesh/blockforest/RefinementSelection.h"
#include "mesh/distance_octree/DistanceOctree.h"
#include "mesh/boundary/BoundarySetup.h"
#include "mesh/boundary/BoundaryInfo.h"
#include "mesh/boundary/BoundaryLocation.h"
#include "mesh/boundary/BoundaryUIDFaceDataSource.h"
#include "mesh/boundary/ColorToBoundaryMapper.h"
#include "mesh/vtk/VTKMeshWriter.h"
#include "mesh/vtk/CommonDataSources.h"
#include "stencil/D3Q19.h"
#include "timeloop/SweepTimeloop.h"
#include "core/timing/RemainingTimeLogger.h"
#include <boost/lexical_cast.hpp>
#include <cmath>
#include <vector>
#include <string>
namespace
walberla
{
template
<
typename
MeshDistanceType
>
struct
MeshDistanceFunction
{
MeshDistanceFunction
(
const
shared_ptr
<
MeshDistanceType
>
&
meshDistanceObject
)
:
meshDistanceObject_
(
meshDistanceObject
)
{
}
inline
real_t
operator
()(
const
Vector3
<
real_t
>
&
p
)
const
{
return
real_c
(
meshDistanceObject_
->
sqSignedDistance
(
mesh
::
toOpenMesh
(
p
)
)
);
}
shared_ptr
<
MeshDistanceType
>
meshDistanceObject_
;
};
template
<
typename
MeshDistanceType
>
inline
MeshDistanceFunction
<
MeshDistanceType
>
makeMeshDistanceFunction
(
const
shared_ptr
<
MeshDistanceType
>
&
meshDistanceObject
)
{
return
MeshDistanceFunction
<
MeshDistanceType
>
(
meshDistanceObject
);
}
template
<
typename
MeshDistanceType
,
typename
MeshType
>
struct
BoundaryLocationFunction
{
BoundaryLocationFunction
(
const
shared_ptr
<
MeshDistanceType
>
&
meshDistanceObject
,
const
shared_ptr
<
mesh
::
BoundaryLocation
<
MeshType
>
>
&
boundaryLocation
)
:
meshDistanceObject_
(
meshDistanceObject
),
boundaryLocation_
(
boundaryLocation
)
{
}
inline
const
mesh
::
BoundaryInfo
&
operator
()(
const
Vector3
<
real_t
>
&
p
)
const
{
typename
MeshType
::
FaceHandle
fh
;
meshDistanceObject_
->
sqSignedDistance
(
mesh
::
toOpenMesh
(
p
),
fh
);
return
(
*
boundaryLocation_
)[
fh
];
}
shared_ptr
<
MeshDistanceType
>
meshDistanceObject_
;
shared_ptr
<
mesh
::
BoundaryLocation
<
MeshType
>
>
boundaryLocation_
;
};
template
<
typename
MeshDistanceType
,
typename
MeshType
>
inline
BoundaryLocationFunction
<
MeshDistanceType
,
MeshType
>
makeBoundaryLocationFunction
(
const
shared_ptr
<
MeshDistanceType
>
&
meshDistanceObject
,
const
shared_ptr
<
mesh
::
BoundaryLocation
<
MeshType
>
>
&
boundaryLocation
)
{
return
BoundaryLocationFunction
<
MeshDistanceType
,
MeshType
>
(
meshDistanceObject
,
boundaryLocation
);
}
template
<
typename
MeshType
>
void
vertexToFaceColor
(
MeshType
&
mesh
,
const
typename
MeshType
::
Color
&
defaultColor
)
{
WALBERLA_CHECK
(
mesh
.
has_vertex_colors
()
);
mesh
.
request_face_colors
();
for
(
auto
faceIt
=
mesh
.
faces_begin
();
faceIt
!=
mesh
.
faces_end
();
++
faceIt
)
{
typename
MeshType
::
Color
vertexColor
;
bool
useVertexColor
=
true
;
auto
vertexIt
=
mesh
.
fv_iter
(
*
faceIt
);
WALBERLA_ASSERT
(
vertexIt
.
is_valid
()
);
vertexColor
=
mesh
.
color
(
*
vertexIt
);
++
vertexIt
;
while
(
vertexIt
.
is_valid
()
&&
useVertexColor
)
{
if
(
vertexColor
!=
mesh
.
color
(
*
vertexIt
)
)
useVertexColor
=
false
;
++
vertexIt
;
}
mesh
.
set_color
(
*
faceIt
,
useVertexColor
?
vertexColor
:
defaultColor
);
}
}
int
main
(
int
argc
,
char
*
argv
[]
)
{
Environment
env
(
argc
,
argv
);
if
(
!
env
.
config
()
)
{
WALBERLA_ABORT_NO_DEBUG_INFO
(
"USAGE: "
<<
argv
[
0
]
<<
" INPUT_FILE"
);
}
mpi
::
MPIManager
::
instance
()
->
useWorldComm
();
const
auto
&
config
=
*
(
env
.
config
()
);
Config
::
BlockHandle
configBlock
=
config
.
getOneBlock
(
"ComplexGeometry"
);
const
std
::
string
meshFile
=
configBlock
.
getParameter
<
std
::
string
>
(
"meshFile"
);
const
real_t
dx
=
configBlock
.
getParameter
<
real_t
>
(
"coarseDx"
);
const
real_t
omega
=
configBlock
.
getParameter
<
real_t
>
(
"coarseOmega"
);
//const uint_t blockPerProcess = configBlock.getParameter< uint_t >( "blocksPerProcess", uint_t(6) );
const
uint_t
timeSteps
=
configBlock
.
getParameter
<
uint_t
>
(
"coarseTimeSteps"
);
const
Vector3
<
real_t
>
bodyForce
=
configBlock
.
getParameter
<
Vector3
<
real_t
>
>
(
"bodyForce"
);
//const bool sparseCommunication = configBlock.getParameter< bool >( "sparseCommunication", true );
const
Vector3
<
real_t
>
domainBlowUp
=
configBlock
.
getParameter
<
Vector3
<
real_t
>
>
(
"domainBlowUp"
,
Vector3
<
real_t
>
(
6
)
);
const
Vector3
<
uint_t
>
blockSize
=
configBlock
.
getParameter
<
Vector3
<
uint_t
>
>
(
"blockSize"
,
Vector3
<
uint_t
>
(
16
)
);
uint_t
numLevels
=
configBlock
.
getParameter
<
uint_t
>
(
"numLevels"
,
uint_t
(
2
)
);
numLevels
=
std
::
max
(
numLevels
,
uint_t
(
1
)
);
//uint_t numProcesses = uint_c( MPIManager::instance()->numProcesses() );
WALBERLA_LOG_DEVEL_VAR_ON_ROOT
(
meshFile
);
auto
mesh
=
make_shared
<
mesh
::
TriangleMesh
>
();
mesh
->
request_vertex_colors
();
WALBERLA_LOG_DEVEL_ON_ROOT
(
"Loading mesh"
);
mesh
::
readAndBroadcast
(
meshFile
,
*
mesh
);
vertexToFaceColor
(
*
mesh
,
mesh
::
TriangleMesh
::
Color
(
255
,
255
,
255
)
);
WALBERLA_LOG_DEVEL_ON_ROOT
(
"Adding distance info to mesh"
);
auto
triDist
=
make_shared
<
mesh
::
TriangleDistance
<
mesh
::
TriangleMesh
>
>
(
mesh
);
WALBERLA_LOG_DEVEL_ON_ROOT
(
"Building distance octree"
);
auto
distanceOctree
=
make_shared
<
mesh
::
DistanceOctree
<
mesh
::
TriangleMesh
>
>
(
triDist
);
WALBERLA_LOG_DEVEL_ON_ROOT
(
"done. Octree has height "
<<
distanceOctree
->
height
()
);
distanceOctree
->
writeVTKOutput
(
"distanceOctree"
);
auto
aabb
=
computeAABB
(
*
mesh
);
aabb
.
scale
(
domainBlowUp
);
mesh
::
ComplexGeometryStructuredBlockforestCreator
bfc
(
aabb
,
Vector3
<
real_t
>
(
dx
),
mesh
::
makeExcludeMeshInterior
(
distanceOctree
,
dx
)
);
auto
meshWorkloadMemory
=
mesh
::
makeMeshWorkloadMemory
(
distanceOctree
,
dx
);
meshWorkloadMemory
.
setInsideCellWorkload
(
1
);
meshWorkloadMemory
.
setOutsideCellWorkload
(
1
);
bfc
.
setWorkloadMemorySUIDAssignmentFunction
(
meshWorkloadMemory
);
bfc
.
setPeriodicity
(
Vector3
<
bool
>
(
true
)
);
bfc
.
setRefinementSelectionFunction
(
makeRefinementSelection
(
distanceOctree
,
numLevels
-
uint_t
(
1
),
dx
,
dx
*
real_t
(
1
)
)
);
auto
structuredBlockforest
=
bfc
.
createStructuredBlockForest
(
blockSize
);
typedef
lbm
::
D3Q19
<
lbm
::
collision_model
::
SRT
,
false
,
lbm
::
force_model
::
SimpleConstant
>
LatticeModel_T
;
typedef
walberla
::
uint8_t
flag_t
;
typedef
FlagField
<
flag_t
>
FlagField_T
;
typedef
lbm
::
PdfField
<
LatticeModel_T
>
PdfField_T
;
LatticeModel_T
latticeModel
{
lbm
::
collision_model
::
SRT
(
omega
),
lbm
::
force_model
::
SimpleConstant
(
bodyForce
)
};
static
const
uint_t
NUM_GHOSTLAYERS
=
4
;
BlockDataID
pdfFieldId
=
lbm
::
addPdfFieldToStorage
(
structuredBlockforest
,
"pdf field"
,
latticeModel
,
Vector3
<
real_t
>
(
0
),
real_t
(
1
),
NUM_GHOSTLAYERS
,
field
::
fzyx
);
BlockDataID
flagFieldId
=
field
::
addFlagFieldToStorage
<
FlagField_T
>
(
structuredBlockforest
,
"flag field"
,
NUM_GHOSTLAYERS
);
const
FlagUID
fluidFlagUID
(
"Fluid"
);
typedef
lbm
::
DefaultBoundaryHandlingFactory
<
LatticeModel_T
,
FlagField_T
>
BHFactory
;
auto
boundariesConfig
=
configBlock
.
getOneBlock
(
"Boundaries"
);
BlockDataID
boundaryHandlingId
=
BHFactory
::
addBoundaryHandlingToStorage
(
structuredBlockforest
,
"boundary handling"
,
flagFieldId
,
pdfFieldId
,
fluidFlagUID
,
boundariesConfig
.
getParameter
<
Vector3
<
real_t
>
>
(
"velocity0"
,
Vector3
<
real_t
>
()
),
boundariesConfig
.
getParameter
<
Vector3
<
real_t
>
>
(
"velocity1"
,
Vector3
<
real_t
>
()
),
boundariesConfig
.
getParameter
<
real_t
>
(
"pressure0"
,
real_c
(
1.0
)
),
boundariesConfig
.
getParameter
<
real_t
>
(
"pressure1"
,
real_c
(
1.001
)
)
);
mesh
::
ColorToBoundaryMapper
<
mesh
::
TriangleMesh
>
colorToBoundryMapper
((
mesh
::
BoundaryInfo
(
BHFactory
::
getNoSlipBoundaryUID
()
)
));
// colorToBoundryMapper.set( mesh::TriangleMesh::Color(255,0,0), mesh::BoundaryInfo( BHFactory::getPressure0BoundaryUID() ) );
// colorToBoundryMapper.set( mesh::TriangleMesh::Color(0,0,255), mesh::BoundaryInfo( BHFactory::getPressure1BoundaryUID() ) );
// colorToBoundryMapper.set( mesh::TriangleMesh::Color(255,255,255), mesh::BoundaryInfo( BHFactory::getNoSlipBoundaryUID() ) );
auto
boundaryLocations
=
colorToBoundryMapper
.
addBoundaryInfoToMesh
(
*
mesh
);
mesh
::
VTKMeshWriter
<
mesh
::
TriangleMesh
>
meshWriter
(
mesh
,
"meshBoundaries"
,
1
);
meshWriter
.
addDataSource
(
make_shared
<
mesh
::
BoundaryUIDFaceDataSource
<
mesh
::
TriangleMesh
>
>
(
boundaryLocations
)
);
meshWriter
.
addDataSource
(
make_shared
<
mesh
::
ColorFaceDataSource
<
mesh
::
TriangleMesh
>
>
()
);
meshWriter
.
addDataSource
(
make_shared
<
mesh
::
ColorVertexDataSource
<
mesh
::
TriangleMesh
>
>
()
);
meshWriter
();
WALBERLA_LOG_DEVEL_ON_ROOT
(
"Voxelizing mesh"
);
mesh
::
BoundarySetup
boundarySetup
(
structuredBlockforest
,
makeMeshDistanceFunction
(
distanceOctree
),
NUM_GHOSTLAYERS
);
//WALBERLA_LOG_DEVEL( "Writing Voxelisation" );
//boundarySetup.writeVTKVoxelfile();
WALBERLA_LOG_DEVEL_ON_ROOT
(
"Setting up fluid cells"
);
boundarySetup
.
setDomainCells
<
BHFactory
::
BoundaryHandling
>
(
boundaryHandlingId
,
mesh
::
BoundarySetup
::
OUTSIDE
);
WALBERLA_LOG_DEVEL_ON_ROOT
(
"Setting up boundaries"
);
boundarySetup
.
setBoundaries
<
BHFactory
::
BoundaryHandling
>
(
boundaryHandlingId
,
makeBoundaryLocationFunction
(
distanceOctree
,
boundaryLocations
),
mesh
::
BoundarySetup
::
INSIDE
);
WALBERLA_LOG_DEVEL_ON_ROOT
(
"done"
);
lbm
::
BlockForestEvaluation
<
FlagField_T
>
(
structuredBlockforest
,
flagFieldId
,
fluidFlagUID
).
logInfoOnRoot
();
lbm
::
PerformanceLogger
<
FlagField_T
>
perfLogger
(
structuredBlockforest
,
flagFieldId
,
fluidFlagUID
,
100
);
SweepTimeloop
timeloop
(
structuredBlockforest
->
getBlockStorage
(),
timeSteps
);
auto
sweep
=
lbm
::
makeCellwiseSweep
<
LatticeModel_T
,
FlagField_T
>
(
pdfFieldId
,
flagFieldId
,
fluidFlagUID
);
auto
refinementTimeStep
=
lbm
::
refinement
::
makeTimeStep
<
LatticeModel_T
,
BHFactory
::
BoundaryHandling
>
(
structuredBlockforest
,
sweep
,
pdfFieldId
,
boundaryHandlingId
);
timeloop
.
addFuncBeforeTimeStep
(
makeSharedFunctor
(
refinementTimeStep
),
"Refinement time step"
);
// log remaining time
timeloop
.
addFuncAfterTimeStep
(
timing
::
RemainingTimeLogger
(
timeloop
.
getNrOfTimeSteps
()
),
"remaining time logger"
);
// LBM stability check
timeloop
.
addFuncAfterTimeStep
(
makeSharedFunctor
(
field
::
makeStabilityChecker
<
PdfField_T
,
FlagField_T
>
(
env
.
config
(),
structuredBlockforest
,
pdfFieldId
,
flagFieldId
,
fluidFlagUID
)
),
"LBM stability check"
);
timeloop
.
addFuncAfterTimeStep
(
perfLogger
,
"PerformanceLogger"
);
// add VTK output to time loop
lbm
::
VTKOutput
<
LatticeModel_T
,
FlagField_T
>::
addToTimeloop
(
timeloop
,
structuredBlockforest
,
env
.
config
(),
pdfFieldId
,
flagFieldId
,
fluidFlagUID
);
WcTimingPool
timingPool
;
WALBERLA_LOG_INFO_ON_ROOT
(
"Starting timeloop"
);
timeloop
.
run
(
timingPool
);
WALBERLA_LOG_INFO_ON_ROOT
(
"Timeloop done"
);
timingPool
.
unifyRegisteredTimersAcrossProcesses
();
timingPool
.
logResultOnRoot
(
WcTimingPool
::
REDUCE_TOTAL
,
true
);
return
EXIT_SUCCESS
;
}
}
// namespace walberla
int
main
(
int
argc
,
char
*
argv
[]
)
{
return
walberla
::
main
(
argc
,
argv
);
}
\ No newline at end of file
apps/benchmarks/ComplexGeometry/bunny.obj
0 → 100644
View file @
ed316e2c
This diff is collapsed.
Click to expand it.
apps/benchmarks/ComplexGeometry/cube.obj
0 → 100644
View file @
ed316e2c
####
#
# OBJ File Generated by Meshlab
#
####
# Object cube.obj
#
# Vertices: 8
# Faces: 12
#
####
v 0.000000 0.000000 0.000000
v 0.000000 0.000000 1.000000
v 0.000000 1.000000 1.000000
v 0.000000 1.000000 0.000000
v 1.000000 0.000000 0.000000
v 1.000000 0.000000 1.000000
v 1.000000 1.000000 1.000000
v 1.000000 1.000000 0.000000
# 8 vertices, 0 vertices normals
f 1 2 3
f 1 3 4
f 8 7 6
f 8 6 5
f 1 5 6
f 1 6 2
f 2 6 7
f 2 7 3
f 3 7 8
f 3 8 4
f 4 8 5
f 4 5 1
# 12 faces, 0 coords texture
# End of File
\ No newline at end of file
apps/benchmarks/ComplexGeometry/input.conf
0 → 100644
View file @
ed316e2c
ComplexGeometry
{
meshFile
bunny
.
obj
;
coarseDx
4
;
coarseOmega
1
.
6
;
coarseTimeSteps
1001
;
numLevels
3
;
bodyForce
<
0
.
0001
,
0
,
0
>;
blockSize
<
16
,
16
,
16
>;
domainBlowUp
<
5
,
5
,
5
>; //
simulation
domain
is
blow
up
factor
times
mesh
size
per
dimension
}
VTK
{
fluid
//
identifier
for
this
VTKOutput
object
{
writeFrequency
100
;
inclusion_filters
{
DomainFilter
;
}
writers
{
Velocity
;
Density
;
}
}
flags
//
identifier
for
this
VTKOutput
object
{
writeFrequency
999999999999999
; //
once
!
writers
{
FlagField
;
}
}
domain_decomposition
//
identifier
for
this
VTKOutput
object
{
writeFrequency
999999999999999
; //
once
!
outputDomainDecomposition
true
;
}
}
\ No newline at end of file
apps/benchmarks/ComplexGeometry/sphere.obj
0 → 100644
View file @
ed316e2c
####
#
# OBJ File Generated by Meshlab
#
####
# Object sphere.obj
#
# Vertices: 52
# Faces: 100
#
####
vn 3.203486 0.106207 4.556782
v 0.589717 0.013032 0.847959 0.752941 0.752941 0.752941
vn 5.019849 1.775524 1.684732
v 0.919162 0.323653 0.317881 0.752941 0.752941 0.752941
vn 2.435736 2.603171 4.338618
v 0.454446 0.492016 0.779993 0.752941 0.752941 0.752941
vn 1.166519 4.432512 3.718873
v 0.245629 0.761303 0.617920 0.752941 0.752941 0.752941
vn 3.325176 4.334585 2.054782
v 0.568591 0.771892 0.343297 0.752941 0.752941 0.752941
vn 0.595211 5.541665 1.103712
v 0.110726 0.991360 0.237197 0.752941 0.752941 0.752941
vn -3.776296 0.767626 4.266579
v -0.688569 0.139508 0.738187 0.000000 1.000000 0.000000
vn -1.312800 2.808851 4.706018
v -0.270132 0.525142 0.837286 0.000000 1.000000 0.000000
vn -3.673248 3.342919 3.246579
v -0.616965 0.568913 0.559955 0.000000 1.000000 0.000000
vn -5.184217 1.765921 1.597865
v -0.913888 0.321159 0.322155 0.000000 1.000000 0.000000
vn -1.576481 4.921260 2.246386
v -0.288050 0.891505 0.427122 0.000000 1.000000 0.000000
vn -3.631493 4.235586 0.210513
v -0.677783 0.771802 0.054808 0.000000 1.000000 0.000000
vn 5.347003 -0.730677 2.243891
v 0.939495 -0.137963 0.353373 0.752941 0.752941 0.752941
vn 3.090607 -2.164615 4.376353
v 0.564054 -0.405378 0.749705 0.752941 0.752941 0.752941
vn 4.139648 -3.083573 2.833979
v 0.686938 -0.535204 0.519371 0.752941 0.752941 0.752941
vn 5.547247 -1.363092 0.328926
v 0.988626 -0.269261 0.045694 0.752941 0.752941 0.752941
vn 1.196453 -3.595379 4.241168
v 0.225855 -0.666498 0.743600 0.752941 0.752941 0.752941
vn 3.440788 -4.400445 1.622125
v 0.605470 -0.764079 0.286901 0.752941 0.752941 0.752941
vn 1.483118 -5.448192 -0.612228
v 0.268689 -0.989603 -0.074576 0.752941 0.752941 0.752941
vn -5.131380 -1.139949 2.118813
v -0.938366 -0.205491 0.365196 0.000000 1.000000 0.000000
vn -0.148252 -0.090956 5.329934
v -0.029807 -0.012393 1.044330 0.752941 0.752941 0.752941
vn -2.941041 -1.873027 4.366208
v -0.544021 -0.347070 0.802954 0.752941 0.752941 0.752941
vn -4.510469 -3.611316 0.273923
v -0.799559 -0.630144 0.056333 0.752941 0.752941 0.752941
vn -1.222675 -3.813472 4.059360
v -0.223449 -0.686099 0.721907 0.752941 0.752941 0.752941
vn -3.177381 -4.314878 2.055289
v -0.568591 -0.771892 0.343297 0.752941 0.752941 0.752941
vn 0.555067 -5.357186 2.097567
v 0.103775 -0.959491 0.337408 0.752941 0.752941 0.752941
vn -1.424179 -5.441336 0.261796
v -0.242174 -0.999619 0.061062 0.752941 0.752941 0.752941
vn 0.603496 0.876270 -5.566095
v 0.094800 0.183733 -1.001620 0.752941 0.752941 0.752941
vn 3.764494 0.845602 -4.219594
v 0.688569 0.139508 -0.738187 0.752941 0.752941 0.752941
vn 1.567199 2.909075 -4.657190
v 0.270132 0.525142 -0.837286 0.752941 0.752941 0.752941
vn 3.565448 3.772605 -2.549637
v 0.615553 0.702721 -0.424646 0.752941 0.752941 0.752941
vn 5.162828 1.763767 -1.614322
v 0.913888 0.321159 -0.322155 0.752941 0.752941 0.752941
vn 1.324314 5.031288 -2.331577
v 0.253180 0.897558 -0.437313 0.752941 0.752941 0.752941
vn 3.629731 4.384550 -0.093890
v 0.650335 0.795689 -0.024263 0.752941 0.752941 0.752941
vn -4.043519 0.309797 -4.155685
v -0.705153 0.056764 -0.729210 0.000000 1.000000 0.000000
vn -2.307409 1.462065 -5.138504
v -0.415375 0.253185 -0.890210 0.752941 0.752941 0.752941
vn -3.353315 3.567168 -2.854749
v -0.600441 0.642788 -0.533812 0.000000 1.000000 0.000000
vn -5.130730 1.780599 -1.582083
v -0.919162 0.323653 -0.317881 0.000000 1.000000 0.000000
vn -1.144898 3.843270 -4.171122
v -0.223449 0.686099 -0.721907 0.752941 0.752941 0.752941
vn -0.991535 5.441091 -1.454840
v -0.143287 0.963273 -0.301638 0.000000 1.000000 0.000000
vn 5.131380 -1.139949 -2.118813
v 0.938366 -0.205491 -0.365196 0.752941 0.752941 0.752941
vn 2.875490 -1.819046 -4.391660
v 0.544021 -0.347070 -0.802954 0.752941 0.752941 0.752941
vn 4.525778 -3.601130 -0.274730
v 0.799559 -0.630144 -0.056333 0.752941 0.752941 0.752941
vn 1.250127 -3.837570 -4.049940
v 0.223449 -0.686099 -0.721907 0.752941 0.752941 0.752941
vn 3.198936 -4.303796 -2.086038
v 0.568591 -0.771892 -0.343297 0.752941 0.752941 0.752941
vn -0.857578 -1.469198 -5.294847
v -0.187308 -0.267522 -0.979869 0.752941 0.752941 0.752941
vn -3.158328 -2.247927 -4.280213
v -0.564054 -0.405378 -0.749705 0.752941 0.752941 0.752941
vn -5.397189 -0.800014 -2.176419
v -0.939495 -0.137963 -0.353373 0.000000 1.000000 0.000000
vn -4.099356 -3.088730 -2.858676
v -0.686938 -0.535204 -0.519371 0.752941 0.752941 0.752941
vn -5.547246 -1.363092 -0.328926
v -0.988626 -0.269261 -0.045694 0.000000 1.000000 0.000000
vn -3.407609 -4.424288 -1.578537
v -0.605470 -0.764079 -0.286901 0.752941 0.752941 0.752941
vn -0.843019 -4.558556 -3.151353
v -0.153857 -0.826487 -0.592781 0.752941 0.752941 0.752941
# 52 vertices, 0 vertices normals
f 16//16 2//2 13//13
f 16//16 32//32 2//2
f 2//2 3//3 1//1
f 1//1 3//3 21//21
f 21//21 3//3 8//8
f 2//2 5//5 3//3
f 2//2 34//34 5//5
f 3//3 5//5 4//4
f 3//3 4//4 8//8
f 5//5 6//6 4//4
f 4//4 6//6 11//11
f 5//5 34//34 6//6
f 34//34 33//33 6//6
f 22//22 21//21 7//7
f 7//7 10//10 20//20
f 20//20 10//10 50//50
f 7//7 21//21 8//8
f 7//7 8//8 9//9
f 7//7 9//9 10//10
f 10//10 9//9 12//12
f 10//10 12//12 38//38
f 8//8 11//11 9//9
f 9//9 11//11 12//12
f 8//8 4//4 11//11
f 1//1 13//13 2//2
f 1//1 14//14 13//13
f 1//1 21//21 14//14
f 14//14 15//15 13//13
f 13//13 15//15 16//16
f 21//21 17//17 14//14
f 15//15 18//18 16//16
f 16//16 18//18 43//43
f 14//14 17//17 15//15