(git:db3ef62)
grid_dgemm_task_list.h
Go to the documentation of this file.
1 /*----------------------------------------------------------------------------*/
2 /* CP2K: A general program to perform molecular dynamics simulations */
3 /* Copyright 2000-2024 CP2K developers group <https://cp2k.org> */
4 /* */
5 /* SPDX-License-Identifier: BSD-3-Clause */
6 /*----------------------------------------------------------------------------*/
7 #ifndef GRID_DGEMM_TASK_LIST_H
8 #define GRID_DGEMM_TASK_LIST_H
9 
10 #include "../../offload/offload_buffer.h"
11 #include "../common/grid_basis_set.h"
12 #include "../common/grid_constants.h"
13 #include <stdbool.h>
14 
15 /*******************************************************************************
16  * \brief opaque pointer hidding the internal representation of the structure.
17  * It is not needed to know what exact structure for the public interface.
18  * Equivalent to private member in c++ class
19  ******************************************************************************/
20 typedef struct grid_context_ grid_dgemm_task_list;
21 
22 /*******************************************************************************
23  * \brief Allocates a task list for the dgemm backend.
24  * See grid_task_list.h for details.
25  ******************************************************************************/
27  const bool orthorhombic, const int ntasks, const int nlevels,
28  const int natoms, const int nkinds, const int nblocks,
29  const int block_offsets[nblocks], const double atom_positions[natoms][3],
30  const int atom_kinds[natoms], const grid_basis_set *basis_sets[nkinds],
31  const int level_list[ntasks], const int iatom_list[ntasks],
32  const int jatom_list[ntasks], const int iset_list[ntasks],
33  const int jset_list[ntasks], const int ipgf_list[ntasks],
34  const int jpgf_list[ntasks], const int border_mask_list[ntasks],
35  const int block_num_list[ntasks], const double radius_list[ntasks],
36  const double rab_list[ntasks][3], const int npts_global[nlevels][3],
37  const int npts_local[nlevels][3], const int shift_local[nlevels][3],
38  const int border_width[nlevels][3], const double dh[nlevels][3][3],
39  const double dh_inv[nlevels][3][3], grid_dgemm_task_list **task_list);
40 
41 /*******************************************************************************
42  * \brief Deallocates given task list, basis_sets have to be freed separately.
43  ******************************************************************************/
45 
46 /*******************************************************************************
47  * \brief Collocate all tasks of in given list onto given grids.
48  * See grid_task_list.h for details.
49  ******************************************************************************/
51  const enum grid_func func,
52  const int nlevels,
53  const offload_buffer *pab_blocks,
54  offload_buffer *grids[nlevels]);
55 
56 void grid_dgemm_integrate_task_list(void *const ptr, const bool compute_tau,
57  const int natoms, const int nlevels,
58  const offload_buffer *const pab_blocks,
59  const offload_buffer *grids[nlevels],
60  offload_buffer *hab_blocks,
61  double forces[natoms][3],
62  double virial[3][3]);
63 
64 #endif
grid_func
static void const int const int const int const int const int const double const int const int const int npts_local[3]
void grid_dgemm_create_task_list(const bool orthorhombic, const int ntasks, const int nlevels, const int natoms, const int nkinds, const int nblocks, const int block_offsets[nblocks], const double atom_positions[natoms][3], const int atom_kinds[natoms], const grid_basis_set *basis_sets[nkinds], const int level_list[ntasks], const int iatom_list[ntasks], const int jatom_list[ntasks], const int iset_list[ntasks], const int jset_list[ntasks], const int ipgf_list[ntasks], const int jpgf_list[ntasks], const int border_mask_list[ntasks], const int block_num_list[ntasks], const double radius_list[ntasks], const double rab_list[ntasks][3], const int npts_global[nlevels][3], const int npts_local[nlevels][3], const int shift_local[nlevels][3], const int border_width[nlevels][3], const double dh[nlevels][3][3], const double dh_inv[nlevels][3][3], grid_dgemm_task_list **task_list)
Allocates a task list for the dgemm backend. See grid_task_list.h for details.
void grid_dgemm_free_task_list(grid_dgemm_task_list *task_list)
Deallocates given task list, basis_sets have to be freed separately.
void grid_dgemm_collocate_task_list(grid_dgemm_task_list *const task_list, const enum grid_func func, const int nlevels, const offload_buffer *pab_blocks, offload_buffer *grids[nlevels])
Collocate all tasks of in given list onto given grids. See grid_task_list.h for details.
void grid_dgemm_integrate_task_list(void *const ptr, const bool compute_tau, const int natoms, const int nlevels, const offload_buffer *const pab_blocks, const offload_buffer *grids[nlevels], offload_buffer *hab_blocks, double forces[natoms][3], double virial[3][3])
Internal representation of a basis set.
grid_basis_set ** basis_sets
Internal representation of a buffer.