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
4f5ead92
Commit
4f5ead92
authored
1 year ago
by
Giovanni La Mura
Browse files
Options
Downloads
Patches
Plain Diff
Introduce data structures for the cluster case
parent
92c1d8b2
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
src/include/Commons.h
+171
-4
171 additions, 4 deletions
src/include/Commons.h
src/libnptm/Commons.cpp
+174
-11
174 additions, 11 deletions
src/libnptm/Commons.cpp
with
345 additions
and
15 deletions
src/include/Commons.h
+
171
−
4
View file @
4f5ead92
...
...
@@ -7,15 +7,15 @@
* the data blocks in the code, therefore implying the necessity to modify
* the code to adapt it to the input and to recompile before running. C++,
* on the contrary, offers the possibility to represent the necessary data
* structures as classes that can d
i
namically instantiate the shared information
* structures as classes that can d
y
namically instantiate the shared information
* in the most convenient format for the current configuration. This approach
* adds an abstraction layer that lifts the need to modify and recompile the
* code depending on the input.
*
*/
#ifndef
SRC_
INCLUDE_COMMONS_
#define
SRC_
INCLUDE_COMMONS_
#ifndef INCLUDE_COMMONS_
#define INCLUDE_COMMONS_
#include
<complex>
...
...
@@ -89,7 +89,7 @@ public:
* \param ns: `int` Number of spheres.
* \param l_max: `int` Maximum order of field expansion.
*/
C1
(
int
ns
,
int
l_max
);
C1
(
int
ns
,
int
l_max
,
int
*
nshl
,
int
*
iog
);
//! \brief C1 instance destroyer.
~
C1
();
...
...
@@ -128,4 +128,171 @@ public:
~
C2
();
};
/*! \brief Representation of the FORTRAN C3 blocks.
*/
class
C3
{
public:
//! \brief QUESTION: definition?
std
::
complex
<
double
>
tfsas
;
//! \brief QUESTION: definition?
std
::
complex
<
double
>
**
tsas
;
//! \brief QUESTION: definition?
double
gcs
;
//! \brief QUESTION: definition?
double
scs
;
//! \brief QUESTION: definition?
double
ecs
;
//! \brief QUESTION: definition?
double
acs
;
/*! \brief C3 instance constructor.
*/
C3
();
/*! \brief C3 instance destroyer.
*/
~
C3
();
};
/*! \brief Representation of the FORTRAN C4 blocks.
*/
struct
C4
{
//! \brief QUESTION: definition?
int
litpo
;
//! \brief QUESTION: definition?
int
litpos
;
//! \brief QUESTION: definition?
int
lmpo
;
//! \brief QUESTION: definition?
int
lmtpo
;
//! \brief QUESTION: definition?
int
lmtpos
;
//! \brief QUESTION: definition?
int
li
;
//! \brief QUESTION: definition?
int
nlim
;
//! \brief QUESTION: definition?
int
le
;
//! \brief QUESTION: definition?
int
nlem
;
//! \brief Maximum field expansion order. QUESTION: correct?
int
lm
;
//! \brief Number of spheres.
int
nsph
;
};
/*! \brief Vectors and matrices that are specific to cluster C1 blocks.
*
*/
class
C1_AddOns
{
protected:
//! \brief Number of spheres.
int
nsph
;
//! \brief QUESTION: definition?
int
nlemt
;
//! \brief QUESTION: definition?
int
lmpo
;
void
allocate_vectors
(
C4
*
c4
);
public:
//! \brief QUESTION: definition?
std
::
complex
<
double
>
*
vh
;
//! \brief QUESTION: definition?
std
::
complex
<
double
>
*
vj
;
//! \brief QUESTION: definition?
std
::
complex
<
double
>
*
vyhj
;
//! \brief QUESTION: definition?
std
::
complex
<
double
>
*
vyj0
;
//! \brief QUESTION: definition?
std
::
complex
<
double
>
**
am0m
;
//! \brief QUESTION: definition?
std
::
complex
<
double
>
*
vint
;
//! \brief QUESTION: definition?
std
::
complex
<
double
>
*
vintm
;
//! \brief QUESTION: definition?
std
::
complex
<
double
>
*
vintt
;
//! \brief QUESTION: definition?
std
::
complex
<
double
>
**
fsac
;
//! \brief QUESTION: definition?
std
::
complex
<
double
>
**
sac
;
//! \brief QUESTION: definition?
std
::
complex
<
double
>
**
fsacm
;
//! \brief QUESTION: definition?
std
::
complex
<
double
>
*
scscp
;
//! \brief QUESTION: definition?
std
::
complex
<
double
>
*
ecscp
;
//! \brief QUESTION: definition?
std
::
complex
<
double
>
*
scscpm
;
//! \brief QUESTION: definition?
std
::
complex
<
double
>
*
ecscpm
;
//! \brief QUESTION: definition?
double
*
v3j0
;
//! \brief QUESTION: definition?
double
*
sscs
;
//! \brief QUESTION: definition?
int
**
ind3j
;
/*! \brief C1_AddOns instance constructor.
*
* \param ns: `int` Number of spheres.
* \param nc: `int`
* \param litpo: `int`
* \param lmtpo: `int`
* \param nv3j: `int`
* \param lmpo: `int`
* \param li: `int`
* \param le: `int`
* \param lm: `int`
*/
C1_AddOns
(
C4
*
c4
);
//! \brief C1_AddOns instance destroyer.
~
C1_AddOns
();
};
/*! \brief Representation of the FORTRAN C6 blocks.
*/
class
C6
{
public:
//! \brief QUESTION: definition?
double
*
rac3j
;
/*! \brief C6 instance constructor.
*
* \param lmtpo: `int` QUESTION: definition?
*/
C6
(
int
lmtpo
);
/*! \brief C6 instance destroyer.
*/
~
C6
();
};
/*! \brief Representation of the FORTRAN C9 blocks.
*/
class
C9
{
protected:
int
gis_size_0
;
int
sam_size_0
;
public:
//! \brief QUESTION: definition?
std
::
complex
<
double
>
**
gis
;
//! \brief QUESTION: definition?
std
::
complex
<
double
>
**
gls
;
//! \brief QUESTION: definition?
std
::
complex
<
double
>
**
sam
;
/*! \brief C9 instance constructor.
*
* \param ndi: `int` QUESTION: definition?
* \param nlem: `int` QUESTION: definition?
* \param ndit: `int` QUESTION: definition?
* \param nlemt: `int` QUESTION: definition?
*/
C9
(
int
ndi
,
int
nlem
,
int
ndit
,
int
nlemt
);
/*! \brief C9 instance destroyer.
*/
~
C9
();
};
#endif
This diff is collapsed.
Click to expand it.
src/libnptm/Commons.cpp
+
174
−
11
View file @
4f5ead92
/*! \file Commons.cpp
*
* DEVELOPMENT NOTE:
* The construction of common blocks requires some information
* that is stored in configuration objects and is needed to compute
* the allocation size of vectors and matrices. Currently, this
* information is passed as arguments to the constructors of the
* common blocks. A simpler and more logical way to operate is
* to design the constructors to take as arguments only pointers
* to the configuration objects. These, on their turn, need to
* expose methods to access the relevant data in read-only mode.
*/
#ifndef INCLUDE_COMMONS_H
#include
"../include/Commons.h"
#endif
using
namespace
std
;
C1
::
C1
(
int
ns
,
int
l_max
)
{
C1
::
C1
(
int
ns
,
int
l_max
,
int
*
_nshl
,
int
*
_iog
)
{
nlmmt
=
2
*
(
l_max
*
(
l_max
+
2
));
nsph
=
ns
;
lm
=
l_max
;
...
...
@@ -21,9 +32,13 @@ C1::C1(int ns, int l_max) {
for
(
int
wi
=
0
;
wi
<
nlmmt
;
wi
++
)
w
[
wi
]
=
new
complex
<
double
>
[
4
];
vints
=
new
complex
<
double
>*
[
nsph
];
rc
=
new
double
*
[
nsph
];
nshl
=
new
int
[
nsph
];
iog
=
new
int
[
nsph
];
for
(
int
vi
=
0
;
vi
<
nsph
;
vi
++
)
{
rc
[
vi
]
=
new
double
[
lm
];
rc
[
vi
]
=
new
double
[
_nshl
[
vi
]
];
vints
[
vi
]
=
new
complex
<
double
>
[
16
];
nshl
[
vi
]
=
_nshl
[
vi
];
iog
[
vi
]
=
_iog
[
vi
];
}
fsas
=
new
complex
<
double
>
[
nsph
];
sscs
=
new
double
[
nsph
];
...
...
@@ -37,8 +52,6 @@ C1::C1(int ns, int l_max) {
ryy
=
new
double
[
nsph
];
rzz
=
new
double
[
nsph
];
ros
=
new
double
[
nsph
];
iog
=
new
int
[
nsph
];
nshl
=
new
int
[
nsph
];
sas
=
new
complex
<
double
>**
[
nsph
];
for
(
int
si
=
0
;
si
<
nsph
;
si
++
)
{
...
...
@@ -51,15 +64,19 @@ C1::C1(int ns, int l_max) {
C1
::~
C1
()
{
delete
[]
rmi
;
delete
[]
rei
;
for
(
int
wi
=
1
;
wi
<=
nlmmt
;
wi
++
)
delete
[]
w
[
wi
];
for
(
int
vi
=
1
;
vi
<=
nsph
;
vi
++
)
{
delete
[]
rc
[
nsph
-
vi
];
delete
[]
vints
[
nsph
-
vi
];
for
(
int
wi
=
nlmmt
-
1
;
wi
>
-
1
;
wi
--
)
delete
[]
w
[
wi
];
for
(
int
vi
=
nsph
-
1
;
vi
>
-
1
;
vi
--
)
{
delete
[]
rc
[
vi
];
delete
[]
vints
[
vi
];
}
for
(
int
si
=
1
;
si
<=
nsph
;
si
++
)
{
delete
[]
sas
[
nsph
-
si
][
1
];
delete
[]
sas
[
nsph
-
si
][
0
];
delete
[]
rc
;
delete
[]
vints
;
for
(
int
si
=
nsph
-
1
;
si
>
-
1
;
si
--
)
{
delete
[]
sas
[
si
][
1
];
delete
[]
sas
[
si
][
0
];
delete
[]
sas
[
si
];
}
delete
[]
sas
;
delete
[]
fsas
;
delete
[]
sscs
;
delete
[]
sexs
;
...
...
@@ -76,6 +93,103 @@ C1::~C1() {
delete
[]
nshl
;
}
C1_AddOns
::
C1_AddOns
(
C4
*
c4
)
{
nsph
=
c4
->
nsph
;
lmpo
=
c4
->
lmpo
;
nlemt
=
2
*
c4
->
nlem
;
vh
=
new
complex
<
double
>
[(
nsph
*
nsph
-
1
)
*
c4
->
litpo
];
vj
=
new
complex
<
double
>
[
nsph
*
c4
->
lmtpo
];
vyhj
=
new
complex
<
double
>
[
nsph
*
(
nsph
-
1
)
*
c4
->
litpo
];
vyj0
=
new
complex
<
double
>
[
nsph
*
c4
->
lmtpo
];
am0m
=
new
complex
<
double
>*
[
nlemt
];
for
(
int
ai
=
0
;
ai
<
nlemt
;
ai
++
)
{
am0m
[
ai
]
=
new
complex
<
double
>
[
nlemt
];
}
vint
=
new
complex
<
double
>
[
16
];
vintm
=
new
complex
<
double
>
[
16
];
vintt
=
new
complex
<
double
>
[
16
];
fsac
=
new
complex
<
double
>*
[
2
];
sac
=
new
complex
<
double
>*
[
2
];
fsacm
=
new
complex
<
double
>*
[
2
];
for
(
int
fi
=
0
;
fi
<
2
;
fi
++
)
{
fsac
[
fi
]
=
new
complex
<
double
>
[
2
];
sac
[
fi
]
=
new
complex
<
double
>
[
2
];
fsacm
[
fi
]
=
new
complex
<
double
>
[
2
];
}
scscp
=
new
complex
<
double
>
[
2
];
ecscp
=
new
complex
<
double
>
[
2
];
scscpm
=
new
complex
<
double
>
[
2
];
ecscpm
=
new
complex
<
double
>
[
2
];
allocate_vectors
(
c4
);
sscs
=
new
double
[
nsph
];
}
C1_AddOns
::~
C1_AddOns
()
{
delete
[]
sscs
;
delete
[]
vyj0
;
delete
[]
vyhj
;
for
(
int
ii
=
lmpo
-
1
;
ii
>
-
1
;
ii
--
)
delete
[]
ind3j
[
ii
];
delete
[]
ind3j
;
delete
[]
v3j0
;
delete
[]
vh
;
delete
[]
vj
;
for
(
int
ai
=
nlemt
-
1
;
ai
>
-
1
;
ai
--
)
{
delete
[]
am0m
[
ai
];
}
delete
am0m
;
delete
[]
vint
;
delete
[]
vintm
;
delete
[]
vintt
;
for
(
int
fi
=
1
;
fi
>
-
1
;
fi
--
)
{
delete
[]
fsac
[
fi
];
delete
[]
sac
[
fi
];
delete
[]
fsacm
[
fi
];
}
delete
[]
fsac
;
delete
[]
sac
;
delete
[]
fsacm
;
delete
[]
scscp
;
delete
[]
ecscp
;
delete
[]
scscpm
;
delete
[]
ecscpm
;
}
void
C1_AddOns
::
allocate_vectors
(
C4
*
c4
)
{
int
i
=
0
;
int
l1po_max
=
0
,
l2_max
=
0
;
int
i_max
=
0
;
// This loop calculates NV3J, the required size of v3j0
for
(
int
l1po
=
1
;
l1po
<=
c4
->
lmpo
;
l1po
++
)
{
int
l1
=
l1po
-
1
;
for
(
int
l2
=
1
;
l2
<=
c4
->
lm
;
l2
++
)
{
if
(
l1po
>
l1po_max
)
l1po_max
=
l1po
;
if
(
l2
>
l2_max
)
l2_max
=
l2
;
int
iabs
=
l2
-
l1
;
if
(
iabs
<
0
)
iabs
*=
-
1
;
int
lmnpo
=
iabs
+
1
;
int
lmxpo
=
l2
+
l1
+
1
;
int
il
=
0
;
int
lpo
=
lmnpo
;
while
(
lpo
<=
lmxpo
)
{
i
++
;
il
++
;
if
(
i
>
i_max
)
i_max
=
i
;
lpo
+=
2
;
}
}
}
// l1po loop
v3j0
=
new
double
[
i_max
];
ind3j
=
new
int
*
[
lmpo
];
for
(
int
ii
=
0
;
ii
<
lmpo
;
ii
++
)
ind3j
[
ii
]
=
new
int
[
c4
->
lm
];
// This calculates the size of vyhj
int
nsphmo
=
c4
->
nsph
-
1
;
int
ivy
=
nsphmo
*
nsph
*
c4
->
litpos
;
vyhj
=
new
complex
<
double
>
[
ivy
];
// This calculates the size of vyj0
ivy
=
c4
->
lmtpos
*
c4
->
nsph
;
vyj0
=
new
complex
<
double
>
[
ivy
];
}
C2
::
C2
(
int
ns
,
int
nl
,
int
npnt
,
int
npntts
)
{
nsph
=
ns
;
int
max_n
=
(
npnt
>
npntts
)
?
npnt
:
npntts
;
...
...
@@ -94,3 +208,52 @@ C2::~C2() {
delete
[]
dc0
;
delete
[]
vsz
;
}
C3
::
C3
()
{
tsas
=
new
complex
<
double
>*
[
2
];
tsas
[
0
]
=
new
complex
<
double
>
[
2
];
tsas
[
1
]
=
new
complex
<
double
>
[
2
];
tfsas
=
complex
<
double
>
(
0.0
,
0.0
);
gcs
=
0.0
;
scs
=
0.0
;
ecs
=
0.0
;
acs
=
0.0
;
}
C3
::~
C3
()
{
delete
[]
tsas
[
1
];
delete
[]
tsas
[
0
];
delete
[]
tsas
;
}
C6
::
C6
(
int
lmtpo
)
{
rac3j
=
new
double
[
lmtpo
];
}
C6
::~
C6
()
{
delete
[]
rac3j
;
}
C9
::
C9
(
int
ndi
,
int
nlem
,
int
ndit
,
int
nlemt
)
{
gis
=
new
complex
<
double
>*
[
ndi
];
gls
=
new
complex
<
double
>*
[
ndi
];
for
(
int
gi
=
0
;
gi
<
ndi
;
gi
++
)
{
gis
[
gi
]
=
new
complex
<
double
>
[
nlem
];
gls
[
gi
]
=
new
complex
<
double
>
[
nlem
];
}
sam
=
new
complex
<
double
>*
[
ndit
];
for
(
int
si
=
0
;
si
<
ndit
;
si
++
)
sam
[
si
]
=
new
complex
<
double
>
[
nlemt
];
gis_size_0
=
ndi
;
sam_size_0
=
ndit
;
}
C9
::~
C9
()
{
for
(
int
gi
=
gis_size_0
-
1
;
gi
>
-
1
;
gi
--
)
{
delete
[]
gis
[
gi
];
delete
[]
gls
[
gi
];
}
delete
[]
gis
;
delete
[]
gls
;
for
(
int
si
=
sam_size_0
-
1
;
si
>
-
1
;
si
--
)
delete
[]
sam
[
si
];
delete
[]
sam
;
}
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