Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
GeometricUnitTest.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2023 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/* GeometricUnitTest.cc (C) 2000-2023 */
9/* */
10/* Service de test de la géométrie. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/utils/ScopedPtr.h"
15#include "arcane/utils/ValueChecker.h"
16
17#include "arcane/BasicUnitTest.h"
18#include "arcane/ItemPrinter.h"
19#include "arcane/IMesh.h"
20
21#include "arcane/geometric/GeomShapeMng.h"
22#include "arcane/geometric/BarycentricGeomShapeComputer.h"
23
24#include "arcane/tests/ArcaneTestGlobal.h"
25
26#include "arcane/tests/GeometricUnitTest_axl.h"
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30
31namespace ArcaneTest
32{
33
34/*---------------------------------------------------------------------------*/
35/*---------------------------------------------------------------------------*/
36
37using namespace Arcane;
38
39/*---------------------------------------------------------------------------*/
40/*---------------------------------------------------------------------------*/
45: public ArcaneGeometricUnitTestObject
46{
47 public:
48
51
52 public:
53
54 virtual void initializeTest();
55 virtual void executeTest();
56
57 private:
58
59 geometric::GeomShapeMng m_shape_mng;
60
61 private:
62
63 void _checkCoords(const CellGroup& cells);
64};
65
66/*---------------------------------------------------------------------------*/
67/*---------------------------------------------------------------------------*/
68
69ARCANE_REGISTER_SERVICE_GEOMETRICUNITTEST(GeometricUnitTest,GeometricUnitTest);
70
71/*---------------------------------------------------------------------------*/
72/*---------------------------------------------------------------------------*/
73
74GeometricUnitTest::
75GeometricUnitTest(const ServiceBuildInfo& sb)
76: ArcaneGeometricUnitTestObject(sb)
77, m_shape_mng(sb.mesh())
78{
79}
80
81/*---------------------------------------------------------------------------*/
82/*---------------------------------------------------------------------------*/
83
84GeometricUnitTest::
85~GeometricUnitTest()
86{
87}
88
89/*---------------------------------------------------------------------------*/
90/*---------------------------------------------------------------------------*/
91
92void GeometricUnitTest::
93_checkCoords(const CellGroup& cells)
94{
95 VariableNodeReal3& node_coords(mesh()->nodesCoordinates());
97 ENUMERATE_CELL(icell,cells){
98 Cell cell = *icell;
99 m_shape_mng.initShape(shape_view,*icell);
100
101 // Vérifie que les coordonnées des noeuds sont OK.
102 Integer nb_node = cell.nbNode();
103 for( Integer z=0; z<nb_node; ++z )
104 if (node_coords[cell.node(z)] != shape_view.node(z))
105 throw FatalErrorException(A_FUNCINFO,"Invalid node coordinates for GeomShape");
106 }
107}
108
109/*---------------------------------------------------------------------------*/
110/*---------------------------------------------------------------------------*/
111
112void GeometricUnitTest::
113executeTest()
114{
115 ValueChecker vc(A_FUNCINFO);
116 VariableNodeReal3& node_coords(mesh()->nodesCoordinates());
117
118 // Met à jour les coordonnées des formes géométriques élément par élément
119 ENUMERATE_CELL (icell, allCells()) {
120 Cell cell = *icell;
121 geometric::BarycentricGeomShapeComputer::computeAll(m_shape_mng.mutableShapeView(cell), node_coords, cell);
122 }
123 _checkCoords(allCells());
124
125 // Met à jour les coordonnées de manière globale.
126 geometric::BarycentricGeomShapeComputer::computeAll(m_shape_mng, node_coords, allCells());
127 _checkCoords(allCells());
128
130 ENUMERATE_CELL (icell, allCells()) {
131 Cell cell = *icell;
132 m_shape_mng.initShape(shape_view, *icell);
133 Cell shape_cell = shape_view.cell();
134
135 // Vérifie maille OK.
136 if (shape_cell != cell)
137 ARCANE_FATAL("Invalid cell for shape '{0}'", cell.uniqueId());
138 info() << "Cell type=" << cell.typeInfo()->typeName();
139 if (cell.type() == IT_Hexaedron8) {
140 geometric::Hexaedron8Element hex_element(node_coords, cell);
141 for (int z = 0; z < 8; ++z) {
142 vc.areEqual(hex_element[z], node_coords[cell.node(z)], "Node");
143 }
144 Real3 to_add(1.0, 2.0, 3.0);
145 geometric::Hexaedron8ElementView view1(hex_element.view());
146 for (int z = 0; z < 8; ++z) {
147 view1.setValue(z, view1[z] + to_add);
148 }
149 for (int z = 0; z < 8; ++z) {
150 vc.areEqual(hex_element[z], node_coords[cell.node(z)] + to_add, "Node2");
151 }
152 }
153 }
154}
155
156/*---------------------------------------------------------------------------*/
157/*---------------------------------------------------------------------------*/
158
159void GeometricUnitTest::
160initializeTest()
161{
162 m_shape_mng.initialize();
163}
164
165/*---------------------------------------------------------------------------*/
166/*---------------------------------------------------------------------------*/
167
168}
169
170/*---------------------------------------------------------------------------*/
171/*---------------------------------------------------------------------------*/
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
#define ENUMERATE_CELL(name, group)
Enumérateur générique d'un groupe de mailles.
Service de test de la géométrie.
Maille d'un maillage.
Definition Item.h:1178
String typeName() const
Nom du type.
Node node(Int32 i) const
i-ème noeud de l'entité
Definition Item.h:768
Int32 nbNode() const
Nombre de noeuds de l'entité
Definition Item.h:765
const ItemTypeInfo * typeInfo() const
Infos sur le type de l'entité.
Definition Item.h:377
ItemUniqueId uniqueId() const
Identifiant unique sur tous les domaines.
Definition Item.h:216
Int16 type() const
Type de l'entité
Definition Item.h:232
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Classe gérant un vecteur de réel de dimension 3.
Definition Real3.h:132
Structure contenant les informations pour créer un service.
Vérification de la validité de certaines valeurs.
Vue constante sur une forme géométrique GeomShape.
Exception lorsqu'une erreur fatale est survenue.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.