1#ifndef PREPARE_UNITCELL_H
2#define PREPARE_UNITCELL_H
14 bool selective_dynamics_in,
16 std::string fixed_axes_in,
18 std::valarray<double> latvec_in,
19 std::vector<std::string> elements_in,
20 std::vector<std::string> pp_files_in,
21 std::vector<std::string> pp_types_in,
22 std::vector<std::string> orb_files_in,
23 std::valarray<int> natom_in,
24 std::vector<double> atomic_mass_in,
25 std::string coor_type_in,
26 std::valarray<double> coordinates_in);
30 bool selective_dynamics_in,
32 std::string fixed_axes_in,
34 std::valarray<double> latvec_in,
35 std::vector<std::string> elements_in,
36 std::vector<std::string> pp_files_in,
37 std::vector<std::string> pp_types_in,
38 std::vector<std::string> orb_files_in,
39 std::valarray<int> natom_in,
40 std::vector<double> atomic_mass_in,
41 std::string coor_type_in,
42 std::valarray<double> coordinates_in,
43 std::valarray<double> mbl_in,
44 std::valarray<double> velocity_in);
54 std::valarray<double>
latvec;
59 std::valarray<int>
natom;
63 std::valarray<double>
mbl;
72 this->ntype = this->elements.size();
74 ucell->
setup(this->latname,
90 for(
int it=0;it<ucell->
ntype;++it)
93 ucell->
atom_mass[it] = this->atomic_mass[it];
94 ucell->
pseudo_fn[it] = this->pp_files[it];
124 ucell->
GGT = ucell->
G*ucell->
GT;
131 this->atomic_index = 0;
132 for(
int it=0;it<ucell->
ntype;++it)
138 for(
int L=0; L<ucell->
atoms[it].
nwl+1; L++)
143 ucell->
atoms[it].
na = this->natom[it];
155 for(
int ia=0; ia<ucell->
atoms[it].
na; ++ia)
159 ucell->
atoms[it].
taud[ia].x = this->coordinates[this->atomic_index*3+0];
160 ucell->
atoms[it].
taud[ia].y = this->coordinates[this->atomic_index*3+1];
161 ucell->
atoms[it].
taud[ia].z = this->coordinates[this->atomic_index*3+2];
166 ucell->
atoms[it].
tau[ia].x = this->coordinates[this->atomic_index*3+0];
167 ucell->
atoms[it].
tau[ia].y = this->coordinates[this->atomic_index*3+1];
168 ucell->
atoms[it].
tau[ia].z = this->coordinates[this->atomic_index*3+2];
176 ucell->
atoms[it].
dis[ia].set(0, 0, 0);
179 ucell->
atoms[it].
vel[ia].x = this->velocity[this->atomic_index*3+0];
180 ucell->
atoms[it].
vel[ia].y = this->velocity[this->atomic_index*3+1];
181 ucell->
atoms[it].
vel[ia].z = this->velocity[this->atomic_index*3+2];
185 ucell->
atoms[it].
vel[ia].set(0,0,0);
190 if(this->selective_dynamics)
192 ucell->
atoms[it].
mbl[ia].x = this->mbl[this->atomic_index*3+0];
193 ucell->
atoms[it].
mbl[ia].y = this->mbl[this->atomic_index*3+1];
194 ucell->
atoms[it].
mbl[ia].z = this->mbl[this->atomic_index*3+2];
203 ucell->
nat = this->natom.sum();
211 bool selective_dynamics_in,
213 std::string fixed_axes_in,
215 std::valarray<double> latvec_in,
216 std::vector<std::string> elements_in,
217 std::vector<std::string> pp_files_in,
218 std::vector<std::string> pp_types_in,
219 std::vector<std::string> orb_files_in,
220 std::valarray<int> natom_in,
221 std::vector<double> atomic_mass_in,
222 std::string coor_type_in,
223 std::valarray<double> coordinates_in):
227 selective_dynamics(selective_dynamics_in),
228 relax_new(relax_new_in),
232 elements(elements_in),
233 pp_files(pp_files_in),
234 pp_types(pp_types_in),
235 orb_files(orb_files_in),
237 atomic_mass(atomic_mass_in),
238 coor_type(coor_type_in),
239 coordinates(coordinates_in)
241 mbl = std::valarray<double>(0.0, coordinates_in.size());
242 velocity = std::valarray<double>(0.0, coordinates_in.size());
248 bool selective_dynamics_in,
250 std::string fixed_axes_in,
252 std::valarray<double> latvec_in,
253 std::vector<std::string> elements_in,
254 std::vector<std::string> pp_files_in,
255 std::vector<std::string> pp_types_in,
256 std::vector<std::string> orb_files_in,
257 std::valarray<int> natom_in,
258 std::vector<double> atomic_mass_in,
259 std::string coor_type_in,
260 std::valarray<double> coordinates_in,
261 std::valarray<double> mbl_in,
262 std::valarray<double> velocity_in):
266 selective_dynamics(selective_dynamics_in),
267 relax_new(relax_new_in),
271 elements(elements_in),
272 pp_files(pp_files_in),
273 pp_types(pp_types_in),
274 orb_files(orb_files_in),
276 atomic_mass(atomic_mass_in),
277 coor_type(coor_type_in),
278 coordinates(coordinates_in),
280 velocity(velocity_in)
284 latname(utp.latname),
285 lmaxmax(utp.lmaxmax),
287 selective_dynamics(utp.selective_dynamics),
288 relax_new(utp.relax_new),
292 elements(utp.elements),
293 pp_files(utp.pp_files),
294 pp_types(utp.pp_types),
295 orb_files(utp.orb_files),
297 atomic_mass(utp.atomic_mass),
298 coor_type(utp.coor_type),
299 coordinates(utp.coordinates),
301 velocity(utp.velocity)
std::vector< ModuleBase::Vector3< double > > m_loc_
Definition atom_spec.h:48
int na
Definition atom_spec.h:28
std::vector< double > angle2
Definition atom_spec.h:47
int nw
Definition atom_spec.h:23
int nwl
Definition atom_spec.h:30
std::vector< ModuleBase::Vector3< double > > vel
Definition atom_spec.h:39
double mass
Definition atom_spec.h:14
std::string label
Definition atom_spec.h:35
std::vector< ModuleBase::Vector3< double > > dis
Definition atom_spec.h:37
std::vector< ModuleBase::Vector3< double > > taud
Definition atom_spec.h:38
std::vector< double > mag
Definition atom_spec.h:45
std::vector< int > l_nchi
Definition atom_spec.h:32
std::vector< ModuleBase::Vector3< double > > tau
Definition atom_spec.h:36
std::vector< ModuleBase::Vector3< int > > mbl
Definition atom_spec.h:15
std::vector< double > angle1
Definition atom_spec.h:46
double * start_mag
Definition magnetism.h:16
double ux_[3]
Definition magnetism.h:37
static void Cartesian_to_Direct(const double &cx, const double &cy, const double &cz, const double &R11, const double &R12, const double &R13, const double &R21, const double &R22, const double &R23, const double &R31, const double &R32, const double &R33, double &dx, double &dy, double &dz)
Change Cartesian coordinate (cx,cy,cz) to direct coordinate (dx,dy,dz), (cx,cy,cz) = (dx,...
Definition mathzone.h:126
double e13
Definition matrix3.h:26
Matrix3 Inverse(void) const
Inverse a 3x3 matrix.
Definition matrix3.cpp:44
double e31
Definition matrix3.h:26
double e11
element e_ij: i_row, j_column
Definition matrix3.h:26
double e33
Definition matrix3.h:26
double e32
Definition matrix3.h:26
double e21
Definition matrix3.h:26
double e12
Definition matrix3.h:26
double Det(void) const
Calculate the determinant of a 3x3 matrix.
Definition matrix3.cpp:29
double e23
Definition matrix3.h:26
double e22
Definition matrix3.h:26
Matrix3 Transpose(void) const
Transpose a 3x3 matrix.
Definition matrix3.cpp:39
T x
Definition vector3.h:24
T y
Definition vector3.h:25
T z
Definition vector3.h:26
Definition prepare_unitcell.h:8
std::valarray< double > mbl
Definition prepare_unitcell.h:63
std::vector< std::string > elements
Definition prepare_unitcell.h:55
UcellTestPrepare()=default
UcellTestPrepare(std::string latname_in, int lmaxmax_in, bool init_vel_in, bool selective_dynamics_in, bool relax_new_in, std::string fixed_axes_in, double lat0_in, std::valarray< double > latvec_in, std::vector< std::string > elements_in, std::vector< std::string > pp_files_in, std::vector< std::string > pp_types_in, std::vector< std::string > orb_files_in, std::valarray< int > natom_in, std::vector< double > atomic_mass_in, std::string coor_type_in, std::valarray< double > coordinates_in)
UnitCell * SetUcellInfo()
Definition prepare_unitcell.h:69
std::vector< std::string > pp_files
Definition prepare_unitcell.h:56
bool relax_new
Definition prepare_unitcell.h:51
std::valarray< double > velocity
Definition prepare_unitcell.h:64
std::valarray< double > coordinates
Definition prepare_unitcell.h:62
std::valarray< double > latvec
Definition prepare_unitcell.h:54
int atomic_index
Definition prepare_unitcell.h:67
std::vector< std::string > orb_files
Definition prepare_unitcell.h:58
UcellTestPrepare(const UcellTestPrepare &utp)
double lat0
Definition prepare_unitcell.h:53
int ntype
Definition prepare_unitcell.h:66
std::vector< double > atomic_mass
Definition prepare_unitcell.h:60
std::valarray< int > natom
Definition prepare_unitcell.h:59
std::string coor_type
Definition prepare_unitcell.h:61
int lmaxmax
Definition prepare_unitcell.h:48
bool selective_dynamics
Definition prepare_unitcell.h:50
std::string fixed_axes
Definition prepare_unitcell.h:52
std::string latname
Definition prepare_unitcell.h:47
bool init_vel
Definition prepare_unitcell.h:49
UcellTestPrepare(std::string latname_in, int lmaxmax_in, bool init_vel_in, bool selective_dynamics_in, bool relax_new_in, std::string fixed_axes_in, double lat0_in, std::valarray< double > latvec_in, std::vector< std::string > elements_in, std::vector< std::string > pp_files_in, std::vector< std::string > pp_types_in, std::vector< std::string > orb_files_in, std::valarray< int > natom_in, std::vector< double > atomic_mass_in, std::string coor_type_in, std::valarray< double > coordinates_in, std::valarray< double > mbl_in, std::valarray< double > velocity_in)
std::vector< std::string > pp_types
Definition prepare_unitcell.h:57
Atom * atoms
Definition unitcell.h:18
ModuleBase::Matrix3 & GT
Definition unitcell.h:40
double & lat0
Definition unitcell.h:28
std::vector< std::string > orbital_fn
Definition unitcell.h:206
ModuleBase::Matrix3 & latvec
Definition unitcell.h:35
Magnetism magnet
Definition unitcell.h:21
int & ntype
Definition unitcell.h:45
double & tpiba
Definition unitcell.h:30
double & tpiba2
Definition unitcell.h:31
int & nat
Definition unitcell.h:46
double & omega
Definition unitcell.h:32
ModuleBase::Matrix3 & GGT
Definition unitcell.h:41
ModuleBase::Vector3< double > & a2
Definition unitcell.h:36
ModuleBase::Vector3< double > & a3
Definition unitcell.h:36
bool set_atom_flag
Definition unitcell.h:20
std::vector< std::string > atom_label
Definition unitcell.h:202
std::string & Coordinate
Definition unitcell.h:26
std::vector< std::string > pseudo_fn
Definition unitcell.h:203
ModuleBase::Matrix3 & invGGT
Definition unitcell.h:42
ModuleBase::Vector3< double > & a1
Definition unitcell.h:36
ModuleBase::Matrix3 & G
Definition unitcell.h:39
void setup(const std::string &latname_in, const int &ntype_in, const int &lmaxmax_in, const bool &init_vel_in, const std::string &fixed_axes_in)
Definition mock_unitcell.cpp:31
std::vector< std::string > pseudo_type
Definition unitcell.h:204
double & lat0_angstrom
Definition unitcell.h:29
std::vector< double > atom_mass
Definition unitcell.h:201
std::string fixed_axes
Definition for_testing_input_conv.h:105
void init_vel(const UnitCell &unit_in, const int &my_rank, const bool &restart, double &temperature, double *allmass, int &frozen_freedom, ModuleBase::Vector3< int > *ionmbl, ModuleBase::Vector3< double > *vel)
initialize the atomic velocities
Definition md_func.cpp:186
const double TWO_PI
Definition constants.h:21
std::map< std::string, UcellTestPrepare > UcellTestLib
Definition prepare_unitcell.h:306