diff --git a/examples/Bourdet_1983_1/Bourdet_example_1.ini b/examples/Bourdet_1983_1/Bourdet_example_1.ini index 9d1c817..fba1012 100644 --- a/examples/Bourdet_1983_1/Bourdet_example_1.ini +++ b/examples/Bourdet_1983_1/Bourdet_example_1.ini @@ -61,6 +61,7 @@ rp_k = 1; rp_C = 1; rp_pi = 1; rp_re = 0; +rp_phi = 0; ########################################################################### @@ -75,6 +76,7 @@ jac_k = 0; jac_C = 0; jac_pi = 0; jac_re = 0; +jac_phi = 2; ########################################################################### diff --git a/examples/Bourdet_1983_1/Bourdet_example_1b.ini b/examples/Bourdet_1983_1/Bourdet_example_1b.ini index a36eb51..c8ea1ac 100644 --- a/examples/Bourdet_1983_1/Bourdet_example_1b.ini +++ b/examples/Bourdet_1983_1/Bourdet_example_1b.ini @@ -60,6 +60,7 @@ rp_k = 1; rp_C = 1; rp_pi = 1; rp_re = 0; +rp_phi = 0; ########################################################################### @@ -74,6 +75,7 @@ jac_k = 0; jac_C = 0; jac_pi = 0; jac_re = 2; +jac_phi = 2; ########################################################################### diff --git a/examples/Bourdet_1983_2/Bourdet_example_2.ini b/examples/Bourdet_1983_2/Bourdet_example_2.ini index d047708..61616ec 100644 --- a/examples/Bourdet_1983_2/Bourdet_example_2.ini +++ b/examples/Bourdet_1983_2/Bourdet_example_2.ini @@ -94,6 +94,7 @@ rp_pi = 1; rp_re = 0; rp_L = 0; rp_xf = 0; +rp_phi = 0; ############################################################################### # Derivatives: @@ -110,6 +111,7 @@ jac_pi = 0; jac_re = 2; jac_L = 2; jac_xf = 2; +jac_phi = 2; [Smoothing parameters] diff --git a/examples/Bourdet_1983b/Bourdet_1983b.ini b/examples/Bourdet_1983b/Bourdet_1983b.ini index 04aac5e..089d0bf 100644 --- a/examples/Bourdet_1983b/Bourdet_1983b.ini +++ b/examples/Bourdet_1983b/Bourdet_1983b.ini @@ -91,6 +91,7 @@ rp_C = 1; rp_pi = 1; rp_omega = 1; rp_lambda = 1; +rp_phi = 0; ############################################################################### @@ -107,6 +108,7 @@ jac_C = 2; jac_pi = 2; jac_omega = 2; jac_lambda = 2; +jac_phi = 2; [Smoothing parameters] diff --git a/examples/Bourdet_1983b/Bourdet_1983b_a.ini b/examples/Bourdet_1983b/Bourdet_1983b_a.ini index b8d1d89..715624d 100644 --- a/examples/Bourdet_1983b/Bourdet_1983b_a.ini +++ b/examples/Bourdet_1983b/Bourdet_1983b_a.ini @@ -88,6 +88,7 @@ rp_k = 1; rp_C = 1; rp_pi = 1; rp_L = 1; +rp_phi = 0; ############################################################################### @@ -103,6 +104,7 @@ jac_k = 0; jac_C = 0; jac_pi = 0; jac_L = 0; +jac_phi = 2; [Smoothing parameters] diff --git a/examples/Bourdet_1983b/Bourdet_1983b_b.ini b/examples/Bourdet_1983b/Bourdet_1983b_b.ini index 14eef0e..6a08cc2 100644 --- a/examples/Bourdet_1983b/Bourdet_1983b_b.ini +++ b/examples/Bourdet_1983b/Bourdet_1983b_b.ini @@ -85,6 +85,7 @@ rp_C = 1; rp_pi = 0; rp_omega = 1; rp_lambda = 1; +rp_phi = 0; ############################################################################### @@ -101,6 +102,7 @@ jac_C = 2; jac_pi = 2; jac_omega = 2; jac_lambda = 2; +jac_phi = 2; [Smoothing parameters] diff --git a/examples/Bourdet_1984/Bourdet_1984.ini b/examples/Bourdet_1984/Bourdet_1984.ini index 3eae9d7..4b749fc 100644 --- a/examples/Bourdet_1984/Bourdet_1984.ini +++ b/examples/Bourdet_1984/Bourdet_1984.ini @@ -83,6 +83,7 @@ rp_C = 1; rp_pi = 1; rp_omega = 1; rp_lambda = 1; +rp_phi = 0; ############################################################################### @@ -99,6 +100,7 @@ jac_C = 0; jac_pi = 0; jac_omega = 2; jac_lambda = 2; +jac_phi = 2; [Smoothing parameters] diff --git a/examples/DaPrat_1984_BU/DaPrat_1984_BU.ini b/examples/DaPrat_1984_BU/DaPrat_1984_BU.ini index e0f385c..df0d446 100644 --- a/examples/DaPrat_1984_BU/DaPrat_1984_BU.ini +++ b/examples/DaPrat_1984_BU/DaPrat_1984_BU.ini @@ -83,6 +83,7 @@ rp_C = 1; rp_pi = 1; rp_omega = 1; rp_lambda = 1; +rp_phi = 0; ############################################################################### @@ -99,6 +100,7 @@ jac_C = 2; jac_pi = 2; jac_omega = 2; jac_lambda = 2; +jac_phi = 2; [Smoothing parameters] diff --git a/examples/DaPrat_1984_DD/DaPrat_1984_DD.ini b/examples/DaPrat_1984_DD/DaPrat_1984_DD.ini index 21c34aa..2560de5 100644 --- a/examples/DaPrat_1984_DD/DaPrat_1984_DD.ini +++ b/examples/DaPrat_1984_DD/DaPrat_1984_DD.ini @@ -83,6 +83,7 @@ rp_C = 1; rp_pi = 0; rp_omega = 1; rp_lambda = 1; +rp_phi = 0; ############################################################################### @@ -99,6 +100,7 @@ jac_C = 2; jac_pi = 2; jac_omega = 2; jac_lambda = 2; +jac_phi = 2; [Smoothing parameters] diff --git a/examples/Gringarten_1979/Gringarten_example_1.ini b/examples/Gringarten_1979/Gringarten_example_1.ini index 5d4e138..872dd96 100644 --- a/examples/Gringarten_1979/Gringarten_example_1.ini +++ b/examples/Gringarten_1979/Gringarten_example_1.ini @@ -60,6 +60,7 @@ rp_k = 1; rp_C = 1; rp_pi = 1; rp_re = 0; +rp_phi = 0; ########################################################################### @@ -74,6 +75,7 @@ jac_k = 0; jac_C = 0; jac_pi = 0; jac_re = 0; +jac_phi = 2; ########################################################################### # Model: diff --git a/examples/Lee_2003_2_12/Lee_example_2_12.ini b/examples/Lee_2003_2_12/Lee_example_2_12.ini index d2588eb..04bb937 100644 --- a/examples/Lee_2003_2_12/Lee_example_2_12.ini +++ b/examples/Lee_2003_2_12/Lee_example_2_12.ini @@ -7,7 +7,7 @@ # ____________________________________________________________________ # # phi = 0,039 p_i = 4412 psia -# µ = 0,8 cp c_t = 17×10^-6 psi^-1 +# � = 0,8 cp c_t = 17�10^-6 psi^-1 # r_w = 0,198 ft B = 1,136 # q = 250 STB/d h = 69 ft # ____________________________________________________________________ @@ -95,6 +95,7 @@ rp_k = 1; rp_C = 1; rp_pi = 1; rp_re = 1; +rp_phi = 0; ########################################################################### @@ -109,6 +110,8 @@ jac_k = 0; jac_C = 0; jac_pi = 0; jac_re = 0; +jac_phi = 2; + [Smoothing parameters] diff --git a/examples/Lee_2003_2_12/Lee_example_2_12b.ini b/examples/Lee_2003_2_12/Lee_example_2_12b.ini index 55f67b1..b324153 100644 --- a/examples/Lee_2003_2_12/Lee_example_2_12b.ini +++ b/examples/Lee_2003_2_12/Lee_example_2_12b.ini @@ -7,7 +7,7 @@ # ____________________________________________________________________ # # phi = 0,039 p_i = 4412 psia -# µ = 0,8 cp c_t = 17×10^-6 psi^-1 +# � = 0,8 cp c_t = 17�10^-6 psi^-1 # r_w = 0,198 ft B = 1,136 # q = 250 STB/d h = 69 ft # ____________________________________________________________________ @@ -100,6 +100,7 @@ rp_w1x = 1; rp_w2x = 1; rp_w1y = 1; rp_w2y = 1; +rp_phi = 0; ########################################################################### @@ -117,6 +118,7 @@ jac_w1x = 2; jac_w2x = 2; jac_w1y = 2; jac_w2y = 2; +jac_phi = 2; [Smoothing parameters] diff --git a/examples/Lee_2003_2_12/Lee_example_2_12c.ini b/examples/Lee_2003_2_12/Lee_example_2_12c.ini index b2dad6c..064bc40 100644 --- a/examples/Lee_2003_2_12/Lee_example_2_12c.ini +++ b/examples/Lee_2003_2_12/Lee_example_2_12c.ini @@ -7,7 +7,7 @@ # ____________________________________________________________________ # # phi = 0,039 p_i = 4412 psia -# µ = 0,8 cp c_t = 17×10^-6 psi^-1 +# � = 0,8 cp c_t = 17�10^-6 psi^-1 # r_w = 0,198 ft B = 1,136 # q = 250 STB/d h = 69 ft # ____________________________________________________________________ @@ -100,6 +100,7 @@ rp_w1x = 1; rp_w2x = 1; rp_w1y = 1; rp_w2y = 1; +rp_phi = 0; ########################################################################### @@ -117,7 +118,7 @@ jac_w1x = 2; jac_w2x = 2; jac_w1y = 2; jac_w2y = 2; - +jac_phi = 2; [Smoothing parameters] Lder = 0.1; diff --git a/examples/Samad_1994_7/Samad_1994_7.ini b/examples/Samad_1994_7/Samad_1994_7.ini index 1027e9b..50b3444 100644 --- a/examples/Samad_1994_7/Samad_1994_7.ini +++ b/examples/Samad_1994_7/Samad_1994_7.ini @@ -81,6 +81,7 @@ rp_k = 1; rp_C = 1; rp_pi = 0; rp_xf = 1; +rp_phi = 0; ############################################################################### @@ -96,6 +97,7 @@ jac_k = 2; jac_C = 2; jac_pi = 2; jac_xf = 2; +jac_phi = 2; dx_xf = 1.0e-3; diff --git a/examples/Samad_1994_9/Samad_1994_9.ini b/examples/Samad_1994_9/Samad_1994_9.ini index 61dac82..da36dae 100644 --- a/examples/Samad_1994_9/Samad_1994_9.ini +++ b/examples/Samad_1994_9/Samad_1994_9.ini @@ -83,6 +83,7 @@ rp_C = 0; rp_pi = 0; rp_xf = 1; rp_fc = 1; +rp_phi = 0; ############################################################################### @@ -99,6 +100,7 @@ jac_C = 2; jac_pi = 2; jac_xf = 2; jac_fc = 2; +jac_phi = 2; [Smoothing parameters] diff --git a/src/captas.c b/src/captas.c index 3903c00..0c6c05b 100644 --- a/src/captas.c +++ b/src/captas.c @@ -1,6 +1,6 @@ /* - Computer Aided Pressure Transient Analysis (and Simulation?) – CAPTA(S?) + Computer Aided Pressure Transient Analysis (and Simulation?) � CAPTA(S?) Copyright (C) 2013 Carlos E. Pico This program is free software: you can redistribute it and/or modify @@ -534,7 +534,9 @@ void init_parameters(modelparameters *par) par->parnames[PENETRATION_RATIO] = "b"; par->parnames[MIDPOINT_ELEVATION] = "zw", par->parnames[EFFECTIVE_HEAT_CAPACITY] = "cpt", - par->parnames[INITIAL_TEMPERATURE] = "Ti"; + par->parnames[INITIAL_TEMPERATURE] = "Ti", + par->parnames[COEFFICIENT_JOULE_THOMSON] = "ejt", + par->parnames[POROSITY] = "phi"; /******************** pointers to delta_pwf functions ********************/ for(i = 0; i < NPMODELS; i++){ @@ -677,13 +679,11 @@ void read_inifile(modelparameters *par) par->units = iniparser_getint(ini, "Units system:units", OILFIELD); par->testtype = iniparser_getint(ini, "Test description:testtype", DRAWDOWN); - par->phi = iniparser_getdouble(ini, "Test description:phi", 0.0); par->B = iniparser_getdouble(ini, "Test description:B", 0.0); par->mu = iniparser_getdouble(ini, "Test description:mu", 0.0); par->h = iniparser_getdouble(ini, "Test description:h", 0.0); par->rw = iniparser_getdouble(ini, "Test description:rw", 0.0); par->ct = iniparser_getdouble(ini, "Test description:ct", 0.0); - par->ejt = iniparser_getdouble(ini, "Test description:ejt", 0.0); par->rhosc = iniparser_getdouble(ini, "Test description:rhosc", 0.0); par->cp = iniparser_getdouble(ini, "Test description:cp", 0.0); diff --git a/src/models/dTwf.c b/src/models/dTwf.c index 37f17ec..a689ae4 100644 --- a/src/models/dTwf.c +++ b/src/models/dTwf.c @@ -16,7 +16,7 @@ * Transient temperature behavior and analysis of single-phase liquid-water * geothermal reservoirs during drawdown and buildup tests: Part I. * Theory, new analytical and approximate solutions. -* Journal of Petroleum Science and Engineering, 146, 637–656. +* Journal of Petroleum Science and Engineering, 146, 637�656. * https://doi.org/10.1016/j.petrol.2016.08.003 */ @@ -28,21 +28,23 @@ double dTwf(const modelparameters *p, double t) { double a, b, cpR, f, d; - double k, S, cpt; + double k, S, cpt, ejt; gsl_set_error_handler_off(); k = p->rpval[PERMEABILITY]; S = p->rpval[SKIN_FACTOR]; cpt = p->rpval[EFFECTIVE_HEAT_CAPACITY]; + ejt = p->rpval[COEFFICIENT_JOULE_THOMSON]; + phi = p->rpval[POROSITY]; a = (p->C2 * p->qB * p->mu) / (k * p->h); - b = (p->rw * p->rw * p->phi * p->ct * p->mu ) / (4.0 * k * p->C1); + b = (p->rw * p->rw * phi * p->ct * p->mu ) / (4.0 * k * p->C1); cpR = (p->rhosc / p->B) * p->cp / cpt; - f = p->phi * cpR * (p->ejt + 1.0 / (p->rhosc * p->cp / p->B)) - p->ejt; - d = (p->phi * cpR * p->ct) * a * 0.5; + f = phi * cpR * (ejt + 1.0 / (p->rhosc * p->cp / p->B)) - ejt; + d = (phi * cpR * p->ct) * a * 0.5; - return -0.5*a*( -p->ejt*(gsl_sf_expint_E1(b/t) + 2.0*S) - f*gsl_sf_expint_E1(b/t + d) ); + return -0.5*a*( -ejt*(gsl_sf_expint_E1(b/t) + 2.0*S) - f*gsl_sf_expint_E1(b/t + d) ); } /*****************************************************************************/ diff --git a/src/models/dpwf.c b/src/models/dpwf.c index 7e56cf8..8944619 100644 --- a/src/models/dpwf.c +++ b/src/models/dpwf.c @@ -38,11 +38,12 @@ double dpwfbar(const void *parameters, double u) k = p->rpval[PERMEABILITY]; S = p->rpval[SKIN_FACTOR]; C = p->rpval[WELLBORE_STORAGE]; + phi = p->rpval[POROSITY]; rws = p->rw*exp(-S); a = (p->qB * p->mu * p->C2)/ (p->h * k); - b = (p->phi * p->mu * p->ct * rws * rws) / (k * p->C1); - CD = (C * p->C3) / (p->phi * p->h * p->ct * rws * rws); + b = (phi * p->mu * p->ct * rws * rws) / (k * p->C1); + CD = (C * p->C3) / (phi * p->h * p->ct * rws * rws); uD = (u * b); uDsqrt = sqrt(uD); @@ -70,12 +71,13 @@ double ddpwf_dkbar(const void *parameters, double u) k = p->rpval[PERMEABILITY]; S = p->rpval[SKIN_FACTOR]; C = p->rpval[WELLBORE_STORAGE]; + phi = p->rpval[POROSITY]; rws = p->rw*exp(-S); a = (p->qB * p->mu * p->C2) / (p->h * k); - y = (p->phi * p->mu * p->ct * rws * rws)/(p->C1); + y = (phi * p->mu * p->ct * rws * rws)/(p->C1); b = y / k; - CD = (C * p->C3) / (p->phi * p->h * p->ct * rws * rws); + CD = (C * p->C3) / (phi * p->h * p->ct * rws * rws); uD = (u * b); uDsqrt = sqrt(uD); @@ -104,12 +106,13 @@ double ddpwf_dSbar(const void *parameters, double u) k = p->rpval[PERMEABILITY]; S = p->rpval[SKIN_FACTOR]; C = p->rpval[WELLBORE_STORAGE]; + phi = p->rpval[POROSITY]; rws = p->rw*exp(-S); a = (p->qB * p->mu * p->C2) / (p->h * k); - y = (p->phi * p->mu * p->ct * p->rw * p->rw) / (k * p->C1); - b = (p->phi * p->mu * p->ct * rws * rws) / (k * p->C1); - z = (C * p->C3) / (p->phi * p->h * p->ct * p->rw * p->rw); + y = (phi * p->mu * p->ct * p->rw * p->rw) / (k * p->C1); + b = (phi * p->mu * p->ct * rws * rws) / (k * p->C1); + z = (C * p->C3) / (phi * p->h * p->ct * p->rw * p->rw); uD = (u * b); uDsqrt = sqrt(uD); diff --git a/src/models/dpwfc.c b/src/models/dpwfc.c index 55594c2..fb61898 100644 --- a/src/models/dpwfc.c +++ b/src/models/dpwfc.c @@ -45,12 +45,13 @@ double dpwfcbar(const void *parameters, double u) C = p->rpval[WELLBORE_STORAGE]; w1 = p->rpval[DISTANCE_TO_FAULT_1]; w2 = p->rpval[DISTANCE_TO_FAULT_2]; + phi = p->rpval[POROSITY]; rws = p->rw*exp(-S); a = (p->qB * p->mu * p->C2) / (p->h * k); - b = (p->phi * p->mu * p->ct * rws * rws) / (k * p->C1); - z = (p->phi * p->mu * p->ct) / (k * p->C1); - CD = (C * p->C3) / (p->phi * p->h * p->ct * rws * rws); + b = (phi * p->mu * p->ct * rws * rws) / (k * p->C1); + z = (phi * p->mu * p->ct) / (k * p->C1); + CD = (C * p->C3) / (phi * p->h * p->ct * rws * rws); aux0 = u*b; aux1 = sqrt(aux0); @@ -109,12 +110,13 @@ double ddpwfc_dkbar(const void *parameters, double u) C = p->rpval[WELLBORE_STORAGE]; w1 = p->rpval[DISTANCE_TO_FAULT_1]; w2 = p->rpval[DISTANCE_TO_FAULT_2]; + phi = p->rpval[POROSITY]; rws = p->rw*exp(-S); a = (p->qB * p->mu * p->C2) / (p->h * k); - b = (p->phi * p->mu * p->ct * rws * rws) / (k * p->C1); - z = (p->phi * p->mu * p->ct) / (k * p->C1); - CD = (C * p->C3) / (p->phi * p->h * p->ct * rws * rws); + b = (phi * p->mu * p->ct * rws * rws) / (k * p->C1); + z = (phi * p->mu * p->ct) / (k * p->C1); + CD = (C * p->C3) / (phi * p->h * p->ct * rws * rws); aux0 = u * b; aux1 = sqrt(aux0); @@ -179,13 +181,14 @@ double ddpwfc_dCbar(const void *parameters, double u) C = p->rpval[WELLBORE_STORAGE]; w1 = p->rpval[DISTANCE_TO_FAULT_1]; w2 = p->rpval[DISTANCE_TO_FAULT_2]; + phi = p->rpval[POROSITY]; rws = p->rw*exp(-S); a = (p->qB * p->mu * p->C2) / (p->h * k); - b = (p->phi * p->mu * p->ct * rws * rws) / (k * p->C1); - z = (p->phi * p->mu * p->ct) / (k * p->C1); - CD = (C * p->C3) / (p->phi * p->h * p->ct * rws * rws); - c = (p->C3) / (p->phi * p->h * p->ct * rws * rws); + b = (phi * p->mu * p->ct * rws * rws) / (k * p->C1); + z = (phi * p->mu * p->ct) / (k * p->C1); + CD = (C * p->C3) / (phi * p->h * p->ct * rws * rws); + c = (p->C3) / (phi * p->h * p->ct * rws * rws); aux0 = u * b; aux1 = sqrt(aux0); @@ -244,13 +247,14 @@ double ddpwfc_dSbar(const void *parameters, double u) C = p->rpval[WELLBORE_STORAGE]; w1 = p->rpval[DISTANCE_TO_FAULT_1]; w2 = p->rpval[DISTANCE_TO_FAULT_2]; + phi = p->rpval[POROSITY]; rws = p->rw*exp(-S); a = (p->qB * p->mu * p->C2) / (p->h * k); - b = (p->phi * p->mu * p->ct * rws * rws) / (k * p->C1); - y = (p->phi * p->mu * p->ct * p->rw * p->rw) / (k * p->C1); - z = (p->phi * p->mu * p->ct) / (k * p->C1); - w = (C * p->C3) / (p->phi * p->h * p->ct * p->rw * p->rw); + b = (phi * p->mu * p->ct * rws * rws) / (k * p->C1); + y = (phi * p->mu * p->ct * p->rw * p->rw) / (k * p->C1); + z = (phi * p->mu * p->ct) / (k * p->C1); + w = (C * p->C3) / (phi * p->h * p->ct * p->rw * p->rw); aux0 = u * b; aux1 = sqrt(aux0); @@ -309,12 +313,13 @@ double ddpwfc_dw1bar(const void *parameters, double u) C = p->rpval[WELLBORE_STORAGE]; w1 = p->rpval[DISTANCE_TO_FAULT_1]; w2 = p->rpval[DISTANCE_TO_FAULT_2]; + phi = p->rpval[POROSITY]; rws = p->rw*exp(-S); a = (p->qB * p->mu * p->C2) / (p->h * k); - b = (p->phi * p->mu * p->ct * rws * rws) / (k * p->C1); - z = (p->phi * p->mu * p->ct) / (k * p->C1); - CD = (C * p->C3) / (p->phi * p->h * p->ct * rws * rws); + b = (phi * p->mu * p->ct * rws * rws) / (k * p->C1); + z = (phi * p->mu * p->ct) / (k * p->C1); + CD = (C * p->C3) / (phi * p->h * p->ct * rws * rws); aux0 = u*b; aux1 = sqrt(aux0); @@ -378,12 +383,13 @@ double ddpwfc_dw2bar(const void *parameters, double u) C = p->rpval[WELLBORE_STORAGE]; w1 = p->rpval[DISTANCE_TO_FAULT_1]; w2 = p->rpval[DISTANCE_TO_FAULT_2]; + phi = p->rpval[POROSITY]; rws = p->rw*exp(-S); a = (p->qB * p->mu * p->C2) / (p->h * k); - b = (p->phi * p->mu * p->ct * rws * rws) / (k * p->C1); - z = (p->phi * p->mu * p->ct) / (k * p->C1); - CD = (C * p->C3) / (p->phi * p->h * p->ct * rws * rws); + b = (phi * p->mu * p->ct * rws * rws) / (k * p->C1); + z = (phi * p->mu * p->ct) / (k * p->C1); + CD = (C * p->C3) / (phi * p->h * p->ct * rws * rws); aux0 = u*b; aux1 = sqrt(aux0); diff --git a/src/models/dpwfcl.c b/src/models/dpwfcl.c index 1a505b0..541194d 100644 --- a/src/models/dpwfcl.c +++ b/src/models/dpwfcl.c @@ -36,11 +36,12 @@ double dpwfcl(const modelparameters *p, double t) S = p->rpval[SKIN_FACTOR]; w1 = p->rpval[DISTANCE_TO_FAULT_1]; w2 = p->rpval[DISTANCE_TO_FAULT_2]; + phi = p->rpval[POROSITY]; rws = p->rw * gsl_sf_exp(-S); a = (p->qB * p->mu * p->C2) / (p->h * k); - b = (p->phi * p->mu * p->ct * rws * rws) / (4.0*k * p->C1 * t); - z = (p->phi * p->mu * p->ct) / (4.0*k * p->C1 * t); + b = (phi * p->mu * p->ct * rws * rws) / (4.0*k * p->C1 * t); + z = (phi * p->mu * p->ct) / (4.0*k * p->C1 * t); while(fabs(delta) > epsilon) { wn = 2.0*(w1*i + w2*j); @@ -83,11 +84,12 @@ double ddpwfcl_dk(const modelparameters *p, double t) S = p->rpval[SKIN_FACTOR]; w1 = p->rpval[DISTANCE_TO_FAULT_1]; w2 = p->rpval[DISTANCE_TO_FAULT_2]; + phi = p->rpval[POROSITY]; rws = p->rw * gsl_sf_exp(-S); a = (p->qB * p->mu * p->C2) / (p->h * k); - b = (p->phi * p->mu * p->ct * rws * rws) / (4.0*k * p->C1 * t); - z = (p->phi * p->mu * p->ct) / (4.0*k * p->C1 * t); + b = (phi * p->mu * p->ct * rws * rws) / (4.0*k * p->C1 * t); + z = (phi * p->mu * p->ct) / (4.0*k * p->C1 * t); while( (fabs(delta) > epsilon) && (fabs(delta1) > epsilon) ) { wn = 2.0*(w1*i + w2*j); @@ -130,10 +132,11 @@ double ddpwfcl_dS(const modelparameters *p, double t) k = p->rpval[PERMEABILITY]; S = p->rpval[SKIN_FACTOR]; + phi = p->rpval[POROSITY]; rws = p->rw * gsl_sf_exp(-S); a = (p->qB * p->mu * p->C2) / (p->h * k); - b = (p->phi * p->mu * p->ct * rws * rws) / (4.0*k * p->C1 * t); + b = (phi * p->mu * p->ct * rws * rws) / (4.0*k * p->C1 * t); return a * gsl_sf_exp(-b); } @@ -156,9 +159,10 @@ double ddpwfcl_dw1(const modelparameters *p, double t) k = p->rpval[PERMEABILITY]; w1 = p->rpval[DISTANCE_TO_FAULT_1]; w2 = p->rpval[DISTANCE_TO_FAULT_2]; + phi = p->rpval[POROSITY]; a = (p->qB * p->mu * p->C2) / (p->h * k); - z = (p->phi * p->mu * p->ct) / (4.0*k * p->C1 * t); + z = (phi * p->mu * p->ct) / (4.0*k * p->C1 * t); while(fabs(delta) > epsilon) { wn = 2.0*(w1*i + w2*j); @@ -200,9 +204,10 @@ double ddpwfcl_dw2(const modelparameters *p, double t) k = p->rpval[PERMEABILITY]; w1 = p->rpval[DISTANCE_TO_FAULT_1]; w2 = p->rpval[DISTANCE_TO_FAULT_2]; + phi = p->rpval[POROSITY]; a = (p->qB * p->mu * p->C2) / (p->h * k); - z = (p->phi * p->mu * p->ct) / (4.0*k * p->C1 * t); + z = (phi * p->mu * p->ct) / (4.0*k * p->C1 * t); while(fabs(delta) > epsilon) { wn = 2.0*(w1*i + w2*j); diff --git a/src/models/dpwfcpob.c b/src/models/dpwfcpob.c index 50e8aac..a2ee8d4 100644 --- a/src/models/dpwfcpob.c +++ b/src/models/dpwfcpob.c @@ -38,12 +38,13 @@ double dpwfcpobbar(const void *parameters, double u) S = p->rpval[SKIN_FACTOR]; C = p->rpval[WELLBORE_STORAGE]; re = p->rpval[EXTERNAL_RADIUS]; + phi = p->rpval[POROSITY]; rws = p->rw*exp(-S); a = (p->qB * p->mu * p->C2) / (p->h * k); - b = (p->phi * p->mu * p->ct * rws * rws) / (k * p->C1); - z = (p->phi * p->mu * p->ct) / (k * p->C1); - CD = (C * p->C3) / (p->phi * p->h * p->ct * rws * rws); + b = (phi * p->mu * p->ct * rws * rws) / (k * p->C1); + z = (phi * p->mu * p->ct) / (k * p->C1); + CD = (C * p->C3) / (phi * p->h * p->ct * rws * rws); aux0 = (u * b); aux1 = sqrt(aux0); diff --git a/src/models/dpwfdp.c b/src/models/dpwfdp.c index b462004..f7ba473 100644 --- a/src/models/dpwfdp.c +++ b/src/models/dpwfdp.c @@ -40,13 +40,14 @@ double dpwfdpbar(const void *parameters, double u) C = p->rpval[WELLBORE_STORAGE]; omega = p->rpval[OMEGA]; lambda = p->rpval[LAMBDA]; + phi = p->rpval[POROSITY]; rws = p->rw*exp(-S); lambdas = lambda*exp(-2.0*S); a = (p->qB * p->mu * p->C2)/ (p->h * k); - b = (p->phi * p->mu * p->ct * rws * rws) / (k * p->C1); - CD = (C * p->C3) / (p->phi * p->h * p->ct * rws * rws); + b = (phi * p->mu * p->ct * rws * rws) / (k * p->C1); + CD = (C * p->C3) / (phi * p->h * p->ct * rws * rws); uD = u * b; f = (p->f)[p->model](uD, omega, lambdas); diff --git a/src/models/dpwff.c b/src/models/dpwff.c index e194196..84e664c 100644 --- a/src/models/dpwff.c +++ b/src/models/dpwff.c @@ -38,12 +38,13 @@ double dpwffbar(const void *parameters, double u) S = p->rpval[SKIN_FACTOR]; C = p->rpval[WELLBORE_STORAGE]; L = p->rpval[DISTANCE_TO_FAULT]; + phi = p->rpval[POROSITY]; rws = p->rw*exp(-S); a = (p->qB * p->mu * p->C2) / (p->h * k); - b = (p->phi * p->mu * p->ct * rws * rws) / (k * p->C1); - z = (p->phi * p->mu * p->ct) / (k * p->C1); - CD = (C * p->C3) / (p->phi * p->h * p->ct * rws * rws); + b = (phi * p->mu * p->ct * rws * rws) / (k * p->C1); + z = (phi * p->mu * p->ct) / (k * p->C1); + CD = (C * p->C3) / (phi * p->h * p->ct * rws * rws); aux0 = (u * b); aux1 = gsl_sf_bessel_K0(sqrt(aux0)); @@ -75,12 +76,13 @@ double ddpwff_dkbar(const void *parameters, double u) S = p->rpval[SKIN_FACTOR]; C = p->rpval[WELLBORE_STORAGE]; L = p->rpval[DISTANCE_TO_FAULT]; + phi = p->rpval[POROSITY]; rws = p->rw*exp(-S); a = (p->qB * p->mu * p->C2) / (p->h * k); - b = (p->phi * p->mu * p->ct * rws * rws) / (k * p->C1); - z = (p->phi * p->mu * p->ct) / (k * p->C1); - CD = (C * p->C3) / (p->phi * p->h * p->ct * rws * rws); + b = (phi * p->mu * p->ct * rws * rws) / (k * p->C1); + z = (phi * p->mu * p->ct) / (k * p->C1); + CD = (C * p->C3) / (phi * p->h * p->ct * rws * rws); aux0 = (u * b); aux1 = gsl_sf_bessel_K0(sqrt(aux0)); @@ -116,12 +118,13 @@ double ddpwff_dCbar(const void *parameters, double u) S = p->rpval[SKIN_FACTOR]; C = p->rpval[WELLBORE_STORAGE]; L = p->rpval[DISTANCE_TO_FAULT]; + phi = p->rpval[POROSITY]; rws = p->rw*exp(-S); a = (p->qB * p->mu * p->C2) / (p->h * k); - b = (p->phi * p->mu * p->ct * rws * rws) / (k * p->C1); - z = (p->phi * p->mu * p->ct) / (k * p->C1); - c = p->C3 / (p->phi * p->h * p->ct * rws * rws); + b = (phi * p->mu * p->ct * rws * rws) / (k * p->C1); + z = (phi * p->mu * p->ct) / (k * p->C1); + c = p->C3 / (phi * p->h * p->ct * rws * rws); aux0 = (u * b); aux1 = gsl_sf_bessel_K0(sqrt(aux0)); @@ -156,13 +159,14 @@ double ddpwff_dSbar(const void *parameters, double u) S = p->rpval[SKIN_FACTOR]; C = p->rpval[WELLBORE_STORAGE]; L = p->rpval[DISTANCE_TO_FAULT]; + phi = p->rpval[POROSITY]; rws = p->rw*exp(-S); a = (p->qB * p->mu * p->C2) / (p->h * k); - b = (p->phi * p->mu * p->ct * rws * rws) / (k * p->C1); - y = (p->phi * p->mu * p->ct * p->rw * p->rw) / (k * p->C1); - z = (p->phi * p->mu * p->ct) / (k * p->C1); - w = (C * p->C3) / (p->phi * p->h * p->ct * p->rw * p->rw); + b = (phi * p->mu * p->ct * rws * rws) / (k * p->C1); + y = (phi * p->mu * p->ct * p->rw * p->rw) / (k * p->C1); + z = (phi * p->mu * p->ct) / (k * p->C1); + w = (C * p->C3) / (phi * p->h * p->ct * p->rw * p->rw); aux0 = (u * b); aux1 = gsl_sf_bessel_K0(sqrt(aux0)); @@ -197,12 +201,13 @@ double ddpwff_dLbar(const void *parameters, double u) S = p->rpval[SKIN_FACTOR]; C = p->rpval[WELLBORE_STORAGE]; L = p->rpval[DISTANCE_TO_FAULT]; + phi = p->rpval[POROSITY]; rws = p->rw*exp(-S); a = (p->qB * p->mu * p->C2) / (p->h * k); - b = (p->phi * p->mu * p->ct * rws * rws) / (k * p->C1); - z = (p->phi * p->mu * p->ct) / (k * p->C1); - CD = (C * p->C3) / (p->phi * p->h * p->ct * rws * rws); + b = (phi * p->mu * p->ct * rws * rws) / (k * p->C1); + z = (phi * p->mu * p->ct) / (k * p->C1); + CD = (C * p->C3) / (phi * p->h * p->ct * rws * rws); aux0 = (u * b); aux1 = gsl_sf_bessel_K0(sqrt(aux0)); diff --git a/src/models/dpwffcf.c b/src/models/dpwffcf.c index a059ef9..ba297ce 100644 --- a/src/models/dpwffcf.c +++ b/src/models/dpwffcf.c @@ -55,10 +55,11 @@ double dpwffcfbar(const void *parameters, double u) C = p->rpval[WELLBORE_STORAGE]; xf = p->rpval[FRACTURE_HALF_LENGTH]; fc = p->rpval[FRACTURE_CONDUCTIVITY]; + phi = p->rpval[POROSITY]; a = (p->qB * p->mu * p->C2)/ (p->h * k); - b = (p->phi * p->mu * p->ct * xf * xf) / (k * p->C1); - CD = (C * p->C3) / (p->phi * p->h * p->ct * xf * xf); + b = (phi * p->mu * p->ct * xf * xf) / (k * p->C1); + CD = (C * p->C3) / (phi * p->h * p->ct * xf * xf); uD = u * b; CfD = fc / (k * xf); @@ -145,10 +146,11 @@ double ddpwffcf_dSbar(const void *parameters, double u) C = p->rpval[WELLBORE_STORAGE]; xf = p->rpval[FRACTURE_HALF_LENGTH]; fc = p->rpval[FRACTURE_CONDUCTIVITY]; + phi = p->rpval[POROSITY]; a = (p->qB * p->mu * p->C2)/ (p->h * k); - b = (p->phi * p->mu * p->ct * xf * xf) / (k * p->C1); - CD = (C * p->C3) / (p->phi * p->h * p->ct * xf * xf); + b = (phi * p->mu * p->ct * xf * xf) / (k * p->C1); + CD = (C * p->C3) / (phi * p->h * p->ct * xf * xf); uD = u * b; CfD = fc / (k * xf); diff --git a/src/models/dpwficf.c b/src/models/dpwficf.c index 751a5c3..766053d 100644 --- a/src/models/dpwficf.c +++ b/src/models/dpwficf.c @@ -50,12 +50,13 @@ double dpwficfbar(const void *parameters, double u) S = p->rpval[SKIN_FACTOR]; C = p->rpval[WELLBORE_STORAGE]; xf = p->rpval[FRACTURE_HALF_LENGTH]; + phi = p->rpval[POROSITY]; xD = 0.732; // for infinite conductivity behavior a = (p->qB * p->mu * p->C2)/ (p->h * k); - b = (p->phi * p->mu * p->ct * xf * xf) / (k * p->C1); - CD = (C * p->C3) / (p->phi * p->h * p->ct * xf * xf); + b = (phi * p->mu * p->ct * xf * xf) / (k * p->C1); + CD = (C * p->C3) / (phi * p->h * p->ct * xf * xf); uD = u * b; lim_1 = sqrt(uD) * (1.0 - xD); @@ -129,12 +130,13 @@ double ddpwficf_dSbar(const void *parameters, double u) S = p->rpval[SKIN_FACTOR]; C = p->rpval[WELLBORE_STORAGE]; xf = p->rpval[FRACTURE_HALF_LENGTH]; + phi = p->rpval[POROSITY]; xD = 0.732; // for infinite conductivity behavior a = (p->qB * p->mu * p->C2)/ (p->h * k); - b = (p->phi * p->mu * p->ct * xf * xf) / (k * p->C1); - CD = (C * p->C3) / (p->phi * p->h * p->ct * xf * xf); + b = (phi * p->mu * p->ct * xf * xf) / (k * p->C1); + CD = (C * p->C3) / (phi * p->h * p->ct * xf * xf); uD = u * b; lim_1 = sqrt(uD) * (1.0 - xD); diff --git a/src/models/dpwfle.c b/src/models/dpwfle.c index c80a360..0caa265 100644 --- a/src/models/dpwfle.c +++ b/src/models/dpwfle.c @@ -47,6 +47,7 @@ double dpwflebar(const void *parameters, double u) krat = p->rpval[PERMEABILITY_RATIO]; b = p->rpval[PENETRATION_RATIO]; zw = p->rpval[MIDPOINT_ELEVATION]; + phi = p->rpval[POROSITY]; rws = p->rw*exp(-S); hD = (p->h /rws) * sqrt(krat); @@ -56,8 +57,8 @@ double dpwflebar(const void *parameters, double u) zwD = (zw/rws) * sqrt(krat); a = (p->qB * p->mu * p->C2)/ (p->h * k); - d = (p->phi * p->mu * p->ct * rws * rws) / (k * p->C1); - CD = (C * p->C3) / (p->phi * p->h * p->ct * rws * rws); + d = (phi * p->mu * p->ct * rws * rws) / (k * p->C1); + CD = (C * p->C3) / (phi * p->h * p->ct * rws * rws); uD = u * d; n = 1; diff --git a/src/models/dpwfnfob.c b/src/models/dpwfnfob.c index 70790b1..829af6a 100644 --- a/src/models/dpwfnfob.c +++ b/src/models/dpwfnfob.c @@ -37,12 +37,13 @@ double dpwfnfobbar(const void *parameters, double u) S = p->rpval[SKIN_FACTOR]; C = p->rpval[WELLBORE_STORAGE]; re = p->rpval[EXTERNAL_RADIUS]; + phi = p->rpval[POROSITY]; rws = p->rw*exp(-S); a = (p->qB * p->mu * p->C2) / (p->h * k); - b = (p->phi * p->mu * p->ct * rws * rws) / (k * p->C1); - z = (p->phi * p->mu * p->ct) / (k * p->C1); - CD = (C * p->C3) / (p->phi * p->h * p->ct * rws * rws); + b = (phi * p->mu * p->ct * rws * rws) / (k * p->C1); + z = (phi * p->mu * p->ct) / (k * p->C1); + CD = (C * p->C3) / (phi * p->h * p->ct * rws * rws); aux0 = (u * b); aux1 = sqrt(aux0); @@ -101,12 +102,13 @@ double ddpwfnfob_dSbar(const void *parameters, double u) S = p->rpval[SKIN_FACTOR]; C = p->rpval[WELLBORE_STORAGE]; re = p->rpval[EXTERNAL_RADIUS]; + phi = p->rpval[POROSITY]; rws = p->rw*exp(-S); a = (p->qB * p->mu * p->C2) / (p->h * k); - b = (p->phi * p->mu * p->ct * rws * rws) / (k * p->C1); - z = (p->phi * p->mu * p->ct) / (k * p->C1); - CD = (C * p->C3) / (p->phi * p->h * p->ct * rws * rws); + b = (phi * p->mu * p->ct * rws * rws) / (k * p->C1); + z = (phi * p->mu * p->ct) / (k * p->C1); + CD = (C * p->C3) / (phi * p->h * p->ct * rws * rws); aux0 = (u * b); aux1 = sqrt(aux0); @@ -146,12 +148,13 @@ double ddpwfnfob_drebar(const void *parameters, double u) S = p->rpval[SKIN_FACTOR]; C = p->rpval[WELLBORE_STORAGE]; re = p->rpval[EXTERNAL_RADIUS]; + phi = p->rpval[POROSITY]; rws = p->rw*exp(-S); a = (p->qB * p->mu * p->C2) / (p->h * k); - b = (p->phi * p->mu * p->ct * rws * rws) / (k * p->C1); - z = (p->phi * p->mu * p->ct) / (k * p->C1); - CD = (C * p->C3) / (p->phi * p->h * p->ct * rws * rws); + b = (phi * p->mu * p->ct * rws * rws) / (k * p->C1); + z = (phi * p->mu * p->ct) / (k * p->C1); + CD = (C * p->C3) / (phi * p->h * p->ct * rws * rws); aux0 = (u * b); aux1 = sqrt(aux0); @@ -195,12 +198,13 @@ double ddpwfnfob_dkbar(const void *parameters, double u) S = p->rpval[SKIN_FACTOR]; C = p->rpval[WELLBORE_STORAGE]; re = p->rpval[EXTERNAL_RADIUS]; + phi = p->rpval[POROSITY]; rws = p->rw*exp(-S); a = (p->qB * p->mu * p->C2) / (p->h * k); - b = (p->phi * p->mu * p->ct * rws * rws) / (k * p->C1); - z = (p->phi * p->mu * p->ct) / (k * p->C1); - CD = (C * p->C3) / (p->phi * p->h * p->ct * rws * rws); + b = (phi * p->mu * p->ct * rws * rws) / (k * p->C1); + z = (phi * p->mu * p->ct) / (k * p->C1); + CD = (C * p->C3) / (phi * p->h * p->ct * rws * rws); aux0 = (u * b); aux1 = sqrt(aux0); diff --git a/src/models/dpwfrect.c b/src/models/dpwfrect.c index 3d69c39..6c97c51 100644 --- a/src/models/dpwfrect.c +++ b/src/models/dpwfrect.c @@ -46,12 +46,13 @@ double dpwfrectbar(const void *parameters, double u) w2x = p->rpval[DISTANCE_TO_FAULT_2_X]; w1y = p->rpval[DISTANCE_TO_FAULT_1_Y]; w2y = p->rpval[DISTANCE_TO_FAULT_2_Y]; + phi = p->rpval[POROSITY]; rws = p->rw*exp(-S); a = (p->qB * p->mu * p->C2) / (p->h * k); - b = (p->phi * p->mu * p->ct * rws * rws) / (k * p->C1); - c = (p->phi * p->mu * p->ct) / (k * p->C1); - CD = (C * p->C3) / (p->phi * p->h * p->ct * rws * rws); + b = (phi * p->mu * p->ct * rws * rws) / (k * p->C1); + c = (phi * p->mu * p->ct) / (k * p->C1); + CD = (C * p->C3) / (phi * p->h * p->ct * rws * rws); aux0 = (u*b); numer = gsl_sf_bessel_K0(sqrt(aux0)); diff --git a/src/models/modelparam.h b/src/models/modelparam.h index 31a4a28..a46bd90 100644 --- a/src/models/modelparam.h +++ b/src/models/modelparam.h @@ -30,6 +30,8 @@ #define MIDPOINT_ELEVATION 18 #define EFFECTIVE_HEAT_CAPACITY 19 #define INITIAL_TEMPERATURE 20 +#define COEFFICIENT_JOULE_THOMSON 21 +#define POROSITY 22 typedef struct { @@ -57,12 +59,10 @@ typedef struct double B, // formation volume factor qB, // sand face flow rate - phi, // porosity mu, // viscosity ct, // total compressibility rw, // wellbore radius h, // formation thickness - ejt, // joule-thomson coefficient rhosc, // density at standard conditions cp; // specific heat capacity