Skip to content

Commit 8d42606

Browse files
committed
fix: update the default value of md_tfreq
1 parent b5c32c2 commit 8d42606

File tree

6 files changed

+23
-12
lines changed

6 files changed

+23
-12
lines changed

doc/input-main.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1028,9 +1028,11 @@ This part of variables are used to control the molecular dynamics calculations.
10281028
10291029
- **Type**: Real
10301030
- **Description**:
1031-
- Oscillation frequency, used to determine Qmass of NHC;
1032-
- 1/(md_tfreq*md_dt) is collision probability in Anderson method.
1033-
- **Default**: 1.0
1031+
- When md_type = 1, md_tfreq controls the frequency of the temperature oscillations during the simulation. If it is too large, the
1032+
temperature will fluctuate violently; if it is too small, the temperature will take a very long time to equilibrate with the atomic system.
1033+
- When md_type = 3, md_tfreq*md_dt is the collision probability in Anderson method.
1034+
- If md_tfreq is not set in INPUT, md_tfreq will be autoset to be 1/40/md_dt.
1035+
- **Default**: 1/40/md_dt
10341036
10351037
#### md_mnhc
10361038

source/module_md/MD_parameters.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class MD_parameters
3131
msst_tscale = 0.01;
3232

3333
// NHC
34-
md_tfreq = 1;
34+
md_tfreq = 0;
3535
md_mnhc = 4;
3636

3737
// Langevin

source/module_md/NVT_ADS.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@
77

88
NVT_ADS::NVT_ADS(MD_parameters& MD_para_in, UnitCell_pseudo &unit_in) : Verlet(MD_para_in, unit_in)
99
{
10-
// convert to a.u. unit
11-
mdp.md_tfreq *= ModuleBase::AU_to_FS;
12-
1310
nraise = mdp.md_tfreq * mdp.md_dt;
1411
}
1512

@@ -47,7 +44,7 @@ void NVT_ADS::second_half()
4744
double deviation;
4845
for(int i=0; i<ucell.nat; ++i)
4946
{
50-
if(rand()/double(RAND_MAX) <= 1.0/nraise)
47+
if(rand()/double(RAND_MAX) <= nraise)
5148
{
5249
deviation = sqrt(mdp.md_tlast / allmass[i]);
5350
for(int k=0; k<3; ++k)

source/module_md/NVT_NHC.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@
77

88
NVT_NHC::NVT_NHC(MD_parameters& MD_para_in, UnitCell_pseudo &unit_in) : Verlet(MD_para_in, unit_in)
99
{
10-
// convert to a.u. unit
11-
mdp.md_tfreq *= ModuleBase::AU_to_FS;
12-
1310
if(mdp.md_tfirst == 0)
1411
{
1512
std::cout << " md_tfirst must be larger than 0 in NHC !!! " << std::endl;
@@ -197,6 +194,12 @@ void NVT_NHC::integrate()
197194
}
198195

199196
scale *= exp(-veta[0]*delta/2.0);
197+
if(!isfinite(scale))
198+
{
199+
std::cout << " Please set a proper md_tfreq !!! " << std::endl;
200+
ModuleBase::WARNING_QUIT("NVT_NHC", " Please set a proper md_tfreq !!! ");
201+
}
202+
200203
KE = kinetic * scale * scale;
201204

202205
// update force

source/module_md/verlet.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,15 @@ Verlet::Verlet(MD_parameters& MD_para_in, UnitCell_pseudo &unit_in):
2525
mdp.md_tfirst /= ModuleBase::Hartree_to_K;
2626
mdp.md_tlast /= ModuleBase::Hartree_to_K;
2727

28+
if(mdp.md_tfreq == 0)
29+
{
30+
mdp.md_tfreq = 1.0/40.0/mdp.md_dt;
31+
}
32+
else
33+
{
34+
mdp.md_tfreq *= ModuleBase::AU_to_FS;
35+
}
36+
2837
// LJ parameters
2938
mdp.lj_rcut *= ModuleBase::ANGSTROM_AU;
3039
mdp.lj_epsilon /= ModuleBase::Hartree_to_eV;

source/src_io/write_input.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ void Input::Print(const std::string &fn)const
175175
ModuleBase::GlobalFunc::OUTP(ofs,"msst_vis",mdp.msst_vis,"artificial viscosity");
176176
ModuleBase::GlobalFunc::OUTP(ofs,"msst_tscale",mdp.msst_tscale,"reduction in initial temperature");
177177
ModuleBase::GlobalFunc::OUTP(ofs,"msst_qmass",mdp.msst_qmass,"mass of thermostat");
178-
ModuleBase::GlobalFunc::OUTP(ofs,"md_tfreq",mdp.md_tfreq,"oscillation frequency, used to determine msst_qmass of NHC");
178+
ModuleBase::GlobalFunc::OUTP(ofs,"md_tfreq",mdp.md_tfreq,"oscillation frequency, used to determine qmass of NHC");
179179
ModuleBase::GlobalFunc::OUTP(ofs,"md_damp",mdp.md_damp,"damping parameter (time units) used to add force in Langevin method");
180180

181181

0 commit comments

Comments
 (0)