urbanopt-cli 0.9.0 → 0.9.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/nightly_build.yml +60 -0
- data/CHANGELOG.md +12 -0
- data/CMakeLists.txt +8 -8
- data/FindOpenStudioSDK.cmake +10 -10
- data/LICENSE.md +1 -1
- data/README.md +25 -23
- data/Rakefile +1 -1
- data/example_files/Gemfile +2 -0
- data/example_files/mappers/Baseline.rb +155 -155
- data/example_files/mappers/ClassProject.rb +4 -4
- data/example_files/mappers/CreateBar.rb +1 -1
- data/example_files/mappers/EvCharging.rb +1 -1
- data/example_files/mappers/FlexibleHotWater.rb +1 -1
- data/example_files/mappers/Floorspace.rb +1 -1
- data/example_files/mappers/HighEfficiency.rb +1 -1
- data/example_files/mappers/HighEfficiencyCreateBar.rb +1 -1
- data/example_files/mappers/HighEfficiencyFloorspace.rb +1 -1
- data/example_files/mappers/PeakHoursMelsShedding.rb +1 -1
- data/example_files/mappers/PeakHoursThermostatAdjust.rb +1 -1
- data/example_files/mappers/ThermalStorage.rb +1 -1
- data/example_files/measures/BuildResidentialModel/measure.rb +3 -3
- data/example_files/measures/BuildResidentialModel/measure.xml +3 -3
- data/example_files/measures/BuildResidentialModel/resources/util.rb +45 -45
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.rb +7 -0
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.xml +18 -10
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/schedules.rb +15 -0
- data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/tests/build_residential_schedule_file_test.rb +53 -5
- data/example_files/resources/hpxml-measures/Changelog.md +39 -28
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +27 -27
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/battery.rb +9 -4
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +5 -4
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/version.rb +2 -2
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb +5 -1
- data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +28 -10
- data/example_files/resources/hpxml-measures/ReportSimulationOutput/measure.rb +6 -1
- data/example_files/resources/hpxml-measures/ReportSimulationOutput/measure.xml +3 -3
- data/example_files/resources/hpxml-measures/docs/source/usage_instructions.rst +2 -1
- data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +14 -10
- data/example_files/resources/hpxml-measures/docs/source/workflow_outputs.rst +4 -4
- data/example_files/resources/hpxml-measures/workflow/template-run-hpxml-with-stochastic-occupancy-subset.osw +64 -0
- data/example_files/resources/hpxml-measures/workflow/template-run-hpxml-with-stochastic-occupancy.osw +2 -2
- data/example_files/resources/hpxml-measures/workflow/tests/base_results/results.csv +12 -12
- data/example_files/resources/hpxml-measures/workflow/tests/hpxml_translator_test.rb +36 -110
- data/lib/uo_cli/version.rb +2 -2
- data/lib/uo_cli.rb +62 -67
- data/uo_cli.gemspec +3 -1
- metadata +32 -3
- data/requirements.txt +0 -2
@@ -1,5 +1,5 @@
|
|
1
1
|
# *********************************************************************************
|
2
|
-
# URBANopt™, Copyright (c) 2019-
|
2
|
+
# URBANopt™, Copyright (c) 2019-2023, Alliance for Sustainable Energy, LLC, and other
|
3
3
|
# contributors. All rights reserved.
|
4
4
|
#
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
@@ -391,55 +391,55 @@ module URBANopt
|
|
391
391
|
# Options are: AZNMc, CAMXc, ERCTc, FRCCc, MROEc, MROWc, NEWEc, NWPPc, NYSTc, RFCEc, RFCMc, RFCWc, RMPAc, SPNOc, SPSOc, SRMVc, SRMWc, SRSOc, SRTVc, and SRVCc
|
392
392
|
# egrid subregions can map directly to zipcodes but not to states. Some state might include multiple egrid subregions. the default mapper prioritize the egrid subregion that is most common in the state (covers the biggest number of zipcodes)
|
393
393
|
future_emissions_mapping_hash =
|
394
|
-
{
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
394
|
+
{ FL: 'FRCCc', # ['FRCCc', 'SRSOc']
|
395
|
+
MS: 'SRMVc', # ['SRMVc', 'SRTVc']
|
396
|
+
NE: 'MROWc', # ['MROWc', 'RMPAc']
|
397
|
+
OR: 'NWPPc',
|
398
|
+
CA: 'CAMXc', # ['CAMXc', 'NWPPc']
|
399
|
+
VA: 'SRVCc', # ['SRVCc', 'RFCWc', 'RFCEc'],
|
400
|
+
AR: 'SRMVc', # ['SRMVc', 'SPSOc']
|
401
|
+
TX: 'ERCTc', # ['ERCTc', 'SRMVc', 'SPSOc', 'AZNMc']
|
402
|
+
OH: 'RFCWc',
|
403
|
+
UT: 'NWPPc',
|
404
|
+
MT: 'NWPPc', # ['NWPPc', 'MROWc']
|
405
|
+
TN: 'SRTVc',
|
406
|
+
ID: 'NWPPc',
|
407
|
+
WI: 'MROEc', # ['RFCWc', 'MROEc', 'MROWc']
|
408
|
+
WV: 'RFCWc',
|
409
|
+
NC: 'SRVCc',
|
410
|
+
LA: 'SRMVc',
|
411
|
+
IL: 'SRMWc', # ['RFCWc', 'SRMWc']
|
412
|
+
OK: 'SPSOc',
|
413
|
+
IA: 'MROWc',
|
414
|
+
WA: 'NWPPc',
|
415
|
+
SD: 'MROWc', # ['MROWc', 'RMPAc']
|
416
|
+
MN: 'MROWc',
|
417
|
+
KY: 'SRTVc', # ['SRTVc', 'RFCWc']
|
418
|
+
MI: 'RFCMc', # ['RFCMc', 'MROEc']
|
419
|
+
KS: 'SPNOc',
|
420
|
+
NJ: 'RFCEc',
|
421
|
+
NY: 'NYSTc',
|
422
|
+
IN: 'RFCWc',
|
423
|
+
VT: 'NEWEc',
|
424
|
+
NM: 'AZNMc', # ['AZNMc', 'SPSOc']
|
425
|
+
WY: 'RMPAc', # ['RMPAc', 'NWPPc']
|
426
|
+
GA: 'SRSOc',
|
427
|
+
MO: 'SRMWc', # ['SRMWc', 'SPNOc']
|
428
|
+
DC: 'RFCEc',
|
429
|
+
SC: 'SRVCc',
|
430
|
+
PA: 'RFCEc', # ['RFCEc', 'RFCWc']
|
431
|
+
CO: 'RMPAc',
|
432
|
+
AZ: 'AZNMc',
|
433
|
+
ME: 'NEWEc',
|
434
|
+
AL: 'SRSOc',
|
435
|
+
MD: 'RFCEc', # ['RFCEc', 'RFCWc']
|
436
|
+
NH: 'NEWEc',
|
437
|
+
MA: 'NEWEc',
|
438
|
+
ND: 'MROWc',
|
439
|
+
NV: 'NWPPc', # ['NWPPc', 'AZNMc']
|
440
|
+
CT: 'NEWEc',
|
441
|
+
DE: 'RFCEc',
|
442
|
+
RI: 'NEWEc' }
|
443
443
|
|
444
444
|
# get the state from weather file
|
445
445
|
state = feature.weather_filename.split('_', -1)[1]
|
@@ -459,55 +459,55 @@ module URBANopt
|
|
459
459
|
# Mapping is done using mapping tools from eGrid and AVERT (ZipCode for eGrid and fraction of state for AVERT).
|
460
460
|
# Mapped based on the maps of each set of regions:
|
461
461
|
hourly_historical_mapping_hash =
|
462
|
-
{
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
462
|
+
{ FL: 'Florida',
|
463
|
+
MS: 'Midwest',
|
464
|
+
NE: 'Midwest', # MRWO could be Midwest / Central
|
465
|
+
OR: 'Northwest',
|
466
|
+
CA: 'California',
|
467
|
+
VA: 'Carolinas',
|
468
|
+
AR: 'Midwest',
|
469
|
+
TX: 'Texas',
|
470
|
+
OH: 'Midwest', # RFCW could be Midwest / Mid Atlantic
|
471
|
+
UT: 'Northwest',
|
472
|
+
MT: 'Northwest',
|
473
|
+
TN: 'Tennessee',
|
474
|
+
ID: 'Northwest',
|
475
|
+
WI: 'Midwest',
|
476
|
+
WV: 'Midwest', # RFCW could be Midwest / Mid Atlantic
|
477
|
+
NC: 'Carolinas',
|
478
|
+
LA: 'Midwest',
|
479
|
+
IL: 'Midwest',
|
480
|
+
OK: 'Central',
|
481
|
+
IA: 'Midwest', # MRWO could be Midwest / Central
|
482
|
+
WA: 'Northwest',
|
483
|
+
SD: 'Midwest', # MRWO could be Midwest / Central
|
484
|
+
MN: 'Midwest', # MRWO could be Midwest / Central
|
485
|
+
KY: 'Tennessee',
|
486
|
+
MI: 'Midwest',
|
487
|
+
KS: 'Central',
|
488
|
+
NJ: 'Mid-Atlantic',
|
489
|
+
NY: 'New York',
|
490
|
+
IN: 'Midwest', # RFCW could be Midwest / Mid Atlantic
|
491
|
+
VT: 'New England',
|
492
|
+
NM: 'Southwest',
|
493
|
+
WY: 'Rocky Mountains',
|
494
|
+
GA: 'SRSO',
|
495
|
+
MO: 'Midwest',
|
496
|
+
DC: 'Mid-Atlantic',
|
497
|
+
SC: 'Carolinas',
|
498
|
+
PA: 'Mid-Atlantic',
|
499
|
+
CO: 'Rocky Mountains',
|
500
|
+
AZ: 'Southwest',
|
501
|
+
ME: 'New England',
|
502
|
+
AL: 'Southeast',
|
503
|
+
MD: 'Mid-Atlantic',
|
504
|
+
NH: 'New England',
|
505
|
+
MA: 'New England',
|
506
|
+
ND: 'Midwest', # MRWO could be Midwest / Central
|
507
|
+
NV: 'Northwest',
|
508
|
+
CT: 'New England',
|
509
|
+
DE: 'Mid-Atlantic',
|
510
|
+
RI: 'New England' }
|
511
511
|
|
512
512
|
# get the state from weather file
|
513
513
|
state = feature.weather_filename.split('_', -1)[1]
|
@@ -524,55 +524,55 @@ module URBANopt
|
|
524
524
|
# Options are: AKGD, AKMS, AZNM, CAMX, ERCT, FRCC, HIMS, HIOA, MROE, MROW, NEWE, NWPP, NYCW, NYLI, NYUP, RFCE, RFCM, RFCW, RMPA, SPNO, SPSO, SRMV, SRMW, SRSO, SRTV, and SRVC
|
525
525
|
# egrid subregions can map directly to zipcodes but not to states. Some state might include multiple egrid subregions. the default mapper prioritize the egrid subregion that is most common in the state (covers the biggest number of zipcodes)
|
526
526
|
annual_historical_mapping_hash =
|
527
|
-
{
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
|
548
|
-
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
|
565
|
-
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
527
|
+
{ FL: 'FRCC',
|
528
|
+
MS: 'SRMV',
|
529
|
+
NE: 'MROW',
|
530
|
+
OR: 'NWPP',
|
531
|
+
CA: 'CAMX',
|
532
|
+
VA: 'SRVC',
|
533
|
+
AR: 'SRMV',
|
534
|
+
TX: 'ERCT',
|
535
|
+
OH: 'RFCW',
|
536
|
+
UT: 'NWPP',
|
537
|
+
MT: 'NWPP',
|
538
|
+
TN: 'SRTV',
|
539
|
+
ID: 'NWPP',
|
540
|
+
WI: 'MROE',
|
541
|
+
WV: 'RFCW',
|
542
|
+
NC: 'SRVC',
|
543
|
+
LA: 'SRMV',
|
544
|
+
IL: 'SRMW',
|
545
|
+
OK: 'SPSO',
|
546
|
+
IA: 'MROW',
|
547
|
+
WA: 'NWPP',
|
548
|
+
SD: 'MROW',
|
549
|
+
MN: 'MROW',
|
550
|
+
KY: 'SRTV',
|
551
|
+
MI: 'RFCM',
|
552
|
+
KS: 'SPNO',
|
553
|
+
NJ: 'RFCE',
|
554
|
+
NY: 'NYCW',
|
555
|
+
IN: 'RFCW',
|
556
|
+
VT: 'NEWE',
|
557
|
+
NM: 'AZNM',
|
558
|
+
WY: 'RMPA',
|
559
|
+
GA: 'SRSO',
|
560
|
+
MO: 'SRMW',
|
561
|
+
DC: 'RFCE',
|
562
|
+
SC: 'SRVC',
|
563
|
+
PA: 'RFCE',
|
564
|
+
CO: 'RMPA',
|
565
|
+
AZ: 'AZNM',
|
566
|
+
ME: 'NEWE',
|
567
|
+
AL: 'SRSO',
|
568
|
+
MD: 'RFCE',
|
569
|
+
NH: 'NEWE',
|
570
|
+
MA: 'NEWE',
|
571
|
+
ND: 'MROW',
|
572
|
+
NV: 'NWPP',
|
573
|
+
CT: 'NEWE',
|
574
|
+
DE: 'RFCE',
|
575
|
+
RI: 'NEWE' }
|
576
576
|
# get the state from weather file
|
577
577
|
state = feature.weather_filename.split('_', -1)[1]
|
578
578
|
|
@@ -880,7 +880,7 @@ module URBANopt
|
|
880
880
|
if !template.nil? && template.include?('Residential IECC')
|
881
881
|
|
882
882
|
captures = template.match(/Residential IECC (?<iecc_year>\d+) - Customizable Template (?<t_month>\w+) (?<t_year>\d+)/)
|
883
|
-
template_vals =
|
883
|
+
template_vals = captures.names.zip(captures.captures).to_h
|
884
884
|
template_vals = template_vals.transform_keys(&:to_sym)
|
885
885
|
|
886
886
|
epw = File.join(File.dirname(__FILE__), '../weather', feature.weather_filename)
|
@@ -994,18 +994,18 @@ module URBANopt
|
|
994
994
|
default_args.each do |arg_name, arg_default|
|
995
995
|
next if arg_default.nil?
|
996
996
|
|
997
|
-
if
|
998
|
-
args[arg_name] = arg_default
|
999
|
-
else
|
997
|
+
if args.key?(arg_name)
|
1000
998
|
if debug
|
1001
|
-
if
|
999
|
+
if arg_default.nil?
|
1000
|
+
puts "Setting #{arg_name} to '#{args[arg_name]}'."
|
1001
|
+
else
|
1002
1002
|
if args[arg_name] != arg_default
|
1003
1003
|
puts "Overriding #{arg_name} default '#{arg_default}' with '#{args[arg_name]}'."
|
1004
1004
|
end
|
1005
|
-
else
|
1006
|
-
puts "Setting #{arg_name} to '#{args[arg_name]}'."
|
1007
1005
|
end
|
1008
1006
|
end
|
1007
|
+
else
|
1008
|
+
args[arg_name] = arg_default
|
1009
1009
|
end
|
1010
1010
|
end
|
1011
1011
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# *********************************************************************************
|
2
|
-
# URBANopt™, Copyright (c) 2019-
|
2
|
+
# URBANopt™, Copyright (c) 2019-2023, Alliance for Sustainable Energy, LLC, and other
|
3
3
|
# contributors. All rights reserved.
|
4
4
|
#
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
@@ -46,7 +46,7 @@ module URBANopt
|
|
46
46
|
|
47
47
|
feature = features[0]
|
48
48
|
building_type = feature.building_type
|
49
|
-
|
49
|
+
|
50
50
|
# Energy Efficiency Measures
|
51
51
|
|
52
52
|
OpenStudio::Extension.set_measure_argument(osw, 'AddOverhangsByProjectionFactor', '__SKIP__', true)
|
@@ -96,8 +96,8 @@ module URBANopt
|
|
96
96
|
OpenStudio::Extension.set_measure_argument(osw, 'add_hpwh', 'flex1', 'Float')
|
97
97
|
OpenStudio::Extension.set_measure_argument(osw, 'add_hpwh', 'flex_hrs1', '08:01-20:00')
|
98
98
|
|
99
|
-
OpenStudio::Extension.set_measure_argument(osw,'add_packaged_ice_storage', '__SKIP__', true)
|
100
|
-
OpenStudio::Extension.set_measure_argument(osw,'add_packaged_ice_storage', 'ice_cap', 'AutoSize')
|
99
|
+
OpenStudio::Extension.set_measure_argument(osw, 'add_packaged_ice_storage', '__SKIP__', true)
|
100
|
+
OpenStudio::Extension.set_measure_argument(osw, 'add_packaged_ice_storage', 'ice_cap', 'AutoSize')
|
101
101
|
|
102
102
|
OpenStudio::Extension.set_measure_argument(osw, 'ShiftScheduleByType', '__SKIP__', true)
|
103
103
|
OpenStudio::Extension.set_measure_argument(osw, 'ShiftScheduleByType', 'shift_value', -2)
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# *********************************************************************************
|
2
|
-
# URBANopt™, Copyright (c) 2019-
|
2
|
+
# URBANopt™, Copyright (c) 2019-2023, Alliance for Sustainable Energy, LLC, and other
|
3
3
|
# contributors. All rights reserved.
|
4
4
|
#
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# *********************************************************************************
|
2
|
-
# URBANopt™, Copyright (c) 2019-
|
2
|
+
# URBANopt™, Copyright (c) 2019-2023, Alliance for Sustainable Energy, LLC, and other
|
3
3
|
# contributors. All rights reserved.
|
4
4
|
#
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# *********************************************************************************
|
2
|
-
# URBANopt™, Copyright (c) 2019-
|
2
|
+
# URBANopt™, Copyright (c) 2019-2023, Alliance for Sustainable Energy, LLC, and other
|
3
3
|
# contributors. All rights reserved.
|
4
4
|
#
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# *********************************************************************************
|
2
|
-
# URBANopt™, Copyright (c) 2019-
|
2
|
+
# URBANopt™, Copyright (c) 2019-2023, Alliance for Sustainable Energy, LLC, and other
|
3
3
|
# contributors. All rights reserved.
|
4
4
|
#
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# *********************************************************************************
|
2
|
-
# URBANopt™, Copyright (c) 2019-
|
2
|
+
# URBANopt™, Copyright (c) 2019-2023, Alliance for Sustainable Energy, LLC, and other
|
3
3
|
# contributors. All rights reserved.
|
4
4
|
#
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# *********************************************************************************
|
2
|
-
# URBANopt™, Copyright (c) 2019-
|
2
|
+
# URBANopt™, Copyright (c) 2019-2023, Alliance for Sustainable Energy, LLC, and other
|
3
3
|
# contributors. All rights reserved.
|
4
4
|
#
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# *********************************************************************************
|
2
|
-
# URBANopt™, Copyright (c) 2019-
|
2
|
+
# URBANopt™, Copyright (c) 2019-2023, Alliance for Sustainable Energy, LLC, and other
|
3
3
|
# contributors. All rights reserved.
|
4
4
|
#
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# *********************************************************************************
|
2
|
-
# URBANopt™, Copyright (c) 2019-
|
2
|
+
# URBANopt™, Copyright (c) 2019-2023, Alliance for Sustainable Energy, LLC, and other
|
3
3
|
# contributors. All rights reserved.
|
4
4
|
#
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# *********************************************************************************
|
2
|
-
# URBANopt™, Copyright (c) 2019-
|
2
|
+
# URBANopt™, Copyright (c) 2019-2023, Alliance for Sustainable Energy, LLC, and other
|
3
3
|
# contributors. All rights reserved.
|
4
4
|
#
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# *********************************************************************************
|
2
|
-
# URBANopt™, Copyright (c) 2019-
|
2
|
+
# URBANopt™, Copyright (c) 2019-2023, Alliance for Sustainable Energy, LLC, and other
|
3
3
|
# contributors. All rights reserved.
|
4
4
|
#
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
@@ -162,7 +162,9 @@ class BuildResidentialModel < OpenStudio::Measure::ModelMeasure
|
|
162
162
|
|
163
163
|
measures = {}
|
164
164
|
hpxml_path = File.expand_path("../#{unit['name']}.xml")
|
165
|
-
if
|
165
|
+
if unit.key?('hpxml_path')
|
166
|
+
FileUtils.cp(File.expand_path(unit['hpxml_path']), hpxml_path)
|
167
|
+
else
|
166
168
|
|
167
169
|
# BuildResidentialHPXML
|
168
170
|
measure_subdir = 'BuildResidentialHPXML'
|
@@ -196,8 +198,6 @@ class BuildResidentialModel < OpenStudio::Measure::ModelMeasure
|
|
196
198
|
measure_args.delete('geometry_num_floors_above_grade')
|
197
199
|
|
198
200
|
measures[measure_subdir] << measure_args
|
199
|
-
else
|
200
|
-
FileUtils.cp(File.expand_path(unit['hpxml_path']), hpxml_path)
|
201
201
|
end
|
202
202
|
|
203
203
|
# BuildResidentialScheduleFile
|
@@ -3,8 +3,8 @@
|
|
3
3
|
<schema_version>3.0</schema_version>
|
4
4
|
<name>build_residential_model</name>
|
5
5
|
<uid>259dc35f-65e8-47d4-913f-69efede5a267</uid>
|
6
|
-
<version_id>
|
7
|
-
<version_modified>
|
6
|
+
<version_id>b3c7ec2e-10f5-45d9-9a10-7527fec4565a</version_id>
|
7
|
+
<version_modified>20230105T165234Z</version_modified>
|
8
8
|
<xml_checksum>2C38F48B</xml_checksum>
|
9
9
|
<class_name>BuildResidentialModel</class_name>
|
10
10
|
<display_name>Build Residential Model</display_name>
|
@@ -6597,7 +6597,7 @@
|
|
6597
6597
|
<filename>measure.rb</filename>
|
6598
6598
|
<filetype>rb</filetype>
|
6599
6599
|
<usage_type>script</usage_type>
|
6600
|
-
<checksum>
|
6600
|
+
<checksum>A1FFBF5C</checksum>
|
6601
6601
|
</file>
|
6602
6602
|
</files>
|
6603
6603
|
</measure>
|