00001 00011 #ifndef __BS_FIP_RESULTS_STORAGE_H 00012 #define __BS_FIP_RESULTS_STORAGE_H 00013 00014 #include "calc_model.h" 00015 00016 namespace blue_sky 00017 { 00018 00019 enum fip_d_params 00020 { 00021 FIP_D_PARAM_COIP = 0, 00022 FIP_D_PARAM_CMOIP, 00023 FIP_D_PARAM_CWIP, 00024 FIP_D_PARAM_CGIP, 00025 FIP_D_PARAM_HPROD, 00026 FIP_D_PARAM_PAV, 00027 FIP_D_PARAM_CPVOL, 00028 00029 FIP_D_PARAM_OIL_IN, 00030 FIP_D_PARAM_WATER_IN, 00031 FIP_D_PARAM_WATER_OUT, 00032 00033 FIP_D_PARAM_SWAV, 00034 FIP_D_PARAM_SOAV, 00035 FIP_D_PARAM_SGAV, 00036 FIP_D_PARAM_GOR, 00037 00038 FIP_D_PARAM_COUNT 00039 }; 00040 00041 class BS_API_PLUGIN fip_results 00042 { 00043 // methods 00044 public: 00045 // default constructor 00046 fip_results (); 00047 // default destructor 00048 ~fip_results (); 00049 00050 // variables 00051 public: 00052 typedef std::vector<double> dates_type; 00053 typedef std::vector<float> d_params_internal_type; 00054 typedef std::vector<d_params_internal_type> d_params_type; 00055 00056 dates_type dates; 00057 d_params_type d_params; 00058 }; 00059 00060 00061 class BS_API_PLUGIN fip_results_storage : public objbase 00062 { 00063 BLUE_SKY_TYPE_DECL (fip_results_storage); 00064 // methods 00065 public: 00066 ~fip_results_storage (); 00067 // get summary fip data for all time steps for region 00068 int get_summary_fip_data_for_region (); 00069 00070 // variables 00071 public: 00072 typedef std::map <int, fip_results> fip_type; 00073 typedef std::pair <int, fip_results> fip_pair_type; 00074 fip_type fip; 00075 00076 }; 00077 00078 00079 template <typename strategy_t> 00080 struct save_fip_data 00081 { 00082 typedef calc_model <strategy_t> calc_model_t; 00083 typedef typename strategy_t::index_t index_t; 00084 00085 typedef typename calc_model_t::data_array_t data_array_t; 00086 typedef typename calc_model_t::item_t item_t; 00087 typedef typename calc_model_t::helper_t::item_rr_block_t item_rr_block_t; 00088 typedef typename calc_model_t::helper_t::item_rw_block_t item_rw_block_t; 00089 typedef typename calc_model_t::helper_t::item_wr_block_t item_wr_block_t; 00090 typedef typename calc_model_t::connection_t connection_t; 00091 typedef typename calc_model_t::well_t well_t; 00092 typedef typename calc_model_t::reservoir_t::facility_manager_t::well_iterator_t well_iterator_t; 00093 typedef typename calc_model_t::strategy_type strategy_type; 00094 00095 typedef smart_ptr <calc_model_t, true> sp_calc_model_t; 00096 typedef typename calc_model_t::sp_well_t sp_well_t; 00097 typedef typename calc_model_t::sp_connection_t sp_connection_t; 00098 typedef smart_ptr<fip_results_storage, true> sp_fip_results_storage; 00099 00101 void 00102 copy_fip_data_to_storage (sp_calc_model_t &calc_model, item_t dt) 00103 { 00104 const sp_fip_results_storage &f_res (calc_model->fip_res); 00105 /* 00106 int i; 00107 fip_data *fd; 00108 int fip_region = rsv_status->fip_region; 00109 float fip_params[FIP_D_PARAM_COUNT] = {0}; 00110 00111 CH_PTR (rsv_status); 00112 00113 for (i = 0; i < fip_region; i++) 00114 { 00115 fip_results &fr = f_res.fip[i]; 00116 fd = &(rsv_status->current_fip[i]); 00117 00118 fr.dates.push_back (time + time_step_length); 00119 00120 fip_params[FIP_D_PARAM_COIP] += (float)fd->COIP; 00121 fip_params[FIP_D_PARAM_CMOIP] += (float)fd->CMOIP; 00122 fip_params[FIP_D_PARAM_CWIP] += (float)fd->CWIP; 00123 fip_params[FIP_D_PARAM_CGIP] += (float)fd->CGIP; 00124 fip_params[FIP_D_PARAM_HPROD] += (float)fd->HPROD; 00125 fip_params[FIP_D_PARAM_CPVOL] += (float)fd->CPVOL; 00126 #ifdef _MPI 00127 fip_params[FIP_D_PARAM_OIL_IN] += (float)fd->mpi_oil_in; 00128 fip_params[FIP_D_PARAM_WATER_IN] += (float)fd->mpi_water_in; 00129 fip_params[FIP_D_PARAM_WATER_OUT] += (float)fd->mpi_water_out; 00130 #else //_MPI 00131 fip_params[FIP_D_PARAM_OIL_IN] += (float)fd->oil_in; 00132 fip_params[FIP_D_PARAM_WATER_IN] += (float)fd->water_in; 00133 fip_params[FIP_D_PARAM_WATER_OUT] += (float)fd->water_out; 00134 #endif //_MPI 00135 fip_params[FIP_D_PARAM_SWAV] += (float)fd->SWAV; 00136 fip_params[FIP_D_PARAM_SOAV] += (float)fd->SOAV; 00137 fip_params[FIP_D_PARAM_SGAV] += (float)fd->SGAV; 00138 00139 fr.d_params[FIP_D_PARAM_COIP].push_back ((float)fd->COIP); 00140 fr.d_params[FIP_D_PARAM_CMOIP].push_back ((float)fd->CMOIP); 00141 fr.d_params[FIP_D_PARAM_CWIP].push_back ((float)fd->CWIP); 00142 fr.d_params[FIP_D_PARAM_CGIP].push_back ((float)fd->CGIP); 00143 fr.d_params[FIP_D_PARAM_HPROD].push_back ((float)fd->HPROD); 00144 fr.d_params[FIP_D_PARAM_CPVOL].push_back ((float)fd->CPVOL); 00145 fr.d_params[FIP_D_PARAM_PAV].push_back ((float)fd->PAV); 00146 #ifdef _MPI 00147 fr.d_params[FIP_D_PARAM_OIL_IN].push_back ((float)fd->mpi_oil_in); 00148 fr.d_params[FIP_D_PARAM_WATER_IN].push_back ((float)fd->mpi_water_in); 00149 fr.d_params[FIP_D_PARAM_WATER_OUT].push_back ((float)fd->mpi_water_out); 00150 #else //_MPI 00151 fr.d_params[FIP_D_PARAM_OIL_IN].push_back ((float)fd->oil_in); 00152 fr.d_params[FIP_D_PARAM_WATER_IN].push_back ((float)fd->water_in); 00153 fr.d_params[FIP_D_PARAM_WATER_OUT].push_back ((float)fd->water_out); 00154 #endif //_MPI 00155 fr.d_params[FIP_D_PARAM_SWAV].push_back ((float)fd->SWAV); 00156 fr.d_params[FIP_D_PARAM_SOAV].push_back ((float)fd->SOAV); 00157 fr.d_params[FIP_D_PARAM_SGAV].push_back ((float)fd->SGAV); 00158 fr.d_params[FIP_D_PARAM_GOR].push_back ((float)fd->GOR); 00159 } 00160 00161 fip_results &fr = f_res.fip[fip_region]; 00162 00163 fr.dates.push_back (time + time_step_length); 00164 fr.d_params[FIP_D_PARAM_COIP].push_back (fip_params[FIP_D_PARAM_COIP]); 00165 fr.d_params[FIP_D_PARAM_CMOIP].push_back (fip_params[FIP_D_PARAM_CMOIP]); 00166 fr.d_params[FIP_D_PARAM_CWIP].push_back (fip_params[FIP_D_PARAM_CWIP]); 00167 fr.d_params[FIP_D_PARAM_CGIP].push_back (fip_params[FIP_D_PARAM_CGIP]); 00168 fr.d_params[FIP_D_PARAM_HPROD].push_back (fip_params[FIP_D_PARAM_HPROD]); 00169 fr.d_params[FIP_D_PARAM_CPVOL].push_back (fip_params[FIP_D_PARAM_CPVOL]); 00170 fr.d_params[FIP_D_PARAM_PAV].push_back (float (rsv_status->pav)); 00171 fr.d_params[FIP_D_PARAM_OIL_IN].push_back (fip_params[FIP_D_PARAM_OIL_IN]); 00172 fr.d_params[FIP_D_PARAM_WATER_IN].push_back (fip_params[FIP_D_PARAM_WATER_IN]); 00173 fr.d_params[FIP_D_PARAM_WATER_OUT].push_back (fip_params[FIP_D_PARAM_WATER_OUT]); 00174 fr.d_params[FIP_D_PARAM_SWAV].push_back (fip_params[FIP_D_PARAM_SWAV]); 00175 fr.d_params[FIP_D_PARAM_SOAV].push_back (fip_params[FIP_D_PARAM_SOAV]); 00176 fr.d_params[FIP_D_PARAM_SGAV].push_back (fip_params[FIP_D_PARAM_SGAV]); 00177 fr.d_params[FIP_D_PARAM_GOR].push_back (float (rsv_status->gor)); 00178 */ 00179 } 00180 }; 00181 00182 } //blue_sky 00183 #endif //__BS_FIP_RESULTS_STORAGE_H