Octopus
symmetrizer_oct_m Module Reference

Data Types

type  symmetrizer_t
 

Functions/Subroutines

subroutine, public symmetrizer_init (this, mesh, symm)
 
subroutine, public symmetrizer_build_map_buffer (this, mesh)
 Build the symmetrization map on GPU. More...
 
subroutine, public symmetrizer_end (this)
 
subroutine, public symmetrize_lattice_vectors (this, size, initial_rlattice, rlattice, symmetrize)
 Given a symmetric lattice vector, symmetrize another one. More...
 
subroutine, public dsymmetrizer_apply (this, mesh, field, field_vector, symmfield, symmfield_vector, suppress_warning, reduced_quantity)
 supply field and symmfield, and/or field_vector and symmfield_vector More...
 
subroutine, public dsymmetrizer_apply_single (this, mesh, iop, field, symmfield)
 
subroutine, public dsymmetrizer_apply_batch (this, mesh, iop, src, dst)
 Symmetrize a whole batch, returning another batch with the same layout. More...
 
subroutine, public dsymmetrize_tensor_cart (symm, tensor, use_non_symmorphic)
 Symmetric a rank-2 tensor defined in Cartesian space. More...
 
subroutine, public dsymmetrize_magneto_optics_cart (symm, tensor)
 
subroutine, public zsymmetrizer_apply (this, mesh, field, field_vector, symmfield, symmfield_vector, suppress_warning, reduced_quantity)
 supply field and symmfield, and/or field_vector and symmfield_vector More...
 
subroutine, public zsymmetrizer_apply_single (this, mesh, iop, field, symmfield)
 
subroutine, public zsymmetrizer_apply_batch (this, mesh, iop, src, dst)
 Symmetrize a whole batch, returning another batch with the same layout. More...
 
subroutine, public zsymmetrize_tensor_cart (symm, tensor, use_non_symmorphic)
 Symmetric a rank-2 tensor defined in Cartesian space. More...
 
subroutine, public zsymmetrize_magneto_optics_cart (symm, tensor)
 

Function/Subroutine Documentation

◆ symmetrizer_init()

subroutine, public symmetrizer_oct_m::symmetrizer_init ( type(symmetrizer_t), intent(out)  this,
class(mesh_t), intent(in)  mesh,
type(symmetries_t), intent(in), target  symm 
)

Definition at line 168 of file symmetrizer.F90.

◆ symmetrizer_build_map_buffer()

subroutine, public symmetrizer_oct_m::symmetrizer_build_map_buffer ( type(symmetrizer_t), intent(inout)  this,
class(mesh_t), intent(in)  mesh 
)

Build the symmetrization map on GPU.

Definition at line 254 of file symmetrizer.F90.

◆ symmetrizer_end()

subroutine, public symmetrizer_oct_m::symmetrizer_end ( type(symmetrizer_t), intent(inout)  this)

Definition at line 284 of file symmetrizer.F90.

◆ symmetrize_lattice_vectors()

subroutine, public symmetrizer_oct_m::symmetrize_lattice_vectors ( class(symmetrizer_t), intent(in)  this,
integer, intent(in)  size,
real(real64), dimension(size,size), intent(in)  initial_rlattice,
real(real64), dimension(size,size), intent(inout)  rlattice,
logical, intent(in)  symmetrize 
)

Given a symmetric lattice vector, symmetrize another one.

This is done by symmetrizing the strain tensor This is partly inspired by the routine strainsym from Abinit To be more precise, we work with the right stretch tensor, which is identity plus strain

Definition at line 306 of file symmetrizer.F90.

◆ dsymmetrizer_apply()

subroutine, public symmetrizer_oct_m::dsymmetrizer_apply ( type(symmetrizer_t), intent(in)  this,
class(mesh_t), intent(in)  mesh,
real(real64), dimension(:), intent(in), optional, target  field,
real(real64), dimension(:, :), intent(in), optional, target  field_vector,
real(real64), dimension(:), intent(out), optional  symmfield,
real(real64), dimension(:, :), intent(out), optional  symmfield_vector,
logical, intent(in), optional  suppress_warning,
logical, intent(in), optional  reduced_quantity 
)

supply field and symmfield, and/or field_vector and symmfield_vector

Parameters
[in]field(np)
[in]field_vector(np, 3)
[out]symmfield(np)
[out]symmfield_vector(np, 3)
[in]suppress_warninguse to avoid output of discrepancy, for forces, where this routine is not used to symmetrize something already supposed to be symmetric, but rather to construct the quantity properly from reduced k-points

Definition at line 415 of file symmetrizer.F90.

◆ dsymmetrizer_apply_single()

subroutine, public symmetrizer_oct_m::dsymmetrizer_apply_single ( type(symmetrizer_t), intent(in)  this,
class(mesh_t), intent(in)  mesh,
integer, intent(in)  iop,
real(real64), dimension(:), intent(in), target  field,
real(real64), dimension(:), intent(out)  symmfield 
)
Parameters
[in]field(np)
[out]symmfield(np)

Definition at line 598 of file symmetrizer.F90.

◆ dsymmetrizer_apply_batch()

subroutine, public symmetrizer_oct_m::dsymmetrizer_apply_batch ( type(symmetrizer_t), intent(in)  this,
class(mesh_t), intent(in)  mesh,
integer, intent(in)  iop,
class(batch_t), intent(in)  src,
class(batch_t), intent(inout)  dst 
)

Symmetrize a whole batch, returning another batch with the same layout.

Applies symmetry operation iop to every state of src and stores the result in dst (which must be pre-allocated with the same layout as src). Branches on the batch status: the device path runs the batched kernel, the host path symmetrizes each state (and spin component) via dsymmetrizer_apply_single.

Definition at line 655 of file symmetrizer.F90.

◆ dsymmetrize_tensor_cart()

subroutine, public symmetrizer_oct_m::dsymmetrize_tensor_cart ( type(symmetries_t), intent(in)  symm,
real(real64), dimension(:,:), intent(inout)  tensor,
logical, intent(in), optional  use_non_symmorphic 
)

Symmetric a rank-2 tensor defined in Cartesian space.

If use_non_symmorphic is set to true, the non-symmorphic operators are also used for the symmetrization

The operation is T = S * T * S^T, where T is a vector invariant by the symmetry operation S

Parameters
[in,out]tensor(3, 3)

Definition at line 719 of file symmetrizer.F90.

◆ dsymmetrize_magneto_optics_cart()

subroutine, public symmetrizer_oct_m::dsymmetrize_magneto_optics_cart ( type(symmetries_t), intent(in)  symm,
real(real64), dimension(:,:,:), intent(inout)  tensor 
)
Parameters
[in,out]tensor(3, 3, 3)

Definition at line 762 of file symmetrizer.F90.

◆ zsymmetrizer_apply()

subroutine, public symmetrizer_oct_m::zsymmetrizer_apply ( type(symmetrizer_t), intent(in)  this,
class(mesh_t), intent(in)  mesh,
complex(real64), dimension(:), intent(in), optional, target  field,
complex(real64), dimension(:, :), intent(in), optional, target  field_vector,
complex(real64), dimension(:), intent(out), optional  symmfield,
complex(real64), dimension(:, :), intent(out), optional  symmfield_vector,
logical, intent(in), optional  suppress_warning,
logical, intent(in), optional  reduced_quantity 
)

supply field and symmfield, and/or field_vector and symmfield_vector

Parameters
[in]field(np)
[in]field_vector(np, 3)
[out]symmfield(np)
[out]symmfield_vector(np, 3)
[in]suppress_warninguse to avoid output of discrepancy, for forces, where this routine is not used to symmetrize something already supposed to be symmetric, but rather to construct the quantity properly from reduced k-points

Definition at line 879 of file symmetrizer.F90.

◆ zsymmetrizer_apply_single()

subroutine, public symmetrizer_oct_m::zsymmetrizer_apply_single ( type(symmetrizer_t), intent(in)  this,
class(mesh_t), intent(in)  mesh,
integer, intent(in)  iop,
complex(real64), dimension(:), intent(in), target  field,
complex(real64), dimension(:), intent(out)  symmfield 
)
Parameters
[in]field(np)
[out]symmfield(np)

Definition at line 1062 of file symmetrizer.F90.

◆ zsymmetrizer_apply_batch()

subroutine, public symmetrizer_oct_m::zsymmetrizer_apply_batch ( type(symmetrizer_t), intent(in)  this,
class(mesh_t), intent(in)  mesh,
integer, intent(in)  iop,
class(batch_t), intent(in)  src,
class(batch_t), intent(inout)  dst 
)

Symmetrize a whole batch, returning another batch with the same layout.

Applies symmetry operation iop to every state of src and stores the result in dst (which must be pre-allocated with the same layout as src). Branches on the batch status: the device path runs the batched kernel, the host path symmetrizes each state (and spin component) via zsymmetrizer_apply_single.

Definition at line 1119 of file symmetrizer.F90.

◆ zsymmetrize_tensor_cart()

subroutine, public symmetrizer_oct_m::zsymmetrize_tensor_cart ( type(symmetries_t), intent(in)  symm,
complex(real64), dimension(:,:), intent(inout)  tensor,
logical, intent(in), optional  use_non_symmorphic 
)

Symmetric a rank-2 tensor defined in Cartesian space.

If use_non_symmorphic is set to true, the non-symmorphic operators are also used for the symmetrization

The operation is T = S * T * S^T, where T is a vector invariant by the symmetry operation S

Parameters
[in,out]tensor(3, 3)

Definition at line 1183 of file symmetrizer.F90.

◆ zsymmetrize_magneto_optics_cart()

subroutine, public symmetrizer_oct_m::zsymmetrize_magneto_optics_cart ( type(symmetries_t), intent(in)  symm,
complex(real64), dimension(:,:,:), intent(inout)  tensor 
)
Parameters
[in,out]tensor(3, 3, 3)

Definition at line 1226 of file symmetrizer.F90.