voxcity 1.0.2__py3-none-any.whl → 1.0.15__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 (41) hide show
  1. voxcity/downloader/ocean.py +559 -0
  2. voxcity/generator/api.py +6 -0
  3. voxcity/generator/grids.py +45 -32
  4. voxcity/generator/pipeline.py +327 -27
  5. voxcity/geoprocessor/draw.py +14 -8
  6. voxcity/geoprocessor/raster/__init__.py +2 -0
  7. voxcity/geoprocessor/raster/core.py +31 -0
  8. voxcity/geoprocessor/raster/landcover.py +173 -49
  9. voxcity/geoprocessor/raster/raster.py +1 -1
  10. voxcity/models.py +2 -0
  11. voxcity/simulator/solar/__init__.py +13 -0
  12. voxcity/simulator_gpu/__init__.py +90 -0
  13. voxcity/simulator_gpu/core.py +322 -0
  14. voxcity/simulator_gpu/domain.py +36 -0
  15. voxcity/simulator_gpu/init_taichi.py +154 -0
  16. voxcity/simulator_gpu/raytracing.py +776 -0
  17. voxcity/simulator_gpu/solar/__init__.py +222 -0
  18. voxcity/simulator_gpu/solar/core.py +66 -0
  19. voxcity/simulator_gpu/solar/csf.py +1249 -0
  20. voxcity/simulator_gpu/solar/domain.py +618 -0
  21. voxcity/simulator_gpu/solar/epw.py +421 -0
  22. voxcity/simulator_gpu/solar/integration.py +4322 -0
  23. voxcity/simulator_gpu/solar/mask.py +459 -0
  24. voxcity/simulator_gpu/solar/radiation.py +3019 -0
  25. voxcity/simulator_gpu/solar/raytracing.py +182 -0
  26. voxcity/simulator_gpu/solar/reflection.py +533 -0
  27. voxcity/simulator_gpu/solar/sky.py +907 -0
  28. voxcity/simulator_gpu/solar/solar.py +337 -0
  29. voxcity/simulator_gpu/solar/svf.py +446 -0
  30. voxcity/simulator_gpu/solar/volumetric.py +2099 -0
  31. voxcity/simulator_gpu/visibility/__init__.py +109 -0
  32. voxcity/simulator_gpu/visibility/geometry.py +278 -0
  33. voxcity/simulator_gpu/visibility/integration.py +808 -0
  34. voxcity/simulator_gpu/visibility/landmark.py +753 -0
  35. voxcity/simulator_gpu/visibility/view.py +944 -0
  36. voxcity/visualizer/renderer.py +2 -1
  37. {voxcity-1.0.2.dist-info → voxcity-1.0.15.dist-info}/METADATA +16 -53
  38. {voxcity-1.0.2.dist-info → voxcity-1.0.15.dist-info}/RECORD +41 -16
  39. {voxcity-1.0.2.dist-info → voxcity-1.0.15.dist-info}/WHEEL +0 -0
  40. {voxcity-1.0.2.dist-info → voxcity-1.0.15.dist-info}/licenses/AUTHORS.rst +0 -0
  41. {voxcity-1.0.2.dist-info → voxcity-1.0.15.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,222 @@
1
+ """
2
+ palm-solar: GPU-accelerated solar radiation simulation for urban environments
3
+
4
+ This package emulates PALM's Radiative Transfer Model (RTM) using Taichi for
5
+ GPU acceleration. It computes:
6
+ - Direct and diffuse solar radiation on surfaces
7
+ - Shadows from buildings and vegetation
8
+ - Sky View Factors (SVF)
9
+ - Canopy Sink Factors (CSF) for plant canopy absorption
10
+ - Surface-to-surface radiative exchange
11
+
12
+ References:
13
+ - Resler et al., GMD 2017: https://doi.org/10.5194/gmd-10-3635-2017
14
+ - Krč et al., GMD 2021: https://doi.org/10.5194/gmd-14-3095-2021
15
+ """
16
+
17
+ from .core import (
18
+ Vector3, Point3,
19
+ SOLAR_CONSTANT, EXT_COEF, MIN_STABLE_COSZEN,
20
+ PI, TWO_PI, DEG_TO_RAD, RAD_TO_DEG,
21
+ normalize, dot, cross, spherical_to_cartesian
22
+ )
23
+
24
+ from .domain import Domain, Surfaces, extract_surfaces_from_domain
25
+
26
+ from .solar import (
27
+ SolarPosition, SolarCalculator,
28
+ calc_zenith, calc_solar_position_datetime,
29
+ discretize_sky_directions
30
+ )
31
+
32
+ from .raytracing import (
33
+ RayTracer,
34
+ ray_aabb_intersect,
35
+ ray_voxel_first_hit,
36
+ ray_canopy_absorption,
37
+ ray_voxel_transmissivity,
38
+ ray_trace_to_target,
39
+ ray_point_to_point_transmissivity,
40
+ sample_hemisphere_direction,
41
+ hemisphere_solid_angle,
42
+ )
43
+
44
+ from .svf import SVFCalculator
45
+
46
+ from .csf import CSFCalculator
47
+
48
+ from .radiation import RadiationModel, RadiationConfig
49
+
50
+ from .volumetric import VolumetricFluxCalculator, VolumetricFluxMode
51
+
52
+ # EPW file processing for cumulative irradiance
53
+ from .epw import (
54
+ EPWLocation,
55
+ EPWSolarData,
56
+ read_epw_header,
57
+ read_epw_solar_data,
58
+ prepare_cumulative_simulation_input,
59
+ get_typical_days,
60
+ estimate_annual_irradiance,
61
+ )
62
+
63
+ # Sky discretization for cumulative irradiance
64
+ from .sky import (
65
+ SkyPatches,
66
+ BinnedSolarData,
67
+ generate_tregenza_patches,
68
+ generate_reinhart_patches,
69
+ generate_uniform_grid_patches,
70
+ generate_fibonacci_patches,
71
+ generate_sky_patches,
72
+ bin_sun_positions_to_patches,
73
+ get_tregenza_patch_index,
74
+ get_tregenza_patch_index_fast,
75
+ bin_sun_positions_to_tregenza_fast,
76
+ get_patch_info,
77
+ calculate_cumulative_irradiance_weights,
78
+ visualize_sky_patches,
79
+ TREGENZA_BANDS,
80
+ TREGENZA_BAND_BOUNDARIES,
81
+ )
82
+
83
+ # Computation mask utilities
84
+ from .mask import (
85
+ create_computation_mask,
86
+ draw_computation_mask,
87
+ get_mask_from_drawing,
88
+ visualize_computation_mask,
89
+ get_mask_info,
90
+ )
91
+
92
+ # VoxCity integration
93
+ from .integration import (
94
+ load_voxcity,
95
+ convert_voxcity_to_domain,
96
+ apply_voxcity_albedo,
97
+ create_radiation_config_for_voxcity,
98
+ LandCoverAlbedo,
99
+ VoxCityDomainResult,
100
+ VOXCITY_GROUND_CODE,
101
+ VOXCITY_TREE_CODE,
102
+ VOXCITY_BUILDING_CODE,
103
+ # VoxCity API-compatible solar functions
104
+ get_direct_solar_irradiance_map,
105
+ get_diffuse_solar_irradiance_map,
106
+ get_global_solar_irradiance_map,
107
+ get_cumulative_global_solar_irradiance,
108
+ get_building_solar_irradiance,
109
+ get_cumulative_building_solar_irradiance,
110
+ get_global_solar_irradiance_using_epw,
111
+ get_building_global_solar_irradiance_using_epw,
112
+ # Volumetric solar irradiance functions
113
+ get_volumetric_solar_irradiance_map,
114
+ get_cumulative_volumetric_solar_irradiance,
115
+ get_volumetric_solar_irradiance_using_epw,
116
+ clear_volumetric_flux_cache,
117
+ save_irradiance_mesh,
118
+ load_irradiance_mesh,
119
+ # Temporal utilities
120
+ get_solar_positions_astral,
121
+ # Cache management
122
+ clear_radiation_model_cache,
123
+ clear_building_radiation_model_cache,
124
+ clear_all_radiation_caches,
125
+ clear_all_caches,
126
+ )
127
+
128
+ __version__ = "0.1.0"
129
+ __all__ = [
130
+ # Core
131
+ 'Vector3', 'Point3',
132
+ 'SOLAR_CONSTANT', 'EXT_COEF', 'MIN_STABLE_COSZEN',
133
+ 'PI', 'TWO_PI', 'DEG_TO_RAD', 'RAD_TO_DEG',
134
+ 'normalize', 'dot', 'cross', 'spherical_to_cartesian',
135
+ # Domain
136
+ 'Domain', 'Surfaces', 'extract_surfaces_from_domain',
137
+ # Solar
138
+ 'SolarPosition', 'SolarCalculator',
139
+ 'calc_zenith', 'calc_solar_position_datetime',
140
+ 'discretize_sky_directions',
141
+ # Ray tracing
142
+ 'RayTracer',
143
+ 'ray_aabb_intersect',
144
+ 'ray_voxel_first_hit',
145
+ 'ray_canopy_absorption',
146
+ 'ray_voxel_transmissivity',
147
+ 'ray_trace_to_target',
148
+ 'ray_point_to_point_transmissivity',
149
+ 'sample_hemisphere_direction',
150
+ 'hemisphere_solid_angle',
151
+ # SVF
152
+ 'SVFCalculator',
153
+ # CSF
154
+ 'CSFCalculator',
155
+ # Radiation
156
+ 'RadiationModel', 'RadiationConfig',
157
+ # Volumetric flux
158
+ 'VolumetricFluxCalculator',
159
+ # EPW file processing
160
+ 'EPWLocation',
161
+ 'EPWSolarData',
162
+ 'read_epw_header',
163
+ 'read_epw_solar_data',
164
+ 'prepare_cumulative_simulation_input',
165
+ 'get_typical_days',
166
+ 'estimate_annual_irradiance',
167
+ # Sky discretization (VoxCity API compatible)
168
+ 'SkyPatches',
169
+ 'BinnedSolarData',
170
+ 'generate_tregenza_patches',
171
+ 'generate_reinhart_patches',
172
+ 'generate_uniform_grid_patches',
173
+ 'generate_fibonacci_patches',
174
+ 'generate_sky_patches',
175
+ 'bin_sun_positions_to_patches',
176
+ 'bin_sun_positions_to_tregenza_fast',
177
+ 'get_tregenza_patch_index',
178
+ 'get_tregenza_patch_index_fast',
179
+ 'get_patch_info',
180
+ 'calculate_cumulative_irradiance_weights',
181
+ 'visualize_sky_patches',
182
+ 'TREGENZA_BANDS',
183
+ 'TREGENZA_BAND_BOUNDARIES',
184
+ # Computation mask utilities
185
+ 'create_computation_mask',
186
+ 'draw_computation_mask',
187
+ 'get_mask_from_drawing',
188
+ 'visualize_computation_mask',
189
+ 'get_mask_info',
190
+ # VoxCity integration
191
+ 'load_voxcity',
192
+ 'convert_voxcity_to_domain',
193
+ 'apply_voxcity_albedo',
194
+ 'create_radiation_config_for_voxcity',
195
+ 'LandCoverAlbedo',
196
+ 'VoxCityDomainResult',
197
+ 'VOXCITY_GROUND_CODE',
198
+ 'VOXCITY_TREE_CODE',
199
+ 'VOXCITY_BUILDING_CODE',
200
+ # VoxCity API-compatible solar functions
201
+ 'get_direct_solar_irradiance_map',
202
+ 'get_diffuse_solar_irradiance_map',
203
+ 'get_global_solar_irradiance_map',
204
+ 'get_cumulative_global_solar_irradiance',
205
+ 'get_building_solar_irradiance',
206
+ 'get_cumulative_building_solar_irradiance',
207
+ 'get_global_solar_irradiance_using_epw',
208
+ 'get_building_global_solar_irradiance_using_epw',
209
+ # Volumetric solar irradiance functions
210
+ 'get_volumetric_solar_irradiance_map',
211
+ 'get_cumulative_volumetric_solar_irradiance',
212
+ 'get_volumetric_solar_irradiance_using_epw',
213
+ 'clear_volumetric_flux_cache',
214
+ 'save_irradiance_mesh',
215
+ 'load_irradiance_mesh',
216
+ # Cache management
217
+ 'clear_radiation_model_cache',
218
+ 'clear_building_radiation_model_cache',
219
+ 'clear_all_radiation_caches',
220
+ # Temporal utilities (VoxCity API compatible)
221
+ 'get_solar_positions_astral',
222
+ ]
@@ -0,0 +1,66 @@
1
+ """
2
+ Vector and ray utilities for palm-solar using Taichi.
3
+ Based on ray-tracing-one-weekend-taichi patterns.
4
+
5
+ GPU Optimization Notes:
6
+ - All functions use @ti.func for GPU inlining
7
+ - Branchless operations preferred where possible
8
+ - Memory coalescing friendly access patterns
9
+ - done-flag pattern for early termination (reduces warp divergence)
10
+
11
+ This module re-exports shared core utilities from simulator_gpu.core
12
+ and adds solar-specific extensions.
13
+ """
14
+
15
+ import taichi as ti
16
+ import math
17
+
18
+ # Import shared core utilities from parent package
19
+ from ..core import (
20
+ Vector3,
21
+ Point3,
22
+ Color3,
23
+ PI,
24
+ TWO_PI,
25
+ HALF_PI,
26
+ DEG_TO_RAD,
27
+ RAD_TO_DEG,
28
+ SOLAR_CONSTANT,
29
+ EXT_COEF,
30
+ MIN_STABLE_COSZEN,
31
+ GPU_BLOCK_SIZE,
32
+ normalize,
33
+ normalize_safe,
34
+ dot,
35
+ cross,
36
+ reflect,
37
+ ray_at,
38
+ length_squared,
39
+ distance_squared,
40
+ min3,
41
+ max3,
42
+ clamp,
43
+ random_in_unit_sphere,
44
+ random_in_hemisphere,
45
+ random_cosine_hemisphere,
46
+ spherical_to_cartesian,
47
+ cartesian_to_spherical,
48
+ rotate_vector_axis_angle,
49
+ build_face_basis,
50
+ Rays,
51
+ HitRecord,
52
+ )
53
+
54
+ # Re-export all symbols for backward compatibility
55
+ __all__ = [
56
+ 'Vector3', 'Point3', 'Color3',
57
+ 'PI', 'TWO_PI', 'HALF_PI', 'DEG_TO_RAD', 'RAD_TO_DEG',
58
+ 'SOLAR_CONSTANT', 'EXT_COEF', 'MIN_STABLE_COSZEN', 'GPU_BLOCK_SIZE',
59
+ 'normalize', 'normalize_safe', 'dot', 'cross', 'reflect',
60
+ 'ray_at', 'length_squared', 'distance_squared',
61
+ 'min3', 'max3', 'clamp',
62
+ 'random_in_unit_sphere', 'random_in_hemisphere', 'random_cosine_hemisphere',
63
+ 'spherical_to_cartesian', 'cartesian_to_spherical',
64
+ 'rotate_vector_axis_angle', 'build_face_basis',
65
+ 'Rays', 'HitRecord',
66
+ ]