Changeset 8308


Ignore:
Timestamp:
Jan 18, 2012, 5:06:52 PM (12 years ago)
Author:
davies
Message:

Added extrapolate_velocity_second_order option in config.py
and getting various tests working in gareth/tests

Location:
trunk
Files:
14 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/anuga_core/source/anuga/config.py

    r8098 r8308  
    9595# FIXME (Ole) Maybe get rid of order altogether and use beta_w
    9696default_order = 2
     97
     98# Option to use velocity extrapolation instead of momentum extrapolation in the
     99# routine domain.extrapolate_second_order_sw
     100extrapolate_velocity_second_order=False
    97101
    98102################################################################################
  • trunk/anuga_core/source/anuga/shallow_water/shallow_water_domain.py

    r8235 r8308  
    210210        from anuga.config import g, beta_w, beta_w_dry, \
    211211             beta_uh, beta_uh_dry, beta_vh, beta_vh_dry, tight_slope_limiters
     212        from anuga.config import extrapolate_velocity_second_order
    212213        from anuga.config import alpha_balance
    213214        from anuga.config import optimise_dry_cells
     
    215216        from anuga.config import use_edge_limiter
    216217        from anuga.config import use_centroid_velocities
     218       
    217219
    218220        self.set_minimum_allowed_height(minimum_allowed_height)
    219221        self.maximum_allowed_speed = maximum_allowed_speed
     222
     223        self.extrapolate_velocity_second_order=extrapolate_velocity_second_order
    220224
    221225        self.g = g
     
    11361140              Ymom.vertex_values,
    11371141              Elevation.vertex_values,
    1138               int(domain.optimise_dry_cells))
     1142              int(domain.optimise_dry_cells),
     1143              int(domain.extrapolate_velocity_second_order))
    11391144
    11401145def distribute_using_vertex_limiter(domain):
  • trunk/anuga_core/source/anuga/shallow_water/shallow_water_ext.c

    r8219 r8308  
    13321332                                 double* ymom_vertex_values,
    13331333                                 double* elevation_vertex_values,
    1334                                  int optimise_dry_cells) {
     1334                                 int optimise_dry_cells,
     1335                                 int extrapolate_velocity_second_order) {
    13351336                 
    13361337                 
     
    13431344  double dqv[3], qmin, qmax, hmin, hmax;
    13441345  double hc, h0, h1, h2, beta_tmp, hfactor;
    1345 
     1346  double xmom_centroid_store[number_of_elements], ymom_centroid_store[number_of_elements], dk, dv0, dv1, dv2;
    13461347   
     1348  if(extrapolate_velocity_second_order==1){
     1349      // Replace momentum centroid with velocity centroid to allow velocity
     1350      // extrapolation This will be changed back at the end of the routine
     1351      for (k=0; k<number_of_elements; k++){
     1352
     1353          dk = max(stage_centroid_values[k]-elevation_centroid_values[k],minimum_allowed_height);
     1354          xmom_centroid_store[k] = xmom_centroid_values[k];
     1355          xmom_centroid_values[k] = xmom_centroid_values[k]/dk;
     1356
     1357          ymom_centroid_store[k] = ymom_centroid_values[k];
     1358          ymom_centroid_values[k] = ymom_centroid_values[k]/dk;
     1359      }
     1360  }
     1361
     1362  // Begin extrapolation routine
    13471363  for (k = 0; k < number_of_elements; k++)
    13481364  {
     
    17941810for (i=0;i<3;i++)
    17951811        {
    1796 ymom_vertex_values[k3 + i] = ymom_centroid_values[k] + dqv[i];
     1812        ymom_vertex_values[k3 + i] = ymom_centroid_values[k] + dqv[i];
    17971813        }
    17981814//ymom_vertex_values[k3] = ymom_centroid_values[k] + dqv[0];
     
    18021818  } // for k=0 to number_of_elements-1
    18031819 
     1820  if(extrapolate_velocity_second_order==1){
     1821      // Convert back from velocity to momentum
     1822      for (k=0; k<number_of_elements; k++){
     1823          k3=3*k;
     1824          //dv0 = max(stage_vertex_values[k3]-elevation_vertex_values[k3],minimum_allowed_height);
     1825          //dv1 = max(stage_vertex_values[k3+1]-elevation_vertex_values[k3+1],minimum_allowed_height);
     1826          //dv2 = max(stage_vertex_values[k3+2]-elevation_vertex_values[k3+2],minimum_allowed_height);
     1827          dv0 = max(stage_vertex_values[k3]-elevation_vertex_values[k3],0.);
     1828          dv1 = max(stage_vertex_values[k3+1]-elevation_vertex_values[k3+1],0.);
     1829          dv2 = max(stage_vertex_values[k3+2]-elevation_vertex_values[k3+2],0.);
     1830
     1831          //Correct centroid and vertex values
     1832          xmom_centroid_values[k] = xmom_centroid_store[k];
     1833          xmom_vertex_values[k3]=xmom_vertex_values[k3]*dv0;
     1834          xmom_vertex_values[k3+1]=xmom_vertex_values[k3+1]*dv1;
     1835          xmom_vertex_values[k3+2]=xmom_vertex_values[k3+2]*dv2;
     1836         
     1837          ymom_centroid_values[k] = ymom_centroid_store[k];
     1838          ymom_vertex_values[k3]=ymom_vertex_values[k3]*dv0;
     1839          ymom_vertex_values[k3+1]=ymom_vertex_values[k3+1]*dv1;
     1840          ymom_vertex_values[k3+2]=ymom_vertex_values[k3+2]*dv2;
     1841         
     1842      }
     1843  }
     1844
    18041845  return 0;
    18051846}           
     
    18601901  double beta_w, beta_w_dry, beta_uh, beta_uh_dry, beta_vh, beta_vh_dry;   
    18611902  double minimum_allowed_height, epsilon;
    1862   int optimise_dry_cells, number_of_elements, e;
     1903  int optimise_dry_cells, number_of_elements, e, extrapolate_velocity_second_order;
    18631904 
    18641905  // Provisional jumps from centroids to v'tices and safety factor re limiting
    18651906  // by which these jumps are limited
    18661907  // Convert Python arguments to C
    1867   if (!PyArg_ParseTuple(args, "OOOOOOOOOOOOOi",
     1908  if (!PyArg_ParseTuple(args, "OOOOOOOOOOOOOii",
    18681909            &domain,
    18691910            &surrogate_neighbours,
     
    18791920            &ymom_vertex_values,
    18801921            &elevation_vertex_values,
    1881             &optimise_dry_cells)) {         
     1922            &optimise_dry_cells,
     1923            &extrapolate_velocity_second_order)) {         
    18821924
    18831925    report_python_error(AT, "could not parse input arguments");
     
    19371979                   (double*) ymom_vertex_values -> data,
    19381980                   (double*) elevation_vertex_values -> data,
    1939                    optimise_dry_cells);
     1981                   optimise_dry_cells,
     1982                   extrapolate_velocity_second_order);
     1983
    19401984  if (e == -1) {
    19411985    // Use error string set inside computational routine
Note: See TracChangeset for help on using the changeset viewer.