00001
00009 #ifndef BS_FI_OPERATOR_CALC_PREV_FLUID_VOLUME_H_
00010 #define BS_FI_OPERATOR_CALC_PREV_FLUID_VOLUME_H_
00011
00012 namespace blue_sky {
00013
00017 template <class strategy_t, bool is_w, bool is_g, bool is_o>
00018 BS_FORCE_INLINE void
00019 fi_operator_impl <strategy_t, is_w, is_g, is_o>::calc_prev_fluid_volume ()
00020 {
00021 BS_ASSERT (calc_model_->phase_d[FI_PHASE_WATER] == calc_model_->sat_d[FI_PHASE_WATER]) (calc_model_->phase_d[FI_PHASE_WATER]) (calc_model_->sat_d[FI_PHASE_WATER]);
00022 BS_ASSERT (calc_model_->phase_d[FI_PHASE_GAS] == calc_model_->sat_d[FI_PHASE_GAS]) (calc_model_->phase_d[FI_PHASE_GAS]) (calc_model_->sat_d[FI_PHASE_GAS]);
00023
00024 for (index_t i = 0; i < n_cells_; ++i)
00025 {
00026 index_t i_w = FI_PH_IND (i, d_w, n_phases);
00027 index_t i_g = FI_PH_IND (i, d_g, n_phases);
00028 index_t i_o = FI_PH_IND (i, d_o, n_phases);
00029
00030 item_t sat_w = 0.0, sat_g = 0.0, sat_o = 0.0;
00031
00032 if (is_w && n_phases > 1)
00033 sat_w = saturation_3p_[i_w];
00034 if (is_g && n_phases > 1)
00035 sat_g = saturation_3p_[i_g];
00036
00037 if (is_o && n_phases > 1)
00038 sat_o = saturation_3p_[i_o];
00039 #if 0
00040 if (is_o)
00041 {
00042 if (is_g && is_w)
00043 sat_o = 1.0 - sat_w - sat_g;
00044 else if (is_g)
00045 sat_o = 1.0 - sat_g;
00046 else if (is_w)
00047 sat_o = 1.0 - sat_w;
00048 }
00049 #endif //0
00050
00051 if (is_o)
00052 {
00053 if (n_phases > 1)
00054 data_[i].prev_fluid_volume[d_o] = data_[i].porosity * data_[i].invers_fvf[d_o] * sat_o;
00055 else
00056 data_[i].prev_fluid_volume[d_o] = data_[i].porosity * data_[i].invers_fvf[d_o];
00057 }
00058
00059 if (is_w)
00060 {
00061 if (n_phases > 1)
00062 data_[i].prev_fluid_volume[d_w] = data_[i].porosity * data_[i].invers_fvf[d_w] * sat_w;
00063 else
00064 data_[i].prev_fluid_volume[d_w] = data_[i].porosity * data_[i].invers_fvf[d_w];
00065 }
00066
00067 if (is_g)
00068 {
00069 if (is_o)
00070 {
00071 data_[i].prev_fluid_volume[d_g] = data_[i].porosity * gas_oil_ratio_[i] * sat_o * data_[i].invers_fvf[d_o];
00072 if (FI_CHK_SG (main_vars_, i))
00073 data_[i].prev_fluid_volume[d_g] += data_[i].porosity * data_[i].invers_fvf[d_g] * sat_g;
00074 }
00075 else
00076 data_[i].prev_fluid_volume[d_g] = data_[i].porosity * data_[i].invers_fvf[d_g];
00077 }
00078 }
00079 }
00080
00081 }
00082
00083 #endif // #ifndef BS_FI_OPERATOR_CALC_PREV_FLUID_VOLUME_H_
00084