mirror of
https://git.gfz-potsdam.de/naaice/iphreeqc.git
synced 2025-12-16 08:38:23 +01:00
Getting there with adding REACTION_PRESSURE capabilities.
Still need to look at copy, dump, and maybe others. git-svn-id: svn://136.177.114.72/svn_GW/phreeqcpp/branches/ErrorHandling@5844 1feff8c3-07ed-0310-ac33-dd36852eb9cd
This commit is contained in:
parent
8a678fa9e7
commit
4a7158c44b
57
Pressure.cxx
57
Pressure.cxx
@ -351,4 +351,59 @@ cxxPressure::dump_xml(std::ostream & s_oss, unsigned int indent) const const
|
||||
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
/* ---------------------------------------------------------------------- */
|
||||
LDBLE cxxPressure::
|
||||
Pressure_for_step(int step_number)
|
||||
/* ---------------------------------------------------------------------- */
|
||||
{
|
||||
/*
|
||||
* Determine pressure of reaction step
|
||||
*/
|
||||
LDBLE p_temp;
|
||||
if (this->pressures.size() == 0)
|
||||
{
|
||||
p_temp = 1;
|
||||
}
|
||||
else if (this->equalIncrements)
|
||||
{
|
||||
if (this->pressures.size() != 2)
|
||||
{
|
||||
error_msg("Number of pressures not equal to 2 for equal increments.", 0);
|
||||
}
|
||||
if (step_number > this->count)
|
||||
{
|
||||
p_temp = this->pressures[1];
|
||||
}
|
||||
else
|
||||
{
|
||||
LDBLE denom;
|
||||
denom = (this->count <= 1) ? 1 : (LDBLE) (this->count - 1);
|
||||
p_temp = this->pressures[0] + ( this->pressures[1] - this->pressures[0]) *
|
||||
((LDBLE) (step_number - 1)) / (denom);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (step_number > (int) this->pressures.size())
|
||||
{
|
||||
p_temp = this->pressures[this->pressures.size() - 1];
|
||||
}
|
||||
else
|
||||
{
|
||||
p_temp = this->pressures[step_number - 1];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return (p_temp);
|
||||
}
|
||||
int cxxPressure::
|
||||
Get_count(void) const
|
||||
{
|
||||
if (equalIncrements)
|
||||
{
|
||||
return this->count;
|
||||
}
|
||||
return (int) this->pressures.size();
|
||||
}
|
||||
@ -22,9 +22,9 @@ class cxxPressure:public cxxNumKeyword
|
||||
|
||||
int read(CParser & parser);
|
||||
void read_raw(CParser & parser);
|
||||
|
||||
LDBLE Pressure_for_step(int step_number);
|
||||
std::vector<double> & Get_pressures(void) {return pressures;};
|
||||
int Get_count(void) const {return count;};
|
||||
int Get_count(void) const;
|
||||
void Set_count(int i) {count = i;};
|
||||
bool Get_equalIncrements(void) const {return equalIncrements;};
|
||||
void Set_equalIncrements(bool tf) {equalIncrements = tf;};
|
||||
|
||||
@ -2281,6 +2281,14 @@ run_as_cells(void)
|
||||
if (abs(use.temperature_ptr->count_t) > count_steps)
|
||||
count_steps = abs(use.temperature_ptr->count_t);
|
||||
}
|
||||
if (use.pressure_in == TRUE && use.pressure_ptr != NULL)
|
||||
{
|
||||
int count = ((cxxPressure *) use.pressure_ptr)->Get_count();
|
||||
if (count > count_steps)
|
||||
{
|
||||
count_steps = count;
|
||||
}
|
||||
}
|
||||
count_total_steps = count_steps;
|
||||
/*
|
||||
* save data for saving solutions
|
||||
|
||||
@ -268,6 +268,7 @@ cxxStorageBin::Get_Temperature(int n_user)
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
void
|
||||
cxxStorageBin::Set_Temperature(int n_user, cxxTemperature * entity)
|
||||
{
|
||||
@ -275,12 +276,33 @@ cxxStorageBin::Set_Temperature(int n_user, cxxTemperature * entity)
|
||||
return;
|
||||
Temperatures[n_user] = *entity;
|
||||
}
|
||||
|
||||
void
|
||||
cxxStorageBin::Remove_Temperature(int n_user)
|
||||
{
|
||||
Temperatures.erase(n_user);
|
||||
}
|
||||
|
||||
cxxPressure *
|
||||
cxxStorageBin::Get_Pressure(int n_user)
|
||||
{
|
||||
return Utilities::Reactant_find(this->Pressures, n_user);
|
||||
}
|
||||
|
||||
void
|
||||
cxxStorageBin::Set_Pressure(int n_user, cxxPressure * entity)
|
||||
{
|
||||
if (entity == NULL)
|
||||
return;
|
||||
Pressures[n_user] = *entity;
|
||||
}
|
||||
void
|
||||
|
||||
cxxStorageBin::Remove_Pressure(int n_user)
|
||||
{
|
||||
Pressures.erase(n_user);
|
||||
}
|
||||
|
||||
const std::map < int, cxxSolution > &
|
||||
cxxStorageBin::Get_Solutions() const
|
||||
{
|
||||
@ -331,7 +353,11 @@ cxxStorageBin::Get_Temperatures() const
|
||||
{
|
||||
return this->Temperatures;
|
||||
}
|
||||
|
||||
const std::map < int, cxxPressure > &
|
||||
cxxStorageBin::Get_Pressures() const
|
||||
{
|
||||
return this->Pressures;
|
||||
}
|
||||
#ifdef SKIP
|
||||
void
|
||||
cxxStorageBin::dump_xml(std::ostream & s_oss, unsigned int indent) const const
|
||||
@ -827,6 +853,9 @@ cxxStorageBin::Remove(int n)
|
||||
|
||||
// Temperature
|
||||
this->Temperatures.erase(n);
|
||||
|
||||
// Pressure
|
||||
this->Pressures.erase(n);
|
||||
}
|
||||
void
|
||||
cxxStorageBin::Clear(void)
|
||||
@ -862,6 +891,9 @@ cxxStorageBin::Clear(void)
|
||||
// Temperature
|
||||
this->Temperatures.clear();
|
||||
|
||||
// Pressure
|
||||
this->Pressures.clear();
|
||||
|
||||
}
|
||||
#ifdef SKIP
|
||||
cxxSolution *
|
||||
@ -1490,6 +1522,15 @@ cxxStorageBin::Set_System(struct Use *use_ptr)
|
||||
this->system.Set_Temperature(&(it->second));
|
||||
}
|
||||
}
|
||||
// reaction pressure
|
||||
if (use_ptr->pressure_ptr != NULL)
|
||||
{
|
||||
cxxPressure * p = Utilities::Reactant_find(this->Pressures, use_ptr->n_pressure_user);
|
||||
if (p != NULL)
|
||||
{
|
||||
this->system.Set_Pressure(p);
|
||||
}
|
||||
}
|
||||
}
|
||||
void
|
||||
cxxStorageBin::Set_System(int i)
|
||||
@ -1578,4 +1619,9 @@ cxxStorageBin::Set_System(int i)
|
||||
this->system.Set_Temperature(&(it->second));
|
||||
}
|
||||
}
|
||||
|
||||
// reaction pressure
|
||||
{
|
||||
this->system.Set_Pressure(Utilities::Reactant_find(this->Pressures, i));
|
||||
}
|
||||
}
|
||||
|
||||
@ -72,6 +72,10 @@ class cxxStorageBin: public PHRQ_base
|
||||
void Set_Temperature(int n_user, cxxTemperature * entity);
|
||||
void Remove_Temperature(int n_user);
|
||||
|
||||
cxxPressure *Get_Pressure(int n_user);
|
||||
void Set_Pressure(int n_user, cxxPressure * entity);
|
||||
void Remove_Pressure(int n_user);
|
||||
|
||||
cxxSystem &Get_System(void);
|
||||
void Set_System(struct Use *use_ptr);
|
||||
void Set_System(int i);
|
||||
@ -98,6 +102,7 @@ class cxxStorageBin: public PHRQ_base
|
||||
const std::map < int, cxxMix > &Get_Mixes() const;
|
||||
const std::map < int, cxxReaction > &Get_Reactions() const;
|
||||
const std::map < int, cxxTemperature > &Get_Temperatures() const;
|
||||
const std::map < int, cxxPressure > &Get_Pressures() const;
|
||||
|
||||
cxxSystem & Get_system(void) {return system;};
|
||||
#ifdef USE_MPI
|
||||
@ -122,6 +127,7 @@ class cxxStorageBin: public PHRQ_base
|
||||
std::map < int, cxxMix > Mixes;
|
||||
std::map < int, cxxReaction > Reactions;
|
||||
std::map < int, cxxTemperature > Temperatures;
|
||||
std::map < int, cxxPressure > Pressures;
|
||||
cxxSystem system;
|
||||
|
||||
};
|
||||
|
||||
@ -29,6 +29,7 @@ PHRQ_base(io)
|
||||
this->mix = NULL;
|
||||
this->reaction = NULL;
|
||||
this->temperature = NULL;
|
||||
this->pressure = NULL;
|
||||
}
|
||||
cxxSystem::~cxxSystem(void)
|
||||
{
|
||||
@ -46,6 +47,7 @@ cxxSystem::Initialize(void)
|
||||
this->mix = NULL;
|
||||
this->reaction = NULL;
|
||||
this->temperature = NULL;
|
||||
this->pressure = NULL;
|
||||
}
|
||||
void
|
||||
cxxSystem::totalize(PHREEQC_PTR_ARG)
|
||||
|
||||
6
System.h
6
System.h
@ -22,6 +22,7 @@ class cxxSSassemblage;
|
||||
class cxxSurface;
|
||||
class cxxReaction;
|
||||
class cxxTemperature;
|
||||
class cxxPressure;
|
||||
class cxxMix;
|
||||
|
||||
class cxxSystem: public PHRQ_base
|
||||
@ -70,6 +71,10 @@ public:
|
||||
{
|
||||
this->temperature = entity;
|
||||
}
|
||||
void Set_Pressure(cxxPressure * entity)
|
||||
{
|
||||
this->pressure = entity;
|
||||
}
|
||||
void totalize(PHREEQC_PTR_ARG);
|
||||
cxxNameDouble &Get_Totals(void)
|
||||
{
|
||||
@ -87,6 +92,7 @@ protected:
|
||||
cxxMix * mix;
|
||||
cxxReaction * reaction;
|
||||
cxxTemperature * temperature;
|
||||
cxxPressure * pressure;
|
||||
cxxNameDouble totals;
|
||||
};
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user