14#include "arcane/utils/ArcanePrecomp.h"
15#include "arcane/utils/ScopedPtr.h"
17#include "arcane/BasicUnitTest.h"
18#include "arcane/IMesh.h"
19#include "arcane/IItemFamily.h"
20#include "arcane/IParticleFamily.h"
21#include "arcane/IRayMeshIntersection.h"
22#include "arcane/IParallelMng.h"
23#include "arcane/ItemVector.h"
24#include "arcane/ServiceBuilder.h"
26#include "arcane/tests/ArcaneTestGlobal.h"
28#include "arcane/tests/RayMeshIntersectionUnitTest_axl.h"
35using namespace Arcane;
42class RayMeshIntersectionUnitTest
43:
public ArcaneRayMeshIntersectionUnitTestObject
51 void initializeTest()
override;
52 void executeTest()
override;
56 void _testReferences(
Integer nb_ref);
69RayMeshIntersectionUnitTest::
71: ArcaneRayMeshIntersectionUnitTestObject(mb)
78void RayMeshIntersectionUnitTest::
84 info() <<
"EXEC TEST rank=" << my_rank <<
" nb_rank=" << nb_rank;
87 Integer nb_segment = (n0*n0) / nb_rank;
94 for(
Integer i=0; i<nb_segment; ++i ){
95 Integer index = i + nb_segment*my_rank;
96 const Int32 ipx = index / n0;
97 const Int32 ipy = index % n0;
98 Real px =
static_cast<Real
>(ipx);
99 Real py =
static_cast<Real
>(ipy);
100 segments_position[i] =
Real3(7.0,py/10.0-py/5.0,px/10.0-px/5.0);
101 segments_direction[i] =
Real3(-1.0-(px/5.0),(py/20.0)-(py/10.0),0.5-(px/10.0));
102 info() <<
" SEGMENT: pos=" << segments_position[i] <<
" dir=" << segments_direction[i];
110 ServiceBuilder<IRayMeshIntersection> sb(subDomain());
111 auto mi(sb.createReference(
"BasicRayMeshIntersection"));
114 mi->compute(segments_position,segments_direction,segments_orig_face,segments_user_value,
115 segments_intersection,segments_distance,faces_lid);
118 IItemFamily* ray_family = mesh()->findItemFamily(
IK_Particle,
"Rays",
true);
121 for(
Integer i=0; i<nb_segment; ++i )
122 uids[i] = (i+(nb_segment*my_rank)+1);
136 for(
Integer i=0; i<(nb_segment/10); ++i ){
137 to_remove_rays.
add(i*5);
139 pf->removeParticles(to_remove_rays);
146 rays_position[p] = segments_position[p.
localId()];
147 rays_direction[p] = segments_direction[p.
localId()];
148 rays_orig_face[p] = NULL_ITEM_LOCAL_ID;
150 mi->compute(ray_family,rays_position,rays_direction,rays_orig_face,user_values,
151 rays_intersection,rays_distance,rays_face);
152 info() <<
"Print rays infos";
153 FaceInfoListView faces_internal(mesh()->faceFamily());
155 Particle ray = *ipart;
156 Int32 face_lid = rays_face[ipart];
157 if (face_lid!=NULL_ITEM_ID)
158 info() <<
"Ray uid=" << ray.
uniqueId()
159 <<
" pos=" << rays_position[ipart]
160 <<
" dir=" << rays_direction[ipart]
161 <<
" intersect_face_lid=" << face_lid
162 <<
" intersect_face_uid=" << faces_internal[face_lid].uniqueId()
163 <<
" d=" << rays_distance[ipart]
164 <<
" p=" << rays_intersection[ipart];
171void RayMeshIntersectionUnitTest::
Module de test des variables.
void add(ConstReferenceType val)
Ajoute l'élément val à la fin du tableau.
virtual IParticleFamily * toParticleFamily()=0
Retourne l'interface de la famille de particule de cette famille.
virtual ItemGroup allItems() const =0
Groupe de toutes les entités.
virtual void endUpdate()=0
Notifie la fin de modification de la liste des entités.
Interface du gestionnaire de parallélisme pour un sous-domaine.
virtual Int32 commRank() const =0
Rang de cette instance dans le communicateur.
virtual Int32 commSize() const =0
Nombre d'instance dans le communicateur.
virtual void setParticleCell(Particle particle, Cell new_cell)=0
Déplace la particule particle dans la maille new_cell.
virtual void endUpdate()=0
virtual ParticleVectorView addParticles(Int64ConstArrayView unique_ids, Int32ArrayView items_local_id)=0
Alloue des particules.
constexpr Int32 localId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
ItemUniqueId uniqueId() const
Identifiant unique sur tous les domaines.
Classe gérant un vecteur de réel de dimension 3.
Structure contenant les informations pour créer un service.
MeshVariableScalarRefT< Particle, Real3 > VariableParticleReal3
Grandeur particulaire de type coordonnées.
MeshVariableScalarRefT< Particle, Int32 > VariableParticleInt32
Grandeur particulaire de type entier 32 bits.
MeshVariableScalarRefT< Particle, Real > VariableParticleReal
Grandeur particulaire de type réel.
UniqueArray< Int64 > Int64UniqueArray
Tableau dynamique à une dimension d'entiers 64 bits.
Int32 Integer
Type représentant un entier.
UniqueArray< Real3 > Real3UniqueArray
Tableau dynamique à une dimension de vecteurs de rang 3.
UniqueArray< Int32 > Int32UniqueArray
Tableau dynamique à une dimension d'entiers 32 bits.
UniqueArray< Real > RealUniqueArray
Tableau dynamique à une dimension de réels.
@ IK_Particle
Entité de maillage de genre particule.
std::int32_t Int32
Type entier signé sur 32 bits.