diff --git a/src/phreeqcpp/basicsubs.cpp b/src/phreeqcpp/basicsubs.cpp index 69eed0ed..1a6d11df 100644 --- a/src/phreeqcpp/basicsubs.cpp +++ b/src/phreeqcpp/basicsubs.cpp @@ -1676,26 +1676,41 @@ molality(const char *species_name) } /* ---------------------------------------------------------------------- */ LDBLE Phreeqc:: -pr_pressure(const char *phase_name) +pr_pressure(const char* phase_name) /* ---------------------------------------------------------------------- */ { - class phase *phase_ptr; - int l; - phase_ptr = phase_bsearch(phase_name, &l, FALSE); - if (phase_ptr == NULL) + cxxGasPhase* gas_phase_ptr = use.Get_gas_phase_ptr(); + if (gas_phase_ptr != NULL) { - error_string = sformatf( "Gas %s, not found.", phase_name); - warning_msg(error_string); - return (1e-99); + int l; + class phase* phase_ptr = phase_bsearch(phase_name, &l, FALSE); + if (phase_ptr == NULL) + { + error_string = sformatf("Gas %s, not found.", phase_name); + warning_msg(error_string); + return (1e-99); + } + for (size_t i = 0; i < gas_phase_ptr->Get_gas_comps().size(); i++) + { + const cxxGasComp* gas_comp_ptr = &(gas_phase_ptr->Get_gas_comps()[i]); + int j; + class phase* phase_ptr_gas = phase_bsearch(gas_comp_ptr->Get_phase_name().c_str(), &j, FALSE); + if (phase_ptr == phase_ptr_gas) + { + if (gas_phase_ptr->Get_pr_in()) + { + return phase_ptr->pr_p; + } + else + { + return gas_comp_ptr->Get_p(); + } + } + } } - else if (phase_ptr->in != FALSE && phase_ptr->pr_in) - { - return phase_ptr->pr_p; - } - return (0.0); + return(0.0); } - /* ---------------------------------------------------------------------- */ LDBLE Phreeqc:: pressure(void) @@ -1703,26 +1718,42 @@ pressure(void) { return (patm_x); } + /* ---------------------------------------------------------------------- */ LDBLE Phreeqc:: -pr_phi(const char *phase_name) +pr_phi(const char* phase_name) /* ---------------------------------------------------------------------- */ { - class phase *phase_ptr; - int l; - - phase_ptr = phase_bsearch(phase_name, &l, FALSE); - if (phase_ptr == NULL) + cxxGasPhase* gas_phase_ptr = use.Get_gas_phase_ptr(); + if (gas_phase_ptr != NULL) { - error_string = sformatf( "Gas %s, not found.", phase_name); - warning_msg(error_string); - return (1e-99); + int l; + class phase* phase_ptr = phase_bsearch(phase_name, &l, FALSE); + if (phase_ptr == NULL) + { + error_string = sformatf("Gas %s, not found.", phase_name); + warning_msg(error_string); + return (1e-99); + } + for (size_t i = 0; i < gas_phase_ptr->Get_gas_comps().size(); i++) + { + const cxxGasComp* gas_comp_ptr = &(gas_phase_ptr->Get_gas_comps()[i]); + int j; + class phase* phase_ptr_gas = phase_bsearch(gas_comp_ptr->Get_phase_name().c_str(), &j, FALSE); + if (phase_ptr == phase_ptr_gas) + { + if (gas_phase_ptr->Get_pr_in()) + { + return phase_ptr->pr_phi; + } + else + { + return gas_comp_ptr->Get_phi(); + } + } + } } - else if (phase_ptr->in != FALSE && phase_ptr->pr_in) - { - return phase_ptr->pr_phi; - } - return (1.0); + return(1.0); } /* ---------------------------------------------------------------------- */ LDBLE Phreeqc::