This thread is locked.Only browsing is available.
Top Page > Browsing
Convergence criterion for NCDFT-SOC
Date: 2017/11/25 20:50
Name: Evgenia Kovaleva   <kovaleva.evgeniya1991@mail.ru>

Dear all,


I've found that OpenMX 3.8 ignores scf.criterion keyword when spin-orbit coupling is on and gives preference to scf.maxIter instead. Even when convergence criterion is reached it doesn't stop the minimization routine. In principle, there's no problem in reducing number of electronic iterations as the calculation converges by using on-the-fly control. I just wonder about the reason of this.

Best regards,

Evgenia A. Kovaleva
メンテ
Page: [1]

Re: Convergence criterion for NCDFT-SOC ( No.1 )
Date: 2017/11/26 02:55
Name: Naoya Yamaguchi

Hi,

There can be seen a difference between OpenMX 3.7 and 3.8 in on-the-fly control.

On-the-fly control of SCF mixing parameters:
http://www.openmx-square.org/openmx_man3.7/node39.html (ver. 3.7)
http://www.openmx-square.org/openmx_man3.8/node44.html (ver. 3.8)

In the latter (ver. 3.8), you can see that the keyword "scf.criterion" can also be handled on on-the-fly control. I think this problem can occur using on-the-fly control without putting the setting of "scf.criterion" into the file "*_SCF_keywords", regardless of the on/off states of the keyword "scf.SpinOrbit.Coupling".

In fact, I've found the concerned codes in a source file as follows.

In DFT.c:

void Read_SCF_keywords()
{
int po,myid;
char fname[YOUSO10];
FILE *fp;

sprintf(fname,"%s%s_SCF_keywords",filepath,filename);

if ((fp = fopen(fname,"r")) != NULL){
po = 1;
}
else {
po = 0;
}

if (po==1){

MPI_Comm_rank(MPI_COMM_WORLD1,&myid);

if (myid==Host_ID){
printf("\n The keywords for SCF iteration are renewed by %s.\n",fname);fflush(stdout);
}

/* open the file */

input_open(fname);

/* scf.maxIter */

input_int("scf.maxIter",&DFTSCF_loop,40);
if (DFTSCF_loop<0) {
MPI_Finalize();
exit(0);
}

/* scf.Min.Mixing.Weight */

input_double("scf.Min.Mixing.Weight",&Min_Mixing_weight,(double)0.001);

/* scf.Max.Mixing.Weight */

input_double("scf.Max.Mixing.Weight",&Max_Mixing_weight,(double)0.4);

/* scf.Kerker.factor */

input_double("scf.Kerker.factor",&Kerker_factor,(double)4.0);

/* scf.Mixing.StartPulay */

input_int("scf.Mixing.StartPulay",&Pulay_SCF,6);

/* scf.criterion */

input_double("scf.criterion",&SCF_Criterion,(double)1.0e-6);

/* close the file */

input_close();
}

}

And, compared to that of ver. 3.7, there are the additional codes in ver. 3.8 as below:

/* scf.criterion */

input_double("scf.criterion",&SCF_Criterion,(double)1.0e-6);

You may comment out or delete the above lines to invalidate it. Or you should put the setting of "scf.criterion" into "*_SCF_keywords".

The following example to modify is to keep the setting of "scf.criterion" when without specifying it in "*_SCF_keywords".

input_double("scf.criterion",&SCF_Criterion,SCF_Criterion);

Regards,
Naoya Yamaguchi
メンテ

Page: [1]