Exemplo de simulação HPHT (efeito da temperatura)#

Arquivo de configuração

[31]:
from modules.simulation.config.model import SimulationConfigModel
import pathlib

cfg_path = pathlib.Path("./fixtures/HPHT_config_temperature.yaml")
cfg = SimulationConfigModel.from_file(cfg_path)

cfg
[31]:
SimulationConfigModel(sim_name='HPHT_simulation_temperature', 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=10000.0, top_temperature=50.0, gradient=100.0)]), pressure=None), equation_parameters=EquationParameters(delta=0.58, k0=27.99, beta=0.19, ref_conc=0.14, p_ref=18.62))

Instantiate Results Handler

[32]:
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

[33]:
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:44:50,173] [INFO] - simulation - Starting simulation... (sim_handler.py:67)
[2024-05-06 18:44:50,174] [INFO] - simulation - Current time 0 (sim_handler.py:68)
[2024-05-06 18:44:57,087] [INFO] - simulation - Simulation report: Current time 1000000.0 (sim_handler.py:58)
[2024-05-06 18:45:03,955] [INFO] - simulation - Simulation report: Current time 2000000.0 (sim_handler.py:58)
[2024-05-06 18:45:11,055] [INFO] - simulation - Simulation report: Current time 3000000.0 (sim_handler.py:58)
[2024-05-06 18:45:17,954] [INFO] - simulation - Simulation report: Current time 4000000.0 (sim_handler.py:58)
[2024-05-06 18:45:24,833] [INFO] - simulation - Simulation report: Current time 5000000.0 (sim_handler.py:58)
[2024-05-06 18:45:31,688] [INFO] - simulation - Simulation report: Current time 6000000.0 (sim_handler.py:58)
[2024-05-06 18:45:38,600] [INFO] - simulation - Simulation report: Current time 7000000.0 (sim_handler.py:58)
[2024-05-06 18:45:45,477] [INFO] - simulation - Simulation report: Current time 8000000.0 (sim_handler.py:58)
[2024-05-06 18:45:52,354] [INFO] - simulation - Simulation report: Current time 9000000.0 (sim_handler.py:58)
[2024-05-06 18:45:59,316] [INFO] - simulation - Simulation report: Current time 10000000.0 (sim_handler.py:58)
[2024-05-06 18:46:06,219] [INFO] - simulation - Simulation report: Current time 11000000.0 (sim_handler.py:58)
[2024-05-06 18:46:13,073] [INFO] - simulation - Simulation report: Current time 12000000.0 (sim_handler.py:58)
[2024-05-06 18:46:19,994] [INFO] - simulation - Simulation report: Current time 13000000.0 (sim_handler.py:58)
[2024-05-06 18:46:26,891] [INFO] - simulation - Simulation report: Current time 14000000.0 (sim_handler.py:58)
[2024-05-06 18:46:33,765] [INFO] - simulation - Simulation report: Current time 15000000.0 (sim_handler.py:58)
[2024-05-06 18:46:40,706] [INFO] - simulation - Simulation report: Current time 16000000.0 (sim_handler.py:58)
[2024-05-06 18:46:47,585] [INFO] - simulation - Simulation report: Current time 17000000.0 (sim_handler.py:58)
[2024-05-06 18:46:54,526] [INFO] - simulation - Simulation report: Current time 18000000.0 (sim_handler.py:58)
[2024-05-06 18:47:01,550] [INFO] - simulation - Simulation report: Current time 19000000.0 (sim_handler.py:58)
[2024-05-06 18:47:09,002] [INFO] - simulation - Simulation report: Current time 20000000.0 (sim_handler.py:58)
[2024-05-06 18:47:16,457] [INFO] - simulation - Simulation report: Current time 21000000.0 (sim_handler.py:58)
[2024-05-06 18:47:24,345] [INFO] - simulation - Simulation report: Current time 22000000.0 (sim_handler.py:58)
[2024-05-06 18:47:31,832] [INFO] - simulation - Simulation report: Current time 23000000.0 (sim_handler.py:58)
[2024-05-06 18:47:39,342] [INFO] - simulation - Simulation report: Current time 24000000.0 (sim_handler.py:58)
[2024-05-06 18:47:46,682] [INFO] - simulation - Simulation report: Current time 25000000.0 (sim_handler.py:58)
[2024-05-06 18:47:53,888] [INFO] - simulation - Simulation report: Current time 26000000.0 (sim_handler.py:58)
[2024-05-06 18:48:01,157] [INFO] - simulation - Simulation report: Current time 27000000.0 (sim_handler.py:58)
[2024-05-06 18:48:09,209] [INFO] - simulation - Simulation report: Current time 28000000.0 (sim_handler.py:58)
[2024-05-06 18:48:17,017] [INFO] - simulation - Simulation report: Current time 29000000.0 (sim_handler.py:58)
[2024-05-06 18:48:24,465] [INFO] - simulation - Simulation report: Current time 30000000.0 (sim_handler.py:58)
[2024-05-06 18:48:31,944] [INFO] - simulation - Simulation report: Current time 31000000.0 (sim_handler.py:58)

Tempo total de simulação:225.6396975517273 [s]

Export data

[34]:
sim_handler.export_sim_data()
sim_handler.export_domain_polydata(frequency_reduction=1000)

Read simulation data#

[35]:
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

[36]:
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()
../../_images/software_simulation_HPHT_simulation_temperature_12_0.png

Plot permeability

[37]:
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()
../../_images/software_simulation_HPHT_simulation_temperature_14_0.png

Plot pressure gradient

[38]:
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()
../../_images/software_simulation_HPHT_simulation_temperature_16_0.png