Is circulation real?

Discussion in 'Hydrodynamics and Aerodynamics' started by Mikko Brummer, Jan 25, 2013.

  1. Sailor Al
    Joined: Feb 2021
    Posts: 651
    Likes: 27, Points: 28
    Location: Sydney

    Sailor Al Senior Member

    I think you may be confusing the title "professor". In the UK, the title "Professor" is conferred on the head of a faculty. Such a status is only granted to academics who have demonstrated the highest degree of academic competence. In the US, it appears anyone who teaches at a tertiary institution gets to call themselves a professor.
    Holger Babinsky is Professor of Aerodynamics, Department of Engineering, University of Cambridge and has held that post for at least 10 years.
    He both knows how to run a wind tunnel experiment and interpret the results.
     
    Last edited: Oct 22, 2022
  2. Sailor Al
    Joined: Feb 2021
    Posts: 651
    Likes: 27, Points: 28
    Location: Sydney

    Sailor Al Senior Member

    This forum is a great research tool. I found this post (my emphasis) from 2004 on an old thread "Circulation" .
    So why indeed are we still debating it?
    Unfortunately I can't find a textbook or peer-reviewed paper that states it as clearly and concisely as you do here.

    Anderson J.D. Fundamentals of Aerodynamics, gets close. After dedicating Section 2.13 to the subject and making many references later, he hedges his bets in Section 3.16 by saying:

    "The circulation theory of lift is an alternative way of thinking about the generation of lift on an aerodynamic body. Keep in mind that the true physical sources of aerodynamic force on a body are the pressure and shear stress distributions exerted on the surface of the body, as explained in Section 1.5."
     
  3. Sailor Al
    Joined: Feb 2021
    Posts: 651
    Likes: 27, Points: 28
    Location: Sydney

    Sailor Al Senior Member

    That is one seriously tortured proverb!
     
  4. gonzo
    Joined: Aug 2002
    Posts: 16,802
    Likes: 1,721, Points: 123, Legacy Rep: 2031
    Location: Milwaukee, WI

    gonzo Senior Member

    You keep on with personal attacks instead of well thought out responses. Doug's sources are not more hidden than those of the persons you quote. In science repeatability of experimental results is what makes a theory valid. A single source is not enough. Perhaps if you did some experiments and published your data, your position would be more credible. Simulations are not reality, regardless of how many graphs and numbers the computer generates.
     
    DogCavalry and mc_rash like this.
  5. Sailor Al
    Joined: Feb 2021
    Posts: 651
    Likes: 27, Points: 28
    Location: Sydney

    Sailor Al Senior Member

    How do you know? He hasn’t revealed his sources.
     
  6. gonzo
    Joined: Aug 2002
    Posts: 16,802
    Likes: 1,721, Points: 123, Legacy Rep: 2031
    Location: Milwaukee, WI

    gonzo Senior Member

    From that standard, neither have you. Your claim is that you have a code giving certain results. However, the code is not published for review.
     
  7. Sailor Al
    Joined: Feb 2021
    Posts: 651
    Likes: 27, Points: 28
    Location: Sydney

    Sailor Al Senior Member

    I am happy to publish my code. It isn't being challenged.
    I don't understand why my enquiry about @Doug Halsey's source of truth about the foundations of aerodynamics is such an issue.
    Current version
    The crucial line is
    $pos += $velocity * $timeInt; // metres from LE
    which is xn+1 = xn + Vn * Δt
    Enjoy>
    PHP:
    <?php
    //Ver 1 - make smoke 1/2 chord, 1 metre, not 1/4 so 200px
    //Ver 2 - interpolate velocities between data points.
    $ver 2;
    set_error_handler("customError");
    $file fopen('velocities.csv''r');
    $velocities = array();
    while ((
    $velocities[] = fgetcsv($file)) !== FALSE) {
    }
    $screenWidth 1100;
    $screenHeight =700;
    $im imagecreate($screenWidth$screenHeight);
    $background_color imagecolorallocate($im000);
    $freeStreamColor =imagecolorallocate($im255,255,255);
    $upperStreamColor =imagecolorallocate($im0,255,255 ); //cyan
    $lowerStreamColor =imagecolorallocate($im255,0,255 ); // magenta
    $wingColour =imagecolorallocate($im180,180,255 ); //pale blue
    //imageline($im, 200,0, 200, $screenHeight, $freeStreamColor);
    //imageline($im, 600,0, 600, $screenHeight, $freeStreamColor);
    $thick 5;
    imagesetthickness($im$thick);

    //$x1= 100; $x2=200; $y1=100;
    $upperFrontPosPx 0//distance down the track, of the front of the upper smoke Px from LE

    $timeInt 0.0001// secs 0.1 millisecs
    $baseSpeed 10//metres/sec
    $velocityIndex 0;
    $time 0;
    $distRange 0.02//metres between measured velocities in the velocities table
    $freeStreamFrontPx 0// position of front of free stream at normal speed
    $prevFrame 0;
    $chordStart 400// px offset from left

    //$upperSmokeFront = new Smoke(/*type*/0, $velocities, $timeInt, /*initPos*/ 0, $baseSpeed);
    $delay .25// metres
    $upperSmokeFront = array(
        
    "velocityIndex" => 0,
        
    "pos" => -$delay,
        
    "velocity"=>$baseSpeed
        
    );
    $upperSmokeRear = array(
        
    "velocityIndex" => 0,
        
    "pos" => -(1$delay),
        
    "velocity"=>$baseSpeed
        
    );
    $lowerSmokeFront = array(
        
    "velocityIndex" => 0,
        
    "pos" => -$delay,
        
    "velocity"=>$baseSpeed
        
    );
    $lowerSmokeRear = array(
        
    "velocityIndex" => 0,
        
    "pos" => -(1$delay),
        
    "velocity"=>$baseSpeed
        
    );
    $cycle=0;
    while (
    $freeStreamFrontPx 680){ // metres of the wing chord of freestream
            
    $cycle++;
        
    $currentFrame round($time *20+.5);
        
    $freeStreamFrontPx += 200*$baseSpeed *$timeInt;// position at base speed
        
    $upperSmokeFront calcNextPos (1,$upperSmokeFront);
        
    $upperSmokeRear calcNextPos (1,$upperSmokeRear);
        
    $lowerSmokeFront calcNextPos (2,$lowerSmokeFront);
        
    $lowerSmokeRear calcNextPos (2,$lowerSmokeRear);

        
    $y 100*($currentFrame-1);
        
    $timeFormatted round($time*100)/100;
        if (
    $currentFrame <> $prevFrame ){
            
    imagestring($im,5,10,$y +10,"Frame:"$currentFrame" time: $timeFormatted secs." ,$freeStreamColor);
            
    imagedashedline($im 0$y$screenWidth$y$freeStreamColor);
            
    $prevFrame =$currentFrame;
            
    //value in $upperFrontPosPx is metres from the start of the chord. 1 metre = 200 px
    /******** freeStream ***********/
            
    $y  += 30// vertical separation

            
    $x1 $chordStart 200 $freeStreamFrontPx ;
            
    $x2 $chordStart $freeStreamFrontPx ;
            
    imageline($im $x1$y$x2$y$freeStreamColor);
            
    //imagestring($im,2,$x1-80,$y - 5,
            
    imagestring($im,2,20,$y 5,
                
    "Free stream",
                
    $freeStreamColor
            
    );
    /******** upper smoke ***********/
            //print_r($upperSmokeFront);
            
    $upperSmokeFrontPx 200*$upperSmokeFront["pos"] ;
            
    $upperSmokeRearPx 200*$upperSmokeRear["pos"] ;
            
    //print "upperSmokeRearPx $upperSmokeRearPx\n";
            
    $y  += 10;
           
            
    $x1 =  $chordStart $upperSmokeRearPx//$upperSmokeFrontPx - 100  ; //100px
            //$x1 =  $upperRearPosPx ;
            
    $x2 =  $chordStart $upperSmokeFrontPx;
            
    imageline($im $x1$y$x2$y$upperStreamColor);
            
    imagestring($im,2,20,$y 5,
                
    "Upper stream",
                
    $upperStreamColor
            
    );
    /******** wing *************/
            
    $y  += 15;
            
    imagestring($im,4,100,$y 5,"WING",$wingColour);
            
    $x1 =  $chordStart ;
            
    $x2 =  $chordStart 400 ;
            
    imagesetthickness($im10);
            
    imageline($im $x1$y$x2$y$wingColour);
    /******** lower smoke ***********/
            //print_r($lowerSmokeFront);
            
    $lowerSmokeFrontPx 200*$lowerSmokeFront["pos"] ;
            
    $lowerSmokeRearPx 200*$lowerSmokeRear["pos"] ;
            
    //print "lowerSmokeRearPx $lowerSmokeRearPx\n";
            
    $y  += 15;
           
            
    $x1 =  $chordStart $lowerSmokeRearPx//$lowerSmokeFrontPx - 100  ; //100px
            //$x1 =  $lowerRearPosPx ;
            
    $x2 =  $chordStart $lowerSmokeFrontPx;
            
    imagesetthickness($im$thick);

            
    imageline($im $x1$y$x2$y$lowerStreamColor);
            print 
    round($time *25+.5)."  time,"round($time*100)/100 .",lowerSmokeRearPx,"round($lowerSmokeRearPx).",lowerSmokeFrontPx,"round($lowerSmokeFrontPx)."\n";
            
    imagestring($im,2,20,$y 5,"Lower stream",$lowerStreamColor
            
    );
    /******** freeStream ***********/
            
    $y  += 10// vertical separation
            
    $x1 $chordStart 200 $freeStreamFrontPx ;
            
    $x2 $chordStart $freeStreamFrontPx ;
            
    imageline($im $x1$y$x2$y$freeStreamColor);
            
    imagestring($im,2,20,$y 5,"Free stream",$freeStreamColor
            
    );

        }
        
    $fileName ="velocity".$ver.".png";
            
    imagepng($im$fileName);//exit;
            
    imageDestroy($im);
           
        
    //if (intval($time *100) % 10 == 0){
        //print round($time *25+.5)." ". ($time *25) ." time, $time , pos, $upperFrontPosPx, $freeStreamFrontPx\n";//, velocityIndex, $velocityIndex velocity, $velocity, positionAsPartOfCurrentDistRange, $upperFrontPosPxitionAsPartOfCurrentDistRange, velocityGrad, $velocityGrad \n";
        //}
        
    $time $time $timeInt;
        if (
    $time .1){
            
    //exit;
        
    }
       
    }
    print 
    "cycle: $cycle\n";


    // can't get OO to work, back to functiona and arrays.
    function calcNextPos($smokeIndex,$smoke){ // working in metres and m/sec
        
    global $timeInt$velocities,$baseSpeed ,$distRange;
        
    //print "HELLO\n";
        
    $pos $smoke["pos"];
        
    $velocityIndex =$smoke["velocityIndex"];
        
    $velocity $smoke["velocity"]; // previously calculated (or initial for step0)
       
        
    $deltaX $velocity $timeInt;
    //print "velocityIndex $velocityIndex \n";exit;
        
    $pos +=  $velocity $timeInt;  // metres from LE
        
    if ($pos <0){ // use free stream velocity
            
    $velocity $baseSpeed;
            
    //$pos +=  $velocity * $timeInt;  // metres from LE //echo "using baseSpeed $velocity pos $pos\n";
        
    }
        else{
            if (isset(
    $velocities[$velocityIndex+1][0])){ //position of front of upper airflow
                
    if ($pos $velocities[$velocityIndex+1][0] ){ //still not found
                    
    $velocityIndex ++;
                    if (
    $pos $velocities[$velocityIndex+1][0]) { //we've skipped an interval so rethink the time intervals
                        
    print "velocityIndex $velocityIndex rethink the intervals!\n"; exit; }
                }
                
    $nextIndex $velocityIndex+1;
                
    $partOfCurrentDistRange = ($pos $velocities[$velocityIndex][0]) /$distRange;// distance down this segment
                
    $vStep $velocities[$nextIndex][$smokeIndex]  - $velocities[$velocityIndex][$smokeIndex]; // delta V between start and end of delta x
                
    $deltaV $vStep *$partOfCurrentDistRange;
                
    $velocity $velocities[$velocityIndex][$smokeIndex] +$deltaV// new velocity
                
    if ($smokeIndex ==2){ //lower
                    //print "lower partOfCurrentDistRange $partOfCurrentDistRange velocity $velocity\n";
                
    }
            }
            else{
    $nextIndex $velocityIndex;} // past the end so constant velocity
           
        
    }
       
        
    $smoke["velocity"] = $velocity;
        
    //print "velocityIndex $velocityIndex velocity $velocity pos $pos \n";
        
    $posPx =200*$pos ;// returns Px from LE
        //print "pos: $pos\n";
        
    $smoke["pos"] = $pos;
        
    $smoke["velocityIndex"] = $velocityIndex;
        
    //print_r($smoke);
        
    return $smoke ;// returns Px from LE
    }

        function 
    customError($errno$errstr) {
            echo 
    "Error:[$errno$errstr\n";
            
    //exit;
        
    }
    ?>
     
  8. gonzo
    Joined: Aug 2002
    Posts: 16,802
    Likes: 1,721, Points: 123, Legacy Rep: 2031
    Location: Milwaukee, WI

    gonzo Senior Member

    How far apart are the data points you interpolate?
     
  9. Sailor Al
    Joined: Feb 2021
    Posts: 651
    Likes: 27, Points: 28
    Location: Sydney

    Sailor Al Senior Member

    I digitised the data from @Doug Halsey's grid at 0.01 intervals (the first 90 points to .9 after which the data gets a bit wonky! (see my post#432)
    separately for the upper and lower surfaces: (col 1 is metres along the 2 metre chord)
    0.00,15.0,15.0
    0.02,23.3,4.5
    0.04,22.7,0.7
    0.06,22.0,1.5
    0.08,21.0,3.0
    0.10,20.5,4.0
    ....
    and interpolate between the points as a straight line.
     
    Last edited: Oct 25, 2022
  10. Sailor Al
    Joined: Feb 2021
    Posts: 651
    Likes: 27, Points: 28
    Location: Sydney

    Sailor Al Senior Member

    I forgot to ask. Why do you want to know?
     
  11. gonzo
    Joined: Aug 2002
    Posts: 16,802
    Likes: 1,721, Points: 123, Legacy Rep: 2031
    Location: Milwaukee, WI

    gonzo Senior Member

    It matters how far apart point are when interpolating. Is the first number the interval? I interpret that as one point every 2cm.
     
  12. Sailor Al
    Joined: Feb 2021
    Posts: 651
    Likes: 27, Points: 28
    Location: Sydney

    Sailor Al Senior Member

    Yes, every 2 cm of the first 1.8 metres of the 2 metre chord length. That was the grid size of the graph I was digitising.
     
  13. gonzo
    Joined: Aug 2002
    Posts: 16,802
    Likes: 1,721, Points: 123, Legacy Rep: 2031
    Location: Milwaukee, WI

    gonzo Senior Member

    @Alan Cattelliot and Doug. It seems to me that the spacing may be too coarse. It is possibly larger than the boundary layer if I am not mistaken.
     
  14. Sailor Al
    Joined: Feb 2021
    Posts: 651
    Likes: 27, Points: 28
    Location: Sydney

    Sailor Al Senior Member

    OK, in the absence of a response by the addressees, I'll ask the question.
    Why would the quality of the data be compromised by the relationship between the spacing of the data points (along the chord) and the thickness of the boundary layer (perp to the chord)?
     

  15. gonzo
    Joined: Aug 2002
    Posts: 16,802
    Likes: 1,721, Points: 123, Legacy Rep: 2031
    Location: Milwaukee, WI

    gonzo Senior Member

    The quality of the data is not the issue. If the boundary layer is thinner than the spacing between data points, then you can't calculate much about it. For a statistical value, you need at least three points at the area of interest.
     
Loading...
Forum posts represent the experience, opinion, and view of individual users. Boat Design Net does not necessarily endorse nor share the view of each individual post.
When making potentially dangerous or financial decisions, always employ and consult appropriate professionals. Your circumstances or experience may be different.