1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
import os
from contextlib import contextmanager
@contextmanager
def pushd(path):
cwd = os.getcwd()
if not os.path.isdir(path):
os.makedirs(path)
os.chdir(path)
yield
os.chdir(cwd)
ENABLE_ASYNC_ECL_OUTPUT_FLAG = '--enable-async-ecl-output=false'
def create_black_oil_simulator(*args, **kwargs):
"""Create BlackOilSimulator with test-safe default arguments.
Automatically disables async ECL output to prevent race conditions
with pushd context manager in tests.
"""
from opm.simulators import BlackOilSimulator
flag_to_add = ENABLE_ASYNC_ECL_OUTPUT_FLAG
# Handle different constructor patterns
if 'args' in kwargs:
# Add our flag to existing args
if flag_to_add not in kwargs['args']:
kwargs['args'].append(flag_to_add)
elif len(args) >= 4:
# Constructor with deck, state, schedule, summary_config
# Add args parameter
if len(args) == 4:
args = args + ([flag_to_add],)
elif len(args) == 5:
# Args already provided, add our flag
args_list = list(args[4]) if args[4] else []
if flag_to_add not in args_list:
args_list.append(flag_to_add)
args = args[:4] + (args_list,)
else:
# Constructor with filename - add args parameter
kwargs['args'] = kwargs.get('args', [])
if flag_to_add not in kwargs['args']:
kwargs['args'].append(flag_to_add)
return BlackOilSimulator(*args, **kwargs)
def create_gas_water_simulator(*args, **kwargs):
"""Create GasWaterSimulator with test-safe default arguments.
Automatically disables async ECL output to prevent race conditions
with pushd context manager in tests.
"""
from opm.simulators import GasWaterSimulator
flag_to_add = ENABLE_ASYNC_ECL_OUTPUT_FLAG
# Add our flag to args
kwargs['args'] = kwargs.get('args', [])
if flag_to_add not in kwargs['args']:
kwargs['args'].append(flag_to_add)
return GasWaterSimulator(*args, **kwargs)
def create_onephase_simulator(*args, **kwargs):
"""Create OnePhaseSimulator with test-safe default arguments.
Automatically disables async ECL output to prevent race conditions
with pushd context manager in tests.
"""
from opm.simulators import OnePhaseSimulator
flag_to_add = ENABLE_ASYNC_ECL_OUTPUT_FLAG
# Add our flag to args
kwargs['args'] = kwargs.get('args', [])
if flag_to_add not in kwargs['args']:
kwargs['args'].append(flag_to_add)
return OnePhaseSimulator(*args, **kwargs)
|