Exemplo de simulação#
Arquivo de configuração
[1]:
from modules.simulation.config.model import SimulationConfigModel
import pathlib
cfg_path = pathlib.Path("./fixtures/general_config.yaml")
cfg = SimulationConfigModel.from_file(cfg_path)
cfg
[1]:
SimulationConfigModel(sim_name='simulation_test_reduced_timestep', domain=DomainModel(height=0.21, spatial_divisions=220, annular_domain=None), suspension=SuspensionModel(initial_conc=0.1391, max_conc=0.19), solid_phase=SolidPhaseModel(particle_diam=4.08e-05, particle_esphericity=0.8, density=2709.0), fluid_phase=FluidPhaseModel(density=891.4, power_law=PowerLawFluidModel(M=30.13, n=0.21)), simulation_parameters=SimulationParameters(timestep=1000.0, total_time=31536000.0), export=FrequencyConfig(frequency=100), report=FrequencyConfig(frequency=1000), HPHT=None, equation_parameters=EquationParameters(delta=0.622641, k0=47.601104, beta=0.04983, ref_conc=0.14, p_ref=63.640954))
Instantiate Results Handler
[2]:
from modules.simulation.sim_handler import SimulationHandler
output_path = pathlib.Path(f"./out/{cfg.sim_name}")
sim_handler = SimulationHandler(cfg=cfg, output_path=output_path)
Run simulation
[3]:
import time
start = time.time()
sim_handler.start_simulation()
end = time.time()
print("\nTempo total de simulação: " + str(end - start) + " [s]")
print("Status da simulação: " + sim_handler.sim_status)
[2024-08-13 13:23:11,021] [INFO] - simulation - Starting simulation... (sim_handler.py:87)
[2024-08-13 13:23:11,022] [INFO] - simulation - Current time 0 (sim_handler.py:88)
[2024-08-13 13:23:12,041] [INFO] - simulation - Simulation report: Current time 1000000.0 (sim_handler.py:73)
[2024-08-13 13:23:12,042] [INFO] - simulation - Mass conservation report: Deviation 1.50E-05% (sim_handler.py:61)
[2024-08-13 13:23:12,813] [INFO] - simulation - Simulation report: Current time 2000000.0 (sim_handler.py:73)
[2024-08-13 13:23:12,814] [INFO] - simulation - Mass conservation report: Deviation 1.50E-05% (sim_handler.py:61)
[2024-08-13 13:23:13,500] [INFO] - simulation - Simulation report: Current time 3000000.0 (sim_handler.py:73)
[2024-08-13 13:23:13,501] [INFO] - simulation - Mass conservation report: Deviation 1.50E-05% (sim_handler.py:61)
[2024-08-13 13:23:14,195] [INFO] - simulation - Simulation report: Current time 4000000.0 (sim_handler.py:73)
[2024-08-13 13:23:14,196] [INFO] - simulation - Mass conservation report: Deviation 1.50E-05% (sim_handler.py:61)
[2024-08-13 13:23:14,852] [INFO] - simulation - Simulation report: Current time 5000000.0 (sim_handler.py:73)
[2024-08-13 13:23:14,853] [INFO] - simulation - Mass conservation report: Deviation 1.50E-05% (sim_handler.py:61)
[2024-08-13 13:23:15,516] [INFO] - simulation - Simulation report: Current time 6000000.0 (sim_handler.py:73)
[2024-08-13 13:23:15,517] [INFO] - simulation - Mass conservation report: Deviation 1.50E-05% (sim_handler.py:61)
[2024-08-13 13:23:16,187] [INFO] - simulation - Simulation report: Current time 7000000.0 (sim_handler.py:73)
[2024-08-13 13:23:16,188] [INFO] - simulation - Mass conservation report: Deviation 1.50E-05% (sim_handler.py:61)
[2024-08-13 13:23:16,887] [INFO] - simulation - Simulation report: Current time 8000000.0 (sim_handler.py:73)
[2024-08-13 13:23:16,888] [INFO] - simulation - Mass conservation report: Deviation 1.50E-05% (sim_handler.py:61)
[2024-08-13 13:23:17,575] [INFO] - simulation - Simulation report: Current time 9000000.0 (sim_handler.py:73)
[2024-08-13 13:23:17,576] [INFO] - simulation - Mass conservation report: Deviation 1.50E-05% (sim_handler.py:61)
[2024-08-13 13:23:18,253] [INFO] - simulation - Simulation report: Current time 10000000.0 (sim_handler.py:73)
[2024-08-13 13:23:18,254] [INFO] - simulation - Mass conservation report: Deviation 1.50E-05% (sim_handler.py:61)
[2024-08-13 13:23:18,962] [INFO] - simulation - Simulation report: Current time 11000000.0 (sim_handler.py:73)
[2024-08-13 13:23:18,963] [INFO] - simulation - Mass conservation report: Deviation 1.50E-05% (sim_handler.py:61)
[2024-08-13 13:23:19,659] [INFO] - simulation - Simulation report: Current time 12000000.0 (sim_handler.py:73)
[2024-08-13 13:23:19,660] [INFO] - simulation - Mass conservation report: Deviation 1.50E-05% (sim_handler.py:61)
[2024-08-13 13:23:20,320] [INFO] - simulation - Simulation report: Current time 13000000.0 (sim_handler.py:73)
[2024-08-13 13:23:20,321] [INFO] - simulation - Mass conservation report: Deviation 1.50E-05% (sim_handler.py:61)
[2024-08-13 13:23:20,997] [INFO] - simulation - Simulation report: Current time 14000000.0 (sim_handler.py:73)
[2024-08-13 13:23:20,998] [INFO] - simulation - Mass conservation report: Deviation 1.50E-05% (sim_handler.py:61)
[2024-08-13 13:23:21,668] [INFO] - simulation - Simulation report: Current time 15000000.0 (sim_handler.py:73)
[2024-08-13 13:23:21,669] [INFO] - simulation - Mass conservation report: Deviation 1.50E-05% (sim_handler.py:61)
[2024-08-13 13:23:22,348] [INFO] - simulation - Simulation report: Current time 16000000.0 (sim_handler.py:73)
[2024-08-13 13:23:22,349] [INFO] - simulation - Mass conservation report: Deviation 1.50E-05% (sim_handler.py:61)
[2024-08-13 13:23:23,008] [INFO] - simulation - Simulation report: Current time 17000000.0 (sim_handler.py:73)
[2024-08-13 13:23:23,009] [INFO] - simulation - Mass conservation report: Deviation 1.50E-05% (sim_handler.py:61)
[2024-08-13 13:23:23,671] [INFO] - simulation - Simulation report: Current time 18000000.0 (sim_handler.py:73)
[2024-08-13 13:23:23,672] [INFO] - simulation - Mass conservation report: Deviation 1.50E-05% (sim_handler.py:61)
[2024-08-13 13:23:24,326] [INFO] - simulation - Simulation report: Current time 19000000.0 (sim_handler.py:73)
[2024-08-13 13:23:24,327] [INFO] - simulation - Mass conservation report: Deviation 1.50E-05% (sim_handler.py:61)
[2024-08-13 13:23:25,019] [INFO] - simulation - Simulation report: Current time 20000000.0 (sim_handler.py:73)
[2024-08-13 13:23:25,020] [INFO] - simulation - Mass conservation report: Deviation 1.50E-05% (sim_handler.py:61)
[2024-08-13 13:23:25,680] [INFO] - simulation - Simulation report: Current time 21000000.0 (sim_handler.py:73)
[2024-08-13 13:23:25,681] [INFO] - simulation - Mass conservation report: Deviation 1.50E-05% (sim_handler.py:61)
[2024-08-13 13:23:26,354] [INFO] - simulation - Simulation report: Current time 22000000.0 (sim_handler.py:73)
[2024-08-13 13:23:26,355] [INFO] - simulation - Mass conservation report: Deviation 1.50E-05% (sim_handler.py:61)
[2024-08-13 13:23:27,018] [INFO] - simulation - Simulation report: Current time 23000000.0 (sim_handler.py:73)
[2024-08-13 13:23:27,019] [INFO] - simulation - Mass conservation report: Deviation 1.50E-05% (sim_handler.py:61)
[2024-08-13 13:23:27,703] [INFO] - simulation - Simulation report: Current time 24000000.0 (sim_handler.py:73)
[2024-08-13 13:23:27,704] [INFO] - simulation - Mass conservation report: Deviation 1.50E-05% (sim_handler.py:61)
[2024-08-13 13:23:28,346] [INFO] - simulation - Simulation report: Current time 25000000.0 (sim_handler.py:73)
[2024-08-13 13:23:28,347] [INFO] - simulation - Mass conservation report: Deviation 1.50E-05% (sim_handler.py:61)
[2024-08-13 13:23:29,029] [INFO] - simulation - Simulation report: Current time 26000000.0 (sim_handler.py:73)
[2024-08-13 13:23:29,029] [INFO] - simulation - Mass conservation report: Deviation 1.50E-05% (sim_handler.py:61)
[2024-08-13 13:23:29,672] [INFO] - simulation - Simulation report: Current time 27000000.0 (sim_handler.py:73)
[2024-08-13 13:23:29,673] [INFO] - simulation - Mass conservation report: Deviation 1.50E-05% (sim_handler.py:61)
[2024-08-13 13:23:30,316] [INFO] - simulation - Simulation report: Current time 28000000.0 (sim_handler.py:73)
[2024-08-13 13:23:30,317] [INFO] - simulation - Mass conservation report: Deviation 1.50E-05% (sim_handler.py:61)
[2024-08-13 13:23:30,966] [INFO] - simulation - Simulation report: Current time 29000000.0 (sim_handler.py:73)
[2024-08-13 13:23:30,966] [INFO] - simulation - Mass conservation report: Deviation 1.50E-05% (sim_handler.py:61)
[2024-08-13 13:23:31,653] [INFO] - simulation - Simulation report: Current time 30000000.0 (sim_handler.py:73)
[2024-08-13 13:23:31,654] [INFO] - simulation - Mass conservation report: Deviation 1.50E-05% (sim_handler.py:61)
[2024-08-13 13:23:32,317] [INFO] - simulation - Simulation report: Current time 31000000.0 (sim_handler.py:73)
[2024-08-13 13:23:32,318] [INFO] - simulation - Mass conservation report: Deviation 1.50E-05% (sim_handler.py:61)
Tempo total de simulação: 21.667173862457275 [s]
Status da simulação: finished
Export data
[4]:
sim_handler.export_sim_data()
sim_handler.export_domain_polydata(frequency_reduction=100)
Read simulation data#
[5]:
from modules.analysis.results_handler import ResultsHandler
import pathlib
output_path = pathlib.Path(f"./out/{cfg.sim_name}")
results_handler = ResultsHandler(simulation_path=output_path)
Plot concentration
[6]:
import matplotlib.pyplot as plt
target_positions = [0.005, 0.02, 0.03, 0.04, 0.06, 0.08, 0.12]
time, concentration_profiles = results_handler.filter_for_positions(variable_name="Concentration", position_values=target_positions)
for position_lbl, concentration_arr in concentration_profiles.items():
plt.plot(time / (3600 * 24), concentration_arr, label=position_lbl)
plt.xlabel('Tempo [Dias]')
plt.xlim(0,400)
plt.ylabel('Concentração')
plt.ylim(0.135,0.2)
plt.grid()
plt.legend()
plt.show()
Plot permeability
[7]:
import matplotlib.pyplot as plt
target_positions = [0.005, 0.02, 0.03, 0.04, 0.06, 0.08, 0.12]
time, perm_profiles = results_handler.filter_for_positions(variable_name="Permeability", position_values=target_positions)
for position_lbl, perm_arr in perm_profiles.items():
plt.plot(time / (3600 * 24), perm_arr, label=position_lbl)
plt.xlabel('Tempo [Dias]')
plt.xlim(0.400)
plt.ylabel('Permeabilidade [m²]')
plt.ylim(0,5e-8)
plt.grid()
plt.legend()
plt.show()
Plot pressure gradient
[8]:
import matplotlib.pyplot as plt
target_positions = [0.005, 0.02, 0.03, 0.04, 0.06, 0.08, 0.12]
time, pressure_grad_profiles = results_handler.filter_for_positions(variable_name="Pressure_Gradient", position_values=target_positions)
for position_lbl, pressure_grad in pressure_grad_profiles.items():
plt.plot(time / (3600 * 24), pressure_grad, label=position_lbl)
plt.xlabel('Tempo [Dias]')
plt.xlim(0.400)
plt.ylabel('Gradiente de Pressão')
plt.grid()
plt.legend()
plt.show()