ferromagnet_m Module

This module defines the data type 'ferromagnet', which models the physical state of a ferromagnet. The type is a member of class(conductor), and thus inherits the internal structure and generic methods defined in conductor_m.



Derived Types

type, public, extends(conductor) ::  ferromagnet

Components

Type Visibility Attributes Name Initial
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, allocatable :: zeeman

How easy the material is magnetized by spin accumulation

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

Magnetic exchange field as a function of position

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 :: update_posthook => conductor_update_posthook ../../

Code to execute after updates

procedure, public :: diffusion_equation_a => conductor_diffusion_equation_a ../../

Boundary condition (left)

procedure, public :: diffusion_equation_b => conductor_diffusion_equation_b ../../

Boundary condition (right)

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 :: update_prehook => ferromagnet_update_prehook ../../

Code to execute before calculating the propagators

procedure, public :: diffusion_equation => ferromagnet_diffusion_equation ../../

Diffusion equation

procedure, public :: kinetic_equation => ferromagnet_kinetic_equation ../../

Kinetic equation

procedure, public :: conf => ferromagnet_conf ../../

Configures material parameters