diff --git a/measures/envelope_material_property_phase_change/README.md b/measures/envelope_material_property_phase_change/README.md new file mode 100644 index 0000000..28b57bc --- /dev/null +++ b/measures/envelope_material_property_phase_change/README.md @@ -0,0 +1,32 @@ + + +###### (Automatically generated documentation) + +# Material Property Phase Change + +## Description +Adds a MaterialProperty:PhaseChange object to the model that references the interior layer of the selected Construction. + +## Modeler Description +Gets the interior layer name of the selected Construction object from the number of fields and sets the MaterialProperty:PhaseChange Name field to reference it. + +## Measure Type +EnergyPlusMeasure + +## Taxonomy + + +## Arguments + + +### Construction Name +Phase Change Material will be added to interior material +**Name:** construction_name, +**Type:** Choice, +**Units:** , +**Required:** true, +**Model Dependent:** false + + + + diff --git a/measures/envelope_material_property_phase_change/README.md.erb b/measures/envelope_material_property_phase_change/README.md.erb new file mode 100644 index 0000000..4deb9ae --- /dev/null +++ b/measures/envelope_material_property_phase_change/README.md.erb @@ -0,0 +1,42 @@ +<%#= README.md.erb is used to auto-generate README.md. %> +<%#= To manually maintain README.md throw away README.md.erb and manually edit README.md %> +###### (Automatically generated documentation) + +# <%= name %> + +## Description +<%= description %> + +## Modeler Description +<%= modelerDescription %> + +## Measure Type +<%= measureType %> + +## Taxonomy +<%= taxonomy %> + +## Arguments + +<% arguments.each do |argument| %> +### <%= argument[:display_name] %> +<%= argument[:description] %> +**Name:** <%= argument[:name] %>, +**Type:** <%= argument[:type] %>, +**Units:** <%= argument[:units] %>, +**Required:** <%= argument[:required] %>, +**Model Dependent:** <%= argument[:model_dependent] %> +<% end %> + +<% if arguments.size == 0 %> +<%= "This measure does not have any user arguments" %> +<% end %> + +<% if outputs.size > 0 %> +## Outputs +<% output_names = [] %> +<% outputs.each do |output| %> +<% output_names << output[:display_name] %> +<% end %> +<%= output_names.join(", ") %> +<% end %> \ No newline at end of file diff --git a/measures/envelope_material_property_phase_change/measure.xml b/measures/envelope_material_property_phase_change/measure.xml new file mode 100644 index 0000000..b2134de --- /dev/null +++ b/measures/envelope_material_property_phase_change/measure.xml @@ -0,0 +1,88 @@ + + + 3.0 + envelope_material_property_phase_change + 89c98dc2-c2d7-4014-a411-0103c899546b + 58465349-4463-4926-8d1e-68a6b9328c49 + 20200808T211309Z + BB067920 + EnvelopeMaterialPropertyPhaseChange + Material Property Phase Change + Adds a MaterialProperty:PhaseChange object to the model that references the interior layer of the selected Construction. + Gets the interior layer name of the selected Construction object from the number of fields and sets the MaterialProperty:PhaseChange Name field to reference it. + + + construction_name + Construction Name + Phase Change Material will be added to interior material + Choice + true + false + + + + + + Envelope.Opaque + + + + Measure Type + EnergyPlusMeasure + string + + + Intended Software Tool + OpenStudio Application + string + + + Intended Software Tool + Parametric Analysis Tool + string + + + + + LICENSE.md + md + license + CD7F5672 + + + README.md.erb + erb + readmeerb + 703C9964 + + + .gitkeep + gitkeep + doc + 00000000 + + + envelope_material_property_phase_change_test.rb + rb + test + FE0599E9 + + + + OpenStudio + 3.0.1 + 3.0.1 + + measure.rb + rb + script + 15AAD156 + + + README.md + md + readme + F4CD0FC5 + + + diff --git a/measures/envelope_material_property_phase_change/tests/envelope_material_property_phase_change_test.rb b/measures/envelope_material_property_phase_change/tests/envelope_material_property_phase_change_test.rb new file mode 100644 index 0000000..582041c --- /dev/null +++ b/measures/envelope_material_property_phase_change/tests/envelope_material_property_phase_change_test.rb @@ -0,0 +1,100 @@ +# insert your copyright here + +require 'openstudio' +require 'openstudio/measure/ShowRunnerOutput' +require 'minitest/autorun' +require_relative '../measure.rb' +require 'fileutils' + +class EnvelopeMaterialPropertyPhaseChangeTest < Minitest::Test + # def setup + # end + + # def teardown + + def test_number_of_arguments_and_argument_names + # create an instance of the measure + measure = EnvelopeMaterialPropertyPhaseChange.new + + # make an empty workspace + workspace = OpenStudio::Workspace.new('Draft'.to_StrictnessLevel, 'EnergyPlus'.to_IddFileType) + + # get arguments and test that they are what we are expecting + arguments = measure.arguments(workspace) + assert_equal(1, arguments.size) + assert_equal('zone_name', arguments[0].name) + end + + def test_bad_argument_values + # create an instance of the measure + measure = EnvelopeMaterialPropertyPhaseChange.new + + # create runner with empty OSW + osw = OpenStudio::WorkflowJSON.new + runner = OpenStudio::Measure::OSRunner.new(osw) + + # make an empty workspace + workspace = OpenStudio::Workspace.new('Draft'.to_StrictnessLevel, 'EnergyPlus'.to_IddFileType) + + # check that there are no thermal zones + assert_equal(0, workspace.getObjectsByType('Zone'.to_IddObjectType).size) + + # get arguments + arguments = measure.arguments(workspace) + argument_map = OpenStudio::Measure.convertOSArgumentVectorToMap(arguments) + + # set argument values to bad value + zone_name = arguments[0].clone + assert(zone_name.setValue('')) + argument_map['zone_name'] = zone_name + + # run the measure + measure.run(workspace, runner, argument_map) + result = runner.result + assert_equal('Fail', result.value.valueName) + + # check that there are still no thermal zones + assert_equal(0, workspace.getObjectsByType('Zone'.to_IddObjectType).size) + end + + def test_good_argument_values + # create an instance of the measure + measure = EnvelopeMaterialPropertyPhaseChange.new + + # create runner with empty OSW + osw = OpenStudio::WorkflowJSON.new + runner = OpenStudio::Measure::OSRunner.new(osw) + + # make an empty workspace + workspace = OpenStudio::Workspace.new('Draft'.to_StrictnessLevel, 'EnergyPlus'.to_IddFileType) + + # check that there are no thermal zones + assert_equal(0, workspace.getObjectsByType('Zone'.to_IddObjectType).size) + + # get arguments + arguments = measure.arguments(workspace) + argument_map = OpenStudio::Measure.convertOSArgumentVectorToMap(arguments) + + # set argument values to good values + zone_name = arguments[0].clone + assert(zone_name.setValue('New Zone')) + argument_map['zone_name'] = zone_name + + # run the measure + measure.run(workspace, runner, argument_map) + result = runner.result + assert_equal('Success', result.value.valueName) + + # check that there is now 1 thermal zones + assert_equal(1, workspace.getObjectsByType('Zone'.to_IddObjectType).size) + + # check that zone is properly named + zone = workspace.getObjectsByType('Zone'.to_IddObjectType)[0] + assert(!zone.getString(0).empty?) + assert_equal('New Zone', zone.getString(0).get) + + # save the workspace to output directory + output_file_path = OpenStudio::Path.new(File.dirname(__FILE__) + '/output/test_output.idf') + workspace.save(output_file_path, true) + end +end