material Derived Type

type, public, abstract :: material


Contents


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, deferred :: construct

Construct object

  • subroutine manipulate(this) Prototype

    This interface is used for the deferred procedures construct, update_prehook, and update_posthook.

    Arguments

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

procedure(initialize), public, deferred :: initialize

Initialize object

  • subroutine initialize(this) Prototype

    This interface is used for the deferred procedure initialize.

    Arguments

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

procedure(manipulate), public, deferred :: update_prehook

Executed before update

  • subroutine manipulate(this) Prototype

    This interface is used for the deferred procedures construct, update_prehook, and update_posthook.

    Arguments

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

procedure(manipulate), public, deferred :: update_posthook

Executed after update

  • subroutine manipulate(this) Prototype

    This interface is used for the deferred procedures construct, update_prehook, and update_posthook.

    Arguments

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

procedure, public :: update => material_update

Calculate propagators

  • private impure subroutine material_update(this, bootstrap)

    This subroutine updates the state of the material by solving the diffusion equations for the equilibrium propagators, the kinetic equations for the nonequilibrium propagators, and then calculating physical observables.

    Arguments

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

    Material that will be updated

    logical, intent(in), optional :: bootstrap

    Disable calculation of observables

procedure, public :: update_diffusion => diffusion_update

Calculate propagators (in equilibrium)

  • interface

    private subroutine diffusion_update(this)

    Arguments

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

procedure, public :: update_kinetic => kinetic_update

Calculate propagators (nonequilibrium)

  • interface

    private subroutine kinetic_update(this)

    Arguments

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

procedure(diffusion_equation), public, deferred :: diffusion_equation

Diffusion equation

  • pure subroutine diffusion_equation(this, p, e, z) Prototype

    This interface is used for the deferred procedure diffusion_equation.

    Arguments

    Type IntentOptional AttributesName
    class(material), intent(in) :: this
    type(propagator), intent(inout) :: p
    complex(kind=wp), intent(in) :: e
    real(kind=wp), intent(in) :: z

procedure(diffusion_equation_a), public, deferred :: diffusion_equation_a

Boundary condition (left)

  • pure subroutine diffusion_equation_a(this, p, a, r, rt) Prototype

    This interface is used for the deferred procedure diffusion_equation_a.

    Arguments

    Type IntentOptional AttributesName
    class(material), intent(in) :: this
    type(propagator), intent(in) :: p
    type(propagator), intent(in) :: a
    type(spin), intent(inout) :: r
    type(spin), intent(inout) :: rt

procedure(diffusion_equation_b), public, deferred :: diffusion_equation_b

Boundary condition (right)

  • pure subroutine diffusion_equation_b(this, p, b, r, rt) Prototype

    This interface is used for the deferred procedure diffusion_equation_b.

    Arguments

    Type IntentOptional AttributesName
    class(material), intent(in) :: this
    type(propagator), intent(in) :: p
    type(propagator), intent(in) :: b
    type(spin), intent(inout) :: r
    type(spin), intent(inout) :: rt

procedure(kinetic_equation), public, deferred :: kinetic_equation

Kinetic equation

  • pure subroutine kinetic_equation(this, Gp, R, z) Prototype

    This interface is used for the deferred procedure kinetic_equation.

    Arguments

    Type IntentOptional AttributesName
    class(material), intent(in) :: this
    type(propagator), intent(in) :: Gp
    complex(kind=wp), intent(inout), dimension(0:7,0:7):: R
    real(kind=wp), intent(in) :: z

procedure(kinetic_equation_a), public, deferred :: kinetic_equation_a

Boundary condition (left)

  • pure subroutine kinetic_equation_a(this, Gp, Ga, Cp, Ca) Prototype

    This interface is used for the deferred procedure kinetic_equation_a.

    Arguments

    Type IntentOptional AttributesName
    class(material), intent(in) :: this
    type(propagator), intent(in) :: Gp
    type(propagator), intent(in) :: Ga
    complex(kind=wp), intent(out), dimension(0:7,0:7):: Cp
    complex(kind=wp), intent(out), dimension(0:7,0:7):: Ca

procedure(kinetic_equation_b), public, deferred :: kinetic_equation_b

Boundary condition (right)

  • pure subroutine kinetic_equation_b(this, Gp, Gb, Cp, Cb) Prototype

    This interface is used for the deferred procedure kinetic_equation_b.

    Arguments

    Type IntentOptional AttributesName
    class(material), intent(in) :: this
    type(propagator), intent(in) :: Gp
    type(propagator), intent(in) :: Gb
    complex(kind=wp), intent(out), dimension(0:7,0:7):: Cp
    complex(kind=wp), intent(out), dimension(0:7,0:7):: Cb

procedure, public :: conf => material_conf

Configures material parameters

  • 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

procedure, public :: save => material_save

Saves the state of the material

  • private impure subroutine material_save(this)

    Save a backup of the current material state.

    Arguments

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

procedure, public :: load => material_load

Loads the state of the material

  • public impure subroutine material_load(this)

    Load a backup of a previous material state.

    Arguments

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