download
raw
11.8 kB
{
"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.