halfmetal_m Module

This module defines the data type 'halfmetal', which models the physical state of a strong or halfmetallic ferromagnet. The type is a member of class(conductor), and inherits the internal structure and generic methods defined there.



Contents


Derived Types

type, public, extends(conductor) :: halfmetal

Components

TypeVisibility AttributesNameInitial
real(kind=wp), public :: length =1.00_wp

Material length (L/ξ)

real(kind=wp), public :: thouless =1.00_wp

Thouless energy (ħD/L²)

real(kind=wp), public :: scattering =0.01_wp

Inelastic scattering (η/Δ₀)

logical, public :: transparent_a =.false.

Interface transparency (left)

logical, public :: transparent_b =.false.

Interface transparency (right)

logical, public :: phaselock =.false.

Lock the center-of-mass phase?

logical, public :: nonequilibrium =.false.

Equilibrium?

logical, public :: transverse =.false.

Transverse potential gradients?

real(kind=wp), public :: voltage =0.00_wp

Voltage (eV/Δ₀)

real(kind=wp), public :: temperature =0.01_wp

Temperature (T/Tc)

real(kind=wp), public :: spinvoltage =0.00_wp

Spin-voltage (eVs/Δ₀)

real(kind=wp), public :: spintemperature =0.00_wp

Spin-temperature (Ts/Tc)

real(kind=wp), public, dimension(1:3):: spinaxis =[0, 0, 1]

Spin quantization axis

real(kind=wp), public, allocatable:: energy(:)

Energy domain

real(kind=wp), public, allocatable:: location(:)

Position domain

type(propagator), public, allocatable:: propagator(:,:)

Propagator values

type(propagator), public, allocatable:: backup(:,:)

Propagator backups

real(kind=wp), public, allocatable:: density(:,:,:)

Spin-resolved density of states

real(kind=wp), public, allocatable:: supercurrent(:,:)

Charge, spin, heat, and spin-heat supercurrents

real(kind=wp), public, allocatable:: lossycurrent(:,:)

Charge, spin, heat, and spin-heat dissipative currents

real(kind=wp), public, allocatable:: accumulation(:,:)

Charge, spin, heat, and spin-heat accumulation

real(kind=wp), public, allocatable:: magnetization(:,:)

Magnetization due to exchange and Zeeman effects

complex(kind=wp), public, allocatable:: correlation(:)

Superconducting pair-correlations

integer, public :: order =1

Simulation priority of this material

class(material), public, pointer:: material_a=> null()

Material to the left (default: vacuum)

class(material), public, pointer:: material_b=> null()

Material to the right (default: vacuum)

integer, public :: iteration =0

Used to keep track of selfconsistent iteration cycles

logical, public :: selfconsistent =.true.

Whether to selfconsistently calculate the superconducting gap

logical, public :: boost =.true.

Whether to use convergence acceleration methods

integer, public :: scaling =128

Maximal mesh increase (range: 2^N, N>1)

integer, public :: method =4

Runge—Kutta order (range: 2, 4, 6)

integer, public :: control =2

Error control (1: defect, 2: global error, 3: 1 then 2, 4: 1 and 2)

real(kind=wp), public :: tolerance =1e-10_wp

Error tolerance (maximum defect or global error)

integer, public :: information =0

Debug information (range: [-1,2])

real(kind=wp), public :: difference =1e+10_wp

Difference between iterations

character(len=128), public :: type_string ='MATERIAL'

Name of this material

type(spinscattering), public, allocatable:: spinscattering

Spin-dependent scattering

type(spinorbit), public, allocatable:: spinorbit

Spin-orbit coupling

type(spinactive), public, allocatable:: spinactive_a

Spin-active interface (left)

type(spinactive), public, allocatable:: spinactive_b

Spin-active interface (right)

real(kind=wp), public :: polarization =0.0_wp

Spin-polarization of the ferromagnet

Type-Bound Procedures

procedure, public :: update => material_update

Calculate propagators

procedure, public :: update_diffusion => diffusion_update

Calculate propagators (in equilibrium)

procedure, public :: update_kinetic => kinetic_update

Calculate propagators (nonequilibrium)

procedure, public :: save => material_save

Saves the state of the material

procedure, public :: load => material_load

Loads the state of the material

procedure, public :: construct => conductor_construct

Constructs the object

procedure, public :: initialize => conductor_initialize

Initializes propagators

procedure, public :: kinetic_equation => conductor_kinetic_equation

Kinetic equation

procedure, public :: kinetic_equation_a => conductor_kinetic_equation_a

Boundary condition (left)

procedure, public :: kinetic_equation_b => conductor_kinetic_equation_b

Boundary condition (right)

procedure, public :: conf => halfmetal_conf

Configures the material parameters

procedure, public :: diffusion_equation => halfmetal_diffusion_equation

Defines the Usadel diffusion equation

procedure, public :: diffusion_equation_a => halfmetal_diffusion_equation_a

Boundary condition at the left interface

procedure, public :: diffusion_equation_b => halfmetal_diffusion_equation_b

Boundary condition at the right interface

procedure, public :: update_prehook => halfmetal_update_prehook

Code to execute before calculating the propagators

procedure, public :: update_posthook => halfmetal_update_posthook

Code to execute after calculating the propagators

procedure, public :: update_density => halfmetal_update_density

Calculates the density of states