8
8
import numpy as np
9
9
10
10
from ert .config import ErtConfig , ESSettings , HookRuntime , UpdateSettings
11
- from ert .enkf_main import sample_prior
11
+ from ert .config .parsing .config_errors import ConfigValidationError
12
+ from ert .enkf_main import sample_prior , save_design_matrix_to_ensemble
12
13
from ert .ensemble_evaluator import EvaluatorServerConfig
13
14
from ert .storage import Storage
14
15
from ert .trace import tracer
15
16
16
17
from ..run_arg import create_run_arguments
17
- from .base_run_model import StatusEvents , UpdateRunModel
18
+ from .base_run_model import ErtRunError , StatusEvents , UpdateRunModel
18
19
19
20
if TYPE_CHECKING :
20
21
from ert .config import QueueConfig
@@ -66,6 +67,7 @@ def __init__(
66
67
self .support_restart = False
67
68
68
69
self ._parameter_configuration = config .ensemble_config .parameter_configuration
70
+ self ._design_matrix = config .analysis_config .design_matrix
69
71
self ._observations = config .observations
70
72
self ._response_configuration = config .ensemble_config .response_configuration
71
73
@@ -74,14 +76,27 @@ def run_experiment(
74
76
self , evaluator_server_config : EvaluatorServerConfig , restart : bool = False
75
77
) -> None :
76
78
self .log_at_startup ()
79
+
80
+ parameters_config = self ._parameter_configuration
81
+ design_matrix = self ._design_matrix
82
+ design_matrix_group = None
83
+ if design_matrix is not None :
84
+ try :
85
+ parameters_config , design_matrix_group = (
86
+ design_matrix .merge_with_existing_parameters (parameters_config )
87
+ )
88
+ except ConfigValidationError as exc :
89
+ raise ErtRunError (str (exc )) from exc
90
+
77
91
self .restart = restart
78
92
self .run_workflows (
79
93
HookRuntime .PRE_EXPERIMENT ,
80
94
fixtures = {"random_seed" : self .random_seed },
81
95
)
82
96
ensemble_format = self .target_ensemble_format
83
97
experiment = self ._storage .create_experiment (
84
- parameters = self ._parameter_configuration ,
98
+ parameters = parameters_config
99
+ + ([design_matrix_group ] if design_matrix_group else []),
85
100
observations = self ._observations ,
86
101
responses = self ._response_configuration ,
87
102
name = self .experiment_name ,
@@ -106,6 +121,13 @@ def run_experiment(
106
121
random_seed = self .random_seed ,
107
122
)
108
123
124
+ if design_matrix_group is not None and design_matrix is not None :
125
+ save_design_matrix_to_ensemble (
126
+ design_matrix .design_matrix_df ,
127
+ prior ,
128
+ np .where (self .active_realizations )[0 ],
129
+ design_matrix_group .name ,
130
+ )
109
131
self ._evaluate_and_postprocess (
110
132
prior_args ,
111
133
prior ,
0 commit comments