/
jjjttz_operator.h
81 lines (63 loc) · 2.61 KB
/
jjjttz_operator.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/************************************************************//**
@file jjjt_operator.h
Defines functions for I/O and manipulation of two-body operator
matrices in jjJT coupling scheme. Written for use in Moshinsky
transformation.
Language: C++11
Mark A. Caprio
University of Notre Dame
+ 07/13/16 (mac): Created, adapting code from lsjt_operator.
+ 11/04/16 (mac): Remove dependency on Eigen/Core.
+ 05/09/19 (pjf): Use std::size_t for indices and sizes, to prevent
integer overflow.
****************************************************************/
#ifndef BASIS_JJJTTz_OPERATOR_H_
#define BASIS_JJJTTz_OPERATOR_H_
#include <array>
#include <iosfwd>
#include "jt_operator.h"
#include "jjjttz_scheme.h"
#include "many_body.h"
#include "operator.h"
namespace basis {
void WriteTwoBodyOperatorJJJTTz(
std::ostream& os,
const basis::TwoBodySectorsJJJTTz& sectors,
const basis::OperatorBlocks<double>& matrices,
basis::NormalizationConversion conversion_mode
);
// Write two-body operator in JJJTTz
// scheme.
//
// Side effect: The floating point precision attribute of the output
// stream is modified.
//
// Arguments:
// os (std::ostream) : text-mode output stream
// sector (basis::TwoBodySectorsJJJTTz) : sectors defining operator
// matrices (basis::OperatorBlocks<double>) : matrices defining operator
// conversion (basis::NormalizationConversion) : specifies any
// conversion between AS and NAS for output
void SetTwoBodyOperatorMatrixElementJJJTTz(
const basis::TwoBodySpaceJJJTTz& space, // TODO: add accessor to space in basis.h and remove it here
const TwoBodySubspaceJJJTTzLabels& subspace_labels_bra,
const TwoBodySubspaceJJJTTzLabels& subspace_labels_ket,
const TwoBodyStateJJJTTzLabels& state_labels_bra,
const TwoBodyStateJJJTTzLabels& state_labels_ket,
const TwoBodySectorsJJJTTz& sectors,
OperatorBlocks<double>& matrices,
double matrix_element
);
double GetTwoBodyOperatorMatrixElementJJJTTz(
const basis::TwoBodySpaceJJJTTz& space, // TODO: add accessor to space in basis.h and remove it here
const TwoBodySubspaceJJJTTzLabels& subspace_labels_bra,
const TwoBodySubspaceJJJTTzLabels& subspace_labels_ket,
const TwoBodyStateJJJTTzLabels& state_labels_bra,
const TwoBodyStateJJJTTzLabels& state_labels_ket,
const TwoBodySectorsJJJTTz& sectors,
const OperatorBlocks<double>& matrices
);
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
} // namespace
#endif