Octopus
nl_operator_oct_m Module Reference

This module defines non-local operators. More...

Detailed Description

This module defines non-local operators.

Data Types

type  nl_operator_index_t
 index type for non-local operators More...
 
type  nl_operator_t
 data type for non local operators More...
 
interface  op_is_available
 

Functions/Subroutines

subroutine, public nl_operator_global_init (namespace)
 initialize global settings for non-local operators More...
 
subroutine, public nl_operator_global_end ()
 
subroutine, public nl_operator_init (op, label)
 initialize an instance of a non-local operator by setting the label More...
 
subroutine, public nl_operator_copy (opo, opi)
 
subroutine, public nl_operator_build (space, mesh, op, np, const_w, regenerate)
 Creates the nonlocal operators for the stencils used for finite differences. More...
 
subroutine, public nl_operator_output_weights (this)
 
subroutine, public nl_operator_end (op)
 
subroutine nl_operator_clear_gpu_buffers (op)
 
integer pure function, public nl_operator_get_index (op, is, ip)
 
subroutine, public nl_operator_allocate_gpu_buffers (op)
 
subroutine, public nl_operator_update_gpu_buffers (op)
 
integer pure function, public nl_operator_np_zero_bc (op)
 
subroutine, public nl_operator_remove_zero_weight_points (op, space, mesh)
 Removes the zero-weight points for constant weight stencils. More...
 
subroutine, public dnl_operator_operate_batch (op, fi, fo, ghost_update, profile, points, factor, async)
 
subroutine, public dnl_operator_operate (op, fi, fo, ghost_update, profile, points)
 
subroutine, public dnl_operator_operate_diag (op, fo)
 
subroutine, public znl_operator_operate_batch (op, fi, fo, ghost_update, profile, points, factor, async)
 
subroutine, public znl_operator_operate (op, fi, fo, ghost_update, profile, points)
 
subroutine, public znl_operator_operate_diag (op, fo)
 

Variables

integer, parameter op_fortran = 0
 
integer, parameter op_vec = 1
 
integer, parameter op_min = OP_FORTRAN
 
integer, parameter op_max = OP_VEC
 
integer, parameter op_invmap = 1
 
integer, parameter op_map = 2
 
integer, parameter op_nomap = 3
 
integer, parameter, public op_all = 3
 
integer, parameter, public op_inner = 1
 
integer, parameter, public op_outer = 2
 
integer dfunction_global = -1
 
integer zfunction_global = -1
 
integer function_opencl
 

Function/Subroutine Documentation

◆ nl_operator_global_init()

subroutine, public nl_operator_oct_m::nl_operator_global_init ( type(namespace_t), intent(in)  namespace)

initialize global settings for non-local operators

Definition at line 253 of file nl_operator.F90.

◆ nl_operator_global_end()

subroutine, public nl_operator_oct_m::nl_operator_global_end

Definition at line 320 of file nl_operator.F90.

◆ nl_operator_init()

subroutine, public nl_operator_oct_m::nl_operator_init ( type(nl_operator_t), intent(inout)  op,
character(len=*), intent(in)  label 
)

initialize an instance of a non-local operator by setting the label

Definition at line 330 of file nl_operator.F90.

◆ nl_operator_copy()

subroutine, public nl_operator_oct_m::nl_operator_copy ( type(nl_operator_t), intent(inout)  opo,
type(nl_operator_t), intent(in), target  opi 
)

Definition at line 343 of file nl_operator.F90.

◆ nl_operator_build()

subroutine, public nl_operator_oct_m::nl_operator_build ( class(space_t), intent(in)  space,
type(mesh_t), intent(in), target  mesh,
type(nl_operator_t), intent(inout)  op,
integer, intent(in)  np,
logical, intent(in), optional  const_w,
logical, intent(in), optional  regenerate 
)

Creates the nonlocal operators for the stencils used for finite differences.

This code loops over grid points and finds the stencil to be used by looking at the coordinates of the points in the stencils. All the consecutive points that are using the sames shifts in relative coordinates are considered to be within one stencil application. The number of them is opri The map oprimap contains the map (mesh index ip) -> stencil (between 1 to opnri) The inverse map oprimap_inv contains the start and end indices for a given stencil, such that oprimap_inv(ii):oprimap_inv(ii+1) is the list of points sharing the same stencil index With this, all points within oprimap_inv(ii):oprimap_inv(ii+1) have the same value in oprimap

Parameters
[in]npNumber of (local) points.
[in]const_ware the weights constant (independent of the point)

Definition at line 407 of file nl_operator.F90.

◆ nl_operator_output_weights()

subroutine, public nl_operator_oct_m::nl_operator_output_weights ( type(nl_operator_t), intent(inout)  this)

Definition at line 671 of file nl_operator.F90.

◆ nl_operator_end()

subroutine, public nl_operator_oct_m::nl_operator_end ( type(nl_operator_t), intent(inout)  op)

Definition at line 702 of file nl_operator.F90.

◆ nl_operator_clear_gpu_buffers()

subroutine nl_operator_oct_m::nl_operator_clear_gpu_buffers ( type(nl_operator_t), intent(inout)  op)
private

Definition at line 731 of file nl_operator.F90.

◆ nl_operator_get_index()

integer pure function, public nl_operator_oct_m::nl_operator_get_index ( type(nl_operator_t), intent(in)  op,
integer, intent(in)  is,
integer, intent(in)  ip 
)

Definition at line 764 of file nl_operator.F90.

◆ nl_operator_allocate_gpu_buffers()

subroutine, public nl_operator_oct_m::nl_operator_allocate_gpu_buffers ( type(nl_operator_t), intent(inout)  op)

Definition at line 774 of file nl_operator.F90.

◆ nl_operator_update_gpu_buffers()

subroutine, public nl_operator_oct_m::nl_operator_update_gpu_buffers ( type(nl_operator_t), intent(inout)  op)

Definition at line 791 of file nl_operator.F90.

◆ nl_operator_np_zero_bc()

integer pure function, public nl_operator_oct_m::nl_operator_np_zero_bc ( type(nl_operator_t), intent(in)  op)

Definition at line 807 of file nl_operator.F90.

◆ nl_operator_remove_zero_weight_points()

subroutine, public nl_operator_oct_m::nl_operator_remove_zero_weight_points ( type(nl_operator_t), intent(inout)  op,
type(space_t), intent(in)  space,
class(mesh_t), intent(in)  mesh 
)

Removes the zero-weight points for constant weight stencils.

Definition at line 823 of file nl_operator.F90.

◆ dnl_operator_operate_batch()

subroutine, public nl_operator_oct_m::dnl_operator_operate_batch ( type(nl_operator_t), intent(in), target  op,
type(batch_t), intent(inout), target  fi,
type(batch_t), intent(inout)  fo,
logical, intent(in), optional  ghost_update,
logical, intent(in), optional  profile,
integer, intent(in), optional  points,
real(real64), intent(in), optional  factor,
logical, intent(in), optional  async 
)
Parameters
[in,out]fothis should be target, but old ifort 9.1 segfaults with it

Definition at line 929 of file nl_operator.F90.

◆ dnl_operator_operate()

subroutine, public nl_operator_oct_m::dnl_operator_operate ( type(nl_operator_t), intent(in)  op,
real(real64), dimension(:), intent(inout), contiguous  fi,
real(real64), dimension(:), intent(out), target, contiguous  fo,
logical, intent(in), optional  ghost_update,
logical, intent(in), optional  profile,
integer, intent(in), optional  points 
)
Parameters
[in,out]fifi(opnp_part)

Definition at line 1380 of file nl_operator.F90.

◆ dnl_operator_operate_diag()

subroutine, public nl_operator_oct_m::dnl_operator_operate_diag ( type(nl_operator_t), intent(in)  op,
real(real64), dimension(:), intent(out)  fo 
)

Definition at line 1405 of file nl_operator.F90.

◆ znl_operator_operate_batch()

subroutine, public nl_operator_oct_m::znl_operator_operate_batch ( type(nl_operator_t), intent(in), target  op,
type(batch_t), intent(inout), target  fi,
type(batch_t), intent(inout)  fo,
logical, intent(in), optional  ghost_update,
logical, intent(in), optional  profile,
integer, intent(in), optional  points,
real(real64), intent(in), optional  factor,
logical, intent(in), optional  async 
)
Parameters
[in,out]fothis should be target, but old ifort 9.1 segfaults with it

Definition at line 1497 of file nl_operator.F90.

◆ znl_operator_operate()

subroutine, public nl_operator_oct_m::znl_operator_operate ( type(nl_operator_t), intent(in)  op,
complex(real64), dimension(:), intent(inout), contiguous  fi,
complex(real64), dimension(:), intent(out), target, contiguous  fo,
logical, intent(in), optional  ghost_update,
logical, intent(in), optional  profile,
integer, intent(in), optional  points 
)
Parameters
[in,out]fifi(opnp_part)

Definition at line 1948 of file nl_operator.F90.

◆ znl_operator_operate_diag()

subroutine, public nl_operator_oct_m::znl_operator_operate_diag ( type(nl_operator_t), intent(in)  op,
complex(real64), dimension(:), intent(out)  fo 
)

Definition at line 1973 of file nl_operator.F90.

Variable Documentation

◆ op_fortran

integer, parameter nl_operator_oct_m::op_fortran = 0
private

Definition at line 224 of file nl_operator.F90.

◆ op_vec

integer, parameter nl_operator_oct_m::op_vec = 1
private

Definition at line 224 of file nl_operator.F90.

◆ op_min

integer, parameter nl_operator_oct_m::op_min = OP_FORTRAN
private

Definition at line 224 of file nl_operator.F90.

◆ op_max

integer, parameter nl_operator_oct_m::op_max = OP_VEC
private

Definition at line 224 of file nl_operator.F90.

◆ op_invmap

integer, parameter nl_operator_oct_m::op_invmap = 1
private

Definition at line 230 of file nl_operator.F90.

◆ op_map

integer, parameter nl_operator_oct_m::op_map = 2
private

Definition at line 230 of file nl_operator.F90.

◆ op_nomap

integer, parameter nl_operator_oct_m::op_nomap = 3
private

Definition at line 230 of file nl_operator.F90.

◆ op_all

integer, parameter, public nl_operator_oct_m::op_all = 3

Definition at line 235 of file nl_operator.F90.

◆ op_inner

integer, parameter, public nl_operator_oct_m::op_inner = 1

Definition at line 235 of file nl_operator.F90.

◆ op_outer

integer, parameter, public nl_operator_oct_m::op_outer = 2

Definition at line 235 of file nl_operator.F90.

◆ dfunction_global

integer nl_operator_oct_m::dfunction_global = -1
private

Definition at line 244 of file nl_operator.F90.

◆ zfunction_global

integer nl_operator_oct_m::zfunction_global = -1
private

Definition at line 245 of file nl_operator.F90.

◆ function_opencl

integer nl_operator_oct_m::function_opencl
private

Definition at line 246 of file nl_operator.F90.