add_bfield Subroutine

public subroutine add_bfield(bfield, iatom, lmax, nspin, irmdnew, imt1, iend, ncheb, theta, phi, ifunm, icleb, cleb, thetasnew, mode, vnspll0, vnspll1, thetansll)

Calculates the LL' expansion of a magnetic field. There are two magnetic field, which can be added: a homogeneous magnetic field read in from bfield.dat and a constraining field, which compensates the magnetic torque. @note Note The magnetic field is added in the following form: $ H = H_0 - \sigma \cdot \vec{B} $ The input magnetic field is read in from bfield.dat. It is homogeneous within each cell. @note Note Runs only with the new solver and either spin-orbit coupling or noncollinear magnetism.

!! calc LL' expansion of the shapefunction !call calc_thetallmat(thetansll, lmax, imt1, iend, irmdnew, thetasnew, ifunm, icleb, cleb) ! !if(myrank==master) then ! write(,'(" thetansll = ")') ! do ilm1=1,lmmax ! do ilm2=1,lmmax ! if(sum(abs(thetansll(ilm1,ilm2,:)))>1e-8 .or. sum(abs(thetansll_new(ilm1,ilm2,:)))>1e-8) then ! write(,'(2i4,1000es16.8)') ilm1, ilm2, thetansll(ilm1,ilm2,:) ! write(*,'(2i4,1000es16.8)') ilm1, ilm2, thetansll_new(ilm1,ilm2,:) ! end if ! end do ! end do !end if

Arguments

Type IntentOptional Attributes Name
type(type_bfield), intent(in) :: bfield
integer, intent(in) :: iatom
integer, intent(in) :: lmax
integer, intent(in) :: nspin
integer, intent(in) :: irmdnew
integer, intent(in) :: imt1
integer, intent(in) :: iend
integer, intent(in) :: ncheb
real(kind=dp), intent(in) :: theta
real(kind=dp), intent(in) :: phi
integer, intent(in), dimension (1:(2*lmax+1)**2) :: ifunm
integer, intent(in), dimension (ncleb, 4) :: icleb

Pointer array

real(kind=dp), intent(in), dimension (ncleb) :: cleb

GAUNT coefficients (GAUNT) ! CHECK THE DIMENSION AND HOW IT IS USED!!!

real(kind=dp), intent(in), dimension (irmdnew, nfund) :: thetasnew
character(len=*), intent(in) :: mode

either '1' or 'transpose', depending whether SOC potential is constructed for right or left solution

complex(kind=dp), intent(in), dimension(lmmaxd, lmmaxd, irmdnew) :: vnspll0

input potential in (l,m,s) basis

complex(kind=dp), intent(out), dimension(lmmaxd, lmmaxd, irmdnew) :: vnspll1

input potential in (l,m,s) basis

real(kind=dp), intent(in), dimension(1:(lmax+1)**2,1:(lmax+1)**2,1:irmdnew) :: thetansll