Arcane  v3.16.0.0
Documentation utilisateur
Tout Classes Espaces de nommage Fichiers Fonctions Variables Définitions de type Énumérations Valeurs énumérées Amis Macros Groupes Pages Concepts
AMRZonePosition.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2025 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* AMRZonePosition.cc (C) 2000-2025 */
9/* */
10/* Definition d'une zone 2D ou 3D d'un maillage. */
11/*---------------------------------------------------------------------------*/
12
13#include "arcane/cartesianmesh/AMRZonePosition.h"
14#include "arcane/core/IMesh.h"
15
16/*---------------------------------------------------------------------------*/
17/*---------------------------------------------------------------------------*/
18
19namespace Arcane
20{
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24
26cellsInPatch(IMesh* mesh, SharedArray<Int32> cells_local_id) const
27{
28 VariableNodeReal3& nodes_coord = mesh->nodesCoordinates();
29 // Parcours les mailles actives et ajoute dans la liste des mailles
30 // à raffiner celles qui sont contenues dans la boîte englobante.
31 Real3 min_pos = m_position;
32 Real3 max_pos = min_pos + m_length;
33 //Int32 level = -10;
34 cells_local_id.clear();
35 ENUMERATE_ (Cell, icell, mesh->allActiveCells()) {
36 Cell cell = *icell;
37 Real3 center;
38 for (const Node node : cell.nodes())
39 center += nodes_coord[node];
40 center /= cell.nbNode();
41 bool is_inside_x = center.x > min_pos.x && center.x < max_pos.x;
42 bool is_inside_y = center.y > min_pos.y && center.y < max_pos.y;
43 bool is_inside_z = (center.z > min_pos.z && center.z < max_pos.z) || !m_is_3d;
44 if (is_inside_x && is_inside_y && is_inside_z) {
45 //if (level == -10) level = cell.level();
46 //else if (level != cell.level()) ARCANE_FATAL("Level pb"); // TODO plus clair.
47 cells_local_id.add(icell.itemLocalId());
48 }
49 }
50}
51
52/*---------------------------------------------------------------------------*/
53/*---------------------------------------------------------------------------*/
54
55} // End namespace Arcane
56
57/*---------------------------------------------------------------------------*/
58/*---------------------------------------------------------------------------*/
#define ENUMERATE_(type, name, group)
Enumérateur générique d'un groupe d'entité
void cellsInPatch(IMesh *mesh, SharedArray< Int32 > cells_local_id) const
Méthode permettant de retrouver les mailles incluses dans la zone.
void clear()
Supprime les éléments du tableau.
void add(ConstReferenceType val)
Ajoute l'élément val à la fin du tableau.
Maille d'un maillage.
Definition Item.h:1191
NodeConnectedListViewType nodes() const
Liste des noeuds de l'entité
Definition Item.h:782
Int32 nbNode() const
Nombre de noeuds de l'entité
Definition Item.h:776
Noeud d'un maillage.
Definition Item.h:573
Classe gérant un vecteur de réel de dimension 3.
Definition Real3.h:132
Vecteur 1D de données avec sémantique par référence.
MeshVariableScalarRefT< Node, Real3 > VariableNodeReal3
Grandeur au noeud de type coordonnées.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Real y
deuxième composante du triplet
Definition Real3.h:36
Real z
troisième composante du triplet
Definition Real3.h:37
Real x
première composante du triplet
Definition Real3.h:35