Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
A
amdis
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
iwr
amdis
Commits
8698e7fe
Commit
8698e7fe
authored
13 years ago
by
Thomas Witkowski
Browse files
Options
Downloads
Patches
Plain Diff
Initfiles in AMDiS code style.
parent
f025c9bb
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
3
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
AMDiS/src/Initfile.cc
+149
-138
149 additions, 138 deletions
AMDiS/src/Initfile.cc
AMDiS/src/Initfile.h
+480
-375
480 additions, 375 deletions
AMDiS/src/Initfile.h
AMDiS/src/UmfPackSolver.h
+7
-5
7 additions, 5 deletions
AMDiS/src/UmfPackSolver.h
with
636 additions
and
518 deletions
AMDiS/src/Initfile.cc
+
149
−
138
View file @
8698e7fe
...
...
@@ -8,153 +8,164 @@ using namespace std;
namespace
AMDiS
{
/// the small parser for the initfile. see description of read(Initfile&, istream&)
struct
Parser
{
Parser
(
const
string
&
line
)
{
size_t
pos
=
line
.
find
(
':'
);
if
(
pos
==
string
::
npos
)
throw
runtime_error
(
"cannot find the delimiter ':' in line '"
+
line
+
"'"
);
name
=
line
.
substr
(
0
,
pos
);
value
=
line
.
substr
(
pos
+
1
,
line
.
length
()
-
(
pos
+
1
));
// remove everything after the %
pos
=
value
.
find
(
'%'
);
if
(
pos
!=
string
::
npos
)
{
value
=
value
.
substr
(
0
,
pos
);
}
}
string
name
;
string
value
;
};
Initfile
*
Initfile
::
singlett
=
NULL
;
std
::
set
<
std
::
string
>
Initfile
::
fn_include_list
;
/// initialize singleton object an global parameters
void
Initfile
::
init
(
std
::
string
in
)
{
initIntern
();
singlett
->
clear
();
fn_include_list
.
clear
();
singlett
->
read
(
in
);
singlett
->
getInternalParameters
();
/// the small parser for the initfile. see description of read(Initfile&, istream&)
struct
Parser
{
Parser
(
const
string
&
line
)
{
size_t
pos
=
line
.
find
(
':'
);
if
(
pos
==
string
::
npos
)
throw
runtime_error
(
"cannot find the delimiter ':' in line '"
+
line
+
"'"
);
name
=
line
.
substr
(
0
,
pos
);
value
=
line
.
substr
(
pos
+
1
,
line
.
length
()
-
(
pos
+
1
));
// remove everything after the %
pos
=
value
.
find
(
'%'
);
if
(
pos
!=
string
::
npos
)
value
=
value
.
substr
(
0
,
pos
);
}
string
name
;
string
value
;
};
Initfile
*
Initfile
::
singlett
=
NULL
;
std
::
set
<
std
::
string
>
Initfile
::
fn_include_list
;
/// initialize singleton object an global parameters
void
Initfile
::
init
(
std
::
string
in
)
{
initIntern
();
singlett
->
clear
();
fn_include_list
.
clear
();
singlett
->
read
(
in
);
singlett
->
getInternalParameters
();
// initialize global strcutures using parameters
Global
::
init
();
};
/// Fill an initfile from a file with filename fn
void
Initfile
::
read
(
std
::
string
fn
)
{
// read file if its not parsed already
if
(
fn_include_list
.
find
(
fn
)
==
fn_include_list
.
end
())
{
std
::
ifstream
inputFile
;
inputFile
.
open
(
fn
.
c_str
(),
std
::
ios
::
in
);
if
(
!
inputFile
.
is_open
())
throw
runtime_error
(
"init-file cannot be opened for reading"
);
// initialize global strcutures using parameters
Global
::
init
();
}
/// Fill an initfile from a file with filename fn
void
Initfile
::
read
(
std
::
string
fn
)
{
// read file if its not parsed already
if
(
fn_include_list
.
find
(
fn
)
==
fn_include_list
.
end
())
{
std
::
ifstream
inputFile
;
inputFile
.
open
(
fn
.
c_str
(),
std
::
ios
::
in
);
if
(
!
inputFile
.
is_open
())
throw
runtime_error
(
"init-file cannot be opened for reading"
);
fn_include_list
.
insert
(
fn
);
read
(
inputFile
);
}
};
/// Fill an initfile from an input stream
void
Initfile
::
read
(
istream
&
in
)
{
unsigned
line_length
=
256
;
char
swap
[
line_length
];
in
.
getline
(
swap
,
line_length
);
while
(
in
.
good
())
{
std
::
string
whitespaces
=
"
\t\r\f
"
;
std
::
string
sw
(
swap
);
size_t
pos0
=
sw
.
find_first_not_of
(
whitespaces
);
fn_include_list
.
insert
(
fn
);
read
(
inputFile
);
}
}
/// Fill an initfile from an input stream
void
Initfile
::
read
(
istream
&
in
)
{
unsigned
line_length
=
256
;
char
swap
[
line_length
];
in
.
getline
(
swap
,
line_length
);
while
(
in
.
good
())
{
std
::
string
whitespaces
=
"
\t\r\f
"
;
std
::
string
sw
(
swap
);
size_t
pos0
=
sw
.
find_first_not_of
(
whitespaces
);
if
(
pos0
!=
std
::
string
::
npos
&&
sw
[
pos0
]
!=
'%'
&&
sw
[
pos0
]
!=
'#'
&&
sw
[
pos0
]
!=
0
)
{
// parse line and extract map: tag->value
Parser
parser
(
sw
);
operator
[](
parser
.
name
)
=
parser
.
value
;
}
else
if
(
sw
[
pos0
]
==
'#'
&&
static_cast
<
size_t
>
(
sw
.
find
(
"#include"
))
==
pos0
)
{
// include file by '#include "filename"' or '#include <filename>'
size_t
pos
=
sw
.
find_first_not_of
(
whitespaces
,
std
::
string
(
"#include"
).
size
()
+
1
);
size_t
epos
=
0
;
std
::
string
fn
=
""
;
std
::
stringstream
errorMsg
;
switch
(
char
c
=
swap
[
pos
++
])
{
case
'<'
:
c
=
'>'
;
case
'\"'
:
whitespaces
+=
c
;
epos
=
sw
.
find_first_of
(
whitespaces
,
pos
);
fn
=
sw
.
substr
(
pos
,
epos
-
pos
);
if
(
pos0
!=
std
::
string
::
npos
&&
sw
[
pos0
]
!=
'%'
&&
sw
[
pos0
]
!=
'#'
&&
sw
[
pos0
]
!=
0
)
{
// parse line and extract map: tag->value
Parser
parser
(
sw
);
operator
[](
parser
.
name
)
=
parser
.
value
;
}
else
if
(
sw
[
pos0
]
==
'#'
&&
static_cast
<
size_t
>
(
sw
.
find
(
"#include"
))
==
pos0
)
{
// include file by '#include "filename"' or '#include <filename>'
size_t
pos
=
sw
.
find_first_not_of
(
whitespaces
,
std
::
string
(
"#include"
).
size
()
+
1
);
size_t
epos
=
0
;
std
::
string
fn
=
""
;
std
::
stringstream
errorMsg
;
switch
(
char
c
=
swap
[
pos
++
])
{
case
'<'
:
c
=
'>'
;
case
'\"'
:
whitespaces
+=
c
;
epos
=
sw
.
find_first_of
(
whitespaces
,
pos
);
fn
=
sw
.
substr
(
pos
,
epos
-
pos
);
if
(
sw
[
epos
]
!=
c
)
{
errorMsg
<<
"filename in #include not terminated by "
<<
c
;
throw
std
::
runtime_error
(
errorMsg
.
str
());
}
break
;
default
:
throw
std
::
runtime_error
(
"no filename given for #include"
);
}
read
(
fn
);
}
in
.
getline
(
swap
,
line_length
);
}
};
void
Initfile
::
readArgv
(
int
argc
,
char
**
argv
)
{
for
(
int
i
=
0
;
i
<
argc
;
++
i
)
{
if
(
strcmp
(
"-rs"
,
argv
[
i
])
==
0
)
{
std
::
string
input
(
argv
[
i
+
1
]);
add
(
"argv->rs"
,
input
,
0
);
}
if
(
sw
[
epos
]
!=
c
)
{
errorMsg
<<
"filename in #include not terminated by "
<<
c
;
throw
std
::
runtime_error
(
errorMsg
.
str
());
}
break
;
default
:
throw
std
::
runtime_error
(
"no filename given for #include"
);
}
}
read
(
fn
);
}
in
.
getline
(
swap
,
line_length
);
}
}
/// read standard values for output and information of parameter-values
void
Initfile
::
getInternalParameters
()
{
int
val
=
0
;
get
(
"level of information"
,
val
,
0
);
msgInfo
=
val
;
val
=
1
;
get
(
"WAIT"
,
val
,
0
);
msgWait
=
val
;
void
Initfile
::
readArgv
(
int
argc
,
char
**
argv
)
{
for
(
int
i
=
0
;
i
<
argc
;
i
++
)
{
if
(
strcmp
(
"-rs"
,
argv
[
i
])
==
0
)
{
std
::
string
input
(
argv
[
i
+
1
]);
add
(
"argv->rs"
,
input
,
0
);
}
}
}
/// read standard values for output and information of parameter-values
void
Initfile
::
getInternalParameters
()
{
int
val
=
0
;
get
(
"level of information"
,
val
,
0
);
msgInfo
=
val
;
val
=
1
;
get
(
"
parameter information
"
,
val
,
0
);
paramInfo
=
val
;
val
=
1
;
get
(
"
WAIT
"
,
val
,
0
);
msgWait
=
val
;
val
=
0
;
get
(
"break on missing tag"
,
val
,
0
);
breakOnMissingTag
=
val
;
if
(
msgInfo
==
0
)
paramInfo
=
0
;
};
/// print all parameters to std::cout
void
Initfile
::
printParameters
()
{
initIntern
();
Initfile
::
iterator
it
;
for
(
it
=
singlett
->
begin
();
it
!=
singlett
->
end
();
it
++
)
std
::
cout
<<
(
*
it
).
first
<<
" => "
<<
(
*
it
).
second
<<
std
::
endl
;
};
/// Write data-map to initfile
void
Initfile
::
write
(
ostream
&
out
)
{
Initfile
::
iterator
it
;
for
(
it
=
begin
()
;
it
!=
end
();
it
++
)
out
<<
(
*
it
).
first
<<
": "
<<
(
*
it
).
second
<<
std
::
endl
;
val
=
1
;
get
(
"parameter information"
,
val
,
0
);
paramInfo
=
val
;
};
/// Write data-map to initfile
void
Initfile
::
write
(
std
::
string
fn
)
{
std
::
ofstream
outFile
;
outFile
.
open
(
fn
.
c_str
(),
std
::
ios
::
out
);
if
(
!
outFile
.
is_open
())
throw
runtime_error
(
"init-file cannot be opened for writing"
);
val
=
0
;
get
(
"break on missing tag"
,
val
,
0
);
breakOnMissingTag
=
val
;
if
(
msgInfo
==
0
)
paramInfo
=
0
;
}
/// print all parameters to std::cout
void
Initfile
::
printParameters
()
{
initIntern
();
for
(
Initfile
::
iterator
it
=
singlett
->
begin
();
it
!=
singlett
->
end
();
it
++
)
std
::
cout
<<
(
*
it
).
first
<<
" => "
<<
(
*
it
).
second
<<
std
::
endl
;
}
/// Write data-map to initfile
void
Initfile
::
write
(
ostream
&
out
)
{
for
(
Initfile
::
iterator
it
=
begin
()
;
it
!=
end
();
it
++
)
out
<<
(
*
it
).
first
<<
": "
<<
(
*
it
).
second
<<
std
::
endl
;
}
/// Write data-map to initfile
void
Initfile
::
write
(
std
::
string
fn
)
{
std
::
ofstream
outFile
;
outFile
.
open
(
fn
.
c_str
(),
std
::
ios
::
out
);
if
(
!
outFile
.
is_open
())
throw
runtime_error
(
"init-file cannot be opened for writing"
);
write
(
outFile
);
}
;
write
(
outFile
);
}
}
This diff is collapsed.
Click to expand it.
AMDiS/src/Initfile.h
+
480
−
375
View file @
8698e7fe
This diff is collapsed.
Click to expand it.
AMDiS/src/UmfPackSolver.h
+
7
−
5
View file @
8698e7fe
...
...
@@ -50,13 +50,15 @@ namespace AMDiS {
oem
(
*
oem_
),
solver
(
NULL
),
store_symbolic
(
0
),
symmetric_strategy
(
0
)
symmetric_strategy
(
0
),
alloc_init
(
0.7
)
{
FUNCNAME
(
"Umfpack_runner::Umfpack_runner()"
);
TEST_EXIT_DBG
(
oem_
!=
NULL
)(
"Need real OEMSolver
\n
"
);
Parameters
::
get
(
oem
.
getName
()
+
"->store symbolic"
,
store_symbolic
);
Parameters
::
get
(
oem
.
getName
()
+
"->symmetric strategy"
,
symmetric_strategy
);
Parameters
::
get
(
oem
.
getName
()
+
"->alloc init"
,
alloc_init
);
}
template
<
typename
Vector
>
...
...
@@ -64,10 +66,7 @@ namespace AMDiS {
{
FUNCNAME
(
"Umfpack_runner::solve()"
);
if
(
!
solver
)
{
if
(
!
symmetric_strategy
)
solver
=
new
mtl
::
matrix
::
umfpack
::
solver
<
matrix_type
>
(
A
);
else
solver
=
new
mtl
::
matrix
::
umfpack
::
solver
<
matrix_type
>
(
A
,
UMFPACK_STRATEGY_SYMMETRIC
);
solver
=
new
mtl
::
matrix
::
umfpack
::
solver
<
matrix_type
>
(
A
,
symmetric_strategy
,
alloc_init
);
}
else
{
if
(
!
oem
.
getMultipleRhs
())
{
if
(
store_symbolic
)
...
...
@@ -101,7 +100,10 @@ namespace AMDiS {
mtl
::
matrix
::
umfpack
::
solver
<
matrix_type
>
*
solver
;
int
store_symbolic
;
int
symmetric_strategy
;
double
alloc_init
;
};
using
namespace
MTLTypes
;
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
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!
Save comment
Cancel
Please
register
or
sign in
to comment