diff --git a/build/Xcode/epanet/epanet.xcodeproj/project.pbxproj b/build/Xcode/epanet/epanet.xcodeproj/project.pbxproj index 25795cc..2f904ac 100755 --- a/build/Xcode/epanet/epanet.xcodeproj/project.pbxproj +++ b/build/Xcode/epanet/epanet.xcodeproj/project.pbxproj @@ -260,7 +260,7 @@ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0460; + LastUpgradeCheck = 0500; }; buildConfigurationList = 1DEB914E08733D8E0010E9CD /* Build configuration list for PBXProject "epanet" */; compatibilityVersion = "Xcode 3.2"; @@ -392,16 +392,20 @@ 1DEB914F08733D8E0010E9CD /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_OPTIMIZATION_LEVEL = 0; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = macinclude; ONLY_ACTIVE_ARCH = YES; @@ -412,15 +416,19 @@ 1DEB915008733D8E0010E9CD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = macinclude; SDKROOT = ""; @@ -463,7 +471,6 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_WARN_EMPTY_BODY = YES; @@ -484,7 +491,6 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_WARN_EMPTY_BODY = YES; diff --git a/src/epanet.c b/src/epanet.c index b7f75e7..19f668e 100755 --- a/src/epanet.c +++ b/src/epanet.c @@ -1968,7 +1968,9 @@ int DLLEXPORT ENsetnodevalue(int index, int code, EN_API_FLOAT_TYPE v) source->Pat = 0; Node[index].S = source; } - if (code == EN_SOURCEQUAL) source->C0 = value; + if (code == EN_SOURCEQUAL) { + source->C0 = value; + } else if (code == EN_SOURCEPAT) { j = ROUND(value); @@ -2757,7 +2759,7 @@ void initpointers() C = NULL; H = NULL; Q = NULL; - R = NULL; + PipeRateCoeff = NULL; S = NULL; K = NULL; OldStat = NULL; diff --git a/src/output.c b/src/output.c index 4237736..9d04531 100755 --- a/src/output.c +++ b/src/output.c @@ -455,7 +455,7 @@ int linkoutput(int j, REAL4 *x, double ucf) break; case REACTRATE: /* Overall reaction rate in mass/L/day */ if (Qualflag == NONE) memset(x,0,(Nlinks+1 )*sizeof(REAL4)); - else for (i=1; i<=Nlinks; i++) x[i] = (REAL4)(R[i]*ucf); + else for (i=1; i<=Nlinks; i++) x[i] = (REAL4)(PipeRateCoeff[i]*ucf); break; case FRICTION: /* f = 2ghd/(Lu^2) where f = friction factor */ /* u = velocity, g = grav. accel., h = head */ diff --git a/src/quality.c b/src/quality.c index d4d3c0f..8a5b8dd 100755 --- a/src/quality.c +++ b/src/quality.c @@ -107,9 +107,9 @@ int openqual() /* Allocate scratch array & reaction rate array*/ XC = (double *) calloc(MAX((Nnodes+1),(Nlinks+1)),sizeof(double)); - R = (double *) calloc((Nlinks+1), sizeof(double)); + PipeRateCoeff = (double *) calloc((Nlinks+1), sizeof(double)); ERRCODE(MEMCHECK(XC)); - ERRCODE(MEMCHECK(R)); + ERRCODE(MEMCHECK(PipeRateCoeff)); /* Allocate memory for WQ solver */ n = Nlinks+Ntanks+1; @@ -414,7 +414,7 @@ int closequal() free(FlowDir); free(VolIn); free(MassIn); - free(R); + free(PipeRateCoeff); free(XC); free(QTankVolumes); free(QLinkFlow); @@ -474,7 +474,8 @@ int gethyd(long *hydtime, long *hydstep) //if (Qtime == 0) // initsegs(); //else - if (Qtime != 0) { + // if hydraulics are open, or if we're in sequential mode (where qtime can increase) + if (OpenHflag || Qtime != 0) { reorientsegs(); } @@ -559,8 +560,10 @@ void initsegs() { /* Establish flow direction */ - FlowDir[k] = '+'; - if (Q[k] < 0.) FlowDir[k] = '-'; + FlowDir[k] = '+'; + if (Q[k] < 0.) { + FlowDir[k] = '-'; + } /* Set segs to zero */ LastSeg[k] = NULL; @@ -626,9 +629,13 @@ void reorientsegs() { /* Find new flow direction */ - newdir = '+'; - if (Q[k] == 0.0) newdir = FlowDir[k]; - else if (Q[k] < 0.0) newdir = '-'; + newdir = '+'; + if (Q[k] == 0.0) { + newdir = FlowDir[k]; + } + else if (Q[k] < 0.0) { + newdir = '-'; + } /* If direction changes, then reverse order of segments */ /* (first to last) and save new direction */ @@ -692,8 +699,8 @@ void updatesegs(long dt) } /* Normalize volume-weighted reaction rate */ - if (vsum > 0.0) R[k] = rsum/vsum/dt*SECperDAY; - else R[k] = 0.0; + if (vsum > 0.0) PipeRateCoeff[k] = rsum/vsum/dt*SECperDAY; + else PipeRateCoeff[k] = 0.0; } } @@ -885,21 +892,27 @@ void updatenodes(long dt) **--------------------------------------------------------------------------- */ { - int i; - - /* Update junction quality */ - for (i=1; i<=Njuncs; i++) - { - if (D[i] < 0.0) VolIn[i] -= D[i]*dt; - if (VolIn[i] > 0.0) C[i] = MassIn[i]/VolIn[i]; - else C[i] = XC[i]; - } - - /* Update tank quality */ - updatetanks(dt); - - /* For flow tracing, set source node concen. to 100. */ - if (Qualflag == TRACE) C[TraceNode] = 100.0; + int i; + + /* Update junction quality */ + for (i=1; i<=Njuncs; i++) + { + if (D[i] < 0.0) { + VolIn[i] -= D[i]*dt; + } + if (VolIn[i] > 0.0) { + C[i] = MassIn[i]/VolIn[i]; + } + else { + C[i] = XC[i]; + } + } + + /* Update tank quality */ + updatetanks(dt); + + /* For flow tracing, set source node concen. to 100. */ + if (Qualflag == TRACE) C[TraceNode] = 100.0; } @@ -972,9 +985,13 @@ void sourceinput(long dt) /* Mass added is difference between source */ /* & node concen. times outflow volume */ case SETPOINT: - if (s > C[n]) massadded = (s-C[n])*volout; - else massadded = 0.0; - break; + if (s > C[n]) { + massadded = (s-C[n])*volout; + } + else { + massadded = 0.0; + } + break; /* Flow-Paced Booster Source: */ /* Mass added = source concen. times outflow volume */ @@ -1557,7 +1574,7 @@ void ratecoeffs() kw = Link[k].Kw; if (kw != 0.0) kw = piperate(k); Link[k].Rc = kw; - R[k] = 0.0; + PipeRateCoeff[k] = 0.0; } } /* End of ratecoeffs */ diff --git a/src/vars.h b/src/vars.h index a2780a0..eee1cda 100755 --- a/src/vars.h +++ b/src/vars.h @@ -151,9 +151,9 @@ AUTHOR: L. Rossman *E, /* Emitter flows */ *K, /* Link settings */ *Q, /* Link flows */ - *R, /* Pipe reaction rate */ + *PipeRateCoeff, /* Pipe reaction rate */ *X, /* General purpose array */ - *XC; /* General purpose array */ + *XC; /* General purpose array for water quality */ EXTERN double *H; /* Node heads */ EXTERN double *QTankVolumes; EXTERN double *QLinkFlow;