int findNodeDepths(double dt) { int i; int converged; // convergence flag double yOld; // previous node depth (ft) // --- compute outfall depths based on flow in connecting link for ( i = 0; i < Nobjects[LINK]; i++ ) link_setOutfallDepth(i); // --- compute new depth for all non-outfall nodes and determine if // depth change from previous iteration is below tolerance converged = TRUE; #pragma omp parallel num_threads(NumThreads) //(5.1.008) { #pragma omp for private(yOld) //(5.1.008) for ( i = 0; i < Nobjects[NODE]; i++ ) { if ( Node[i].type == OUTFALL ) continue; yOld = Node[i].newDepth; setNodeDepth(i, dt); Xnode[i].converged = TRUE; if ( fabs(yOld - Node[i].newDepth) > HeadTol ) { converged = FALSE; Xnode[i].converged = FALSE; } } } //(5.1.008) return converged; }
void initNodeDepths(void) // // Input: none // Output: none // Purpose: sets initial depth at nodes for Dynamic Wave flow routing. // { int i; // link or node index int n; // node index double y; // node water depth (ft) // --- use Node[].inflow as a temporary accumulator for depth in // connecting links and Node[].outflow as a temporary counter // for the number of connecting links for (i = 0; i < Nobjects[NODE]; i++) { Node[i].inflow = 0.0; Node[i].outflow = 0.0; } // --- total up flow depths in all connecting links into nodes for (i = 0; i < Nobjects[LINK]; i++) { if ( Link[i].newDepth > FUDGE ) y = Link[i].newDepth + Link[i].offset1; else y = 0.0; n = Link[i].node1; Node[n].inflow += y; Node[n].outflow += 1.0; n = Link[i].node2; Node[n].inflow += y; Node[n].outflow += 1.0; } // --- if no user-supplied depth then set initial depth at non-storage/ // non-outfall nodes to average of depths in connecting links for ( i = 0; i < Nobjects[NODE]; i++ ) { if ( Node[i].type == OUTFALL ) continue; if ( Node[i].type == STORAGE ) continue; if ( Node[i].initDepth > 0.0 ) continue; if ( Node[i].outflow > 0.0 ) { Node[i].newDepth = Node[i].inflow / Node[i].outflow; } } // --- compute initial depths at all outfall nodes for ( i = 0; i < Nobjects[LINK]; i++ ) link_setOutfallDepth(i); }