diff --git a/Cantera/src/equil/vcs_MultiPhaseEquil.cpp b/Cantera/src/equil/vcs_MultiPhaseEquil.cpp index e584a8ba2..7b121e4ac 100644 --- a/Cantera/src/equil/vcs_MultiPhaseEquil.cpp +++ b/Cantera/src/equil/vcs_MultiPhaseEquil.cpp @@ -765,7 +765,7 @@ namespace VCSnonideal { tref.getPartialMolarVolumes(VCS_DATA_PTR(VolPM)); vcs_VolPhase *volP = m_vprob->VPhaseList[iphase]; - double TMolesPhase = volP->TotalMoles(); + double TMolesPhase = volP->totalMoles(); double VolPhaseVolumes = 0.0; for (k = 0; k < nSpecies; k++) { VolPhaseVolumes += VolPM[k] * mf[istart + k]; @@ -788,7 +788,7 @@ namespace VCSnonideal { Cantera::ThermoPhase *tp = &tref; string phaseName = tref.name(); vcs_VolPhase *volP = m_vprob->VPhaseList[iphase]; - double TMolesPhase = volP->TotalMoles(); + double TMolesPhase = volP->totalMoles(); //AssertTrace(TMolesPhase == m_mix->phaseMoles(iphase)); nSpecies = tref.nSpecies(); activity.resize(nSpecies, 0.0); @@ -1270,7 +1270,7 @@ namespace VCSnonideal { VolPhase->VP_ID, VolPhase->m_singleSpecies, VolPhase->m_gasPhase, sEOS.c_str(), VolPhase->nSpecies(), VolPhase->totalMolesInert() ); - plogf("%16e\n", VolPhase->TotalMoles()); + plogf("%16e\n", VolPhase->totalMoles()); } plogf("\n"); print_char('=', 80); plogf("\n"); @@ -1338,7 +1338,7 @@ namespace VCSnonideal { vprob->w[kglob] = tPhase->electricPotential(); } volPhase->setMolesFromVCS(VCS_STATECALC_OLD, VCS_DATA_PTR(vprob->w)); - if (volPhase->TotalMoles() > 0.0) { + if (volPhase->totalMoles() > 0.0) { volPhase->setExistence(1); } else { volPhase->setExistence(0); @@ -1389,7 +1389,7 @@ namespace VCSnonideal { VolPhase->VP_ID, VolPhase->m_singleSpecies, VolPhase->m_gasPhase, sEOS.c_str(), VolPhase->nSpecies(), VolPhase->totalMolesInert() ); - plogf("%16e\n", VolPhase->TotalMoles() ); + plogf("%16e\n", VolPhase->totalMoles() ); } plogf("\n"); print_char('=', 80); plogf("\n"); diff --git a/Cantera/src/equil/vcs_VolPhase.cpp b/Cantera/src/equil/vcs_VolPhase.cpp index cfbffd606..d5188b89f 100644 --- a/Cantera/src/equil/vcs_VolPhase.cpp +++ b/Cantera/src/equil/vcs_VolPhase.cpp @@ -522,13 +522,15 @@ namespace VCSnonideal { const int vcsStateStatus) { if (totalMoles != 0.0) { - if (vcsStateStatus != VCS_STATECALC_TMP) { + // There are other ways to set the mole fractions when VCS_STATECALC + // is set to a normal settting. + if (vcsStateStatus != VCS_STATECALC_TMP) { printf("vcs_VolPhase::setMolesFractionsState: inappropriate usage\n"); std::exit(-1); } m_UpToDate = false; m_vcsStateStatus = VCS_STATECALC_TMP; - if (m_existence == -VCS_PHASE_EXIST_ZEROEDPHASE ) { + if (m_existence == VCS_PHASE_EXIST_ZEROEDPHASE ) { printf("vcs_VolPhase::setMolesFractionsState: inappropriate usage\n"); std::exit(-1); } @@ -540,6 +542,7 @@ namespace VCSnonideal { m_existence = VCS_PHASE_EXIST_NO; } } + v_totalMoles = totalMoles; double sum = 0.0; for (int k = 0; k < m_numSpecies; k++) { Xmol[k] = moleFractions[k]; @@ -675,17 +678,20 @@ namespace VCSnonideal { * then updates this object with their values. This is essentially * a gather routine. * - * + * @param vcsStateStatus State calc value either VCS_STATECALC_OLD + * or VCS_STATECALC_NEW. With any other value + * nothing is done. + * * @param molesSpeciesVCS array of mole numbers. Note, * the indecises for species in * this array may not be contiguous. IndSpecies[] is needed * to gather the species into the local contiguous vector * format. */ - void vcs_VolPhase::setMolesFromVCSCheck(const int stateCalc, + void vcs_VolPhase::setMolesFromVCSCheck(const int vcsStateStatus, const double * molesSpeciesVCS, const double * const TPhMoles) { - setMolesFromVCS(stateCalc, molesSpeciesVCS); + setMolesFromVCS(vcsStateStatus, molesSpeciesVCS); /* * Check for consistency with TPhMoles[] */ @@ -710,16 +716,16 @@ namespace VCSnonideal { * It then updates this object with their values. This is essentially * a gather routine. * - * @param stateCalc State calc value either VCS_STATECALC_OLD - * or VCS_STATECALC_NEW. With any other value - * nothing is done. + * @param vcsStateStatus State calc value either VCS_STATECALC_OLD + * or VCS_STATECALC_NEW. With any other value + * nothing is done. * */ - void vcs_VolPhase::updateFromVCS_MoleNumbers(const int stateCalc) { - if (!m_UpToDate || (stateCalc != m_vcsStateStatus)) { - if (stateCalc == VCS_STATECALC_OLD || stateCalc == VCS_STATECALC_NEW) { + void vcs_VolPhase::updateFromVCS_MoleNumbers(const int vcsStateStatus) { + if (!m_UpToDate || (vcsStateStatus != m_vcsStateStatus)) { + if (vcsStateStatus == VCS_STATECALC_OLD || vcsStateStatus == VCS_STATECALC_NEW) { if (m_owningSolverObject) { - setMolesFromVCS(stateCalc); + setMolesFromVCS(vcsStateStatus); } } } @@ -736,9 +742,9 @@ namespace VCSnonideal { * in all of the phases in a VCS problem. Only the * entries for the current phase are filled in. */ - void vcs_VolPhase::sendToVCS_ActCoeff(const int stateCalc, + void vcs_VolPhase::sendToVCS_ActCoeff(const int vcsStateStatus, double * const AC) { - updateFromVCS_MoleNumbers(stateCalc); + updateFromVCS_MoleNumbers(vcsStateStatus); if (!m_UpToDate_AC) { _updateActCoeff(); } @@ -1126,7 +1132,7 @@ namespace VCSnonideal { } /***************************************************************************/ - double vcs_VolPhase::TotalMoles() const { + double vcs_VolPhase::totalMoles() const { return v_totalMoles; } /***************************************************************************/ diff --git a/Cantera/src/equil/vcs_VolPhase.h b/Cantera/src/equil/vcs_VolPhase.h index 11db63e00..0b7b6824e 100644 --- a/Cantera/src/equil/vcs_VolPhase.h +++ b/Cantera/src/equil/vcs_VolPhase.h @@ -158,6 +158,15 @@ namespace VCSnonideal { */ double AC_calc_one(int kspec) const; + + //! Set the moles and/or mole fractions within the phase + /*! + * Sets the mole fraction and total moles within the phase + * + * @param molNum total moles in the phase + * @param moleFracVec Vector of input mole fractions + * @param vcsStateStatus Status flag for this update + */ void setMoleFractionsState(const double molNum, const double * const moleFracVec, const int vcsStateStatus); @@ -362,7 +371,7 @@ namespace VCSnonideal { * Units -> depends on VCS_UnitsFormat variable * Cantera -> J/kmol */ - double TotalMoles() const; + double totalMoles() const; //! Returns the mole fraction of the kspec species /*! @@ -390,9 +399,9 @@ namespace VCSnonideal { //! Sets the mole flag within the object to be current /*! - * + * */ - void setMolesCurrent(int stateCalc); + void setMolesCurrent(int vcsStateStatus); private: //! Set the mole fractions from a conventional mole fraction vector @@ -404,7 +413,9 @@ namespace VCSnonideal { void setMoleFractions(const double * const xmol); public: - //! Return a const reference to the mole fractions + + //! Return a const reference to the mole fractions storred in the + //! object. const std::vector & moleFractions() const; //! Returns whether the phase is an ideal solution phase diff --git a/Cantera/src/equil/vcs_defs.h b/Cantera/src/equil/vcs_defs.h index 7627fb398..0df5f2cf2 100644 --- a/Cantera/src/equil/vcs_defs.h +++ b/Cantera/src/equil/vcs_defs.h @@ -334,8 +334,13 @@ namespace VCSnonideal { //! State Calculation based on the new or tentative mole numbers #define VCS_STATECALC_NEW 1 + //! State Calculation based on tentative mole numbers + //! for a phase which is currently zeroed, but is being + //! evaluated for whether it should pop back into existence +#define VCS_STATECALC_PHASESTABILITY 2 + //! State Calculation based on a temporary set of mole numbers -#define VCS_STATECALC_TMP 2 +#define VCS_STATECALC_TMP 3 //@} diff --git a/Cantera/src/equil/vcs_prob.cpp b/Cantera/src/equil/vcs_prob.cpp index 1e598ad20..4f8f705a6 100644 --- a/Cantera/src/equil/vcs_prob.cpp +++ b/Cantera/src/equil/vcs_prob.cpp @@ -286,7 +286,7 @@ namespace VCSnonideal { Vphase->VP_ID, Vphase->m_singleSpecies, Vphase->m_gasPhase); plogf("%16s %8d %16e ", EOS_cstr.c_str(), Vphase->nSpecies(), Vphase->totalMolesInert()); - if (iest >= 0) plogf("%16e\n", Vphase->TotalMoles()); + if (iest >= 0) plogf("%16e\n", Vphase->totalMoles()); else plogf(" N/A\n"); } @@ -493,7 +493,7 @@ namespace VCSnonideal { volPM.resize(nSpeciesPhase, 0.0); volP->sendToVCS_VolPM(VCS_DATA_PTR(volPM)); - double TMolesPhase = volP->TotalMoles(); + double TMolesPhase = volP->totalMoles(); double VolPhaseVolumes = 0.0; for (k = 0; k < nSpeciesPhase; k++) { iK++; @@ -520,7 +520,7 @@ namespace VCSnonideal { string phaseName = volP->PhaseName; int nSpeciesPhase = volP->nSpecies(); volP->sendToVCS_VolPM(VCS_DATA_PTR(volPM)); - double TMolesPhase = volP->TotalMoles(); + double TMolesPhase = volP->totalMoles(); //AssertTrace(TMolesPhase == m_mix->phaseMoles(iphase)); activity.resize(nSpeciesPhase, 0.0); ac.resize(nSpeciesPhase, 0.0); diff --git a/Cantera/src/equil/vcs_report.cpp b/Cantera/src/equil/vcs_report.cpp index 5421aee86..fafa84455 100644 --- a/Cantera/src/equil/vcs_report.cpp +++ b/Cantera/src/equil/vcs_report.cpp @@ -257,8 +257,8 @@ namespace VCSnonideal { plogf("%-12.12s |",VPhase->PhaseName.c_str()); plogf("%10.3e |", m_tPhaseMoles_old[iphase]*molScale); totalMoles += m_tPhaseMoles_old[iphase]; - if (m_tPhaseMoles_old[iphase] != VPhase->TotalMoles()) { - if (! vcs_doubleEqual(m_tPhaseMoles_old[iphase], VPhase->TotalMoles())) { + if (m_tPhaseMoles_old[iphase] != VPhase->totalMoles()) { + if (! vcs_doubleEqual(m_tPhaseMoles_old[iphase], VPhase->totalMoles())) { plogf("We have a problem\n"); exit(-1); } diff --git a/Cantera/src/equil/vcs_solve.cpp b/Cantera/src/equil/vcs_solve.cpp index f8983be00..2474a4a57 100644 --- a/Cantera/src/equil/vcs_solve.cpp +++ b/Cantera/src/equil/vcs_solve.cpp @@ -982,10 +982,10 @@ namespace VCSnonideal { vcs_VolPhase *pubPhase = pub->VPhaseList[iph]; vcs_VolPhase *vPhase = m_VolPhaseList[iph]; pubPhase->setTotalMolesInert(vPhase->totalMolesInert()); - pubPhase->setTotalMoles(vPhase->TotalMoles()); + pubPhase->setTotalMoles(vPhase->totalMoles()); pubPhase->setElectricPotential(vPhase->electricPotential()); double sumMoles = pubPhase->totalMolesInert(); - pubPhase->setMoleFractionsState(vPhase->TotalMoles(), + pubPhase->setMoleFractionsState(vPhase->totalMoles(), VCS_DATA_PTR(vPhase->moleFractions()), VCS_STATECALC_TMP); const std::vector & mfVector = pubPhase->moleFractions(); @@ -998,23 +998,23 @@ namespace VCSnonideal { if (! vcs_doubleEqual( pubPhase->electricPotential() , tmp)) { plogf("We have an inconsistency in voltage, %g, %g\n", pubPhase->electricPotential(), tmp); - exit(-1); + std::exit(-1); } } if (! vcs_doubleEqual( pub->mf[kT], vPhase->molefraction(k))) { plogf("We have an inconsistency in mole fraction, %g, %g\n", pub->mf[kT], vPhase->molefraction(k)); - exit(-1); + std::exit(-1); } if (pubPhase->speciesUnknownType(k) != VCS_SPECIES_TYPE_INTERFACIALVOLTAGE) { sumMoles += pub->w[kT]; } } - if (! vcs_doubleEqual(sumMoles, vPhase->TotalMoles())) { + if (! vcs_doubleEqual(sumMoles, vPhase->totalMoles())) { plogf("We have an inconsistency in total moles, %g %g\n", - sumMoles, pubPhase->TotalMoles()); - exit(-1); + sumMoles, pubPhase->totalMoles()); + std::exit(-1); } }