added pointers for solid solution and ss component in unknown struct to speed calculations, all test cases run

git-svn-id: svn://136.177.114.72/svn_GW/phreeqc3/trunk@7724 1feff8c3-07ed-0310-ac33-dd36852eb9cd
This commit is contained in:
David L Parkhurst 2013-05-16 20:42:28 +00:00
parent 11ef24eb4b
commit 0b7b5f7c07
4 changed files with 35 additions and 6 deletions

View File

@ -281,7 +281,7 @@ cxxPPassemblage::add(const cxxPPassemblage & addee, LDBLE extensive)
//cxxNameDouble eltList;
this->eltList.add_extensive(addee.eltList, extensive);
}
#ifdef SKIP
cxxPPassemblageComp * cxxPPassemblage::
Find(const std::string name_in)
{
@ -303,6 +303,24 @@ Find(const std::string name_in)
}
return comp;
}
#endif
cxxPPassemblageComp * cxxPPassemblage::
Find(const std::string name_in)
{
cxxPPassemblageComp * comp = NULL;
std::map<std::string, cxxPPassemblageComp>::iterator it;
it = this->pp_assemblage_comps.begin();
for ( ; it != this->pp_assemblage_comps.end(); it++)
{
if (Utilities::strcmp_nocase(name_in.c_str(), it->first.c_str()) == 0)
{
comp = &it->second;
break;
}
}
return comp;
}
const std::vector< std::string >::value_type temp_vopts[] = {
std::vector< std::string >::value_type("eltlist"), // 0
std::vector< std::string >::value_type("component"), // 1

View File

@ -2236,7 +2236,8 @@ mb_ss(void)
{
if (x[i]->type != SS_MOLES)
break;
cxxSS *ss_ptr = use.Get_ss_assemblage_ptr()->Find(x[i]->ss_name);
//cxxSS *ss_ptr = use.Get_ss_assemblage_ptr()->Find(x[i]->ss_name);
cxxSS *ss_ptr = (cxxSS *) x[i]->ss_ptr;
x[i]->ss_in = ss_ptr->Get_ss_in() ? TRUE : FALSE;
}
return (OK);
@ -3798,8 +3799,10 @@ reset(void)
x[i]->moles -= delta[i];
if (x[i]->moles < MIN_TOTAL_SS && calculating_deriv == FALSE)
x[i]->moles = MIN_TOTAL_SS;
cxxSS *ss_ptr = use.Get_ss_assemblage_ptr()->Find(x[i]->ss_name);
cxxSScomp *comp_ptr = ss_ptr->Find(x[i]->ss_comp_name);
//cxxSS *ss_ptr = use.Get_ss_assemblage_ptr()->Find(x[i]->ss_name);
cxxSS *ss_ptr = (cxxSS *) x[i]->ss_ptr;
//cxxSScomp *comp_ptr = ss_ptr->Find(x[i]->ss_comp_name);
cxxSScomp *comp_ptr = (cxxSScomp *) x[i]->ss_comp_ptr;
comp_ptr->Set_moles(x[i]->moles);
/* Pitzer gamma */
}

View File

@ -262,7 +262,9 @@ quick_setup(void)
{
for (size_t k = 0; k < ss_ptrs[j]->Get_ss_comps().size(); k++)
{
x[i]->ss_ptr = ss_ptrs[j];
cxxSScomp *comp_ptr = &(ss_ptrs[j]->Get_ss_comps()[k]);
x[i]->ss_comp_ptr = comp_ptr;
x[i]->moles = comp_ptr->Get_moles();
if (x[i]->moles <= 0)
{
@ -331,7 +333,7 @@ quick_setup(void)
/* moles picked up from master->total */
}
else if (x[i]->type == SURFACE_CB1 || x[i]->type == SURFACE_CB2)
{
{
cxxSurfaceCharge *charge_ptr = use.Get_surface_ptr()->Find_charge(x[i]->surface_charge);
x[i]->related_moles = charge_ptr->Get_grams();
x[i]->mass_water = charge_ptr->Get_mass_water();
@ -663,7 +665,8 @@ build_ss_assemblage(void)
{
if (x[i]->type != SS_MOLES)
continue;
cxxSS *ss_ptr = use.Get_ss_assemblage_ptr()->Find(x[i]->ss_name);
//cxxSS *ss_ptr = use.Get_ss_assemblage_ptr()->Find(x[i]->ss_name);
cxxSS *ss_ptr = (cxxSS *) x[i]->ss_ptr;
assert(ss_ptr);
if (ss_ptr != ss_ptr_old)
{
@ -3314,7 +3317,9 @@ setup_ss_assemblage(void)
comp_ptr->Set_initial_moles(x[count_unknowns]->moles);
x[count_unknowns]->ln_moles = log(x[count_unknowns]->moles);
x[count_unknowns]->ss_name = string_hsave(ss_ptrs[j]->Get_name().c_str());
x[count_unknowns]->ss_ptr = ss_ptrs[j];
x[count_unknowns]->ss_comp_name = string_hsave(comp_ptr->Get_name().c_str());
x[count_unknowns]->ss_comp_ptr = comp_ptr;
x[count_unknowns]->ss_comp_number = (int) i;
x[count_unknowns]->phase = phase_ptr;
x[count_unknowns]->number = count_unknowns;

View File

@ -3118,8 +3118,11 @@ unknown_alloc(void)
unknown_ptr->si = 0.0;
unknown_ptr->s = NULL;
unknown_ptr->exch_comp = NULL;
unknown_ptr->pp_assemblage_comp_ptr = NULL;
unknown_ptr->ss_name = NULL;
unknown_ptr->ss_ptr = NULL;
unknown_ptr->ss_comp_name = NULL;
unknown_ptr->ss_comp_ptr = NULL;
unknown_ptr->ss_comp_number = 0;
unknown_ptr->ss_in = FALSE;
unknown_ptr->surface_comp = NULL;