1#ifndef __CS_ARRAY_2DSPAN_H__
2#define __CS_ARRAY_2DSPAN_H__
41#if defined(__cplusplus)
48#define __has_builtin(x) 0
95#
if (defined(__GNUC__) || defined(__clang__)) && \
96 __has_builtin(__builtin_LINE) && \
97 __has_builtin(__builtin_FILE)
98 const char *file_name = __builtin_FILE(),
99 const int line_number = __builtin_LINE()
101 const char *file_name = __FILE__,
102 const int line_number = __LINE__
112 allocate_(file_name, line_number);
127#
if (defined(__GNUC__) || defined(__clang__)) && \
128 __has_builtin(__builtin_LINE) && \
129 __has_builtin(__builtin_FILE)
130 const char *file_name = __builtin_FILE(),
131 const int line_number = __builtin_LINE()
133 const char *file_name = __FILE__,
134 const int line_number = __LINE__
144 allocate_(file_name, line_number);
168 _full_array(data_array)
182 bool shallow_copy=
false,
183#
if (defined(__GNUC__) || defined(__clang__)) && \
184 __has_builtin(__builtin_LINE) && \
185 __has_builtin(__builtin_FILE)
186 const char *file_name = __builtin_FILE(),
187 const int line_number = __builtin_LINE()
189 const char *file_name = __FILE__,
190 const int line_number = __LINE__
194 set_size_(other._dim1, other._dim2);
200 _is_owner = (shallow_copy) ?
false : other._is_owner;
203 allocate_(file_name, line_number);
207 _full_array = other._full_array;
254 swap(first._dim1, second._dim1);
255 swap(first._dim2, second._dim2);
256 swap(first._size, second._size);
257 swap(first._is_owner, second._is_owner);
258 swap(first._mode, second._mode);
259 swap(first._full_array, second._full_array);
269 array_2dspan& operator=(array_2dspan other)
290 _full_array =
nullptr;
308 _full_array =
nullptr;
327 *
this = other.view();
356#
if (defined(__GNUC__) || defined(__clang__)) && \
357 __has_builtin(__builtin_LINE) && \
358 __has_builtin(__builtin_FILE)
359 const char *file_name = __builtin_FILE(),
360 const int line_number = __builtin_LINE()
362 const char *file_name = __FILE__,
363 const int line_number = __LINE__
367 assert(dim1 >= 0 && dim2 >= 0);
370 if (dim1 == _dim1 && dim2 == _dim2)
375 set_size_(dim1, dim2);
376 allocate_(file_name, line_number);
395#
if (defined(__GNUC__) || defined(__clang__)) && \
396 __has_builtin(__builtin_LINE) && \
397 __has_builtin(__builtin_FILE)
398 const char *file_name = __builtin_FILE(),
399 const int line_number = __builtin_LINE()
401 const char *file_name = __FILE__,
402 const int line_number = __LINE__
406 assert(dim1 >= 0 && dim2 >= 0);
407 assert(size_to_keep <= dim2 && size_to_keep <= _dim2);
410 if (dim1 == _dim1 && dim2 == _dim2)
413 if (copy_data && dim1 < _dim1)
415 "%s: Data cannot be saved when new dim1 is smaller than previous.\n",
422 set_size_(dim1, dim2);
423 reallocate_(file_name, line_number);
434 resize(dim1, dim2, file_name, line_number);
440 _full_array + i*_dim2);
447 resize(dim1, dim2, file_name, line_number);
465 return array_2dspan(*
this,
true);
511 const T *vals()
const
530 return _full_array + i * _dim2;
547 return _full_array + i * _dim2;
623 const char *file_name,
624 const int line_number
627 const char *_ptr_name =
"_full_array";
628 _full_array =
static_cast<T *
>(cs_mem_malloc_hd(_mode,
646 const char *file_name,
647 const int line_number
652 const char *_ptr_name =
"_full_array";
653 _full_array =
static_cast<T *
>(cs_mem_realloc_hd(_full_array,
void bft_error(const char *const file_name, const int line_num, const int sys_error_code, const char *const format,...)
Calls the error handler (set by bft_error_handler_set() or default).
Definition bft_error.cpp:193
void cs_array_copy(cudaStream_t stream, const cs_lnum_t size, const T *src, T *dest)
Copy values from an array to another of the same dimensions.
Definition cs_array_cuda.h:212
void cs_arrays_set_value(cudaStream_t stream, const cs_lnum_t n_elts, const T *ref_val, Arrays &&... arrays)
Assign values to all elements of multiple arrays. ref_val is input as a pointer or an array.
Definition cs_array_cuda.h:120
#define CS_F_HOST_DEVICE
Definition cs_defs.h:561
#define true
Definition cs_defs.h:220
#define false
Definition cs_defs.h:219
int cs_lnum_t
local mesh entity id
Definition cs_defs.h:335
#define CS_FREE(_ptr)
Definition cs_mem.h:155
#define CS_MALLOC_HD(_ptr, _ni, _type, _mode)
Definition cs_mem.h:99
#define cs_alloc_mode
Definition cs_mem.h:186
cs_alloc_mode_t
Definition cs_mem.h:50