Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
N
NP_TMcode
Manage
Activity
Members
Plan
Wiki
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Container Registry
Analyze
Contributor analytics
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Giacomo Mulas
NP_TMcode
Commits
ccf13828
Commit
ccf13828
authored
1 year ago
by
Giovanni La Mura
Browse files
Options
Downloads
Patches
Plain Diff
Implement trapping configuration binary I/O and add it to library Makefile
parent
31f6bb9a
No related branches found
No related tags found
No related merge requests found
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
src/include/tfrfme.h
+123
-9
123 additions, 9 deletions
src/include/tfrfme.h
src/libnptm/Makefile
+2
-2
2 additions, 2 deletions
src/libnptm/Makefile
src/libnptm/TransitionMatrix.cpp
+1
-0
1 addition, 0 deletions
src/libnptm/TransitionMatrix.cpp
src/libnptm/tfrfme.cpp
+288
-9
288 additions, 9 deletions
src/libnptm/tfrfme.cpp
with
414 additions
and
20 deletions
src/include/tfrfme.h
+
123
−
9
View file @
ccf13828
...
@@ -6,6 +6,50 @@
...
@@ -6,6 +6,50 @@
#ifndef INCLUDE_TFRFME_H_
#ifndef INCLUDE_TFRFME_H_
#define INCLUDE_TFRFME_H_
#define INCLUDE_TFRFME_H_
/**
* \brief Exception for unrecognized parameters.
*/
class
MatrixOutOfBoundsException
:
public
std
::
exception
{
protected:
//! Description of the problem.
std
::
string
message
;
public:
/**
* \brief Exception instance constructor.
*
* \param problem: `string` Description of the problem that occurred.
*/
MatrixOutOfBoundsException
(
std
::
string
problem
)
{
message
=
problem
;
}
/**
* \brief Exception message.
*/
virtual
const
char
*
what
()
const
throw
()
{
return
message
.
c_str
();
}
};
/**
* \brief Exception for unrecognized parameters.
*/
class
UnrecognizedParameterException
:
public
std
::
exception
{
protected:
//! Description of the problem.
std
::
string
message
;
public:
/**
* \brief Exception instance constructor.
*
* \param problem: `string` Description of the problem that occurred.
*/
UnrecognizedParameterException
(
std
::
string
problem
)
{
message
=
problem
;
}
/**
* \brief Exception message.
*/
virtual
const
char
*
what
()
const
throw
()
{
return
message
.
c_str
();
}
};
/*! \brief Class to represent the trapping configuration.
/*! \brief Class to represent the trapping configuration.
*/
*/
class
TFRFME
{
class
TFRFME
{
...
@@ -51,28 +95,56 @@ class TFRFME {
...
@@ -51,28 +95,56 @@ class TFRFME {
//! Vector of computed z positions
//! Vector of computed z positions
double
*
zv
;
double
*
zv
;
//! QUESTION: definition?
//! QUESTION: definition?
complex
<
double
>
**
wsum
;
std
::
complex
<
double
>
**
wsum
;
/*! \brief Load a configuration instance from a HDF5 binary file.
*
* \param file_name: `string` Name of the file to be loaded.
* \return instance: `TFRFME *` Pointer to a new trapping configuration
* instance.
*/
static
TFRFME
*
from_hdf5
(
std
::
string
file_name
);
/*! \brief Load a configuration instance from a legacy binary file.
*
* \param file_name: `string` Name of the file to be loaded.
* \return instance: `TFRFME *` Pointer to a new trapping configuration
* instance.
*/
static
TFRFME
*
from_legacy
(
std
::
string
file_name
);
/*! \brief Save a configuration instance to a HDF5 binary file.
*
* \param file_name: `string` Name of the file to be loaded.
*/
void
write_hdf5
(
std
::
string
file_name
);
/*! \brief Save a configuration instance to a legacy binary file.
*
* \param file_name: `string` Name of the file to be loaded.
*/
void
write_legacy
(
std
::
string
file_name
);
public:
public:
/*! \brie
s
f Trapping configuration instance constructor.
/*! \brief Trapping configuration instance constructor.
*/
*/
TFRFME
(
TFRFME
(
int
_lmode
,
int
_lm
,
int
_nkv
,
int
_nxv
,
int
_nyv
,
int
_nzv
int
_lmode
,
int
_lm
,
int
_nkv
,
int
_nxv
,
int
_nyv
,
int
_nzv
);
);
/*! \brie
s
f Trapping configuration instance destroyer.
/*! \brief Trapping configuration instance destroyer.
*/
*/
~
TFRFME
();
~
TFRFME
();
/*! \brie
s
f Load a trapping configuration instance from binary file.
/*! \brief Load a trapping configuration instance from binary file.
*
*
* \param file_name: `string` Name of the file.
* \param file_name: `string` Name of the file.
* \param
format
: `string` Format of the file (can be either "HDF5"
* \param
mode
: `string` Format of the file (can be either "HDF5"
* or "LGEACY". Default is "LEGACY").
* or "LGEACY". Default is "LEGACY").
* \return instance: `TFRFME *` Pointer to anewly created configuration
* \return instance: `TFRFME *` Pointer to anewly created configuration
* instance.
* instance.
*/
*/
TFRFME
*
from_binary
(
std
::
string
file_name
,
std
::
string
format
=
"LEGACY"
);
static
TFRFME
*
from_binary
(
std
::
string
file_name
,
std
::
string
mode
=
"LEGACY"
);
/*! \brief Get an element from the WSUM matrix.
/*! \brief Get an element from the WSUM matrix.
*
*
...
@@ -89,6 +161,27 @@ class TFRFME {
...
@@ -89,6 +161,27 @@ class TFRFME {
*/
*/
double
get_param
(
std
::
string
param_name
);
double
get_param
(
std
::
string
param_name
);
/*! \brief Get the X coordinate of the computed point at given index.
*
* \param index: `int` Index of the requested point.
* \return x: `double` X coordinate of the requested point.
*/
double
get_x
(
int
index
)
{
return
xv
[
index
];
}
/*! \brief Get the Y coordinate of the computed point at given index.
*
* \param index: `int` Index of the requested point.
* \return y: `double` Y coordinate of the requested point.
*/
double
get_y
(
int
index
)
{
return
yv
[
index
];
}
/*! \brief Get the Z coordinate of the computed point at given index.
*
* \param index: `int` Index of the requested point.
* \return z: `double` Z coordinate of the requested point.
*/
double
get_z
(
int
index
)
{
return
zv
[
index
];
}
/*! \brief Set an element in the WSUM matrix.
/*! \brief Set an element in the WSUM matrix.
*
*
* \param row: `int` Row index of the element to be read.
* \param row: `int` Row index of the element to be read.
...
@@ -104,12 +197,33 @@ class TFRFME {
...
@@ -104,12 +197,33 @@ class TFRFME {
*/
*/
void
set_param
(
std
::
string
param_name
,
double
value
);
void
set_param
(
std
::
string
param_name
,
double
value
);
/*! \briesf Write a trapping configuration instance to binary file.
/*! \brief Set the X coordinate of the computed point at given index.
*
* \param index: `int` Index of the requested point.
* \param value: `double` X coordinate of the requested point.
*/
void
set_x
(
int
index
,
double
value
)
{
xv
[
index
]
=
value
;
}
/*! \brief Set the Y coordinate of the computed point at given index.
*
* \param index: `int` Index of the requested point.
* \param value: `double` Y coordinate of the requested point.
*/
void
set_y
(
int
index
,
double
value
)
{
yv
[
index
]
=
value
;
}
/*! \brief Set the Z coordinate of the computed point at given index.
*
* \param index: `int` Index of the requested point.
* \param value: `double` Z coordinate of the requested point.
*/
void
set_z
(
int
index
,
double
value
)
{
zv
[
index
]
=
value
;
}
/*! \brief Write a trapping configuration instance to binary file.
*
*
* \param file_name: `string` Name of the file.
* \param file_name: `string` Name of the file.
* \param
format
: `string` Format of the file (can be either "HDF5"
* \param
mode
: `string` Format of the file (can be either "HDF5"
* or "LGEACY". Default is "LEGACY").
* or "LGEACY". Default is "LEGACY").
*/
*/
void
write_binary
(
std
::
string
file_name
,
std
::
string
format
=
"LEGACY"
);
void
write_binary
(
std
::
string
file_name
,
std
::
string
mode
=
"LEGACY"
);
};
};
#endif
#endif
This diff is collapsed.
Click to expand it.
src/libnptm/Makefile
+
2
−
2
View file @
ccf13828
...
@@ -19,9 +19,9 @@ endif
...
@@ -19,9 +19,9 @@ endif
include
../make.inc
include
../make.inc
CXX_NPTM_OBJS
=
$(
OBJDIR
)
/Commons.o
$(
OBJDIR
)
/Configuration.o
$(
OBJDIR
)
/file_io.o
$(
OBJDIR
)
/Parsers.o
$(
OBJDIR
)
/sph_subs.o
$(
OBJDIR
)
/clu_subs.o
$(
OBJDIR
)
/tra_subs.o
$(
OBJDIR
)
/TransitionMatrix.o
CXX_NPTM_OBJS
=
$(
OBJDIR
)
/Commons.o
$(
OBJDIR
)
/Configuration.o
$(
OBJDIR
)
/file_io.o
$(
OBJDIR
)
/Parsers.o
$(
OBJDIR
)
/sph_subs.o
$(
OBJDIR
)
/clu_subs.o
$(
OBJDIR
)
/tfrfme.o
$(
OBJDIR
)
/tra_subs.o
$(
OBJDIR
)
/TransitionMatrix.o
CXX_NPTM_DYNOBJS
=
$(
DYNOBJDIR
)
/Commons.o
$(
DYNOBJDIR
)
/Configuration.o
$(
DYNOBJDIR
)
/file_io.o
$(
DYNOBJDIR
)
/Parsers.o
$(
DYNOBJDIR
)
/sph_subs.o
$(
DYNOBJDIR
)
/clu_subs.o
$(
DYNOBJDIR
)
/tra_subs.o
$(
DYNOBJDIR
)
/TransitionMatrix.o
CXX_NPTM_DYNOBJS
=
$(
DYNOBJDIR
)
/Commons.o
$(
DYNOBJDIR
)
/Configuration.o
$(
DYNOBJDIR
)
/file_io.o
$(
DYNOBJDIR
)
/Parsers.o
$(
DYNOBJDIR
)
/sph_subs.o
$(
DYNOBJDIR
)
/clu_subs.o
$(
DYNOBJDIR
)
/tfrfme.o
$(
DYNOBJDIR
)
/tra_subs.o
$(
DYNOBJDIR
)
/TransitionMatrix.o
all
:
$(BUILDDIR_NPTM)/libnptm.a $(BUILDDIR_NPTM)/libnptm.so
all
:
$(BUILDDIR_NPTM)/libnptm.a $(BUILDDIR_NPTM)/libnptm.so
...
...
This diff is collapsed.
Click to expand it.
src/libnptm/TransitionMatrix.cpp
+
1
−
0
View file @
ccf13828
...
@@ -6,6 +6,7 @@
...
@@ -6,6 +6,7 @@
#include
<exception>
#include
<exception>
#include
<fstream>
#include
<fstream>
#include
<hdf5.h>
#include
<hdf5.h>
#include
<string>
#ifndef INCLUDE_LIST_H_
#ifndef INCLUDE_LIST_H_
#include
"../include/List.h"
#include
"../include/List.h"
...
...
This diff is collapsed.
Click to expand it.
src/libnptm/tfrfme.cpp
+
288
−
9
View file @
ccf13828
...
@@ -3,11 +3,22 @@
...
@@ -3,11 +3,22 @@
* \brief Implementation of the trapping configuration objects.
* \brief Implementation of the trapping configuration objects.
*/
*/
#include
<complex>
#include
<complex>
#include
<string>
#include
<exception>
#include
<fstream>
#include
<hdf5.h>
#include
<string>
#ifndef INCLUDE_LIST_H_
#include
"../include/List.h"
#endif
#ifndef INCLUDE_TFRFME_H_
#ifndef INCLUDE_TFRFME_H_
#include
"../include/tfrfme.cpp"
#include
"../include/tfrfme.h"
#endif
#ifndef INCLUDE_FILE_IO_H_
#include
"../include/file_io.h"
#endif
#endif
using
namespace
std
;
using
namespace
std
;
...
@@ -46,24 +57,292 @@ TFRFME::~TFRFME() {
...
@@ -46,24 +57,292 @@ TFRFME::~TFRFME() {
delete
[]
wsum
;
delete
[]
wsum
;
}
}
TFRFME
::
TFRFME
*
from_binary
(
string
file_name
,
string
format
)
{
TFRFME
*
TFRFME
::
from_binary
(
string
file_name
,
string
mode
)
{
TFRFME
*
instance
=
NULL
;
if
(
mode
.
compare
(
"LEGACY"
)
==
0
)
{
instance
=
from_legacy
(
file_name
);
}
else
if
(
mode
.
compare
(
"HDF5"
)
==
0
)
{
instance
=
from_hdf5
(
file_name
);
}
/* else {
string message = "Unknown format mode: \"" + mode + "\"";
throw UnrecognizedFormatException(message);
} */
return
instance
;
}
TFRFME
*
TFRFME
::
from_hdf5
(
string
file_name
)
{
TFRFME
*
instance
=
NULL
;
unsigned
int
flags
=
H5F_ACC_RDONLY
;
HDFFile
*
hdf_file
=
new
HDFFile
(
file_name
,
flags
);
herr_t
status
=
hdf_file
->
get_status
();
if
(
status
==
0
)
{
int
lmode
,
lm
,
nkv
,
nxv
,
nyv
,
nzv
;
double
vk
,
exri
,
an
,
ff
,
tra
,
spd
,
frsh
,
exril
;
status
=
hdf_file
->
read
(
"LMODE"
,
"INT32"
,
&
lmode
);
status
=
hdf_file
->
read
(
"LM"
,
"INT32"
,
&
lm
);
status
=
hdf_file
->
read
(
"NKV"
,
"INT32"
,
&
nkv
);
status
=
hdf_file
->
read
(
"NXV"
,
"INT32"
,
&
nxv
);
status
=
hdf_file
->
read
(
"NYV"
,
"INT32"
,
&
nyv
);
status
=
hdf_file
->
read
(
"NZV"
,
"INT32"
,
&
nzv
);
status
=
hdf_file
->
read
(
"VK"
,
"FLOAT64"
,
&
vk
);
status
=
hdf_file
->
read
(
"EXRI"
,
"FLOAT64"
,
&
exri
);
status
=
hdf_file
->
read
(
"AN"
,
"FLOAT64"
,
&
an
);
status
=
hdf_file
->
read
(
"FF"
,
"FLOAT64"
,
&
ff
);
status
=
hdf_file
->
read
(
"TRA"
,
"FLOAT64"
,
&
tra
);
status
=
hdf_file
->
read
(
"SPD"
,
"FLOAT64"
,
&
spd
);
status
=
hdf_file
->
read
(
"FRSH"
,
"FLOAT64"
,
&
frsh
);
status
=
hdf_file
->
read
(
"EXRIL"
,
"FLOAT64"
,
&
exril
);
instance
=
new
TFRFME
(
lmode
,
lm
,
nkv
,
nxv
,
nyv
,
nzv
);
instance
->
set_param
(
"vk"
,
vk
);
instance
->
set_param
(
"exri"
,
exri
);
instance
->
set_param
(
"an"
,
an
);
instance
->
set_param
(
"ff"
,
ff
);
instance
->
set_param
(
"tra"
,
tra
);
instance
->
set_param
(
"spd"
,
spd
);
instance
->
set_param
(
"frsh"
,
frsh
);
instance
->
set_param
(
"exril"
,
exril
);
// DA QUI: aggiungere lettura di vettori e matrice.
}
return
instance
;
}
TFRFME
*
TFRFME
::
from_legacy
(
string
file_name
)
{
fstream
input
;
TFRFME
*
instance
=
NULL
;
TFRFME
*
instance
=
NULL
;
input
.
open
(
file_name
.
c_str
(),
ios
::
in
|
ios
::
binary
);
if
(
input
.
is_open
())
{
int
lmode
,
lm
,
nkv
,
nxv
,
nyv
,
nzv
;
double
vk
,
exri
,
an
,
ff
,
tra
,
spd
,
frsh
,
exril
;
double
dval
,
rval
,
ival
;
input
.
read
(
reinterpret_cast
<
char
*>
(
&
lmode
),
sizeof
(
int
));
input
.
read
(
reinterpret_cast
<
char
*>
(
&
lm
),
sizeof
(
int
));
input
.
read
(
reinterpret_cast
<
char
*>
(
&
nkv
),
sizeof
(
int
));
input
.
read
(
reinterpret_cast
<
char
*>
(
&
nxv
),
sizeof
(
int
));
input
.
read
(
reinterpret_cast
<
char
*>
(
&
nyv
),
sizeof
(
int
));
input
.
read
(
reinterpret_cast
<
char
*>
(
&
nzv
),
sizeof
(
int
));
input
.
read
(
reinterpret_cast
<
char
*>
(
&
vk
),
sizeof
(
double
));
input
.
read
(
reinterpret_cast
<
char
*>
(
&
exri
),
sizeof
(
double
));
input
.
read
(
reinterpret_cast
<
char
*>
(
&
an
),
sizeof
(
double
));
input
.
read
(
reinterpret_cast
<
char
*>
(
&
ff
),
sizeof
(
double
));
input
.
read
(
reinterpret_cast
<
char
*>
(
&
tra
),
sizeof
(
double
));
input
.
read
(
reinterpret_cast
<
char
*>
(
&
spd
),
sizeof
(
double
));
input
.
read
(
reinterpret_cast
<
char
*>
(
&
frsh
),
sizeof
(
double
));
input
.
read
(
reinterpret_cast
<
char
*>
(
&
exril
),
sizeof
(
double
));
instance
=
new
TFRFME
(
lmode
,
lm
,
nkv
,
nxv
,
nyv
,
nzv
);
instance
->
set_param
(
"vk"
,
vk
);
instance
->
set_param
(
"exri"
,
exri
);
instance
->
set_param
(
"an"
,
an
);
instance
->
set_param
(
"ff"
,
ff
);
instance
->
set_param
(
"tra"
,
tra
);
instance
->
set_param
(
"spd"
,
spd
);
instance
->
set_param
(
"frsh"
,
frsh
);
instance
->
set_param
(
"exril"
,
exril
);
for
(
int
xi
=
0
;
xi
<
nxv
;
xi
++
)
{
input
.
read
(
reinterpret_cast
<
char
*>
(
&
dval
),
sizeof
(
double
));
instance
->
set_x
(
xi
,
dval
);
}
for
(
int
yi
=
0
;
yi
<
nyv
;
yi
++
)
{
input
.
read
(
reinterpret_cast
<
char
*>
(
&
dval
),
sizeof
(
double
));
instance
->
set_y
(
yi
,
dval
);
}
for
(
int
zi
=
0
;
zi
<
nzv
;
zi
++
)
{
input
.
read
(
reinterpret_cast
<
char
*>
(
&
dval
),
sizeof
(
double
));
instance
->
set_z
(
zi
,
dval
);
}
int
_nlmmt
=
2
*
lm
*
(
lm
+
2
);
int
_nrvc
=
nxv
*
nyv
*
nzv
;
for
(
int
wi
=
0
;
wi
<
_nlmmt
;
wi
++
)
{
for
(
int
wj
=
0
;
wj
<
_nrvc
;
wj
++
)
{
input
.
read
(
reinterpret_cast
<
char
*>
(
&
rval
),
sizeof
(
double
));
input
.
read
(
reinterpret_cast
<
char
*>
(
&
ival
),
sizeof
(
double
));
complex
<
double
>
value
(
rval
,
ival
);
instance
->
set_matrix_element
(
wi
,
wj
,
value
);
}
// wj loop
}
// wi loop
}
else
{
printf
(
"ERROR: could not open input file
\"
%s
\"\n
"
,
file_name
.
c_str
());
}
return
instance
;
return
instance
;
}
}
TFRFME
::
double
get_param
(
string
param_name
)
{
std
::
complex
<
double
>
TFRFME
::
get_matrix_element
(
int
row
,
int
col
)
{
return
wsum
[
row
][
col
];
}
double
TFRFME
::
get_param
(
string
param_name
)
{
double
value
;
double
value
;
if
(
param_name
.
compare
(
"exri"
)
==
0
)
value
=
exri
;
if
(
param_name
.
compare
(
"vk"
)
==
0
)
value
=
vk
;
else
if
(
param_name
.
compare
(
"exri"
)
==
0
)
value
=
exri
;
else
if
(
param_name
.
compare
(
"an"
)
==
0
)
value
=
an
;
else
if
(
param_name
.
compare
(
"an"
)
==
0
)
value
=
an
;
else
if
(
param_name
.
compare
(
"ff"
)
==
0
)
value
=
ff
;
else
if
(
param_name
.
compare
(
"ff"
)
==
0
)
value
=
ff
;
else
if
(
param_name
.
compare
(
"tra"
)
==
0
)
value
=
tra
;
else
if
(
param_name
.
compare
(
"tra"
)
==
0
)
value
=
tra
;
else
if
(
param_name
.
compare
(
"spd"
)
==
0
)
value
=
spd
;
else
if
(
param_name
.
compare
(
"spd"
)
==
0
)
value
=
spd
;
else
if
(
param_name
.
compare
(
"frsh"
)
==
0
)
value
=
frsh
;
else
if
(
param_name
.
compare
(
"frsh"
)
==
0
)
value
=
frsh
;
else
if
(
param_name
.
compare
(
"exril"
)
==
0
)
value
=
exril
;
else
if
(
param_name
.
compare
(
"exril"
)
==
0
)
value
=
exril
;
//TODO: add else clause with exception.
else
{
string
message
=
"Unrecognized parameter name
\"
"
+
param_name
+
"
\"
"
;
UnrecognizedParameterException
ex
(
message
);
throw
ex
;
}
return
value
;
return
value
;
}
}
TFRFME
::
void
write_binary
(
string
file_name
,
string
format
)
{
void
TFRFME
::
set_matrix_element
(
int
row
,
int
col
,
complex
<
double
>
value
)
{
return
;
wsum
[
row
][
col
]
=
value
;
}
void
TFRFME
::
set_param
(
string
param_name
,
double
value
)
{
if
(
param_name
.
compare
(
"vk"
)
==
0
)
vk
=
value
;
else
if
(
param_name
.
compare
(
"exri"
)
==
0
)
exri
=
value
;
else
if
(
param_name
.
compare
(
"an"
)
==
0
)
an
=
value
;
else
if
(
param_name
.
compare
(
"ff"
)
==
0
)
ff
=
value
;
else
if
(
param_name
.
compare
(
"tra"
)
==
0
)
tra
=
value
;
else
if
(
param_name
.
compare
(
"spd"
)
==
0
)
spd
=
value
;
else
if
(
param_name
.
compare
(
"frsh"
)
==
0
)
frsh
=
value
;
else
if
(
param_name
.
compare
(
"exril"
)
==
0
)
exril
=
value
;
else
{
string
message
=
"Unrecognized parameter name
\"
"
+
param_name
+
"
\"
"
;
UnrecognizedParameterException
ex
(
message
);
throw
ex
;
}
}
void
TFRFME
::
write_binary
(
string
file_name
,
string
mode
)
{
if
(
mode
.
compare
(
"LEGACY"
)
==
0
)
{
write_legacy
(
file_name
);
}
else
if
(
mode
.
compare
(
"HDF5"
)
==
0
)
{
write_hdf5
(
file_name
);
}
/* else {
string message = "Unknown format mode: \"" + mode + "\"";
throw UnrecognizedFormatException(message);
} */
}
void
TFRFME
::
write_hdf5
(
string
file_name
)
{
List
<
string
>
rec_name_list
(
1
);
List
<
string
>
rec_type_list
(
1
);
List
<
void
*>
rec_ptr_list
(
1
);
string
str_type
;
rec_name_list
.
set
(
0
,
"LMODE"
);
rec_type_list
.
set
(
0
,
"INT32_(1)"
);
rec_ptr_list
.
set
(
0
,
&
lmode
);
rec_name_list
.
append
(
"LM"
);
rec_type_list
.
append
(
"INT32_(1)"
);
rec_ptr_list
.
append
(
&
lm
);
rec_name_list
.
append
(
"NKV"
);
rec_type_list
.
append
(
"INT32_(1)"
);
rec_ptr_list
.
append
(
&
nkv
);
rec_name_list
.
append
(
"NXV"
);
rec_type_list
.
append
(
"INT32_(1)"
);
rec_ptr_list
.
append
(
&
nxv
);
rec_name_list
.
append
(
"NYV"
);
rec_type_list
.
append
(
"INT32_(1)"
);
rec_ptr_list
.
append
(
&
nyv
);
rec_name_list
.
append
(
"NZV"
);
rec_type_list
.
append
(
"INT32_(1)"
);
rec_ptr_list
.
append
(
&
nzv
);
rec_name_list
.
append
(
"VK"
);
rec_type_list
.
append
(
"FLOAT64_(1)"
);
rec_ptr_list
.
append
(
&
lm
);
rec_name_list
.
append
(
"EXRI"
);
rec_type_list
.
append
(
"FLOAT64_(1)"
);
rec_ptr_list
.
append
(
&
exri
);
rec_name_list
.
append
(
"AN"
);
rec_type_list
.
append
(
"FLOAT64_(1)"
);
rec_ptr_list
.
append
(
&
an
);
rec_name_list
.
append
(
"FF"
);
rec_type_list
.
append
(
"FLOAT64_(1)"
);
rec_ptr_list
.
append
(
&
ff
);
rec_name_list
.
append
(
"TRA"
);
rec_type_list
.
append
(
"FLOAT64_(1)"
);
rec_ptr_list
.
append
(
&
tra
);
rec_name_list
.
append
(
"SPD"
);
rec_type_list
.
append
(
"FLOAT64_(1)"
);
rec_ptr_list
.
append
(
&
spd
);
rec_name_list
.
append
(
"FRSH"
);
rec_type_list
.
append
(
"FLOAT64_(1)"
);
rec_ptr_list
.
append
(
&
frsh
);
rec_name_list
.
append
(
"EXRIL"
);
rec_type_list
.
append
(
"FLOAT64_(1)"
);
rec_ptr_list
.
append
(
&
exril
);
str_type
=
"FLOAT64_("
+
to_string
(
nxv
)
+
")"
;
rec_name_list
.
append
(
"XVEC"
);
rec_type_list
.
append
(
str_type
);
rec_ptr_list
.
append
(
xv
);
str_type
=
"FLOAT64_("
+
to_string
(
nyv
)
+
")"
;
rec_name_list
.
append
(
"YVEC"
);
rec_type_list
.
append
(
str_type
);
rec_ptr_list
.
append
(
yv
);
str_type
=
"FLOAT64_("
+
to_string
(
nzv
)
+
")"
;
rec_name_list
.
append
(
"ZVEC"
);
rec_type_list
.
append
(
str_type
);
rec_ptr_list
.
append
(
zv
);
rec_name_list
.
append
(
"WSUM"
);
str_type
=
"FLOAT64_("
+
to_string
(
nlmmt
)
+
","
+
to_string
(
2
*
nrvc
)
+
")"
;
rec_type_list
.
append
(
str_type
);
// The (N x M) matrix of complex is converted to a (N x 2M) matrix of double,
// where REAL(E_i,j) -> E_i,(2 j) and IMAG(E_i,j) -> E_i,(2 j + 1)
int
num_elements
=
2
*
nlmmt
*
nrvc
;
double
*
ptr_elements
=
new
double
[
num_elements
]();
for
(
int
wi
=
0
;
wi
<
nlmmt
;
wi
++
)
{
for
(
int
wj
=
0
;
wj
<
nrvc
;
wj
++
)
{
int
index
=
(
2
*
nrvc
)
*
wi
+
2
*
wj
;
ptr_elements
[
index
]
=
wsum
[
wi
][
wj
].
real
();
ptr_elements
[
index
+
1
]
=
wsum
[
wi
][
wj
].
imag
();
}
// wj loop
}
// wi loop
rec_ptr_list
.
append
(
ptr_elements
);
string
*
rec_names
=
rec_name_list
.
to_array
();
string
*
rec_types
=
rec_type_list
.
to_array
();
void
**
rec_pointers
=
rec_ptr_list
.
to_array
();
const
int
rec_num
=
rec_name_list
.
length
();
FileSchema
schema
(
rec_num
,
rec_types
,
rec_names
);
HDFFile
*
hdf_file
=
HDFFile
::
from_schema
(
schema
,
file_name
,
H5F_ACC_TRUNC
);
for
(
int
ri
=
0
;
ri
<
rec_num
;
ri
++
)
hdf_file
->
write
(
rec_names
[
ri
],
rec_types
[
ri
],
rec_pointers
[
ri
]);
hdf_file
->
close
();
delete
[]
ptr_elements
;
delete
[]
rec_names
;
delete
[]
rec_types
;
delete
[]
rec_pointers
;
delete
hdf_file
;
}
void
TFRFME
::
write_legacy
(
string
file_name
)
{
fstream
output
;
output
.
open
(
file_name
.
c_str
(),
ios
::
out
|
ios
::
binary
);
if
(
output
.
is_open
())
{
output
.
write
(
reinterpret_cast
<
char
*>
(
&
lmode
),
sizeof
(
int
));
output
.
write
(
reinterpret_cast
<
char
*>
(
&
lm
),
sizeof
(
int
));
output
.
write
(
reinterpret_cast
<
char
*>
(
&
nkv
),
sizeof
(
int
));
output
.
write
(
reinterpret_cast
<
char
*>
(
&
nxv
),
sizeof
(
int
));
output
.
write
(
reinterpret_cast
<
char
*>
(
&
nyv
),
sizeof
(
int
));
output
.
write
(
reinterpret_cast
<
char
*>
(
&
nzv
),
sizeof
(
int
));
output
.
write
(
reinterpret_cast
<
char
*>
(
&
vk
),
sizeof
(
double
));
output
.
write
(
reinterpret_cast
<
char
*>
(
&
exri
),
sizeof
(
double
));
output
.
write
(
reinterpret_cast
<
char
*>
(
&
an
),
sizeof
(
double
));
output
.
write
(
reinterpret_cast
<
char
*>
(
&
ff
),
sizeof
(
double
));
output
.
write
(
reinterpret_cast
<
char
*>
(
&
tra
),
sizeof
(
double
));
output
.
write
(
reinterpret_cast
<
char
*>
(
&
spd
),
sizeof
(
double
));
output
.
write
(
reinterpret_cast
<
char
*>
(
&
frsh
),
sizeof
(
double
));
output
.
write
(
reinterpret_cast
<
char
*>
(
&
exril
),
sizeof
(
double
));
for
(
int
xi
=
0
;
xi
<
nxv
;
xi
++
)
output
.
write
(
reinterpret_cast
<
char
*>
(
&
(
xv
[
xi
])),
sizeof
(
double
));
for
(
int
yi
=
0
;
yi
<
nyv
;
yi
++
)
output
.
write
(
reinterpret_cast
<
char
*>
(
&
(
yv
[
yi
])),
sizeof
(
double
));
for
(
int
zi
=
0
;
zi
<
nzv
;
zi
++
)
output
.
write
(
reinterpret_cast
<
char
*>
(
&
(
zv
[
zi
])),
sizeof
(
double
));
for
(
int
wi
=
0
;
wi
<
nlmmt
;
wi
++
)
{
for
(
int
wj
=
0
;
wj
<
nrvc
;
wj
++
)
{
double
rval
=
wsum
[
wi
][
wj
].
real
();
double
ival
=
wsum
[
wi
][
wj
].
imag
();
output
.
write
(
reinterpret_cast
<
char
*>
(
&
rval
),
sizeof
(
double
));
output
.
write
(
reinterpret_cast
<
char
*>
(
&
ival
),
sizeof
(
double
));
}
// wj loop
}
// wi loop
}
else
{
// Should never occur
printf
(
"ERROR: could not open output file
\"
%s
\"\n
"
,
file_name
.
c_str
());
}
}
}
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