Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
amdis
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Backofen, Rainer
amdis
Commits
b2a88ee2
Commit
b2a88ee2
authored
Jul 03, 2009
by
Thomas Witkowski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
n
parent
9cd22562
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
134 additions
and
109 deletions
+134
-109
AMDiS/libtool
AMDiS/libtool
+35
-35
AMDiS/src/ParallelDomainProblem.cc
AMDiS/src/ParallelDomainProblem.cc
+92
-63
AMDiS/src/ParallelDomainProblem.h
AMDiS/src/ParallelDomainProblem.h
+7
-11
No files found.
AMDiS/libtool
View file @
b2a88ee2
...
...
@@ -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
p2d072
:
# 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,25 +82,25 @@ 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
gcc_dir
=
`
gcc
-print-file-name
=
.
| /bin/sed
's,/\.$,,'
`
gcc_dir
=
`
gcc
-print-file-name
=
.
| /
usr/
bin/sed
's,/\.$,,'
`
gcc_ver
=
`
gcc
-dumpversion
`
# 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"
...
...
@@ -174,7 +174,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"
...
...
@@ -328,10 +328,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
=
`
echo
"
/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/
"
|
$SED
-e
"s@
${
gcc_dir
}
@
\$
{gcc_dir}@g;s@
${
gcc_ver
}
@
\$
{gcc_ver}@g"
`
sys_lib_search_path_spec
=
`
echo
"
/lib64 /usr/lib64 /usr/local/lib64
"
|
$SED
-e
"s@
${
gcc_dir
}
@
\$
{gcc_dir}@g;s@
${
gcc_ver
}
@
\$
{gcc_ver}@g"
`
# 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
"
sys_lib_dlsearch_path_spec
=
"/lib
64 /usr/lib64 /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/Pathscale3.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
=
""
...
...
@@ -6763,7 +6763,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
p2d072
:
# Shell to use when invoking shell scripts.
SHELL
=
"/bin/sh"
...
...
@@ -6785,12 +6785,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.
...
...
@@ -6801,25 +6801,25 @@ 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
gcc_dir
=
`
gcc
-print-file-name
=
.
| /bin/sed
's,/\.$,,'
`
gcc_dir
=
`
gcc
-print-file-name
=
.
| /
usr/
bin/sed
's,/\.$,,'
`
gcc_ver
=
`
gcc
-dumpversion
`
# 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"
...
...
@@ -6893,7 +6893,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"
...
...
@@ -6948,11 +6948,11 @@ striplib="strip --strip-unneeded"
# Dependencies to place before the objects being linked to create a
# shared library.
predep_objects
=
`
echo
"/usr/lib
/gcc/i386-redhat-linux/4.1.2/../../../crti.o /usr/lib/gcc/i386-redhat
-linux/4.1.2/crtbeginS.o"
|
$SED
-e
"s@
${
gcc_dir
}
@
\$
{gcc_dir}@g;s@
${
gcc_ver
}
@
\$
{gcc_ver}@g"
`
predep_objects
=
`
echo
"/usr/lib
64/gcc/x86_64-suse-linux/4.1.2/../../../../lib64/crti.o /usr/lib64/gcc/x86_64-suse
-linux/4.1.2/crtbeginS.o"
|
$SED
-e
"s@
${
gcc_dir
}
@
\$
{gcc_dir}@g;s@
${
gcc_ver
}
@
\$
{gcc_ver}@g"
`
# Dependencies to place after the objects being linked to create a
# shared library.
postdep_objects
=
`
echo
"/usr/lib
/gcc/i386-redhat-linux/4.1.2/crtendS.o /usr/lib/gcc/i386-redhat-linux/4.1.2/../../..
/crtn.o"
|
$SED
-e
"s@
${
gcc_dir
}
@
\$
{gcc_dir}@g;s@
${
gcc_ver
}
@
\$
{gcc_ver}@g"
`
postdep_objects
=
`
echo
"/usr/lib
64/gcc/x86_64-suse-linux/4.1.2/crtendS.o /usr/lib64/gcc/x86_64-suse-linux/4.1.2/../../../../lib64
/crtn.o"
|
$SED
-e
"s@
${
gcc_dir
}
@
\$
{gcc_dir}@g;s@
${
gcc_ver
}
@
\$
{gcc_ver}@g"
`
# Dependencies to place before the objects being linked to create a
# shared library.
...
...
@@ -6960,11 +6960,11 @@ predeps=""
# Dependencies to place after the objects being linked to create a
# shared library.
postdeps
=
"-l
stdc++ -lm -lgcc_s
-lc -lgcc_s"
postdeps
=
"-l
mpi_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
=
`
echo
"-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/../../.."
|
$SED
-e
"s@
${
gcc_dir
}
@
\$
{gcc_dir}@g;s@
${
gcc_ver
}
@
\$
{gcc_ver}@g"
`
compiler_lib_search_path
=
`
echo
"-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/lib64/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/../../.."
|
$SED
-e
"s@
${
gcc_dir
}
@
\$
{gcc_dir}@g;s@
${
gcc_ver
}
@
\$
{gcc_ver}@g"
`
# Method to check whether dependent libraries are shared objects.
deplibs_check_method
=
"pass_all"
...
...
@@ -7044,10 +7044,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
=
`
echo
"
/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/
"
|
$SED
-e
"s@
${
gcc_dir
}
@
\$
{gcc_dir}@g;s@
${
gcc_ver
}
@
\$
{gcc_ver}@g"
`
sys_lib_search_path_spec
=
`
echo
"
/lib64 /usr/lib64 /usr/local/lib64
"
|
$SED
-e
"s@
${
gcc_dir
}
@
\$
{gcc_dir}@g;s@
${
gcc_ver
}
@
\$
{gcc_ver}@g"
`
# 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
"
sys_lib_dlsearch_path_spec
=
"/lib
64 /usr/lib64 /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/Pathscale3.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
=
""
...
...
@@ -7071,7 +7071,7 @@ include_expsyms=""
# ### BEGIN LIBTOOL TAG CONFIG: F77
# Libtool was configured on host
NWRW15
:
# Libtool was configured on host
p2d072
:
# Shell to use when invoking shell scripts.
SHELL
=
"/bin/sh"
...
...
@@ -7093,12 +7093,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.
...
...
@@ -7109,7 +7109,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"
...
...
@@ -7118,16 +7118,16 @@ LTCFLAGS="-g -O2"
CC
=
"g77"
# Is the compiler the GNU C compiler?
with_gcc
=
yes
with_gcc
=
gcc_dir
=
`
gcc
-print-file-name
=
.
| /bin/sed
's,/\.$,,'
`
gcc_dir
=
`
gcc
-print-file-name
=
.
| /
usr/
bin/sed
's,/\.$,,'
`
gcc_ver
=
`
gcc
-dumpversion
`
# 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"
...
...
@@ -7355,10 +7355,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
=
`
echo
"
/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/
"
|
$SED
-e
"s@
${
gcc_dir
}
@
\$
{gcc_dir}@g;s@
${
gcc_ver
}
@
\$
{gcc_ver}@g"
`
sys_lib_search_path_spec
=
`
echo
"
/lib64 /usr/lib64 /usr/local/lib64
"
|
$SED
-e
"s@
${
gcc_dir
}
@
\$
{gcc_dir}@g;s@
${
gcc_ver
}
@
\$
{gcc_ver}@g"
`
# 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
"
sys_lib_dlsearch_path_spec
=
"/lib
64 /usr/lib64 /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/Pathscale3.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/ParallelDomainProblem.cc
View file @
b2a88ee2
...
...
@@ -36,7 +36,8 @@ namespace AMDiS {
mesh
(
fe
->
getMesh
()),
refinementManager
(
refineManager
),
initialPartitionMesh
(
true
),
nRankDOFs
(
0
)
nRankDOFs
(
0
),
rstart
(
0
)
{
FUNCNAME
(
"ParallelDomainBase::ParalleDomainBase()"
);
...
...
@@ -84,22 +85,19 @@ namespace AMDiS {
createLocalGlobalNumbering
(
rankDOFs
,
boundaryDOFs
,
nRankDOFs
,
nOverallDOFs
);
// === Create interior boundary information ===
createInteriorBoundaryInfo
(
rankDOFs
,
boundaryDOFs
);
// === Remove all macro elements that are not part of the rank partition. ===
removeMacroElements
();
#if (DEBUG != 0)
DbgTestElementMap
(
elMap
);
DbgTestInteriorBoundary
();
#endif
exit
(
0
);
// === Remove all macro elements that are not part of the rank partition. ===
removeMacroElements
();
// === Reset all DOFAdmins of the mesh. ===
int
nAdmins
=
mesh
->
getNumberOfDOFAdmin
();
...
...
@@ -132,8 +130,6 @@ namespace AMDiS {
DbgTestCommonDofs
();
#endif
exit
(
0
);
// === Create petsc matrix. ===
int
ierr
;
...
...
@@ -238,11 +234,14 @@ namespace AMDiS {
DOFVector
<
double
>::
Iterator
dofIt
(
vec
,
USED_DOFS
);
int
counter
=
0
;
for
(
dofIt
.
reset
();
!
dofIt
.
end
();
++
dofIt
)
*
dofIt
=
vecPointer
[
counter
++
];
for
(
dofIt
.
reset
();
!
dofIt
.
end
();
++
dofIt
)
{
*
dofIt
=
vecPointer
[
mapGlobalLocalDOFs
[
rstart
+
counter
]];
counter
++
;
}
VecRestoreArray
(
petscSolVec
,
&
vecPointer
);
#if 0
std::vector<double*> sendBuffers(sendDofs.size());
std::vector<double*> recvBuffers(recvDofs.size());
...
...
@@ -291,6 +290,7 @@ namespace AMDiS {
for (int i = 0; i < static_cast<int>(sendBuffers.size()); i++)
delete [] sendBuffers[i];
#endif
}
...
...
@@ -517,20 +517,50 @@ namespace AMDiS {
// Stores to each DOF pointer the set of ranks the DOF is part of.
std
::
map
<
const
DegreeOfFreedom
*
,
std
::
set
<
int
>
>
partitionDOFs
;
DofContainer
rankAllDofs
;
createDOFMemberInfo
(
partitionDOFs
,
rankDOFs
,
boundaryDOFs
);
createDOFMemberInfo
(
partitionDOFs
,
rankDOFs
,
rankAllDofs
,
boundaryDOFs
);
nRankDOFs
=
rankDOFs
.
size
();
nOverallDOFs
=
partitionDOFs
.
size
();
// === Get starting position for global rank dof ordering. ====
int
rstart
=
0
;
//
int rstart = 0;
mpiComm
.
Scan
(
&
nRankDOFs
,
&
rstart
,
1
,
MPI_INT
,
MPI_SUM
);
rstart
-=
nRankDOFs
;
typedef
std
::
map
<
const
DegreeOfFreedom
*
,
DegreeOfFreedom
>
DofIndexMap
;
DofIndexMap
rankDofsNewLocalIndex
,
rankDofsNewGlobalIndex
;
int
i
=
0
;
for
(
DofContainer
::
iterator
dofIt
=
rankAllDofs
.
begin
();
dofIt
!=
rankAllDofs
.
end
();
++
dofIt
)
{
rankDofsNewLocalIndex
[
*
dofIt
]
=
i
++
;
isRankDof
[
i
]
=
true
;
}
i
=
0
;
for
(
DofContainer
::
iterator
dofIt
=
rankDOFs
.
begin
();
dofIt
!=
rankDOFs
.
end
();
++
dofIt
)
{
rankDofsNewGlobalIndex
[
*
dofIt
]
=
i
+
rstart
;
i
++
;
}
if
(
mpiRank
==
0
)
{
for
(
DofContainer
::
iterator
dofIt
=
rankAllDofs
.
begin
();
dofIt
!=
rankAllDofs
.
end
();
++
dofIt
)
{
std
::
cout
<<
"OLD DOF = "
<<
**
dofIt
<<
" NEW L DOF = "
<<
rankDofsNewLocalIndex
[
*
dofIt
];
if
(
rankDofsNewGlobalIndex
.
find
(
*
dofIt
)
!=
rankDofsNewGlobalIndex
.
end
())
std
::
cout
<<
" NEW G DOF = "
<<
rankDofsNewGlobalIndex
[
*
dofIt
];
std
::
cout
<<
std
::
endl
;
}
}
exit
(
0
);
// === Create information which dof indices must be send and which must ===
// === be received. ===
...
...
@@ -549,21 +579,16 @@ namespace AMDiS {
if
(
it
->
second
==
mpiRank
)
{
// If the boundary dof is a rank dof, it must be send to other ranks.
// search for new dof index in ranks partition for this boundary dof
DegreeOfFreedom
newDofIndex
=
0
;
for
(
int
i
=
0
;
i
<
nRankDOFs
;
i
++
)
{
if
(
rankDOFs
[
i
]
==
it
->
first
)
{
newDofIndex
=
rstart
+
i
;
break
;
}
}
// Search for all ranks that have this dof too.
for
(
std
::
set
<
int
>::
iterator
itRanks
=
partitionDOFs
[
it
->
first
].
begin
();
itRanks
!=
partitionDOFs
[
it
->
first
].
end
();
++
itRanks
)
{
if
(
*
itRanks
!=
mpiRank
)
sendNewDofs
[
*
itRanks
][
it
->
first
]
=
newDofIndex
;
if
(
*
itRanks
!=
mpiRank
)
{
TEST_EXIT_DBG
(
rankDofsNewGlobalIndex
.
count
(
it
->
first
)
==
1
)
(
"DOF Key not found!
\n
"
);
sendNewDofs
[
*
itRanks
][
it
->
first
]
=
rankDofsNewGlobalIndex
[
it
->
first
];
}
}
}
else
{
// If the boundary dof is not a rank dof, its new dof index, and later
...
...
@@ -575,6 +600,7 @@ namespace AMDiS {
}
}
// === Send and receive the dof indices at boundary. ===
std
::
vector
<
int
*>
sendBuffers
(
sendNewDofs
.
size
()),
recvBuffers
(
recvNewDofs
.
size
());
...
...
@@ -585,7 +611,7 @@ namespace AMDiS {
MPI
::
Request
request
[
sendNewDofs
.
size
()
+
recvNewDofs
.
size
()];
int
requestCounter
=
0
;
i
nt
i
=
0
;
i
=
0
;
for
(
std
::
map
<
int
,
std
::
map
<
const
DegreeOfFreedom
*
,
DegreeOfFreedom
>
>::
iterator
sendIt
=
sendNewDofs
.
begin
();
sendIt
!=
sendNewDofs
.
end
();
...
...
@@ -637,15 +663,8 @@ namespace AMDiS {
mapLocalGlobalDOFs
.
clear
();
mapGlobalLocalDOFs
.
clear
();
isRankD
OF
.
clear
();
isRankD
of
.
clear
();
for
(
int
i
=
0
;
i
<
nRankDOFs
;
i
++
)
{
*
const_cast
<
DegreeOfFreedom
*>
(
rankDOFs
[
i
])
=
i
;
mapLocalGlobalDOFs
[
i
]
=
rstart
+
i
;
mapGlobalLocalDOFs
[
rstart
+
i
]
=
i
;
isRankDOF
[
i
]
=
true
;
}
#if 0
// === Change dof indices at boundary from other ranks. ===
// Within this small data structure we track which dof index was already changed.
...
...
@@ -669,7 +688,6 @@ namespace AMDiS {
DegreeOfFreedom
oldDof
=
recvBuffers
[
i
][
j
*
2
];
DegreeOfFreedom
newGlobalDof
=
recvBuffers
[
i
][
j
*
2
+
1
];
DegreeOfFreedom newLocalDof = mapLocalGlobalDOFs.size();
bool
found
=
false
;
...
...
@@ -682,11 +700,9 @@ namespace AMDiS {
dofChanged
[
dofIt
->
first
]
=
true
;
recvDofs
[
recvIt
->
first
].
push_back
(
dofIt
->
first
);
*(const_cast<DegreeOfFreedom*>(dofIt->first)) = newLocalDof;
rankDofsNewGlobalIndex
[
dofIt
->
first
]
=
newGlobalDof
;
isRankDof
[
rankDofsNewLocalIndex
[
dofIt
->
first
]]
=
false
;
mapLocalGlobalDOFs[newLocalDof] = newGlobalDof;
mapGlobalLocalDOFs[newGlobalDof] = newLocalDof;
isRankDOF[newLocalDof] = false;
found
=
true
;
break
;
}
...
...
@@ -697,7 +713,16 @@ namespace AMDiS {
delete
[]
recvBuffers
[
i
];
}
#endif
for
(
DofIndexMap
::
iterator
dofIt
=
rankDofsNewLocalIndex
.
begin
();
dofIt
!=
rankDofsNewLocalIndex
.
end
();
++
dofIt
)
{
DegreeOfFreedom
localDof
=
dofIt
->
second
;
DegreeOfFreedom
globalDof
=
rankDofsNewGlobalIndex
[
dofIt
->
first
];
*
const_cast
<
DegreeOfFreedom
*>
(
dofIt
->
first
)
=
localDof
;
mapLocalGlobalDOFs
[
localDof
]
=
globalDof
;
mapGlobalLocalDOFs
[
globalDof
]
=
localDof
;
}
}
...
...
@@ -867,7 +892,7 @@ namespace AMDiS {
mapLocalGlobalDOFs
.
clear
();
mapGlobalLocalDOFs
.
clear
();
isRankD
OF
.
clear
();
isRankD
of
.
clear
();
int
i
=
0
;
for
(
std
::
set
<
const
DegreeOfFreedom
*>::
iterator
dofIt
=
rankDOFs
.
begin
();
...
...
@@ -875,7 +900,7 @@ namespace AMDiS {
*
(
const_cast
<
DegreeOfFreedom
*>
(
*
dofIt
))
=
i
;
mapLocalGlobalDOFs
[
i
]
=
rstart
+
i
;
mapGlobalLocalDOFs
[
rstart
+
i
]
=
i
;
isRankD
OF
[
i
]
=
true
;
isRankD
of
[
i
]
=
true
;
}
// === Send new DOF indices. ===
...
...
@@ -927,7 +952,7 @@ namespace AMDiS {
(
*
const_cast
<
DegreeOfFreedom
*>
(
*
dofIt
))
=
newDofIndex
;
mapLocalGlobalDOFs
[
newDofIndex
]
=
recvBuffers
[
i
][
j
];
mapGlobalLocalDOFs
[
recvBuffers
[
i
][
j
]]
=
newDofIndex
;
isRankD
OF
[
newDofIndex
]
=
false
;
isRankD
of
[
newDofIndex
]
=
false
;
newDofIndex
++
;
j
++
;
}
...
...
@@ -1026,10 +1051,16 @@ namespace AMDiS {
}
void
ParallelDomainBase
::
createDOFMemberInfo
(
DofToPartitions
&
partitionDOFs
,
DofContainer
&
rankDOFs
,
DofToRank
&
boundaryDOFs
)
void
ParallelDomainBase
::
createDOFMemberInfo
(
DofToPartitions
&
partitionDofs
,
DofContainer
&
rankOwnedDofs
,
DofContainer
&
rankAllDofs
,
DofToRank
&
boundaryDofs
)
{
partitionDofs
.
clear
();
rankOwnedDofs
.
clear
();
rankAllDofs
.
clear
();
boundaryDofs
.
clear
();
// === Determine to each dof the set of partitions the dof belongs to. ===
ElementDofIterator
elDofIt
(
feSpace
);
...
...
@@ -1041,7 +1072,7 @@ namespace AMDiS {
elDofIt
.
reset
(
element
);
do
{
// Determine to each dof the partition(s) it corresponds to.
partitionD
OF
s
[
elDofIt
.
getDofPtr
()].
insert
(
partitionVec
[
element
->
getIndex
()]);
partitionD
of
s
[
elDofIt
.
getDofPtr
()].
insert
(
partitionVec
[
element
->
getIndex
()]);
}
while
(
elDofIt
.
next
());
elInfo
=
stack
.
traverseNext
(
elInfo
);
...
...
@@ -1051,18 +1082,18 @@ namespace AMDiS {
// === Determine the set of ranks dofs and the dofs ownership at the boundary. ===
// iterate over all DOFs
for
(
DofToPartitions
::
iterator
it
=
partitionDOFs
.
begin
();
it
!=
partitionDOFs
.
end
();
++
it
)
{
for
(
DofToPartitions
::
iterator
it
=
partitionDofs
.
begin
();
it
!=
partitionDofs
.
end
();
++
it
)
{
// iterate over all partition the current DOF is part of.
for
(
std
::
set
<
int
>::
iterator
itpart1
=
it
->
second
.
begin
();
itpart1
!=
it
->
second
.
end
();
++
itpart1
)
{
itpart1
!=
it
->
second
.
end
();
++
itpart1
)
{
if
(
*
itpart1
==
mpiRank
)
{
rankAllDofs
.
push_back
(
it
->
first
);
if
(
it
->
second
.
size
()
==
1
)
{
rank
DOF
s
.
push_back
(
it
->
first
);
rank
OwnedDof
s
.
push_back
(
it
->
first
);
}
else
{
// This dof is at the ranks boundary. It is owned by the rank only if
// the rank number is the highest of all ranks containing this dof.
...
...
@@ -1070,8 +1101,7 @@ namespace AMDiS {
bool
insert
=
true
;
int
highestRank
=
mpiRank
;
for
(
std
::
set
<
int
>::
iterator
itpart2
=
it
->
second
.
begin
();
itpart2
!=
it
->
second
.
end
();
++
itpart2
)
{
itpart2
!=
it
->
second
.
end
();
++
itpart2
)
{
if
(
*
itpart2
>
mpiRank
)
insert
=
false
;
...
...
@@ -1080,9 +1110,9 @@ namespace AMDiS {
}
if
(
insert
)
rank
DOF
s
.
push_back
(
it
->
first
);
rank
OwnedDof
s
.
push_back
(
it
->
first
);
boundaryD
OF
s
[
it
->
first
]
=
highestRank
;
boundaryD
of
s
[
it
->
first
]
=
highestRank
;
}
break
;
...
...
@@ -1091,7 +1121,8 @@ namespace AMDiS {
}
}
sort
(
rankDOFs
.
begin
(),
rankDOFs
.
end
(),
cmpDofsByValue
);
sort
(
rankAllDofs
.
begin
(),
rankAllDofs
.
end
(),
cmpDofsByValue
);
sort
(
rankOwnedDofs
.
begin
(),
rankOwnedDofs
.
end
(),
cmpDofsByValue
);
}
...
...
@@ -1107,7 +1138,6 @@ namespace AMDiS {
ElInfo
*
elInfo
=
stack
.
traverseFirst
(
mesh
,
-
1
,
Mesh
::
CALL_LEAF_EL
);
while
(
elInfo
)
{
Element
*
el
=
elInfo
->
getElement
();
if
(
mpiRank
==
0
)
std
::
cout
<<
"EL = "
<<
el
->
getIndex
()
<<
std
::
endl
;
orderDOFs
(
el
->
getDOF
(
0
),
el
->
getDOF
(
1
),
el
->
getDOF
(
2
),
elMap
[
el
->
getIndex
()]);
elInfo
=
stack
.
traverseNext
(
elInfo
);
}
...
...
@@ -1124,7 +1154,6 @@ namespace AMDiS {
ElInfo
*
elInfo
=
stack
.
traverseFirst
(
mesh
,
-
1
,
Mesh
::
CALL_LEAF_EL
);
while
(
elInfo
)
{
Element
*
el
=
elInfo
->
getElement
();
if
(
mpiRank
==
0
)
std
::
cout
<<
"EL = "
<<
el
->
getIndex
()
<<
std
::
endl
;
orderDOFs
(
el
->
getDOF
(
0
),
el
->
getDOF
(
1
),
el
->
getDOF
(
2
),
vec
);
for
(
int
i
=
0
;
i
<
3
;
i
++
)
{
if
(
elMap
[
el
->
getIndex
()][
i
]
!=
vec
[
i
])
{
...
...
@@ -1359,7 +1388,7 @@ namespace AMDiS {
TEST_EXIT
(
m
)(
"No DOF Matrix!
\n
"
);
m
->
setIsRankDOF
(
isRankD
OF
);
m
->
setIsRankDOF
(
isRankD
of
);
}
void
ParallelDomainScal
::
solve
()
...
...
AMDiS/src/ParallelDomainProblem.h
View file @
b2a88ee2
...
...
@@ -200,9 +200,10 @@ namespace AMDiS {
* \param[out] boundaryDOFs Stores all DOFs in ranks partition that are on an
* interior boundary but correspond to another rank.
*/
void
createDOFMemberInfo
(
DofToPartitions
&
partitionDOFs
,
DofContainer
&
rankDOFs
,
DofToRank
&
boundaryDOFs
);
void
createDOFMemberInfo
(
DofToPartitions
&
partitionDofs
,
DofContainer
&
rankOwnedDofs
,
DofContainer
&
rankAllDofs
,
DofToRank
&
boundaryDofs
);
void
DbgCreateElementMap
(
ElementIdxToDofs
&
elMap
);
...
...
@@ -225,13 +226,6 @@ namespace AMDiS {
{
vec
.
resize
(
3
);
if
(
mpiRank
==
0
)
std
::
cout
<<
"DOFS are: "
<<
dof1
<<
" = "
<<
*
dof1
<<
" "
<<
dof2
<<
" = "
<<
*
dof2
<<
" "
<<
dof3
<<
" = "
<<
*
dof3
<<
" "
<<
std
::
endl
;
if
(
*
dof1
<
*
dof2
&&
*
dof1
<
*
dof3
)
vec
[
0
]
=
dof1
;
else
if
(
*
dof2
<
*
dof1
&&
*
dof2
<
*
dof3
)
...
...
@@ -364,7 +358,9 @@ namespace AMDiS {