ceed-vector.c (9f99de848d0840355ad9548f806c3b5e4a3b9722) ceed-vector.c (bb03490db5dd50abd44d5abe8f5d902899c96770)
1// Copyright (c) 2017-2024, Lawrence Livermore National Security, LLC and other CEED contributors.
2// All Rights Reserved. See the top-level LICENSE and NOTICE files for details.
3//
4// SPDX-License-Identifier: BSD-2-Clause
5//
6// This file is part of CEED: http://github.com/ceed
7
8#include <ceed-impl.h>

--- 242 unchanged lines hidden (view full) ---

251 @param[in,out] vec_copy `CeedVector` to copy values to
252
253 @return An error code: 0 - success, otherwise - failure
254
255 @ref User
256**/
257int CeedVectorCopyStrided(CeedVector vec, CeedSize start, CeedInt step, CeedVector vec_copy) {
258 CeedSize length;
1// Copyright (c) 2017-2024, Lawrence Livermore National Security, LLC and other CEED contributors.
2// All Rights Reserved. See the top-level LICENSE and NOTICE files for details.
3//
4// SPDX-License-Identifier: BSD-2-Clause
5//
6// This file is part of CEED: http://github.com/ceed
7
8#include <ceed-impl.h>

--- 242 unchanged lines hidden (view full) ---

251 @param[in,out] vec_copy `CeedVector` to copy values to
252
253 @return An error code: 0 - success, otherwise - failure
254
255 @ref User
256**/
257int CeedVectorCopyStrided(CeedVector vec, CeedSize start, CeedInt step, CeedVector vec_copy) {
258 CeedSize length;
259 const CeedScalar *array;
260 CeedScalar *array_copy;
259 const CeedScalar *array = NULL;
260 CeedScalar *array_copy = NULL;
261
262 // Backend version
263 if (vec->CopyStrided && vec_copy->CopyStrided) {
264 CeedCall(vec->CopyStrided(vec, start, step, vec_copy));
265 vec_copy->state += 2;
266 return CEED_ERROR_SUCCESS;
267 }
268
269 // Get length
270 {
271 CeedSize length_vec, length_copy;
272
273 CeedCall(CeedVectorGetLength(vec, &length_vec));
274 CeedCall(CeedVectorGetLength(vec_copy, &length_copy));
261
262 // Backend version
263 if (vec->CopyStrided && vec_copy->CopyStrided) {
264 CeedCall(vec->CopyStrided(vec, start, step, vec_copy));
265 vec_copy->state += 2;
266 return CEED_ERROR_SUCCESS;
267 }
268
269 // Get length
270 {
271 CeedSize length_vec, length_copy;
272
273 CeedCall(CeedVectorGetLength(vec, &length_vec));
274 CeedCall(CeedVectorGetLength(vec_copy, &length_copy));
275 if (length_vec <= 0 || length_copy <= 0) return CEED_ERROR_SUCCESS;
275 length = length_vec < length_copy ? length_vec : length_copy;
276 }
277
278 // Copy
279 CeedCall(CeedVectorGetArrayRead(vec, CEED_MEM_HOST, &array));
280 CeedCall(CeedVectorGetArray(vec_copy, CEED_MEM_HOST, &array_copy));
281 for (CeedSize i = start; i < length; i += step) array_copy[i] = array[i];
282

--- 89 unchanged lines hidden (view full) ---

372
373 if (vec->SetValueStrided) {
374 CeedCall(vec->SetValueStrided(vec, start, step, value));
375 vec->state += 2;
376 } else {
377 CeedSize length;
378 CeedScalar *array;
379
276 length = length_vec < length_copy ? length_vec : length_copy;
277 }
278
279 // Copy
280 CeedCall(CeedVectorGetArrayRead(vec, CEED_MEM_HOST, &array));
281 CeedCall(CeedVectorGetArray(vec_copy, CEED_MEM_HOST, &array_copy));
282 for (CeedSize i = start; i < length; i += step) array_copy[i] = array[i];
283

--- 89 unchanged lines hidden (view full) ---

373
374 if (vec->SetValueStrided) {
375 CeedCall(vec->SetValueStrided(vec, start, step, value));
376 vec->state += 2;
377 } else {
378 CeedSize length;
379 CeedScalar *array;
380
380 CeedCall(CeedVectorGetArray(vec, CEED_MEM_HOST, &array));
381 CeedCall(CeedVectorGetLength(vec, &length));
381 CeedCall(CeedVectorGetLength(vec, &length));
382 if (length <= 0) return CEED_ERROR_SUCCESS;
383 CeedCall(CeedVectorGetArray(vec, CEED_MEM_HOST, &array));
382 for (CeedSize i = start; i < length; i += step) array[i] = value;
383 CeedCall(CeedVectorRestoreArray(vec, &array));
384 }
385 return CEED_ERROR_SUCCESS;
386}
387
388/**
389 @brief Sync the `CeedVector` to a specified `mem_type`.

--- 689 unchanged lines hidden ---
384 for (CeedSize i = start; i < length; i += step) array[i] = value;
385 CeedCall(CeedVectorRestoreArray(vec, &array));
386 }
387 return CEED_ERROR_SUCCESS;
388}
389
390/**
391 @brief Sync the `CeedVector` to a specified `mem_type`.

--- 689 unchanged lines hidden ---