00001 00009 #ifndef BS_BOS_CORE_CALC_MODEL_DATA_H_ 00010 #define BS_BOS_CORE_CALC_MODEL_DATA_H_ 00011 00012 namespace blue_sky { 00013 00019 template <typename strategy_t> 00020 struct calc_model_data 00021 { 00022 typedef calc_model_data<strategy_t> this_t; 00023 typedef smart_ptr<this_t, true> sp_this_t; 00024 typedef typename strategy_t::item_t item_t; 00025 typedef typename strategy_t::index_t index_t; 00026 00027 //#ifdef _DEBUG 00028 typedef boost::array <item_t, FI_PHASE_TOT> item_array_N_t; 00029 typedef boost::array <item_t, FI_PHASE_TOT - 1> item_array_N_1_t; 00030 typedef boost::array <item_t, FI_PHASE_TOT * FI_PHASE_TOT> item_array_N_N_t; 00031 //#else 00032 // typedef array_ext <item_t> item_array_N_t; 00033 // typedef array_ext <item_t> item_array_N_1_t; 00034 // typedef array_ext <item_t> item_array_N_N_t; 00035 //#endif 00036 00037 //#ifndef _DEBUG 00038 // calc_model_data () 00039 // : data_ (0) 00040 // { 00041 // } 00042 // 00043 // calc_model_data (size_t n_phases) 00044 // : cap_pressure (0, n_phases - 1) , 00045 // s_deriv_cap_pressure (0, n_phases - 1), 00046 // relative_perm (0, n_phases), 00047 // s_deriv_relative_perm (0, n_phases * n_phases), 00048 // invers_fvf (0, n_phases), 00049 // p_deriv_invers_fvf (0, n_phases), 00050 // invers_viscosity (0, n_phases), 00051 // p_deriv_invers_viscosity (0, n_phases), 00052 // invers_visc_fvf (0, n_phases), 00053 // p_deriv_invers_visc_fvf (0, n_phases), 00054 // density (0, n_phases), 00055 // p_deriv_density (0, n_phases), 00056 // mobility (0, n_phases), 00057 // p_deriv_mobility (0, n_phases), 00058 // s_deriv_mobility (0, n_phases * n_phases), 00059 // prev_fluid_volume (0, n_phases), 00060 // data_ (0) 00061 // { 00062 // allocate_data (size ()); 00063 // // we should deallocate memory. but now it is not a problem. 00064 // } 00065 //#endif 00066 00067 item_array_N_1_t cap_pressure; 00068 item_array_N_1_t s_deriv_cap_pressure; 00069 00070 item_array_N_t relative_perm; 00071 item_array_N_N_t s_deriv_relative_perm; 00072 00073 item_t p_deriv_gas_oil_ratio; 00074 00075 item_array_N_t invers_fvf; 00076 item_array_N_t p_deriv_invers_fvf; 00077 item_t gor_deriv_invers_fvf; 00078 00079 item_array_N_t invers_viscosity; 00080 item_array_N_t p_deriv_invers_viscosity; 00081 item_t gor_deriv_invers_viscosity; 00082 00083 item_array_N_t invers_visc_fvf; 00084 item_array_N_t p_deriv_invers_visc_fvf; 00085 item_t gor_deriv_invers_visc_fvf; 00086 00087 item_array_N_t density; 00088 item_array_N_t p_deriv_density; 00089 item_t gor_deriv_density; 00090 00091 item_t porosity; 00092 item_t p_deriv_porosity; 00093 00094 item_t truns_mult; 00095 item_t p_deriv_truns_mult; 00096 00097 item_array_N_t mobility; 00098 item_array_N_t p_deriv_mobility; 00099 item_array_N_N_t s_deriv_mobility; 00100 00101 item_array_N_t prev_fluid_volume; 00102 00103 //#ifndef _DEBUG 00104 // private: 00105 // void 00106 // allocate_data (size_t data_size) 00107 // { 00108 // delete []data_; 00109 // data_ = aligned_allocator <item_t>::allocate (data_size); 00110 // memset (data_, 0, sizeof (item_t) * data_size); 00111 // 00112 // item_t *data = data_; 00113 // data = cap_pressure.init (data); 00114 // data = s_deriv_cap_pressure.init (data); 00115 // data = relative_perm.init (data); 00116 // data = s_deriv_relative_perm.init (data); 00117 // data = invers_fvf.init (data); 00118 // data = p_deriv_invers_fvf.init (data); 00119 // data = invers_viscosity.init (data); 00120 // data = p_deriv_invers_viscosity.init (data); 00121 // data = invers_visc_fvf.init (data); 00122 // data = p_deriv_invers_visc_fvf.init (data); 00123 // data = density.init (data); 00124 // data = p_deriv_density.init (data); 00125 // data = mobility.init (data); 00126 // data = p_deriv_mobility.init (data); 00127 // data = s_deriv_mobility.init (data); 00128 // data = prev_fluid_volume.init (data); 00129 // } 00130 // 00131 // size_t 00132 // size () const 00133 // { 00134 // return cap_pressure.size () 00135 // + s_deriv_cap_pressure.size () 00136 // + relative_perm.size () 00137 // + s_deriv_relative_perm.size () 00138 // + invers_fvf.size () 00139 // + p_deriv_invers_fvf.size () 00140 // + invers_viscosity.size () 00141 // + p_deriv_invers_viscosity.size () 00142 // + invers_visc_fvf.size () 00143 // + p_deriv_invers_visc_fvf.size () 00144 // + density.size () 00145 // + p_deriv_density.size () 00146 // + mobility.size () 00147 // + p_deriv_mobility.size () 00148 // + s_deriv_mobility.size () 00149 // + prev_fluid_volume.size () 00150 // ; 00151 // } 00152 // 00153 // private: 00154 // item_t *data_; 00155 //#endif 00156 }; 00157 00158 } // namespace blue_sky 00159 00160 #endif // #ifndef BS_BOS_CORE_CALC_MODEL_DATA_H_ 00161