#include "base/cs_defs.h"#include <stdio.h>#include <string.h>#include <assert.h>#include "bft/bft_error.h"#include "bft/bft_printf.h"#include "base/cs_base.h"#include "base/cs_base_accel.h"#include "base/cs_interface.h"#include "base/cs_mem.h"#include "base/cs_order.h"#include "base/cs_rank_neighbors.h"#include "fvm/fvm_periodicity.h"#include "base/cs_halo.h"#include "base/cs_halo_perio.h"
Include dependency graph for cs_halo.cpp:Functions | |
| cs_halo_t * | cs_halo_create (const cs_interface_set_t *ifs) |
| Create a halo structure given an interface set. More... | |
| void | cs_halo_create_complete (cs_halo_t *halo) |
| Ready halo for use. More... | |
| cs_halo_t * | cs_halo_create_from_ref (const cs_halo_t *ref) |
| Create a halo structure, given a reference halo. More... | |
| void | cs_halo_destroy (cs_halo_t **halo) |
| cs_halo_state_t * | cs_halo_state_create (void) |
| Create a halo state structure. More... | |
| void | cs_halo_state_destroy (cs_halo_state_t **halo_state) |
| Destroy a halo state structure. More... | |
| cs_halo_state_t * | cs_halo_state_get_default (void) |
| Get pointer to default halo state structure. More... | |
| void | cs_halo_renumber_cells (cs_halo_t *halo, const cs_lnum_t new_cell_id[]) |
| void | cs_halo_renumber_ghost_cells (cs_halo_t *halo, const cs_lnum_t old_cell_id[]) |
| void * | cs_halo_sync_pack_init_state (const cs_halo_t *halo, cs_halo_type_t sync_mode, cs_datatype_t data_type, int stride, void *send_buf, cs_halo_state_t *hs) |
| Initialize halo state prior to packing halo data to send. More... | |
| void | cs_halo_sync_pack (const cs_halo_t *halo, cs_halo_type_t sync_mode, cs_datatype_t data_type, int stride, void *val, void *send_buf, cs_halo_state_t *hs) |
| Pack halo data to send into dense buffer. More... | |
| void | cs_halo_sync_start (const cs_halo_t *halo, void *val, cs_halo_state_t *hs) |
| Launch update array of values in case of parallelism or periodicity. More... | |
| void | cs_halo_sync_wait (const cs_halo_t *halo, void *val, cs_halo_state_t *hs) |
| Wait for completion of update array of values in case of parallelism or periodicity. More... | |
| void | cs_halo_sync (const cs_halo_t *halo, cs_halo_type_t sync_mode, cs_datatype_t data_type, int stride, void *val) |
| Update array of values in case of parallelism or periodicity. More... | |
| void | cs_halo_sync_untyped (const cs_halo_t *halo, cs_halo_type_t sync_mode, size_t size, void *val) |
| void | cs_halo_sync_num (const cs_halo_t *halo, cs_halo_type_t sync_mode, cs_lnum_t num[]) |
| void | cs_halo_sync_var (const cs_halo_t *halo, cs_halo_type_t sync_mode, cs_real_t var[]) |
| void | cs_halo_sync_var_strided (const cs_halo_t *halo, cs_halo_type_t sync_mode, cs_real_t var[], int stride) |
| bool | cs_halo_get_use_barrier (void) |
| void | cs_halo_set_use_barrier (bool use_barrier) |
| cs_halo_comm_mode_t | cs_halo_get_comm_mode (void) |
| Get default communication mode for halo exchange. More... | |
| void | cs_halo_set_comm_mode (cs_halo_comm_mode_t mode) |
| Set default communication mode for halo exchange. More... | |
| cs_alloc_mode_t | cs_halo_get_buffer_alloc_mode (void) |
| Get default host/device allocation mode for message packing arrays. More... | |
| void | cs_halo_set_buffer_alloc_mode (cs_alloc_mode_t mode) |
| Set default host/device allocation mode for message packing arrays. More... | |
| void * | cs_halo_get_default_buffer (size_t size) |
| Return pointer to working send buffer used by default halo state. More... | |
| void | cs_halo_dump (const cs_halo_t *halo, int print_level) |
| template<typename T > | |
| void | cs_halo_sync (const cs_halo_t *halo, cs_halo_type_t sync_mode, bool on_device, T val[]) |
| Update array of values in case of parallelism or periodicity. More... | |
| template void | cs_halo_sync (const cs_halo_t *halo, cs_halo_type_t sync_mode, bool on_device, cs_real_t val[]) |
| template<int Stride, typename T > | |
| void | cs_halo_sync (const cs_halo_t *halo, cs_halo_type_t sync_mode, bool on_device, T val[][Stride]) |
| template void | cs_halo_sync (const cs_halo_t *halo, cs_halo_type_t sync_mode, bool on_device, cs_real_t val[][3]) |
| template void | cs_halo_sync (const cs_halo_t *halo, cs_halo_type_t sync_mode, bool on_device, cs_real_t val[][6]) |
| template<typename T > | |
| void | cs_halo_sync (const cs_halo_t *halo, bool on_device, T val[]) |
| template void | cs_halo_sync (const cs_halo_t *halo, bool on_device, cs_real_t val[]) |
| template<int Stride, typename T > | |
| void | cs_halo_sync (const cs_halo_t *halo, bool on_device, T val[][Stride]) |
| template void | cs_halo_sync (const cs_halo_t *halo, bool on_device, cs_real_t val[][3]) |
| template void | cs_halo_sync (const cs_halo_t *halo, bool on_device, cs_real_t val[][6]) |
| template<typename T > | |
| void | cs_halo_sync_r (const cs_halo_t *halo, cs_halo_type_t sync_mode, bool on_device, T val[][3]) |
| Update ghost cell values of a spatial vector field, including rotational periodicity if present. More... | |
| template void | cs_halo_sync_r (const cs_halo_t *halo, cs_halo_type_t sync_mode, bool on_device, cs_real_t val[][3]) |
| template<typename T > | |
| void | cs_halo_sync_r (const cs_halo_t *halo, bool on_device, T val[][3]) |
| template void | cs_halo_sync_r (const cs_halo_t *halo, bool on_device, cs_real_t val[][3]) |
| template<typename T > | |
| void | cs_halo_sync_r (const cs_halo_t *halo, cs_halo_type_t sync_mode, bool on_device, T val[][6]) |
| Update ghost cell values of a symmetric tensor field, including rotational periodicity if present. More... | |
| template void | cs_halo_sync_r (const cs_halo_t *halo, cs_halo_type_t sync_mode, bool on_device, cs_real_t val[][6]) |
| template<typename T > | |
| void | cs_halo_sync_r (const cs_halo_t *halo, bool on_device, T val[][6]) |
| template void | cs_halo_sync_r (const cs_halo_t *halo, bool on_device, cs_real_t val[][6]) |
| template<typename T > | |
| void | cs_halo_sync_r (const cs_halo_t *halo, cs_halo_type_t sync_mode, bool on_device, T val[][3][3]) |
| Update ghost cell values of a non-symmetric tensor field, including rotational periodicity if present. More... | |
| template void | cs_halo_sync_r (const cs_halo_t *halo, cs_halo_type_t sync_mode, bool on_device, cs_real_t val[][3][3]) |
| cs_halo_t * cs_halo_create | ( | const cs_interface_set_t * | ifs | ) |
Create a halo structure given an interface set.
| [in] | ifs | pointer to a cs_interface_set structure |
| void cs_halo_create_complete | ( | cs_halo_t * | halo | ) |
Ready halo for use.
This function should be called after building a halo using the cs_halo_create_function and defined locally. It is called automatically by cs_halo_create_from_ref and cs_halo_create_from_rank_neighbors so does not need to be called again using these functions.
| [in] | halo | pointer to halo structure |
Create a halo structure, given a reference halo.
| [in] | ref | pointer to reference halo |
| void cs_halo_destroy | ( | cs_halo_t ** | halo | ) |
brief Destroy a halo structure.
| [in,out] | halo | pointer to pointer to cs_halo structure to destroy. |
| void cs_halo_dump | ( | const cs_halo_t * | halo, |
| int | print_level | ||
| ) |
| cs_alloc_mode_t cs_halo_get_buffer_alloc_mode | ( | void | ) |
Get default host/device allocation mode for message packing arrays.
| cs_halo_comm_mode_t cs_halo_get_comm_mode | ( | void | ) |
Get default communication mode for halo exchange.
| void * cs_halo_get_default_buffer | ( | size_t | size | ) |
Return pointer to working send buffer used by default halo state.
This allows sharing the allocation with other operations which might be used frequantly, such as range set scatters (which play a similar role to halos for data which can be on process boundaries, such as vertex or face-based data).
If the current buffer's size is smaller than the requested size, it is increased.
| bool cs_halo_get_use_barrier | ( | void | ) |
| void cs_halo_set_buffer_alloc_mode | ( | cs_alloc_mode_t | mode | ) |
Set default host/device allocation mode for message packing arrays.
| [in] | mode | allocation mode to set |
| void cs_halo_set_comm_mode | ( | cs_halo_comm_mode_t | mode | ) |
Set default communication mode for halo exchange.
| [in] | mode | allocation mode to set |
| void cs_halo_set_use_barrier | ( | bool | use_barrier | ) |
| cs_halo_state_t * cs_halo_state_create | ( | void | ) |
Create a halo state structure.
| void cs_halo_state_destroy | ( | cs_halo_state_t ** | halo_state | ) |
Destroy a halo state structure.
| [in,out] | halo_state | pointer to pointer to cs_halo_state structure to destroy. |
| cs_halo_state_t * cs_halo_state_get_default | ( | void | ) |
Get pointer to default halo state structure.
| template void cs_halo_sync | ( | const cs_halo_t * | halo, |
| cs_halo_type_t | sync_mode, | ||
| bool | on_device, | ||
| cs_real_t | val[] | ||
| ) |
| template void cs_halo_sync | ( | const cs_halo_t * | halo, |
| cs_halo_type_t | sync_mode, | ||
| bool | on_device, | ||
| cs_real_t | val[][3] | ||
| ) |
| template void cs_halo_sync | ( | const cs_halo_t * | halo, |
| cs_halo_type_t | sync_mode, | ||
| bool | on_device, | ||
| cs_real_t | val[][6] | ||
| ) |
| void cs_halo_sync | ( | const cs_halo_t * | halo, |
| cs_halo_type_t | sync_mode, | ||
| bool | on_device, | ||
| T | val[] | ||
| ) |
Update array of values in case of parallelism or periodicity.
This function aims at copying main values from local elements (id between 1 and n_local_elements) to ghost elements on distant ranks (id between n_local_elements + 1 to n_local_elements_with_halo).
in] T value type
| [in] | halo | pointer to halo structure |
| [in] | sync_mode | synchronization mode (standard or extended) |
| [in] | on_device | run on accelerated device if possible |
| [in,out] | val | pointer to variable value array |
| void cs_halo_sync | ( | const cs_halo_t * | halo, |
| cs_halo_type_t | sync_mode, | ||
| bool | on_device, | ||
| T | val[][Stride] | ||
| ) |
| void cs_halo_sync | ( | const cs_halo_t * | halo, |
| cs_halo_type_t | sync_mode, | ||
| cs_datatype_t | data_type, | ||
| int | stride, | ||
| void * | val | ||
| ) |
Update array of values in case of parallelism or periodicity.
This function aims at copying main values from local elements (id between 1 and n_local_elements) to ghost elements on distant ranks (id between n_local_elements + 1 to n_local_elements_with_halo).
| [in] | halo | pointer to halo structure |
| [in] | sync_mode | synchronization mode (standard or extended) |
| [in] | data_type | data type |
| [in] | stride | number of (interlaced) values by entity |
| [in] | val | pointer to variable value array |
| void cs_halo_sync_num | ( | const cs_halo_t * | halo, |
| cs_halo_type_t | sync_mode, | ||
| cs_lnum_t | num[] | ||
| ) |
| void cs_halo_sync_pack | ( | const cs_halo_t * | halo, |
| cs_halo_type_t | sync_mode, | ||
| cs_datatype_t | data_type, | ||
| int | stride, | ||
| void * | val, | ||
| void * | send_buf, | ||
| cs_halo_state_t * | hs | ||
| ) |
Pack halo data to send into dense buffer.
A local state handler may be provided, or the default state handler will be used.
A local state and/or buffer may be provided, or the default (global) state and buffer will be used. If provided explicitely, the buffer must be of sufficient size.
| [in] | halo | pointer to halo structure |
| [in] | sync_mode | synchronization mode (standard or extended) |
| [in] | data_type | data type |
| [in] | stride | number of (interlaced) values by entity |
| [in] | val | pointer to variable value array |
| [out] | send_buf | pointer to send buffer, null for global buffer |
| [in,out] | hs | pointer to halo state, null for global state |
| void * cs_halo_sync_pack_init_state | ( | const cs_halo_t * | halo, |
| cs_halo_type_t | sync_mode, | ||
| cs_datatype_t | data_type, | ||
| int | stride, | ||
| void * | send_buf, | ||
| cs_halo_state_t * | hs | ||
| ) |
Initialize halo state prior to packing halo data to send.
A local state handler may be provided, or the default state handler will be used.
This function is included in cs_halo_sync_pack, but may be called separately for specific implementations, such as for accelerator devices.
A local state and/or buffer may be provided, or the default (global) state and buffer will be used. If provided explicitely, the buffer must be of sufficient size.
| [in] | halo | pointer to halo structure |
| [in] | sync_mode | synchronization mode (standard or extended) |
| [in] | data_type | data type |
| [in] | stride | number of (interlaced) values by entity |
| [out] | send_buf | pointer to send buffer, null for global buffer |
| [in,out] | hs | pointer to halo state, null for global state |
| template void cs_halo_sync_r | ( | const cs_halo_t * | halo, |
| cs_halo_type_t | sync_mode, | ||
| bool | on_device, | ||
| cs_real_t | val[][3] | ||
| ) |
| template void cs_halo_sync_r | ( | const cs_halo_t * | halo, |
| cs_halo_type_t | sync_mode, | ||
| bool | on_device, | ||
| cs_real_t | val[][3][3] | ||
| ) |
| template void cs_halo_sync_r | ( | const cs_halo_t * | halo, |
| cs_halo_type_t | sync_mode, | ||
| bool | on_device, | ||
| cs_real_t | val[][6] | ||
| ) |
| void cs_halo_sync_r | ( | const cs_halo_t * | halo, |
| cs_halo_type_t | sync_mode, | ||
| bool | on_device, | ||
| T | val[][3] | ||
| ) |
Update ghost cell values of a spatial vector field, including rotational periodicity if present.
This function aims at copying main values from local elements (id between 1 and n_local_elements) to ghost elements on distant ranks (id between n_local_elements + 1 to n_local_elements_with_halo).
in] T value type
| [in] | halo | pointer to halo structure |
| [in] | sync_mode | synchronization mode (standard or extended) |
| [in] | on_device | run on accelerated device if possible |
| [in,out] | val | pointer to variable value array |
| void cs_halo_sync_r | ( | const cs_halo_t * | halo, |
| cs_halo_type_t | sync_mode, | ||
| bool | on_device, | ||
| T | val[][3][3] | ||
| ) |
Update ghost cell values of a non-symmetric tensor field, including rotational periodicity if present.
This function aims at copying main values from local elements (id between 1 and n_local_elements) to ghost elements on distant ranks (id between n_local_elements + 1 to n_local_elements_with_halo).
in] T value type
| [in] | halo | pointer to halo structure |
| [in] | sync_mode | synchronization mode (standard or extended) |
| [in] | on_device | run on accelerated device if possible |
| [in,out] | val | pointer to variable value array |
| void cs_halo_sync_r | ( | const cs_halo_t * | halo, |
| cs_halo_type_t | sync_mode, | ||
| bool | on_device, | ||
| T | val[][6] | ||
| ) |
Update ghost cell values of a symmetric tensor field, including rotational periodicity if present.
This function aims at copying main values from local elements (id between 1 and n_local_elements) to ghost elements on distant ranks (id between n_local_elements + 1 to n_local_elements_with_halo).
in] T value type
| [in] | halo | pointer to halo structure |
| [in] | sync_mode | synchronization mode (standard or extended) |
| [in] | on_device | run on accelerated device if possible |
| [in,out] | val | pointer to variable value array |
| void cs_halo_sync_start | ( | const cs_halo_t * | halo, |
| void * | val, | ||
| cs_halo_state_t * | hs | ||
| ) |
Launch update array of values in case of parallelism or periodicity.
This function aims at copying main values from local elements (id between 1 and n_local_elements) to ghost elements on distant ranks (id between n_local_elements + 1 to n_local_elements_with_halo).
The cs_halo_sync_pack function should have been called before this function, using the same hs argument.
| [in] | halo | pointer to halo structure |
| [in] | val | pointer to variable value array |
| [in,out] | hs | pointer to halo state, null for global state |
| void cs_halo_sync_untyped | ( | const cs_halo_t * | halo, |
| cs_halo_type_t | sync_mode, | ||
| size_t | size, | ||
| void * | val | ||
| ) |
| void cs_halo_sync_var | ( | const cs_halo_t * | halo, |
| cs_halo_type_t | sync_mode, | ||
| cs_real_t | var[] | ||
| ) |
| void cs_halo_sync_var_strided | ( | const cs_halo_t * | halo, |
| cs_halo_type_t | sync_mode, | ||
| cs_real_t | var[], | ||
| int | stride | ||
| ) |
| void cs_halo_sync_wait | ( | const cs_halo_t * | halo, |
| void * | val, | ||
| cs_halo_state_t * | hs | ||
| ) |
Wait for completion of update array of values in case of parallelism or periodicity.
This function aims at copying main values from local elements (id between 1 and n_local_elements) to ghost elements on distant ranks (id between n_local_elements + 1 to n_local_elements_with_halo).
The cs_halo_sync_start function should have been called before this function, using the same hs argument.
| [in] | halo | pointer to halo structure |
| [in] | val | pointer to variable value array |
| [in,out] | hs | pointer to halo state, null for global state |