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.
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 |
procedure(manipulate), public, deferred :: construct | ../../ Construct object |
procedure(initialize), public, deferred :: initialize | ../../ Initialize object |
procedure(manipulate), public, deferred :: update_prehook | ../../ Executed before update |
procedure(manipulate), public, deferred :: 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, deferred :: diffusion_equation | ../../ Diffusion equation |
procedure(diffusion_equation_a), public, deferred :: diffusion_equation_a | ../../ Boundary condition (left) |
procedure(diffusion_equation_b), public, deferred :: diffusion_equation_b | ../../ Boundary condition (right) |
procedure(kinetic_equation), public, deferred :: kinetic_equation | ../../ Kinetic equation |
procedure(kinetic_equation_a), public, deferred :: kinetic_equation_a | ../../ Boundary condition (left) |
procedure(kinetic_equation_b), public, deferred :: 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 |
Configure a material property based on a key-value pair.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(material), | intent(inout) | :: | this | |||
character(len=*), | intent(in) | :: | key | |||
character(len=*), | intent(in) | :: | val |
Load a backup of a previous material state.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(material), | intent(inout) | :: | this |