Skip to content

Commit 8e25b12

Browse files
bnbailey-pslktrizzo
andcommitted
[1.3.65] 2026-02-27
- Expanded `loadTabularTimeseriesData()` to support combined "datetime" columns (ISO-8601 with timezone offsets, compact YYYYMMDDHH/YYYYMMDDHHMM, space-separated date+time), a "time" column (HH:MM, HH:MM:SS), compact 8-digit date strings, and date format synonyms (e.g., "YYYY-MM-DD", "DD/MM/YYYY"). - Fixed `Tube::pruneTubeNodes()` to correctly partition and delete primitives using the proper UUID ordering, and fixed `Tube::updateTriangleVertices()` loop order to match `addTubeObject()` so that colors stay mapped to the correct segments. - Added Vulkan compute backend with software BVH traversal, enabling GPU-accelerated ray tracing on AMD, Intel, and Apple Silicon GPUs without requiring CUDA or OptiX. Backend selection is now automatic based on available hardware, with `FORCE_VULKAN_BACKEND` CMake option for testing. The OptiX backend now handles its own launch batching internally rather than in `RadiationModel`. Tile sub-patches are treated as individual patches for cross-backend compatibility, and the Prague sky model parameters are now properly passed to all backends. - Major overhaul: added Bayesian Optimization (Gaussian Process with UCB acquisition) and CMA-ES algorithms alongside the existing Genetic Algorithm. New `setAlgorithm()` API replaces the old `OptimizationSettings` struct, with configurable crossover operators (BLX-alpha, BLX-PCA), mutation operators (per-gene, isotropic, hybrid PCA), integer/categorical parameter types, fitness caching, and `explore()`/`exploit()` factory presets for each algorithm. - Fixed sign error in turgor pressure term of the water potential equation in the documentation. - Updated multi-return triangulation filter documentation to reflect first-return filtering and corrected separation ratio threshold. Co-authored-by: Kyle Rizzo <ktrizzo@users.noreply.github.com>
1 parent 1e45bc2 commit 8e25b12

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+34282
-1067
lines changed

.github/workflows/linux_selftests.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ jobs:
4242
- name: Bash script
4343
run: |
4444
cd utilities
45-
if ! ./run_tests.sh --nogpu --visbuildonly --log-file ../linux_selftests.log; then
45+
if ! ./run_tests.sh --visbuildonly --log-file ../linux_selftests.log; then
4646
echo "==== run_tests.sh failed; dumping linux_selftests.log ===="
4747
cat ../linux_selftests.log
4848
exit 1

.github/workflows/mac_selftests.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ jobs:
3030
- name: Bash script
3131
run: |
3232
cd utilities
33-
if ! ./run_tests.sh --nogpu --visbuildonly --log-file ../macos_selftests.log; then
33+
if ! ./run_tests.sh --visbuildonly --log-file ../macos_selftests.log; then
3434
echo "==== run_tests.sh failed; dumping macos_selftests.log ===="
3535
cat ../macos_selftests.log
3636
exit 1

.github/workflows/windows_selftests.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ jobs:
2626
shell: bash
2727
run: |
2828
cd utilities
29-
if ! ./run_tests.sh --nogpu --visbuildonly --log-file ../windows_selftests.log; then
29+
if ! ./run_tests.sh --visbuildonly --log-file ../windows_selftests.log; then
3030
echo "==== run_tests.sh failed; dumping windows_selftests.log ===="
3131
cat ../windows_selftests.log
3232
exit 1

benchmarks/radiation_homogeneous_canopy/main.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ int main() {
2424
timer.tic();
2525

2626
uint objID_ptype = context.addTileObject(make_vec3(0, 0, 0), make_vec2(w_leaf, w_leaf), make_SphericalCoord(0, 0), make_int2(2, 2), "plugins/radiation/disk.png");
27-
std::vector<uint> UUIDs_ptype = context.getObjectPointer(objID_ptype)->getPrimitiveUUIDs();
27+
std::vector<uint> UUIDs_ptype = context.getObjectPrimitiveUUIDs(objID_ptype);
2828

2929
float A_leaf = 0;
3030
for (uint p = 0; p < UUIDs_ptype.size(); p++) {
@@ -43,12 +43,12 @@ int main() {
4343

4444
uint objID = context.copyObject(objID_ptype);
4545

46-
context.getObjectPointer(objID)->rotate(-rotation.elevation, "y");
47-
context.getObjectPointer(objID)->rotate(rotation.azimuth, "z");
46+
context.rotateObject(objID, -rotation.elevation, "y");
47+
context.rotateObject(objID, rotation.azimuth, "z");
4848

49-
context.getObjectPointer(objID)->translate(position);
49+
context.translateObject(objID, position);
5050

51-
std::vector<uint> UUIDs = context.getObjectPointer(objID)->getPrimitiveUUIDs();
51+
std::vector<uint> UUIDs = context.getObjectPrimitiveUUIDs(objID);
5252

5353
UUIDs_leaf.insert(UUIDs_leaf.end(), UUIDs.begin(), UUIDs.end());
5454
}

core/CMake_project.cmake

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,10 @@ if(NOT HELIOS_PREVIOUS_COMMIT STREQUAL GIT_COMMIT_HASH)
8686
message(STATUS "[Helios] Git commit version change detected, automatically re-configuring...")
8787

8888
# Clean CUDA object files to prevent linking issues with stale objects
89-
find_package(CUDAToolkit QUIET)
89+
# Only find CUDA if not forcing Vulkan backend
90+
if(NOT FORCE_VULKAN_BACKEND)
91+
find_package(CUDAToolkit QUIET)
92+
endif()
9093
if(CUDAToolkit_FOUND)
9194
message(STATUS "[Helios] Cleaning CUDA object files due to version change...")
9295
file(GLOB_RECURSE CUDA_OBJECTS

core/include/Context.h

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1292,6 +1292,8 @@ namespace helios {
12921292

12931293
void updateTriangleVertices() const;
12941294

1295+
void recomputeCrossSections();
1296+
12951297
friend class CompoundObject;
12961298
friend class Context;
12971299
};
@@ -6816,9 +6818,27 @@ namespace helios {
68166818
//! Load tabular weather data from text file into timeseries
68176819
/**
68186820
* \param[in] data_file Path to the text file containing the tabular weather data.
6819-
* \param[in] column_labels Vector of strings indicating which columns to extract.
6821+
* \param[in] column_labels Vector of strings indicating which columns to extract. Special keywords:
6822+
* - "year", "DOY"/"Jul": Specify date via year + day-of-year columns.
6823+
* - "date": Date string column (requires date_string_format).
6824+
* - "datetime": Combined date+time column (e.g., ISO-8601). Cannot be used with "date" or "hour".
6825+
* - "hour": Integer hour column (supports 13 or 1300 formats).
6826+
* - "time": Time string column (auto-detects HH, HH:MM, or HH:MM:SS).
6827+
* - "minute", "second": Optional sub-hour precision with "hour" column.
6828+
* - Any other non-empty label: treated as a data variable.
68206829
* \param[in] delimiter Character or string that separates values in each row.
6821-
* \param[in] date_string_format [optional] Format of date strings. Default: "YYYYMMDD".
6830+
* \param[in] date_string_format [optional] Format of date strings. Supported formats:
6831+
* - Date-only (for "date" column): "YYYYMMDD", "DDMMYYYY", "MMDDYYYY", "YYYYDDMM"
6832+
* (also accepts delimiter-style synonyms: "YYYY-MM-DD", "DD/MM/YYYY", "MM-DD-YYYY", etc.)
6833+
* Compact 8-digit dates without delimiters (e.g., "20260203") are auto-detected.
6834+
* - Combined datetime (for "datetime" column):
6835+
* "ISO8601" — e.g., "2026-02-03T10:00:00Z" or "2026-02-03T02:00:00-08:00"
6836+
* "YYYYMMDDHH" — compact 10-digit, e.g., "2026020310"
6837+
* "YYYYMMDDHHMM" — compact 12-digit, e.g., "202602031000"
6838+
* "YYYY-MM-DD HH:MM", "YYYY-MM-DD HH:MM:SS" — space-separated date and time
6839+
* "DD/MM/YYYY HH:MM", "MM/DD/YYYY HH:MM" — with various date orderings
6840+
* For ISO-8601 with timezone offsets, the local time is used and the Context UTC_offset is set.
6841+
* Default: "YYYYMMDD".
68226842
* \param[in] headerlines [optional] Number of lines to skip at the beginning. Default: 0.
68236843
*/
68246844
void loadTabularTimeseriesData(const std::string &data_file, const std::vector<std::string> &column_labels, const std::string &delimiter, const std::string &date_string_format = "YYYYMMDD", uint headerlines = 0);

core/src/Context.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -499,10 +499,6 @@ std::vector<uint> Context::getAllUUIDs() const {
499499
cached_all_uuids.push_back(UUID);
500500
}
501501

502-
// Sort UUIDs for consistent ordering across platforms
503-
// (std::unordered_map iteration order is platform-dependent)
504-
std::sort(cached_all_uuids.begin(), cached_all_uuids.end());
505-
506502
all_uuids_cache_valid = true;
507503
return cached_all_uuids;
508504
}

0 commit comments

Comments
 (0)