Buckets:
| from django.db import models | |
| import json | |
| class PoissonSimulation(models.Model): | |
| """Modèle pour stocker les simulations de l'équation de Poisson""" | |
| STATUS_CHOICES = [ | |
| ('pending', 'En attente'), | |
| ('running', 'En cours'), | |
| ('completed', 'Terminée'), | |
| ('failed', 'Échouée'), | |
| ] | |
| SOURCE_TYPE_CHOICES = [ | |
| ('gaussian', 'Gaussienne'), | |
| ('constant', 'Constante'), | |
| ('sinusoidal', 'Sinusoïdale'), | |
| ('custom', 'Personnalisée'), | |
| ] | |
| BOUNDARY_TYPE_CHOICES = [ | |
| ('dirichlet', 'Dirichlet (valeur fixée)'), | |
| ('neumann', 'Neumann (flux)'), | |
| ('mixed', 'Mixte'), | |
| ] | |
| name = models.CharField(max_length=255, verbose_name="Nom de la simulation") | |
| created_at = models.DateTimeField(auto_now_add=True) | |
| updated_at = models.DateTimeField(auto_now=True) | |
| status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='pending') | |
| # Paramètres du domaine | |
| domain_x_min = models.FloatField(default=0.0) | |
| domain_x_max = models.FloatField(default=2.0) | |
| domain_y_min = models.FloatField(default=0.0) | |
| domain_y_max = models.FloatField(default=1.0) | |
| # Paramètres du maillage | |
| mesh_nx = models.IntegerField(default=64, verbose_name="Nombre d'éléments en x") | |
| mesh_ny = models.IntegerField(default=32, verbose_name="Nombre d'éléments en y") | |
| # Type de source | |
| source_type = models.CharField(max_length=20, choices=SOURCE_TYPE_CHOICES, default='gaussian') | |
| source_amplitude = models.FloatField(default=10.0) | |
| source_center_x = models.FloatField(default=0.5) | |
| source_center_y = models.FloatField(default=0.5) | |
| source_width = models.FloatField(default=0.02, verbose_name="Largeur (variance)") | |
| source_frequency = models.FloatField(default=1.0, verbose_name="Fréquence (pour sinusoïdale)") | |
| # Conditions aux limites - Dirichlet | |
| dirichlet_enabled = models.BooleanField(default=True) | |
| dirichlet_boundaries = models.CharField(max_length=50, default='left,right', | |
| help_text="Frontières: left, right, top, bottom") | |
| dirichlet_value = models.FloatField(default=0.0) | |
| # Conditions aux limites - Neumann | |
| neumann_enabled = models.BooleanField(default=True) | |
| neumann_boundaries = models.CharField(max_length=50, default='top,bottom') | |
| neumann_type = models.CharField(max_length=20, default='sinusoidal', | |
| choices=[('constant', 'Constante'), | |
| ('sinusoidal', 'Sinusoïdale'), | |
| ('linear', 'Linéaire')]) | |
| neumann_amplitude = models.FloatField(default=1.0) | |
| neumann_frequency = models.FloatField(default=5.0) | |
| # Résultats | |
| result_data = models.JSONField(null=True, blank=True) | |
| mesh_data = models.JSONField(null=True, blank=True) | |
| animation_frames = models.JSONField(null=True, blank=True) | |
| error_message = models.TextField(null=True, blank=True) | |
| # Statistiques de la solution | |
| solution_min = models.FloatField(null=True, blank=True) | |
| solution_max = models.FloatField(null=True, blank=True) | |
| computation_time = models.FloatField(null=True, blank=True) | |
| class Meta: | |
| ordering = ['-created_at'] | |
| verbose_name = "Simulation Poisson" | |
| verbose_name_plural = "Simulations Poisson" | |
| def __str__(self): | |
| return f"{self.name} ({self.status})" | |
| def get_parameters_dict(self): | |
| """Retourne tous les paramètres sous forme de dictionnaire""" | |
| return { | |
| 'domain': { | |
| 'x_min': self.domain_x_min, | |
| 'x_max': self.domain_x_max, | |
| 'y_min': self.domain_y_min, | |
| 'y_max': self.domain_y_max, | |
| }, | |
| 'mesh': { | |
| 'nx': self.mesh_nx, | |
| 'ny': self.mesh_ny, | |
| }, | |
| 'source': { | |
| 'type': self.source_type, | |
| 'amplitude': self.source_amplitude, | |
| 'center_x': self.source_center_x, | |
| 'center_y': self.source_center_y, | |
| 'width': self.source_width, | |
| 'frequency': self.source_frequency, | |
| }, | |
| 'dirichlet': { | |
| 'enabled': self.dirichlet_enabled, | |
| 'boundaries': self.dirichlet_boundaries.split(',') if self.dirichlet_boundaries else [], | |
| 'value': self.dirichlet_value, | |
| }, | |
| 'neumann': { | |
| 'enabled': self.neumann_enabled, | |
| 'boundaries': self.neumann_boundaries.split(',') if self.neumann_boundaries else [], | |
| 'type': self.neumann_type, | |
| 'amplitude': self.neumann_amplitude, | |
| 'frequency': self.neumann_frequency, | |
| }, | |
| } | |
Xet Storage Details
- Size:
- 4.88 kB
- Xet hash:
- 2abe8e20ecfe78278c0ceb1b95dacdfd4285685dc540906bb01086cf6d23c6ca
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.