# Optimization of Magnetic Moments (VASP)¶

This tutorial shows how to perform global search for optimal magnetic moments on VASP.

In VASP there are two variables that control the magnetic moments imposed on atoms and for contrain magnetic moments along predefined directions.

Lets start with one INCAR file that looks like this:

```
$SYSTEM = CaMnO3 Pnma
PREC = Accurate
NELMIN = 6
NELM = 100
EDIFF = 1E-09
EDIFFG = -5E-6
IBRION = 1
ISIF = 2
LREAL = .FALSE.
ADDGRID = .TRUE.
NSW = 0
ISMEAR = -5
ENCUT = 500
ISPIN = 2
LORBIT = 11
LMAXMIX = 4
ISYM = 0
LSORBIT = .TRUE.
RWIGS = 2.00 1.87 1.78 1.24 # d-d/2
SAXIS = 0 0 1
LPLANE = .TRUE.
NPAR = 2
LSCALU = .FALSE.
NSIM = 4
LWAVE = .FALSE.
AMIX = 0.8
BMIX = 0.9
AMIX_MAG = 0.4
BMIX_MAG = 0.9
MAGMOM = 12*0
0.0000000 0.0416472 2.3859677
0.0000000 0.0416472 -2.3859677
0.0000000 0.0416472 -2.3859677
0.0000000 0.0416472 2.3859677
60*0
M_CONSTR = 12*0
0.0000000 0.0416472 2.3859677
0.0000000 0.0416472 -2.3859677
0.0000000 0.0416472 -2.3859677
0.0000000 0.0416472 2.3859677
60*0
I_CONSTRAINED_M = 1
LAMBDA = 10
#LDAU = .TRUE.
#LDAUTYPE = 1
#LDAUL = -1 2 -1
#LDAUU = 0.0 4.0 0.0
#LDAUJ = 0.0 0.0 0.0
#LDAUPRINT = 2
```

We have commented the variables related with LDA+U but the procedure works enabling those variables too. The variables MAGMOM and M_CONSTR controls the initial direction of Magnetic Moments and the constrained direction using LAMBDA as a parameter to control the intensity of the contrain.

Now, for different values of MAGMOM you can get variations on the total energy and the optimal magnetization can only be obtained by covering all possible directions.

The population ‘NonCollinearMagMoms’ defined the procedures to create a pool of candidates with random directions for Magnetic Moments and modify their directions in several ways suitable for being used by the global search algorithms implemented on PyChemia.

On this tutorial we will explore step by step how the methods on ‘NonCollinearMagMoms’ where implemented and how use them for efficiently