Lindo Systems

MODEL:
 ! Model of flow in an uncovered stream,  (ChannelFlo.lng)
e.g., small river, sewer, irrigation canal, etc.;
! Given a desired flow in volume/second, and
  a slope in length/length, find the width and
  height of a rectangular channel to achieve
  this flow at minimum cost of materials;
! Keywords: Channel flow, Gauckler-Manning-Strickler, Global optimization,
  Hydraulics, Irrigation, LINGO, Parametric, Report generation, River flow,
  Sewer flow, Stream flow, Water flow;
DATA:
 S= 0.001;! Slope of the channel;
 Q= 100;  ! Required flow in meters^3 or feet^3/ second;
 k = 1;   ! units conversion factor, = 1 for SI units (meters)
         = 1.48592 = (3.28083499 ft/m)^(1/3), for English units (feet);
! Some bounds on b and h;
 blo = .5;bhi = 100;
 hlo = .5;hhi = 100;
ENDDATA

SUBMODEL STREAMFLO:
 ! Parameters:
    Q = discharge rate in meters^3 or feet^3/ second,
    S = slope of water surface, or head loss in length/length,
    n = Gauckler-Manning-Strickler roughness coefficient,
         higher means a slower flow,
         concrete has a coefficient of about .014,
    k = units conversion factor, = 1 for SI units (meters)
         = 1.4859 for English units (feet).
 Variables:
    b = channel width,
    P = wetted perimeter of rectangular cross section,
        e.g., amount of concrete needed,
    A = area of cross section,
    R = hydraulic radius,
    h = height of fluid in channel,
 ;
 min=P;! Min sum of sidewalls + base;

 P= b+2* h;
 A= b* h;! Area;
 P* R= A;! Compute hydraulic radius;
! The Gauckler-Manning-Strickler formula for discharge rate gives
 flow velocity = (R^(2/3))*(S^0.5)/n, so discharge rate
           Q = A*(R^(2/3))*(S^0.5)/n, or ;
 k* A*( R^(2/3))= n* Q/( S^0.5);

! This model is hard to solve, so be sure to turn on
 either global or multi-start;
! Some reasonable bounds on b and h;
 @BND( blo, b, bhi);
 @BND( hlo, h, hhi);
ENDSUBMODEL

CALC:
 @SET("TERSEO",2);   ! Turn off default output;
 @SET( 'GLOBAL',1);  ! 0:Do not use Global solver, 1:Use the Globasolver;
 @WRITE('Channel height, h, and width b, for various coefficients, n:',@NEWLINE(1));
 @WRITE(' to achieve a target flow volume of ',Q,' cubic ');
 @IFC( k #EQ# 1:
   @WRITE('meters/sec.',@NEWLINE(1));
  @ELSE
   @WRITE('feet/sec.',@NEWLINE(1));
     );
 @WRITE('   n         b       h       P ',@NEWLINE(1));
 FIRST = .01; ! Smallest value of n to try;
 LAST = .04;  ! Largest value of n to try;
 STEP = .005; ! Step size over n;
 n = FIRST;
! Parametric or scenario analysis for various values of the roughness coefficient n;
 @WHILE( n #LE# LAST:
   @SOLVE( STREAMFLO);
   @WRITE( @FORMAT(n,'6.3f'),'  ',@FORMAT(b,'7.3f'),' ',@FORMAT(h,'7.3f'),'   ',@FORMAT(p,'7.3f'), @NEWLINE(1));
   n = n + STEP;
       );
ENDCALC