ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
abfs-vector3_order.h
Go to the documentation of this file.
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
10
11// mohan comment out 2021-02-06
12//#include <boost/archive/binary_oarchive.hpp>
13//#include <boost/archive/binary_iarchive.hpp>
14
15template<typename T> class Abfs::Vector3_Order: public ModuleBase::Vector3<T>
16{
17public:
19 Vector3_Order(const T &x,const T &y,const T &z):ModuleBase::Vector3<T>(x,y,z){}
20 Vector3_Order()=default;
21};
22
23template<typename T>
25
26/*
27template<typename T>
28bool operator> ( const Abfs::Vector3_Order<T> &v1, const Abfs::Vector3_Order<T> &v2 )
29{
30 if( v1.x>v2.x ) return true;
31 else if ( v1.x<v2.x ) return false;
32 if( v1.y>v2.y ) return true;
33 else if ( v1.y<v2.y ) return false;
34 if( v1.z>v2.z ) return true;
35 else if ( v1.z<v2.z ) return false;
36 return false;
37}
38
39template<typename T>
40bool operator<= ( const Abfs::Vector3_Order<T> &v1, const Abfs::Vector3_Order<T> &v2 )
41{
42 if( v1.x<v2.x ) return true;
43 else if ( v1.x>v2.x ) return false;
44 if( v1.y<v2.y ) return true;
45 else if ( v1.y>v2.y ) return false;
46 if( v1.z<v2.z ) return true;
47 else if ( v1.z>v2.z ) return false;
48 return true;
49}
50
51template<typename T>
52bool operator>= ( const Abfs::Vector3_Order<T> &v1, const Abfs::Vector3_Order<T> &v2 )
53{
54 if( v1.x>v2.x ) return true;
55 else if ( v1.x<v2.x ) return false;
56 if( v1.y>v2.y ) return true;
57 else if ( v1.y<v2.y ) return false;
58 if( v1.z>v2.z ) return true;
59 else if ( v1.z<v2.z ) return false;
60 return true;
61}
62*/
63
64// (a%b+b)%b: return same sign % as b
65template<typename T>
67{
68 auto mod = [](const int i, const int n){ return (i%n+3*n/2)%n-n/2; }; // [-n/2,n/2]
69// auto mod = [](const int i, const int n){ return (i%n+n)%n; }; // [0,n]
70 return Abfs::Vector3_Order<T>{ mod(v1.x,v2.x), mod(v1.y,v2.y), mod(v1.z,v2.z) };
71}
72
73#endif // ABFS_VECTOR3_ORDER_H
Abfs::Vector3_Order< T > operator%(const Abfs::Vector3_Order< T > &v1, const Abfs::Vector3_Order< T > &v2)
Definition abfs-vector3_order.h:66
bool operator<(const Abfs::Vector3_Order< T > &v1, const Abfs::Vector3_Order< T > &v2)
Definition abfs-vector3_order.h:16
Vector3_Order(const ModuleBase::Vector3< T > &v)
Definition abfs-vector3_order.h:18
Vector3_Order()=default
Vector3_Order(const T &x, const T &y, const T &z)
Definition abfs-vector3_order.h:19
3 elements vector
Definition vector3.h:22
T x
Definition vector3.h:24
Vector3(const T &x1=0, const T &y1=0, const T &z1=0)
Construct a new Vector 3 object.
Definition vector3.h:35
T y
Definition vector3.h:25
T z
Definition vector3.h:26
#define T
Definition exp.cpp:237
Definition array_pool.h:6