luminarycloud 0.13.0__py3-none-any.whl → 0.14.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (328) hide show
  1. luminarycloud/_helpers/cond.py +262 -165
  2. luminarycloud/_helpers/defaults.py +3 -3
  3. luminarycloud/_helpers/download.py +12 -1
  4. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.py +69 -47
  5. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.pyi +45 -1
  6. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.py +34 -0
  7. luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.pyi +12 -0
  8. luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2.py +86 -65
  9. luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2.pyi +38 -1
  10. luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2_grpc.py +33 -0
  11. luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2_grpc.pyi +10 -0
  12. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.py +12 -12
  13. luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.pyi +5 -1
  14. luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2_grpc.py +2 -1
  15. luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2_grpc.pyi +6 -2
  16. luminarycloud/_proto/api/v0/luminarycloud/solution/solution_pb2.py +14 -14
  17. luminarycloud/_proto/api/v0/luminarycloud/solution/solution_pb2.pyi +5 -1
  18. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.py +170 -85
  19. luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.pyi +215 -10
  20. luminarycloud/_proto/assistant/assistant_pb2.py +177 -21
  21. luminarycloud/_proto/assistant/assistant_pb2.pyi +380 -7
  22. luminarycloud/_proto/client/simulation_pb2.py +705 -521
  23. luminarycloud/_proto/client/simulation_pb2.pyi +552 -35
  24. luminarycloud/_proto/geometry/geometry_pb2.py +74 -40
  25. luminarycloud/_proto/geometry/geometry_pb2.pyi +68 -4
  26. luminarycloud/_proto/hexmesh/hexmesh_pb2.py +321 -0
  27. luminarycloud/_proto/hexmesh/hexmesh_pb2.pyi +648 -0
  28. luminarycloud/_proto/options/options_pb2.py +9 -5
  29. luminarycloud/_proto/options/options_pb2.pyi +4 -0
  30. luminarycloud/_proto/output/reference_values_pb2.py +22 -5
  31. luminarycloud/_proto/output/reference_values_pb2.pyi +1 -1
  32. luminarycloud/_proto/quantity/quantity_options_pb2.py +28 -4
  33. luminarycloud/_proto/quantity/quantity_options_pb2.pyi +58 -1
  34. luminarycloud/_proto/quantity/quantity_pb2.py +162 -159
  35. luminarycloud/_proto/quantity/quantity_pb2.pyi +2 -0
  36. luminarycloud/enum/vis_enums.py +82 -2
  37. luminarycloud/geometry.py +22 -5
  38. luminarycloud/meshing/mesh_generation_params.py +8 -2
  39. luminarycloud/params/__init__.py +1 -2
  40. luminarycloud/params/enum/_enum_wrappers.py +1184 -3
  41. luminarycloud/params/outputs/output.py +1 -1
  42. luminarycloud/params/{param_wrappers/simulation_param → simulation}/__init__.py +15 -14
  43. luminarycloud/params/{param_wrappers → simulation}/_lib.py +2 -4
  44. luminarycloud/params/{param_wrappers/simulation_param → simulation}/adaptive_mesh_refinement/boundary_layer_profile_.py +2 -2
  45. luminarycloud/params/{param_wrappers/simulation_param → simulation}/adaptive_mesh_refinement_.py +4 -4
  46. luminarycloud/params/{param_wrappers/simulation_param → simulation}/adjoint_.py +2 -2
  47. luminarycloud/params/{param_wrappers/simulation_param → simulation}/basic/gravity/gravity_off_.py +4 -4
  48. luminarycloud/params/{param_wrappers/simulation_param → simulation}/basic/gravity/gravity_on_.py +4 -4
  49. luminarycloud/params/{param_wrappers/simulation_param → simulation}/basic/gravity_.py +2 -2
  50. luminarycloud/params/{param_wrappers/simulation_param → simulation}/body_frame_.py +2 -2
  51. luminarycloud/params/{param_wrappers/simulation_param → simulation}/entity_relationships/volume_material_relationship_.py +2 -2
  52. luminarycloud/params/{param_wrappers/simulation_param → simulation}/entity_relationships/volume_physics_relationship_.py +2 -2
  53. luminarycloud/params/{param_wrappers/simulation_param → simulation}/entity_relationships_.py +6 -6
  54. luminarycloud/params/{param_wrappers/simulation_param → simulation}/general_.py +8 -10
  55. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/boussinesq_approximation/boussinesq_off_.py +4 -4
  56. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/boussinesq_approximation/boussinesq_on_.py +4 -4
  57. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/boussinesq_approximation_.py +2 -2
  58. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/material_model/ideal_gas_.py +4 -6
  59. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/material_model/incompressible_fluid_.py +4 -6
  60. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/material_model/incompressible_fluid_with_energy_.py +4 -6
  61. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/material_model_.py +2 -2
  62. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/thermal_conductivity_model/prescribed_conductivity_.py +4 -4
  63. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/thermal_conductivity_model/prescribed_prandtl_number_.py +4 -4
  64. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/thermal_conductivity_model/temperature_dependent_conductivity_.py +4 -4
  65. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/thermal_conductivity_model_.py +2 -2
  66. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/viscosity_model/prescribed_viscosity_.py +4 -6
  67. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/viscosity_model/sutherland_.py +4 -6
  68. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/viscosity_model/temperature_dependent_viscosity_.py +4 -6
  69. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/viscosity_model_.py +2 -2
  70. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/material_fluid_.py +32 -40
  71. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/material_solid_.py +2 -2
  72. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material_entity_.py +6 -10
  73. luminarycloud/params/{param_wrappers/simulation_param → simulation}/monitor_plane_.py +10 -5
  74. luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/frame_transforms/no_transform_.py +4 -6
  75. luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/frame_transforms/rotational_transform_.py +4 -6
  76. luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/frame_transforms/translational_transform_.py +4 -6
  77. luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/frame_transforms_.py +2 -2
  78. luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/motion_type/constant_angular_motion_.py +4 -4
  79. luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/motion_type/constant_translation_motion_.py +4 -4
  80. luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/motion_type_.py +2 -2
  81. luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data_.py +16 -20
  82. luminarycloud/params/{param_wrappers/simulation_param → simulation}/multi_physics_coupling_options_.py +2 -2
  83. luminarycloud/params/{param_wrappers/simulation_param → simulation}/output_.py +2 -2
  84. luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection/actuator_disk_specify_normal_vector_.py +4 -4
  85. luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection/actuator_disk_specify_rotation_angles_.py +4 -4
  86. luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection_.py +2 -2
  87. luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk_.py +49 -0
  88. luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type/actuator_line_.py +4 -6
  89. luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type/probe_points_.py +4 -6
  90. luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type/source_points_.py +4 -6
  91. luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type_.py +2 -2
  92. luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group_.py +20 -17
  93. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/adjoint_controls_fluid_.py +2 -2
  94. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/basic_fluid_.py +2 -2
  95. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/__init__.py +3 -4
  96. luminarycloud/params/simulation/physics/fluid/boundary_conditions/farfield_.py +111 -0
  97. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/inlet/__init__.py +4 -3
  98. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/inlet/fan_curve_inlet_.py +4 -6
  99. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/mach_inlet_.py +55 -0
  100. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/inlet/mass_flow_inlet_.py +4 -6
  101. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/inlet/total_pressure_inlet_.py +4 -6
  102. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/inlet/velocity_components_inlet_.py +8 -6
  103. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/inlet/velocity_magnitude_inlet_.py +8 -6
  104. luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet_.py +104 -0
  105. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/outlet/outlet_strategy/fan_curve_outlet_.py +4 -4
  106. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_pressure_.py +4 -4
  107. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_target_corrected_mass_flow_rate_.py +4 -4
  108. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_target_mass_flow_rate_.py +4 -4
  109. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/outlet/outlet_strategy_.py +2 -2
  110. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/outlet_.py +14 -14
  111. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/symmetry_.py +4 -4
  112. luminarycloud/params/simulation/physics/fluid/boundary_conditions/turbulence_boundary_conditions_.py +50 -0
  113. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/energy/prescribed_heat_flux_.py +4 -4
  114. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/energy/prescribed_temperature_.py +4 -4
  115. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/momentum/no_slip_.py +4 -4
  116. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/momentum/slip_.py +4 -4
  117. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/momentum/wall_model_.py +4 -4
  118. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/wall_energy_.py +2 -2
  119. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/wall_momentum_.py +2 -2
  120. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall_.py +18 -18
  121. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions_fluid_.py +9 -4
  122. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/initialization/__init__.py +1 -2
  123. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/initialization/fluid_existing_solution_.py +4 -6
  124. luminarycloud/params/simulation/physics/fluid/initialization/fluid_farfield_values_.py +65 -0
  125. luminarycloud/params/simulation/physics/fluid/initialization/fluid_prescribed_values_.py +77 -0
  126. luminarycloud/params/simulation/physics/fluid/initialization/turbulence_initialization_.py +44 -0
  127. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/initialization_fluid_.py +2 -2
  128. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/blade_element_airfoil_data_.py +12 -8
  129. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_blade_element_.py +6 -6
  130. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_radial_distribution_.py +4 -4
  131. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_uniform_thrust_.py +4 -4
  132. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/fan_curve_internal_.py +4 -4
  133. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model_.py +8 -6
  134. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_line_model/actuator_line_blade_element_.py +6 -6
  135. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_line_model_.py +8 -6
  136. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/blade_element_params_.py +2 -2
  137. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model/general_acceleration_source_.py +4 -4
  138. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model/general_mass_source_.py +4 -4
  139. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model_.py +8 -6
  140. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model_.py +2 -2
  141. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior_.py +34 -29
  142. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/porous_behavior_.py +14 -10
  143. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/fluid_relaxation_method/fluid_explicit_relaxation_.py +4 -4
  144. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup/robust_startup_off_.py +4 -4
  145. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup/robust_startup_on_.py +4 -4
  146. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup_.py +2 -2
  147. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation_.py +16 -16
  148. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/fluid_relaxation_method_.py +2 -2
  149. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/pseudo_time_step_method/cfl_based_.py +4 -4
  150. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/pseudo_time_step_method/fixed_pseudo_time_step_.py +4 -4
  151. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/pseudo_time_step_method_.py +2 -2
  152. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls_fluid_.py +14 -14
  153. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme/ec2_.py +4 -4
  154. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme/fds_.py +4 -4
  155. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme/ld2_.py +6 -4
  156. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme/rhie_chow_.py +4 -4
  157. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme_.py +2 -2
  158. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme_order/first_order_.py +4 -4
  159. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme_order/second_order_.py +4 -4
  160. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme_order_.py +2 -2
  161. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization_fluid_.py +20 -18
  162. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/des_formulation/ddes_.py +4 -6
  163. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/des_formulation/ddes_vtm_.py +4 -6
  164. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/des_formulation/iddes_.py +4 -6
  165. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/des_formulation_.py +2 -2
  166. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/komega_sst/constants/custom_komega_sst_constants_.py +4 -4
  167. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/komega_sst/constants/default_komega_sst_constants_.py +4 -4
  168. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/komega_sst/komega_sst_constants_.py +2 -2
  169. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/komega_sst_.py +10 -12
  170. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/spalart_allmaras/constants/custom_spalart_allmaras_constants_.py +4 -4
  171. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/spalart_allmaras/constants/default_spalart_allmaras_constants_.py +4 -4
  172. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/spalart_allmaras/spalart_allmaras_constants_.py +2 -2
  173. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/spalart_allmaras_.py +10 -12
  174. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/sub_grid_scale_model/amd_.py +4 -4
  175. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/sub_grid_scale_model/sigma_.py +4 -4
  176. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/sub_grid_scale_model/smagorinsky_.py +4 -4
  177. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/sub_grid_scale_model/vreman_.py +4 -4
  178. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/sub_grid_scale_model/wale_.py +4 -4
  179. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/sub_grid_scale_model_.py +2 -2
  180. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence_.py +22 -32
  181. luminarycloud/params/simulation/physics/fluid_.py +233 -0
  182. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/adjoint_controls_heat_.py +2 -2
  183. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/boundary_conditions/heat_bc_convection_.py +4 -4
  184. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/boundary_conditions/heat_bc_heat_flux_.py +4 -4
  185. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/boundary_conditions/heat_bc_integrated_heat_flux_.py +4 -4
  186. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/boundary_conditions/heat_bc_symmetry_.py +4 -4
  187. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/boundary_conditions/heat_bc_temperature_.py +4 -4
  188. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/boundary_conditions_heat_.py +9 -4
  189. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/heat_source/heat_source_type/heat_source_type_power_.py +4 -4
  190. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/heat_source/heat_source_type/heat_source_type_power_per_unit_of_volume_.py +4 -4
  191. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/heat_source/heat_source_type_.py +2 -2
  192. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/heat_source_.py +20 -17
  193. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/initialization/heat_existing_solution_.py +4 -6
  194. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/initialization/heat_prescribed_values_.py +4 -6
  195. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/initialization_heat_.py +2 -2
  196. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/solution_controls/heat_relaxation_method/heat_implicit_relaxation_.py +10 -10
  197. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/solution_controls/heat_relaxation_method_.py +2 -2
  198. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/solution_controls_heat_.py +6 -6
  199. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/spatial_discretization_heat_.py +2 -2
  200. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat_.py +33 -42
  201. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/periodic_pair/periodicity_type/rotational_periodicity_.py +5 -7
  202. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/periodic_pair/periodicity_type/translational_periodicity_.py +4 -6
  203. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/periodic_pair/periodicity_type_.py +2 -2
  204. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/periodic_pair_.py +8 -10
  205. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/solution_controls/linear_solver_type/gauss_seidel_.py +4 -4
  206. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/solution_controls/linear_solver_type/krylov_amg_.py +4 -4
  207. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/solution_controls/linear_solver_type_.py +2 -2
  208. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics_.py +6 -6
  209. luminarycloud/params/{param_wrappers → simulation}/simulation_param_.py +34 -40
  210. luminarycloud/params/{param_wrappers/simulation_param → simulation}/sliding_interfaces_.py +10 -5
  211. luminarycloud/params/{param_wrappers/simulation_param → simulation}/surface_name_.py +2 -2
  212. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/compute_statistics/compute_statistics_off_.py +4 -6
  213. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/compute_statistics/compute_statistics_on_.py +4 -6
  214. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/compute_statistics_.py +2 -2
  215. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/time_marching/time_explicit_.py +4 -4
  216. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/time_marching/time_implicit_.py +4 -4
  217. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/time_marching_.py +2 -2
  218. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/time_step_ramp/time_step_ramp_off_.py +4 -4
  219. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/time_step_ramp/time_step_ramp_on_.py +4 -4
  220. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/time_step_ramp_.py +2 -2
  221. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time_.py +20 -30
  222. luminarycloud/params/{param_wrappers/simulation_param → simulation}/volume_entity_.py +2 -2
  223. luminarycloud/project.py +63 -7
  224. luminarycloud/reference_values.py +1 -1
  225. luminarycloud/simulation.py +13 -2
  226. luminarycloud/simulation_param.py +8 -8
  227. luminarycloud/solution.py +7 -1
  228. luminarycloud/types/vector3.py +28 -2
  229. luminarycloud/vis/__init__.py +6 -1
  230. luminarycloud/vis/display.py +101 -51
  231. luminarycloud/vis/filters.py +384 -15
  232. luminarycloud/vis/interactive_scene.py +46 -23
  233. luminarycloud/vis/visualization.py +204 -58
  234. {luminarycloud-0.13.0.dist-info → luminarycloud-0.14.0.dist-info}/METADATA +1 -2
  235. luminarycloud-0.14.0.dist-info/RECORD +466 -0
  236. luminarycloud/params/param_wrappers/__init__.py +0 -2
  237. luminarycloud/params/param_wrappers/simulation_param/particle_group/particle_group_type/actuator_disk_.py +0 -51
  238. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/farfield_.py +0 -197
  239. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/inlet_.py +0 -189
  240. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/__init__.py +0 -4
  241. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/komega/__init__.py +0 -5
  242. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/komega/bc_komega_variables_.py +0 -37
  243. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/komega/bc_turbulent_viscosity_and_intensity_komega_.py +0 -33
  244. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/komega/bc_turbulent_viscosity_ratio_and_intensity_komega_.py +0 -33
  245. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/komega_boundary_conditions_.py +0 -25
  246. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/spalart_allmaras/__init__.py +0 -3
  247. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/spalart_allmaras/bc_sa_variable_.py +0 -33
  248. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/spalart_allmaras/bc_turbulent_viscosity_ratio_sa_.py +0 -31
  249. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/spalart_allmaras/bc_turbulent_viscosity_sa_.py +0 -31
  250. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/spalart_allmaras_boundary_conditions_.py +0 -25
  251. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence_boundary_conditions_.py +0 -65
  252. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/fluid_farfield_values_.py +0 -173
  253. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/fluid_prescribed_values_.py +0 -185
  254. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/__init__.py +0 -4
  255. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/komega/__init__.py +0 -5
  256. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/komega/init_farfield_values_komega_.py +0 -30
  257. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/komega/init_turbulent_viscosity_and_intensity_komega_.py +0 -33
  258. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/komega/init_turbulent_viscosity_ratio_and_intensity_komega_.py +0 -33
  259. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/komega_initialization_.py +0 -25
  260. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/spalart_allmaras/__init__.py +0 -4
  261. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/spalart_allmaras/init_farfield_values_sa_.py +0 -30
  262. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/spalart_allmaras/init_sa_variable_.py +0 -31
  263. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/spalart_allmaras/init_turbulent_viscosity_ratio_sa_.py +0 -31
  264. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/spalart_allmaras/init_turbulent_viscosity_sa_.py +0 -31
  265. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/spalart_allmaras_initialization_.py +0 -25
  266. luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence_initialization_.py +0 -69
  267. luminarycloud/params/param_wrappers/simulation_param/physics/fluid_.py +0 -438
  268. luminarycloud-0.13.0.dist-info/RECORD +0 -487
  269. luminarycloud/params/{param_wrappers/simulation_param → simulation}/adaptive_mesh_refinement/__init__.py +0 -0
  270. luminarycloud/params/{param_wrappers/simulation_param → simulation}/basic/__init__.py +0 -0
  271. luminarycloud/params/{param_wrappers/simulation_param → simulation}/basic/gravity/__init__.py +0 -0
  272. luminarycloud/params/{param_wrappers/simulation_param → simulation}/entity_relationships/__init__.py +1 -1
  273. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/__init__.py +1 -1
  274. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/__init__.py +4 -4
  275. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/boussinesq_approximation/__init__.py +1 -1
  276. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/material_model/__init__.py +0 -0
  277. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/thermal_conductivity_model/__init__.py +2 -2
  278. luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/viscosity_model/__init__.py +2 -2
  279. luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/__init__.py +1 -1
  280. luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/frame_transforms/__init__.py +1 -1
  281. luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/motion_type/__init__.py +0 -0
  282. luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/__init__.py +0 -0
  283. luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type/__init__.py +2 -2
  284. luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type/actuator_disk/__init__.py +0 -0
  285. luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection/__init__.py +1 -1
  286. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/__init__.py +3 -3
  287. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/__init__.py +8 -8
  288. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/outlet/__init__.py +0 -0
  289. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/outlet/outlet_strategy/__init__.py +1 -1
  290. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/__init__.py +1 -1
  291. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/energy/__init__.py +1 -1
  292. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/momentum/__init__.py +1 -1
  293. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/__init__.py +0 -0
  294. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/__init__.py +2 -2
  295. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/__init__.py +2 -2
  296. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_line_model/__init__.py +0 -0
  297. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model/__init__.py +0 -0
  298. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/__init__.py +0 -0
  299. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/fluid_relaxation_method/__init__.py +0 -0
  300. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/__init__.py +0 -0
  301. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup/__init__.py +1 -1
  302. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/pseudo_time_step_method/__init__.py +0 -0
  303. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/__init__.py +2 -2
  304. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme/__init__.py +2 -2
  305. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme_order/__init__.py +1 -1
  306. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/__init__.py +4 -4
  307. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/des_formulation/__init__.py +1 -1
  308. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/komega_sst/__init__.py +0 -0
  309. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/komega_sst/constants/__init__.py +1 -1
  310. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/spalart_allmaras/__init__.py +0 -0
  311. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/spalart_allmaras/constants/__init__.py +0 -0
  312. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/sub_grid_scale_model/__init__.py +2 -2
  313. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/__init__.py +4 -4
  314. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/boundary_conditions/__init__.py +1 -1
  315. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/heat_source/__init__.py +0 -0
  316. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/heat_source/heat_source_type/__init__.py +0 -0
  317. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/initialization/__init__.py +1 -1
  318. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/solution_controls/__init__.py +0 -0
  319. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/solution_controls/heat_relaxation_method/__init__.py +0 -0
  320. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/periodic_pair/__init__.py +0 -0
  321. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/periodic_pair/periodicity_type/__init__.py +0 -0
  322. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/solution_controls/__init__.py +0 -0
  323. luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/solution_controls/linear_solver_type/__init__.py +1 -1
  324. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/__init__.py +1 -1
  325. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/compute_statistics/__init__.py +0 -0
  326. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/time_marching/__init__.py +1 -1
  327. luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/time_step_ramp/__init__.py +1 -1
  328. {luminarycloud-0.13.0.dist-info → luminarycloud-0.14.0.dist-info}/WHEEL +0 -0
@@ -1,5 +1,6 @@
1
1
  import dataclasses as dc
2
2
  from ..enum.vis_enums import *
3
+ from typing import Tuple, Optional
3
4
 
4
5
 
5
6
  @dc.dataclass
@@ -10,17 +11,18 @@ class Field:
10
11
 
11
12
  .. warning:: This feature is experimental and may change or be removed in the future.
12
13
 
13
- Attribues:
14
- ----------
15
- quantity : VisQuantity
16
- The quantity to color by.
17
- component : FieldComponent
18
- The component of the field to use, applicable to vector fields. If the field is a
19
- scalar, use the default X component.
20
14
  """
21
15
 
22
16
  quantity: VisQuantity = VisQuantity.ABSOLUTE_PRESSURE
17
+ """The quantity to color by."""
23
18
  component: FieldComponent = FieldComponent.X
19
+ """
20
+ The component of the field to use, applicable to vector fields. If the field is a
21
+ scalar, use the default X component.
22
+ """
23
+
24
+ def __hash__(self) -> int:
25
+ return hash((self.quantity, self.component))
24
26
 
25
27
 
26
28
  @dc.dataclass
@@ -31,25 +33,23 @@ class DisplayAttributes:
31
33
 
32
34
  .. warning:: This feature is experimental and may change or be removed in the future.
33
35
 
34
- Attributes:
35
- ----------
36
- visible : bool
37
- If the object is visible or not. Default: True
38
- opacity : float
39
- How opaque the object is. This is a normalized number between
40
- 0 (i.e., fully transparent) and 1 (i.e., fully opaque). Default: 1
41
- field : Field
42
- What field quantity/component to color by, if applicable.
43
- representation : Representation
44
- how the object is represented in the scene (e.g., surface, surface with
45
- edges, wireframe or points). Default: surface.
46
36
  """
47
37
 
48
38
  visible: bool = True
39
+ """If the object is visible or not. Default: True"""
49
40
  # TODO(matt): opacity not hooked up yet.
50
41
  opacity: float = 1.0
42
+ """
43
+ How opaque the object is. This is a normalized number between
44
+ 0 (i.e., fully transparent) and 1 (i.e., fully opaque). Default: 1
45
+ """
51
46
  field: Field = dc.field(default_factory=Field)
47
+ """What field quantity/component to color by, if applicable."""
52
48
  representation: Representation = Representation.SURFACE
49
+ """
50
+ how the object is represented in the scene (e.g., surface, surface with
51
+ edges, wireframe or points). Default: surface.
52
+ """
53
53
 
54
54
  def _to_proto(self) -> vis_pb2.DisplayAttributes:
55
55
  attrs = vis_pb2.DisplayAttributes()
@@ -69,61 +69,100 @@ class DataRange:
69
69
 
70
70
  .. warning:: This feature is experimental and may change or be removed in the future.
71
71
 
72
- Attributes:
73
- -----------
74
- min_value : float
75
- The minimum value of the range.
76
- max_value : float
77
- The maximum value of the range.
78
72
  """
79
73
 
80
74
  min_value: float = float("inf")
75
+ """The minimum value of the range."""
81
76
  max_value: float = float("-inf")
77
+ """The maximum value of the range."""
82
78
 
83
79
  def is_valid(self) -> bool:
84
80
  return self.max_value >= self.min_value
85
81
 
86
82
 
83
+ @dc.dataclass
84
+ class ColorMapAppearance:
85
+ """
86
+ ColorMapAppearance controls how the color maps appear in the image, including
87
+ visibility, position and size.
88
+
89
+ The width, height, and the lower left position of the color map are
90
+ specified in normalized device coordinates. These are values in the [0,1]
91
+ range. For example, the lower left hand coordinate of the image is [0,0], and the
92
+ top right coordinate of the image is [1,1].
93
+
94
+ .. warning:: This feature is experimental and may change or be removed in the future.
95
+
96
+ """
97
+
98
+ visible: bool = True
99
+ """Controls if the color map is displayed or not. Default: True"""
100
+ width: float = 0.034
101
+ """The width of the color map in normalized device coordinates. Default: 0.034"""
102
+ height: float = 0.146
103
+ """The height of the color map in normalized device coordinates. Default: 0.146"""
104
+ text_size: int = 36
105
+ """The text size for the color map legend in pixels. Default: 36"""
106
+ lower_left_x: float = 0.8
107
+ """
108
+ The lower left x position of the color map in normalized device
109
+ coordinates. Default: 0.8
110
+ """
111
+ lower_left_y: float = 0.8
112
+ """
113
+ The lower left y position of the color map in normalized device
114
+ coordinates. Default: 0.8
115
+ """
116
+
117
+
87
118
  @dc.dataclass
88
119
  class ColorMap:
89
120
  """
90
121
  The color map allows user control over how field values are mapped to
91
- colors. Color maps are assigned to fields (e.g., the quantity
92
- and component) and not individual display attributes. This means that there
93
- can only ever be one color map per field/component combination (e.g.,
94
- velocity-magnitude or velocity-x). Any display attribute in the scene
95
- (i.e., filter display attributes or global display attributes) that maps to
96
- this color map will be color in the same manner.
122
+ colors. Color maps are assigned to fields (e.g., the quantity and component)
123
+ and not individual display attributes. This means that there can only ever
124
+ be one color map per field/component combination (e.g., velocity-magnitude
125
+ or velocity-x). Any display attribute in the scene (i.e., filter display
126
+ attributes or global display attributes) that maps to this color map will be
127
+ color in the same manner.
97
128
 
98
129
  .. warning:: This feature is experimental and may change or be removed in the future.
99
130
 
100
- Attributes
101
- ----------
102
- field : Field
103
- The field and component this color map applies to.
104
- preset : ColorMapPreset
105
- The color map preset to use. This defines the colors used in the color
106
- map. Default is 'JET'.
107
- data_range : DataRange
108
- An optional data range to use for the color map. The user must explicity
109
- set the data ranges. If not set explicitly, the fields global data range
110
- is used. For comparing multiple results, either with different solutions
111
- in the same simulation or with different simulations, its highly
112
- recommended that a range is provided so the color scales are the same
113
- between the resulting images. Default: is an invalid data range.
114
- discretize : bool
115
- Use discrete color bins instead of a continuous range. When True,
116
- 'n_colors' indicates how many discrete bins to use. Default: False.
117
- n_colors : int
118
- How many discrete bins to use when discretize is True. Valid n_colors
119
- values are [1, 256]. Default: 8.
120
131
  """
121
132
 
122
133
  field: Field = dc.field(default_factory=Field)
134
+ """The field and component this color map applies to."""
123
135
  preset: ColorMapPreset = ColorMapPreset.JET
136
+ """
137
+ The color map preset to use. This defines the colors used in the color
138
+ map. Default is 'JET'.
139
+ """
124
140
  data_range: DataRange = dc.field(default_factory=DataRange)
141
+ """
142
+ An optional data range to use for the color map. The user must explicity
143
+ set the data ranges. If not set explicitly, the fields global data range
144
+ is used. For comparing multiple results, either with different solutions
145
+ in the same simulation or with different simulations, its highly
146
+ recommended that a range is provided so the color scales are the same
147
+ between the resulting images. Default: is an invalid data range.
148
+ """
125
149
  discretize: bool = False
150
+ """
151
+ Use discrete color bins instead of a continuous range. When True,
152
+ 'n_colors' indicates how many discrete bins to use. Default: False.
153
+ """
126
154
  n_colors: int = 8
155
+ """
156
+ How many discrete bins to use when discretize is True. Valid n_colors
157
+ values are [1, 256]. Default: 8.
158
+ """
159
+ appearance: Optional[ColorMapAppearance] = None
160
+ """
161
+ This attribute controls how the color map annotation appears in the image, including
162
+ location, size, and visibility. When the scene is set to automatic color maps, these
163
+ attributes are automatically populated unless overridden. When setting the appearance,
164
+ the user is responsible for setting all values.
165
+ """
127
166
 
128
167
  def _to_proto(self) -> vis_pb2.ColorMap:
129
168
  res: vis_pb2.ColorMap = vis_pb2.ColorMap()
@@ -135,4 +174,15 @@ class ColorMap:
135
174
  if self.data_range.is_valid():
136
175
  res.range.max = self.data_range.max_value
137
176
  res.range.min = self.data_range.min_value
177
+
178
+ if not self.appearance:
179
+ res.visible = True
180
+ elif not isinstance(self.appearance, ColorMapAppearance):
181
+ raise TypeError(f"Expected 'ColorMapAppearance', got {type(self.appearance).__name__}")
182
+ else:
183
+ res.visible = self.appearance.visible
184
+ res.width = self.appearance.width
185
+ res.height = self.appearance.height
186
+ res.lower_left_anchor_location.x = self.appearance.lower_left_x
187
+ res.lower_left_anchor_location.y = self.appearance.lower_left_y
138
188
  return res
@@ -6,6 +6,8 @@ from abc import ABC, abstractmethod
6
6
  import string, random, math
7
7
  import dataclasses as dc
8
8
  from .display import Field, DisplayAttributes
9
+ from ..enum.vis_enums import StreamlineDirection, SurfaceStreamlineMode
10
+ from typing import List, Any, cast
9
11
 
10
12
 
11
13
  def generate_id(prefix: str) -> str:
@@ -19,38 +21,32 @@ class Plane:
19
21
 
20
22
  .. warning:: This feature is experimental and may change or be removed in the future.
21
23
 
22
- Attributes:
23
- -----------
24
- origin : Vector3
25
- A point defined on the plane. Default: [0,0,0].
26
- normal : Vector3
27
- The vector orthogonal to the plane. Default: [0,1,0]
28
24
  """
29
25
 
30
26
  origin: Vector3Like = dc.field(default_factory=lambda: Vector3(x=0, y=0, z=0))
27
+ """A point defined on the plane. Default: [0,0,0]."""
31
28
  normal: Vector3Like = dc.field(default_factory=lambda: Vector3(x=1, y=0, z=0))
29
+ """The vector orthogonal to the plane. Default: [0,1,0]"""
32
30
 
33
31
 
34
32
  @dc.dataclass
35
33
  class Box:
36
34
  """
37
35
  This class defines a box used for filter such as box clip.
36
+
38
37
  .. warning:: This feature is experimental and may change or be removed in the future.
39
38
 
40
- Attributes:
41
- -----------
42
- center: Vector3
43
- A point defined at the center of the box. Default: [0,0,0].
44
- lengths: Vector3
45
- The the legnths of each side of the box. Default: [1,1,1]
46
- angles: Vector3
47
- The rotation of the box specified in Euler angles (degrees) and applied
48
- in XYZ ordering. Default: [0,0,0]
49
39
  """
50
40
 
51
41
  center: Vector3Like = dc.field(default_factory=lambda: Vector3(x=0, y=0, z=0))
42
+ """A point defined at the center of the box. Default: [0,0,0]."""
52
43
  lengths: Vector3Like = dc.field(default_factory=lambda: Vector3(x=1, y=1, z=1))
44
+ """The the legnths of each side of the box. Default: [1,1,1]"""
53
45
  angles: Vector3Like = dc.field(default_factory=lambda: Vector3(x=0, y=0, z=0))
46
+ """
47
+ The rotation of the box specified in Euler angles (degrees) and applied
48
+ in XYZ ordering. Default: [0,0,0]
49
+ """
54
50
 
55
51
 
56
52
  class Filter(ABC):
@@ -59,17 +55,52 @@ class Filter(ABC):
59
55
  is responsible for providing a _to_proto method to convert to a filter
60
56
  protobuf.
61
57
 
58
+ Attributes
59
+ ----------
60
+ id: str
61
+ A automatically generated uniqiue filter id.
62
+
62
63
  .. warning:: This feature is experimental and may change or be removed in the future.
63
64
  """
64
65
 
65
66
  def __init__(self, id: str) -> None:
66
67
  self.display_attrs = DisplayAttributes()
67
68
  self.id = id
69
+ self._parent_id: str = ""
68
70
 
69
71
  @abstractmethod
70
72
  def _to_proto(self) -> vis_pb2.Filter:
71
73
  pass
72
74
 
75
+ def set_parent(self, filter: Any) -> None:
76
+ """
77
+ Set this filter's parent filter. This controls what data the filter uses
78
+ as input. Filters can be chained into a DAG. If no parent is set, then
79
+ this filter uses the original dataset.
80
+
81
+ Parameters
82
+ ----------
83
+ filter: Filter
84
+ The filter to use as the parent.
85
+ """
86
+ if not isinstance(filter, Filter):
87
+ raise TypeError(f"Expected 'Filter', got {type(filter).__name__}")
88
+ f = cast(Filter, filter)
89
+ self._parent_id = f.id
90
+
91
+ def reset_parent(self) -> None:
92
+ """
93
+ Reset the parent of this filter to the original dataset.
94
+ """
95
+ self._parent_id = ""
96
+
97
+ def get_parent_id(self) -> str:
98
+ """
99
+ Returns the filter's parent id. An empty string will be returned if
100
+ there is no parent.
101
+ """
102
+ return self._parent_id
103
+
73
104
 
74
105
  class Slice(Filter):
75
106
  """
@@ -84,6 +115,10 @@ class Slice(Filter):
84
115
  The slice plane.
85
116
  name : str
86
117
  A user provided name for the filter.
118
+ project_vectors: bool
119
+ When true, vector fields will be projected onto the plane of the slice. This is often
120
+ useful for visualizing vector fields by removing the vector components in the normal
121
+ direction of the plane. Default: False
87
122
  display_attrs : DisplayAttributes
88
123
  Specifies this filter's appearance.
89
124
  """
@@ -124,6 +159,55 @@ class Slice(Filter):
124
159
  return vis_filter
125
160
 
126
161
 
162
+ class Isosurface(Filter):
163
+ """
164
+ Isosurface is used to evaluate scalar fields at constant values, known as
165
+ isovalues. In volumes, isosurface produces surfaces, and in surfaces,
166
+ isosurface produces lines (isolines). Isosurface is also known as contouring
167
+ and as level-sets.
168
+
169
+ .. warning:: This feature is experimental and may change or be removed in the future.
170
+
171
+ Attributes:
172
+ -----------
173
+ field: Field
174
+ The scalar field to evaluate.
175
+ isovalues: List[float]
176
+ A list of isovalues to evaluate.
177
+ name : str
178
+ A user provided name for the filter.
179
+ display_attrs : DisplayAttributes
180
+ Specifies this filter's appearance.
181
+ """
182
+
183
+ def __init__(self, name: str) -> None:
184
+ super().__init__(generate_id("contour-"))
185
+ self.isovalues: List[float] = []
186
+ self.field: Field = Field()
187
+ self.name = name
188
+
189
+ def _to_proto(self) -> vis_pb2.Filter:
190
+ if not isinstance(self.isovalues, List):
191
+ raise TypeError(f"Expected 'List', got {type(self.isovalues).__name__}")
192
+
193
+ if not all(isinstance(x, (int, float)) for x in self.isovalues):
194
+ raise TypeError("Isosurface: all isovalues must be numbers")
195
+ if len(self.isovalues) == 0:
196
+ raise ValueError("Isosurface: isovalue must be non-empty")
197
+
198
+ if self.field.quantity == VisQuantity.NONE:
199
+ raise ValueError("Isosurface: field can't be None")
200
+
201
+ vis_filter = vis_pb2.Filter()
202
+ vis_filter.id = self.id
203
+ vis_filter.name = self.name
204
+ vis_filter.contour.field.quantity_typ = self.field.quantity.value
205
+ vis_filter.contour.field.component = self.field.component.value
206
+ for val in self.isovalues:
207
+ vis_filter.contour.iso_values.append(val)
208
+ return vis_filter
209
+
210
+
127
211
  class PlaneClip(Filter):
128
212
  """
129
213
  Clip the dataset using a plane. Cells in the direction of the plane normal
@@ -412,3 +496,288 @@ class Threshold(Filter):
412
496
  vis_filter.threshold.invert = self.invert
413
497
  vis_filter.threshold.strict = self.strict
414
498
  return vis_filter
499
+
500
+
501
+ class Streamlines(Filter):
502
+ """
503
+ Streanlines is the base class for all the streamlines filters. Full doc strings
504
+ found in derived classes.
505
+
506
+ .. warning:: This feature is experimental and may change or be removed in the future.
507
+
508
+ Attributes:
509
+ -----------
510
+ name : str
511
+ A user provided name for the filter.
512
+ display_attrs : DisplayAttributes
513
+ Specifies this filter's appearance.
514
+ """
515
+
516
+ def __init__(self, name: str) -> None:
517
+ super().__init__(generate_id("streamlines-"))
518
+ self.name: str = name
519
+ self.n_streamlines: int = 100
520
+ self.max_length: float = 10
521
+ self.direction: StreamlineDirection = StreamlineDirection.FORWARD
522
+ self.field: Field = Field()
523
+ self.field.quantity = VisQuantity.VELOCITY
524
+
525
+
526
+ class RakeStreamlines(Streamlines):
527
+ """
528
+ Streamlines is a vector field visualization technique that integrates
529
+ massless particles through a vector field forming curves. Streamlines are
530
+ used to visualize and analyze fluid flow patterns (e.g., the velocity
531
+ field), helping to understand how the fluid moves. Streamlines
532
+ can be use used to visualize any vector field contained in the solution.
533
+
534
+ RakeStreamlines generates seed particles evenly spaced along a line defined
535
+ by specified start and end points. RakeStreamlines only work with volume
536
+ data.
537
+
538
+ .. warning:: This feature is experimental and may change or be removed in the future.
539
+
540
+ Attributes:
541
+ -----------
542
+ n_streamlines : int
543
+ The number of seed particles to place on the rake. Default: 100
544
+ max_length: float
545
+ The maximum path length of the particle in meters. Default: 10
546
+ field: Field
547
+ The vector field to used for the particle advection. Default: Velocity
548
+ start: Vector3Like
549
+ The start point of the rake. Default: [0,0,0].
550
+ end: Vector3Like
551
+ The end point point of the rake. Default: [1,0,0].
552
+ name : str
553
+ A user provided name for the filter.
554
+ display_attrs : DisplayAttributes
555
+ Specifies this filter's appearance.
556
+ """
557
+
558
+ def __init__(self, name: str) -> None:
559
+ super().__init__(name)
560
+ self.start: Vector3Like = dc.field(default_factory=lambda: Vector3(x=0, y=0, z=0))
561
+ self.end: Vector3Like = dc.field(default_factory=lambda: Vector3(x=1, y=0, z=0))
562
+
563
+ def _to_proto(self) -> vis_pb2.Filter:
564
+ # Type checking
565
+ if not isinstance(self.n_streamlines, int):
566
+ raise TypeError(f"Expected 'int', got {type(self.n_streamlines).__name__}")
567
+ if not isinstance(self.max_length, (float, int)):
568
+ raise TypeError(f"Expected 'float or int', got {type(self.max_length).__name__}")
569
+ if not isinstance(self.field, Field):
570
+ raise TypeError(f"Expected 'Field', got {type(self.field).__name__}")
571
+
572
+ vis_filter = vis_pb2.Filter()
573
+ vis_filter.id = self.id
574
+ vis_filter.name = self.name
575
+ vis_filter.streamlines.n_streamlines = self.n_streamlines
576
+ vis_filter.streamlines.max_length = self.max_length
577
+ vis_filter.streamlines.rake.start.CopyFrom(_to_vector3(self.start)._to_proto())
578
+ vis_filter.streamlines.rake.end.CopyFrom(_to_vector3(self.end)._to_proto())
579
+ vis_filter.streamlines.field.quantity_typ = self.field.quantity.value
580
+ return vis_filter
581
+
582
+
583
+ class SurfaceStreamlines(Streamlines):
584
+ """
585
+ Streamlines is a vector field visualization technique that integrates
586
+ massless particles through a vector field forming curves. Streamlines are
587
+ used to visualize and analyze fluid flow patterns (e.g., the velocity
588
+ field), helping to understand how the fluid moves. Streamlines
589
+ can be use used to visualize any vector field contained in the solution.
590
+
591
+
592
+ Surface streamlines has two different modes:
593
+ - ADVECT_ON_SURFACE: constrain particles to the surfaces of the mesh.
594
+ - ADVECT_IN_VOLUME: use surface points to seed volumetric streamlines.
595
+
596
+ The advection mode also effects what fields can be used. For example, velocity is zero
597
+ on walls, so when useing ADVECT_ON_SURFACE use a field that has non-zero
598
+ values such as wall shear stress.
599
+
600
+ Example use cases for ADVECT_IN_VOLUME:
601
+ - placing seeds on an inlet surface and integrating in the forwared direction.
602
+ - placing seeds on an outlet surface and integrating in the backward direction.
603
+ - placing seeds on the tires of a car or on the wing of an airplane.
604
+
605
+ Example use cases for ADVECT_ON_SURFACE:
606
+ - Understanding forces on walls such as wall shear stress.
607
+
608
+ .. warning:: This feature is experimental and may change or be removed in the future.
609
+
610
+ Attributes:
611
+ -----------
612
+ mode: SurfaceStreamlinesMode
613
+ Specifies whether to advect particles on the surface or in the volume.
614
+ Default: ADVECT_IN_VOLUME
615
+ sampling_rate : int
616
+ Specifies how frequently to place seeds on the surface points. A
617
+ sampling rate of 1 means that a seed particle will be placed at every
618
+ point on the surfaces. A sampling rate of 10 means that are paced at
619
+ every 10th point. The value must be a integer greater than 1. Default:
620
+ 100.
621
+ offset: float
622
+ User provided offset. Particles placed directly on the surface have a
623
+ chance of leaving the volume immediately. Set the offset to place seed
624
+ particles further into the volume based on the surface normal. Default: 0.0
625
+ max_length: float
626
+ The maximum path length of the particle in meters. Default: 10
627
+ field: Field
628
+ The vector field to used for the particle advection. Default: Velocity
629
+ name : str
630
+ A user provided name for the filter.
631
+ display_attrs : DisplayAttributes
632
+ Specifies this filter's appearance.
633
+ """
634
+
635
+ def __init__(self, name: str) -> None:
636
+ super().__init__(name)
637
+ self.offset: float = 0.0
638
+ self._surface_names: List[str] = []
639
+ self.sampling_rate = 100
640
+ self.mode: SurfaceStreamlineMode = SurfaceStreamlineMode.ADVECT_IN_VOLUME
641
+
642
+ def add_surface(self, id: str) -> None:
643
+ """
644
+ Add a surface to generate seed points from.
645
+
646
+ Parameters
647
+ ----------
648
+ id: str
649
+ A surface id or a tag id.
650
+ """
651
+ if not isinstance(id, str):
652
+ raise TypeError(f"Expected 'str', got {type(id).__name__}")
653
+ self._surface_names.append(id)
654
+
655
+ def _surfaces(self) -> List[str]:
656
+ """
657
+ Returns the current list of surfaces.
658
+ """
659
+ return self._surface_names
660
+
661
+ def _to_proto(self) -> vis_pb2.Filter:
662
+ # Type checking
663
+ if not isinstance(self.n_streamlines, int):
664
+ raise TypeError(f"Expected 'int', got {type(self.n_streamlines).__name__}")
665
+ if not isinstance(self.max_length, (float, int)):
666
+ raise TypeError(f"Expected 'float or int', got {type(self.max_length).__name__}")
667
+ if not isinstance(self.offset, (float, int)):
668
+ raise TypeError(f"Expected 'float or int', got {type(self.offset).__name__}")
669
+ if not isinstance(self.field, Field):
670
+ raise TypeError(f"Expected 'Field', got {type(self.field).__name__}")
671
+ if not isinstance(self.mode, SurfaceStreamlineMode):
672
+ raise TypeError(f"Expected 'SurfaceStreamlinesMode', got {type(self.mode).__name__}")
673
+
674
+ vis_filter = vis_pb2.Filter()
675
+ vis_filter.id = self.id
676
+ vis_filter.name = self.name
677
+ vis_filter.streamlines.max_length = self.max_length
678
+ vis_filter.streamlines.surface.offset = self.offset
679
+ project = False
680
+ # Prevent common mistakes that cause confusion.
681
+ if self.mode == SurfaceStreamlineMode.ADVECT_ON_SURFACE:
682
+ if self.field.quantity == VisQuantity.VELOCITY:
683
+ raise ValueError(
684
+ "SurfacesStreamines: velocity is 0 on surfaces and will produce no data"
685
+ )
686
+ project = True
687
+ elif self.field.quantity == VisQuantity.WALL_SHEAR_STRESS:
688
+ raise ValueError(
689
+ "SurfacesStreamines: wall shear stress is 0 in the volume and will produce no data "
690
+ )
691
+
692
+ vis_filter.streamlines.surface.project_on_surface = project
693
+ if len(self._surface_names) == 0:
694
+ raise ValueError("SurfaceStreamlines: need at least one surfaces specified.")
695
+ for id in self._surface_names:
696
+ vis_filter.streamlines.surface.surface_names.append(id)
697
+ vis_filter.streamlines.field.quantity_typ = self.field.quantity.value
698
+ return vis_filter
699
+
700
+
701
+ class SurfaceLIC(Filter):
702
+ """
703
+ A Surface Line Integral Convolution (LIC) filter is used to depict the flow
704
+ direction and structure of vector fields (such as velocity) on surfaces. It
705
+ enhances the perception of complex flow patterns by convolving noise
706
+ textures along streamlines, making it easier to visually interpret the
707
+ behavior of fluid flow on boundaries or surfaces in a simulation.
708
+
709
+ The input is a list of surfaces. If none are specified, all are used. The
710
+ surface LIC outputs grey scale colors on the specified surfaces. When the
711
+ display attributes quantity is not None, the field colors are blended with
712
+ the grey scale colors.
713
+
714
+ Note: surface LIC computes on the same surfaces of the solution. If the surfaces in
715
+ the global display attributes are not hidden, the surface LIC will not be visible since
716
+ the existing surfaces are occluding it.
717
+
718
+ .. warning:: This feature is experimental and may change or be removed in the future.
719
+
720
+ Attributes:
721
+ -----------
722
+ field: Field
723
+ Specifies the field used to advect particles for the surface LIC.
724
+ Default: WALL_SHEER_STRESS
725
+ contrast: float
726
+ Contrast controls the contrast of the resuting surface LIC. Valid values
727
+ are in the [0.2, 3.0] range. Lower values means less contrast and
728
+ higher values mean more contrast. Default: 1
729
+ """
730
+
731
+ def __init__(self, name: str) -> None:
732
+ super().__init__(generate_id("surface-lic-"))
733
+ self.name = name
734
+ self.contrast: float = 1.0
735
+ self._surface_names: List[str] = []
736
+ self.field: Field = Field()
737
+ self.field.quantity = VisQuantity.WALL_SHEAR_STRESS
738
+
739
+ def add_surface(self, id: str) -> None:
740
+ """
741
+ Add a surface to generate compute the surface LIC on. Adding no
742
+ surfaces indicates that all surfaces will be used.
743
+
744
+ Parameters
745
+ ----------
746
+ id: str
747
+ A surface id or a tag id.
748
+ """
749
+ if not isinstance(id, str):
750
+ raise TypeError(f"Expected 'str', got {type(id).__name__}")
751
+ self._surface_names.append(id)
752
+
753
+ def _surfaces(self) -> List[str]:
754
+ """
755
+ Returns the current list of surfaces.
756
+ """
757
+ return self._surface_names
758
+
759
+ def _to_proto(self) -> vis_pb2.Filter:
760
+ vis_filter = vis_pb2.Filter()
761
+ vis_filter.id = self.id
762
+ vis_filter.name = self.name
763
+ # Prevent common mistakes that cause confusion. The only current option
764
+ # is to be on a surface, so no velocity.
765
+ if not isinstance(self.field, Field):
766
+ raise TypeError(f"Expected 'Field', got {type(self.field).__name__}")
767
+ if self.field.quantity == VisQuantity.VELOCITY:
768
+ raise ValueError("SurfaceLIC: velocity is 0 on surfaces and will produce no data")
769
+ if not isinstance(self.contrast, (int, float)):
770
+ raise TypeError(f"Expected 'int or float', got {type(self.contrast).__name__}")
771
+ if self.contrast < 0.2 or self.contrast > 3.0:
772
+ raise ValueError("SurfaceLIC: contrast must be between 0.2 and 3.0")
773
+
774
+ for id in self._surface_names:
775
+ vis_filter.surface_lic.geometry.surface_names.append(id)
776
+ if len(self._surface_names) == 0:
777
+ # we need to make sure that the geometry is populated.
778
+ geometry = vis_pb2.SurfaceLICGeomtery()
779
+ vis_filter.surface_lic.geometry.CopyFrom(geometry)
780
+
781
+ vis_filter.surface_lic.field.quantity_typ = self.field.quantity.value
782
+ vis_filter.surface_lic.contrast = self.contrast
783
+ return vis_filter