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
|
|