LibRPA
Get Started
Installation
Driver Usage
User Guide
Compile Options
Input Parameters
API Usage
Tutorial
RPA correlation energy
One-shot
GW
Developer Zone
Documentation
Code Design
Dataset Format
API Documentation
LibRPA
LibRPA
LibRPA: vector3_order.h Source File
View page source
vector3_order.h Source File
LibRPA: vector3_order.h Source File
LibRPA
src
vector3_order.h
1
//==========================================================
2
// AUTHOR : Peize Lin
3
// DATE : 2017-01-10
4
//==========================================================
5
6
#ifndef ABFS_VECTOR3_ORDER_H
7
#define ABFS_VECTOR3_ORDER_H
8
#include "vector3.h"
9
//#include "src_lcao/abfs.h"
10
11
//#include <boost/archive/binary_oarchive.hpp>
12
//#include <boost/archive/binary_iarchive.hpp>
13
14
template
<
typename
T>
class
Vector3_Order
:
public
Vector3
<T>
15
{
16
public
:
17
Vector3_Order
(
const
Vector3<T>
&v):
Vector3<T>
(v){}
18
Vector3_Order
(
const
T &x,
const
T &y,
const
T &z):
Vector3<T>
(x,y,z){}
19
Vector3_Order
()=
default
;
20
};
21
22
template
<
typename
T>
23
bool
operator< (
const
Vector3_Order<T>
&v1,
const
Vector3_Order<T>
&v2 );
24
25
template
<
typename
T>
26
Vector3_Order<T>
operator-(
const
Vector3_Order<T>
&v1)
27
{
28
return
{-v1.x, -v1.y, -v1.z};
29
}
30
31
template
<
typename
T>
32
bool
operator== (
const
Vector3_Order<T>
&v1,
const
Vector3_Order<T>
&v2 );
33
/*
34
template<typename T>
35
bool operator> ( const Abfs::Vector3_Order<T> &v1, const Abfs::Vector3_Order<T> &v2 )
36
{
37
if( v1.x>v2.x ) return true;
38
else if ( v1.x<v2.x ) return false;
39
if( v1.y>v2.y ) return true;
40
else if ( v1.y<v2.y ) return false;
41
if( v1.z>v2.z ) return true;
42
else if ( v1.z<v2.z ) return false;
43
return false;
44
}
45
46
template<typename T>
47
bool operator<= ( const Abfs::Vector3_Order<T> &v1, const Abfs::Vector3_Order<T> &v2 )
48
{
49
if( v1.x<v2.x ) return true;
50
else if ( v1.x>v2.x ) return false;
51
if( v1.y<v2.y ) return true;
52
else if ( v1.y>v2.y ) return false;
53
if( v1.z<v2.z ) return true;
54
else if ( v1.z>v2.z ) return false;
55
return true;
56
}
57
58
template<typename T>
59
bool operator>= ( const Abfs::Vector3_Order<T> &v1, const Abfs::Vector3_Order<T> &v2 )
60
{
61
if( v1.x>v2.x ) return true;
62
else if ( v1.x<v2.x ) return false;
63
if( v1.y>v2.y ) return true;
64
else if ( v1.y<v2.y ) return false;
65
if( v1.z>v2.z ) return true;
66
else if ( v1.z<v2.z ) return false;
67
return true;
68
}
69
*/
70
71
// (a%b+b)%b: return same sign % as b
72
template
<
typename
T>
73
Vector3_Order<T>
operator% (
const
Vector3_Order<T>
&v1,
const
Vector3_Order<T>
&v2 )
74
{
75
auto
mod = [](
const
int
i,
const
int
n){
return
(i%n+3*n/2)%n-n/2; };
// [-n/2,n/2]
76
// auto mod = [](const int i, const int n){ return (i%n+n)%n; }; // [0,n]
77
return
Vector3_Order<T>
{ mod(v1.x,v2.x), mod(v1.y,v2.y), mod(v1.z,v2.z) };
78
}
79
80
#endif
// ABFS_VECTOR3_ORDER_H
Vector3_Order
Definition:
vector3_order.h:15
Vector3
Definition:
vector3.h:18
Generated by
1.9.1