29  use, 
intrinsic :: iso_fortran_env
 
   65    integer,                
public :: solver
 
   66    type(preconditioner_t), 
public :: pre
 
   68    type(multigrid_t), 
allocatable :: mgrid
 
   74    type(namespace_t),        
pointer :: namespace
 
   75    type(linear_solver_t),    
pointer :: ls
 
   76    type(hamiltonian_elec_t), 
pointer :: hm
 
   77    type(mesh_t),             
pointer :: mesh
 
   78    type(states_elec_t),      
pointer :: st
 
   81    real(real64)                      :: dshift
 
   82    complex(real64)                   :: zshift
 
   85  type(linear_solver_args_t) :: args
 
   91    type(linear_solver_t),  
intent(out)   :: this
 
   92    type(namespace_t),      
intent(in)    :: namespace
 
   93    type(grid_t),           
intent(inout) :: gr
 
   94    logical,                
intent(in)    :: states_are_real
 
   95    type(multicomm_t),      
intent(in)    :: mc
 
   96    class(space_t),         
intent(in)    :: space
 
  146    if (
conf%devel_version) 
then 
  147      defsolver = option__linearsolver__qmr_dotp
 
  149      if (states_are_real) 
then 
  150        defsolver = option__linearsolver__qmr_symmetric
 
  153        defsolver = option__linearsolver__qmr_symmetrized
 
  157    call parse_variable(namespace, 
"LinearSolver", defsolver, fsolver)
 
  163    this%solver = mod(fsolver, 100)
 
  180    select case (this%solver)
 
  181    case (option__linearsolver__cg)
 
  182      message(1)=
'Linear Solver: Conjugate Gradients' 
  184    case (option__linearsolver__bicgstab)
 
  185      message(1)=
'Linear Solver: Biconjugate Gradients Stabilized' 
  187    case (option__linearsolver__idrs)
 
  188      message(1)=
'Linear Solver: IDRS' 
  190    case (option__linearsolver__multigrid)
 
  191      message(1)=
'Multigrid (currently only Gauss-Jacobi - EXPERIMENTAL)' 
  193    case (option__linearsolver__qmr_symmetric)
 
  194      message(1)=
'Linear Solver: Quasi-Minimal Residual, for symmetric matrix' 
  196    case (option__linearsolver__qmr_symmetrized)
 
  197      message(1)=
'Linear Solver: Quasi-Minimal Residual, for symmetrized matrix' 
  199    case (option__linearsolver__qmr_dotp)
 
  200      message(1)=
'Linear Solver: Quasi-Minimal Residual, symmetric with conjugated dot product' 
  202    case (option__linearsolver__qmr_general)
 
  203      message(1)=
'Linear Solver: Quasi-Minimal Residual, general algorithm' 
  205    case (option__linearsolver__sos)
 
  206      message(1)=
'Linear Solver: Sum-over-States' 
  213    if (this%solver == option__linearsolver__multigrid) 
then 
  216      safe_allocate(this%mgrid)
 
  217      call multigrid_init(this%mgrid, namespace, space, gr, gr%der, gr%stencil, mc)
 
  220    if (this%solver == option__linearsolver__qmr_dotp) 
then 
  233    if (
allocated(this%mgrid)) 
then 
  235      safe_deallocate_a(this%mgrid)
 
  245    select case (this%solver)
 
  246    case (option__linearsolver__bicgstab)
 
  258    character(len=*),    
intent(in)    :: old_prefix
 
  259    character(len=*),    
intent(in)    :: new_prefix
 
  272#include "linear_solver_inc.F90" 
  276#include "complex.F90" 
  277#include "linear_solver_inc.F90" 
This module implements batches of mesh functions.
 
This module implements common operations on batches of mesh functions.
 
This module calculates the derivatives (gradients, Laplacians, etc.) of a function.
 
type(conf_t), public conf
Global instance of Octopus configuration.
 
This module implements the underlying real-space grid.
 
subroutine, public dlinear_solver_solve_hxey_batch(this, namespace, hm, mesh, st, xb, yb, shift, tol, residue, iter_used, occ_response, use_initial_guess)
 
subroutine, public zlinear_solver_solve_hxey(this, namespace, hm, mesh, st, ist, ik, x, y, shift, tol, residue, iter_used, occ_response)
This subroutine calculates the solution of (H + shift) x = y Typically shift = - eigenvalue + omega.
 
subroutine, public dlinear_solver_solve_hxey(this, namespace, hm, mesh, st, ist, ik, x, y, shift, tol, residue, iter_used, occ_response)
This subroutine calculates the solution of (H + shift) x = y Typically shift = - eigenvalue + omega.
 
integer function, public linear_solver_ops_per_iter(this)
 
subroutine, public linear_solver_end(this)
 
subroutine, public linear_solver_init(this, namespace, gr, states_are_real, mc, space)
 
subroutine, public zlinear_solver_solve_hxey_batch(this, namespace, hm, mesh, st, xb, yb, shift, tol, residue, iter_used, occ_response, use_initial_guess)
 
subroutine, public linear_solver_obsolete_variables(namespace, old_prefix, new_prefix)
 
This module defines functions over batches of mesh functions.
 
This module defines various routines, operating on mesh functions.
 
subroutine, public mesh_init_mesh_aux(mesh)
Initialise a pointer to the grid/mesh, that is globally exposed, such that low level mesh operations ...
 
This module defines the meshes, which are used in Octopus.
 
subroutine, public messages_print_with_emphasis(msg, iunit, namespace)
 
character(len=512), private msg
 
subroutine, public messages_obsolete_variable(namespace, name, rep)
 
subroutine, public messages_info(no_lines, iunit, verbose_limit, stress, all_nodes, namespace)
 
character(len=256), dimension(max_lines), public message
to be output by fatal, warning
 
subroutine, public messages_experimental(name, namespace)
 
This module handles the communicators for the various parallelization strategies.
 
subroutine, public multigrid_end(mgrid)
 
subroutine, public multigrid_init(mgrid, namespace, space, mesh, der, stencil, mc, nlevels)
 
subroutine, public preconditioner_end(this)
 
subroutine, public preconditioner_obsolete_variables(namespace, old_prefix, new_prefix)
 
subroutine, public preconditioner_init(this, namespace, gr, mc, space)
 
This module is intended to contain "only mathematical" functions and procedures.