Exemple #1
0
    def fetch(self, ert, key, parameter, data, comparison_fs):
        data.x_data_type = "time"

        fs = ert.enkf.enkf_main_get_fs(ert.main)
        config_node = ert.enkf.ensemble_config_get_node(ert.ensemble_config, key)
        node = ert.enkf.enkf_node_alloc(config_node)
        comp_node = ert.enkf.enkf_node_alloc(config_node)
        num_realizations = ert.enkf.enkf_main_get_ensemble_size(ert.main)

        user_data = parameter.getUserData()

        if user_data is None:
            return False

        key_index = None
        if user_data.has_key("key_index"):
            key_index = user_data["key_index"]

        if parameter.getType() == FieldModel.TYPE:
            field_position = user_data["field_position"]
            field_config = ert.enkf.enkf_config_node_get_ref(config_node)
            if ert.enkf.field_config_ijk_active(
                field_config, field_position[0] - 1, field_position[1] - 1, field_position[2] - 1
            ):
                key_index = "%i,%i,%i" % (field_position[0], field_position[1], field_position[2])
                data.setKeyIndexIsIndex(True)
            else:
                return False
        elif parameter.getType() == DataModel.TYPE:
            data_index = user_data["data_index"]
            key_index = "KEY:%d" % data_index
            data.setKeyIndexIsIndex(True)

        data.setKeyIndex(key_index)

        state_list = [user_data["state"]]
        if state_list[0] == enums.ert_state_enum.BOTH:
            state_list = [enums.ert_state_enum.FORECAST, enums.ert_state_enum.ANALYZED]

        for member in range(0, num_realizations):
            data.x_data[member] = []
            data.y_data[member] = []
            x_time = data.x_data[member]
            y = data.y_data[member]

            if not comparison_fs is None:
                data.x_comp_data[member] = []
                data.y_comp_data[member] = []
                x_comp_time = data.x_comp_data[member]
                y_comp = data.y_comp_data[member]

            member_config = ert.enkf.enkf_main_iget_member_config(ert.main, member)
            stop_time = ert.enkf.enkf_main_get_history_length(ert.main)

            for step in range(0, stop_time + 1):
                for state in state_list:
                    if ert.enkf.enkf_fs_has_node(fs, config_node, step, member, state.value()):
                        sim_time = ert.enkf.member_config_iget_sim_time(member_config, step, fs)
                        ert.enkf.enkf_fs_fread_node(fs, node, step, member, state.value())
                        valid = ertwrapper.c_int()
                        value = ert.enkf.enkf_node_user_get(node, key_index, ertwrapper.byref(valid))
                        if valid.value == 1:
                            data.checkMaxMin(sim_time)
                            data.checkMaxMinY(value)
                            x_time.append(sim_time)
                            y.append(value)
                        # else:
                        #    print "Not valid: ", key, member, step, key_index

                    if not comparison_fs is None:
                        if ert.enkf.enkf_fs_has_node(comparison_fs, config_node, step, member, state.value()):
                            sim_time = ert.enkf.member_config_iget_sim_time(member_config, step, comparison_fs)
                            ert.enkf.enkf_fs_fread_node(comparison_fs, comp_node, step, member, state.value())
                            valid = ertwrapper.c_int()
                            value = ert.enkf.enkf_node_user_get(comp_node, key_index, ertwrapper.byref(valid))
                            if valid.value == 1:
                                # data.checkMaxMin(sim_time)
                                # data.checkMaxMinY(value)
                                x_comp_time.append(sim_time)
                                y_comp.append(value)
                            # else:
                            #    print "Not valid: ", key, member, step, key_index

            data.x_data[member] = numpy.array([t.datetime() for t in x_time])
            data.y_data[member] = numpy.array(y)

            if not comparison_fs is None:
                data.x_comp_data[member] = numpy.array([t.datetime() for t in x_comp_time])
                data.y_comp_data[member] = numpy.array(y_comp)

        self._getObservations(ert, key, key_index, data)

        self._getRefCase(ert, key, data)

        ert.enkf.enkf_node_free(node)
        ert.enkf.enkf_node_free(comp_node)

        data.inverted_y_axis = False
Exemple #2
0
    def fetch(self, ert, key, parameter, data, comparison_fs):
        data.x_data_type = "time"
        fs = ert.main.get_fs
        config_node = ert.main.ensemble_config.get_node(key)
        node = config_node.alloc_node
        comp_node = config_node.alloc_node
        num_realizations = ert.main.ens_size
        var_type_set = False
        user_data = parameter.getUserData()
        if user_data is None:
            return False

        key_index = None
        if user_data.has_key("key_index"):
            key_index = user_data["key_index"]

        if parameter.getType() == FieldModel.TYPE:
            var_type = enums.enkf_var_type.PARAMETER
            var_type_set = True
            field_position = user_data["field_position"]
            field_config = config_node.field_model
            if field_config.ijk_active(field_position[0] - 1, field_position[1] - 1, field_position[2] - 1):
                key_index = "%i,%i,%i" % (field_position[0], field_position[1], field_position[2])
                data.setKeyIndexIsIndex(True)
            else:
                return False

        elif parameter.getType() == DataModel.TYPE:
            var_type = enums.enkf_var_type.PARAMETER
            var_type_set = True
            data_index = user_data["data_index"]
            key_index = "KEY:%d" % data_index
            data.setKeyIndexIsIndex(True)

        if not var_type_set:
            var_type = enums.enkf_var_type.DYNAMIC_RESULT

        data.setKeyIndex(key_index)
        state_list = [user_data["state"]]
        if state_list[0] == enums.ert_state_enum.BOTH:
            state_list = [enums.ert_state_enum.FORECAST, enums.ert_state_enum.ANALYZED]

        for member in range(0, num_realizations):
            data.x_data[member] = []
            data.y_data[member] = []
            x_time = data.x_data[member]
            y = data.y_data[member]

            if not comparison_fs is None:
                data.x_comp_data[member] = []
                data.y_comp_data[member] = []
                x_comp_time = data.x_comp_data[member]
                y_comp = data.y_comp_data[member]

            stop_time = ert.main.get_history_length

            for state in state_list:
                start_time = 0
                if config_node.get_impl_type == SummaryModel.TYPE:
                    start_time = 1
                for step in range(start_time, stop_time):
                    time_map = fs.get_time_map
                    sim_time_as_c_int = time_map.iget(step)
                    sim_time_as_time_t = time_t(sim_time_as_c_int)
                    sim_time_as_ordinal = sim_time_as_time_t.datetime().toordinal()
                    valid = ertwrapper.c_double()
                    value = node.user_get(fs, key_index, step, member, state.value(), ertwrapper.byref(valid))
                    if value == True:
                        data.checkMaxMin(sim_time_as_time_t)
                        data.checkMaxMinY(valid.value)
                        x_time.append(sim_time_as_ordinal)
                        y.append(valid.value)
                    # else:
                    # print "Not valid: ", key, member, step, key_index, value, state.value()

                    if not comparison_fs is None:
                        time_map = comparison_fs.get_time_map
                        sim_time_as_c_int = time_map.iget(step)
                        sim_time_as_time_t = time_t(sim_time_as_c_int)
                        sim_time_as_ordinal = sim_time_as_time_t.datetime().toordinal()
                        valid = ertwrapper.c_double()
                        value = node.user_get(comparison_fs, key, step, member, state.value(), ertwrapper.byref(valid))
                        if value == 1:
                            data.checkMaxMin(sim_time_as_time_t)
                            data.checkMaxMinY(valid.value)
                            x_comp_time.append(sim_time_as_ordinal)
                            y_comp.append(valid.value)
                        # else:
                        #    print "Not valid: ", key, member, step, key_index

            data.x_data[member] = numpy.array(x_time)  # [t.datetime() for t in x_time])
            data.y_data[member] = numpy.array(y)

            if not comparison_fs is None:
                data.x_comp_data[member] = numpy.array(x_comp_time)  # [t.datetime() for t in x_comp_time])
                data.y_comp_data[member] = numpy.array(y_comp)

        self._getObservations(ert, key, key_index, data)

        self._getRefCase(ert, key, data)

        # node.__del__
        # comp_node.__del__

        data.inverted_y_axis = False