1
1
// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2
2
// -----------------------------------------------------------------------------
3
- // Copyright 2000-2023 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
3
+ // Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4
4
// See the top-level COPYRIGHT file for details.
5
5
// SPDX-License-Identifier: Apache-2.0
6
6
// -----------------------------------------------------------------------------
7
7
/* ---------------------------------------------------------------------------*/
8
- /* ItemMaterialVariableBaseT.h (C) 2000-2023 */
8
+ /* ItemMaterialVariableBaseT.h (C) 2000-2024 */
9
9
/* */
10
10
/* Implémentation de la classe de base des variables matériaux. */
11
11
/* ---------------------------------------------------------------------------*/
32
32
#include " arcane/materials/internal/MeshMaterialVariablePrivate.h"
33
33
#include " arcane/materials/internal/MeshMaterialVariableIndexer.h"
34
34
35
+ #include " arcane/accelerator/core/RunQueue.h"
36
+ #include " arcane/accelerator/RunCommandLoop.h"
37
+
35
38
/* ---------------------------------------------------------------------------*/
36
39
/* ---------------------------------------------------------------------------*/
37
40
@@ -335,9 +338,9 @@ _isValidAndUsedAndGlobalUsed(PrivatePartType* partial_var)
335
338
336
339
template <typename Traits> void
337
340
ItemMaterialVariableBase<Traits>::
338
- _copyGlobalToPartial (Int32 var_index,Int32ConstArrayView local_ids,
339
- Int32ConstArrayView indexes_in_multiple)
341
+ _copyGlobalToPartial (const MeshVariableCopyBetweenPartialAndGlobalArgs& args)
340
342
{
343
+ Int32 var_index = args.m_var_index ;
341
344
PrivatePartType* partial_var = m_vars[var_index+1 ];
342
345
if (!_isValidAndUsedAndGlobalUsed (partial_var))
343
346
return ;
@@ -353,33 +356,35 @@ _copyGlobalToPartial(Int32 var_index,Int32ConstArrayView local_ids,
353
356
ContainerConstViewType global_view = m_vars[0 ]->constValueView ();
354
357
ContainerViewType partial_view = partial_var->valueView ();
355
358
356
- Traits::copyTo (global_view,local_ids,partial_view,indexes_in_multiple);
359
+ Traits::copyTo (global_view, args.m_local_ids , partial_view,
360
+ args.m_indexes_in_multiple , *args.m_queue );
357
361
}
358
362
359
363
/* ---------------------------------------------------------------------------*/
360
364
/* ---------------------------------------------------------------------------*/
361
365
362
366
template <typename Traits> void
363
367
ItemMaterialVariableBase<Traits>::
364
- _copyPartialToGlobal (Int32 var_index,Int32ConstArrayView local_ids,
365
- Int32ConstArrayView indexes_in_multiple)
368
+ _copyPartialToGlobal (const MeshVariableCopyBetweenPartialAndGlobalArgs& args)
366
369
{
370
+ Int32 var_index = args.m_var_index ;
367
371
PrivatePartType* partial_var = m_vars[var_index+1 ];
368
372
if (!_isValidAndUsedAndGlobalUsed (partial_var))
369
373
return ;
370
374
371
375
ContainerViewType global_view = m_vars[0 ]->valueView ();
372
376
ContainerConstViewType partial_view = partial_var->constValueView ();
373
377
374
- Traits::copyTo (partial_view,indexes_in_multiple,global_view,local_ids);
378
+ Traits::copyTo (partial_view, args.m_indexes_in_multiple ,
379
+ global_view, args.m_local_ids , *args.m_queue );
375
380
}
376
381
377
382
/* ---------------------------------------------------------------------------*/
378
383
/* ---------------------------------------------------------------------------*/
379
384
380
385
template <typename Traits> void
381
386
ItemMaterialVariableBase<Traits>::
382
- _initializeNewItems (const ComponentItemListBuilder& list_builder)
387
+ _initializeNewItems (const ComponentItemListBuilder& list_builder, RunQueue& queue )
383
388
{
384
389
MeshMaterialVariableIndexer* indexer = list_builder.indexer ();
385
390
Integer var_index = indexer->index ();
@@ -404,15 +409,31 @@ _initializeNewItems(const ComponentItemListBuilder& list_builder)
404
409
// (sauf lors de l'init).
405
410
DataType zero = DataType ();
406
411
412
+ auto command = makeCommand (queue);
413
+ SmallSpan<ContainerViewType> views = m_views.view ();
414
+
415
+ ARCANE_CHECK_ACCESSIBLE_POINTER (queue, views.data ());
416
+ ARCANE_CHECK_ACCESSIBLE_POINTER (queue, global_view.data ());
417
+ ARCANE_CHECK_ACCESSIBLE_POINTER (queue, partial_matvar.data ());
418
+
407
419
if (init_with_zero){
408
- for ( Integer i=0 ; i<nb_partial; ++i )
409
- this ->setFillValue (partial_matvar[i],zero);
420
+ command << RUNCOMMAND_LOOP1 (iter, nb_partial)
421
+ {
422
+ auto [i] = iter ();
423
+ MatVarIndex mvi = partial_matvar[i];
424
+ Traits::setValue (views[mvi.arrayIndex ()][mvi.valueIndex ()],zero);
425
+ };
410
426
}
411
427
else {
412
428
Int32ConstArrayView partial_local_ids = list_builder.partialLocalIds ();
413
- for ( Integer i=0 ; i<nb_partial; ++i ){
414
- setValue (partial_matvar[i], global_view[partial_local_ids[i]]);
415
- }
429
+ ARCANE_CHECK_ACCESSIBLE_POINTER (queue, partial_local_ids.data ());
430
+ command << RUNCOMMAND_LOOP1 (iter, nb_partial)
431
+ {
432
+ auto [i] = iter ();
433
+ const auto & v = global_view[partial_local_ids[i]];
434
+ MatVarIndex mvi = partial_matvar[i];
435
+ Traits::setValue (views[mvi.arrayIndex ()][mvi.valueIndex ()],v);
436
+ };
416
437
}
417
438
}
418
439
0 commit comments