Exemplo de simulação HPHT#
Arquivo de configuração
[4]:
from modules.simulation.config.model import SimulationConfigModel
import pathlib
cfg_path = pathlib.Path("./fixtures/HPHT_config.yaml")
cfg = SimulationConfigModel.from_file(cfg_path)
cfg
[4]:
SimulationConfigModel(sim_name='HPHT_simulation', domain=DomainModel(height=0.21, spatial_divisions=220), 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=100.0, total_time=31536000.0), export=FrequencyConfig(frequency=1000), report=FrequencyConfig(frequency=10000), HPHT=HPHTModel(temperature=HPHTTemperatureModel(model='exponential', reference_temperature=25.0, viscosity_factor=0.01, temperature_regimes=[HPHTTemperatureRegime(initial_step=0.0, top_temperature=25.0, gradient=50.0), HPHTTemperatureRegime(initial_step=1000.0, top_temperature=50.0, gradient=100.0)]), pressure=HPHTPressureModel(model='exponential', reference_pressure=0.0, viscosity_factor=-0.0002)), equation_parameters=EquationParameters(delta=0.58, k0=27.99, beta=0.19, ref_conc=0.14, p_ref=18.62))
Instantiate Results Handler
[5]:
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
[6]:
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-05-06 18:47:05,294] [INFO] - simulation - Starting simulation... (sim_handler.py:67)
[2024-05-06 18:47:05,295] [INFO] - simulation - Current time 0 (sim_handler.py:68)
[2024-05-06 18:47:12,701] [INFO] - simulation - Simulation report: Current time 1000000.0 (sim_handler.py:58)
[2024-05-06 18:47:20,390] [INFO] - simulation - Simulation report: Current time 2000000.0 (sim_handler.py:58)
[2024-05-06 18:47:27,854] [INFO] - simulation - Simulation report: Current time 3000000.0 (sim_handler.py:58)
[2024-05-06 18:47:35,368] [INFO] - simulation - Simulation report: Current time 4000000.0 (sim_handler.py:58)
[2024-05-06 18:47:42,479] [INFO] - simulation - Simulation report: Current time 5000000.0 (sim_handler.py:58)
[2024-05-06 18:47:49,743] [INFO] - simulation - Simulation report: Current time 6000000.0 (sim_handler.py:58)
[2024-05-06 18:47:56,797] [INFO] - simulation - Simulation report: Current time 7000000.0 (sim_handler.py:58)
[2024-05-06 18:48:04,369] [INFO] - simulation - Simulation report: Current time 8000000.0 (sim_handler.py:58)
[2024-05-06 18:48:12,203] [INFO] - simulation - Simulation report: Current time 9000000.0 (sim_handler.py:58)
[2024-05-06 18:48:19,692] [INFO] - simulation - Simulation report: Current time 10000000.0 (sim_handler.py:58)
[2024-05-06 18:48:27,014] [INFO] - simulation - Simulation report: Current time 11000000.0 (sim_handler.py:58)
[2024-05-06 18:48:34,203] [INFO] - simulation - Simulation report: Current time 12000000.0 (sim_handler.py:58)
[2024-05-06 18:48:41,191] [INFO] - simulation - Simulation report: Current time 13000000.0 (sim_handler.py:58)
[2024-05-06 18:48:48,496] [INFO] - simulation - Simulation report: Current time 14000000.0 (sim_handler.py:58)
[2024-05-06 18:48:55,268] [INFO] - simulation - Simulation report: Current time 15000000.0 (sim_handler.py:58)
[2024-05-06 18:49:02,142] [INFO] - simulation - Simulation report: Current time 16000000.0 (sim_handler.py:58)
[2024-05-06 18:49:08,998] [INFO] - simulation - Simulation report: Current time 17000000.0 (sim_handler.py:58)
[2024-05-06 18:49:16,110] [INFO] - simulation - Simulation report: Current time 18000000.0 (sim_handler.py:58)
[2024-05-06 18:49:23,206] [INFO] - simulation - Simulation report: Current time 19000000.0 (sim_handler.py:58)
[2024-05-06 18:49:30,642] [INFO] - simulation - Simulation report: Current time 20000000.0 (sim_handler.py:58)
[2024-05-06 18:49:37,443] [INFO] - simulation - Simulation report: Current time 21000000.0 (sim_handler.py:58)
[2024-05-06 18:49:44,115] [INFO] - simulation - Simulation report: Current time 22000000.0 (sim_handler.py:58)
[2024-05-06 18:49:51,157] [INFO] - simulation - Simulation report: Current time 23000000.0 (sim_handler.py:58)
[2024-05-06 18:49:57,969] [INFO] - simulation - Simulation report: Current time 24000000.0 (sim_handler.py:58)
[2024-05-06 18:50:05,138] [INFO] - simulation - Simulation report: Current time 25000000.0 (sim_handler.py:58)
[2024-05-06 18:50:12,595] [INFO] - simulation - Simulation report: Current time 26000000.0 (sim_handler.py:58)
[2024-05-06 18:50:19,601] [INFO] - simulation - Simulation report: Current time 27000000.0 (sim_handler.py:58)
[2024-05-06 18:50:26,951] [INFO] - simulation - Simulation report: Current time 28000000.0 (sim_handler.py:58)
[2024-05-06 18:50:34,017] [INFO] - simulation - Simulation report: Current time 29000000.0 (sim_handler.py:58)
[2024-05-06 18:50:41,450] [INFO] - simulation - Simulation report: Current time 30000000.0 (sim_handler.py:58)
[2024-05-06 18:50:48,409] [INFO] - simulation - Simulation report: Current time 31000000.0 (sim_handler.py:58)
Tempo total de simulação:226.86702871322632 [s]
Export data
[7]:
sim_handler.export_sim_data()
sim_handler.export_domain_polydata(frequency_reduction=100)
Read simulation data#
[8]:
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
[9]:
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
[10]:
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
[11]:
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()