00001
00010 #ifndef BS_WELLS_WELL_RATE_CONTROL_IMPL_TYPE_H_
00011 #define BS_WELLS_WELL_RATE_CONTROL_IMPL_TYPE_H_
00012
00013 namespace blue_sky
00014 {
00015 namespace wells
00016 {
00017 template <typename rate_type, typename bhp_deriv_type, typename rate_deriv_type>
00018 struct compute_impl
00019 {
00020 typedef typename rate_type::strategy_t strategy_t;
00021 typedef typename rate_type::mobility_t mobility_t;
00022 typedef rate_type rate_t;
00023 typedef bhp_deriv_type bhp_deriv_t;
00024 typedef rate_deriv_type rate_deriv_t;
00025 };
00026
00027 template <typename strategy_type>
00028 struct compute_dummy_type
00029 {
00030 typedef strategy_type strategy_t;
00031 typedef mobility_calc_inj <strategy_t> mobility_calc_inj_t;
00032 typedef mobility_calc_prod <strategy_t> mobility_calc_prod_t;
00033 typedef compute_impl <dummy_deriv <mobility_calc_inj_t>, dummy_deriv <mobility_calc_inj_t>, dummy_deriv <mobility_calc_inj_t> > inj_impl_t;
00034 typedef compute_impl <dummy_deriv <mobility_calc_prod_t>, dummy_deriv <mobility_calc_prod_t>, dummy_deriv <mobility_calc_prod_t> > prod_impl_t;
00035 };
00036
00037 template <typename strategy_type>
00038 struct compute_bhp_3p_type
00039 {
00040 typedef strategy_type strategy_t;
00041 typedef mobility_calc_inj <strategy_t> mobility_calc_inj_t;
00042 typedef mobility_calc_prod <strategy_t> mobility_calc_prod_t;
00043 typedef compute_impl <compute_rate_3p <mobility_calc_inj_t>, compute_bhp_deriv_3p <mobility_calc_inj_t>, dummy_deriv <mobility_calc_inj_t> > inj_impl_t;
00044 typedef compute_impl <compute_rate_3p <mobility_calc_prod_t>, compute_bhp_deriv_3p <mobility_calc_prod_t>, dummy_deriv <mobility_calc_prod_t> > prod_impl_t;
00045 };
00046
00047 template <typename strategy_type>
00048 struct compute_rate_3p_type
00049 {
00050 typedef strategy_type strategy_t;
00051 typedef mobility_calc_inj <strategy_t> mobility_calc_inj_t;
00052 typedef mobility_calc_prod <strategy_t> mobility_calc_prod_t;
00053 typedef compute_impl <compute_rate_3p <mobility_calc_inj_t>, compute_bhp_deriv_3p <mobility_calc_inj_t>, compute_rate_deriv_3p <mobility_calc_inj_t> > inj_impl_t;
00054 typedef compute_impl <compute_rate_3p <mobility_calc_prod_t>, compute_bhp_deriv_3p <mobility_calc_prod_t>, compute_rate_deriv_3p <mobility_calc_prod_t> > prod_impl_t;
00055 };
00056
00057 template <typename strategy_type>
00058 struct compute_bhp_2p_ow_type
00059 {
00060 typedef strategy_type strategy_t;
00061 typedef mobility_calc_inj <strategy_t> mobility_calc_inj_t;
00062 typedef mobility_calc_prod <strategy_t> mobility_calc_prod_t;
00063 typedef compute_impl <compute_rate_2p_ow <mobility_calc_inj_t>, compute_bhp_deriv_2p_ow <mobility_calc_inj_t>, dummy_deriv <mobility_calc_inj_t> > inj_impl_t;
00064 typedef compute_impl <compute_rate_2p_ow <mobility_calc_prod_t>, compute_bhp_deriv_2p_ow <mobility_calc_prod_t>, dummy_deriv <mobility_calc_prod_t> > prod_impl_t;
00065 };
00066
00067 template <typename strategy_type>
00068 struct compute_rate_2p_ow_type
00069 {
00070 typedef strategy_type strategy_t;
00071 typedef mobility_calc_inj <strategy_t> mobility_calc_inj_t;
00072 typedef mobility_calc_prod <strategy_t> mobility_calc_prod_t;
00073 typedef compute_impl <compute_rate_2p_ow <mobility_calc_inj_t>, compute_bhp_deriv_2p_ow <mobility_calc_inj_t>, compute_rate_deriv_2p_ow <mobility_calc_inj_t> > inj_impl_t;
00074 typedef compute_impl <compute_rate_2p_ow <mobility_calc_prod_t>, compute_bhp_deriv_2p_ow <mobility_calc_prod_t>, compute_rate_deriv_2p_ow <mobility_calc_prod_t> > prod_impl_t;
00075 };
00076
00077 template <typename strategy_type>
00078 struct compute_bhp_2p_og_type
00079 {
00080 typedef strategy_type strategy_t;
00081 typedef mobility_calc_inj <strategy_t> mobility_calc_inj_t;
00082 typedef mobility_calc_prod <strategy_t> mobility_calc_prod_t;
00083 typedef compute_impl <compute_rate_2p_og <mobility_calc_inj_t>, compute_bhp_deriv_2p_og <mobility_calc_inj_t>, dummy_deriv <mobility_calc_inj_t> > inj_impl_t;
00084 typedef compute_impl <compute_rate_2p_og <mobility_calc_prod_t>, compute_bhp_deriv_2p_og <mobility_calc_prod_t>, dummy_deriv <mobility_calc_prod_t> > prod_impl_t;
00085 };
00086
00087 template <typename strategy_type>
00088 struct compute_rate_2p_og_type
00089 {
00090 typedef strategy_type strategy_t;
00091 typedef mobility_calc_inj <strategy_t> mobility_calc_inj_t;
00092 typedef mobility_calc_prod <strategy_t> mobility_calc_prod_t;
00093 typedef compute_impl <compute_rate_2p_og <mobility_calc_inj_t>, compute_bhp_deriv_2p_og <mobility_calc_inj_t>, compute_rate_deriv_2p_og <mobility_calc_inj_t> > inj_impl_t;
00094 typedef compute_impl <compute_rate_2p_og <mobility_calc_prod_t>, compute_bhp_deriv_2p_og <mobility_calc_prod_t>, compute_rate_deriv_2p_og <mobility_calc_prod_t> > prod_impl_t;
00095 };
00096
00097 template <typename strategy_type>
00098 struct compute_bhp_1p_o_type
00099 {
00100 typedef strategy_type strategy_t;
00101 typedef mobility_calc_inj <strategy_t> mobility_calc_inj_t;
00102 typedef mobility_calc_prod <strategy_t> mobility_calc_prod_t;
00103 typedef compute_impl <compute_rate_1p_o <mobility_calc_inj_t>, compute_bhp_deriv_1p_o <mobility_calc_inj_t>, dummy_deriv <mobility_calc_inj_t> > inj_impl_t;
00104 typedef compute_impl <compute_rate_1p_o <mobility_calc_prod_t>, compute_bhp_deriv_1p_o <mobility_calc_prod_t>, dummy_deriv <mobility_calc_prod_t> > prod_impl_t;
00105 };
00106
00107 template <typename strategy_type>
00108 struct compute_rate_1p_o_type
00109 {
00110 typedef strategy_type strategy_t;
00111 typedef mobility_calc_inj <strategy_t> mobility_calc_inj_t;
00112 typedef mobility_calc_prod <strategy_t> mobility_calc_prod_t;
00113 typedef compute_impl <compute_rate_1p_o <mobility_calc_inj_t>, compute_bhp_deriv_1p_o <mobility_calc_inj_t>, compute_rate_deriv_1p_o <mobility_calc_inj_t> > inj_impl_t;
00114 typedef compute_impl <compute_rate_1p_o <mobility_calc_prod_t>, compute_bhp_deriv_1p_o <mobility_calc_prod_t>, compute_rate_deriv_1p_o <mobility_calc_prod_t> > prod_impl_t;
00115 };
00116 template <typename strategy_type>
00117 struct compute_bhp_1p_w_type
00118 {
00119 typedef strategy_type strategy_t;
00120 typedef mobility_calc_inj <strategy_t> mobility_calc_inj_t;
00121 typedef mobility_calc_prod <strategy_t> mobility_calc_prod_t;
00122 typedef compute_impl <compute_rate_1p_w <mobility_calc_inj_t>, compute_bhp_deriv_1p_w <mobility_calc_inj_t>, dummy_deriv <mobility_calc_inj_t> > inj_impl_t;
00123 typedef compute_impl <compute_rate_1p_w <mobility_calc_prod_t>, compute_bhp_deriv_1p_w <mobility_calc_prod_t>, dummy_deriv <mobility_calc_prod_t> > prod_impl_t;
00124 };
00125
00126 template <typename strategy_type>
00127 struct compute_rate_1p_w_type
00128 {
00129 typedef strategy_type strategy_t;
00130 typedef mobility_calc_inj <strategy_t> mobility_calc_inj_t;
00131 typedef mobility_calc_prod <strategy_t> mobility_calc_prod_t;
00132 typedef compute_impl <compute_rate_1p_w <mobility_calc_inj_t>, compute_bhp_deriv_1p_w <mobility_calc_inj_t>, compute_rate_deriv_1p_w <mobility_calc_inj_t> > inj_impl_t;
00133 typedef compute_impl <compute_rate_1p_w <mobility_calc_prod_t>, compute_bhp_deriv_1p_w <mobility_calc_prod_t>, compute_rate_deriv_1p_w <mobility_calc_prod_t> > prod_impl_t;
00134 };
00135 template <typename strategy_type>
00136 struct compute_bhp_1p_g_type
00137 {
00138 typedef strategy_type strategy_t;
00139 typedef mobility_calc_inj <strategy_t> mobility_calc_inj_t;
00140 typedef mobility_calc_prod <strategy_t> mobility_calc_prod_t;
00141 typedef compute_impl <compute_rate_1p_g <mobility_calc_inj_t>, compute_bhp_deriv_1p_g <mobility_calc_inj_t>, dummy_deriv <mobility_calc_inj_t> > inj_impl_t;
00142 typedef compute_impl <compute_rate_1p_g <mobility_calc_prod_t>, compute_bhp_deriv_1p_g <mobility_calc_prod_t>, dummy_deriv <mobility_calc_prod_t> > prod_impl_t;
00143 };
00144
00145 template <typename strategy_type>
00146 struct compute_rate_1p_g_type
00147 {
00148 typedef strategy_type strategy_t;
00149 typedef mobility_calc_inj <strategy_t> mobility_calc_inj_t;
00150 typedef mobility_calc_prod <strategy_t> mobility_calc_prod_t;
00151 typedef compute_impl <compute_rate_1p_g <mobility_calc_inj_t>, compute_bhp_deriv_1p_g <mobility_calc_inj_t>, compute_rate_deriv_1p_g <mobility_calc_inj_t> > inj_impl_t;
00152 typedef compute_impl <compute_rate_1p_g <mobility_calc_prod_t>, compute_bhp_deriv_1p_g <mobility_calc_prod_t>, compute_rate_deriv_1p_g <mobility_calc_prod_t> > prod_impl_t;
00153 };
00154 }
00155 }
00156
00157
00158 #endif // #ifndef BS_WELLS_WELL_RATE_CONTROL_TYPE_H_
00159