modulation-da 0.0.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- modulation_da-0.0.1/PKG-INFO +90 -0
- modulation_da-0.0.1/README.md +71 -0
- modulation_da-0.0.1/modulation_da/__init__.py +7 -0
- modulation_da-0.0.1/modulation_da/current_calculator.py +71 -0
- modulation_da-0.0.1/modulation_da/exempleBeltako.py +638 -0
- modulation_da-0.0.1/modulation_da/main.py +77 -0
- modulation_da-0.0.1/modulation_da/perturbations.py +103 -0
- modulation_da-0.0.1/modulation_da/pinn_model.py +243 -0
- modulation_da-0.0.1/modulation_da/quantum_config.py +50 -0
- modulation_da-0.0.1/modulation_da/quantum_solver.py +245 -0
- modulation_da-0.0.1/modulation_da/quantum_system.py +51 -0
- modulation_da-0.0.1/modulation_da/results_manager.py +56 -0
- modulation_da-0.0.1/modulation_da/visualization.py +48 -0
- modulation_da-0.0.1/modulation_da.egg-info/PKG-INFO +90 -0
- modulation_da-0.0.1/modulation_da.egg-info/SOURCES.txt +19 -0
- modulation_da-0.0.1/modulation_da.egg-info/dependency_links.txt +1 -0
- modulation_da-0.0.1/modulation_da.egg-info/entry_points.txt +2 -0
- modulation_da-0.0.1/modulation_da.egg-info/requires.txt +4 -0
- modulation_da-0.0.1/modulation_da.egg-info/top_level.txt +1 -0
- modulation_da-0.0.1/pyproject.toml +31 -0
- modulation_da-0.0.1/setup.cfg +4 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: modulation-da
|
|
3
|
+
Version: 0.0.1
|
|
4
|
+
Summary: A scientific computing package for simulating donor-acceptor modulation.
|
|
5
|
+
Author-email: Delchere DON-TSA <dontsadelchere2000@gmail.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Classifier: Programming Language :: Python :: 3
|
|
8
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
9
|
+
Classifier: Operating System :: OS Independent
|
|
10
|
+
Classifier: Development Status :: 3 - Alpha
|
|
11
|
+
Classifier: Intended Audience :: Science/Research
|
|
12
|
+
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
13
|
+
Requires-Python: >=3.8
|
|
14
|
+
Description-Content-Type: text/markdown
|
|
15
|
+
Requires-Dist: tensorflow
|
|
16
|
+
Requires-Dist: numpy
|
|
17
|
+
Requires-Dist: matplotlib
|
|
18
|
+
Requires-Dist: scipy
|
|
19
|
+
|
|
20
|
+
# Simulation de la Modulation Donneur-Accepteur par Réseaux de Neurones Informés par la Physique (PINN)
|
|
21
|
+
|
|
22
|
+

|
|
23
|
+
|
|
24
|
+
## Description
|
|
25
|
+
|
|
26
|
+
Ce projet met en œuvre un solveur basé sur les Réseaux de Neurones Informés par la Physique (PINNs) pour simuler et analyser les systèmes quantiques de type donneur-accepteur. Le code permet de configurer, perturber et résoudre les équations de Schrödinger pour de tels systèmes afin de calculer le courant résultant.
|
|
27
|
+
|
|
28
|
+
## Table des matières
|
|
29
|
+
|
|
30
|
+
- [Installation](#installation)
|
|
31
|
+
- [Utilisation](#utilisation)
|
|
32
|
+
- [Structure du Projet](#structure-du-projet)
|
|
33
|
+
- [Dépendances](#dépendances)
|
|
34
|
+
- [Auteurs](#auteurs)
|
|
35
|
+
- [Licence](#licence)
|
|
36
|
+
|
|
37
|
+
## Installation
|
|
38
|
+
|
|
39
|
+
1. Assurez-vous d'avoir les fichiers du projet dans un dossier sur votre machine.
|
|
40
|
+
|
|
41
|
+
2. Ouvrez un terminal, naviguez jusqu'au dossier racine du projet, puis installez les dépendances et le package :
|
|
42
|
+
```sh
|
|
43
|
+
pip install -e .
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Utilisation
|
|
47
|
+
|
|
48
|
+
Le script principal pour lancer une simulation est `main.py`. Vous pouvez le configurer et l'exécuter directement.
|
|
49
|
+
|
|
50
|
+
```sh
|
|
51
|
+
python main.py
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Vous pouvez modifier le fichier `quantum_config.py` pour ajuster les paramètres de la simulation (potentiel, discrétisation, etc.) ou `perturbations.py` pour changer la nature des perturbations appliquées.
|
|
55
|
+
|
|
56
|
+
Les résultats, y compris les graphiques, sont sauvegardés dans un dossier horodaté dans le répertoire `RESULTS_*`.
|
|
57
|
+
|
|
58
|
+
## Structure du Projet
|
|
59
|
+
|
|
60
|
+
Voici une description des fichiers clés du projet :
|
|
61
|
+
|
|
62
|
+
- `main.py`: Point d'entrée principal du programme. Orchestre la configuration, la simulation et la visualisation.
|
|
63
|
+
- `quantum_config.py`: Définit les constantes et les paramètres de la simulation quantique.
|
|
64
|
+
- `quantum_system.py`: Modélise le système quantique, y compris le potentiel et l'hamiltonien.
|
|
65
|
+
- `perturbations.py`: Gère l'application de perturbations au système.
|
|
66
|
+
- `pinn_model.py`: Contient l'architecture du modèle de réseau de neurones (PINN) avec TensorFlow.
|
|
67
|
+
- `quantum_solver.py`: Le cœur du solveur, qui utilise le PINN pour résoudre les équations.
|
|
68
|
+
- `current_calculator.py`: Calcule le courant à partir des résultats de la simulation.
|
|
69
|
+
- `results_manager.py`: S'occupe de la sauvegarde des résultats (données et figures).
|
|
70
|
+
- `visualization.py`: Génère les graphiques pour visualiser les résultats.
|
|
71
|
+
- `pyproject.toml`: Fichier de configuration du projet et de ses dépendances pour la distribution.
|
|
72
|
+
|
|
73
|
+
## Dépendances
|
|
74
|
+
|
|
75
|
+
Les principales dépendances de ce projet sont :
|
|
76
|
+
|
|
77
|
+
- `tensorflow`
|
|
78
|
+
- `numpy`
|
|
79
|
+
- `matplotlib`
|
|
80
|
+
- `scipy`
|
|
81
|
+
|
|
82
|
+
## Auteurs
|
|
83
|
+
|
|
84
|
+
- **[Votre Nom]** - *[you@example.com](mailto:you@example.com)*
|
|
85
|
+
|
|
86
|
+
Veuillez modifier cette section pour ajouter les auteurs.
|
|
87
|
+
|
|
88
|
+
## Licence
|
|
89
|
+
|
|
90
|
+
Ce projet est sous licence MIT. Voir le fichier `pyproject.toml` pour plus de détails.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Simulation de la Modulation Donneur-Accepteur par Réseaux de Neurones Informés par la Physique (PINN)
|
|
2
|
+
|
|
3
|
+

|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
Ce projet met en œuvre un solveur basé sur les Réseaux de Neurones Informés par la Physique (PINNs) pour simuler et analyser les systèmes quantiques de type donneur-accepteur. Le code permet de configurer, perturber et résoudre les équations de Schrödinger pour de tels systèmes afin de calculer le courant résultant.
|
|
8
|
+
|
|
9
|
+
## Table des matières
|
|
10
|
+
|
|
11
|
+
- [Installation](#installation)
|
|
12
|
+
- [Utilisation](#utilisation)
|
|
13
|
+
- [Structure du Projet](#structure-du-projet)
|
|
14
|
+
- [Dépendances](#dépendances)
|
|
15
|
+
- [Auteurs](#auteurs)
|
|
16
|
+
- [Licence](#licence)
|
|
17
|
+
|
|
18
|
+
## Installation
|
|
19
|
+
|
|
20
|
+
1. Assurez-vous d'avoir les fichiers du projet dans un dossier sur votre machine.
|
|
21
|
+
|
|
22
|
+
2. Ouvrez un terminal, naviguez jusqu'au dossier racine du projet, puis installez les dépendances et le package :
|
|
23
|
+
```sh
|
|
24
|
+
pip install -e .
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Utilisation
|
|
28
|
+
|
|
29
|
+
Le script principal pour lancer une simulation est `main.py`. Vous pouvez le configurer et l'exécuter directement.
|
|
30
|
+
|
|
31
|
+
```sh
|
|
32
|
+
python main.py
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Vous pouvez modifier le fichier `quantum_config.py` pour ajuster les paramètres de la simulation (potentiel, discrétisation, etc.) ou `perturbations.py` pour changer la nature des perturbations appliquées.
|
|
36
|
+
|
|
37
|
+
Les résultats, y compris les graphiques, sont sauvegardés dans un dossier horodaté dans le répertoire `RESULTS_*`.
|
|
38
|
+
|
|
39
|
+
## Structure du Projet
|
|
40
|
+
|
|
41
|
+
Voici une description des fichiers clés du projet :
|
|
42
|
+
|
|
43
|
+
- `main.py`: Point d'entrée principal du programme. Orchestre la configuration, la simulation et la visualisation.
|
|
44
|
+
- `quantum_config.py`: Définit les constantes et les paramètres de la simulation quantique.
|
|
45
|
+
- `quantum_system.py`: Modélise le système quantique, y compris le potentiel et l'hamiltonien.
|
|
46
|
+
- `perturbations.py`: Gère l'application de perturbations au système.
|
|
47
|
+
- `pinn_model.py`: Contient l'architecture du modèle de réseau de neurones (PINN) avec TensorFlow.
|
|
48
|
+
- `quantum_solver.py`: Le cœur du solveur, qui utilise le PINN pour résoudre les équations.
|
|
49
|
+
- `current_calculator.py`: Calcule le courant à partir des résultats de la simulation.
|
|
50
|
+
- `results_manager.py`: S'occupe de la sauvegarde des résultats (données et figures).
|
|
51
|
+
- `visualization.py`: Génère les graphiques pour visualiser les résultats.
|
|
52
|
+
- `pyproject.toml`: Fichier de configuration du projet et de ses dépendances pour la distribution.
|
|
53
|
+
|
|
54
|
+
## Dépendances
|
|
55
|
+
|
|
56
|
+
Les principales dépendances de ce projet sont :
|
|
57
|
+
|
|
58
|
+
- `tensorflow`
|
|
59
|
+
- `numpy`
|
|
60
|
+
- `matplotlib`
|
|
61
|
+
- `scipy`
|
|
62
|
+
|
|
63
|
+
## Auteurs
|
|
64
|
+
|
|
65
|
+
- **[Votre Nom]** - *[you@example.com](mailto:you@example.com)*
|
|
66
|
+
|
|
67
|
+
Veuillez modifier cette section pour ajouter les auteurs.
|
|
68
|
+
|
|
69
|
+
## Licence
|
|
70
|
+
|
|
71
|
+
Ce projet est sous licence MIT. Voir le fichier `pyproject.toml` pour plus de détails.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# current_calculator.py
|
|
2
|
+
import tensorflow as tf
|
|
3
|
+
import numpy as np
|
|
4
|
+
|
|
5
|
+
class CurrentCalculator:
|
|
6
|
+
"""Complete calculation of quantum currents"""
|
|
7
|
+
|
|
8
|
+
def __init__(self, config, system):
|
|
9
|
+
self.config = config
|
|
10
|
+
self.system = system
|
|
11
|
+
|
|
12
|
+
def compute_current_contribution(self, model, i_energy, j_mode, perturbation_manager, perturbation_type):
|
|
13
|
+
"""Calculates current contribution for a specific mode/energy"""
|
|
14
|
+
E_norm = self.config.E_min_norm + i_energy * self.config.dE_norm
|
|
15
|
+
psi_st = self.system.stock_psi[i_energy, j_mode, :].reshape((-1, 1))
|
|
16
|
+
psi_st_tensor = tf.convert_to_tensor(psi_st, dtype=tf.complex64)
|
|
17
|
+
|
|
18
|
+
# Prédiction
|
|
19
|
+
t_pred, psi_total, HT_pred = self.predict_wavefunction(model, E_norm, psi_st_tensor, perturbation_manager, perturbation_type)
|
|
20
|
+
|
|
21
|
+
# Current calculation
|
|
22
|
+
fermi_factor = self.system.fermi_dirac(E_norm)
|
|
23
|
+
current_mode = self._compute_mode_current(psi_total, HT_pred, fermi_factor)
|
|
24
|
+
|
|
25
|
+
return current_mode, t_pred
|
|
26
|
+
|
|
27
|
+
def predict_wavefunction(self, model, E_norm, psi_st_tensor, perturbation_manager, perturbation_type):
|
|
28
|
+
"""Predicts the complete wavefunction"""
|
|
29
|
+
t_pred_norm_vals = np.linspace(self.config.t_min_norm, self.config.t_max_norm, 5000)
|
|
30
|
+
t_pred_norm = tf.convert_to_tensor(t_pred_norm_vals.reshape(-1, 1), dtype=tf.float32)
|
|
31
|
+
|
|
32
|
+
# Hamiltonians for prediction
|
|
33
|
+
HP_pred_list = []
|
|
34
|
+
for s in range(len(t_pred_norm_vals)):
|
|
35
|
+
t_s_norm = t_pred_norm_vals[s]
|
|
36
|
+
HP_s = perturbation_manager.get_perturbation(t_s_norm, perturbation_type)
|
|
37
|
+
HP_pred_list.append(HP_s)
|
|
38
|
+
|
|
39
|
+
HP_pred = tf.convert_to_tensor(np.stack(HP_pred_list), dtype=tf.complex64)
|
|
40
|
+
|
|
41
|
+
# Network prediction
|
|
42
|
+
psi_pred = model(t_pred_norm)
|
|
43
|
+
u_pred = psi_pred[:, :self.config.n]
|
|
44
|
+
v_pred = psi_pred[:, self.config.n:]
|
|
45
|
+
psi_p = tf.complex(u_pred, v_pred)
|
|
46
|
+
|
|
47
|
+
# Add stationary state
|
|
48
|
+
phase = tf.exp(-1j * tf.cast(E_norm, tf.complex64) *
|
|
49
|
+
tf.cast(t_pred_norm_vals, tf.complex64))
|
|
50
|
+
phase = tf.expand_dims(phase, axis=-1)
|
|
51
|
+
|
|
52
|
+
psi_st_broadcast = tf.transpose(psi_st_tensor)
|
|
53
|
+
psi_total = psi_p + phase * psi_st_broadcast
|
|
54
|
+
|
|
55
|
+
# Total Hamiltonian
|
|
56
|
+
H_0_tensor = tf.convert_to_tensor(self.system.H_0, dtype=tf.complex64)
|
|
57
|
+
SELF_tensor = tf.convert_to_tensor(self.system.SELF, dtype=tf.complex64)
|
|
58
|
+
|
|
59
|
+
H_0_pred = tf.repeat(tf.expand_dims(H_0_tensor, axis=0), len(t_pred_norm_vals), axis=0)
|
|
60
|
+
SELF_pred = tf.repeat(tf.expand_dims(SELF_tensor, axis=0), len(t_pred_norm_vals), axis=0)
|
|
61
|
+
HT_pred = HP_pred + H_0_pred + SELF_pred
|
|
62
|
+
|
|
63
|
+
return t_pred_norm_vals, psi_total, HT_pred
|
|
64
|
+
|
|
65
|
+
def _compute_mode_current(self, psi_total, HT_pred, fermi_factor):
|
|
66
|
+
"""Calculates current for a specific mode"""
|
|
67
|
+
psi1_conj = tf.math.conj(psi_total[:, 1])
|
|
68
|
+
H12 = HT_pred[:, 1, 2]
|
|
69
|
+
psi2 = psi_total[:, 2]
|
|
70
|
+
|
|
71
|
+
return fermi_factor * psi1_conj * H12 * psi2
|