From ed844dcd706fc7548f4eddaa2e6d220780e82618 Mon Sep 17 00:00:00 2001 From: hawke Date: Wed, 30 Mar 2005 09:21:47 +0000 Subject: Correct a bug in the registration routines; if a variable was registered as SandR and then as evolved it was not correctly removed from the SandR list, leading to incorrect evolution. Thanks to J Thornburg for finding this one. git-svn-id: http://svn.cactuscode.org/arrangements/CactusNumerical/MoL/trunk@86 578cdeb0-5ea1-4b81-8215-5a3b8777ee0b --- src/Registration.c | 87 ++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 62 insertions(+), 25 deletions(-) (limited to 'src') diff --git a/src/Registration.c b/src/Registration.c index b5ee0df..da553ec 100644 --- a/src/Registration.c +++ b/src/Registration.c @@ -924,14 +924,19 @@ CCTK_INT MoL_RegisterEvolvedReal(CCTK_INT EvolvedIndex, CCTK_INT RHSIndex) } - varused = 0; + varused = -1; - for (index = 0; (index < MoLNumConstrainedVariables)&&(!varused); index++) + for (index = 0; (index < MoLNumConstrainedVariables)&&(!(varused+1)); + index++) { - varused = (EvolvedIndex == ConstrainedVariableIndex[index]); + if (EvolvedIndex == ConstrainedVariableIndex[index]) + { + varused = index; + } + } - if (varused) + if ((varused+1)) { for (index = varused; index < MoLNumConstrainedVariables-1; index++) { @@ -940,18 +945,35 @@ CCTK_INT MoL_RegisterEvolvedReal(CCTK_INT EvolvedIndex, CCTK_INT RHSIndex) MoLNumConstrainedVariables--; } - varused = 0; + varused = -1; - for (index = 0; (index < MoLNumSandRVariables)&&(!varused); index++) + for (index = 0; (index < MoLNumSandRVariables)&&(!(varused+1)); index++) { - varused = (EvolvedIndex == SandRVariableIndex[index]); + if (EvolvedIndex == SandRVariableIndex[index]) + { + varused = index; + } + +#ifdef MOLDEBUG + printf("Checking SandR var %d. Index %d (evolvedindex %d).\n", + index, SandRVariableIndex[index], EvolvedIndex); +#endif + } - if (varused) + if ((varused+1)) { for (index = varused; index < MoLNumSandRVariables-1; index++) { SandRVariableIndex[index] = SandRVariableIndex[index+1]; + +#ifdef MOLDEBUG + printf("The registered evolved variable was SandR." + " Now index %d is %d (%s).\n", + index, SandRVariableIndex[index], + CCTK_VarName(SandRVariableIndex[index])); +#endif + } MoLNumSandRVariables--; } @@ -1042,16 +1064,21 @@ CCTK_INT MoL_RegisterConstrainedReal(CCTK_INT ConstrainedIndex) } - varused = 0; + varused = -1; - for (evolved = 0; (evolved < MoLNumSandRVariables)&&(!varused); evolved++) + for (evolved = 0; (evolved < MoLNumSandRVariables)&&(!(varused+1)); + evolved++) { - varused = (SandRVariableIndex[evolved] == ConstrainedIndex); + if (SandRVariableIndex[evolved] == ConstrainedIndex) + { + varused = evolved; + } + } - if (varused) + if ((varused+1)) { - for (index = evolved; index < MoLNumSandRVariables-1; index++) + for (index = varused; index < MoLNumSandRVariables-1; index++) { SandRVariableIndex[index] = SandRVariableIndex[index+1]; } @@ -1397,16 +1424,19 @@ CCTK_INT MoL_RegisterEvolvedComplex(CCTK_INT EvolvedIndex, CCTK_INT RHSIndex) } - varused = 0; + varused = -1; for (index = 0; (index < - MoLNumConstrainedComplexVariables)&&(!varused); + MoLNumConstrainedComplexVariables)&&(!(varused+1)); index++) { - varused = (EvolvedIndex == ConstrainedComplexVariableIndex[index]); + if (EvolvedIndex == ConstrainedComplexVariableIndex[index]) + { + varused = index; + } } - if (varused) + if ((varused+1)) { for (index = varused; index < MoLNumConstrainedComplexVariables-1; index++) { @@ -1416,14 +1446,18 @@ CCTK_INT MoL_RegisterEvolvedComplex(CCTK_INT EvolvedIndex, CCTK_INT RHSIndex) MoLNumConstrainedComplexVariables--; } - varused = 0; + varused = -1; - for (index = 0; (index < MoLNumSandRComplexVariables)&&(!varused); index++) + for (index = 0; (index < MoLNumSandRComplexVariables)&&(!(varused+1)); + index++) { - varused = (EvolvedIndex == SandRComplexVariableIndex[index]); + if (EvolvedIndex == SandRComplexVariableIndex[index]) + { + varused = index; + } } - if (varused) + if ((varused+1)) { for (index = varused; index < MoLNumSandRComplexVariables-1; index++) { @@ -1512,16 +1546,19 @@ CCTK_INT MoL_RegisterConstrainedComplex(CCTK_INT ConstrainedIndex) } - varused = 0; + varused = -1; for (evolved = 0; (evolved < - MoLNumSandRComplexVariables)&&(!varused); + MoLNumSandRComplexVariables)&&(!(varused+1)); evolved++) { - varused = (SandRComplexVariableIndex[evolved] == ConstrainedIndex); + if (SandRComplexVariableIndex[evolved] == ConstrainedIndex) + { + varused = evolved; + } } - if (varused) + if ((varused+1)) { for (index = evolved; index < MoLNumSandRComplexVariables-1; index++) { -- cgit v1.2.3