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.
@ Cell
Le maillage est AMR par maille.
std::int32_t Int32
Type entier signé sur 32 bits.