Changeset 8308
- Timestamp:
- Jan 18, 2012, 5:06:52 PM (11 years ago)
- Location:
- trunk
- Files:
-
- 14 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/anuga_core/source/anuga/config.py
r8098 r8308 95 95 # FIXME (Ole) Maybe get rid of order altogether and use beta_w 96 96 default_order = 2 97 98 # Option to use velocity extrapolation instead of momentum extrapolation in the 99 # routine domain.extrapolate_second_order_sw 100 extrapolate_velocity_second_order=False 97 101 98 102 ################################################################################ -
trunk/anuga_core/source/anuga/shallow_water/shallow_water_domain.py
r8235 r8308 210 210 from anuga.config import g, beta_w, beta_w_dry, \ 211 211 beta_uh, beta_uh_dry, beta_vh, beta_vh_dry, tight_slope_limiters 212 from anuga.config import extrapolate_velocity_second_order 212 213 from anuga.config import alpha_balance 213 214 from anuga.config import optimise_dry_cells … … 215 216 from anuga.config import use_edge_limiter 216 217 from anuga.config import use_centroid_velocities 218 217 219 218 220 self.set_minimum_allowed_height(minimum_allowed_height) 219 221 self.maximum_allowed_speed = maximum_allowed_speed 222 223 self.extrapolate_velocity_second_order=extrapolate_velocity_second_order 220 224 221 225 self.g = g … … 1136 1140 Ymom.vertex_values, 1137 1141 Elevation.vertex_values, 1138 int(domain.optimise_dry_cells)) 1142 int(domain.optimise_dry_cells), 1143 int(domain.extrapolate_velocity_second_order)) 1139 1144 1140 1145 def distribute_using_vertex_limiter(domain): -
trunk/anuga_core/source/anuga/shallow_water/shallow_water_ext.c
r8219 r8308 1332 1332 double* ymom_vertex_values, 1333 1333 double* elevation_vertex_values, 1334 int optimise_dry_cells) { 1334 int optimise_dry_cells, 1335 int extrapolate_velocity_second_order) { 1335 1336 1336 1337 … … 1343 1344 double dqv[3], qmin, qmax, hmin, hmax; 1344 1345 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; 1346 1347 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 1347 1363 for (k = 0; k < number_of_elements; k++) 1348 1364 { … … 1794 1810 for (i=0;i<3;i++) 1795 1811 { 1796 ymom_vertex_values[k3 + i] = ymom_centroid_values[k] + dqv[i];1812 ymom_vertex_values[k3 + i] = ymom_centroid_values[k] + dqv[i]; 1797 1813 } 1798 1814 //ymom_vertex_values[k3] = ymom_centroid_values[k] + dqv[0]; … … 1802 1818 } // for k=0 to number_of_elements-1 1803 1819 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 1804 1845 return 0; 1805 1846 } … … 1860 1901 double beta_w, beta_w_dry, beta_uh, beta_uh_dry, beta_vh, beta_vh_dry; 1861 1902 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; 1863 1904 1864 1905 // Provisional jumps from centroids to v'tices and safety factor re limiting 1865 1906 // by which these jumps are limited 1866 1907 // Convert Python arguments to C 1867 if (!PyArg_ParseTuple(args, "OOOOOOOOOOOOOi ",1908 if (!PyArg_ParseTuple(args, "OOOOOOOOOOOOOii", 1868 1909 &domain, 1869 1910 &surrogate_neighbours, … … 1879 1920 &ymom_vertex_values, 1880 1921 &elevation_vertex_values, 1881 &optimise_dry_cells)) { 1922 &optimise_dry_cells, 1923 &extrapolate_velocity_second_order)) { 1882 1924 1883 1925 report_python_error(AT, "could not parse input arguments"); … … 1937 1979 (double*) ymom_vertex_values -> data, 1938 1980 (double*) elevation_vertex_values -> data, 1939 optimise_dry_cells); 1981 optimise_dry_cells, 1982 extrapolate_velocity_second_order); 1983 1940 1984 if (e == -1) { 1941 1985 // Use error string set inside computational routine
Note: See TracChangeset
for help on using the changeset viewer.