Born-Oppenheimer approximation! The electronic density is calculated with the nucleus fixed.
On Fri, Jan 21, 2011 at 3:35 PM, Li, Shunfang <[email protected]> wrote: > Dear Bartek, > I am very pleased to get your e-mail and thanks a lot for your kind > help! > Ok, I will try to modify the velocity-version and force-version > according to your suggestions! > But, I have still another question on this problem: Can the applied > external force or velocity affect the convergence of the SCF calculations? > Any experience? > Thanks again! > > > Best Regards! > > Sincerely Yours > > S.F.Li > > > > > -----Original Message----- > From: Bartek Szyja on behalf of Bartek Szyja > Sent: Fri 1/21/2011 7:12 AM > To: [email protected] > Subject: Re: [SIESTA-L] For help: How to pply a constant initial velocity > or external force on some atoms of a system. > > On Fri, 2011-01-21 at 12:36 +0100, Riccardo Rurali wrote: > > > 2)Alternatively, can we apply external force on the atoms? > > > If it is okay, how to construct the input file? Or should we modify the > > > source code? > > > > You should modify the source code, but the developers have prepared a > > simple way for you to do it. > > Edit the file constr.f in the Src folder and add the kind of constraint > > that you like. If you add the line > > > > fa(3,132) = 0.5 > > > > for instance, at each MD step the force along z of the atoms number 132 > > will be set to 0.5. > > > > Don't forget to recompile Siesta and to specify the constraint: > > > > %block GeometryConstraints > > routine constr > > %endblock GeometryConstraints > > The only problem with it is that the recompilation of the code is > necessary after each change you make to the external force. I have been > studying similar subject before and dealt with it as follows: > I changed the constr routine to this: > > subroutine constr( cell, stress, na, isa, amass, xa, fa, ntcon ) > c ***************************************************************** > use m_fdf_global, only: fdf_global_get > use parallel, only: IOnode > implicit none > integer na, isa(na), ntcon, ia1, ia2 > double precision amass(na), cell(3,3), fa(3,na), > . stress, xa(3,na) > real af_magn > > c Write here your problem-specific code. > > call fdf_global_get(ia1,'MD.AFatom1',1) > call fdf_global_get(ia2,'MD.AFatom2',2) > call fdf_global_get(af_magn,'MD.AF',0.0) > > if (IOnode) write(6,'(A)') ' ' > > if (IOnode) then > write(6,'(A, I4, I4)' ) > . 'Bart: Artificial force added to atoms:', ia1, ia2 > write(6, '(A)' ) 'Bart: Coordinates: ' > write(6, '(A, I4, F12.5, F12.5, F12.5)' ) > . 'Bart: ',ia1, xa(1, ia1), xa(2, ia1), xa(3,ia1) > write(6, '(A, I4, F12.5, F12.5, F12.5)' ) > . 'Bart: ',ia2, xa(1, ia2), xa(2, ia2), xa(3,ia2) > write(6,'(A, F8.5)' ) 'Bart: Force magnitude: ', af_magn > write(6,'(A, F8.5)' ) 'Bart: Force magnitude: [nN] ', > . af_magn*41.1885 > > fa(3,ia1) = fa(3,ia1) + af_magn > fa(3,ia2) = fa(3,ia2) - af_magn > > ntcon = 1 > end > > I needed to recompile SIESTA only once. Then I added MD.AF (force > magnitude), MD.AFatom1 and MD.AFatom2 (atoms to which the force is > applied) keywords to the fdf file. The lines with fdf_global_get in the > constr subroutine get this information from the fdf file. Then the > forces are modified - to the force acting on a particular atom resulting > from gradients and whatever else - the artificial force is added along > the z direction (defined by number 3 in fa(3,ia1), use 1 and 2 for x and > y respectively). You also get a few more lines about it in the output > file. > > Feel free to use it and modify it according to your needs :) > > Cheers, > Bartek > > > >
