00001
00002
00003
00004
00005
00006
00007
00008 #ifndef SRC_AMG_MKB_AMG_INTERPOLATION_INTERPOLATIONSTRATEGY_HPP_
00009 #define SRC_AMG_MKB_AMG_INTERPOLATION_INTERPOLATIONSTRATEGY_HPP_
00010 #include <petscksp.h>
00011 #include "uth_system.h"
00012 #include "../AMGRows.hpp"
00013 #include "../RowData.hpp"
00014 #include "../RowDataCollector.hpp"
00015 #include "../AMGMatrixUtilityFunctions.hpp"
00016
00017 class InterpolationStrategy {
00018 public:
00019 InterpolationStrategy(Mat mat, struct row_info* row_info_array, struct influenced_info* influenced_info_array,
00020 PetscInt first_row_in_range, PetscInt range_end, double strength_threshold);
00021 InterpolationStrategy();
00022 void InitStrategy(Mat mat, struct row_info* row_info_array, struct influenced_info* influenced_info_array,
00023 PetscInt first_row_in_range, PetscInt range_end, double strength_threshold);
00024 virtual ~InterpolationStrategy();
00025
00026 virtual Mat GetMatrixFromCoarseToFine() = 0;
00027
00028
00029 protected:
00030 void PrepareFromCoarseToFineMat(Mat* from_coarse_to_fine_mat, int coarse_rows_number, int coarse_columns_number, RowData* rowData);
00031 bool IsInCSet(PetscInt row_index, RowData* rowData, PetscInt first_row_in_range, PetscInt range_end,
00032 struct influenced_info* influenced_info_array);
00033 PetscInt GetColumnIndex(PetscInt row_index, RowData* rowData, PetscInt first_row_in_range, PetscInt range_end,
00034 struct influenced_info* influenced_info_array);
00035 Mat mat;
00036 struct row_info* row_info_array;
00037 struct influenced_info* influenced_info_array;
00038 PetscInt first_row_in_range;
00039 PetscInt range_end;
00040 double strength_threshold;
00041 };
00042
00043 #endif