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.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/nightly_build.yml +60 -0
  3. data/CHANGELOG.md +12 -0
  4. data/CMakeLists.txt +8 -8
  5. data/FindOpenStudioSDK.cmake +10 -10
  6. data/LICENSE.md +1 -1
  7. data/README.md +25 -23
  8. data/Rakefile +1 -1
  9. data/example_files/Gemfile +2 -0
  10. data/example_files/mappers/Baseline.rb +155 -155
  11. data/example_files/mappers/ClassProject.rb +4 -4
  12. data/example_files/mappers/CreateBar.rb +1 -1
  13. data/example_files/mappers/EvCharging.rb +1 -1
  14. data/example_files/mappers/FlexibleHotWater.rb +1 -1
  15. data/example_files/mappers/Floorspace.rb +1 -1
  16. data/example_files/mappers/HighEfficiency.rb +1 -1
  17. data/example_files/mappers/HighEfficiencyCreateBar.rb +1 -1
  18. data/example_files/mappers/HighEfficiencyFloorspace.rb +1 -1
  19. data/example_files/mappers/PeakHoursMelsShedding.rb +1 -1
  20. data/example_files/mappers/PeakHoursThermostatAdjust.rb +1 -1
  21. data/example_files/mappers/ThermalStorage.rb +1 -1
  22. data/example_files/measures/BuildResidentialModel/measure.rb +3 -3
  23. data/example_files/measures/BuildResidentialModel/measure.xml +3 -3
  24. data/example_files/measures/BuildResidentialModel/resources/util.rb +45 -45
  25. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.rb +7 -0
  26. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/measure.xml +18 -10
  27. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/resources/schedules.rb +15 -0
  28. data/example_files/resources/hpxml-measures/BuildResidentialScheduleFile/tests/build_residential_schedule_file_test.rb +53 -5
  29. data/example_files/resources/hpxml-measures/Changelog.md +39 -28
  30. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/measure.xml +27 -27
  31. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/battery.rb +9 -4
  32. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb +5 -4
  33. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/version.rb +2 -2
  34. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb +5 -1
  35. data/example_files/resources/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb +28 -10
  36. data/example_files/resources/hpxml-measures/ReportSimulationOutput/measure.rb +6 -1
  37. data/example_files/resources/hpxml-measures/ReportSimulationOutput/measure.xml +3 -3
  38. data/example_files/resources/hpxml-measures/docs/source/usage_instructions.rst +2 -1
  39. data/example_files/resources/hpxml-measures/docs/source/workflow_inputs.rst +14 -10
  40. data/example_files/resources/hpxml-measures/docs/source/workflow_outputs.rst +4 -4
  41. data/example_files/resources/hpxml-measures/workflow/template-run-hpxml-with-stochastic-occupancy-subset.osw +64 -0
  42. data/example_files/resources/hpxml-measures/workflow/template-run-hpxml-with-stochastic-occupancy.osw +2 -2
  43. data/example_files/resources/hpxml-measures/workflow/tests/base_results/results.csv +12 -12
  44. data/example_files/resources/hpxml-measures/workflow/tests/hpxml_translator_test.rb +36 -110
  45. data/lib/uo_cli/version.rb +2 -2
  46. data/lib/uo_cli.rb +62 -67
  47. data/uo_cli.gemspec +3 -1
  48. metadata +32 -3
  49. data/requirements.txt +0 -2
@@ -1,5 +1,5 @@
1
1
  # *********************************************************************************
2
- # URBANopt™, Copyright (c) 2019-2022, Alliance for Sustainable Energy, LLC, and other
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
- { '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' }
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
- { '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' }
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
- { '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' }
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 = Hash[captures.names.zip(captures.captures)]
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 !args.key?(arg_name)
998
- args[arg_name] = arg_default
999
- else
997
+ if args.key?(arg_name)
1000
998
  if debug
1001
- if !arg_default.nil?
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-2022, Alliance for Sustainable Energy, LLC, and other
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-2022, Alliance for Sustainable Energy, LLC, and other
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-2022, Alliance for Sustainable Energy, LLC, and other
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-2022, Alliance for Sustainable Energy, LLC, and other
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-2022, Alliance for Sustainable Energy, LLC, and other
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-2022, Alliance for Sustainable Energy, LLC, and other
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-2022, Alliance for Sustainable Energy, LLC, and other
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-2022, Alliance for Sustainable Energy, LLC, and other
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-2022, Alliance for Sustainable Energy, LLC, and other
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-2022, Alliance for Sustainable Energy, LLC, and other
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-2022, Alliance for Sustainable Energy, LLC, and other
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 !unit.key?('hpxml_path')
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>8bb0bd12-8c25-4c05-9477-e045ca9cde27</version_id>
7
- <version_modified>20221205T204142Z</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>079A37C9</checksum>
6600
+ <checksum>A1FFBF5C</checksum>
6601
6601
  </file>
6602
6602
  </files>
6603
6603
  </measure>