11import os
22import sys
33import time
4+ import copy
45import warnings
56import 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
6384def 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