sandbox/Hayward/Prins/prins.c

    Dam-break Wave Generation

    Prins, 1958 conducted a dam break experiment to investigate the characteristics of the resultant waves. The 2D lab-scale physical model was used to investigate a range of elevated and depressed water columns instantaneously released, and compare the results to the wave theories of the time.

    In a flume of depth H, a water column is held behind the origin of height difference Q and of horizontal extent L. These parameters are varied throughout the experimental series. The column is released from rest (in the experiment by means of quickly pulling a slide) and the resultant waves are measured down flume.

    It is compared here to results produced by the non-hydrostatic multilayer and Navier-Stokes/VOF solvers. Comparisons are also made to the Green-Naghdi and Saint-Venant equations.

    #include <sys/stat.h>
    #include "grid/multigrid1D.h"
    #if GN
    # include "green-naghdi.h"
    #elif NH
    # include "layered/hydro.h"
    # include "layered/nh.h"
    # include "layered/remap.h"
    # include "layered/perfs.h"
    #else // if SV
    # include "saint-venant.h"
    #endif

    Being research undertaken in California many years ago, units were of the Imperial standard (feet, inches, pounds, etc.)

    In the physical experiment, the end of the flume contained a simple ‘wave absorber’. The domain for the numerical experiment is extended to prevent reflections.

    #define GRAVITY 9.81
    #define LENGTH 30.
    #define ENDTIME 30.
    #define L 0.09144  // 0.3 ft in m
    #define H 0.15240  // 0.5 ft in m
    #define Q 0.09144  // +0.3 ft in m

    This example has parameters set for one of the two large time-series illustrations in the publication.

    The multilayer run has 30 layers imposed.

    int main()
    {
      struct stat st = {0};
      if (stat("./profiles", &st) == -1) {
        mkdir("./profiles", 0755);
      }
      X0 = -L;
      L0 = LENGTH + L;
      G = GRAVITY;
      N = 8192; // 2**13
    #if NH
      nl = 30; // number of layers
      breaking = 0.07;
    #endif
      run();
    }

    The initial conditions are set to instantiate the water column at rest. This resembles a dam-break situation.

    event init (i = 0)
    {
      foreach() {
    #if NH
        foreach_layer() {
          h[] = x < 0. ? (Q+H)/nl : H/nl; 
          u.x[] = 0.;
        }
    #else  // if SV or GN
        h[] = x < 0. ? Q+H : H;
        u.x[] = 0.;
    #endif
      }
    }

    Numerical guages are positioned at identical locations as the physical.

    Gauge gauges[] = {
      {"x05",  1.524},
      {"x15",  4.572},
      {"x25",  7.62 },
      {"x35", 10.668},
      {"x45", 13.716},
      {NULL}
    };

    Fool-proof check and progress is printed.

    event output (i++) {
      if (i == 0) {
    #if GN
        fprintf (ferr, "Serre-Green-Naghdi\n");
    #elif NH
        fprintf (ferr, "Multilayer\n");
    #else // if SV
        fprintf (ferr, "Saint Venant\n");
    #endif
        fprintf (ferr, "t dt\n");
      }
      fprintf (ferr, "%g %g\n", t, dt);
    
      // Gauges
      output_gauges (gauges, {eta});
    }

    Additionally output are free-surface profiles early in the simulation to compare between models, and an example of the multilayer distribution.

    event profile_layers_output (t = 0.35) {
    #if NH
      static FILE * fp_layer = fopen ("profile_layers_t035.dat", "w");
      foreach() {
        int count = 0;
        foreach_layer() {
          fprintf (fp_layer, "%d %g %g\n", count, x, h[]);
          count++;
        }
      }
    #endif
    }
    
    event profiles (t <= 1.5; t += 0.05) {
      char name[60];
      sprintf(name, "profiles/profile_t_%g.dat", t);
      FILE * fp = fopen (name, "w");
      foreach()
        fprintf (fp, "%g %g\n", x, eta[]);
      fclose(fp); 
    }
    
    event end (t = ENDTIME) {
    }

    Results

    (Must replace with GNUplot)

    The multilayer scheme has very good agreement with the physical experiment and the N-S solution, and accurately predicts the phase arrivals and heights. Green-Naghdi approaches some consensus, but never accurately models the characteristics of the first arrival.

    Leading crest height at the first gauge ( x=5 ft ). Red dashed line from physical experiment. Key shows variation of L.

    Profile comparisons of the different models at t=0.35.

    Time progressing profiles of the multilayer solution compared with the Navier-Stokes VOF solution.

    To-do

    • Actually use GNUplot (for once) and replace the plots.
    • Upload equivalent N-S case.
    • Reformat to use consistant units…!!

    References

    [prins1958]

    Characteristics of waves generated by a local disturbance. Eos, Transactions American Geophysical Union, 39(5):865–874, 1958. [ DOI | http | http ]