38 class VCS_SPECIES_THERMO;
73 void vcs_initSizes(
const size_t nspecies0,
const size_t nelements,
const size_t nphase0);
110 int vcs(
VCS_PROB* vprob,
int ifunc,
int ipr,
int ip1,
int maxit);
137 int vcs_solve_TP(
int print_lvl,
int printDetails,
int maxit);
139 int vcs_PS(
VCS_PROB* vprob,
int iph,
int printLvl,
double& feStable);
208 int vcs_basopt(
const bool doJustComponents,
double aw[],
double sa[],
double sm[],
209 double ss[],
double test,
bool*
const usedZeroedSpecies);
222 size_t vcs_basisOptMax(
const double*
const molNum,
const size_t j,
const size_t n);
349 void vcs_chemPotPhase(
const int stateCalc,
const size_t iph,
const double*
const molNum,
350 double*
const ac,
double*
const mu_i,
351 const bool do_deleted =
false);
438 void vcs_dfe(
const int stateCalc,
const int ll,
const size_t lbot,
const size_t ltop);
542 void check_tmoles()
const;
574 void vcs_deltag(
const int l,
const bool doDeleted,
const int vcsState,
575 const bool alterZeroedPhases =
true);
577 void vcs_printDeltaG(
const int stateCalc);
598 const int stateCalc,
const bool alterZeroedPhases =
true);
614 void vcs_switch_pos(
const bool ifunc,
const size_t k1,
const size_t k2);
694 int vcs_TP(
int ipr,
int ip1,
int maxit,
double T,
double pres);
706 int vcs_evalSS_TP(
int ipr,
int ip1,
double Temp,
double pres);
732 double vcs_VolTotal(
const double tkelvin,
const double pres,
733 const double w[],
double volPM[]);
833 double*
const sm,
double*
const ss);
1030 void vcs_elabPhase(
size_t iphase,
double*
const elemAbundPhase);
1108 const double*
const fe);
1205 int delta_species(
const size_t kspec,
double*
const delta_ptr);
1353 const size_t k1,
const size_t k2)
const;
1361 double l2normdg(
double dg[])
const;
1368 void checkDelta1(
double*
const ds,
double*
const delTPhMoles,
int kspec);
1383 void vcs_inest(
double*
const aw,
double*
const sa,
double*
const sm,
1384 double*
const ss,
double test);
1414 const size_t irxn,
const double*
const molNum,
1415 double*
const ac,
double*
const mu_i);
1441 void vcs_setFlagsVolPhases(
const bool upToDate,
const int stateCalc);
1443 void vcs_setFlagsVolPhase(
const size_t iph,
const bool upToDate,
const int stateCalc);
1487 int vcs_rank(
const double* awtmp,
size_t numSpecies,
const double* matrix,
size_t numElemConstraints,
1488 std::vector<size_t> &compRes, std::vector<size_t> &elemComp,
int*
const usedZeroedSpecies)
const;
1951 std::vector<std::vector<size_t> > phasePopProblemLists_;
2020 friend class vcs_phaseStabilitySolve;
std::vector< double > m_SSfeSpecies
Standard state chemical potentials for species K at the current temperature and pressure.
void vcs_elab()
Computes the current elemental abundances vector.
std::vector< double > m_deltaGRxn_tmp
Temporary vector of Rxn DeltaG's.
char m_unitsState
This specifies the current state of units for the Gibbs free energy properties in the program...
size_t m_numRxnTot
Total number of non-component species in the problem.
std::vector< int > m_phaseActConvention
specifies the activity convention of the phase.
int vcs_phasePopDeterminePossibleList()
Determine the list of problems that need to be checked to see if there are any phases pops...
size_t m_numComponents
Number of components calculated for the problem.
std::vector< double > m_phasePhi
electric potential of the iph phase
std::vector< double > m_actCoeffSpecies_old
Molar-based Activity Coefficients for Species based on old mole numbers.
int vcs_prob_update(VCS_PROB *pub)
Transfer the results of the equilibrium calculation back to VCS_PROB.
void vcs_fePrep_TP()
Initialize the chemical potential of single species phases.
IntStarStar m_phaseParticipation
This is 1 if the phase, iphase, participates in the formation reaction irxn, and zero otherwise...
int vcs_inest_TP()
Create an initial estimate of the solution to the thermodynamic equilibrium problem.
Header file for class IntStarStar.
int vcs_report(int iconv)
Print out a report on the state of the equilibrium problem to standard output.
std::vector< VCS_SPECIES_THERMO * > m_speciesThermoList
Vector of pointers to thermostructures which identify the model and parameters for evaluating the the...
double m_tolmin
Tolerance requirements for minor species.
double l2normdg(double dg[]) const
Calculate the norm of a deltaGibbs free energy vector.
void vcs_SSPhase(void)
Calculate the status of single species phases.
std::vector< size_t > m_indexRxnToSpecies
Mapping between the species index for noncomponent species and the full species index.
void vcs_reinsert_deleted(size_t kspec)
size_t m_numRxnMinorZeroed
Number of active species which are currently either treated as minor species.
std::vector< double > m_tPhaseMoles_new
total kmols of species in each phase in the tentative soln vector
void vcs_deltag_Phase(const size_t iphase, const bool doDeleted, const int stateCalc, const bool alterZeroedPhases=true)
Calculate deltag of formation for all species in a single phase.
void vcs_switch2D(double *const *const Jac, const size_t k1, const size_t k2) const
Switch rows and columns of a square matrix.
std::vector< int > m_actConventionSpecies
specifies the activity convention of the phase containing the species
void vcs_updateMolNumVolPhases(const int stateCalc)
Update all underlying vcs_VolPhase objects.
bool vcs_evaluate_speciesType()
This routine evaluates the species type for all species.
int m_debug_print_lvl
Debug printing lvl.
This file contains definitions of terms that are used in internal routines and are unlikely to need m...
double m_temperature
Temperature (Kelvin)
std::vector< double > m_lnMnaughtSpecies
specifies the ln(Mnaught) used to calculate the chemical potentials
void vcs_updateVP(const int stateCalc)
This routine uploads the state of the system into all of the vcs_VolumePhase objects in the current p...
void vcs_initSizes(const size_t nspecies0, const size_t nelements, const size_t nphase0)
Initialize the sizes within the VCS_SOLVE object.
int vcs_prob_specify(const VCS_PROB *pub)
Specify the problem to be solved using VCS_PROB, incrementally.
int m_timing_print_lvl
printing level of timing information
std::vector< double > m_feSpecies_old
Free energy vector from the start of the current iteration.
int m_VCS_UnitsFormat
Units for the chemical potential data.
void vcs_inest(double *const aw, double *const sa, double *const sm, double *const ss, double test)
Estimate equilibrium compositions.
int vcs_zero_species(const size_t kspec)
Zero out the concentration of a species.
double m_tolmin2
Below this, minor species aren't refined any more.
size_t vcs_add_all_deleted()
Provide an estimate for the deleted species in phases that are not zeroed out.
bool vcs_wellPosed(VCS_PROB *vprob)
In this routine, we check for things that will cause the algorithm to fail.
Class to keep track of time and iterations.
double deltaG_Recalc_Rxn(const int stateCalc, const size_t irxn, const double *const molNum, double *const ac, double *const mu_i)
This function recalculates the deltaG for reaction, irxn.
bool vcs_delete_multiphase(const size_t iph)
This routine handles the bookkeeping involved with the deletion of multiphase phases from the problem...
int vcs_prep()
Prepare the object for solution.
int vcs_basopt(const bool doJustComponents, double aw[], double sa[], double sm[], double ss[], double test, bool *const usedZeroedSpecies)
Choose the optimum species basis for the calculations.
void vcs_CalcLnActCoeffJac(const double *const moleSpeciesVCS)
Recalculate all of the activity coefficients in all of the phases based on input mole numbers...
void vcs_dfe(const int stateCalc, const int ll, const size_t lbot, const size_t ltop)
Calculate the dimensionless chemical potentials of all species or of certain groups of species...
std::vector< double > m_deltaGRxn_new
Delta G(irxn) for the noncomponent species in the mechanism.
void vcs_counters_init(int ifunc)
Initialize the internal counters.
double m_totalMolNum
Total number of kmoles in all phases.
std::vector< double > m_elemAbundancesGoal
Element abundances vector Goals.
void vcs_switch_pos(const bool ifunc, const size_t k1, const size_t k2)
Swaps the indices for all of the global data for two species, k1 and k2.
int vcs_popPhaseRxnStepSizes(const size_t iphasePop)
Calculates the deltas of the reactions due to phases popping into existence.
std::string m_title
String containing the title of the run.
int m_useActCoeffJac
Choice of Hessians.
std::vector< double > m_elemAbundances
Element abundances vector.
std::vector< size_t > m_speciesMapIndex
Index vector that keeps track of the species vector rearrangement.
Defines and definitions within the vcs package.
Header file for class DoubleStarStar.
int vcs_elcorr(double aa[], double x[])
std::vector< double > m_wtSpecies
Molecular weight of each species.
int m_doEstimateEquil
Setting for whether to do an initial estimate.
std::vector< double > m_molNumSpecies_new
Tentative value of the mole number vector.
void vcs_printChemPotUnits(int unitsFormat) const
Print the string representing the Chemical potential units.
std::vector< double > m_deltaGRxn_Deficient
Last deltag[irxn] from the previous step with additions for possible births of zeroed phases...
size_t vcs_basisOptMax(const double *const molNum, const size_t j, const size_t n)
Choose a species to test for the next component.
Internal declarations for the VCSnonideal package.
double vcs_birthGuess(const int kspec)
Birth guess returns the number of moles of a species that is coming back to life. ...
int vcs_TP(int ipr, int ip1, int maxit, double T, double pres)
Solve an equilibrium problem at a particular fixed temperature and pressure.
double vcs_minor_alt_calc(size_t kspec, size_t irxn, bool *do_delete, char *ANOTE) const
Minor species alternative calculation.
DoubleStarStar m_formulaMatrix
Formula matrix for the problem.
std::vector< double > m_molNumSpecies_old
Total moles of the species.
std::vector< double > m_actCoeffSpecies_new
Molar-based Activity Coefficients for Species.
size_t m_numSpeciesTot
Total number of species in the problems.
DoubleStarStar m_deltaMolNumPhase
Change in the number of moles of phase, iphase, due to the noncomponent formation reaction...
double m_Faraday_dim
dimensionless value of Faraday's constant, F / RT (1/volt)
std::vector< std::string > m_elementName
Vector of strings containing the element names.
void vcs_delete_memory()
Delete memory that isn't just resizable STL containers.
std::vector< int > m_elementActive
Specifies whether an element constraint is active.
std::vector< double > m_scSize
Absolute size of the stoichiometric coefficients.
double m_tolmaj2
Below this, major species aren't refined any more.
int vcs_species_type(const size_t kspec) const
Evaluate the species category for the indicated species.
void vcs_TCounters_report(int timing_print_lvl=1)
Create a report on the plog file containing timing and its information.
void prneav() const
Print out and check the elemental abundance vector.
void vcs_chemPotPhase(const int stateCalc, const size_t iph, const double *const molNum, double *const ac, double *const mu_i, const bool do_deleted=false)
We calculate the dimensionless chemical potentials of all species in a single phase.
std::vector< double > m_deltaGRxn_old
Last deltag[irxn] from the previous step.
std::vector< double > m_deltaMolNumSpecies
Reaction Adjustments for each species during the current step.
size_t m_numElemConstraints
Number of element constraints in the problem.
void vcs_printSpeciesChemPot(const int stateCalc) const
Print out a table of chemical potentials.
int vcs_solve_phaseStability(const int iphase, int ifunc, double &funcval, int print_lvl)
Routine that independently determines whether a phase should be popped under the current conditions...
std::vector< int > m_speciesStatus
Major -Minor status vector for the species in the problem.
std::vector< vcs_VolPhase * > m_VolPhaseList
Array of Phase Structures. Length = number of phases.
size_t vcs_popPhaseID(std::vector< size_t > &phasePopPhaseIDs)
Decision as to whether a phase pops back into existence.
double vcs_Total_Gibbs(double *w, double *fe, double *tPhMoles)
Calculate the total dimensionless Gibbs free energy.
DoubleStarStar m_np_dLnActCoeffdMolNum
Change in the log of the activity coefficient with respect to the mole number multiplied by the phase...
double m_totalMoleScale
Multiplier for the mole numbers within the nondimensionless formulation.
A class for 2D int arrays stored in column-major (Fortran-compatible) form.
size_t m_numPhases
Number of Phases in the problem.
This is the main structure used to hold the internal data used in vcs_solve_TP(), and to solve TP sys...
int vcs_prob_specifyFully(const VCS_PROB *pub)
Fully specify the problem to be solved using VCS_PROB.
double vcs_nondim_Farad(int mu_units, double TKelvin) const
Returns the multiplier for electric charge terms.
double vcs_Hessian_diag_adj(size_t irxn, double hessianDiag_Ideal)
Calculates the diagonal contribution to the Hessian due to the dependence of the activity coefficient...
bool vcs_globStepDamp()
This routine optimizes the minimization of the total gibbs free energy by making sure the slope of th...
std::vector< size_t > m_phaseID
Mapping from the species number to the phase number.
void vcs_nondim_TP()
Nondimensionalize the problem data.
int vcs_solve_TP(int print_lvl, int printDetails, int maxit)
Main routine that solves for equilibrium at constant T and P using a variant of the VCS method...
std::vector< double > m_feSpecies_new
Dimensionless new free energy for all the species in the mechanism at the new tentatite T...
bool recheck_deleted_phase(const int iphase)
Recheck deletion condition for multispecies phases.
double vcs_VolTotal(const double tkelvin, const double pres, const double w[], double volPM[])
Calculation of the total volume and the partial molar volumes.
int vcs_rearrange()
Switch all species data back to the original order.
std::vector< double > m_tPhaseMoles_old
Total kmols of species in each phase.
double vcs_nondimMult_TP(int mu_units, double TKelvin) const
Returns the multiplier for the nondimensionalization of the equations.
int vcs_elem_rearrange(double *const aw, double *const sa, double *const sm, double *const ss)
Rearrange the constraint equations represented by the Formula Matrix so that the operational ones are...
double vcs_tmoles()
Calculates the total number of moles of species in all phases.
void vcs_elabPhase(size_t iphase, double *const elemAbundPhase)
DoubleStarStar m_stoichCoeffRxnMatrix
Stoichiometric coefficient matrix for the reaction mechanism expressed in Reduced Canonical Form...
void vcs_redim_TP()
Redimensionalize the problem data.
double vcs_phaseStabilityTest(const size_t iph)
Main program to test whether a deleted phase should be brought back into existence.
std::vector< double > TPhInertMoles
Total kmoles of inert to add to each phase.
std::vector< char > m_SSPhase
Boolean indicating whether a species belongs to a single-species phase.
double vcs_line_search(const size_t irxn, const double dx_orig, char *const ANOTE)
A line search algorithm is carried out on one reaction.
double vcs_Hessian_actCoeff_diag(size_t irxn)
Calculates the diagonal contribution to the Hessian due to the dependence of the activity coefficient...
bool vcs_elabcheck(int ibound)
int vcs_recheck_deleted()
Recheck deleted species in multispecies phases.
std::vector< double > m_PMVolumeSpecies
Partial molar volumes of the species.
Interface class for the vcs thermo equilibrium solver package, which generally describes the problem ...
std::vector< size_t > m_elementMapIndex
Index vector that keeps track of the rearrangement of the elements.
double vcs_GibbsPhase(size_t iphase, const double *const w, const double *const fe)
Calculate the total dimensionless Gibbs free energy of a single phase.
int vcs_rank(const double *awtmp, size_t numSpecies, const double *matrix, size_t numElemConstraints, std::vector< size_t > &compRes, std::vector< size_t > &elemComp, int *const usedZeroedSpecies) const
Calculate the rank of a matrix and return the rows and columns that will generate an independent basi...
std::vector< int > m_elType
Type of the element constraint.
double m_pressurePA
Pressure (units are determined by m_VCS_UnitsFormat.
std::vector< double > m_TmpPhase2
Temporary vector of length NPhase.
size_t vcs_RxnStepSizes(int &forceComponentCalc, size_t &kSpecial)
Calculates formation reaction step sizes.
size_t NSPECIES0
value of the number of species used to malloc data structures
std::vector< int > m_speciesUnknownType
Specifies the species unknown type.
std::vector< double > m_chargeSpecies
Charge of each species. Length = number of species.
std::vector< size_t > m_speciesLocalPhaseIndex
Index that keeps track of the index of the species within the local phase.
int vcs_prep_oneTime(int printLvl)
This routine is mostly concerned with changing the private data to be consistent with what's needed f...
VCS_COUNTERS * m_VCount
Timing and iteration counters for the vcs object.
std::vector< double > m_spSize
total size of the species
int vcs_rxn_adj_cg(void)
Calculates reaction adjustments using a full Hessian approximation.
bool vcs_popPhasePossible(const size_t iphasePop) const
Utility function that evaluates whether a phase can be popped into existence.
std::vector< double > m_TmpPhase
Temporary vector of length NPhase.
size_t m_numRxnRdc
Current number of non-component species in the problem.
double m_totalVol
Total volume of all phases. Units are m^3.
int vcs_delete_species(const size_t kspec)
Change a single species from active to inactive status.
int delta_species(const size_t kspec, double *const delta_ptr)
Change the concentration of a species by delta moles.
double m_tolmaj
Tolerance requirement for major species.
int vcs_setMolesLinProg()
Estimate the initial mole numbers by constrained linear programming.
std::vector< double > m_deltaPhaseMoles
Change in the total moles in each phase.
int vcs(VCS_PROB *vprob, int ifunc, int ipr, int ip1, int maxit)
Solve an equilibrium problem.
void vcs_deltag(const int l, const bool doDeleted, const int vcsState, const bool alterZeroedPhases=true)
This subroutine calculates reaction free energy changes for all noncomponent formation reactions...
A class for 2D double arrays stored in column-major (Fortran-compatible) form.
size_t NPHASE0
value of the number of phases used to malloc data structures
void vcs_switch_elem_pos(size_t ipos, size_t jpos)
Swaps the indices for all of the global data for two elements, ipos and jpos.
std::vector< std::string > m_speciesName
Species string name for the kth species.
size_t m_numSpeciesRdc
Current number of species in the problems.
int vcs_evalSS_TP(int ipr, int ip1, double Temp, double pres)