@@ -457,17 +457,24 @@ def __check_bake_cancelled(bakedata):
457
457
return False
458
458
459
459
460
- def __get_parameter_data (parameter , frameno = 0 ):
460
+ def __get_parameter_data (parameter , frameno = 0 , value_min = None , value_max = None ):
461
461
if parameter is None :
462
462
raise IndexError ()
463
463
464
- if not hasattr (parameter , 'is_animated' ):
465
- return parameter
466
-
467
- if parameter . is_animated :
468
- return parameter .data [ frameno ]
464
+ if hasattr ( parameter , 'data' ) and hasattr (parameter , 'is_animated' ):
465
+ if parameter . is_animated :
466
+ value = parameter . data [ frameno ]
467
+ else :
468
+ value = parameter .data
469
469
else :
470
- return parameter .data
470
+ value = parameter
471
+
472
+ if value_min is not None :
473
+ value = max (value , value_min )
474
+ if value_max is not None :
475
+ value = min (value , value_max )
476
+
477
+ return value
471
478
472
479
473
480
def __get_limit_behaviour_enum (b ):
@@ -514,13 +521,15 @@ def __get_obstacle_meshing_offset(obstacle_meshing_mode):
514
521
def __get_viscosity_value (world_data , frameno ):
515
522
base = __get_parameter_data (world_data .viscosity , frameno )
516
523
exp = __get_parameter_data (world_data .viscosity_exponent , frameno )
517
- return base * (10 ** (- exp ))
524
+ viscosity = max (base * (10 ** (- exp )), 0.0 )
525
+ return viscosity
518
526
519
527
520
528
def __get_surface_tension_value (world_data , frameno ):
521
529
base = __get_parameter_data (world_data .surface_tension , frameno )
522
530
exp = __get_parameter_data (world_data .surface_tension_exponent , frameno )
523
- return world_data .native_surface_tension_scale * base * (10 ** (- exp ))
531
+ value = world_data .native_surface_tension_scale * base * (10 ** (- exp ))
532
+ return max (value , 0.0 )
524
533
525
534
526
535
def __read_save_state_file_data (file_data_path , start_byte , end_byte ):
@@ -756,9 +765,9 @@ def __load_save_state_data(fluidsim, data, cache_directory, savestate_id):
756
765
757
766
init_data = data .domain_data .initialize
758
767
if init_data .delete_outdated_savestates :
759
- __delete_outdated_savestates (cache_directory , savestate_id )
768
+ __delete_outdated_savestates (cache_directory , autosave_info [ "frame" ] )
760
769
if init_data .delete_outdated_meshes :
761
- __delete_outdated_meshes (cache_directory , savestate_id )
770
+ __delete_outdated_meshes (cache_directory , autosave_info [ "frame" ] )
762
771
763
772
764
773
def __initialize_fluid_simulation_settings (fluidsim , data ):
@@ -947,14 +956,17 @@ def __initialize_fluid_simulation_settings(fluidsim, data):
947
956
surface_tension_number = mincfl + (1.0 - accuracy_pct ) * (maxcfl - mincfl )
948
957
fluidsim .surface_tension_condition_number = surface_tension_number
949
958
959
+ st_solver_mode = __get_parameter_data (world .surface_tension_solver_method , frameno )
960
+ fluidsim .enable_smooth_surface_tension_kernel = st_solver_mode == 'SURFACE_TENSION_SOLVER_METHOD_SMOOTH'
961
+
950
962
is_sheet_seeding_enabled = __get_parameter_data (world .enable_sheet_seeding , frameno )
951
963
if is_sheet_seeding_enabled :
952
964
fluidsim .enable_sheet_seeding = is_sheet_seeding_enabled
953
- fluidsim .sheet_fill_rate = __get_parameter_data (world .sheet_fill_rate , frameno )
954
- threshold = __get_parameter_data (world .sheet_fill_threshold , frameno )
965
+ fluidsim .sheet_fill_rate = __get_parameter_data (world .sheet_fill_rate , frameno , value_min = 0.0 , value_max = 1.0 )
966
+ threshold = __get_parameter_data (world .sheet_fill_threshold , frameno , value_min = 0.0 , value_max = 1.0 )
955
967
fluidsim .sheet_fill_threshold = threshold - 1
956
968
957
- friction = __get_parameter_data (world .boundary_friction , frameno )
969
+ friction = __get_parameter_data (world .boundary_friction , frameno , value_min = 0.0 , value_max = 1.0 )
958
970
fluidsim .boundary_friction = friction
959
971
960
972
# Surface Settings
@@ -1471,11 +1483,11 @@ def __update_animatable_obstacle_properties(data, frameid):
1471
1483
__update_dynamic_object_mesh (mesh_object , data )
1472
1484
1473
1485
mesh_object .enable = __get_parameter_data (data .is_enabled , frameid )
1474
- mesh_object .friction = __get_parameter_data (data .friction , frameid )
1475
- mesh_object .whitewater_influence = __get_parameter_data (data .whitewater_influence , frameid )
1476
- mesh_object .dust_emission_strength = __get_parameter_data (data .dust_emission_strength , frameid )
1477
- mesh_object .sheeting_strength = __get_parameter_data (data .sheeting_strength , frameid )
1478
- mesh_object .mesh_expansion = __get_parameter_data (data .mesh_expansion , frameid )
1486
+ mesh_object .friction = __get_parameter_data (data .friction , frameid , value_min = 0.0 )
1487
+ mesh_object .whitewater_influence = __get_parameter_data (data .whitewater_influence , frameid , value_min = 0.0 )
1488
+ mesh_object .dust_emission_strength = __get_parameter_data (data .dust_emission_strength , frameid , value_min = 0.0 )
1489
+ mesh_object .sheeting_strength = __get_parameter_data (data .sheeting_strength , frameid , value_min = 0.0 )
1490
+ mesh_object .mesh_expansion = __get_parameter_data (data .mesh_expansion , frameid , value_min = 0.0 )
1479
1491
1480
1492
1481
1493
def __update_animatable_meshing_volume_properties (data , frameid ):
@@ -1494,7 +1506,12 @@ def __update_animatable_meshing_volume_properties(data, frameid):
1494
1506
volume_object .update_mesh_animated (mesh_previous , mesh_current , mesh_next )
1495
1507
1496
1508
1497
- def __set_property (obj , pname , value ):
1509
+ def __set_property (obj , pname , value , value_min = None , value_max = None ):
1510
+ if value_min is not None :
1511
+ value = max (value , value_min )
1512
+ if value_max is not None :
1513
+ value = min (value , value_max )
1514
+
1498
1515
eps = 1e-6
1499
1516
old_value = getattr (obj , pname )
1500
1517
if isinstance (value , list ):
@@ -1713,11 +1730,11 @@ def __update_animatable_domain_properties(fluidsim, data, frameno):
1713
1730
sheet_fill_rate = __get_parameter_data (world .sheet_fill_rate , frameno )
1714
1731
threshold = __get_parameter_data (world .sheet_fill_threshold , frameno )
1715
1732
__set_property (fluidsim , 'enable_sheet_seeding' , is_sheet_seeding_enabled )
1716
- __set_property (fluidsim , 'sheet_fill_rate' , sheet_fill_rate )
1717
- __set_property (fluidsim , 'sheet_fill_threshold' , threshold - 1 )
1733
+ __set_property (fluidsim , 'sheet_fill_rate' , sheet_fill_rate , value_min = 0 , value_max = 1.0 )
1734
+ __set_property (fluidsim , 'sheet_fill_threshold' , threshold - 1 , value_min = 0 , value_max = 1.0 )
1718
1735
1719
1736
friction = __get_parameter_data (world .boundary_friction , frameno )
1720
- __set_property (fluidsim , 'boundary_friction' , friction )
1737
+ __set_property (fluidsim , 'boundary_friction' , friction , value_min = 0 , value_max = 1.0 )
1721
1738
1722
1739
# Surface Settings
1723
1740
@@ -2451,8 +2468,11 @@ def bake(datafile, cache_directory, bakedata, savestate_id=None, bake_retries=0)
2451
2468
2452
2469
error_string = str (e )
2453
2470
errmsg = error_string
2471
+ do_not_attempt_relaunch = False
2454
2472
if "std::bad_alloc" in errmsg :
2455
2473
errmsg = "Out of memory. "
2474
+ elif "No space left on device" in errmsg :
2475
+ do_not_attempt_relaunch = True
2456
2476
elif not errmsg :
2457
2477
errmsg = "Unknown error. "
2458
2478
if not errmsg .endswith (". " ):
@@ -2469,10 +2489,13 @@ def bake(datafile, cache_directory, bakedata, savestate_id=None, bake_retries=0)
2469
2489
print ("\n Thank you for using FLIP Fluids!" )
2470
2490
print ("------------------------------------------------------------" )
2471
2491
2472
- if retry_num == max_baking_retries :
2492
+ if retry_num == max_baking_retries or do_not_attempt_relaunch :
2473
2493
bakedata .error_message = errmsg
2474
2494
break
2475
2495
else :
2496
+ # Setting to a negative value will default to the most recent savestate on the next attempt.
2497
+ savestate_id = - 1
2498
+
2476
2499
retry_msg = "Attempting to re-launch bake... "
2477
2500
retry_msg += "(retry attempt " + str (retry_num + 1 ) + "/" + str (max_baking_retries ) + ")"
2478
2501
print (retry_msg )
0 commit comments