diff --git a/openmdao/core/driver.py b/openmdao/core/driver.py index 3724efefb..b41c8d463 100644 --- a/openmdao/core/driver.py +++ b/openmdao/core/driver.py @@ -95,6 +95,7 @@ def _setup(self): rootmeta = root.unknowns.metadata(name) if newitem is desvars: rootmeta['is_desvar'] = True + rootmeta['desvar_meta'] = item[name] if not rootmeta.get('_canset_', False): raise RuntimeError("'%s' has been specified as a design " "variable but that var is a component " @@ -104,6 +105,7 @@ def _setup(self): rootmeta['is_objective'] = True if newitem is cons: rootmeta['is_constraint'] = True + rootmeta['constraint_meta'] = item[name] if MPI and 'src_indices' in rootmeta: raise ValueError("'%s' is a distributed variable and may " diff --git a/openmdao/docs/usr-guide/tutorials/recording.rst b/openmdao/docs/usr-guide/tutorials/recording.rst index 29ab6bfac..870303c66 100644 --- a/openmdao/docs/usr-guide/tutorials/recording.rst +++ b/openmdao/docs/usr-guide/tutorials/recording.rst @@ -574,6 +574,7 @@ The name of the SQLite table containing the derivatives is called `metadata`. 'top_promoted_name': 'p.f_xy', 'val': 0.0}, 'p1.x': {'_canset_': True, + 'desvar_meta': OrderedDict([('lower', -50.0), ('upper', 50.0), ('adder', 0.0), ('scaler', 1.0), ('size', 1)]), 'is_desvar': True, 'pathname': 'p1.x', 'shape': 1, @@ -581,6 +582,7 @@ The name of the SQLite table containing the derivatives is called `metadata`. 'top_promoted_name': 'p1.x', 'val': 3.0}, 'p2.y': {'_canset_': True, + 'desvar_meta': OrderedDict([('lower', -50.0), ('upper', 50.0), ('adder', 0.0), ('scaler', 1.0), ('size', 1)]), 'is_desvar': True, 'pathname': 'p2.y', 'shape': 1, @@ -610,6 +612,7 @@ This code prints out the following: 'top_promoted_name': 'p.f_xy', 'val': 0.0}, 'p1.x': {'_canset_': True, + 'desvar_meta': OrderedDict([('lower', -50.0), ('upper', 50.0), ('adder', 0.0), ('scaler', 1.0), ('size', 1)]), 'is_desvar': True, 'pathname': 'p1.x', 'shape': 1, @@ -617,6 +620,7 @@ This code prints out the following: 'top_promoted_name': 'p1.x', 'val': 3.0}, 'p2.y': {'_canset_': True, + 'desvar_meta': OrderedDict([('lower', -50.0), ('upper', 50.0), ('adder', 0.0), ('scaler', 1.0), ('size', 1)]), 'is_desvar': True, 'pathname': 'p2.y', 'shape': 1, diff --git a/openmdao/recorders/hdf5_recorder.py b/openmdao/recorders/hdf5_recorder.py index 1a8574480..5db2e5e2f 100644 --- a/openmdao/recorders/hdf5_recorder.py +++ b/openmdao/recorders/hdf5_recorder.py @@ -88,9 +88,14 @@ def record_metadata(self, group): for grp, data in pairings: for key, val in data: meta_group = grp.create_group(key) - for mkey, mval in iteritems(val): - meta_group.create_dataset(mkey, data=mval) + if isinstance(mval, dict): + cgrp = meta_group.create_group(mkey) + for ckey, cval in iteritems(mval): + if cval: + cgrp.create_dataset(ckey, data=cval) + else: + meta_group.create_dataset(mkey, data=mval) # if isinstance(val, (np.ndarray, Number)): # grp.create_dataset(key, data=val) # # TODO: Compression/Checksum?