Buckets:
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": 11, | |
| "id": "b3a161b7", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "*************************************\n", | |
| "Program fluidsim\n", | |
| "sim: <class 'fluidsim.solvers.ns2d.solver.Simul'>\n", | |
| "sim.output: <class 'fluidsim.solvers.ns2d.output.Output'>\n", | |
| "sim.oper: <class 'fluidsim.operators.operators2d.OperatorsPseudoSpectral2D'>\n", | |
| "sim.state: <class 'fluidsim.solvers.ns2d.state.StateNS2D'>\n", | |
| "sim.time_stepping: <class 'fluidsim.base.time_stepping.pseudo_spect.TimeSteppingPseudoSpectral'>\n", | |
| "sim.init_fields: <class 'fluidsim.solvers.ns2d.init_fields.InitFieldsNS2D'>\n", | |
| "\n", | |
| "solver NS2D, RK4 and sequential,\n", | |
| "type fft: fluidfft.fft2d.with_pyfftw\n", | |
| "nx = 128 ; ny = 128\n", | |
| "lx = 2pi ; ly = 2pi\n", | |
| "path_run =\n", | |
| "/root/Sim_data/NS2D_128x128_S2pix2pi_2026-01-08_21-59-30\n", | |
| "init_fields.type: dipole\n", | |
| "\n", | |
| "Initialization outputs:\n", | |
| "sim.output.increments: <class 'fluidsim.base.output.increments.Increments'>\n", | |
| "sim.output.phys_fields: <class 'fluidsim.base.output.phys_fields2d.PhysFieldsBase2D'>\n", | |
| "sim.output.spatial_means: <class 'fluidsim.solvers.ns2d.output.spatial_means.SpatialMeansNS2D'>\n", | |
| "sim.output.spatiotemporal_spectra: <class 'fluidsim.solvers.ns2d.output.spatiotemporal_spectra.SpatioTemporalSpectraNS2D'>\n", | |
| "sim.output.spect_energy_budg: <class 'fluidsim.solvers.ns2d.output.spect_energy_budget.SpectralEnergyBudgetNS2D'>\n", | |
| "sim.output.spectra: <class 'fluidsim.solvers.ns2d.output.spectra.SpectraNS2D'>\n", | |
| "sim.output.spectra_multidim: <class 'fluidsim.solvers.ns2d.output.spectra_multidim.SpectraMultiDimNS2D'>\n", | |
| "sim.output.temporal_spectra: <class 'fluidsim.base.output.temporal_spectra.TemporalSpectra2D'>\n", | |
| "\n", | |
| "Memory usage at the end of init. (equiv. seq.): 255.63671875 Mo\n", | |
| "Size of state_spect (equiv. seq.): 0.13312 Mo\n", | |
| "*************************************\n", | |
| "Beginning of the computation\n", | |
| "save state_phys in file state_phys_t0000.000.nc\n", | |
| " compute until t = 10\n", | |
| "it = 0 ; t = 0 ; deltat = 0.031996\n", | |
| " energy = 9.578e-02 ; Delta energy = +0.000e+00\n", | |
| "\n", | |
| "MEMORY_USAGE: 255.83984375 Mo\n", | |
| "save state_phys in file state_phys_t0000.512.nc\n", | |
| "save state_phys in file state_phys_t0001.025.nc\n", | |
| "save state_phys in file state_phys_t0001.519.nc\n", | |
| "save state_phys in file state_phys_t0002.026.nc\n", | |
| "save state_phys in file state_phys_t0002.514.nc\n", | |
| "save state_phys in file state_phys_t0003.017.nc\n", | |
| "save state_phys in file state_phys_t0003.529.nc\n", | |
| "save state_phys in file state_phys_t0004.013.nc\n", | |
| "save state_phys in file state_phys_t0004.506.nc\n", | |
| "save state_phys in file state_phys_t0005.003.nc\n", | |
| "save state_phys in file state_phys_t0005.507.nc\n", | |
| "save state_phys in file state_phys_t0006.011.nc\n", | |
| "save state_phys in file state_phys_t0006.515.nc\n", | |
| "save state_phys in file state_phys_t0007.018.nc\n", | |
| "save state_phys in file state_phys_t0007.522.nc\n", | |
| "save state_phys in file state_phys_t0008.020.nc\n", | |
| "save state_phys in file state_phys_t0008.514.nc\n", | |
| "save state_phys in file state_phys_t0009.004.nc\n", | |
| "save state_phys in file state_phys_t0009.526.nc\n", | |
| "save state_phys in file state_phys_t0010.010.nc\n", | |
| "Computation completed in 0.49902 s\n", | |
| "path_run =\n", | |
| "/root/Sim_data/NS2D_128x128_S2pix2pi_2026-01-08_21-59-30\n", | |
| "✅ Simulation terminée avec succès.\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "import fluidsim as fls\n", | |
| "from fluidsim.solvers.ns2d.solver import Simul\n", | |
| "import numpy as np\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "\n", | |
| "# 1. Créer les paramètres avec la méthode recommandée\n", | |
| "params = Simul.create_default_params()\n", | |
| "\n", | |
| "# 2. Configurer le domaine et la discrétisation\n", | |
| "params.oper.Lx = 2 * np.pi\n", | |
| "params.oper.Ly = 2 * np.pi\n", | |
| "params.oper.nx = 128\n", | |
| "params.oper.ny = 128\n", | |
| "\n", | |
| "# 3. Définir la VISCOSITÉ (méthode correcte)\n", | |
| "# Pour de la viscosité standard (Laplacien), utiliser nu_2\n", | |
| "params.nu_2 = 1e-3 # Viscosité de type Laplacien (∇²)\n", | |
| "\n", | |
| "# Alternative : pour de l'hyperviscosité d'ordre 4 (∇⁴)\n", | |
| "# params.nu_4 = 1e-10 \n", | |
| "\n", | |
| "# 4. Conditions initiales\n", | |
| "params.init_fields.type = 'dipole'\n", | |
| "\n", | |
| "# 5. Configuration du temps\n", | |
| "params.time_stepping.deltat0 = 0.01\n", | |
| "params.time_stepping.t_end = 10.0\n", | |
| "\n", | |
| "# 6. Configuration des sorties\n", | |
| "params.output.periods_print.print_stdout = 100\n", | |
| "params.output.periods_save.phys_fields = 0.5\n", | |
| "\n", | |
| "# 7. Instancier et lancer le simulateur\n", | |
| "sim = Simul(params)\n", | |
| "sim.time_stepping.start()\n", | |
| "\n", | |
| "print(\"✅ Simulation terminée avec succès.\")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "id": "8b15545c", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "*************************************\n", | |
| "Program fluidsim\n", | |
| "sim: <class 'fluidsim.solvers.ns2d.solver.Simul'>\n", | |
| "sim.output: <class 'fluidsim.solvers.ns2d.output.Output'>\n", | |
| "sim.oper: <class 'fluidsim.operators.operators2d.OperatorsPseudoSpectral2D'>\n", | |
| "sim.state: <class 'fluidsim.solvers.ns2d.state.StateNS2D'>\n", | |
| "sim.time_stepping: <class 'fluidsim.base.time_stepping.pseudo_spect.TimeSteppingPseudoSpectral'>\n", | |
| "sim.init_fields: <class 'fluidsim.solvers.ns2d.init_fields.InitFieldsNS2D'>\n", | |
| "\n", | |
| "solver NS2D, RK4 and sequential,\n", | |
| "type fft: fluidfft.fft2d.with_pyfftw\n", | |
| "nx = 4 ; ny = 4\n", | |
| "lx = 2pi ; ly = 2pi\n", | |
| "path_run =\n", | |
| "/root/Sim_data/NS2D_128x128_S2pix2pi_2026-01-08_21-59-30\n", | |
| "init_fields.type: constant\n", | |
| "\n", | |
| "Initialization outputs:\n", | |
| "sim.output.increments: <class 'fluidsim.base.output.increments.Increments'>\n", | |
| "sim.output.phys_fields: <class 'fluidsim.base.output.phys_fields2d.PhysFieldsBase2D'>\n", | |
| "sim.output.spatial_means: <class 'fluidsim.solvers.ns2d.output.spatial_means.SpatialMeansNS2D'>\n", | |
| "sim.output.spatiotemporal_spectra: <class 'fluidsim.solvers.ns2d.output.spatiotemporal_spectra.SpatioTemporalSpectraNS2D'>\n", | |
| "sim.output.spect_energy_budg: <class 'fluidsim.solvers.ns2d.output.spect_energy_budget.SpectralEnergyBudgetNS2D'>\n", | |
| "sim.output.spectra: <class 'fluidsim.solvers.ns2d.output.spectra.SpectraNS2D'>\n", | |
| "sim.output.spectra_multidim: <class 'fluidsim.solvers.ns2d.output.spectra_multidim.SpectraMultiDimNS2D'>\n", | |
| "sim.output.temporal_spectra: <class 'fluidsim.base.output.temporal_spectra.TemporalSpectra2D'>\n", | |
| "\n", | |
| "Memory usage at the end of init. (equiv. seq.): 258.70703125 Mo\n", | |
| "Size of state_spect (equiv. seq.): 0.000192 Mo\n" | |
| ] | |
| }, | |
| { | |
| "ename": "AttributeError", | |
| "evalue": "'PhysFieldsBase2D' object has no attribute 'times'", | |
| "output_type": "error", | |
| "traceback": [ | |
| "\u001b[31m---------------------------------------------------------------------------\u001b[39m", | |
| "\u001b[31mAttributeError\u001b[39m Traceback (most recent call last)", | |
| "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[13]\u001b[39m\u001b[32m, line 11\u001b[39m\n\u001b[32m 8\u001b[39m \u001b[38;5;66;03m# 1. ACCÈS AUX CHAMPS PHYSIQUES (corrigé)\u001b[39;00m\n\u001b[32m 9\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(sim_results.output, \u001b[33m'\u001b[39m\u001b[33mphys_fields\u001b[39m\u001b[33m'\u001b[39m):\n\u001b[32m 10\u001b[39m \u001b[38;5;66;03m# Vérifier les temps disponibles\u001b[39;00m\n\u001b[32m---> \u001b[39m\u001b[32m11\u001b[39m times = \u001b[43msim_results\u001b[49m\u001b[43m.\u001b[49m\u001b[43moutput\u001b[49m\u001b[43m.\u001b[49m\u001b[43mphys_fields\u001b[49m\u001b[43m.\u001b[49m\u001b[43mtimes\u001b[49m\n\u001b[32m 12\u001b[39m \u001b[38;5;28mprint\u001b[39m(\u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mTemps sauvegardés: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mtimes\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m\"\u001b[39m)\n\u001b[32m 14\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(times) > \u001b[32m0\u001b[39m:\n\u001b[32m 15\u001b[39m \u001b[38;5;66;03m# Dernière sauvegarde\u001b[39;00m\n", | |
| "\u001b[31mAttributeError\u001b[39m: 'PhysFieldsBase2D' object has no attribute 'times'" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "from fluidsim import load\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "\n", | |
| "# Charger la simulation complète (meilleure pour l'analyse)\n", | |
| "sim_results = load(sim.output.path_run)\n", | |
| "\n", | |
| "# Vérifier ce qui est disponible\n", | |
| "print(\"Attributs disponibles dans sim_results.output:\")\n", | |
| "for attr in dir(sim_results.output):\n", | |
| " if not attr.startswith('_'):\n", | |
| " print(f\" {attr}\")\n", | |
| "\n", | |
| "# Accéder aux données de plusieurs manières\n", | |
| "if hasattr(sim_results.output, 'phys_fields'):\n", | |
| " # 1. Obtenir les temps disponibles\n", | |
| " times = sim_results.output.phys_fields.times\n", | |
| " print(f\"\\nTemps sauvegardés: {times}\")\n", | |
| " \n", | |
| " # 2. Charger un champ à un temps spécifique\n", | |
| " if len(times) > 0:\n", | |
| " # Dernier temps\n", | |
| " t_index = -1\n", | |
| " ux = sim_results.output.phys_fields.get_var('ux', t_index)\n", | |
| " uy = sim_results.output.phys_fields.get_var('uy', t_index)\n", | |
| " \n", | |
| " # 3. Calculer le module de vitesse\n", | |
| " velocity_magnitude = np.sqrt(ux**2 + uy**2)\n", | |
| " \n", | |
| " # Visualisation\n", | |
| " fig, axes = plt.subplots(1, 3, figsize=(15, 4))\n", | |
| " \n", | |
| " im1 = axes[0].imshow(ux, cmap='RdBu_r', origin='lower')\n", | |
| " plt.colorbar(im1, ax=axes[0], label='u_x')\n", | |
| " axes[0].set_title(f'Vitesse x (t={times[t_index]:.2f})')\n", | |
| " \n", | |
| " im2 = axes[1].imshow(uy, cmap='RdBu_r', origin='lower')\n", | |
| " plt.colorbar(im2, ax=axes[1], label='u_y')\n", | |
| " axes[1].set_title(f'Vitesse y (t={times[t_index]:.2f})')\n", | |
| " \n", | |
| " im3 = axes[2].imshow(velocity_magnitude, cmap='viridis', origin='lower')\n", | |
| " plt.colorbar(im3, ax=axes[2], label='|u|')\n", | |
| " axes[2].set_title(f'Module de vitesse (t={times[t_index]:.2f})')\n", | |
| " \n", | |
| " plt.tight_layout()\n", | |
| " plt.show()" | |
| ] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "dolfinx-env", | |
| "language": "python", | |
| "name": "python3" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 3 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython3", | |
| "version": "3.12.3" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 5 | |
| } | |
Xet Storage Details
- Size:
- 11.8 kB
- Xet hash:
- cf8076c16c101a8e34be8d73c8d78b4e1941ee8e79c7d516993c381a88e97285
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.