| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| class(Abstract_Periodic_Box), | private, | pointer | :: | periodic_box | => | null() | |
| integer, | private | :: | reci_numbers(num_dimensions) | = | 0 | ||
| class(Abstract_DLC_Weight), | private, | pointer | :: | weight | => | null() | |
| class(Abstract_DLC_Structures), | private, | pointer | :: | structures | => | null() |
| procedure, public :: construct => Abstract_construct | |
| procedure, public :: destroy => Abstract_destroy | |
| procedure, public :: target => Abstract_target | |
| procedure, public :: visit => Abstract_visit | |
| procedure, public :: visit_translation => Abstract_visit_translation | |
| procedure, public :: visit_transmutation => Abstract_visit_transmutation | |
| procedure, public :: visit_rotation => Abstract_visit_rotation | |
| procedure, public :: visit_add => Abstract_visit_add | |
| procedure, public :: visit_remove => Abstract_visit_remove | |
| procedure, public :: visit_switch => Abstract_visit_switch | |
| procedure, private :: visit_exchange => Abstract_visit_exchange |
| procedure, public :: construct => Abstract_construct | |
| procedure, public :: destroy => Abstract_destroy | |
| procedure, public :: target => Abstract_target | |
| procedure, public :: visit => Abstract_visit | |
| procedure, public :: visit_translation => Abstract_visit_translation | |
| procedure, public :: visit_transmutation => Abstract_visit_transmutation | |
| procedure, public :: visit_rotation => Abstract_visit_rotation | |
| procedure, public :: visit_add => Abstract_visit_add | |
| procedure, public :: visit_remove => Abstract_visit_remove | |
| procedure, public :: visit_switch => Abstract_visit_switch |
| procedure, public :: visit_rotation => Abstract_visit_rotation | |
| procedure, public :: visit_add => Abstract_visit_add | |
| procedure, public :: visit_remove => Abstract_visit_remove | |
| procedure, public :: construct => Null_construct | |
| procedure, public :: destroy => Null_destroy | |
| procedure, public :: target => Null_target | |
| procedure, public :: visit => Null_visit | |
| procedure, public :: visit_translation => Null_visit_translation | |
| procedure, public :: visit_transmutation => Null_visit_transmutation | |
| procedure, public :: visit_switch => Null_visit_switch | |
| procedure, private :: visit_exchange => Null_visit_exchange |
\[ U = \sum_{\vec{k}_{1:2}} w(\vec{k}_{1:2}) \Re[S_+(\vec{k}_{1:2}) S_-(\vec{k}_{1:2})^\ast] \] where \( w(\vec{k}_{1:2}) \) is Abstract_DLC_Weight and \( S_\pm(\vec{k}_{1:2}) \) is Abstract_DLC_Structures.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Abstract_DLC_Visitor), | intent(in) | :: | this |
Energy delta when a particle is translated: \( (\vec{x}, \vec{\mu}) \to (\vec{x}^\prime, \vec{\mu}) \). \[ \Delta S_-^\ast(\vec{k}_{1:2}) = (-k_{1:2} \mu_3 - i \vec{k}_{1:2} \cdot \vec{\mu}_{1:2}) \left( e^{-k_{1:2} x^\prime_3} e^{-i \vec{k}_{1:2} \cdot \vec{x}^\prime_{1:2}} - e^{-k_{1:2} x_3} e^{-i \vec{k}_{1:2} \cdot \vec{x}_{1:2}} \right) \] \[ \Delta S_+(\vec{k}_{1:2}) = (+k_{1:2} \mu_3 + i \vec{k}_{1:2} \cdot \vec{\mu}_{1:2}) \left( e^{+k_{1:2} x^\prime_3} e^{+i \vec{k}_{1:2} \cdot \vec{x}^\prime_{1:2}} - e^{+k_{1:2} x_3} e^{+i \vec{k}_{1:2} \cdot \vec{x}_{1:2}} \right) \] \[ \Delta S_+(\vec{k}_{1:2}) \Delta S_-^\ast(\vec{k}_{1:2}) = \left[ -(k_{1:2} \mu_3)^2 + (\vec{k}_{1:2} \cdot \vec{\mu}_{1:2})^2 - 2 i k_{1:2} \mu_3 \vec{k}_{1:2} \cdot \vec{\mu}_{1:2} \right] \left( 2 - \\ e^{+k_{1:2} x^\prime_3} e^{+i \vec{k}_{1:2} \cdot \vec{x}^\prime_{1:2}} e^{-k_{1:2} x_3} e^{-i \vec{k}_{1:2} \cdot \vec{x}_{1:2}} - \\ e^{-k_{1:2} x^\prime_3} e^{-i \vec{k}_{1:2} \cdot \vec{x}^\prime_{1:2}} e^{+k_{1:2} x_3} e^{+i \vec{k}_{1:2} \cdot \vec{x}_{1:2}} \right) \]
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Abstract_DLC_Visitor), | intent(in) | :: | this | |||
| integer, | intent(in) | :: | i_component | |||
| real(kind=DP), | intent(in) | :: | new_position(:) | |||
| type(Concrete_Particle), | intent(in) | :: | old |
Energy delta when a particle is transmuted: \( (\vec{x}, \vec{\mu}) \to (\vec{x}, \vec{\mu}^\prime) \). \[ \Delta S_-^\ast(\vec{k}_{1:2}) = \left[ -k_{1:2} (\mu^\prime_3 - \mu_3) - i \vec{k}_{1:2} \cdot (\vec{\mu}^\prime_{1:2} - \vec{\mu}_{1:2}) \right] e^{-k_{1:2} x_3} e^{-i \vec{k}_{1:2} \cdot \vec{x}_{1:2}} \] \[ \Delta S_+(\vec{k}_{1:2}) = \left[ +k_{1:2} (\mu^\prime_3 - \mu_3) + i \vec{k}_{1:2} \cdot (\vec{\mu}^\prime_{1:2} - \vec{\mu}_{1:2}) \right] e^{+k_{1:2} x_3} e^{+i \vec{k}_{1:2} \cdot \vec{x}_{1:2}} \] \[ \Re[\Delta S_+(\vec{k}_{1:2}) \Delta S_-^\ast(\vec{k}_{1:2})] = -[k_{1:2} (\mu^\prime_3 - \mu_3)]^2 + [\vec{k}_{1:2} \cdot (\vec{\mu}^\prime_{1:2} - \vec{\mu}_{1:2})]^2 \]
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Abstract_DLC_Visitor), | intent(in) | :: | this | |||
| integer, | intent(in) | :: | ij_components(:) | |||
| real(kind=DP), | intent(in) | :: | new_dipole_moment(:) | |||
| type(Concrete_Particle), | intent(in) | :: | old |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Abstract_DLC_Visitor), | intent(in) | :: | this | |||
| integer, | intent(in) | :: | i_component | |||
| real(kind=DP), | intent(in) | :: | new_dipole_moment(:) | |||
| type(Concrete_Particle), | intent(in) | :: | old |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Abstract_DLC_Visitor), | intent(in) | :: | this | |||
| integer, | intent(in) | :: | i_component | |||
| type(Concrete_Particle), | intent(in) | :: | particle |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Abstract_DLC_Visitor), | intent(in) | :: | this | |||
| integer, | intent(in) | :: | i_component | |||
| type(Concrete_Particle), | intent(in) | :: | particle |
Energy delta when a particle of coordinates \( (\vec{x}, \vec{\mu}) \) is added (\( \pmb{+} \)) or removed (\( \pmb{-} \)). \[ \Delta S_-^\ast(\vec{k}_{1:2}) = \pmb{\pm} (-k_{1:2} \mu_3 - i \vec{k}_{1:2} \cdot \vec{\mu}_{1:2}) e^{-k_{1:2} x_3} e^{-i \vec{k}_{1:2} \cdot \vec{x}_{1:2}} \] \[ \Delta S_+(\vec{k}_{1:2}) = \pmb{\pm} (+k_{1:2} \mu_3 + i \vec{k}_{1:2} \cdot \vec{\mu}_{1:2}) e^{+k_{1:2} x_3} e^{+i \vec{k}_{1:2} \cdot \vec{x}_{1:2}} \] \[ \Re[\Delta S_+(\vec{k}_{1:2}) \Delta S_-^\ast(\vec{k}_{1:2})] = -(k_{1:2} \mu_3)^2 + (\vec{k}_{1:2} \cdot \vec{\mu}_{1:2})^2 \]
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Abstract_DLC_Visitor), | intent(in) | :: | this | |||
| integer, | intent(in) | :: | i_component | |||
| type(Concrete_Particle), | intent(in) | :: | particle | |||
| real(kind=DP), | intent(in) | :: | signed |
Energy delta when 2 particles of coordinates \( (\vec{x}_1, \vec{\mu}_1) \) and \( (\vec{x}_2, \vec{\mu}_2) \) switch their positions. \[ \Delta S_-^\ast(\vec{k}_{1:2}) = \left[ -k_{1:2} (\mu_{1, 3} - \mu_{2, 3}) - i \vec{k}_{1:2} \cdot (\vec{\mu}_{1, 1:2} - \vec{\mu}_{2, 1:2}) \right] \\ \left( e^{-k_{1:2} x_{2, 3}} e^{-i \vec{k}_{1:2} \cdot \vec{x}_{2, 1:2}} - e^{-k_{1:2} x_{1, 3}} e^{-i \vec{k}_{1:2} \cdot \vec{x}_{1, 1:2}} \right) \] \[ \Delta S_+(\vec{k}_{1:2}) = \left[ +k_{1:2} (\mu_{1, 3} - \mu_{2, 3}) + i \vec{k}_{1:2} \cdot (\vec{\mu}_{1, 1:2} - \vec{\mu}_{2, 1:2}) \right] \\ \left( e^{+k_{1:2} x_{2, 3}} e^{+i \vec{k}_{1:2} \cdot \vec{x}_{2, 1:2}} - e^{+k_{1:2} x_{1, 3}} e^{+i \vec{k}_{1:2} \cdot \vec{x}_{1, 1:2}} \right) \] \[ \Delta S_+(\vec{k}_{1:2}) \Delta S_-^\ast(\vec{k}_{1:2}) = \left\{ -[k_{1:2} (\mu_{1, 3} - \mu_{2, 3})]^2 + [\vec{k}_{1:2} \cdot (\vec{\mu}_{1, 1:2} - \vec{\mu}_{2, 1:2})]^2 - \\ 2 i k_{1:2} (\mu_{1, 3} - \mu_{2, 3}) \vec{k}_{1:2} \cdot (\vec{\mu}_{1, 1:2} - \vec{\mu}_{2, 1:2}) \right\} \left( 2 - \\ e^{+k_{1:2} x_{2, 3}} e^{+i \vec{k}_{1:2} \cdot \vec{x}_{2, 1:2}} e^{-k_{1:2} x_{1, 3}} e^{-i \vec{k}_{1:2} \cdot \vec{x}_{1, 1:2}} - \\ e^{+k_{1:2} x_{1, 3}} e^{+i \vec{k}_{1:2} \cdot \vec{x}_{1, 1:2}} e^{-k_{1:2} x_{2, 3}} e^{-i \vec{k}_{1:2} \cdot \vec{x}_{2, 1:2}} \right) \]
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Abstract_DLC_Visitor), | intent(in) | :: | this | |||
| integer, | intent(in) | :: | ij_components(:) | |||
| type(Concrete_Particle), | intent(in) | :: | particles(:) |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Null_DLC_Visitor), | intent(in) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Null_DLC_Visitor), | intent(in) | :: | this | |||
| integer, | intent(in) | :: | i_component | |||
| real(kind=DP), | intent(in) | :: | new_position(:) | |||
| type(Concrete_Particle), | intent(in) | :: | old |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Null_DLC_Visitor), | intent(in) | :: | this | |||
| integer, | intent(in) | :: | ij_components(:) | |||
| real(kind=DP), | intent(in) | :: | new_dipole_moment(:) | |||
| type(Concrete_Particle), | intent(in) | :: | old |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Null_DLC_Visitor), | intent(in) | :: | this | |||
| integer, | intent(in) | :: | i_component | |||
| type(Concrete_Particle), | intent(in) | :: | particle | |||
| real(kind=DP), | intent(in) | :: | signed |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Null_DLC_Visitor), | intent(in) | :: | this | |||
| integer, | intent(in) | :: | ij_components(:) | |||
| type(Concrete_Particle), | intent(in) | :: | particles(:) |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Abstract_DLC_Visitor), | intent(out) | :: | this | |||
| class(Abstract_Periodic_Box), | intent(in), | target | :: | periodic_box | ||
| class(Abstract_Reciprocal_Lattice), | intent(in) | :: | reciprocal_lattice | |||
| class(Abstract_DLC_Weight), | intent(in) | :: | weight | |||
| class(Abstract_DLC_Structures), | intent(in) | :: | structures |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Abstract_DLC_Visitor), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Abstract_DLC_Visitor), | intent(inout) | :: | this | |||
| class(Abstract_DLC_Weight), | intent(in), | target | :: | weight | ||
| class(Abstract_DLC_Structures), | intent(in), | target | :: | structures |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Null_DLC_Visitor), | intent(out) | :: | this | |||
| class(Abstract_Periodic_Box), | intent(in), | target | :: | periodic_box | ||
| class(Abstract_Reciprocal_Lattice), | intent(in) | :: | reciprocal_lattice | |||
| class(Abstract_DLC_Weight), | intent(in) | :: | weight | |||
| class(Abstract_DLC_Structures), | intent(in) | :: | structures |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Null_DLC_Visitor), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Null_DLC_Visitor), | intent(inout) | :: | this | |||
| class(Abstract_DLC_Weight), | intent(in), | target | :: | weight | ||
| class(Abstract_DLC_Structures), | intent(in), | target | :: | structures |