Dear Rolly,

There may be "physical" reason or "numerical" reasons that explain why your 
calculation explodes. The latter are easier to solve, by tuning some of the 
parameters in environ.in, the former are a bit more tricky and I would leave 
them to a second analysis.

Roughly speaking, in a calculation with environ you need to include some extra 
terms to the Kohn-Sham potential of the system in vacuum. These terms depend on 
the electronic density itself, in particular due to the fact that the interface 
between the system and the environment is defined in terms of the electronic 
density. Moreover, to compute one of these terms (probably the most important, 
the electrostatic interaction with the dielectric continuum) Environ uses an 
iterative approach, so every time you need to add the environ potential in an 
SCF step, Environ performs an additional iterative procedure to compute it: 
let's call this the polarisation iteration, in contrast to the SCF iteration. 

Having said this, there are two environ parameters which are crucial to help 
convergence of the total SCF calculation: 

tolrhopol: this parameter controls the convergence of the polarisation 
iteration. If you decrease it, the extra term coming from the interaction with 
the dielectric will be computed more accurately, but it will require more time 
to be computed. On the other hand, if you don't compute it accurately enough, 
the SCF accuracy will probably not go down as fast as it should and you may end 
up with an SCF accuracy that oscillates above the selected threshold (so that 
pw.x spends lots of time without converging). Since a single polarisation step 
only costs as much as a few FFTs, while a single SCF step costs more, it is 
generally better to INCREASE THE ACCURACY OF THE POLARISATION CALCULATION (I.E. 
DECREASE TOLRHOPOL) until you have a steep convergence of the SCF. 

environ_thr: since the extra terms depend in a delicate way on the electronic 
density (the shape of the environment depends on it), it is advisable not to 
add these terms at the very beginning of the SCF, which in pw.x usually 
initialise the electronic density in a random fashion. Thus, to enforce that 
the environment potentials are only added when the electronic density has a 
sensible shape, Environ only acts if the SCF accuracy is below a certain 
threshold, defined by environ_thr. On the other hand, you don't want to wait 
too long to add these extra terms, because it makes no sense to converge the 
density in vacuum and then add a very strong unexpected potential: the SCF 
accuracy will go banana and you need to redo all the SCF again. The net result 
is the one that you see in your output, you spend quite a lot SCF iterations to 
achieve the required SCF accuracy, then environ adds its additional potential 
and the SCF accuracy goes up again, with an oscillating down and up trend which 
may eventually explode. Thus, if you see poor convergence of the SCF the way to 
go is to INCREASE ENVIRON_THR, NOT TO DECREASE IT. As a side problem, SCF 
accuracy is an extensive quantity (it becomes larger for bigger systems), so 
that it is not possible to fix a default hardcoded value for this parameter. 
Nonetheless, as a rule of thumb, environ_thr should be set so as to skip only a 
few (three, four, five) SCF steps, so you may want to set environ_thr to the 
value of the SCF_accuracy at the third/fourth/fifth SCF step in vacuum. In your 
case a value of 0.3-0.5 could work better than the 0.0001 that you set up. 
NOTE: if your SCF starts from a previous run in vacuum and the electronic 
density has an already well defined shape, you may want to start adding Environ 
potentials from the very beginning: you can do this by setting environ_restart 
= .true. inside the environ.in input file. 

Apart from these two numerical parameters, you may want to simplify a bit the 
physics of your problem. In particular, since in most applications the most 
important effects of the environment are the electrostatic ones, you may want 
to switch off all the other terms. You may do this by using environ_type = 
'input' instead of the default ones (environ_type = 'water') and then by only 
specifying the dielectric constant of the environment env_static_permittivity = 
78.3 for water at room temperature. Since by default all environ contributions 
are turned off, by doing this you are only including the dielectric continuum 
in your environ calculation. This is analogous to what is done in example02 and 
example03 in the Environ/examples directory. 

Moreover, sine you are simulating a 2D system, convergence of the polarisation 
potential may be made more difficult by the artificial finite electric field 
coming from periodic boundary conditions. To avoid this, it would be better to 
use a PBC correction, in particular for slabs in Environ it is implemented a 
simple parabolic correction, which corrects most of the artefacts and helps 
converging the polarisation iterations. You can set it up by setting 
assume_isolated = 'slabz' in the &SYSTEM namelist in your pw input file (NOT 
the environ.in input file). Note that you can use the same correction also for 
a calculation in vacuum, you still need to run pw.x --environ and set 
environ_type = 'vacuum' inside environ.in (similarly to what is done in 
example03). 

Eventually, one reason of poor convergence of an Environ calculation may arise 
if your system's interface with the environment has a strange/irregular shape. 
This problem can be solved, but is a bit more cumbersome and I would only 
analyse it if the other things don't work. 

Please let me know if the explanation above is not clear or if you have any 
other question. 

Best regards,

Oliviero
--
Senior Postdoctoral Researcher
École Polytechnique Fédérale de Lausanne (EPFL) and
Università della Svizzera Italiana (USI) of Lugano
USI Campus, Via G. Buffi 17, 6904 Lugano, Switzerland
Emails: oliviero.andreussi @ epfl.ch -or- usi.ch
Tel: +41-(0)58-666-4810 / Skype: olivieroandreussi
Web: https://sites.google.com/site/olivieroandreussi

 
________________________________________
From: [email protected] [[email protected]] on behalf of 
Rolly Ng [[email protected]]
Sent: Sunday, September 25, 2016 7:42 AM
To: PWSCF Forum
Subject: [Pw_forum] Environ failed with graphene

Dear Oliviero,

I am trying to relax a gold-doped graphene supercell with 72 atoms in
water using Environ.

My input/output files are attached, but I observed that the solvation
energy became positive (which may be true?) but the optimization failed
with following message.

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      Error in routine  cdiaghg (310):
       problems computing cholesky
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

      stopping ...

How can I solve the problem? Is the environ.in correct?

Thanks,
Rolly

--
PhD. Research Fellow,
Dept. of Physics & Materials Science,
City University of Hong Kong
Tel: +852 3442 4000
Fax: +852 3442 0538

_______________________________________________
Pw_forum mailing list
[email protected]
http://pwscf.org/mailman/listinfo/pw_forum

Reply via email to