Arcane  v3.16.0.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
PDESRandomNumberGeneratorService.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 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/* PDESRandomNumberGeneratorService.cc (C) 2000-2022 */
9/* */
10/* Implémentation d'un générateur de nombres aléatoires LCG. */
11/* Inspiré du générateur de Quicksilver (LLNL) et des pages 302-304 */
12/* du livre : */
13/* */
14/* Numerical Recipes in C */
15/* The Art of Scientific Computing */
16/* Second Edition */
17/*---------------------------------------------------------------------------*/
18/*---------------------------------------------------------------------------*/
19
20#ifndef ARCANE_STD_PDESRANDOMNUMBERGENERATORSERVICE_H
21#define ARCANE_STD_PDESRANDOMNUMBERGENERATORSERVICE_H
22
23/*---------------------------------------------------------------------------*/
24/*---------------------------------------------------------------------------*/
25
26#include "arcane/IRandomNumberGenerator.h"
27#include "arcane/std/PDESRandomNumberGenerator_axl.h"
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31
32namespace Arcane
33{
34
35/*---------------------------------------------------------------------------*/
36/*---------------------------------------------------------------------------*/
37
38class PDESRandomNumberGeneratorService
40{
41 public:
42 PDESRandomNumberGeneratorService(const ServiceBuildInfo& sbi)
44 , m_seed(4294967297)
45 {
46 m_with_option = (sbi.creationType() == ST_CaseOption);
47 }
48
49 virtual ~PDESRandomNumberGeneratorService(){};
50
51 public:
52 bool initSeed() override;
53 bool initSeed(ByteArrayView seed) override;
54
55 ByteUniqueArray emptySeed() override;
57
58 Integer neededSizeOfSeed() override;
59
60 bool isLeapSeedSupported() override { return true; };
62 ByteUniqueArray generateRandomSeed(ByteArrayView parent_seed, Integer leap = 0) override;
63
64 bool isLeapNumberSupported() override { return true; };
65 Real generateRandomNumber(Integer leap) override;
66 Real generateRandomNumber(ByteArrayView seed, Integer leap = 0) override;
67
68 protected:
69 void _breakupUInt64(uint64_t uint64_in, uint32_t* front_bits, uint32_t* back_bits);
70 uint64_t _reconstructUInt64(uint32_t front_bits, uint32_t back_bits);
71 void _psdes(uint32_t* lword, uint32_t* irword);
72 uint64_t _hashState(uint64_t initial_number);
73 Real _ran4(Int64* seed, Integer leap);
74
75 protected:
76 Int64 m_seed;
77 const Integer m_size_of_seed = sizeof(Int64);
78 bool m_with_option;
79};
80
81/*---------------------------------------------------------------------------*/
82/*---------------------------------------------------------------------------*/
83
84ARCANE_REGISTER_SERVICE_PDESRANDOMNUMBERGENERATOR(PDESRandomNumberGenerator, PDESRandomNumberGeneratorService);
85
86/*---------------------------------------------------------------------------*/
87/*---------------------------------------------------------------------------*/
88
89} // End namespace Arcane
90
91/*---------------------------------------------------------------------------*/
92/*---------------------------------------------------------------------------*/
93
94#endif
95
96/*---------------------------------------------------------------------------*/
97/*---------------------------------------------------------------------------*/
ArcanePDESRandomNumberGeneratorObject(const Arcane::ServiceBuildInfo &sbi)
Constructeur.
ByteConstArrayView viewSeed() override
Méthode permettant de récupérer une vue constante sur la graine actuelle.
ByteUniqueArray generateRandomSeed(Integer leap=0) override
Méthode permettant de générer une graine "enfant" à partir d'une graine "parent".
uint64_t _hashState(uint64_t initial_number)
Méthode permettant de générer une nouvelle graine avec l'algorithme pseudo-DES.
Real generateRandomNumber(Integer leap) override
Méthode permettant de générer un nombre aléatoire avec la graine en mémoire.
Integer neededSizeOfSeed() override
Méthode permettant de connaitre la taille de seed nécessaire pour l'implémentation.
bool initSeed() override
Méthode permettant d'initialiser le service.
bool isLeapNumberSupported() override
Méthode permettant de savoir si les sauts sont permis sur le générateur de nombres.
void _psdes(uint32_t *lword, uint32_t *irword)
Algorithme Pseudo-DES du livre : Numerical Recipes in C The Art of Scientific Computing Second Editio...
uint64_t _reconstructUInt64(uint32_t front_bits, uint32_t back_bits)
Méthode permettant de regrouper deux uint32 en un uint64.
ByteUniqueArray emptySeed() override
Méthode permettant de récupérer une graine vide de bonne taille.
bool isLeapSeedSupported() override
Méthode permettant de savoir si les sauts sont permis sur le générateur de graines.
void _breakupUInt64(uint64_t uint64_in, uint32_t *front_bits, uint32_t *back_bits)
Méthode permettant de découper un uint64 en deux uint32.
Real _ran4(Int64 *seed, Integer leap)
Méthode permettant de générer des nombres pseudo-aléatoire à partir d'une graine.
eServiceType creationType() const
Type du service pouvant être créé par cette instance.
Structure contenant les informations pour créer un service.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
ArrayView< Byte > ByteArrayView
Equivalent C d'un tableau à une dimension de caractères.
Definition UtilsTypes.h:534
std::int64_t Int64
Type entier signé sur 64 bits.
Int32 Integer
Type représentant un entier.
@ ST_CaseOption
Le service s'utilise au niveau du jeu de données.
UniqueArray< Byte > ByteUniqueArray
Tableau dynamique à une dimension de caractères.
Definition UtilsTypes.h:422
double Real
Type représentant un réel.
ConstArrayView< Byte > ByteConstArrayView
Equivalent C d'un tableau à une dimension de caractères.
Definition UtilsTypes.h:563