Skip to content

Commit 22349c0

Browse files
committed
update
1 parent cbe2a25 commit 22349c0

3 files changed

Lines changed: 49 additions & 12 deletions

File tree

src/fmu/tools/rms/localisation/create_obs_with_localisation_attributes.py

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,12 @@ def get_specification(spec: dict) -> tuple:
147147
default_ranges = get_ranges(
148148
default_field_settings, "ranges", "default_field_settings"
149149
)
150+
min_range_hwell = get_value(
151+
default_field_settings, "min_range_hwell", "default_field_settings"
152+
)
153+
mult_hwell_length = get_value(
154+
default_field_settings, "mult_hwell_length", "default_field_settings"
155+
)
150156

151157
# Optional
152158
field_settings = get_dict(local_dict, "field_settings", kw_main, required=False)
@@ -163,6 +169,8 @@ def get_specification(spec: dict) -> tuple:
163169
ert_config_field_param_file,
164170
rms_field_correlation_file,
165171
default_ranges,
172+
min_range_hwell,
173+
mult_hwell_length,
166174
zone_dict,
167175
field_settings,
168176
expand_specification,
@@ -304,6 +312,17 @@ def get_ranges(input_dict: dict, kw: str, parent_kw: str) -> tuple:
304312
return ranges
305313

306314

315+
def get_value(input_dict: dict, kw: str, parent_kw: str):
316+
if kw not in input_dict:
317+
raise KeyError(f"Missing keyword {kw} under keyword {parent_kw}")
318+
value = float(input_dict[kw])
319+
if value <= 0.0:
320+
raise ValueError(
321+
f"Specified value for {kw} under {parent_kw} must be positive"
322+
)
323+
return value
324+
325+
307326
def read_renaming_table(filename: str) -> dict:
308327
with open(filename, "r") as file:
309328
all_lines = file.readlines()
@@ -710,8 +729,8 @@ def write_localisation_obs_attributes(
710729

711730
xpos = float(obs_dict["xpos"])
712731
ypos = float(obs_dict["ypos"])
713-
main_range = float(obs_dict["xrange"])
714-
perp_range = float(obs_dict["yrange"])
732+
main_range = float(obs_dict["main_range"])
733+
perp_range = float(obs_dict["perp_range"])
715734
rotation_angle = float(obs_dict["anisotropy_angle"])
716735
content = ""
717736
content += f"{wellname:<{max_well_name_length}}"
@@ -759,6 +778,8 @@ def create_obs_local(project, config_file):
759778
field_param_config_file,
760779
rms_field_correlation_file,
761780
default_ranges,
781+
min_range_hwell,
782+
mult_hwell_length,
762783
zone_dict,
763784
field_settings_spec_list,
764785
expand_specification,
@@ -789,7 +810,6 @@ def create_obs_local(project, config_file):
789810
defined_zone_names = get_defined_zone_names(defined_field_names, zone_dict)
790811

791812
# Set default settings for all observations initially
792-
min_hlength = 100
793813
output_dict_default = {}
794814
output_dict = {}
795815
for zone_name in defined_zone_names:
@@ -798,16 +818,16 @@ def create_obs_local(project, config_file):
798818
ert_id = obs_dict["ert_id"]
799819
result_id = (zone_name, ert_id)
800820
obs_localisation_dict = copy.deepcopy(obs_dict)
801-
obs_localisation_dict["xrange"] = default_ranges[0]
802-
obs_localisation_dict["yrange"] = default_ranges[1]
821+
obs_localisation_dict["main_range"] = default_ranges[0]
822+
obs_localisation_dict["perp_range"] = default_ranges[1]
803823
obs_localisation_dict["anisotropy_angle"] = default_ranges[2]
804824
obs_localisation_dict["summary_key"] = obs_dict["KEY"]
805-
if obs_localisation_dict["hlength"] > min_hlength:
825+
if obs_localisation_dict["hlength"] > min_range_hwell:
806826
well_path_angle = obs_localisation_dict["well_path_angle"]
807827
obs_localisation_dict["anisotropy_angle"] = well_path_angle
808-
obs_localisation_dict["xrange"] = max(
828+
obs_localisation_dict["main_range"] = max(
809829
obs_localisation_dict["hlength"],
810-
1.5 * obs_localisation_dict["xrange"],
830+
mult_hwell_length * obs_localisation_dict["main_range"],
811831
)
812832

813833
if result_id not in output_dict_default:
@@ -881,8 +901,8 @@ def create_obs_local(project, config_file):
881901
# print(f"Add {result_id}")
882902
obs_localisation_dict = {}
883903
obs_localisation_dict = copy.deepcopy(obs_dict)
884-
obs_localisation_dict["xrange"] = ranges[0]
885-
obs_localisation_dict["yrange"] = ranges[1]
904+
obs_localisation_dict["main_range"] = ranges[0]
905+
obs_localisation_dict["perp_range"] = ranges[1]
886906
obs_localisation_dict["anisotropy_angle"] = ranges[2]
887907
obs_localisation_dict["summary_key"] = obs_dict["KEY"]
888908
output_dict[result_id] = obs_localisation_dict

tests/rms/localisation/input_files/example_config.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ localisation:
2222

2323
default_field_settings:
2424
ranges: [2000.0, 1000.0, 45.0] # (main_range, perpendicular_range, rotation)
25-
25+
min_range_hwell: 150
26+
mult_hwell_length: 1.5
27+
2628
# Select scaling function (how scaling factor decreases from 1 to 0 as function of distance from position of observation)
2729
#tapering: "gauss"
2830

tests/rms/localisation/test_create_obs_with_localisation_attributes.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,8 @@ def test_read_ert_summary_obs(filename, result_dict_list):
319319
"ref_use_wellhead_pos, ref_grid_model_name, ref_blocked_well_set_name,"
320320
"ref_trajector_name, ref_well_renaming_file, ref_ert_obs_file,"
321321
"ref_ert_config_field_param_file, ref_rms_corr_file,"
322-
"ref_default_ranges, ref_zone_dict, ref_field_settings, ref_expand_spec",
322+
"ref_default_ranges, ref_min_range_hwell, ref_mult_hwell_length,"
323+
"ref_zone_dict, ref_field_settings, ref_expand_spec",
323324
[
324325
(
325326
{
@@ -346,6 +347,8 @@ def test_read_ert_summary_obs(filename, result_dict_list):
346347
},
347348
"default_field_settings": {
348349
"ranges": [2000.0, 1000.0, 45.0],
350+
"min_range_hwell": 150.0,
351+
"mult_hwell_length": 1.5,
349352
},
350353
"field_settings": [
351354
{
@@ -374,6 +377,8 @@ def test_read_ert_summary_obs(filename, result_dict_list):
374377
"ahm_field_aps.ert",
375378
"correlation_ranges.txt",
376379
[2000.0, 1000.0, 45.0],
380+
150.0,
381+
1.5,
377382
{
378383
"Valysar": 1,
379384
"Therys": 2,
@@ -420,6 +425,8 @@ def test_read_ert_summary_obs(filename, result_dict_list):
420425
},
421426
"default_field_settings": {
422427
"ranges": [2000.0, 1000.0, 45.0],
428+
"min_range_hwell": 150.0,
429+
"mult_hwell_length": 1.5,
423430
},
424431
"field_settings": [
425432
{
@@ -448,6 +455,8 @@ def test_read_ert_summary_obs(filename, result_dict_list):
448455
"ahm_field_aps.ert",
449456
"correlation_ranges.txt",
450457
[2000.0, 1000.0, 45.0],
458+
150.0,
459+
1.5,
451460
{
452461
"Valysar": 1,
453462
"Therys": 2,
@@ -484,6 +493,8 @@ def test_get_specification(
484493
ref_ert_config_field_param_file: str,
485494
ref_rms_corr_file: str,
486495
ref_default_ranges: list[float],
496+
ref_min_range_hwell: float,
497+
ref_mult_hwell_length: float,
487498
ref_zone_dict: dict,
488499
ref_field_settings: dict,
489500
ref_expand_spec: bool,
@@ -500,6 +511,8 @@ def test_get_specification(
500511
ert_config_field_param_file,
501512
rms_field_correlation_file,
502513
default_ranges,
514+
min_range_hwell,
515+
mult_hwell_length,
503516
zone_dict,
504517
field_settings,
505518
expand_spec,
@@ -518,6 +531,8 @@ def test_get_specification(
518531
assert ert_config_field_param_file == ref_ert_config_field_param_file
519532
assert rms_field_correlation_file == ref_rms_corr_file
520533
assert default_ranges == ref_default_ranges
534+
assert min_range_hwell == ref_min_range_hwell
535+
assert mult_hwell_length == ref_mult_hwell_length
521536
assert zone_dict == ref_zone_dict
522537
assert field_settings == ref_field_settings
523538
assert expand_spec == ref_expand_spec

0 commit comments

Comments
 (0)