Skip to content

Commit a212e4e

Browse files
committed
Only override options that have changed for testing, do recursive merge
1 parent dd295cf commit a212e4e

File tree

1 file changed

+32
-12
lines changed

1 file changed

+32
-12
lines changed

weis/main.py

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import os
22
import sys
33
import time
4+
import copy
45
import warnings
56
import numpy as np
67

@@ -24,18 +25,33 @@ def set_modopt_procs(modeling_options,modeling_override):
2425
mpi_modeling_override['General']['openfast_configuration']['nFD'] = modeling_options['General']['openfast_configuration']['nFD']
2526
mpi_modeling_override['General']['openfast_configuration']['nOFp'] = modeling_options['General']['openfast_configuration']['nOFp']
2627

27-
modeling_override.update(mpi_modeling_override)
28+
modeling_override = recursive_merge(modeling_override, mpi_modeling_override)
2829
return mpi_modeling_override
2930

30-
def set_modopt_test_runs(fname_input_modeling, modeling_override, fname_input_analysis, analysis_override):
31+
def recursive_merge(dict1, dict2):
32+
for key, value in dict2.items():
33+
if key in dict1 and isinstance(dict1[key], dict) and isinstance(value, dict):
34+
# Recursively merge nested dictionaries
35+
dict1[key] = recursive_merge(dict1[key], value)
36+
else:
37+
# Merge non-dictionary values
38+
dict1[key] = value
39+
return dict1
40+
41+
def set_modopt_test_runs(fname_input_modeling, modeling_override, analysis_override):
3142
# Load modeling options
3243
modeling_options = sch.load_modeling_yaml(fname_input_modeling)
33-
analysis_options = sch.load_analysis_yaml(fname_input_analysis)
44+
45+
test_modeling_overrides = {}
46+
test_analysis_overrides = {}
3447

3548
# Options to speed up tests:
3649

3750
# Shorten all DLC runs to single metocean condition
38-
for dlc_option in modeling_options['DLC_driver']['DLCs']:
51+
test_modeling_overrides['DLC_driver'] = {}
52+
test_modeling_overrides['DLC_driver']['DLCs'] = copy.deepcopy(modeling_options['DLC_driver']['DLCs'])
53+
54+
for dlc_option in test_modeling_overrides['DLC_driver']['DLCs']:
3955
dlc_option['transient_time'] = 0
4056
dlc_option['analysis_time'] = 0.5
4157
dlc_option['n_seeds'] = 1
@@ -46,18 +62,23 @@ def set_modopt_test_runs(fname_input_modeling, modeling_override, fname_input_an
4662
dlc_option['wave_height'] = [2]
4763

4864
# OpenFAST modeling_overrides are not honored if an OpenFAST model is read, but we can set options in openmdao_openfast for now if this flag is enabled
49-
modeling_options['General']['test_mode'] = True
65+
test_modeling_overrides['General'] = {}
66+
test_modeling_overrides['General']['test_mode'] = True
5067

5168
# Cp surface generation: default is 20, ROSCO can struggle with fewer than 10
52-
modeling_options['WISDEM']['RotorSE']['n_pitch_perf_surfaces'] = 10
53-
modeling_options['WISDEM']['RotorSE']['n_tsr_perf_surfaces'] = 10
69+
test_modeling_overrides['WISDEM'] = {}
70+
test_modeling_overrides['WISDEM']['RotorSE'] = {}
71+
test_modeling_overrides['WISDEM']['RotorSE']['n_pitch_perf_surfaces'] = 10
72+
test_modeling_overrides['WISDEM']['RotorSE']['n_tsr_perf_surfaces'] = 10
5473

5574
# Solver, max iterations
56-
analysis_options['driver']['optimization']['max_iter'] = 1
57-
analysis_options['driver']['optimization']['solver'] = 'LN_COBYLA' # Gradient free
75+
test_analysis_overrides['driver'] = {}
76+
test_analysis_overrides['driver']['optimization'] = {}
77+
test_analysis_overrides['driver']['optimization']['max_iter'] = 1
78+
test_analysis_overrides['driver']['optimization']['solver'] = 'LN_COBYLA' # Gradient free
5879

59-
modeling_override.update(modeling_options) # not sure whether to return all options as overrides
60-
analysis_override.update(analysis_options)
80+
modeling_override = recursive_merge(modeling_override, test_modeling_overrides)
81+
analysis_override = recursive_merge(analysis_override, test_analysis_overrides)
6182

6283

6384
def weis_main(fname_wt_input, fname_modeling_options, fname_analysis_options,
@@ -69,7 +90,6 @@ def weis_main(fname_wt_input, fname_modeling_options, fname_analysis_options,
6990
if test_run:
7091
set_modopt_test_runs(fname_modeling_options,
7192
modeling_override,
72-
fname_analysis_options,
7393
analysis_override
7494
)
7595

0 commit comments

Comments
 (0)