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.
- luminarycloud/_helpers/cond.py +262 -165
- luminarycloud/_helpers/defaults.py +3 -3
- luminarycloud/_helpers/download.py +12 -1
- luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.py +69 -47
- luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2.pyi +45 -1
- luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.py +34 -0
- luminarycloud/_proto/api/v0/luminarycloud/geometry/geometry_pb2_grpc.pyi +12 -0
- luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2.py +86 -65
- luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2.pyi +38 -1
- luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2_grpc.py +33 -0
- luminarycloud/_proto/api/v0/luminarycloud/mesh/mesh_pb2_grpc.pyi +10 -0
- luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.py +12 -12
- luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.pyi +5 -1
- luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2_grpc.py +2 -1
- luminarycloud/_proto/api/v0/luminarycloud/simulation_template/simulation_template_pb2_grpc.pyi +6 -2
- luminarycloud/_proto/api/v0/luminarycloud/solution/solution_pb2.py +14 -14
- luminarycloud/_proto/api/v0/luminarycloud/solution/solution_pb2.pyi +5 -1
- luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.py +170 -85
- luminarycloud/_proto/api/v0/luminarycloud/vis/vis_pb2.pyi +215 -10
- luminarycloud/_proto/assistant/assistant_pb2.py +177 -21
- luminarycloud/_proto/assistant/assistant_pb2.pyi +380 -7
- luminarycloud/_proto/client/simulation_pb2.py +705 -521
- luminarycloud/_proto/client/simulation_pb2.pyi +552 -35
- luminarycloud/_proto/geometry/geometry_pb2.py +74 -40
- luminarycloud/_proto/geometry/geometry_pb2.pyi +68 -4
- luminarycloud/_proto/hexmesh/hexmesh_pb2.py +321 -0
- luminarycloud/_proto/hexmesh/hexmesh_pb2.pyi +648 -0
- luminarycloud/_proto/options/options_pb2.py +9 -5
- luminarycloud/_proto/options/options_pb2.pyi +4 -0
- luminarycloud/_proto/output/reference_values_pb2.py +22 -5
- luminarycloud/_proto/output/reference_values_pb2.pyi +1 -1
- luminarycloud/_proto/quantity/quantity_options_pb2.py +28 -4
- luminarycloud/_proto/quantity/quantity_options_pb2.pyi +58 -1
- luminarycloud/_proto/quantity/quantity_pb2.py +162 -159
- luminarycloud/_proto/quantity/quantity_pb2.pyi +2 -0
- luminarycloud/enum/vis_enums.py +82 -2
- luminarycloud/geometry.py +22 -5
- luminarycloud/meshing/mesh_generation_params.py +8 -2
- luminarycloud/params/__init__.py +1 -2
- luminarycloud/params/enum/_enum_wrappers.py +1184 -3
- luminarycloud/params/outputs/output.py +1 -1
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/__init__.py +15 -14
- luminarycloud/params/{param_wrappers → simulation}/_lib.py +2 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/adaptive_mesh_refinement/boundary_layer_profile_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/adaptive_mesh_refinement_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/adjoint_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/basic/gravity/gravity_off_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/basic/gravity/gravity_on_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/basic/gravity_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/body_frame_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/entity_relationships/volume_material_relationship_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/entity_relationships/volume_physics_relationship_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/entity_relationships_.py +6 -6
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/general_.py +8 -10
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/boussinesq_approximation/boussinesq_off_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/boussinesq_approximation/boussinesq_on_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/boussinesq_approximation_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/material_model/ideal_gas_.py +4 -6
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/material_model/incompressible_fluid_.py +4 -6
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/material_model/incompressible_fluid_with_energy_.py +4 -6
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/material_model_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/thermal_conductivity_model/prescribed_conductivity_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/thermal_conductivity_model/prescribed_prandtl_number_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/thermal_conductivity_model/temperature_dependent_conductivity_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/thermal_conductivity_model_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/viscosity_model/prescribed_viscosity_.py +4 -6
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/viscosity_model/sutherland_.py +4 -6
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/viscosity_model/temperature_dependent_viscosity_.py +4 -6
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/viscosity_model_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/material_fluid_.py +32 -40
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/material_solid_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/material_entity_.py +6 -10
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/monitor_plane_.py +10 -5
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/frame_transforms/no_transform_.py +4 -6
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/frame_transforms/rotational_transform_.py +4 -6
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/frame_transforms/translational_transform_.py +4 -6
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/frame_transforms_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/motion_type/constant_angular_motion_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/motion_type/constant_translation_motion_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/motion_type_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data_.py +16 -20
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/multi_physics_coupling_options_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/output_.py +2 -2
- 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
- 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
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection_.py +2 -2
- luminarycloud/params/simulation/particle_group/particle_group_type/actuator_disk_.py +49 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type/actuator_line_.py +4 -6
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type/probe_points_.py +4 -6
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type/source_points_.py +4 -6
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group_.py +20 -17
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/adjoint_controls_fluid_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/basic_fluid_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/__init__.py +3 -4
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/farfield_.py +111 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/inlet/__init__.py +4 -3
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/inlet/fan_curve_inlet_.py +4 -6
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet/mach_inlet_.py +55 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/inlet/mass_flow_inlet_.py +4 -6
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/inlet/total_pressure_inlet_.py +4 -6
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/inlet/velocity_components_inlet_.py +8 -6
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/inlet/velocity_magnitude_inlet_.py +8 -6
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/inlet_.py +104 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/outlet/outlet_strategy/fan_curve_outlet_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_pressure_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_target_corrected_mass_flow_rate_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/outlet/outlet_strategy/outlet_target_mass_flow_rate_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/outlet/outlet_strategy_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/outlet_.py +14 -14
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/symmetry_.py +4 -4
- luminarycloud/params/simulation/physics/fluid/boundary_conditions/turbulence_boundary_conditions_.py +50 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/energy/prescribed_heat_flux_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/energy/prescribed_temperature_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/momentum/no_slip_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/momentum/slip_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/momentum/wall_model_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/wall_energy_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/wall_momentum_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall_.py +18 -18
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions_fluid_.py +9 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/initialization/__init__.py +1 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/initialization/fluid_existing_solution_.py +4 -6
- luminarycloud/params/simulation/physics/fluid/initialization/fluid_farfield_values_.py +65 -0
- luminarycloud/params/simulation/physics/fluid/initialization/fluid_prescribed_values_.py +77 -0
- luminarycloud/params/simulation/physics/fluid/initialization/turbulence_initialization_.py +44 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/initialization_fluid_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/blade_element_airfoil_data_.py +12 -8
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_blade_element_.py +6 -6
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_radial_distribution_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/actuator_disk_uniform_thrust_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/fan_curve_internal_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model_.py +8 -6
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_line_model/actuator_line_blade_element_.py +6 -6
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_line_model_.py +8 -6
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/blade_element_params_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model/general_acceleration_source_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model/general_mass_source_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model_.py +8 -6
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior_.py +34 -29
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/porous_behavior_.py +14 -10
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/fluid_relaxation_method/fluid_explicit_relaxation_.py +4 -4
- 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
- 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
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation_.py +16 -16
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/fluid_relaxation_method_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/pseudo_time_step_method/cfl_based_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/pseudo_time_step_method/fixed_pseudo_time_step_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/pseudo_time_step_method_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls_fluid_.py +14 -14
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme/ec2_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme/fds_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme/ld2_.py +6 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme/rhie_chow_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme_order/first_order_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme_order/second_order_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme_order_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization_fluid_.py +20 -18
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/des_formulation/ddes_.py +4 -6
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/des_formulation/ddes_vtm_.py +4 -6
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/des_formulation/iddes_.py +4 -6
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/des_formulation_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/komega_sst/constants/custom_komega_sst_constants_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/komega_sst/constants/default_komega_sst_constants_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/komega_sst/komega_sst_constants_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/komega_sst_.py +10 -12
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/spalart_allmaras/constants/custom_spalart_allmaras_constants_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/spalart_allmaras/constants/default_spalart_allmaras_constants_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/spalart_allmaras/spalart_allmaras_constants_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/spalart_allmaras_.py +10 -12
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/sub_grid_scale_model/amd_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/sub_grid_scale_model/sigma_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/sub_grid_scale_model/smagorinsky_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/sub_grid_scale_model/vreman_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/sub_grid_scale_model/wale_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/sub_grid_scale_model_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence_.py +22 -32
- luminarycloud/params/simulation/physics/fluid_.py +233 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/adjoint_controls_heat_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/boundary_conditions/heat_bc_convection_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/boundary_conditions/heat_bc_heat_flux_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/boundary_conditions/heat_bc_integrated_heat_flux_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/boundary_conditions/heat_bc_symmetry_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/boundary_conditions/heat_bc_temperature_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/boundary_conditions_heat_.py +9 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/heat_source/heat_source_type/heat_source_type_power_.py +4 -4
- 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
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/heat_source/heat_source_type_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/heat_source_.py +20 -17
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/initialization/heat_existing_solution_.py +4 -6
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/initialization/heat_prescribed_values_.py +4 -6
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/initialization_heat_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/solution_controls/heat_relaxation_method/heat_implicit_relaxation_.py +10 -10
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/solution_controls/heat_relaxation_method_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/solution_controls_heat_.py +6 -6
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/spatial_discretization_heat_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat_.py +33 -42
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/periodic_pair/periodicity_type/rotational_periodicity_.py +5 -7
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/periodic_pair/periodicity_type/translational_periodicity_.py +4 -6
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/periodic_pair/periodicity_type_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/periodic_pair_.py +8 -10
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/solution_controls/linear_solver_type/gauss_seidel_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/solution_controls/linear_solver_type/krylov_amg_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/solution_controls/linear_solver_type_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics_.py +6 -6
- luminarycloud/params/{param_wrappers → simulation}/simulation_param_.py +34 -40
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/sliding_interfaces_.py +10 -5
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/surface_name_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/compute_statistics/compute_statistics_off_.py +4 -6
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/compute_statistics/compute_statistics_on_.py +4 -6
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/compute_statistics_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/time_marching/time_explicit_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/time_marching/time_implicit_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/time_marching_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/time_step_ramp/time_step_ramp_off_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/time_step_ramp/time_step_ramp_on_.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/time_step_ramp_.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/time_.py +20 -30
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/volume_entity_.py +2 -2
- luminarycloud/project.py +63 -7
- luminarycloud/reference_values.py +1 -1
- luminarycloud/simulation.py +13 -2
- luminarycloud/simulation_param.py +8 -8
- luminarycloud/solution.py +7 -1
- luminarycloud/types/vector3.py +28 -2
- luminarycloud/vis/__init__.py +6 -1
- luminarycloud/vis/display.py +101 -51
- luminarycloud/vis/filters.py +384 -15
- luminarycloud/vis/interactive_scene.py +46 -23
- luminarycloud/vis/visualization.py +204 -58
- {luminarycloud-0.13.0.dist-info → luminarycloud-0.14.0.dist-info}/METADATA +1 -2
- luminarycloud-0.14.0.dist-info/RECORD +466 -0
- luminarycloud/params/param_wrappers/__init__.py +0 -2
- luminarycloud/params/param_wrappers/simulation_param/particle_group/particle_group_type/actuator_disk_.py +0 -51
- luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/farfield_.py +0 -197
- luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/inlet_.py +0 -189
- luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/__init__.py +0 -4
- luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/komega/__init__.py +0 -5
- luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/komega/bc_komega_variables_.py +0 -37
- luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/komega/bc_turbulent_viscosity_and_intensity_komega_.py +0 -33
- luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/komega/bc_turbulent_viscosity_ratio_and_intensity_komega_.py +0 -33
- luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/komega_boundary_conditions_.py +0 -25
- luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/spalart_allmaras/__init__.py +0 -3
- luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/spalart_allmaras/bc_sa_variable_.py +0 -33
- luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/spalart_allmaras/bc_turbulent_viscosity_ratio_sa_.py +0 -31
- luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/spalart_allmaras/bc_turbulent_viscosity_sa_.py +0 -31
- luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence/spalart_allmaras_boundary_conditions_.py +0 -25
- luminarycloud/params/param_wrappers/simulation_param/physics/fluid/boundary_conditions/turbulence_boundary_conditions_.py +0 -65
- luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/fluid_farfield_values_.py +0 -173
- luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/fluid_prescribed_values_.py +0 -185
- luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/__init__.py +0 -4
- luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/komega/__init__.py +0 -5
- luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/komega/init_farfield_values_komega_.py +0 -30
- luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/komega/init_turbulent_viscosity_and_intensity_komega_.py +0 -33
- luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/komega/init_turbulent_viscosity_ratio_and_intensity_komega_.py +0 -33
- luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/komega_initialization_.py +0 -25
- luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/spalart_allmaras/__init__.py +0 -4
- luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/spalart_allmaras/init_farfield_values_sa_.py +0 -30
- luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/spalart_allmaras/init_sa_variable_.py +0 -31
- luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/spalart_allmaras/init_turbulent_viscosity_ratio_sa_.py +0 -31
- luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/spalart_allmaras/init_turbulent_viscosity_sa_.py +0 -31
- luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence/spalart_allmaras_initialization_.py +0 -25
- luminarycloud/params/param_wrappers/simulation_param/physics/fluid/initialization/turbulence_initialization_.py +0 -69
- luminarycloud/params/param_wrappers/simulation_param/physics/fluid_.py +0 -438
- luminarycloud-0.13.0.dist-info/RECORD +0 -487
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/adaptive_mesh_refinement/__init__.py +0 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/basic/__init__.py +0 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/basic/gravity/__init__.py +0 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/entity_relationships/__init__.py +1 -1
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/__init__.py +1 -1
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/__init__.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/boussinesq_approximation/__init__.py +1 -1
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/material_model/__init__.py +0 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/thermal_conductivity_model/__init__.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/material/fluid/viscosity_model/__init__.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/__init__.py +1 -1
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/frame_transforms/__init__.py +1 -1
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/motion_data/motion_type/__init__.py +0 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/__init__.py +0 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type/__init__.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type/actuator_disk/__init__.py +0 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/particle_group/particle_group_type/actuator_disk/actuator_disk_orientation_selection/__init__.py +1 -1
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/__init__.py +3 -3
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/__init__.py +8 -8
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/outlet/__init__.py +0 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/outlet/outlet_strategy/__init__.py +1 -1
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/__init__.py +1 -1
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/energy/__init__.py +1 -1
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/boundary_conditions/wall/momentum/__init__.py +1 -1
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/__init__.py +0 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/__init__.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_disk_model/__init__.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/actuator_line_model/__init__.py +0 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/physical_behavior/physical_behavior_model/particle_source_model/__init__.py +0 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/__init__.py +0 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/fluid_relaxation_method/__init__.py +0 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/__init__.py +0 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/fluid_relaxation_method/fluid_implicit_relaxation/robust_startup/__init__.py +1 -1
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/solution_controls/pseudo_time_step_method/__init__.py +0 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/__init__.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme/__init__.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/spatial_discretization/convective_scheme_order/__init__.py +1 -1
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/__init__.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/des_formulation/__init__.py +1 -1
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/komega_sst/__init__.py +0 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/komega_sst/constants/__init__.py +1 -1
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/spalart_allmaras/__init__.py +0 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/spalart_allmaras/constants/__init__.py +0 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/fluid/turbulence/sub_grid_scale_model/__init__.py +2 -2
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/__init__.py +4 -4
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/boundary_conditions/__init__.py +1 -1
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/heat_source/__init__.py +0 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/heat_source/heat_source_type/__init__.py +0 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/initialization/__init__.py +1 -1
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/solution_controls/__init__.py +0 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/heat/solution_controls/heat_relaxation_method/__init__.py +0 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/periodic_pair/__init__.py +0 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/periodic_pair/periodicity_type/__init__.py +0 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/solution_controls/__init__.py +0 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/physics/solution_controls/linear_solver_type/__init__.py +1 -1
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/__init__.py +1 -1
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/compute_statistics/__init__.py +0 -0
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/time_marching/__init__.py +1 -1
- luminarycloud/params/{param_wrappers/simulation_param → simulation}/time/time_step_ramp/__init__.py +1 -1
- {luminarycloud-0.13.0.dist-info → luminarycloud-0.14.0.dist-info}/WHEEL +0 -0
luminarycloud/vis/display.py
CHANGED
|
@@ -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.
|
|
92
|
-
and
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
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
|
luminarycloud/vis/filters.py
CHANGED
|
@@ -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
|