8.0
general documentation
cs_halo.c File Reference
#include "cs_defs.h"
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include "bft_mem.h"
#include "bft_error.h"
#include "bft_printf.h"
#include "cs_base.h"
#include "cs_base_accel.h"
#include "cs_order.h"
#include "cs_interface.h"
#include "cs_rank_neighbors.h"
#include "fvm_periodicity.h"
#include "cs_halo.h"
+ Include dependency graph for cs_halo.c:

Functions

cs_halo_tcs_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_tcs_halo_create_from_ref (const cs_halo_t *ref)
 Create a halo structure, given a reference halo. More...
 
cs_halo_tcs_halo_create_from_rank_neighbors (const cs_rank_neighbors_t *rn, cs_lnum_t n_local_elts, cs_lnum_t n_distant_elts, const int elt_rank_id[], const cs_lnum_t elt_id[])
 Create a halo structure from distant element distant ranks and ids. More...
 
void cs_halo_destroy (cs_halo_t **halo)
 
cs_halo_state_tcs_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_tcs_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_dump (const cs_halo_t *halo, int print_level)
 

Function Documentation

◆ cs_halo_create()

cs_halo_t* cs_halo_create ( const cs_interface_set_t ifs)

Create a halo structure given an interface set.

Parameters
[in]ifspointer to a cs_interface_set structure
Returns
pointer to created cs_halo_t structure

◆ cs_halo_create_complete()

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.

Parameters
[in]halopointer to halo structure

◆ cs_halo_create_from_rank_neighbors()

cs_halo_t* cs_halo_create_from_rank_neighbors ( const cs_rank_neighbors_t rn,
cs_lnum_t  n_local_elts,
cs_lnum_t  n_distant_elts,
const int  elt_rank_id[],
const cs_lnum_t  elt_id[] 
)

Create a halo structure from distant element distant ranks and ids.

Remarks
This function does not handle periodicity. For most matrix-vector, products and similar operations, periodicity of translation an even rotation could be handled with no specific halo information, simply by assigning an equivalence between two periodic elements. For rotation, this would require also applying a rotation through the matrix coefficients (this would have the advantage of being compatible with external libraries). An alternative would be to add rotation information to a given halo as a second stage, through a specialized operator which can be added in the future.
Parameters
[in]rnassociated rank neighbors info
[in]n_local_eltsnumber of elements for local rank
[in]n_distant_eltsnumber of distant elements for local rank
[in]elt_rank_iddistant element rank index in rank neighbors, ordered by rank (size: n_distant_elts)
[in]elt_iddistant element id (at distant rank), ordered by rank (size: n_distant_elts)
Returns
pointer to created cs_halo_t structure

◆ cs_halo_create_from_ref()

cs_halo_t* cs_halo_create_from_ref ( const cs_halo_t ref)

Create a halo structure, given a reference halo.

Parameters
[in]refpointer to reference halo
Returns
pointer to created cs_halo_t structure

◆ cs_halo_destroy()

void cs_halo_destroy ( cs_halo_t **  halo)

brief Destroy a halo structure.

Parameters
[in,out]halopointer to pointer to cs_halo structure to destroy.

◆ cs_halo_dump()

void cs_halo_dump ( const cs_halo_t halo,
int  print_level 
)

◆ cs_halo_get_buffer_alloc_mode()

cs_alloc_mode_t cs_halo_get_buffer_alloc_mode ( void  )

Get default host/device allocation mode for message packing arrays.

Returns
allocation mode

◆ cs_halo_get_comm_mode()

cs_halo_comm_mode_t cs_halo_get_comm_mode ( void  )

Get default communication mode for halo exchange.

Returns
allocation mode

◆ cs_halo_get_use_barrier()

bool cs_halo_get_use_barrier ( void  )

◆ cs_halo_renumber_cells()

void cs_halo_renumber_cells ( cs_halo_t halo,
const cs_lnum_t  new_cell_id[] 
)

◆ cs_halo_renumber_ghost_cells()

void cs_halo_renumber_ghost_cells ( cs_halo_t halo,
const cs_lnum_t  old_cell_id[] 
)

◆ cs_halo_set_buffer_alloc_mode()

void cs_halo_set_buffer_alloc_mode ( cs_alloc_mode_t  mode)

Set default host/device allocation mode for message packing arrays.

Parameters
[in]modeallocation mode to set

◆ cs_halo_set_comm_mode()

void cs_halo_set_comm_mode ( cs_halo_comm_mode_t  mode)

Set default communication mode for halo exchange.

Parameters
[in]modeallocation mode to set

◆ cs_halo_set_use_barrier()

void cs_halo_set_use_barrier ( bool  use_barrier)

◆ cs_halo_state_create()

cs_halo_state_t* cs_halo_state_create ( void  )

Create a halo state structure.

Returns
pointer to created cs_halo_state_t structure.

◆ cs_halo_state_destroy()

void cs_halo_state_destroy ( cs_halo_state_t **  halo_state)

Destroy a halo state structure.

Parameters
[in,out]halo_statepointer to pointer to cs_halo_state structure to destroy.

◆ cs_halo_state_get_default()

cs_halo_state_t* cs_halo_state_get_default ( void  )

Get pointer to default halo state structure.

Returns
] halo pointer to pointer to cs_halo structure to destroy.

◆ cs_halo_sync()

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).

Parameters
[in]halopointer to halo structure
[in]sync_modesynchronization mode (standard or extended)
[in]data_typedata type
[in]stridenumber of (interlaced) values by entity
[in]valpointer to variable value array

◆ cs_halo_sync_num()

void cs_halo_sync_num ( const cs_halo_t halo,
cs_halo_type_t  sync_mode,
cs_lnum_t  num[] 
)

◆ cs_halo_sync_pack()

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.

Parameters
[in]halopointer to halo structure
[in]sync_modesynchronization mode (standard or extended)
[in]data_typedata type
[in]stridenumber of (interlaced) values by entity
[in]valpointer to variable value array
[out]send_bufpointer to send buffer, NULL for global buffer
[in,out]hspointer to halo state, NULL for global state

◆ cs_halo_sync_pack_init_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.

Parameters
[in]halopointer to halo structure
[in]sync_modesynchronization mode (standard or extended)
[in]data_typedata type
[in]stridenumber of (interlaced) values by entity
[out]send_bufpointer to send buffer, NULL for global buffer
[in,out]hspointer to halo state, NULL for global state
Returns
pointer to halo send buffer

◆ cs_halo_sync_start()

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.

Parameters
[in]halopointer to halo structure
[in]valpointer to variable value array
[in,out]hspointer to halo state, NULL for global state

◆ cs_halo_sync_untyped()

void cs_halo_sync_untyped ( const cs_halo_t halo,
cs_halo_type_t  sync_mode,
size_t  size,
void *  val 
)

◆ cs_halo_sync_var()

void cs_halo_sync_var ( const cs_halo_t halo,
cs_halo_type_t  sync_mode,
cs_real_t  var[] 
)

◆ cs_halo_sync_var_strided()

void cs_halo_sync_var_strided ( const cs_halo_t halo,
cs_halo_type_t  sync_mode,
cs_real_t  var[],
int  stride 
)

◆ cs_halo_sync_wait()

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.

Parameters
[in]halopointer to halo structure
[in]valpointer to variable value array
[in,out]hspointer to halo state, NULL for global state