[Pw_forum] question about constrained magnetization
Gabriele Sclauzero
sclauzer at sissa.it
Thu Dec 3 14:49:47 CET 2009
Cyrille Barreteau wrote:
> Gabriele Sclauzero wrote:
>
>> Dear Cyrille,
>>
>> Cyrille Barreteau wrote:
>>
>>
>>> Dear all,
>>>
>>> I want to perform a calculation using the penalization technique.
>>> In an unconstrained scf calculation the input_magnetization(i) (i=1,ntyp)
>>> variable contains the m/n initial value of atom of type i, and this
>>> quantity should
>>> obviously belong to [-1,1] interval.
>>> To perform a constrained magnetization of "atomic type" I have to
>>> set the variable constrained_magnetization='atomic' and the magnetization
>>> will be the one given by input_magnetization(i).
>>> Therefore now input_magnetization(i) is no longer m/n but m only.
>>> However it seems that the range of input_magnetization has not been
>>> modified and is still within [-1,1] interval.
>>> If ever I set input_magnetization(i)>1 then the code automatically
>>> replace it by 1 and I cannot explore values larger than 1.
>>>
>>>
>>
>>
> Dear Gabriele,
>
> With your quick fix now the input_magnetization is no longer the
> magnetization m but m/n
> as it is when there is no penalization. Therefore we avoid the problem
> due to the [-1,1] interval
> however this makes things a litlle "crooked" since the charge n is not
> precisely now (the charge
> inside the sphere does not integrate to the total charge per atom..).
> However with a little of mental gymnastic we can manage to obtain what
> we want:-)
You are right, perhaps it is more practical to fix the magnetization (i.e. local magnetic
moment) rather than the "atomic spin polarization".
I think that the problem arises from the fact that the starting_magnetization keyword is
used for two different things, which maybe should be called starting_spin_polarization for
the unconstrained calculations and target_magnetization for constrained ones (of "atomic"
type).
Another quick fix that should meet your needs could be the following: let the
PW/add_bfield.f90 subroutine as the original and in PW/input.f90 move the check on
starting_magnetization
DO nt = 1, ntyp
!
IF ( starting_magnetization(nt) == sm_not_set ) THEN
starting_magnetization(nt) = 0.0_dp
ELSE IF ( starting_magnetization(nt) > 1.0_dp ) THEN
starting_magnetization(nt) = 1.0_dp
ELSE IF ( starting_magnetization(nt) <-1.0_dp ) THEN
starting_magnetization(nt) =-1.0_dp
END IF
!
END DO
AFTER the block of initialization of the magnetic contraints:
SELECT CASE( TRIM( constrained_magnetization ) )
CASE( 'none' )
!
i_cons = 0
!
CASE( 'total' )
!
...
END SELECT
Probably, the choice of the initial atomic spin polarization will not be the optimal one
for a better convergence to the target magnetization.
You can use this temporary solution until a more satisfactory implementation will be
conceived and carried out.
Thanks,
Gabriele
>
> thanks
> cyrille
>
--
o ------------------------------------------------ o
| Gabriele Sclauzero, PhD Student |
| c/o: SISSA & CNR-INFM Democritos, |
| via Beirut 2-4, 34014 Trieste (Italy) |
| email: sclauzer at sissa.it |
| phone: +39 040 3787 511 |
| skype: gurlonotturno |
o ------------------------------------------------ o
More information about the users
mailing list