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
iwr
amdis
Commits
0ccef766
Commit
0ccef766
authored
Oct 14, 2009
by
Thomas Witkowski
Browse files
Work on periodic boundary conditions in parallel computation.
parent
296ab263
Changes
26
Expand all
Hide whitespace changes
Inline
Side-by-side
AMDiS/libtool
View file @
0ccef766
...
...
@@ -30,10 +30,10 @@
# the same distribution terms that you use for the rest of that program.
# A sed program that does not truncate output.
SED
=
"/bin/sed"
SED
=
"/
usr/
bin/sed"
# Sed that helps us avoid accidentally triggering echo(1) options like -n.
Xsed
=
"/bin/sed -e 1s/^X//"
Xsed
=
"/
usr/
bin/sed -e 1s/^X//"
# The HP-UX ksh and POSIX shell print the target directory to stdout
# if CDPATH is set.
...
...
@@ -44,7 +44,7 @@ available_tags=" CXX F77"
# ### BEGIN LIBTOOL CONFIG
# Libtool was configured on host
NWRW15
:
# Libtool was configured on host
deimos101
:
# Shell to use when invoking shell scripts.
SHELL
=
"/bin/sh"
...
...
@@ -66,12 +66,12 @@ fast_install=yes
# The host system.
host_alias
=
host
=
i686-pc
-linux-gnu
host
=
x86_64-unknown
-linux-gnu
host_os
=
linux-gnu
# The build system.
build_alias
=
build
=
i686-pc
-linux-gnu
build
=
x86_64-unknown
-linux-gnu
build_os
=
linux-gnu
# An echo program that does not interpret backslashes.
...
...
@@ -82,13 +82,13 @@ AR="ar"
AR_FLAGS
=
"cru"
# A C compiler.
LTCC
=
"
g
cc"
LTCC
=
"
/licsoft/libraries/openmpi/1.2.6/64bit/bin/mpi
cc"
# LTCC compiler flags.
LTCFLAGS
=
"-g -O2"
# A language-specific compiler.
CC
=
"
g
cc"
CC
=
"
/licsoft/libraries/openmpi/1.2.6/64bit/bin/mpi
cc"
# Is the compiler the GNU C compiler?
with_gcc
=
yes
...
...
@@ -97,7 +97,7 @@ with_gcc=yes
EGREP
=
"grep -E"
# The linker used to build libraries.
LD
=
"/usr/
bin/ld
"
LD
=
"/usr/
x86_64-suse-linux/bin/ld -m elf_x86_64
"
# Whether we need hard or soft links.
LN_S
=
"ln -s"
...
...
@@ -171,7 +171,7 @@ dlopen_self=unknown
dlopen_self_static
=
unknown
# Compiler flag to prevent dynamic linking.
link_static_flag
=
"
-static
"
link_static_flag
=
""
# Compiler flag to turn off builtin functions.
no_builtin_flag
=
" -fno-builtin"
...
...
@@ -325,10 +325,10 @@ variables_saved_for_relink="PATH LD_LIBRARY_PATH LD_RUN_PATH GCC_EXEC_PREFIX COM
link_all_deplibs
=
unknown
# Compile-time system search path for libraries
sys_lib_search_path_spec
=
" /usr/lib/gcc/
i386-redhat
-linux/4.1.2/ /usr/lib/gcc/
i386-redhat
-linux/4.1.2/ /usr/lib/gcc/
i386-redhat
-linux/4.1.2/../../../../
i386-redhat-linux/lib/i386-redhat
-linux/4.1.2/ /usr/lib/gcc/
i386-redhat
-linux/4.1.2/../../../../
i386-redhat
-linux/lib/ /usr/lib/gcc/
i386-redhat
-linux/4.1.2/../../../
i386-redhat
-linux/4.1.2/ /usr/lib/gcc/
i386-redhat
-linux/4.1.2/../../../
/lib/i386-redhat-linux/4.1.2/ /lib/ /usr/lib/i386-redhat-linux/4.1.2
/ /usr/lib/"
sys_lib_search_path_spec
=
" /usr/lib
64
/gcc/
x86_64-suse
-linux/4.1.2/ /usr/lib/gcc/
x86_64-suse
-linux/4.1.2/ /usr/lib
64
/gcc/
x86_64-suse
-linux/4.1.2/../../../../
x86_64-suse-linux/lib/x86_64-suse
-linux/4.1.2/ /usr/lib
64
/gcc/
x86_64-suse
-linux/4.1.2/../../../../
x86_64-suse
-linux/lib/
../lib64/
/usr/lib
64
/gcc/
x86_64-suse
-linux/4.1.2/../../../
x86_64-suse
-linux/4.1.2/ /usr/lib
64
/gcc/
x86_64-suse
-linux/4.1.2/../../../
../lib64/ /lib/x86_64-suse-linux/4.1.2/ /lib/../lib64/ /usr/lib/x86_64-suse-linux/4.1.2/ /usr/lib/../lib64/ /usr/lib64/gcc/x86_64-suse-linux/4.1.2/../../../../x86_64-suse-linux/lib/ /usr/lib64/gcc/x86_64-suse-linux/4.1.2/../../../ /lib
/ /usr/lib/"
# Run-time system search path for libraries
sys_lib_dlsearch_path_spec
=
"/lib /usr/lib /usr/
lib/octave-2.9.9 /usr/lib/qt-
3.
3
/lib
/usr/lib/qt4/lib
"
sys_lib_dlsearch_path_spec
=
"/lib /usr/lib /usr/
X11R6/lib64/Xaw3d /usr/X11R6/lib64 /usr/X11R6/lib/Xaw3d /usr/X11R6/lib /usr/x86_64-suse-linux/lib /usr/local/lib64 /usr/local/lib /opt/kde3/lib64 /opt/kde3/lib /opt/gnome/lib64 /opt/gnome/lib /lib64 /lib /usr/lib64 /usr/lib /opt/cluster/intel/cce/9.1.042/lib /opt/cluster/intel/fce/9.1.036/lib /opt/cluster/Pathscale
3.
0
/lib
/2.9.99 /opt/cluster/Pathscale3.0/lib/2.9.99/32 /work/licsoft/compilers/pgi/linux86-64/6.2/lib /work/licsoft/compilers/pgi/linux86-64/6.2/libso
"
# Fix the shell variable $srcfile for the compiler.
fix_srcfile_path
=
""
...
...
@@ -6760,7 +6760,7 @@ build_old_libs=`case $build_libtool_libs in yes) $echo no;; *) $echo yes;; esac`
# End:
# ### BEGIN LIBTOOL TAG CONFIG: CXX
# Libtool was configured on host
NWRW15
:
# Libtool was configured on host
deimos101
:
# Shell to use when invoking shell scripts.
SHELL
=
"/bin/sh"
...
...
@@ -6782,12 +6782,12 @@ fast_install=yes
# The host system.
host_alias
=
host
=
i686-pc
-linux-gnu
host
=
x86_64-unknown
-linux-gnu
host_os
=
linux-gnu
# The build system.
build_alias
=
build
=
i686-pc
-linux-gnu
build
=
x86_64-unknown
-linux-gnu
build_os
=
linux-gnu
# An echo program that does not interpret backslashes.
...
...
@@ -6798,13 +6798,13 @@ AR="ar"
AR_FLAGS
=
"cru"
# A C compiler.
LTCC
=
"
g
cc"
LTCC
=
"
/licsoft/libraries/openmpi/1.2.6/64bit/bin/mpi
cc"
# LTCC compiler flags.
LTCFLAGS
=
"-g -O2"
# A language-specific compiler.
CC
=
"
g++
"
CC
=
"
/licsoft/libraries/openmpi/1.2.6/64bit/bin/mpiCC
"
# Is the compiler the GNU C compiler?
with_gcc
=
yes
...
...
@@ -6813,7 +6813,7 @@ with_gcc=yes
EGREP
=
"grep -E"
# The linker used to build libraries.
LD
=
"/usr/
bin/ld
"
LD
=
"/usr/
x86_64-suse-linux/bin/ld -m elf_x86_64
"
# Whether we need hard or soft links.
LN_S
=
"ln -s"
...
...
@@ -6887,7 +6887,7 @@ dlopen_self=unknown
dlopen_self_static
=
unknown
# Compiler flag to prevent dynamic linking.
link_static_flag
=
"
-static
"
link_static_flag
=
""
# Compiler flag to turn off builtin functions.
no_builtin_flag
=
" -fno-builtin"
...
...
@@ -6942,11 +6942,11 @@ striplib="strip --strip-unneeded"
# Dependencies to place before the objects being linked to create a
# shared library.
predep_objects
=
"/usr/lib/gcc/
i386-redhat
-linux/4.1.2/../../../crti.o /usr/lib/gcc/
i386-redhat
-linux/4.1.2/crtbeginS.o"
predep_objects
=
"/usr/lib
64
/gcc/
x86_64-suse
-linux/4.1.2/../../../
../lib64/
crti.o /usr/lib
64
/gcc/
x86_64-suse
-linux/4.1.2/crtbeginS.o"
# Dependencies to place after the objects being linked to create a
# shared library.
postdep_objects
=
"/usr/lib/gcc/
i386-redhat
-linux/4.1.2/crtendS.o /usr/lib/gcc/
i386-redhat
-linux/4.1.2/../../../crtn.o"
postdep_objects
=
"/usr/lib
64
/gcc/
x86_64-suse
-linux/4.1.2/crtendS.o /usr/lib
64
/gcc/
x86_64-suse
-linux/4.1.2/../../../
../lib64/
crtn.o"
# Dependencies to place before the objects being linked to create a
# shared library.
...
...
@@ -6954,11 +6954,11 @@ predeps=""
# Dependencies to place after the objects being linked to create a
# shared library.
postdeps
=
"-lstdc++ -lm -lgcc_s -lc -lgcc_s"
postdeps
=
"
-lmpi_cxx -lmpi -lopen-rte -lopen-pal -libverbs -lrt -lnuma -ldl -lnsl -lutil -ldl
-lstdc++ -lm -lgcc_s
-lpthread
-lc -lgcc_s"
# The library search path used internally by the compiler when linking
# a shared library.
compiler_lib_search_path
=
"-L/usr/lib
/gcc/i386-redhat
-linux/4.1.2 -L/usr/lib/gcc/
i386-redhat
-linux/4.1.2
-L/usr/lib/gcc/i386-redhat
-linux/4.1.2/../../.."
compiler_lib_search_path
=
"-L/usr/lib
64 -L/licsoft/libraries/openmpi/1.2.6/64bit/lib -L/usr/lib64/gcc/x86_64-suse
-linux/4.1.2 -L/usr/lib
64
/gcc/
x86_64-suse
-linux/4.1.2
/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib64/gcc/x86_64-suse-linux/4.1.2/../../../../x86_64-suse-linux/lib -L/usr/lib64/gcc/x86_64-suse
-linux/4.1.2/../../.."
# Method to check whether dependent libraries are shared objects.
deplibs_check_method
=
"pass_all"
...
...
@@ -7038,10 +7038,10 @@ variables_saved_for_relink="PATH LD_LIBRARY_PATH LD_RUN_PATH GCC_EXEC_PREFIX COM
link_all_deplibs
=
unknown
# Compile-time system search path for libraries
sys_lib_search_path_spec
=
" /usr/lib/gcc/
i386-redhat
-linux/4.1.2/ /usr/lib/gcc/
i386-redhat
-linux/4.1.2/ /usr/lib/gcc/
i386-redhat
-linux/4.1.2/../../../../
i386-redhat-linux/lib/i386-redhat
-linux/4.1.2/ /usr/lib/gcc/
i386-redhat
-linux/4.1.2/../../../../
i386-redhat
-linux/lib/ /usr/lib/gcc/
i386-redhat
-linux/4.1.2/../../../
i386-redhat
-linux/4.1.2/ /usr/lib/gcc/
i386-redhat
-linux/4.1.2/../../../
/lib/i386-redhat-linux/4.1.2/ /lib/ /usr/lib/i386-redhat-linux/4.1.2
/ /usr/lib/"
sys_lib_search_path_spec
=
" /usr/lib
64
/gcc/
x86_64-suse
-linux/4.1.2/ /usr/lib/gcc/
x86_64-suse
-linux/4.1.2/ /usr/lib
64
/gcc/
x86_64-suse
-linux/4.1.2/../../../../
x86_64-suse-linux/lib/x86_64-suse
-linux/4.1.2/ /usr/lib
64
/gcc/
x86_64-suse
-linux/4.1.2/../../../../
x86_64-suse
-linux/lib/
../lib64/
/usr/lib
64
/gcc/
x86_64-suse
-linux/4.1.2/../../../
x86_64-suse
-linux/4.1.2/ /usr/lib
64
/gcc/
x86_64-suse
-linux/4.1.2/../../../
../lib64/ /lib/x86_64-suse-linux/4.1.2/ /lib/../lib64/ /usr/lib/x86_64-suse-linux/4.1.2/ /usr/lib/../lib64/ /usr/lib64/gcc/x86_64-suse-linux/4.1.2/../../../../x86_64-suse-linux/lib/ /usr/lib64/gcc/x86_64-suse-linux/4.1.2/../../../ /lib
/ /usr/lib/"
# Run-time system search path for libraries
sys_lib_dlsearch_path_spec
=
"/lib /usr/lib /usr/
lib/octave-2.9.9 /usr/lib/qt-
3.
3
/lib
/usr/lib/qt4/lib
"
sys_lib_dlsearch_path_spec
=
"/lib /usr/lib /usr/
X11R6/lib64/Xaw3d /usr/X11R6/lib64 /usr/X11R6/lib/Xaw3d /usr/X11R6/lib /usr/x86_64-suse-linux/lib /usr/local/lib64 /usr/local/lib /opt/kde3/lib64 /opt/kde3/lib /opt/gnome/lib64 /opt/gnome/lib /lib64 /lib /usr/lib64 /usr/lib /opt/cluster/intel/cce/9.1.042/lib /opt/cluster/intel/fce/9.1.036/lib /opt/cluster/Pathscale
3.
0
/lib
/2.9.99 /opt/cluster/Pathscale3.0/lib/2.9.99/32 /work/licsoft/compilers/pgi/linux86-64/6.2/lib /work/licsoft/compilers/pgi/linux86-64/6.2/libso
"
# Fix the shell variable $srcfile for the compiler.
fix_srcfile_path
=
""
...
...
@@ -7065,7 +7065,7 @@ include_expsyms=""
# ### BEGIN LIBTOOL TAG CONFIG: F77
# Libtool was configured on host
NWRW15
:
# Libtool was configured on host
deimos101
:
# Shell to use when invoking shell scripts.
SHELL
=
"/bin/sh"
...
...
@@ -7087,12 +7087,12 @@ fast_install=yes
# The host system.
host_alias
=
host
=
i686-pc
-linux-gnu
host
=
x86_64-unknown
-linux-gnu
host_os
=
linux-gnu
# The build system.
build_alias
=
build
=
i686-pc
-linux-gnu
build
=
x86_64-unknown
-linux-gnu
build_os
=
linux-gnu
# An echo program that does not interpret backslashes.
...
...
@@ -7103,7 +7103,7 @@ AR="ar"
AR_FLAGS
=
"cru"
# A C compiler.
LTCC
=
"
g
cc"
LTCC
=
"
/licsoft/libraries/openmpi/1.2.6/64bit/bin/mpi
cc"
# LTCC compiler flags.
LTCFLAGS
=
"-g -O2"
...
...
@@ -7112,13 +7112,13 @@ LTCFLAGS="-g -O2"
CC
=
"g77"
# Is the compiler the GNU C compiler?
with_gcc
=
yes
with_gcc
=
# An ERE matcher.
EGREP
=
"grep -E"
# The linker used to build libraries.
LD
=
"/usr/
bin/ld
"
LD
=
"/usr/
x86_64-suse-linux/bin/ld -m elf_x86_64
"
# Whether we need hard or soft links.
LN_S
=
"ln -s"
...
...
@@ -7346,10 +7346,10 @@ variables_saved_for_relink="PATH LD_LIBRARY_PATH LD_RUN_PATH GCC_EXEC_PREFIX COM
link_all_deplibs
=
unknown
# Compile-time system search path for libraries
sys_lib_search_path_spec
=
" /usr/lib/gcc
/i386-redhat
-linux/3.
4.6
/ /usr/lib/gcc/
i386-redhat
-linux/3.
4.6
/ /usr/lib/gcc
/i386-redhat
-linux/3.
4.6
/../../../../
i386-redhat-linux/lib/i386-redhat
-linux/3.
4.6
/ /usr/lib/gcc
/i386-redhat
-linux/3.
4.6
/../../../../
i386-redhat
-linux/lib/ /usr/lib/gcc
/i386-redhat
-linux/3.
4.6
/../../../
i386-redhat
-linux/3.
4.6
/ /usr/lib/gcc
/i386-redhat
-linux/3.
4.6
/../../../ /lib/
i386-redhat
-linux/3.
4.6
/ /lib/ /usr/lib/
i386-redhat
-linux/3.
4.6
/ /usr/lib/"
sys_lib_search_path_spec
=
" /usr/lib
64
/gcc
-lib/x86_64-suse
-linux/3.
3.5
/ /usr/lib/gcc/
x86_64-suse
-linux/3.
3.5
/ /usr/lib
64
/gcc
-lib/x86_64-suse
-linux/3.
3.5
/../../../../
x86_64-suse-linux/lib/x86_64-suse
-linux/3.
3.5
/ /usr/lib
64
/gcc
-lib/x86_64-suse
-linux/3.
3.5
/../../../../
x86_64-suse
-linux/lib/ /usr/lib
64
/gcc
-lib/x86_64-suse
-linux/3.
3.5
/../../../
x86_64-suse
-linux/3.
3.5
/ /usr/lib
64
/gcc
-lib/x86_64-suse
-linux/3.
3.5
/../../../ /lib/
x86_64-suse
-linux/3.
3.5
/ /lib/ /usr/lib/
x86_64-suse
-linux/3.
3.5
/ /usr/lib/"
# Run-time system search path for libraries
sys_lib_dlsearch_path_spec
=
"/lib /usr/lib /usr/
lib/octave-2.9.9 /usr/lib/qt-
3.
3
/lib
/usr/lib/qt4/lib
"
sys_lib_dlsearch_path_spec
=
"/lib /usr/lib /usr/
X11R6/lib64/Xaw3d /usr/X11R6/lib64 /usr/X11R6/lib/Xaw3d /usr/X11R6/lib /usr/x86_64-suse-linux/lib /usr/local/lib64 /usr/local/lib /opt/kde3/lib64 /opt/kde3/lib /opt/gnome/lib64 /opt/gnome/lib /lib64 /lib /usr/lib64 /usr/lib /opt/cluster/intel/cce/9.1.042/lib /opt/cluster/intel/fce/9.1.036/lib /opt/cluster/Pathscale
3.
0
/lib
/2.9.99 /opt/cluster/Pathscale3.0/lib/2.9.99/32 /work/licsoft/compilers/pgi/linux86-64/6.2/lib /work/licsoft/compilers/pgi/linux86-64/6.2/libso
"
# Fix the shell variable $srcfile for the compiler.
fix_srcfile_path
=
""
...
...
AMDiS/src/AMDiS.h
View file @
0ccef766
...
...
@@ -92,4 +92,10 @@
#include
"VtkWriter.h"
#include
"parareal/ProblemBase.h"
#include
"parareal/AdaptParaReal.h"
#if HAVE_PARALLEL_DOMAIN_AMDIS
#include
"ParallelDomainScal.h"
#include
"ParallelDomainVec.h"
#endif
#endif
AMDiS/src/BoundaryCondition.h
View file @
0ccef766
...
...
@@ -118,6 +118,12 @@ namespace AMDiS {
return
false
;
}
/// Returns whether the boundary condition is a periodic condition or not.
virtual
bool
isPeriodic
()
{
return
false
;
}
/** \brief
* In some situations it may be required to set Dirichlet boundary conditions,
* but not to apply them to the matrix. This is for example the case, if the
...
...
AMDiS/src/BoundaryManager.cc
View file @
0ccef766
...
...
@@ -9,6 +9,9 @@
namespace
AMDiS
{
std
::
map
<
BoundaryType
,
std
::
vector
<
BoundaryCondition
*>
>
BoundaryManager
::
globalBoundaryMap
;
BoundaryManager
::
BoundaryManager
(
const
FiniteElemSpace
*
feSpace
)
{
localBounds
.
resize
(
omp_get_overall_max_threads
());
...
...
@@ -39,8 +42,7 @@ namespace AMDiS {
const
DOFVectorBase
<
double
>
*
dv
)
{
double
result
=
0.0
;
std
::
map
<
BoundaryType
,
BoundaryCondition
*>::
iterator
it
;
for
(
it
=
localBCs
.
begin
();
it
!=
localBCs
.
end
();
++
it
)
for
(
BoundaryIndexMap
::
iterator
it
=
localBCs
.
begin
();
it
!=
localBCs
.
end
();
++
it
)
if
((
*
it
).
second
)
result
+=
(
*
it
).
second
->
boundResidual
(
elInfo
,
matrix
,
dv
);
...
...
@@ -55,7 +57,6 @@ namespace AMDiS {
Vector
<
DegreeOfFreedom
>
&
dofVec
=
dofIndices
[
omp_get_thread_num
()];
const
BasisFunction
*
basisFcts
=
feSpace
->
getBasisFcts
();
int
nBasFcts
=
basisFcts
->
getNumber
();
std
::
map
<
BoundaryType
,
BoundaryCondition
*>::
iterator
it
;
// get boundaries of all DOFs
BoundaryType
*
localBound
=
localBounds
[
omp_get_thread_num
()];
...
...
@@ -65,21 +66,20 @@ namespace AMDiS {
basisFcts
->
getLocalIndicesVec
(
elInfo
->
getElement
(),
feSpace
->
getAdmin
(),
&
dofVec
);
// apply non dirichlet boundary conditions
for
(
it
=
localBCs
.
begin
();
it
!=
localBCs
.
end
();
++
it
)
for
(
BoundaryIndexMap
::
iterator
it
=
localBCs
.
begin
();
it
!=
localBCs
.
end
();
++
it
)
if
((
*
it
).
second
&&
!
(
*
it
).
second
->
isDirichlet
())
(
*
it
).
second
->
fillBoundaryCondition
(
vec
,
elInfo
,
&
dofVec
[
0
],
localBound
,
nBasFcts
);
// apply dirichlet boundary conditions
for
(
it
=
localBCs
.
begin
();
it
!=
localBCs
.
end
();
++
it
)
for
(
BoundaryIndexMap
::
iterator
it
=
localBCs
.
begin
();
it
!=
localBCs
.
end
();
++
it
)
if
((
*
it
).
second
&&
(
*
it
).
second
->
isDirichlet
())
(
*
it
).
second
->
fillBoundaryCondition
(
vec
,
elInfo
,
&
dofVec
[
0
],
localBound
,
nBasFcts
);
}
}
void
BoundaryManager
::
fillBoundaryConditions
(
ElInfo
*
elInfo
,
DOFMatrix
*
mat
)
void
BoundaryManager
::
fillBoundaryConditions
(
ElInfo
*
elInfo
,
DOFMatrix
*
mat
)
{
if
(
localBCs
.
size
()
<=
0
)
return
;
...
...
@@ -88,7 +88,6 @@ namespace AMDiS {
Vector
<
DegreeOfFreedom
>
&
dofVec
=
dofIndices
[
omp_get_thread_num
()];
const
BasisFunction
*
basisFcts
=
feSpace
->
getBasisFcts
();
int
nBasFcts
=
basisFcts
->
getNumber
();
std
::
map
<
BoundaryType
,
BoundaryCondition
*>::
iterator
it
;
// get boundaries of all DOFs
BoundaryType
*
localBound
=
localBounds
[
omp_get_thread_num
()];
...
...
@@ -99,75 +98,60 @@ namespace AMDiS {
feSpace
->
getAdmin
(),
&
dofVec
);
// apply non dirichlet boundary conditions
for
(
it
=
localBCs
.
begin
();
it
!=
localBCs
.
end
();
++
it
)
if
((
*
it
).
second
)
if
(
!
(
*
it
).
second
->
isDirichlet
())
(
*
it
).
second
->
fillBoundaryCondition
(
mat
,
elInfo
,
&
dofVec
[
0
],
localBound
,
nBasFcts
);
for
(
BoundaryIndexMap
::
iterator
it
=
localBCs
.
begin
();
it
!=
localBCs
.
end
();
++
it
)
if
((
*
it
).
second
&&
!
(
*
it
).
second
->
isDirichlet
())
(
*
it
).
second
->
fillBoundaryCondition
(
mat
,
elInfo
,
&
dofVec
[
0
],
localBound
,
nBasFcts
);
// apply dirichlet boundary conditions
for
(
it
=
localBCs
.
begin
();
it
!=
localBCs
.
end
();
++
it
)
if
((
*
it
).
second
)
if
((
*
it
).
second
->
isDirichlet
())
(
*
it
).
second
->
fillBoundaryCondition
(
mat
,
elInfo
,
&
dofVec
[
0
],
localBound
,
nBasFcts
);
for
(
BoundaryIndexMap
::
iterator
it
=
localBCs
.
begin
();
it
!=
localBCs
.
end
();
++
it
)
if
((
*
it
).
second
&&
(
*
it
).
second
->
isDirichlet
())
(
*
it
).
second
->
fillBoundaryCondition
(
mat
,
elInfo
,
&
dofVec
[
0
],
localBound
,
nBasFcts
);
}
void
BoundaryManager
::
initMatrix
(
DOFMatrix
*
matrix
)
{
std
::
map
<
BoundaryType
,
BoundaryCondition
*>::
iterator
it
;
for
(
it
=
localBCs
.
begin
();
it
!=
localBCs
.
end
();
++
it
)
if
((
*
it
).
second
)
if
(
!
(
*
it
).
second
->
isDirichlet
())
(
*
it
).
second
->
initMatrix
(
matrix
);
for
(
BoundaryIndexMap
::
iterator
it
=
localBCs
.
begin
();
it
!=
localBCs
.
end
();
++
it
)
if
((
*
it
).
second
&&
!
(
*
it
).
second
->
isDirichlet
())
(
*
it
).
second
->
initMatrix
(
matrix
);
for
(
it
=
localBCs
.
begin
();
it
!=
localBCs
.
end
();
++
it
)
if
((
*
it
).
second
)
if
((
*
it
).
second
->
isDirichlet
())
(
*
it
).
second
->
initMatrix
(
matrix
);
for
(
BoundaryIndexMap
::
iterator
it
=
localBCs
.
begin
();
it
!=
localBCs
.
end
();
++
it
)
if
((
*
it
).
second
&&
(
*
it
).
second
->
isDirichlet
())
(
*
it
).
second
->
initMatrix
(
matrix
);
}
void
BoundaryManager
::
exitMatrix
(
DOFMatrix
*
matrix
)
{
std
::
map
<
BoundaryType
,
BoundaryCondition
*>::
iterator
it
;
for
(
it
=
localBCs
.
begin
();
it
!=
localBCs
.
end
();
++
it
)
if
((
*
it
).
second
)
if
(
!
(
*
it
).
second
->
isDirichlet
())
(
*
it
).
second
->
exitMatrix
(
matrix
);
for
(
BoundaryIndexMap
::
iterator
it
=
localBCs
.
begin
();
it
!=
localBCs
.
end
();
++
it
)
if
((
*
it
).
second
&&
!
(
*
it
).
second
->
isDirichlet
())
(
*
it
).
second
->
exitMatrix
(
matrix
);
for
(
it
=
localBCs
.
begin
();
it
!=
localBCs
.
end
();
++
it
)
if
((
*
it
).
second
)
if
((
*
it
).
second
->
isDirichlet
())
(
*
it
).
second
->
exitMatrix
(
matrix
);
for
(
BoundaryIndexMap
::
iterator
it
=
localBCs
.
begin
();
it
!=
localBCs
.
end
();
++
it
)
if
((
*
it
).
second
&&
(
*
it
).
second
->
isDirichlet
())
(
*
it
).
second
->
exitMatrix
(
matrix
);
}
void
BoundaryManager
::
initVector
(
DOFVectorBase
<
double
>
*
vector
)
{
std
::
map
<
BoundaryType
,
BoundaryCondition
*>::
iterator
it
;
for
(
it
=
localBCs
.
begin
();
it
!=
localBCs
.
end
();
++
it
)
if
((
*
it
).
second
)
if
(
!
(
*
it
).
second
->
isDirichlet
())
(
*
it
).
second
->
initVector
(
vector
);
for
(
BoundaryIndexMap
::
iterator
it
=
localBCs
.
begin
();
it
!=
localBCs
.
end
();
++
it
)
if
((
*
it
).
second
&&
!
(
*
it
).
second
->
isDirichlet
())
(
*
it
).
second
->
initVector
(
vector
);
for
(
it
=
localBCs
.
begin
();
it
!=
localBCs
.
end
();
++
it
)
if
((
*
it
).
second
)
if
((
*
it
).
second
->
isDirichlet
())
(
*
it
).
second
->
initVector
(
vector
);
for
(
BoundaryIndexMap
::
iterator
it
=
localBCs
.
begin
();
it
!=
localBCs
.
end
();
++
it
)
if
((
*
it
).
second
&&
(
*
it
).
second
->
isDirichlet
())
(
*
it
).
second
->
initVector
(
vector
);
}
void
BoundaryManager
::
exitVector
(
DOFVectorBase
<
double
>
*
vector
)
{
std
::
map
<
BoundaryType
,
BoundaryCondition
*>::
iterator
it
;
for
(
it
=
localBCs
.
begin
();
it
!=
localBCs
.
end
();
++
it
)
if
((
*
it
).
second
)
if
(
!
(
*
it
).
second
->
isDirichlet
())
(
*
it
).
second
->
exitVector
(
vector
);
for
(
BoundaryIndexMap
::
iterator
it
=
localBCs
.
begin
();
it
!=
localBCs
.
end
();
++
it
)
if
((
*
it
).
second
&&
!
(
*
it
).
second
->
isDirichlet
())
(
*
it
).
second
->
exitVector
(
vector
);
for
(
it
=
localBCs
.
begin
();
it
!=
localBCs
.
end
();
++
it
)
if
((
*
it
).
second
)
if
((
*
it
).
second
->
isDirichlet
())
(
*
it
).
second
->
exitVector
(
vector
);
for
(
BoundaryIndexMap
::
iterator
it
=
localBCs
.
begin
();
it
!=
localBCs
.
end
();
++
it
)
if
((
*
it
).
second
&&
(
*
it
).
second
->
isDirichlet
())
(
*
it
).
second
->
exitVector
(
vector
);
}
}
AMDiS/src/BoundaryManager.h
View file @
0ccef766
...
...
@@ -30,6 +30,8 @@
namespace
AMDiS
{
typedef
std
::
map
<
BoundaryType
,
BoundaryCondition
*>
BoundaryIndexMap
;
/**
* \ingroup Assembler
*
...
...
@@ -50,9 +52,15 @@ namespace AMDiS {
/// Adds a local boundary condition to the list of managed conditions.
void
addBoundaryCondition
(
BoundaryCondition
*
localBC
)
{
FUNCNAME
(
"BoundaryManager::addBoundaryCondition()"
);
BoundaryType
type
=
localBC
->
getBoundaryType
();
TEST_EXIT
(
localBCs
[
type
]
==
NULL
)(
"there is already a condition for this type
\n
"
);
TEST_EXIT
(
localBCs
[
type
]
==
NULL
)
(
"There is already a condition for this type.
\n
"
);
localBCs
[
type
]
=
localBC
;
std
::
vector
<
BoundaryCondition
*>&
boundMap
=
globalBoundaryMap
[
type
];
boundMap
.
push_back
(
localBC
);
}
void
initMatrix
(
DOFMatrix
*
matrix
);
...
...
@@ -79,8 +87,7 @@ namespace AMDiS {
* Calls BoundaryCondition::boundResidual() for each boundary condition in
* \ref localBCs.
*/
double
boundResidual
(
ElInfo
*
elInfo
,
DOFMatrix
*
matrix
,
double
boundResidual
(
ElInfo
*
elInfo
,
DOFMatrix
*
matrix
,
const
DOFVectorBase
<
double
>
*
dv
);
inline
BoundaryCondition
*
getBoundaryCondition
(
BoundaryType
type
)
...
...
@@ -88,19 +95,32 @@ namespace AMDiS {
return
localBCs
[
type
];
}
const
std
::
map
<
BoundaryType
,
BoundaryCondition
*>
&
getBoundaryConditionMap
()
const
BoundaryIndexMap
&
getBoundaryConditionMap
()
{
return
localBCs
;
}
void
setBoundaryConditionMap
(
const
std
::
map
<
BoundaryType
,
BoundaryCondition
*>
&
bcs
)
void
setBoundaryConditionMap
(
const
BoundaryIndexMap
&
bcs
)
{
localBCs
=
bcs
;
}
/** \brief
* Returns true, if there is at least one boundary object with the given boundary
* id, which implements a periodic boundary.
*/
static
bool
isBoundaryPeriodic
(
BoundaryType
b
)
{
for
(
int
i
=
0
;
i
<
static_cast
<
int
>
(
globalBoundaryMap
[
b
].
size
());
i
++
)
if
(
globalBoundaryMap
[
b
][
i
]
->
isPeriodic
())
return
true
;
return
false
;
}
protected:
/// Map of managed local boundary conditions.
std
::
map
<
BoundaryType
,
BoundaryCondition
*>
localBCs
;
BoundaryIndexMap
localBCs
;
/// Temporary thread-safe variable for functions fillBoundaryconditions.
std
::
vector
<
BoundaryType
*>
localBounds
;
...
...
@@ -113,6 +133,21 @@ namespace AMDiS {
* each localBounds value. Is used to free the memory in the destructor.
*/
int
allocatedMemoryLocalBounds
;
/** \brief
* For every boundary id we store here all possible boundary object (although
* it's not clear if it is meaningful to have different boundary conditions on the
* same boundary id).
*
* We have to use this global variable, because the mesh traverse interface does
* not provide more information about traversed boundaries at elements than the
* boundary id.
*
* TODO: Change interface such that mesh traverse returns the boundary objects
* directly and we can remove this global variable. The biggest problem will be
* than serialization and deserialization of the mesh.
*/
static
std
::
map
<
BoundaryType
,
std
::
vector
<
BoundaryCondition
*>
>
globalBoundaryMap
;
};
}
...
...
AMDiS/src/DOFMatrix.cc
View file @
0ccef766
...
...
@@ -30,16 +30,18 @@ namespace AMDiS {
inserter
(
NULL
)
{}
DOFMatrix
::
DOFMatrix
(
const
FiniteElemSpace
*
row
FE
Space
_
,
const
FiniteElemSpace
*
col
FE
Space
_
,
std
::
string
n
ame_
)
:
rowFESpace
(
row
FE
Space
_
),
colFESpace
(
col
FE
Space
_
),
name
(
n
ame_
),
DOFMatrix
::
DOFMatrix
(
const
FiniteElemSpace
*
rowSpace
,
const
FiniteElemSpace
*
colSpace
,
std
::
string
n
)
:
rowFESpace
(
rowSpace
),
colFESpace
(
colSpace
),
name
(
n
),
coupleMatrix
(
false
),
inserter
(
NULL
)
{
TEST_EXIT
(
rowFESpace
)(
"no rowFESpace
\n
"
);
FUNCNAME
(
"DOFMatrix::DOFMatrix()"
);
TEST_EXIT
(
rowFESpace
)(
"No fe space for row!
\n
"
);
if
(
!
colFESpace
)
colFESpace
=
rowFESpace
;
...
...
@@ -47,7 +49,7 @@ namespace AMDiS {
if
(
rowFESpace
&&
rowFESpace
->
getAdmin
())
(
const_cast
<
DOFAdmin
*>
(
rowFESpace
->
getAdmin
()))
->
addDOFIndexed
(
this
);
boundaryManager
=
new
BoundaryManager
(
rowFESpace
_
);
boundaryManager
=
new
BoundaryManager
(
rowFESpace
);
nRow
=
rowFESpace
->
getBasisFcts
()
->
getNumber
();
nCol
=
colFESpace
->
getBasisFcts
()
->
getNumber
();
...
...
@@ -61,12 +63,14 @@ namespace AMDiS {
DOFMatrix
::
DOFMatrix
(
const
DOFMatrix
&
rhs
)
:
name
(
rhs
.
name
+
"copy"
)
{
FUNCNAME
(
"DOFMatrix::DOFMatrix()"
);
*
this
=
rhs
;
if
(
rowFESpace
&&
rowFESpace
->
getAdmin
())
(
const_cast
<
DOFAdmin
*>
(
rowFESpace
->
getAdmin
()))
->
addDOFIndexed
(
this
);
TEST_EXIT
(
rhs
.
inserter
==
0
)(
"Cannot copy during insertion"
);
inserter
=
0
;
TEST_EXIT
(
rhs
.
inserter
==
0
)(
"Cannot copy during insertion
!
\n
"
);
inserter
=
0
;
}
DOFMatrix
::~
DOFMatrix
()
...
...
@@ -87,26 +91,6 @@ namespace AMDiS {
if
(
inserter
)
inserter
->
print
();
/* using mtl::tag::major; using mtl::tag::nz; using mtl::begin; using mtl::end;
namespace traits= mtl::traits;
typedef base_matrix_type Matrix;
traits::row<Matrix>::type row(matrix);
traits::col<Matrix>::type col(matrix);
traits::const_value<Matrix>::type value(matrix);
typedef traits::range_generator<major, Matrix>::type cursor_type;
typedef traits::range_generator<nz, cursor_type>::type icursor_type;
std::cout.precision(10);
for (cursor_type cursor = begin<major>(matrix), cend = end<major>(matrix); cursor != cend; ++cursor) {
for (icursor_type icursor = begin<nz>(cursor), icend = end<nz>(cursor); icursor != icend; ++icursor)
if (value(*icursor) != 0.0)
std::cout << "(" << row(*icursor) << "," << col(*icursor) << "," << value(*icursor) << ") ";
std::cout << "\n";
}*/
}
bool
DOFMatrix
::
symmetric
()
...
...
@@ -141,9 +125,9 @@ namespace AMDiS {
int
non_symmetric
=
!
symmetric
();
if
(
non_symmetric
)
MSG
(
"
m
atrix `%s' not symmetric.
\n
"
,
name
.
data
());
MSG
(
"
M
atrix `%s' not symmetric.
\n
"
,
name
.
data
());
else
MSG
(
"
m
atrix `%s' is symmetric.
\n
"
,
name
.
data
());
MSG
(
"
M
atrix `%s' is symmetric.
\n
"
,
name
.
data
());
}
DOFMatrix
&
DOFMatrix
::
operator
=
(
const
DOFMatrix
&
rhs
)
...
...
AMDiS/src/DOFVector.cc
View file @
0ccef766
...
...
@@ -714,11 +714,13 @@ namespace AMDiS {
void
DOFVectorDOF
::
freeDOFContent
(
DegreeOfFreedom
dof
)
{
/*
std::vector<DegreeOfFreedom>::iterator it;
std::vector<DegreeOfFreedom>::iterator end = vec.end();