added modify methods for restart files

This commit is contained in:
David Parkhurst 2018-12-11 17:17:49 -07:00
parent 1150a4a2aa
commit fa7776b8fe
2 changed files with 74 additions and 5 deletions

View File

@ -2244,6 +2244,40 @@ namespace Utilities
return phreeqc_cookie->cleanup_after_parser(parser);
}
template < typename T >
int SB_read_modify(std::map < int, T > &m, CParser &parser)
{
typename std::map < int, T >::iterator it;
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";
//io->warning_msg(errstr.str().c_str());
// Don't throw, read data into dummy entity, then ignore
T entity;
entity_ptr = &entity;
entity_ptr->read_raw(parser, false);
return FALSE;
}
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());
return TRUE;
}
template < typename T >
void Rxn_mix(std::map <int, cxxMix> &mix_map, std::map < int, T > &entity_map, Phreeqc * phreeqc_cookie)
{

View File

@ -1006,6 +1006,11 @@ cxxStorageBin::read_raw(CParser & parser)
Solutions[entity.Get_n_user()] = entity;
}
break;
case Keywords::KEY_SOLUTION_MODIFY:
{
Utilities::SB_read_modify(this->Solutions, parser);
}
break;
case Keywords::KEY_EXCHANGE_RAW:
{
cxxExchange entity(this->Get_io());
@ -1013,6 +1018,11 @@ cxxStorageBin::read_raw(CParser & parser)
Exchangers[entity.Get_n_user()] = entity;
}
break;
case Keywords::KEY_EXCHANGE_MODIFY:
{
Utilities::SB_read_modify(this->Exchangers, parser);
}
break;
case Keywords::KEY_GAS_PHASE_RAW:
{
cxxGasPhase entity(this->Get_io());
@ -1020,6 +1030,11 @@ cxxStorageBin::read_raw(CParser & parser)
GasPhases[entity.Get_n_user()] = entity;
}
break;
case Keywords::KEY_GAS_PHASE_MODIFY:
{
Utilities::SB_read_modify(this->GasPhases, parser);
}
break;
case Keywords::KEY_KINETICS_RAW:
{
cxxKinetics entity(this->Get_io());
@ -1027,7 +1042,11 @@ cxxStorageBin::read_raw(CParser & parser)
Kinetics[entity.Get_n_user()] = entity;
}
break;
case Keywords::KEY_KINETICS_MODIFY:
{
Utilities::SB_read_modify(this->Kinetics, parser);
}
break;
case Keywords::KEY_EQUILIBRIUM_PHASES_RAW:
{
cxxPPassemblage entity(this->Get_io());
@ -1035,7 +1054,11 @@ cxxStorageBin::read_raw(CParser & parser)
PPassemblages[entity.Get_n_user()] = entity;
}
break;
case Keywords::KEY_EQUILIBRIUM_PHASES_MODIFY:
{
Utilities::SB_read_modify(this->PPassemblages, parser);
}
break;
case Keywords::KEY_SOLID_SOLUTIONS_RAW:
{
cxxSSassemblage entity;
@ -1043,7 +1066,11 @@ cxxStorageBin::read_raw(CParser & parser)
SSassemblages[entity.Get_n_user()] = entity;
}
break;
case Keywords::KEY_SOLID_SOLUTIONS_MODIFY:
{
Utilities::SB_read_modify(this->SSassemblages, parser);
}
break;
case Keywords::KEY_SURFACE_RAW:
{
cxxSurface entity(this->Get_io());
@ -1051,7 +1078,11 @@ cxxStorageBin::read_raw(CParser & parser)
Surfaces[entity.Get_n_user()] = entity;
}
break;
case Keywords::KEY_SURFACE_MODIFY:
{
Utilities::SB_read_modify(this->Surfaces, parser);
}
break;
case Keywords::KEY_REACTION_TEMPERATURE_RAW:
{
cxxTemperature entity(this->Get_io());
@ -1059,7 +1090,6 @@ cxxStorageBin::read_raw(CParser & parser)
Temperatures[entity.Get_n_user()] = entity;
}
break;
case Keywords::KEY_REACTION_RAW:
{
cxxReaction entity;
@ -1067,6 +1097,11 @@ cxxStorageBin::read_raw(CParser & parser)
Reactions[entity.Get_n_user()] = entity;
}
break;
case Keywords::KEY_REACTION_MODIFY:
{
Utilities::SB_read_modify(this->Reactions, parser);
}
break;
case Keywords::KEY_MIX_RAW:
{
cxxMix entity;