Skip to content

Commit 5e94cb2

Browse files
authored
Feature: set relax_nmax=0 to enable dry run (#5595)
* Feature: set relax_nmax=0 to enable dry run * update docs
1 parent df94f88 commit 5e94cb2

File tree

4 files changed

+15
-4
lines changed

4 files changed

+15
-4
lines changed

docs/advanced/input_files/input-main.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1389,7 +1389,7 @@ These variables are used to control the geometry relaxation.
13891389
### relax_nmax
13901390

13911391
- **Type**: Integer
1392-
- **Description**: The maximal number of ionic iteration steps, the minimum value is 1.
1392+
- **Description**: The maximal number of ionic iteration steps. If set to 0, the code performs a quick "dry run", stopping just after initialization. This is useful to check for input correctness and to have the summary printed.
13931393
- **Default**: 1 for SCF, 50 for relax and cell-relax calcualtions
13941394

13951395
### relax_cg_thr

source/module_io/read_input_item_relax.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,14 @@ void ReadInput::item_relax()
5454
= {"scf", "nscf", "get_S", "get_pchg", "get_wf", "test_memory", "test_neighbour", "gen_bessel"};
5555
if (std::find(singlelist.begin(), singlelist.end(), calculation) != singlelist.end())
5656
{
57-
para.input.relax_nmax = 1;
57+
if (para.input.relax_nmax != 0)
58+
{
59+
para.input.relax_nmax = 1;
60+
}
5861
}
5962
else if (calculation == "relax" || calculation == "cell-relax")
6063
{
61-
if (para.input.relax_nmax == 0) // default value
64+
if (para.input.relax_nmax < 0)
6265
{
6366
para.input.relax_nmax = 50;
6467
}

source/module_io/test_serial/read_input_item_test.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -608,9 +608,17 @@ TEST_F(InputTest, Item_test)
608608
it->second.reset_value(it->second, param);
609609
EXPECT_EQ(param.input.relax_nmax, 1);
610610

611+
param.input.relax_nmax = 0;
612+
it->second.reset_value(it->second, param);
613+
EXPECT_EQ(param.input.relax_nmax, 0);
614+
611615
param.input.calculation = "relax";
612616
param.input.relax_nmax = 0;
613617
it->second.reset_value(it->second, param);
618+
EXPECT_EQ(param.input.relax_nmax, 0);
619+
620+
param.input.relax_nmax = -1;
621+
it->second.reset_value(it->second, param);
614622
EXPECT_EQ(param.input.relax_nmax, 50);
615623
}
616624
{ // out_stru

source/module_parameter/input_parameter.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ struct Input_para
152152
bool relax_new = true;
153153
bool relax = false; ///< allow relaxation along the specific direction
154154
double relax_scale_force = 0.5;
155-
int relax_nmax = 0; ///< number of max ionic iter
155+
int relax_nmax = -1; ///< number of max ionic iter
156156
double relax_cg_thr = 0.5; ///< threshold when cg to bfgs, pengfei add 2011-08-15
157157
double force_thr = -1; ///< threshold of force in unit (Ry/Bohr)
158158
double force_thr_ev = -1; ///< threshold of force in unit (eV/Angstrom)

0 commit comments

Comments
 (0)