urbanopt-reopt 0.7.0 → 0.8.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +22 -0
- data/Gemfile +1 -3
- data/LICENSE.md +1 -13
- data/Rakefile +1 -1
- data/developer_nrel_key.rb +1 -1
- data/doc_templates/LICENSE.md +17 -17
- data/doc_templates/copyright_erb.txt +2 -2
- data/doc_templates/copyright_js.txt +2 -2
- data/doc_templates/copyright_ruby.txt +2 -2
- data/docs/package-lock.json +6040 -4675
- data/lib/urbanopt/reopt/extension.rb +6 -16
- data/lib/urbanopt/reopt/feature_report_adapter.rb +23 -19
- data/lib/urbanopt/reopt/reopt_lite_api.rb +6 -16
- data/lib/urbanopt/reopt/reopt_logger.rb +6 -16
- data/lib/urbanopt/reopt/reopt_post_processor.rb +22 -19
- data/lib/urbanopt/reopt/reopt_schema/reopt_output_schema.json +6 -1
- data/lib/urbanopt/reopt/scenario/reopt_scenario_csv.rb +7 -17
- data/lib/urbanopt/reopt/scenario_report_adapter.rb +51 -21
- data/lib/urbanopt/reopt/utilities.rb +30 -0
- data/lib/urbanopt/reopt/version.rb +7 -17
- data/lib/urbanopt/reopt.rb +6 -16
- data/lib/urbanopt/reopt_scenario.rb +6 -16
- data/lib/urbanopt-reopt.rb +6 -16
- data/urbanopt-reopt.gemspec +1 -2
- metadata +4 -18
| @@ -1,31 +1,21 @@ | |
| 1 1 | 
             
            # *********************************************************************************
         | 
| 2 | 
            -
            # URBANopt™, Copyright (c) 2019- | 
| 2 | 
            +
            # URBANopt™, Copyright (c) 2019-2022, 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,
         | 
| 6 6 | 
             
            # are permitted provided that the following conditions are met:
         | 
| 7 | 
            -
             | 
| 7 | 
            +
            #
         | 
| 8 8 | 
             
            # Redistributions of source code must retain the above copyright notice, this list
         | 
| 9 9 | 
             
            # of conditions and the following disclaimer.
         | 
| 10 | 
            -
             | 
| 10 | 
            +
            #
         | 
| 11 11 | 
             
            # Redistributions in binary form must reproduce the above copyright notice, this
         | 
| 12 12 | 
             
            # list of conditions and the following disclaimer in the documentation and/or other
         | 
| 13 13 | 
             
            # materials provided with the distribution.
         | 
| 14 | 
            -
             | 
| 14 | 
            +
            #
         | 
| 15 15 | 
             
            # Neither the name of the copyright holder nor the names of its contributors may be
         | 
| 16 16 | 
             
            # used to endorse or promote products derived from this software without specific
         | 
| 17 17 | 
             
            # prior written permission.
         | 
| 18 | 
            -
             | 
| 19 | 
            -
            # Redistribution of this software, without modification, must refer to the software
         | 
| 20 | 
            -
            # by the same designation. Redistribution of a modified version of this software
         | 
| 21 | 
            -
            # (i) may not refer to the modified version by the same designation, or by any
         | 
| 22 | 
            -
            # confusingly similar designation, and (ii) must refer to the underlying software
         | 
| 23 | 
            -
            # originally provided by Alliance as “URBANopt”. Except to comply with the foregoing,
         | 
| 24 | 
            -
            # the term “URBANopt”, or any confusingly similar designation may not be used to
         | 
| 25 | 
            -
            # refer to any modified version of this software or any modified version of the
         | 
| 26 | 
            -
            # underlying software originally provided by Alliance without the prior written
         | 
| 27 | 
            -
            # consent of Alliance.
         | 
| 28 | 
            -
             | 
| 18 | 
            +
            #
         | 
| 29 19 | 
             
            # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
         | 
| 30 20 | 
             
            # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
         | 
| 31 21 | 
             
            # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
         | 
| @@ -1,31 +1,21 @@ | |
| 1 1 | 
             
            # *********************************************************************************
         | 
| 2 | 
            -
            # URBANopt™, Copyright (c) 2019- | 
| 2 | 
            +
            # URBANopt™, Copyright (c) 2019-2022, 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,
         | 
| 6 6 | 
             
            # are permitted provided that the following conditions are met:
         | 
| 7 | 
            -
             | 
| 7 | 
            +
            #
         | 
| 8 8 | 
             
            # Redistributions of source code must retain the above copyright notice, this list
         | 
| 9 9 | 
             
            # of conditions and the following disclaimer.
         | 
| 10 | 
            -
             | 
| 10 | 
            +
            #
         | 
| 11 11 | 
             
            # Redistributions in binary form must reproduce the above copyright notice, this
         | 
| 12 12 | 
             
            # list of conditions and the following disclaimer in the documentation and/or other
         | 
| 13 13 | 
             
            # materials provided with the distribution.
         | 
| 14 | 
            -
             | 
| 14 | 
            +
            #
         | 
| 15 15 | 
             
            # Neither the name of the copyright holder nor the names of its contributors may be
         | 
| 16 16 | 
             
            # used to endorse or promote products derived from this software without specific
         | 
| 17 17 | 
             
            # prior written permission.
         | 
| 18 | 
            -
             | 
| 19 | 
            -
            # Redistribution of this software, without modification, must refer to the software
         | 
| 20 | 
            -
            # by the same designation. Redistribution of a modified version of this software
         | 
| 21 | 
            -
            # (i) may not refer to the modified version by the same designation, or by any
         | 
| 22 | 
            -
            # confusingly similar designation, and (ii) must refer to the underlying software
         | 
| 23 | 
            -
            # originally provided by Alliance as “URBANopt”. Except to comply with the foregoing,
         | 
| 24 | 
            -
            # the term “URBANopt”, or any confusingly similar designation may not be used to
         | 
| 25 | 
            -
            # refer to any modified version of this software or any modified version of the
         | 
| 26 | 
            -
            # underlying software originally provided by Alliance without the prior written
         | 
| 27 | 
            -
            # consent of Alliance.
         | 
| 28 | 
            -
             | 
| 18 | 
            +
            #
         | 
| 29 19 | 
             
            # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
         | 
| 30 20 | 
             
            # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
         | 
| 31 21 | 
             
            # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
         | 
| @@ -130,10 +120,10 @@ module URBANopt # :nodoc: | |
| 130 120 | 
             
                      # Fill in missing timestep values with 0 if a full year is not provided
         | 
| 131 121 | 
             
                      if energy_timeseries_kw.length < (feature_report.timesteps_per_hour * 8760)
         | 
| 132 122 | 
             
                        start_date = Time.parse(t.by_col['Datetime'][0])
         | 
| 133 | 
            -
                        start_ts = (((start_date.yday * 60.0 * 60.0 * 24) + (start_date.hour * 60.0 * 60.0) + (start_date.min * 60.0) + start_date.sec) /
         | 
| 123 | 
            +
                        start_ts = (((start_date.yday * 60.0 * 60.0 * 24) + (start_date.hour * 60.0 * 60.0) + (start_date.min * 60.0) + start_date.sec) / \
         | 
| 134 124 | 
             
                                    ((60 / feature_report.timesteps_per_hour) * 60)).to_int
         | 
| 135 125 | 
             
                        end_date = Time.parse(t.by_col['Datetime'][-1])
         | 
| 136 | 
            -
                        end_ts = (((end_date.yday * 60.0 * 60.0 * 24) + (end_date.hour * 60.0 * 60.0) + (end_date.min * 60.0) + end_date.sec) /
         | 
| 126 | 
            +
                        end_ts = (((end_date.yday * 60.0 * 60.0 * 24) + (end_date.hour * 60.0 * 60.0) + (end_date.min * 60.0) + end_date.sec) / \
         | 
| 137 127 | 
             
                                    ((60 / feature_report.timesteps_per_hour) * 60)).to_int
         | 
| 138 128 | 
             
                        energy_timeseries_kw = [0.0] * (start_ts - 1) + energy_timeseries_kw + [0.0] * ((feature_report.timesteps_per_hour * 8760) - end_ts)
         | 
| 139 129 | 
             
                      end
         | 
| @@ -193,6 +183,7 @@ module URBANopt # :nodoc: | |
| 193 183 | 
             
                    feature_report.location.longitude_deg = reopt_output['inputs']['Scenario']['Site']['longitude']
         | 
| 194 184 |  | 
| 195 185 | 
             
                    # Update distributed generation sizing and financials
         | 
| 186 | 
            +
                    feature_report.distributed_generation.annual_renewable_electricity_pct = reopt_output['outputs']['Scenario']['Site']['annual_renewable_electricity_pct'] || 0
         | 
| 196 187 | 
             
                    feature_report.distributed_generation.lcc_us_dollars = reopt_output['outputs']['Scenario']['Site']['Financial']['lcc_us_dollars'] || 0
         | 
| 197 188 | 
             
                    feature_report.distributed_generation.npv_us_dollars = reopt_output['outputs']['Scenario']['Site']['Financial']['npv_us_dollars'] || 0
         | 
| 198 189 | 
             
                    feature_report.distributed_generation.year_one_energy_cost_us_dollars =  reopt_output['outputs']['Scenario']['Site']['ElectricTariff']['year_one_energy_cost_us_dollars'] || 0
         | 
| @@ -222,17 +213,30 @@ module URBANopt # :nodoc: | |
| 222 213 |  | 
| 223 214 | 
             
                    # Store the PV name and location in a hash
         | 
| 224 215 | 
             
                    location = {}
         | 
| 216 | 
            +
                    azimuth = {}
         | 
| 217 | 
            +
                    tilt = {}
         | 
| 218 | 
            +
                    module_type = {}
         | 
| 219 | 
            +
                    gcr = {}
         | 
| 220 | 
            +
             | 
| 225 221 | 
             
                    # Check whether multi PV assumption input file is used or single PV
         | 
| 226 222 | 
             
                    if reopt_output['inputs']['Scenario']['Site']['PV'].is_a?(Array)
         | 
| 227 223 | 
             
                      reopt_output['inputs']['Scenario']['Site']['PV'].each do |pv|
         | 
| 228 224 | 
             
                        location[pv['pv_name']] = pv['location']
         | 
| 225 | 
            +
                        azimuth[pv['pv_name']] = pv['azimuth']
         | 
| 226 | 
            +
                        tilt[pv['pv_name']] = pv['tilt']
         | 
| 227 | 
            +
                        module_type[pv['pv_name']] = pv['module_type']
         | 
| 228 | 
            +
                        gcr[pv['pv_name']] = pv['gcr']
         | 
| 229 229 | 
             
                      end
         | 
| 230 230 | 
             
                    else
         | 
| 231 231 | 
             
                      location[reopt_output['inputs']['Scenario']['Site']['PV']['pv_name']] = reopt_output['inputs']['Scenario']['Site']['PV']['location']
         | 
| 232 | 
            +
                      azimuth[reopt_output['inputs']['Scenario']['Site']['PV']['pv_name']] = reopt_output['inputs']['Scenario']['Site']['PV']['azimuth']
         | 
| 233 | 
            +
                      tilt[reopt_output['inputs']['Scenario']['Site']['PV']['pv_name']] = reopt_output['inputs']['Scenario']['Site']['PV']['tilt']
         | 
| 234 | 
            +
                      module_type[reopt_output['inputs']['Scenario']['Site']['PV']['pv_name']] = reopt_output['inputs']['Scenario']['Site']['PV']['module_type']
         | 
| 235 | 
            +
                      gcr[reopt_output['inputs']['Scenario']['Site']['PV']['pv_name']] = reopt_output['inputs']['Scenario']['Site']['PV']['gcr']
         | 
| 232 236 | 
             
                    end
         | 
| 233 237 |  | 
| 234 238 | 
             
                    reopt_output['outputs']['Scenario']['Site']['PV'].each_with_index do |pv, i|
         | 
| 235 | 
            -
                      feature_report.distributed_generation.add_tech 'solar_pv', URBANopt::Reporting::DefaultReports::SolarPV.new({ size_kw: (pv['size_kw'] || 0), id: i, location: location[pv['pv_name']] })
         | 
| 239 | 
            +
                      feature_report.distributed_generation.add_tech 'solar_pv', URBANopt::Reporting::DefaultReports::SolarPV.new({ size_kw: (pv['size_kw'] || 0), id: i, location: location[pv['pv_name']], average_yearly_energy_produced_kwh: pv['average_yearly_energy_produced_kwh'], azimuth: azimuth[pv['pv_name']], tilt: tilt[pv['pv_name']], module_type: module_type[pv['pv_name']], gcr: gcr[pv['pv_name']] })
         | 
| 236 240 | 
             
                    end
         | 
| 237 241 |  | 
| 238 242 | 
             
                    wind = reopt_output['outputs']['Scenario']['Site']['Wind']
         | 
| @@ -1,31 +1,21 @@ | |
| 1 1 | 
             
            # *********************************************************************************
         | 
| 2 | 
            -
            # URBANopt™, Copyright (c) 2019- | 
| 2 | 
            +
            # URBANopt™, Copyright (c) 2019-2022, 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,
         | 
| 6 6 | 
             
            # are permitted provided that the following conditions are met:
         | 
| 7 | 
            -
             | 
| 7 | 
            +
            #
         | 
| 8 8 | 
             
            # Redistributions of source code must retain the above copyright notice, this list
         | 
| 9 9 | 
             
            # of conditions and the following disclaimer.
         | 
| 10 | 
            -
             | 
| 10 | 
            +
            #
         | 
| 11 11 | 
             
            # Redistributions in binary form must reproduce the above copyright notice, this
         | 
| 12 12 | 
             
            # list of conditions and the following disclaimer in the documentation and/or other
         | 
| 13 13 | 
             
            # materials provided with the distribution.
         | 
| 14 | 
            -
             | 
| 14 | 
            +
            #
         | 
| 15 15 | 
             
            # Neither the name of the copyright holder nor the names of its contributors may be
         | 
| 16 16 | 
             
            # used to endorse or promote products derived from this software without specific
         | 
| 17 17 | 
             
            # prior written permission.
         | 
| 18 | 
            -
             | 
| 19 | 
            -
            # Redistribution of this software, without modification, must refer to the software
         | 
| 20 | 
            -
            # by the same designation. Redistribution of a modified version of this software
         | 
| 21 | 
            -
            # (i) may not refer to the modified version by the same designation, or by any
         | 
| 22 | 
            -
            # confusingly similar designation, and (ii) must refer to the underlying software
         | 
| 23 | 
            -
            # originally provided by Alliance as “URBANopt”. Except to comply with the foregoing,
         | 
| 24 | 
            -
            # the term “URBANopt”, or any confusingly similar designation may not be used to
         | 
| 25 | 
            -
            # refer to any modified version of this software or any modified version of the
         | 
| 26 | 
            -
            # underlying software originally provided by Alliance without the prior written
         | 
| 27 | 
            -
            # consent of Alliance.
         | 
| 28 | 
            -
             | 
| 18 | 
            +
            #
         | 
| 29 19 | 
             
            # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
         | 
| 30 20 | 
             
            # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
         | 
| 31 21 | 
             
            # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
         | 
| @@ -1,31 +1,21 @@ | |
| 1 1 | 
             
            # *********************************************************************************
         | 
| 2 | 
            -
            # URBANopt™, Copyright (c) 2019- | 
| 2 | 
            +
            # URBANopt™, Copyright (c) 2019-2022, 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,
         | 
| 6 6 | 
             
            # are permitted provided that the following conditions are met:
         | 
| 7 | 
            -
             | 
| 7 | 
            +
            #
         | 
| 8 8 | 
             
            # Redistributions of source code must retain the above copyright notice, this list
         | 
| 9 9 | 
             
            # of conditions and the following disclaimer.
         | 
| 10 | 
            -
             | 
| 10 | 
            +
            #
         | 
| 11 11 | 
             
            # Redistributions in binary form must reproduce the above copyright notice, this
         | 
| 12 12 | 
             
            # list of conditions and the following disclaimer in the documentation and/or other
         | 
| 13 13 | 
             
            # materials provided with the distribution.
         | 
| 14 | 
            -
             | 
| 14 | 
            +
            #
         | 
| 15 15 | 
             
            # Neither the name of the copyright holder nor the names of its contributors may be
         | 
| 16 16 | 
             
            # used to endorse or promote products derived from this software without specific
         | 
| 17 17 | 
             
            # prior written permission.
         | 
| 18 | 
            -
             | 
| 19 | 
            -
            # Redistribution of this software, without modification, must refer to the software
         | 
| 20 | 
            -
            # by the same designation. Redistribution of a modified version of this software
         | 
| 21 | 
            -
            # (i) may not refer to the modified version by the same designation, or by any
         | 
| 22 | 
            -
            # confusingly similar designation, and (ii) must refer to the underlying software
         | 
| 23 | 
            -
            # originally provided by Alliance as “URBANopt”. Except to comply with the foregoing,
         | 
| 24 | 
            -
            # the term “URBANopt”, or any confusingly similar designation may not be used to
         | 
| 25 | 
            -
            # refer to any modified version of this software or any modified version of the
         | 
| 26 | 
            -
            # underlying software originally provided by Alliance without the prior written
         | 
| 27 | 
            -
            # consent of Alliance.
         | 
| 28 | 
            -
             | 
| 18 | 
            +
            #
         | 
| 29 19 | 
             
            # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
         | 
| 30 20 | 
             
            # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
         | 
| 31 21 | 
             
            # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
         | 
| @@ -1,31 +1,21 @@ | |
| 1 1 | 
             
            # *********************************************************************************
         | 
| 2 | 
            -
            # URBANopt™, Copyright (c) 2019- | 
| 2 | 
            +
            # URBANopt™, Copyright (c) 2019-2022, 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,
         | 
| 6 6 | 
             
            # are permitted provided that the following conditions are met:
         | 
| 7 | 
            -
             | 
| 7 | 
            +
            #
         | 
| 8 8 | 
             
            # Redistributions of source code must retain the above copyright notice, this list
         | 
| 9 9 | 
             
            # of conditions and the following disclaimer.
         | 
| 10 | 
            -
             | 
| 10 | 
            +
            #
         | 
| 11 11 | 
             
            # Redistributions in binary form must reproduce the above copyright notice, this
         | 
| 12 12 | 
             
            # list of conditions and the following disclaimer in the documentation and/or other
         | 
| 13 13 | 
             
            # materials provided with the distribution.
         | 
| 14 | 
            -
             | 
| 14 | 
            +
            #
         | 
| 15 15 | 
             
            # Neither the name of the copyright holder nor the names of its contributors may be
         | 
| 16 16 | 
             
            # used to endorse or promote products derived from this software without specific
         | 
| 17 17 | 
             
            # prior written permission.
         | 
| 18 | 
            -
             | 
| 19 | 
            -
            # Redistribution of this software, without modification, must refer to the software
         | 
| 20 | 
            -
            # by the same designation. Redistribution of a modified version of this software
         | 
| 21 | 
            -
            # (i) may not refer to the modified version by the same designation, or by any
         | 
| 22 | 
            -
            # confusingly similar designation, and (ii) must refer to the underlying software
         | 
| 23 | 
            -
            # originally provided by Alliance as “URBANopt”. Except to comply with the foregoing,
         | 
| 24 | 
            -
            # the term “URBANopt”, or any confusingly similar designation may not be used to
         | 
| 25 | 
            -
            # refer to any modified version of this software or any modified version of the
         | 
| 26 | 
            -
            # underlying software originally provided by Alliance without the prior written
         | 
| 27 | 
            -
            # consent of Alliance.
         | 
| 28 | 
            -
             | 
| 18 | 
            +
            #
         | 
| 29 19 | 
             
            # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
         | 
| 30 20 | 
             
            # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
         | 
| 31 21 | 
             
            # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
         | 
| @@ -101,12 +91,14 @@ module URBANopt # :nodoc: | |
| 101 91 | 
             
                    end
         | 
| 102 92 |  | 
| 103 93 | 
             
                    if !scenario_reopt_assumptions_file.nil?
         | 
| 94 | 
            +
                      @scenario_reopt_assumptions_file = scenario_reopt_assumptions_file
         | 
| 104 95 | 
             
                      File.open(scenario_reopt_assumptions_file, 'r') do |file|
         | 
| 105 96 | 
             
                        @scenario_reopt_default_assumptions_hash = JSON.parse(file.read, symbolize_names: true)
         | 
| 106 97 | 
             
                      end
         | 
| 107 98 | 
             
                    end
         | 
| 108 99 |  | 
| 109 100 | 
             
                    if !reopt_feature_assumptions.empty?
         | 
| 101 | 
            +
                      @reopt_feature_assumptions = reopt_feature_assumptions
         | 
| 110 102 | 
             
                      reopt_feature_assumptions.each do |file|
         | 
| 111 103 | 
             
                        @feature_reports_reopt_default_assumption_hashes << JSON.parse(File.open(file, 'r').read, symbolize_names: true)
         | 
| 112 104 | 
             
                      end
         | 
| @@ -137,6 +129,7 @@ module URBANopt # :nodoc: | |
| 137 129 | 
             
                      reopt_output_file = File.join(feature_report.directory_name, 'reopt')
         | 
| 138 130 | 
             
                    end
         | 
| 139 131 | 
             
                    reopt_output = api.reopt_request(reopt_input, reopt_output_file)
         | 
| 132 | 
            +
                    print("REOPT OUTPUT FILE: #{reopt_output_file}")
         | 
| 140 133 | 
             
                    if run_resilience
         | 
| 141 134 | 
             
                      run_uuid = reopt_output['outputs']['Scenario']['run_uuid']
         | 
| 142 135 | 
             
                      if File.directory? reopt_output_file
         | 
| @@ -167,8 +160,12 @@ module URBANopt # :nodoc: | |
| 167 160 | 
             
                  #
         | 
| 168 161 | 
             
                  # [*return:*] _URBANopt::Scenario::DefaultReports::ScenarioReport_ Returns an updated ScenarioReport
         | 
| 169 162 | 
             
                  def run_scenario_report(scenario_report:, reopt_assumptions_hash: nil, reopt_output_file: nil, timeseries_csv_path: nil, save_name: nil, run_resilience: true, community_photovoltaic: nil)
         | 
| 163 | 
            +
                    puts "run scenario report"
         | 
| 164 | 
            +
                    @save_assumptions_filepath = false
         | 
| 170 165 | 
             
                    if !reopt_assumptions_hash.nil?
         | 
| 171 166 | 
             
                      @scenario_reopt_default_assumptions_hash = reopt_assumptions_hash
         | 
| 167 | 
            +
                    else
         | 
| 168 | 
            +
                      @save_assumptions_filepath = true
         | 
| 172 169 | 
             
                    end
         | 
| 173 170 | 
             
                    if !reopt_output_file.nil?
         | 
| 174 171 | 
             
                      @scenario_reopt_default_output_file = reopt_output_file
         | 
| @@ -195,8 +192,14 @@ module URBANopt # :nodoc: | |
| 195 192 | 
             
                    end
         | 
| 196 193 |  | 
| 197 194 | 
             
                    result = adapter.update_scenario_report(scenario_report, reopt_output, @scenario_timeseries_default_output_file, resilience_stats)
         | 
| 195 | 
            +
                    # can you save the assumptions file path that was used?
         | 
| 196 | 
            +
                    if @save_assumptions_filepath && @scenario_reopt_assumptions_file
         | 
| 197 | 
            +
                      result.distributed_generation.reopt_assumptions_file_path = @scenario_reopt_assumptions_file
         | 
| 198 | 
            +
                    end
         | 
| 199 | 
            +
             | 
| 198 200 | 
             
                    if !save_name.nil?
         | 
| 199 | 
            -
                       | 
| 201 | 
            +
                      # don't save individual feature reports when doing the scenario optimization!
         | 
| 202 | 
            +
                      result.save(save_name, false)
         | 
| 200 203 | 
             
                    end
         | 
| 201 204 | 
             
                    return result
         | 
| 202 205 | 
             
                  end
         | 
| @@ -270,7 +273,7 @@ module URBANopt # :nodoc: | |
| 270 273 | 
             
                          @@logger.error("ERROR: #{e}")
         | 
| 271 274 | 
             
                        end
         | 
| 272 275 | 
             
                      else
         | 
| 273 | 
            -
                         | 
| 276 | 
            +
                        @@logger.info('Output file already exists...skipping')
         | 
| 274 277 | 
             
                      end
         | 
| 275 278 | 
             
                    end
         | 
| 276 279 |  | 
| @@ -308,7 +311,7 @@ module URBANopt # :nodoc: | |
| 308 311 | 
             
                  # [*return:*] _URBANopt::Scenario::DefaultReports::ScenarioReport_ - Returns an updated ScenarioReport
         | 
| 309 312 | 
             
                  def run_scenario_report_features(scenario_report:, reopt_assumptions_hashes: [], reopt_output_files: [], feature_report_timeseries_csv_paths: [], save_names_feature_reports: nil, save_name_scenario_report: nil, run_resilience: true, keep_existing_output: false, groundmount_photovoltaic: nil)
         | 
| 310 313 | 
             
                    new_feature_reports = run_feature_reports(feature_reports: scenario_report.feature_reports, reopt_assumptions_hashes: reopt_assumptions_hashes, reopt_output_files: reopt_output_files, timeseries_csv_paths: feature_report_timeseries_csv_paths, save_names: save_names_feature_reports, run_resilience: run_resilience, keep_existing_output: keep_existing_output, groundmount_photovoltaic: groundmount_photovoltaic)
         | 
| 311 | 
            -
             | 
| 314 | 
            +
             | 
| 312 315 | 
             
                    # only do this if you have run feature reports
         | 
| 313 316 | 
             
                    new_scenario_report = URBANopt::Reporting::DefaultReports::ScenarioReport.new
         | 
| 314 317 | 
             
                    if !new_feature_reports.empty?
         | 
| @@ -71,6 +71,11 @@ | |
| 71 71 | 
             
                          "Site": {
         | 
| 72 72 | 
             
                            "type": "object",
         | 
| 73 73 | 
             
                            "properties": {
         | 
| 74 | 
            +
                              "annual_renewable_electricity_pct": {
         | 
| 75 | 
            +
                                "type": "float",
         | 
| 76 | 
            +
                                "description": "Fraction of annual renewable electricity - 0 for none, 1 for all, over 1 for more generated than consumed",
         | 
| 77 | 
            +
                                "units": "none"
         | 
| 78 | 
            +
                              },
         | 
| 74 79 | 
             
                              "LoadProfile": {
         | 
| 75 80 | 
             
                                "type": "object",
         | 
| 76 81 | 
             
                                "properties": {
         | 
| @@ -540,4 +545,4 @@ | |
| 540 545 | 
             
                  }
         | 
| 541 546 | 
             
                }
         | 
| 542 547 | 
             
              }
         | 
| 543 | 
            -
            }
         | 
| 548 | 
            +
            }
         | 
| @@ -1,31 +1,21 @@ | |
| 1 1 | 
             
            # *********************************************************************************
         | 
| 2 | 
            -
            # URBANopt™, Copyright (c) 2019- | 
| 2 | 
            +
            # URBANopt™, Copyright (c) 2019-2022, 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,
         | 
| 6 6 | 
             
            # are permitted provided that the following conditions are met:
         | 
| 7 | 
            -
             | 
| 7 | 
            +
            #
         | 
| 8 8 | 
             
            # Redistributions of source code must retain the above copyright notice, this list
         | 
| 9 9 | 
             
            # of conditions and the following disclaimer.
         | 
| 10 | 
            -
             | 
| 10 | 
            +
            #
         | 
| 11 11 | 
             
            # Redistributions in binary form must reproduce the above copyright notice, this
         | 
| 12 12 | 
             
            # list of conditions and the following disclaimer in the documentation and/or other
         | 
| 13 13 | 
             
            # materials provided with the distribution.
         | 
| 14 | 
            -
             | 
| 14 | 
            +
            #
         | 
| 15 15 | 
             
            # Neither the name of the copyright holder nor the names of its contributors may be
         | 
| 16 16 | 
             
            # used to endorse or promote products derived from this software without specific
         | 
| 17 17 | 
             
            # prior written permission.
         | 
| 18 | 
            -
             | 
| 19 | 
            -
            # Redistribution of this software, without modification, must refer to the software
         | 
| 20 | 
            -
            # by the same designation. Redistribution of a modified version of this software
         | 
| 21 | 
            -
            # (i) may not refer to the modified version by the same designation, or by any
         | 
| 22 | 
            -
            # confusingly similar designation, and (ii) must refer to the underlying software
         | 
| 23 | 
            -
            # originally provided by Alliance as “URBANopt”. Except to comply with the foregoing,
         | 
| 24 | 
            -
            # the term “URBANopt”, or any confusingly similar designation may not be used to
         | 
| 25 | 
            -
            # refer to any modified version of this software or any modified version of the
         | 
| 26 | 
            -
            # underlying software originally provided by Alliance without the prior written
         | 
| 27 | 
            -
            # consent of Alliance.
         | 
| 28 | 
            -
             | 
| 18 | 
            +
            #
         | 
| 29 19 | 
             
            # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
         | 
| 30 20 | 
             
            # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
         | 
| 31 21 | 
             
            # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
         | 
| @@ -106,7 +96,7 @@ module URBANopt | |
| 106 96 | 
             
                      if row.length > 3 && !@reopt_files_dir.nil?
         | 
| 107 97 | 
             
                        @reopt_feature_assumptions[idx - 1] = File.join(@reopt_files_dir, row[3].chomp)
         | 
| 108 98 | 
             
                      end
         | 
| 109 | 
            -
             | 
| 99 | 
            +
                      
         | 
| 110 100 | 
             
                      # gets +features+ from the feature_file.
         | 
| 111 101 | 
             
                      features = []
         | 
| 112 102 | 
             
                      feature = feature_file.get_feature_by_id(feature_id)
         | 
| @@ -1,31 +1,21 @@ | |
| 1 1 | 
             
            # *********************************************************************************
         | 
| 2 | 
            -
            # URBANopt™, Copyright (c) 2019- | 
| 2 | 
            +
            # URBANopt™, Copyright (c) 2019-2022, 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,
         | 
| 6 6 | 
             
            # are permitted provided that the following conditions are met:
         | 
| 7 | 
            -
             | 
| 7 | 
            +
            #
         | 
| 8 8 | 
             
            # Redistributions of source code must retain the above copyright notice, this list
         | 
| 9 9 | 
             
            # of conditions and the following disclaimer.
         | 
| 10 | 
            -
             | 
| 10 | 
            +
            #
         | 
| 11 11 | 
             
            # Redistributions in binary form must reproduce the above copyright notice, this
         | 
| 12 12 | 
             
            # list of conditions and the following disclaimer in the documentation and/or other
         | 
| 13 13 | 
             
            # materials provided with the distribution.
         | 
| 14 | 
            -
             | 
| 14 | 
            +
            #
         | 
| 15 15 | 
             
            # Neither the name of the copyright holder nor the names of its contributors may be
         | 
| 16 16 | 
             
            # used to endorse or promote products derived from this software without specific
         | 
| 17 17 | 
             
            # prior written permission.
         | 
| 18 | 
            -
             | 
| 19 | 
            -
            # Redistribution of this software, without modification, must refer to the software
         | 
| 20 | 
            -
            # by the same designation. Redistribution of a modified version of this software
         | 
| 21 | 
            -
            # (i) may not refer to the modified version by the same designation, or by any
         | 
| 22 | 
            -
            # confusingly similar designation, and (ii) must refer to the underlying software
         | 
| 23 | 
            -
            # originally provided by Alliance as “URBANopt”. Except to comply with the foregoing,
         | 
| 24 | 
            -
            # the term “URBANopt”, or any confusingly similar designation may not be used to
         | 
| 25 | 
            -
            # refer to any modified version of this software or any modified version of the
         | 
| 26 | 
            -
            # underlying software originally provided by Alliance without the prior written
         | 
| 27 | 
            -
            # consent of Alliance.
         | 
| 28 | 
            -
             | 
| 18 | 
            +
            #
         | 
| 29 19 | 
             
            # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
         | 
| 30 20 | 
             
            # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
         | 
| 31 21 | 
             
            # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
         | 
| @@ -85,7 +75,7 @@ module URBANopt # :nodoc: | |
| 85 75 | 
             
                      lats = []
         | 
| 86 76 | 
             
                      longs = []
         | 
| 87 77 | 
             
                      scenario_report.feature_reports.each do |x|
         | 
| 88 | 
            -
                         | 
| 78 | 
            +
                        @@logger.info(" ERROR: #{x.location.latitude_deg}")
         | 
| 89 79 | 
             
                        if ![nil].include?(x.location.latitude_deg) && ![nil].include?(x.location.longitude_deg)
         | 
| 90 80 | 
             
                          lats.push(x.location.latitude_deg)
         | 
| 91 81 | 
             
                          longs.push(x.location.longitude_deg)
         | 
| @@ -222,7 +212,7 @@ module URBANopt # :nodoc: | |
| 222 212 | 
             
                    scenario_report.location.longitude_deg = reopt_output['inputs']['Scenario']['Site']['longitude']
         | 
| 223 213 |  | 
| 224 214 | 
             
                    # Update distributed generation sizing and financials
         | 
| 225 | 
            -
             | 
| 215 | 
            +
                    scenario_report.distributed_generation.annual_renewable_electricity_pct = reopt_output['outputs']['Scenario']['Site']['annual_renewable_electricity_pct'] || 0
         | 
| 226 216 | 
             
                    scenario_report.distributed_generation.lcc_us_dollars = reopt_output['outputs']['Scenario']['Site']['Financial']['lcc_us_dollars'] || 0
         | 
| 227 217 | 
             
                    scenario_report.distributed_generation.npv_us_dollars = reopt_output['outputs']['Scenario']['Site']['Financial']['npv_us_dollars'] || 0
         | 
| 228 218 | 
             
                    scenario_report.distributed_generation.year_one_energy_cost_us_dollars = reopt_output['outputs']['Scenario']['Site']['ElectricTariff']['year_one_energy_cost_us_dollars'] || 0
         | 
| @@ -252,22 +242,62 @@ module URBANopt # :nodoc: | |
| 252 242 |  | 
| 253 243 | 
             
                    # Store the PV name and location in a hash
         | 
| 254 244 | 
             
                    location = {}
         | 
| 245 | 
            +
                    azimuth = {}
         | 
| 246 | 
            +
                    tilt = {}
         | 
| 247 | 
            +
                    module_type = {}
         | 
| 248 | 
            +
                    gcr = {}
         | 
| 255 249 | 
             
                    # Check whether multi PV assumption input file is used or single PV
         | 
| 256 250 | 
             
                    if reopt_output['inputs']['Scenario']['Site']['PV'].is_a?(Array)
         | 
| 257 251 | 
             
                      reopt_output['inputs']['Scenario']['Site']['PV'].each do |pv|
         | 
| 258 252 | 
             
                        location[pv['pv_name']] = pv['location']
         | 
| 253 | 
            +
                        azimuth[pv['pv_name']] = pv['azimuth']
         | 
| 254 | 
            +
                        tilt[pv['pv_name']] = pv['tilt']
         | 
| 255 | 
            +
                        module_type[pv['pv_name']] = pv['module_type']
         | 
| 256 | 
            +
                        gcr[pv['pv_name']] = pv['gcr']
         | 
| 259 257 | 
             
                      end
         | 
| 260 258 | 
             
                    else
         | 
| 261 259 | 
             
                      location[reopt_output['inputs']['Scenario']['Site']['PV']['pv_name']] = reopt_output['inputs']['Scenario']['Site']['PV']['location']
         | 
| 260 | 
            +
                      azimuth[reopt_output['inputs']['Scenario']['Site']['PV']['pv_name']] = reopt_output['inputs']['Scenario']['Site']['PV']['azimuth']
         | 
| 261 | 
            +
                      tilt[reopt_output['inputs']['Scenario']['Site']['PV']['pv_name']] = reopt_output['inputs']['Scenario']['Site']['PV']['tilt']
         | 
| 262 | 
            +
                      module_type[reopt_output['inputs']['Scenario']['Site']['PV']['pv_name']] = reopt_output['inputs']['Scenario']['Site']['PV']['module_type']
         | 
| 263 | 
            +
                      gcr[reopt_output['inputs']['Scenario']['Site']['PV']['pv_name']] = reopt_output['inputs']['Scenario']['Site']['PV']['gcr']
         | 
| 264 | 
            +
                    end
         | 
| 265 | 
            +
                    pv_inputs = reopt_output['inputs']['Scenario']['Site']['PV']
         | 
| 266 | 
            +
                    if pv_inputs.is_a?(Hash)
         | 
| 267 | 
            +
                      pv_inputs = [pv_inputs]
         | 
| 268 | 
            +
                    end
         | 
| 269 | 
            +
                    pv_outputs = reopt_output['outputs']['Scenario']['Site']['PV']
         | 
| 270 | 
            +
                    if pv_outputs.is_a?(Hash)
         | 
| 271 | 
            +
                      pv_outputs = [pv_outputs]
         | 
| 272 | 
            +
                    end
         | 
| 273 | 
            +
                    pv_outputs.each_with_index do |pv, i|
         | 
| 274 | 
            +
                      if pv_inputs[i]
         | 
| 275 | 
            +
                        if pv_inputs[i]['tilt']
         | 
| 276 | 
            +
                          tilt[pv['pv_name']] = pv_inputs[i]['tilt']
         | 
| 277 | 
            +
                        end
         | 
| 278 | 
            +
                        if pv_inputs[i]['azimuth']
         | 
| 279 | 
            +
                          azimuth[pv['pv_name']] = pv_inputs[i]['azimuth']
         | 
| 280 | 
            +
                        end
         | 
| 281 | 
            +
                        if pv_inputs[i]['module_type']
         | 
| 282 | 
            +
                          module_type[pv['pv_name']] = pv_inputs[i]['module_type']
         | 
| 283 | 
            +
                        end
         | 
| 284 | 
            +
                      end
         | 
| 262 285 | 
             
                    end
         | 
| 263 286 |  | 
| 264 | 
            -
                     | 
| 265 | 
            -
                      scenario_report.distributed_generation.add_tech 'solar_pv', URBANopt::Reporting::DefaultReports::SolarPV.new({ size_kw: (pv['size_kw'] || 0), id: i, location: location[pv['pv_name']] })
         | 
| 287 | 
            +
                    pv_outputs.each_with_index do |pv, i|
         | 
| 288 | 
            +
                      scenario_report.distributed_generation.add_tech 'solar_pv', URBANopt::Reporting::DefaultReports::SolarPV.new({ size_kw: (pv['size_kw'] || 0), id: i, location: location[pv['pv_name']], average_yearly_energy_produced_kwh: pv['average_yearly_energy_produced_kwh'], azimuth: azimuth[pv['pv_name']], tilt: tilt[pv['pv_name']], module_type: module_type[pv['pv_name']], gcr: gcr[pv['pv_name']] })
         | 
| 266 289 | 
             
                    end
         | 
| 267 290 |  | 
| 268 291 | 
             
                    wind = reopt_output['outputs']['Scenario']['Site']['Wind']
         | 
| 269 292 | 
             
                    if !wind['size_kw'].nil? && (wind['size_kw'] != 0)
         | 
| 270 | 
            -
                       | 
| 293 | 
            +
                      # find size_class
         | 
| 294 | 
            +
                      size_class = nil
         | 
| 295 | 
            +
                      if reopt_output['inputs']['Scenario']['Site']['Wind']['size_class']
         | 
| 296 | 
            +
                        size_class = reopt_output['inputs']['Scenario']['Site']['Wind']['size_class']
         | 
| 297 | 
            +
                      else
         | 
| 298 | 
            +
                        size_class = 'commercial' # default
         | 
| 299 | 
            +
                      end
         | 
| 300 | 
            +
                      scenario_report.distributed_generation.add_tech 'wind', URBANopt::Reporting::DefaultReports::Wind.new({ size_kw: (wind['size_kw'] || 0), size_class: size_class, average_yearly_energy_produced_kwh: (wind['average_yearly_energy_produced_kwh'] || 0) })
         | 
| 271 301 | 
             
                    end
         | 
| 272 302 |  | 
| 273 303 | 
             
                    generator = reopt_output['outputs']['Scenario']['Site']['Generator']
         | 
| @@ -1,3 +1,33 @@ | |
| 1 | 
            +
            # *********************************************************************************
         | 
| 2 | 
            +
            # URBANopt™, Copyright (c) 2019-2022, Alliance for Sustainable Energy, LLC, and other
         | 
| 3 | 
            +
            # contributors. All rights reserved.
         | 
| 4 | 
            +
            #
         | 
| 5 | 
            +
            # Redistribution and use in source and binary forms, with or without modification,
         | 
| 6 | 
            +
            # are permitted provided that the following conditions are met:
         | 
| 7 | 
            +
            #
         | 
| 8 | 
            +
            # Redistributions of source code must retain the above copyright notice, this list
         | 
| 9 | 
            +
            # of conditions and the following disclaimer.
         | 
| 10 | 
            +
            #
         | 
| 11 | 
            +
            # Redistributions in binary form must reproduce the above copyright notice, this
         | 
| 12 | 
            +
            # list of conditions and the following disclaimer in the documentation and/or other
         | 
| 13 | 
            +
            # materials provided with the distribution.
         | 
| 14 | 
            +
            #
         | 
| 15 | 
            +
            # Neither the name of the copyright holder nor the names of its contributors may be
         | 
| 16 | 
            +
            # used to endorse or promote products derived from this software without specific
         | 
| 17 | 
            +
            # prior written permission.
         | 
| 18 | 
            +
            #
         | 
| 19 | 
            +
            # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
         | 
| 20 | 
            +
            # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
         | 
| 21 | 
            +
            # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
         | 
| 22 | 
            +
            # IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
         | 
| 23 | 
            +
            # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
         | 
| 24 | 
            +
            # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
         | 
| 25 | 
            +
            # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
         | 
| 26 | 
            +
            # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
         | 
| 27 | 
            +
            # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
         | 
| 28 | 
            +
            # OF THE POSSIBILITY OF SUCH DAMAGE.
         | 
| 29 | 
            +
            # *********************************************************************************
         | 
| 30 | 
            +
             | 
| 1 31 | 
             
            def convert_powerflow_resolution(timeseries_kw, original_res, destination_res)
         | 
| 2 32 | 
             
              if timeseries_kw.nil?
         | 
| 3 33 | 
             
                return nil
         | 
| @@ -1,31 +1,21 @@ | |
| 1 1 | 
             
            # *********************************************************************************
         | 
| 2 | 
            -
            # URBANopt™, Copyright (c) 2019- | 
| 2 | 
            +
            # URBANopt™, Copyright (c) 2019-2022, 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,
         | 
| 6 6 | 
             
            # are permitted provided that the following conditions are met:
         | 
| 7 | 
            -
             | 
| 7 | 
            +
            #
         | 
| 8 8 | 
             
            # Redistributions of source code must retain the above copyright notice, this list
         | 
| 9 9 | 
             
            # of conditions and the following disclaimer.
         | 
| 10 | 
            -
             | 
| 10 | 
            +
            #
         | 
| 11 11 | 
             
            # Redistributions in binary form must reproduce the above copyright notice, this
         | 
| 12 12 | 
             
            # list of conditions and the following disclaimer in the documentation and/or other
         | 
| 13 13 | 
             
            # materials provided with the distribution.
         | 
| 14 | 
            -
             | 
| 14 | 
            +
            #
         | 
| 15 15 | 
             
            # Neither the name of the copyright holder nor the names of its contributors may be
         | 
| 16 16 | 
             
            # used to endorse or promote products derived from this software without specific
         | 
| 17 17 | 
             
            # prior written permission.
         | 
| 18 | 
            -
             | 
| 19 | 
            -
            # Redistribution of this software, without modification, must refer to the software
         | 
| 20 | 
            -
            # by the same designation. Redistribution of a modified version of this software
         | 
| 21 | 
            -
            # (i) may not refer to the modified version by the same designation, or by any
         | 
| 22 | 
            -
            # confusingly similar designation, and (ii) must refer to the underlying software
         | 
| 23 | 
            -
            # originally provided by Alliance as “URBANopt”. Except to comply with the foregoing,
         | 
| 24 | 
            -
            # the term “URBANopt”, or any confusingly similar designation may not be used to
         | 
| 25 | 
            -
            # refer to any modified version of this software or any modified version of the
         | 
| 26 | 
            -
            # underlying software originally provided by Alliance without the prior written
         | 
| 27 | 
            -
            # consent of Alliance.
         | 
| 28 | 
            -
             | 
| 18 | 
            +
            #
         | 
| 29 19 | 
             
            # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
         | 
| 30 20 | 
             
            # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
         | 
| 31 21 | 
             
            # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
         | 
| @@ -40,6 +30,6 @@ | |
| 40 30 |  | 
| 41 31 | 
             
            module URBANopt # :nodoc:
         | 
| 42 32 | 
             
              module REopt # :nodoc:
         | 
| 43 | 
            -
                VERSION = '0. | 
| 33 | 
            +
                VERSION = '0.8.0'.freeze
         | 
| 44 34 | 
             
              end
         | 
| 45 35 | 
             
            end
         | 
    
        data/lib/urbanopt/reopt.rb
    CHANGED
    
    | @@ -1,31 +1,21 @@ | |
| 1 1 | 
             
            # *********************************************************************************
         | 
| 2 | 
            -
            # URBANopt™, Copyright (c) 2019- | 
| 2 | 
            +
            # URBANopt™, Copyright (c) 2019-2022, 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,
         | 
| 6 6 | 
             
            # are permitted provided that the following conditions are met:
         | 
| 7 | 
            -
             | 
| 7 | 
            +
            #
         | 
| 8 8 | 
             
            # Redistributions of source code must retain the above copyright notice, this list
         | 
| 9 9 | 
             
            # of conditions and the following disclaimer.
         | 
| 10 | 
            -
             | 
| 10 | 
            +
            #
         | 
| 11 11 | 
             
            # Redistributions in binary form must reproduce the above copyright notice, this
         | 
| 12 12 | 
             
            # list of conditions and the following disclaimer in the documentation and/or other
         | 
| 13 13 | 
             
            # materials provided with the distribution.
         | 
| 14 | 
            -
             | 
| 14 | 
            +
            #
         | 
| 15 15 | 
             
            # Neither the name of the copyright holder nor the names of its contributors may be
         | 
| 16 16 | 
             
            # used to endorse or promote products derived from this software without specific
         | 
| 17 17 | 
             
            # prior written permission.
         | 
| 18 | 
            -
             | 
| 19 | 
            -
            # Redistribution of this software, without modification, must refer to the software
         | 
| 20 | 
            -
            # by the same designation. Redistribution of a modified version of this software
         | 
| 21 | 
            -
            # (i) may not refer to the modified version by the same designation, or by any
         | 
| 22 | 
            -
            # confusingly similar designation, and (ii) must refer to the underlying software
         | 
| 23 | 
            -
            # originally provided by Alliance as “URBANopt”. Except to comply with the foregoing,
         | 
| 24 | 
            -
            # the term “URBANopt”, or any confusingly similar designation may not be used to
         | 
| 25 | 
            -
            # refer to any modified version of this software or any modified version of the
         | 
| 26 | 
            -
            # underlying software originally provided by Alliance without the prior written
         | 
| 27 | 
            -
            # consent of Alliance.
         | 
| 28 | 
            -
             | 
| 18 | 
            +
            #
         | 
| 29 19 | 
             
            # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
         | 
| 30 20 | 
             
            # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
         | 
| 31 21 | 
             
            # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
         |