Repository: OpenMDAO/OpenMDAO

Issue:
The _disallowed_names in ExecComp is missing the names of any options that come from the parent classes.
### Description

_disallowed_names is used to catch any component options that are passed in as arguments so that it doesn't think they are variable names, and so that the equation doesn't contain them. 

It is missing `assembled_jac_type` and `derivs_method` from System.

It is missing `distributed`, `run_root_only`, `always_opt`, and `use_jit` from Component.

### Example

    om.ExecComp("y = a + b + c + d", derivs_method='cs')

### OpenMDAO Version

3.36.1-dev

### Relevant environment information

_No response_

Discussion:

Solution patch:
diff --git a/openmdao/components/exec_comp.py b/openmdao/components/exec_comp.py
index 3306b50cc..f60f8d531 100644
--- a/openmdao/components/exec_comp.py
+++ b/openmdao/components/exec_comp.py
@@ -28,7 +28,9 @@ _allowed_meta = {'value', 'val', 'shape', 'units', 'res_units', 'desc',
 
 # Names that are not allowed for input or output variables (keywords for options)
 _disallowed_names = {'has_diag_partials', 'units', 'shape', 'shape_by_conn', 'run_root_only',
-                     'constant', 'do_coloring'}
+                     'constant', 'do_coloring',
+                     'assembled_jac_type', 'derivs_method',
+                     'distributed', 'always_opt', 'use_jit'}
 
 
 def check_option(option, value):


Test patch:
diff --git a/openmdao/components/tests/test_exec_comp.py b/openmdao/components/tests/test_exec_comp.py
index d16eeb89b..5fa1e0a5e 100644
--- a/openmdao/components/tests/test_exec_comp.py
+++ b/openmdao/components/tests/test_exec_comp.py
@@ -302,6 +302,21 @@ class TestExecComp(unittest.TestCase):
                          "'C1' <class ExecComp>: arg 'xx' in call to ExecComp() does not refer to any variable "
                          "in the expressions ['y=x+1.']")
 
+    def test_super_kwargs(self):
+        prob = om.Problem()
+        # Instantiate ExecComp with additional arguments that should be passed to
+        # the super class.
+        prob.model.add_subsystem('C1', om.ExecComp('y=x+1.',
+                                                   y={'copy_shape': 'x'}, x={'shape': (10,)},
+                                                   has_diag_partials=True,
+                                                   always_opt=True,
+                                                   use_jit=False))
+        prob.setup()
+        prob.set_val('C1.x', np.linspace(0, 1, 10))
+        prob.run_model()
+        assert_near_equal(prob.get_val('C1.y'), np.linspace(0, 1, 10) + 1)
+
+
     def test_bad_kwargs_meta(self):
         prob = om.Problem()
         prob.model.add_subsystem('C1', om.ExecComp('y=x+1.',