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.
@@ -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
+ ![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)
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
+ ![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)
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,7 @@
1
+ # modulation_donneur_accepteur_uniquement/__init__.py
2
+
3
+ """
4
+ A scientific computing package for simulating donor-acceptor modulation.
5
+ """
6
+
7
+ __version__ = "0.0.1"
@@ -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