material_m Module

This module defines the data type 'material', which models the state of a physical material for a discretized range of positions and energies. This is an abstract type, meaning that it is not intended to be instantiated on its own, but is intended as a base type for physical materials like conductors, superconductors, and ferromagnets. In other words, this type defines the essential data structures and program structure, while the derived subtypes will define actual physics.



Contents


Derived Types

type, public, abstract :: material

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-Bound Procedures

procedure(manipulate), public :: construct

Construct object

procedure(initialize), public :: initialize

Initialize object

procedure(manipulate), public :: update_prehook

Executed before update

procedure(manipulate), public :: update_posthook

Executed after update

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(diffusion_equation), public :: diffusion_equation

Diffusion equation

procedure(diffusion_equation_a), public :: diffusion_equation_a

Boundary condition (left)

procedure(diffusion_equation_b), public :: diffusion_equation_b

Boundary condition (right)

procedure(kinetic_equation), public :: kinetic_equation

Kinetic equation

procedure(kinetic_equation_a), public :: kinetic_equation_a

Boundary condition (left)

procedure(kinetic_equation_b), public :: kinetic_equation_b

Boundary condition (right)

procedure, public :: conf => material_conf

Configures material parameters

procedure, public :: save => material_save

Saves the state of the material

procedure, public :: load => material_load

Loads the state of the material


Subroutines

public impure subroutine material_conf(this, key, val)

Configure a material property based on a key-value pair.

Arguments

Type IntentOptional AttributesName
class(material), intent(inout) :: this
character(len=*), intent(in) :: key
character(len=*), intent(in) :: val

public impure subroutine material_load(this)

Load a backup of a previous material state.

Arguments

Type IntentOptional AttributesName
class(material), intent(inout) :: this