sandbox/acastillo/faraday_waves_mixing/faraday3D_outputs.h

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    
    
    #include "Blues.h"
    event movie(t += 0.1){  
      for (scalar s in {f}){
        view(camera = "top");
        box();
        draw_vof("f");
        save("top.mp4");
      }
    }
    
    int dissipation_rate (double* rates){
      double rateWater = 0.0;
      double rateAir = 0.0;
      double rateWater2 = 0.0;
      foreach (reduction (+:rateWater), reduction (+:rateAir), reduction (+:rateWater2)) {
        if (cs[] == 1) {
          double dcdx = (c[1]     - c[-1]    )/(2.*Delta);
          double dcdy = (c[0,1]   - c[0,-1]  )/(2.*Delta);
          double dcdz = (c[0,0,1] - c[0,0,-1])/(2.*Delta);
          double dudx = (u.x[1]     - u.x[-1]    )/(2.*Delta);
          double dudy = (u.x[0,1]   - u.x[0,-1]  )/(2.*Delta);
          double dudz = (u.x[0,0,1] - u.x[0,0,-1])/(2.*Delta);
          double dvdx = (u.y[1]     - u.y[-1]    )/(2.*Delta);
          double dvdy = (u.y[0,1]   - u.y[0,-1]  )/(2.*Delta);
          double dvdz = (u.y[0,0,1] - u.y[0,0,-1])/(2.*Delta);
          double dwdx = (u.z[1]     - u.z[-1]    )/(2.*Delta);
          double dwdy = (u.z[0,1]   - u.z[0,-1]  )/(2.*Delta);
          double dwdz = (u.z[0,0,1] - u.z[0,0,-1])/(2.*Delta);
          double SDeformxx = dudx;
          double SDeformxy = 0.5*(dudy + dvdx);
          double SDeformxz = 0.5*(dudz + dwdx);
          double SDeformyx = SDeformxy;
          double SDeformyy = dvdy;
          double SDeformyz = 0.5*(dvdz + dwdy);
          double SDeformzx = SDeformxz;
          double SDeformzy = SDeformyz;
          double SDeformzz = dwdz;
          double sqterm = 2.*dv()*(sq(SDeformxx) + sq(SDeformxy) + sq(SDeformxz) +
                sq(SDeformyx) + sq(SDeformyy) + sq(SDeformyz) +
                sq(SDeformzx) + sq(SDeformzy) + sq(SDeformzz)) ;
          rateWater += mu1/rho[]*f[]*sqterm; //water
          rateAir   += mu2/rho[]*(1. - f[])*sqterm; //air
          rateWater2 += c.D1*f[]*dv()*(sq(dcdx) + sq(dcdy) + sq(dcdz)); //water
        }
      }
      rates[0] = rateWater;
      rates[1] = rateAir;
      rates[2] = rateWater2;
      return 0;
    }
    
    #include "../output_fields/available_potential.h"
    event time_series(t += 0.1){
    
      scalar zref[];
      double zmix = reference_height(zref, f, c, 0.0, 1.0, true, _H0/2.);
    
      double ekin = 0., epot[3] = {0.}, bpot = 0.;
      foreach (reduction(+ : ekin), reduction(+ : epot[:3]), reduction(+: bpot)){
        epot[0] += dv() * rhov[] * x;
        epot[1] += dv() * rhov[] * y;
        epot[2] += dv() * rhov[] * z;
        bpot += dv() * f[] * rhov[] * zref[];
        foreach_dimension(){
          ekin += dv() * 0.5 * rhov[] * sq(u.x[]);
        }
      }
    
      double rates[3];
      dissipation_rate(rates);
      double disvWater = rates[0];
      double disvAir   = rates[1];
      double discWater = rates[2];
    
      if (pid() == 0){
        FILE *fp = fopen("globals.asc", "a");
        fprintf(fp, "%f %.9g %.9g %.9g %.9g %.9g %.9g %.9g %.9g %.9g %.9g %.9g \n", t, force.Gn, ekin, epot[0], epot[1], epot[2], bpot, zmix, disvWater, disvAir, discWater, force.ramp);
        fclose(fp);
      }
    }
    
    event save_profiles(t += 0.2){
    
      scalar mfrac[];
      foreach (){
        mfrac[] = rho1*f[]/(f[]*(rho1 - rho2) + rho2);
      }
    
      scalar *list = {u, p, mfrac, c, zref};
      int n = (1 << MAXLEVEL);
      int m1 = (1 << MAXLEVEL) / (L0 / _H0);
      int m2 = (1 << MAXLEVEL) / (L0 / _D0);  
      profile_foreach_region2(list, rhov, filename="profiles_favre.asc", xmin = -L0/2., xmax = L0/2., ymin = -_D0 / 2., ymax = _D0 / 2., hmin = -_H0 / 2. + _mindel, hmax = _H0 / 2. - _mindel, n = n, m1 = m1, m2 = m2);
    }
    
    #include "curvature.h"
    event save_facets(t += 0.2){
      scalar kappa[];
      curvature(f, kappa);
    
      char fname[99];
      sprintf(fname, "interface_t%.5f", t);
      output_facets_vtu(f, kappa, fname);
    }
    
    event save_slices(t += 0.7854){
    
      reference_height(yref, f, c, 0.0, 1.0, true, _H0/2.);
      foreach()
        yref[] *= cs[]*f[];
    
      char filename[99];
      sprintf(filename, "slice_x_t%09.5f.vtkhdf", t);
      output_vtkhdf_slice({f, p, c, rhov, yref}, {u}, filename, (coord){1, 0, 0}, 0);
    
      sprintf(filename, "slice_y_t%09.5f.vtkhdf", t);
      output_vtkhdf_slice({f, p, c, rhov, yref}, {u}, filename, (coord){0, 1, 0}, 0);
    
      sprintf(filename, "slice_z_t%09.5f.vtkhdf", t);
      output_vtkhdf_slice({f, p, c, rhov, yref}, {u}, filename, (coord){0, 0, 1}, 0);
    }
    
    event save_snapshots(t += 6.2832){
      char filename[99];
      sprintf(filename, "snapshot_t%09.5f.vtkhdf", t);
      output_vtkhdf({f, p, c, rhov, yref}, {u}, filename);
    }