mirror of
https://git.gfz-potsdam.de/naaice/iphreeqc.git
synced 2025-12-16 16:44:49 +01:00
Changed read _modify to warning if entity not found.
Tony's bug in phrq_io. punch_ostream was deleted twice. roughed in REACTION_TEMPERATURE_MODIFY and REACTION_PRESSURE_MODIFY. Think they work, and added to test case modify_ignore. git-svn-id: svn://136.177.114.72/svn_GW/phreeqc3/trunk@8453 1feff8c3-07ed-0310-ac33-dd36852eb9cd
This commit is contained in:
parent
063ba6202a
commit
aee604b56e
@ -541,7 +541,7 @@ close_ostreams(void)
|
||||
|
||||
streams.insert(output_ostream);
|
||||
streams.insert(log_ostream);
|
||||
// streams.insert(punch_ostream); // Should be removed in ~SelectedOutput
|
||||
// streams.insert(punch_ostream); // Should be deleted in ~SelectedOutput
|
||||
#ifdef ERROR_OSTREAM
|
||||
streams.insert(error_ostream);
|
||||
#else
|
||||
|
||||
40
Phreeqc.h
40
Phreeqc.h
@ -2062,6 +2062,7 @@ namespace Utilities
|
||||
return phreeqc_cookie->cleanup_after_parser(parser);
|
||||
}
|
||||
|
||||
#ifdef SKIP
|
||||
template < typename T >
|
||||
int Rxn_read_modify(std::map < int, T > &m, std::set < int > &s, Phreeqc * phreeqc_cookie)
|
||||
{
|
||||
@ -2092,6 +2093,45 @@ namespace Utilities
|
||||
|
||||
return phreeqc_cookie->cleanup_after_parser(parser);
|
||||
}
|
||||
#endif
|
||||
|
||||
template < typename T >
|
||||
int Rxn_read_modify(std::map < int, T > &m, std::set < int > &s, Phreeqc * phreeqc_cookie)
|
||||
{
|
||||
typename std::map < int, T >::iterator it;
|
||||
|
||||
CParser parser(phreeqc_cookie->Get_phrq_io());
|
||||
|
||||
std::string key_name;
|
||||
std::string::iterator b = parser.line().begin();
|
||||
std::string::iterator e = parser.line().end();
|
||||
CParser::copy_token(key_name, b, e);
|
||||
|
||||
cxxNumKeyword nk;
|
||||
nk.read_number_description(parser);
|
||||
T * entity_ptr = Utilities::Rxn_find(m, nk.Get_n_user());
|
||||
if (!entity_ptr)
|
||||
{
|
||||
std::ostringstream errstr;
|
||||
errstr << "Could not find " << key_name << " " << nk.Get_n_user() << ", ignoring modify data.\n";
|
||||
phreeqc_cookie->warning_msg(errstr.str().c_str());
|
||||
//phreeqc_cookie->error_msg(errstr.str().c_str(), PHRQ_io::OT_STOP);
|
||||
|
||||
// Don't throw, read data into dummy entity, then ignore
|
||||
T entity;
|
||||
entity_ptr = &entity;
|
||||
entity_ptr->read_raw(parser, false);
|
||||
return phreeqc_cookie->cleanup_after_parser(parser);
|
||||
}
|
||||
|
||||
entity_ptr->read_raw(parser, false);
|
||||
entity_ptr->Set_n_user(nk.Get_n_user());
|
||||
entity_ptr->Set_n_user_end(nk.Get_n_user_end());
|
||||
entity_ptr->Set_description(nk.Get_description());
|
||||
s.insert(entity_ptr->Get_n_user());
|
||||
|
||||
return phreeqc_cookie->cleanup_after_parser(parser);
|
||||
}
|
||||
|
||||
template < typename T >
|
||||
void Rxn_mix(std::map <int, cxxMix> &mix_map, std::map < int, T > &entity_map, Phreeqc * phreeqc_cookie)
|
||||
|
||||
25
Pressure.cxx
25
Pressure.cxx
@ -192,7 +192,7 @@ cxxPressure::dump_raw(std::ostream & s_oss, unsigned int indent, int *n_out) con
|
||||
}
|
||||
|
||||
void
|
||||
cxxPressure::read_raw(CParser & parser)
|
||||
cxxPressure::read_raw(CParser & parser, bool check)
|
||||
{
|
||||
// clear steps for modify operation, if pressures are read
|
||||
bool cleared_once = false;
|
||||
@ -294,17 +294,20 @@ cxxPressure::read_raw(CParser & parser)
|
||||
break;
|
||||
}
|
||||
// members that must be defined
|
||||
if (equalIncrements_defined == false)
|
||||
if (check)
|
||||
{
|
||||
parser.incr_input_error();
|
||||
parser.error_msg("Equal_increments not defined for REACTION_PRESSURE_RAW input.",
|
||||
PHRQ_io::OT_CONTINUE);
|
||||
}
|
||||
if (count_defined == false)
|
||||
{
|
||||
parser.incr_input_error();
|
||||
parser.error_msg("Count_temps not defined for REACTION_PRESSURE_RAW input.",
|
||||
PHRQ_io::OT_CONTINUE);
|
||||
if (equalIncrements_defined == false)
|
||||
{
|
||||
parser.incr_input_error();
|
||||
parser.error_msg("Equal_increments not defined for REACTION_PRESSURE_RAW input.",
|
||||
PHRQ_io::OT_CONTINUE);
|
||||
}
|
||||
if (count_defined == false)
|
||||
{
|
||||
parser.incr_input_error();
|
||||
parser.error_msg("Count_temps not defined for REACTION_PRESSURE_RAW input.",
|
||||
PHRQ_io::OT_CONTINUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
#ifdef SKIP
|
||||
|
||||
@ -21,7 +21,7 @@ class cxxPressure:public cxxNumKeyword
|
||||
void dump_raw(std::ostream & s_oss, unsigned int indent, int *n_out=NULL) const;
|
||||
|
||||
int read(CParser & parser);
|
||||
void read_raw(CParser & parser);
|
||||
void read_raw(CParser & parser, bool check = false);
|
||||
LDBLE Pressure_for_step(int step_number);
|
||||
std::vector<LDBLE> & Get_pressures(void) {return pressures;}
|
||||
const std::vector<LDBLE> & Get_pressures(void)const {return pressures;}
|
||||
|
||||
@ -229,7 +229,7 @@ cxxTemperature::dump_raw(std::ostream & s_oss, unsigned int indent, int *n_out)
|
||||
}
|
||||
|
||||
void
|
||||
cxxTemperature::read_raw(CParser & parser)
|
||||
cxxTemperature::read_raw(CParser & parser, bool check)
|
||||
{
|
||||
LDBLE d;
|
||||
CParser::TOKEN_TYPE k;
|
||||
@ -335,21 +335,24 @@ cxxTemperature::read_raw(CParser & parser)
|
||||
break;
|
||||
}
|
||||
// members that must be defined
|
||||
if (equalIncrements_defined == false)
|
||||
if (check)
|
||||
{
|
||||
parser.incr_input_error();
|
||||
parser.
|
||||
error_msg
|
||||
("Equal_increments not defined for REACTION_TEMPERATURE_RAW input.",
|
||||
PHRQ_io::OT_CONTINUE);
|
||||
}
|
||||
if (countTemps_defined == false)
|
||||
{
|
||||
parser.incr_input_error();
|
||||
parser.
|
||||
error_msg
|
||||
("Count_temps not defined for REACTION_TEMPERATURE_RAW input.",
|
||||
PHRQ_io::OT_CONTINUE);
|
||||
if (equalIncrements_defined == false)
|
||||
{
|
||||
parser.incr_input_error();
|
||||
parser.
|
||||
error_msg
|
||||
("Equal_increments not defined for REACTION_TEMPERATURE_RAW input.",
|
||||
PHRQ_io::OT_CONTINUE);
|
||||
}
|
||||
if (countTemps_defined == false)
|
||||
{
|
||||
parser.incr_input_error();
|
||||
parser.
|
||||
error_msg
|
||||
("Count_temps not defined for REACTION_TEMPERATURE_RAW input.",
|
||||
PHRQ_io::OT_CONTINUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
@ -20,7 +20,7 @@ class cxxTemperature:public cxxNumKeyword
|
||||
|
||||
void dump_raw(std::ostream & s_oss, unsigned int indent, int *n_out=NULL) const;
|
||||
|
||||
void read_raw(CParser & parser);
|
||||
void read_raw(CParser & parser, bool check = false);
|
||||
int read(CParser & parser);
|
||||
LDBLE Temperature_for_step(int step_number);
|
||||
std::vector<LDBLE> & Get_temps(void) {return temps;}
|
||||
|
||||
6
read.cpp
6
read.cpp
@ -355,6 +355,9 @@ read_input(void)
|
||||
case Keywords::KEY_REACTION_MODIFY:
|
||||
Utilities::Rxn_read_modify(Rxn_reaction_map, Rxn_new_reaction, this);
|
||||
break;
|
||||
case Keywords::KEY_REACTION_TEMPERATURE_MODIFY:
|
||||
Utilities::Rxn_read_modify(Rxn_temperature_map, Rxn_new_temperature, this);
|
||||
break;
|
||||
//case LAST_C_KEYWORD + 22: //reaction_temperature_modify
|
||||
// keyword[LAST_C_KEYWORD + 22].keycount++;
|
||||
// read_reaction_temperature_modify();
|
||||
@ -365,6 +368,9 @@ read_input(void)
|
||||
case Keywords::KEY_REACTION_PRESSURE_RAW:
|
||||
Utilities::Rxn_read_raw(Rxn_pressure_map, Rxn_new_pressure, this);
|
||||
break;
|
||||
case Keywords::KEY_REACTION_PRESSURE_MODIFY:
|
||||
Utilities::Rxn_read_modify(Rxn_pressure_map, Rxn_new_pressure, this);
|
||||
break;
|
||||
default:
|
||||
error_msg("Error in keyword switch", STOP);
|
||||
break;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user