'This method implements how to store the value of a parameter on the
model instance.
Currently there is only one storage mechanism (via the ._parameters
array) but other mechanisms may be desireable, in which case really the
model class itself should dictate this and *not* `Parameter` itself.'

def _set_model_value(self, model, value):

    def _update_parameter_value(model, name, value):
        param_metrics = model._param_metrics[name]
        param_slice = param_metrics[u'slice']
        param_shape = param_metrics[u'shape']
        param_size = np.prod(param_shape)
        if (np.size(value) != param_size):
            raise InputParameterError(u'Input    value    for    parameter    {0!r}    does    not    have    {1}    elements    as    the    current    value    does'.format(name, param_size))
        model._parameters[param_slice] = np.array(value).ravel()
    _update_parameter_value(model, self._name, value)
    if hasattr(model, u'_param_map'):
        (submodel_ind, param_name) = model._param_map[self._name]
        if hasattr(model._submodels[submodel_ind], u'_param_metrics'):
            _update_parameter_value(model._submodels[submodel_ind], param_name, value)
