Changeset 9010
- Timestamp:
- Oct 30, 2013, 5:34:25 PM (12 years ago)
- Location:
- trunk/anuga_work/development/gareth
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/anuga_work/development/gareth/experimental/bal_and/swb2_domain.py
r9008 r9010 64 64 # Most of these override the options in config.py 65 65 #------------------------------------------------ 66 self.set_CFL(1.0 )66 self.set_CFL(1.00) 67 67 self.set_use_kinematic_viscosity(False) 68 68 self.timestepping_method='rk2'#'rk3'#'euler'#'rk2' … … 76 76 77 77 self.beta_w=1.0 78 self.beta_w_dry= 0.078 self.beta_w_dry=1.0 79 79 self.beta_uh=1.0 80 80 self.beta_uh_dry=0.0 -
trunk/anuga_work/development/gareth/experimental/bal_and/swb2_domain_ext.c
r9008 r9010 67 67 // Apply limiting of speeds according to the ANUGA manual 68 68 if (*h < epsilon) { 69 *h = max(0.0,*h); // Could have been negative69 //*h = max(0.0,*h); // Could have been negative 70 70 //*h = 0.0; // Could have been negative 71 71 u = 0.0; … … 167 167 // vh_left=0.; 168 168 //} 169 u_left = _compute_speed(&uh_left, &h_left, 169 // NOTE: using hle instead of h_left here seems to help prevent velocity spikes 170 u_left = _compute_speed(&uh_left, &hle, 170 171 epsilon, h0, limiting_threshold); 171 172 … … 182 183 // vh_right=0.; 183 184 //} 184 u_right = _compute_speed(&uh_right, &h_right, 185 // NOTE: using hre instead of h_right here seems to help prevent velocity spikes 186 u_right = _compute_speed(&uh_right, &hre, 185 187 epsilon, h0, limiting_threshold); 186 188 … … 284 286 //}else{ 285 287 // Standard smoothing term 286 edgeflux[i] += (s_max*s_min)*(q_right_rotated[i] - q_left_rotated[i]);288 edgeflux[i] += 1.0*(s_max*s_min)*(q_right_rotated[i] - q_left_rotated[i]); 287 289 //} 288 290 … … 339 341 // Local variables 340 342 double max_speed, length, inv_area, zl, zr; 341 double h0 = H0 ;//H0*H0;//H0*0.1;//H0*H0;//H0*H0; // This ensures a good balance when h approaches H0.343 double h0 = H0*H0;//H0*H0;//H0*0.1;//H0*H0;//H0*H0; // This ensures a good balance when h approaches H0. 342 344 double h_left, h_right, z_half ; // For andusse scheme 343 345 … … 465 467 // Don't allow an outward advective flux if the cell centroid stage 466 468 // is < the edge value 467 if( stage_centroid_values[k] < z_half&& edgeflux[0] > 0.){469 if(((stage_centroid_values[k] < z_half)| hle<H0) && edgeflux[0] > 0.){ 468 470 edgeflux[0] = 0.; 469 471 edgeflux[1] = 0.; 470 472 edgeflux[2] = 0.; 473 //max_speed=0.; 471 474 //pressure_flux=0.; 472 475 } 473 474 if( stage_centroid_values[n] < z_half&& edgeflux[0] < 0.){476 // 477 if(((stage_centroid_values[n] < z_half)| hre<H0) && edgeflux[0] < 0.){ 475 478 edgeflux[0] = 0.; 476 479 edgeflux[1] = 0.; 477 480 edgeflux[2] = 0.; 481 //max_speed=0.; 478 482 //pressure_flux=0.; 479 483 } … … 604 608 } 605 609 610 //printf("%e \n", edgeflux_store[3*30*3]); 611 606 612 // Now add up stage, xmom, ymom explicit updates 607 613 for(k=0; k<number_of_elements; k++){ … … 619 625 // GD HACK 620 626 // Option to limit advective fluxes 621 //if(hc > -h0){627 if(hc > H0){ 622 628 stage_explicit_update[k] += edgeflux_store[ki3+0]; 623 // Cut these terms for shallow flows, and protect stationary states from round-off error624 629 xmom_explicit_update[k] += edgeflux_store[ki3+1]; 625 630 ymom_explicit_update[k] += edgeflux_store[ki3+2]; 626 //}else{627 //stage_explicit_update[k] += edgeflux_store[ki3+0];628 //}631 }else{ 632 stage_explicit_update[k] += edgeflux_store[ki3+0]; 633 } 629 634 630 635 … … 927 932 // Check if cell k is wet 928 933 //if(stage_centroid_values[k] > elevation_centroid_values[k]){ 929 if(stage_centroid_values[k] > elevation_centroid_values[k] + 2.*minimum_allowed_height+epsilon){934 if(stage_centroid_values[k] > elevation_centroid_values[k] + 1.*minimum_allowed_height+epsilon){ 930 935 //if(stage_centroid_values[k] > max_elevation_edgevalue[k] + minimum_allowed_height+epsilon){ 931 936 cell_wetness_scale[k] = 1.; 932 937 } 938 939 min_elevation_edgevalue[k] = min(elevation_edge_values[3*k], 940 min(elevation_edge_values[3*k+1], 941 elevation_edge_values[3*k+2])); 942 max_elevation_edgevalue[k] = max(elevation_edge_values[3*k], 943 max(elevation_edge_values[3*k+1], 944 elevation_edge_values[3*k+2])); 933 945 } 934 946 … … 944 956 945 957 946 // Try some Froude-number limiting in shallow depths947 dpth=max(stage_centroid_values[k] - elevation_centroid_values[k], 0.0);948 949 if(dpth<0.1){950 // momnorm = momentum^2951 momnorm=(xmom_centroid_values[k]*xmom_centroid_values[k]+952 ymom_centroid_values[k]*ymom_centroid_values[k]);953 954 // vel^2 < constant*g*dpth [-- then multiply both sides by dpth^2]955 if(momnorm > 4*9.81*dpth*dpth*dpth){956 // Down-scale momentum so that Froude number < constant957 tmp=sqrt((4*9.81*dpth*dpth*dpth)/momnorm);958 xmom_centroid_values[k] *=tmp;959 ymom_centroid_values[k] *=tmp;960 }961 }958 ////// Try some Froude-number limiting in shallow depths 959 //dpth=max(stage_centroid_values[k] - elevation_centroid_values[k], 0.0); 960 //// 961 //if(dpth< max(max_elevation_edgevalue[k]-min_elevation_edgevalue[k],10*minimum_allowed_height)){ 962 // // momnorm = momentum^2 963 // momnorm=(xmom_centroid_values[k]*xmom_centroid_values[k]+ 964 // ymom_centroid_values[k]*ymom_centroid_values[k]); 965 // 966 // // vel^2 < constant*g*dpth [-- then multiply both sides by dpth^2] 967 // if(momnorm > 1*9.81*dpth*dpth*dpth){ 968 // // Down-scale momentum so that Froude number < constant 969 // tmp=sqrt((1*9.81*dpth*dpth*dpth)/momnorm); 970 // xmom_centroid_values[k] *=tmp; 971 // ymom_centroid_values[k] *=tmp; 972 // } 973 //} 962 974 } 963 975 … … 994 1006 ymom_centroid_values[k] = ymom_centroid_values[k]/dk; 995 1007 996 min_elevation_edgevalue[k] = min(elevation_edge_values[3*k],997 min(elevation_edge_values[3*k+1],998 elevation_edge_values[3*k+2]));999 max_elevation_edgevalue[k] = max(elevation_edge_values[3*k],1000 max(elevation_edge_values[3*k+1],1001 elevation_edge_values[3*k+2]));1002 1008 1003 1009 // SET HEIGHT IN PLACE … … 1033 1039 stage_edge_values[k3+1] = stage_centroid_values[k]; 1034 1040 stage_edge_values[k3+2] = stage_centroid_values[k]; 1041 1042 //xmom_centroid_values[k] = 0.; 1043 //ymom_centroid_values[k] = 0.; 1044 1035 1045 xmom_edge_values[k3] = xmom_centroid_values[k]; 1036 1046 xmom_edge_values[k3+1] = xmom_centroid_values[k]; … … 1114 1124 //if(stage_centroid_values[k2]<=elevation_centroid_values[k2]+minimum_allowed_height+epsilon){ 1115 1125 // FIXME: Remove cell_wetness_scale if you don't need it 1116 if(k2<0 || (cell_wetness_scale[k2]== -10.0 && stage_centroid_values[k]<stage_centroid_values[k2])){1126 if(k2<0 || (cell_wetness_scale[k2]==0.0 && stage_centroid_values[k]<max_elevation_edgevalue[k])){ 1117 1127 k2 = k ; 1118 1128 } 1119 1129 //if(stage_centroid_values[k0]<=max_elevation_edgevalue[k0]+epsilon){ 1120 1130 //if(stage_centroid_values[k0]<=elevation_centroid_values[k0]+minimum_allowed_height+epsilon){ 1121 if(k0 < 0 || (cell_wetness_scale[k0]== -10.0 && stage_centroid_values[k]<stage_centroid_values[k0])){1131 if(k0 < 0 || (cell_wetness_scale[k0]==0.0 && stage_centroid_values[k]<max_elevation_edgevalue[k])){ 1122 1132 k0 = k ; 1123 1133 } 1124 1134 //if(stage_centroid_values[k1]<=max_elevation_edgevalue[k1]+epsilon){ 1125 1135 //if(stage_centroid_values[k1]<=elevation_centroid_values[k1]+minimum_allowed_height+epsilon){ 1126 if(k1 < 0 || (cell_wetness_scale[k1]== -10.0 && stage_centroid_values[k]<stage_centroid_values[k1])){1136 if(k1 < 0 || (cell_wetness_scale[k1]==0.0 && stage_centroid_values[k]<max_elevation_edgevalue[k])){ 1127 1137 k1 = k ; 1128 1138 } … … 1177 1187 //stage_edge_values[k3+2] = stage_centroid_values[k]; 1178 1188 1179 dk= max(stage_centroid_values[k]-elevation_centroid_values[k],0.);1189 dk=height_centroid_values[k]; //max(stage_centroid_values[k]-elevation_centroid_values[k],0.); 1180 1190 height_edge_values[k3] = dk; 1181 1191 height_edge_values[k3+1] = dk; … … 1205 1215 h2 = stage_centroid_values[k2] - elevation_centroid_values[k2]; 1206 1216 hmin = min(min(h0, min(h1, h2)), hc); 1217 hmax = max(max(h0, max(h1, h2)), hc); 1207 1218 //// GD FIXME: No longer needed? 1208 1219 //hfactor = 0.0; … … 1214 1225 //hfactor=hmin/(hmin + 0.004); 1215 1226 //} 1216 //hfactor= min(2.0*max(hmin,0.0)/max(hc,max(0.5*(bedmax-bedmin),minimum_allowed_height*10.)), 1.0); 1217 hfactor= min(2.0*max(hmin,0.0)/max(hc,minimum_allowed_height), 1.0); 1227 //hfactor= min(2.0*max(hmin,0.0)/max(hc,max(1.0*(max_elevation_edgevalue[k]-min_elevation_edgevalue[k]),minimum_allowed_height*1.)), 1.0); 1228 1229 // Look for strong changes in cell wetness as an indicator of near-wet-dry 1230 hfactor= min(2.0*max(hmin,0.0)/max(hc,minimum_allowed_height), 1231 min(2.0*max(hc,0.)/max(hmax,minimum_allowed_height), 1.0)); 1232 1233 //hfactor=1.0; 1234 //hfactor=max(hmin,0.)/(max(hmin,0.)+10.*minimum_allowed_height); 1235 //if(hc<minimum_allowed_height*10.) hfactor=0.; 1218 1236 //if(cell_wetness_scale[k0]==0 | cell_wetness_scale[k1]==0 | cell_wetness_scale[k2]==0) hfactor=0; 1237 //hfactor=1.0; 1219 1238 1220 1239 //----------------------------------- … … 1250 1269 beta_tmp = beta_w_dry + (beta_w - beta_w_dry) * hfactor; 1251 1270 //beta_tmp = beta_w_dry*0. + (beta_w - beta_w_dry*0.) * hfactor; 1271 //beta_tmp=1.0; 1252 1272 1253 1273 … … 1291 1311 1292 1312 beta_tmp = beta_w_dry + (beta_w - beta_w_dry) * hfactor; 1293 1313 //beta_tmp=beta_w; 1294 1314 1295 1315 // Limit the gradient -
trunk/anuga_work/development/gareth/tests/shallow_steep_slope/channel_SU_sparse.py
r9008 r9010 36 36 #------------------------------------------------------------------------------ 37 37 def topography(x, y): 38 return -x/10. + 1.*(numpy.sin(x/10.) +abs(y-50.)/10.) -0.*(x>80.) # linear bed slope38 return -x/10. #+ 1.*(numpy.sin(x/10.) +abs(y-50.)/10.) -0.*(x>80.) # linear bed slope 39 39 40 40 def stagetopo(x,y):
Note: See TracChangeset
for help on using the changeset viewer.