Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix VRF_FluidTCtrl cooling supply fan power calculation when cycling #10341

Merged
merged 59 commits into from
Aug 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
89671cc
consider cycling in VRF fan power calculation
Dec 22, 2023
5a00a65
multiply by coil runtime fraction not VRF RTF
Jan 3, 2024
9a0cc0b
add fan heat gain adjustment
Jan 24, 2024
a033890
Merge remote-tracking branch 'origin/develop' into vrfCoolingFan
Jan 31, 2024
8901906
Consider run time fraction in OU fan power
Feb 2, 2024
7c1a008
clang-format
Feb 2, 2024
aef23cb
Merge remote-tracking branch 'origin/develop' into vrfCoolingFan
Feb 2, 2024
5fcc817
Add check of fan index before accessing dataFans->Fan(.)
Feb 3, 2024
026be04
fix unit test uninitialized cycling ratio
Feb 3, 2024
b9c6bff
clang-format
Feb 3, 2024
7d79eac
Move cycling ratio to inside compressor spd calc for heating
Feb 26, 2024
aee8c4a
Revert "Move cycling ratio to inside compressor spd calc for heating"
Feb 28, 2024
ce65545
Merge remote-tracking branch 'origin/develop' into vrfCoolingFan
Feb 28, 2024
9734922
move fan mult RTF to after OU update, as other branch updates RTF
Feb 29, 2024
e00e86a
Merge remote-tracking branch 'origin/develop' into vrfCoolingFan
Mar 6, 2024
740bd92
add test for OU fan power change
Mar 6, 2024
902baea
clang-format
Mar 8, 2024
c4c3067
Use OnOffFanPartLoadFraction to control fan power
May 11, 2024
49b10f0
Merge remote-tracking branch 'origin/develop' into vrfCoolingFan
May 13, 2024
154343d
resolve merge conflict
May 13, 2024
21afabe
Merge remote-tracking branch 'origin/develop' into vrfCoolingFan
May 22, 2024
cf886aa
move fan power mod out of SimulateVAV
May 22, 2024
aef9b67
resolve unit test by init compressor cycling ratio
May 22, 2024
d2183c3
Merge remote-tracking branch 'origin/develop' into vrfCoolingFan
May 29, 2024
26414a6
resolve build error from merge
May 30, 2024
9de83a1
use optional arg in SimulateVAV to control for cycling
Jun 12, 2024
5bb21f0
fix unit and integration tests from optional arg addition
Jun 13, 2024
50e57b7
Merge remote-tracking branch 'origin/develop' into vrfCoolingFan
Jun 13, 2024
d21a85c
Merge remote-tracking branch 'origin/develop' into vrfCoolingFan
Jun 17, 2024
1a07c51
change varname to fanRunTimeFraction, add comments to this arg
Jul 8, 2024
f7942a0
Merge remote-tracking branch 'origin/develop' into vrfCoolingFan
Jul 8, 2024
733ec7e
use SystemModel for fan object in VRFFluidTCtrl TU
Jul 16, 2024
6319656
relax curve output range and fix min x Fan:SystemModel
Jul 16, 2024
8ec965f
Merge remote-tracking branch 'origin/develop' into vrfCoolingFan
Jul 16, 2024
79a0810
transition code Fan:VariableVolume to Fan:SystemModel
Jul 17, 2024
289d5cc
update idd and doc to remove vav fan
Jul 17, 2024
6e79143
add transition to delete old VAV fan objects
Jul 18, 2024
f0a18f4
Revert "change varname to fanRunTimeFraction, add comments to this arg"
Jul 18, 2024
b5fa9ea
Revert "fix unit and integration tests from optional arg addition"
Jul 18, 2024
4c834c7
Revert "use optional arg in SimulateVAV to control for cycling"
Jul 18, 2024
49e82a0
use old fan name in transition after VAV fans are deleted
Jul 18, 2024
6e5166a
remove unused inititialization
Jul 18, 2024
cf3b3c5
transition testfiles to use Fan:SystemModel
Jul 22, 2024
7dd6720
change all-upper case to pascal-case
Jul 23, 2024
19c4aae
fix unit test Fan:VariableVolume to Fan:SystemModel transition
Jul 24, 2024
ba1f3cf
Merge remote-tracking branch 'origin/develop' into vrfCoolingFan
Jul 25, 2024
a19c990
change ElecPowerMinFlowRateFrac calc, autosize DesignElecPower
Jul 31, 2024
dc5c342
change READ to ProcessNumber
Aug 2, 2024
d1c3cd7
update err message and call ShowWarningError
Aug 2, 2024
3c6c581
use 0.0 as min x value of fan performance curve
Aug 2, 2024
698ddbf
min value of system fan curve in idf change to 0
Aug 5, 2024
4417664
Merge remote-tracking branch 'origin/develop' into vrfCoolingFan
Aug 5, 2024
261699a
remove OU fan adjustment and put it in a different PR
Aug 7, 2024
de9baf3
change OnOffFanPartLoadFraction back to use PLF
Aug 12, 2024
e03dea0
fix unit test related to OU fan, as it's not fixed here
Aug 13, 2024
37471e1
pass in OnOffFanPartLoadFraction of constant 1
Aug 13, 2024
bcf4118
fix err message blow->draw through
Aug 14, 2024
fabbc97
Merge remote-tracking branch 'origin/develop' into vrfCoolingFan
Aug 16, 2024
49fd825
clang-format
Aug 16, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4060,7 +4060,7 @@ \subsubsection{Inputs}\label{inputs-14-018}

\paragraph{Field: Supply Air Fan Object Type}\label{field-supply-air-fan-object-type-8}

This choice field contains the identifying type of supply air fan specified for the furnace. Fan type must be \textit{\hyperref[fanonoff]{Fan:OnOff}}, \textit{\hyperref[fanconstantvolume]{Fan:ConstantVolume}}, \textit{\hyperref[fansystemmodel]{Fan:SystemModel}} or \textit{\hyperref[fanvariablevolume]{Fan:VariableVolume}}. The Supply Air Fan Object Type must be \hyperref[fansystemmodel]{Fan:SystemModel}, \hyperref[fanonoff]{Fan:OnOff}, or \hyperref[fanconstantvolume]{Fan:ConstantVolume} if \hyperref[airconditionervariablerefrigerantflow]{AirConditioner:VariableRefrigerantFlow} is used to model the VRF outdoor unit. The Supply Air Fan Object Type must be \hyperref[fansystemmodel]{Fan:SystemModel} or \hyperref[fanvariablevolume]{Fan:VariableVolume} if AirConditioner:VariableRefrigerantFlow:\-FluidTemperatureControl or AirConditioner:VariableRefrigerantFlow:\-FluidTemperatureControl:HR is used to model the VRF outdoor unit.
This choice field contains the identifying type of supply air fan specified for the furnace. Fan type must be \textit{\hyperref[fanonoff]{Fan:OnOff}}, \textit{\hyperref[fanconstantvolume]{Fan:ConstantVolume}}, \textit{\hyperref[fansystemmodel]{Fan:SystemModel}}. The Supply Air Fan Object Type must be \hyperref[fansystemmodel]{Fan:SystemModel}, \hyperref[fanonoff]{Fan:OnOff}, or \hyperref[fanconstantvolume]{Fan:ConstantVolume} if \hyperref[airconditionervariablerefrigerantflow]{AirConditioner:VariableRefrigerantFlow} is used to model the VRF outdoor unit. The Supply Air Fan Object Type must be \hyperref[fansystemmodel]{Fan:SystemModel} if AirConditioner:VariableRefrigerantFlow:\-FluidTemperatureControl or AirConditioner:VariableRefrigerantFlow:\-FluidTemperatureControl:HR is used to model the VRF outdoor unit.

\hyperref[fanconstantvolume]{Fan:ConstantVolume} is used when the Supply Air Fan Operating Mode Schedule values are never 0 and the fan operates continuously. \hyperref[fanonoff]{Fan:OnOff} is used when the fan cycles on and off with the cooling or heating coil (i.e.~Supply Air Fan Operating Mode Schedule values are at times 0). The \hyperref[fansystemmodel]{Fan:SystemModel} may be used to model either of these fan operating characteristics.

Expand Down
3 changes: 1 addition & 2 deletions idd/Energy+.idd.in
Original file line number Diff line number Diff line change
Expand Up @@ -42466,11 +42466,10 @@ ZoneHVAC:TerminalUnit:VariableRefrigerantFlow,
\key Fan:SystemModel
\key Fan:OnOff
\key Fan:ConstantVolume
\key Fan:VariableVolume
\default Fan:ConstantVolume
\note Supply Air Fan Object Type must be Fan:SystemModel, Fan:OnOff, or Fan:ConstantVolume
\note if AirConditioner:VariableRefrigerantFlow is used to model VRF outdoor unit
\note Supply Air Fan Object Type must be Fan:SystemModel or Fan:VariableVolume if
\note Supply Air Fan Object Type must be Fan:SystemModel if
\note AirConditioner:VariableRefrigerantFlow:FluidTemperatureControl or
\note AirConditioner:VariableRefrigerantFlow:FluidTemperatureControl:HR
\note is used to model VRF outdoor unit
Expand Down
8 changes: 6 additions & 2 deletions src/EnergyPlus/HVACVariableRefrigerantFlow.cc
Original file line number Diff line number Diff line change
Expand Up @@ -5494,7 +5494,7 @@ void CheckVRFTUNodeConnections(EnergyPlusData &state, int const VRFTUNum, bool &
if (fanOutletNode != VRFTUOutletNodeNum) {
ShowSevereError(state, fmt::format("{}=\"{}\",", cTerminalUnitType, cTUName));
ShowContinueError(state,
"... For blow through fan and no supplemental heating coil the fan outlet node name must "
"... For draw through fan and no supplemental heating coil the fan outlet node name must "
"match the terminal unit outlet node name.");
if (fanOutletNode > 0 && VRFTUOutletNodeNum > 0) {
ShowContinueError(state, format("... Fan outlet node name = {}.", nodeID(fanOutletNode)));
Expand Down Expand Up @@ -12841,12 +12841,16 @@ void VRFTerminalUnitEquipment::CalcVRF_FluidTCtrl(EnergyPlusData &state,
state.dataHVACVarRefFlow->LoopDXHeatCoilRTF = 0.0;
}

Real64 OnOffFanPartLoadFraction = 1.0;
if (state.dataHVACVarRefFlow->VRFTU(VRFTUNum).fanOp == HVAC::FanOp::Cycling) {
OnOffFanPartLoadFraction = state.dataHVACGlobal->OnOffFanPartLoadFraction;
}
// if draw through, simulate coils then fan
if (this->fanPlace == HVAC::FanPlace::DrawThru) {
auto *fan = state.dataFans->fans(state.dataHVACVarRefFlow->VRFTU(VRFTUNum).FanIndex);
if (state.dataHVACVarRefFlow->VRFTU(VRFTUNum).fanType == HVAC::FanType::SystemModel) {
if (OnOffAirFlowRatio > 0.0) {
fan->simulate(state, FirstHVACIteration, _, _);
fan->simulate(state, FirstHVACIteration, _, _, _, fan->inletAirMassFlowRate, OnOffFanPartLoadFraction, 0, 0, _);
} else {
fan->simulate(state, FirstHVACIteration, _, _, PartLoadRatio);
}
Expand Down
183 changes: 183 additions & 0 deletions src/Transition/CreateNewIDFUsingRulesV24_2_0.f90
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,42 @@ SUBROUTINE CreateNewIDFUsingRules(EndOfFile,DiffOnly,InLfn,AskForInput,InputFile
! I N S E R T L O C A L V A R I A B L E S H E R E !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

! used in transition code for changing fan in ZoneHVAC:TerminalUnit:VariableRefrigerantFlow from VariableVolume to SystemModel
LOGICAL :: isVariableVolume
REAL :: fanTotalEff
REAL :: pressureRise
REAL :: maxAirFlow
REAL :: minAirFlowFrac
REAL :: fanPowerMinAirFlow
INTEGER :: NumFanVariableVolume
INTEGER :: NumOldFanVO = 1
INTEGER :: NumVRFTU = 1
INTEGER :: Num3 = 1
INTEGER :: VRFTU_i = 1
CHARACTER(len=MaxNameLength) :: sysFanName
CHARACTER(len=MaxNameLength), ALLOCATABLE, DIMENSION(:) :: vavFanNameToDelete

TYPE FanVOTransitionInfo
CHARACTER(len=MaxNameLength) :: oldFanName
CHARACTER(len=MaxNameLength) :: availSchedule
CHARACTER(len=MaxNameLength) :: fanTotalEff_str
CHARACTER(len=MaxNameLength) :: pressureRise_str
CHARACTER(len=MaxNameLength) :: maxAirFlow_str
CHARACTER(len=MaxNameLength) :: minFlowInputMethod
CHARACTER(len=MaxNameLength) :: minAirFlowFrac_str
CHARACTER(len=MaxNameLength) :: fanPowerMinAirFlow_str
CHARACTER(len=MaxNameLength) :: motorEfficiency
CHARACTER(len=MaxNameLength) :: motorInAirStreamFrac
CHARACTER(len=MaxNameLength) :: coeff1 !- Coefficient1 Constant
CHARACTER(len=MaxNameLength) :: coeff2 !- Coefficient2 x
CHARACTER(len=MaxNameLength) :: coeff3 !- Coefficient3 x**2
CHARACTER(len=MaxNameLength) :: coeff4 !- Coefficient4 x**3
CHARACTER(len=MaxNameLength) :: coeff5 !- Coefficient5 x**4
CHARACTER(len=MaxNameLength) :: inletAirNodeName
CHARACTER(len=MaxNameLength) :: outletAirNodeName
CHARACTER(len=MaxNameLength) :: endUseSubCat
END TYPE FanVOTransitionInfo
TYPE(FanVOTransitionInfo), ALLOCATABLE, DIMENSION(:) :: OldFanVO

INTEGER :: TotSPMs = 0
INTEGER :: spmNum = 0
Expand Down Expand Up @@ -317,6 +353,55 @@ SUBROUTINE CreateNewIDFUsingRules(EndOfFile,DiffOnly,InLfn,AskForInput,InputFile
ENDDO
ENDDO

! collect old VAV fans to be deleted
NumVRFTU = GetNumObjectsFound('ZONEHVAC:TERMINALUNIT:VARIABLEREFRIGERANTFLOW')
IF(ALLOCATED(vavFanNameToDelete)) DEALLOCATE(vavFanNameToDelete)
ALLOCATE(vavFanNameToDelete(NumVRFTU))
DO Num = 1, NumIDFRecords
SELECT CASE (MakeUPPERCase(IDFRecords(Num)%Name))
CASE('ZONEHVAC:TERMINALUNIT:VARIABLEREFRIGERANTFLOW')
IF (SameString(TRIM(IDFRecords(Num)%Alphas(7)), 'FAN:VARIABLEVOLUME')) THEN
vavFanNameToDelete(VRFTU_i) =TRIM(IDFRecords(Num)%Alphas(8))
ELSE
vavFanNameToDelete(VRFTU_i) = ''
ENDIF
VRFTU_i = VRFTU_i + 1
END SELECT
END DO

! accumulate info on VAV fans
NumFanVariableVolume = GetNumObjectsFound('FAN:VARIABLEVOLUME')
IF (ALLOCATED(OldFanVO)) DEALLOCATE(OldFanVO)
ALLOCATE(OldFanVO(NumFanVariableVolume))
NumOldFanVO = 1
DO Num = 1, NumIDFRecords
SELECT CASE (MakeUPPERCase(IDFRecords(Num)%Name))
CASE ('FAN:VARIABLEVOLUME')
OldFanVO(NumOldFanVO)%oldFanName = TRIM(IDFRecords(Num)%Alphas(1))
OldFanVO(NumOldFanVO)%availSchedule = TRIM(IDFRecords(Num)%Alphas(2))
OldFanVO(NumOldFanVO)%fanTotalEff_str = TRIM(IDFRecords(Num)%Numbers(1))
OldFanVO(NumOldFanVO)%pressureRise_str = TRIM(IDFRecords(Num)%Numbers(2))
OldFanVO(NumOldFanVO)%maxAirFlow_str = TRIM(IDFRecords(Num)%Numbers(3))
OldFanVO(NumOldFanVO)%minFlowInputMethod = TRIM(IDFRecords(Num)%Alphas(3))
OldFanVO(NumOldFanVO)%minAirFlowFrac_str = TRIM(IDFRecords(Num)%Numbers(4))
OldFanVO(NumOldFanVO)%fanPowerMinAirFlow_str = TRIM(IDFRecords(Num)%Numbers(5))
OldFanVO(NumOldFanVO)%motorEfficiency = TRIM(IDFRecords(Num)%Numbers(6))
OldFanVO(NumOldFanVO)%motorInAirStreamFrac = TRIM(IDFRecords(Num)%Numbers(7))
OldFanVO(NumOldFanVO)%coeff1 = TRIM(IDFRecords(Num)%Numbers(8)) !- Coefficient1 Constant
OldFanVO(NumOldFanVO)%coeff2 = TRIM(IDFRecords(Num)%Numbers(9)) !- Coefficient2 x
OldFanVO(NumOldFanVO)%coeff3 = TRIM(IDFRecords(Num)%Numbers(10)) !- Coefficient3 x**2
OldFanVO(NumOldFanVO)%coeff4 = TRIM(IDFRecords(Num)%Numbers(11)) !- Coefficient4 x**3
OldFanVO(NumOldFanVO)%coeff5 = TRIM(IDFRecords(Num)%Numbers(12)) !- Coefficient5 x**4
OldFanVO(NumOldFanVO)%inletAirNodeName = TRIM(IDFRecords(Num)%Alphas(4))
OldFanVO(NumOldFanVO)%outletAirNodeName = TRIM(IDFRecords(Num)%Alphas(5))
OldFanVO(NumOldFanVO)%endUseSubCat = TRIM(IDFRecords(Num)%Alphas(6))
IF (FindItemInList(TRIM(IDFRecords(Num)%Alphas(1)), vavFanNameToDelete, NumVRFTU) /= 0) THEN
DeleteThisRecord(Num) = .TRUE.
ENDIF
NumOldFanVO = NumOldFanVO + 1
END SELECT
END DO

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! P R O C E S S I N G !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Expand Down Expand Up @@ -485,6 +570,104 @@ SUBROUTINE CreateNewIDFUsingRules(EndOfFile,DiffOnly,InLfn,AskForInput,InputFile

! If your original object starts with Z, insert the rules here

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
CASE('ZONEHVAC:TERMINALUNIT:VARIABLEREFRIGERANTFLOW')
isVariableVolume = .FALSE.
CALL GetNewObjectDefInIDD(ObjectName, NwNumArgs, NwAorN, NwReqFld, NwObjMinFlds, NwFldNames, NwFldDefaults, NwFldUnits)
nodiff = .false.
OutArgs(1:13) = InArgs(1:13)
IF (SameString(InArgs(14), 'FAN:VARIABLEVOLUME')) THEN
isVariableVolume = .TRUE.
OutArgs(14) = 'Fan:SystemModel'
OutArgs(15) = TRIM(InArgs(15))
sysFanName = TRIM(InArgs(15))
ELSE
OutArgs(14:15) = InArgs(14:15)
ENDIF
OutArgs(16:CurArgs) = InArgs(16:CurArgs)
CALL WriteOutIDFLines(DifLfn, 'ZoneHVAC:TerminalUnit:VariableRefrigerantFlow', CurArgs, OutArgs, NwFldNames, NwFldUnits)

IF (isVariableVolume) THEN
! create fan system model object
ObjectName = 'Fan:SystemModel'
DO Num3 = 1, NumFanVariableVolume
IF (SameString(OldFanVO(Num3)%oldFanName, sysFanName)) THEN
CALL GetNewObjectDefInIDD(ObjectName, NwNumArgs, NwAorN, NwReqFld, NwObjMinFlds, NwFldNames, NwFldDefaults, NwFldUnits)
OutArgs(1) = TRIM(sysFanName)
OutArgs(2) = OldFanVO(Num3)%availSchedule
OutArgs(3) = OldFanVO(Num3)%inletAirNodeName
OutArgs(4) = OldFanVO(Num3)%outletAirNodeName
OutArgs(5) = OldFanVO(Num3)%maxAirFlow_str
OutArgs(6) = 'Continuous' !- Speed Control Method
IF (SameString(OldFanVO(Num3)%minFlowInputMethod, "FixedFlowRate")) THEN
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This field in Fan:SystemModel is "Electric Power Minimum Flow Rate Fraction", so
if the old fan is FixedFlowRate then the new field should be old fanPowerMinAirFlow_str \ maxAirFlow_strIfmaxAirFlow_stris autosize, andfanPowerMinAirFlow_str` is > 0, then throw a warning and set this field to 0

if the old fan is Fraction, then this field = old fan minAirFlowFrac_str.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

make sense. I will change it to this calculation logic

IF (.NOT. SameString(OldFanVO(Num3)%maxAirFlow_str, "AUTOSIZE")) THEN
fanPowerMinAirFlow = ProcessNumber(OldFanVO(Num3)%fanPowerMinAirFlow_str, ErrFlag)
IF (ErrFlag) THEN
CALL ShowSevereError('Invalid Number, FAN:VARIABLEVOLUME field 8, Fan Power Minimum Air Flow Rate, Name=' // TRIM(OutArgs(1)), Auditf)
END IF
maxAirFlow = ProcessNumber(OldFanVO(Num3)%maxAirFlow_str, ErrFlag)
IF (ErrFlag) THEN
CALL ShowSevereError('Invalid Number, FAN:VARIABLEVOLUME field 5, Maximum Flow Rate, Name=' // TRIM(OutArgs(1)), Auditf)
END IF
WRITE(OutArgs(7), '(F15.5)') (fanPowerMinAirFlow / maxAirFlow)
ELSE ! maxAirFlow_stris autosize
fanPowerMinAirFlow = ProcessNumber(OldFanVO(Num3)%fanPowerMinAirFlow_str, ErrFlag)
IF (ErrFlag) THEN
CALL ShowSevereError('Invalid Number, FAN:VARIABLEVOLUME field 8, Fan Power Minimum Air Flow Rate, Name=' // TRIM(OutArgs(1)), Auditf)
END IF
IF (.NOT. fanPowerMinAirFlow == 0) THEN ! don't know how to do division with autosize
CALL writePreprocessorObject(DifLfn, PrognameConversion, 'Warning', &
'Cannot calculate Electric Power Minimum Flow Rate Fraction for Fan:SystemModel=' // sysFanName // &
' when old Fan:VariableVolume Maximum Flow Rate is autosize and Fan Power Minimum Air Flow Rate is non-zero. ' // &
'Electric Power Minimum Flow Rate Fraction is set to zero. ' // &
'Manually size the Maximum Flow Rate if Electric Power Minimum Flow Rate Fraction should not be zero.')
CALL ShowWarningError('Cannot calculate Electric Power Minimum Flow Rate Fraction for Fan:SystemModel=' // sysFanName // &
' when old Fan:VariableVolume Maximum Flow Rate is autosize and Fan Power Minimum Air Flow Rate is non-zero. ' // &
'Electric Power Minimum Flow Rate Fraction is set to zero. ' // &
'Manually size the Maximum Flow Rate if Electric Power Minimum Flow Rate Fraction should not be zero.', Auditf)
END IF
OutArgs(7) = '0.0'
ENDIF
ELSE ! input method is "Fraction"
OutArgs(7) = OldFanVO(Num3)%minAirFlowFrac_str
ENDIF
OutArgs(8) = OldFanVO(Num3)%pressureRise_str !- Design Pressure Rise {Pa}
OutArgs(9) = OldFanVO(Num3)%motorEfficiency !- Motor Efficiency
OutArgs(10) = OldFanVO(Num3)%motorInAirStreamFrac !- Motor In Air Stream Fraction
OutArgs(11) = 'autosize'
OutArgs(12) = 'TotalEfficiencyAndPressure' ! chose this becuase power per flow or per pressure are unknown
OutArgs(13) = '' !- Electric Power Per Unit Flow Rate {W/(m3/s)}
OutArgs(14) = '' !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)}
OutArgs(15) = OldFanVO(Num3)%fanTotalEff_str !- Fan Total Efficiency
OutArgs(16) = TRIM(sysFanName) // '_curve' !- Electric Power Function of Flow Fraction Curve Name
OutArgs(17) = ''
OutArgs(18) = ''
OutArgs(19) = ''
OutArgs(20) = ''
OutArgs(21) = OldFanVO(Num3)%endUseSubCat !- End-Use Subcategory
CurArgs = 21 !- Design Electric Power Consumption {W}
CALL WriteOutIDFLines(DifLfn, ObjectName, CurArgs, OutArgs, NwFldNames, NwFldUnits)

! create curve object
ObjectName = 'Curve:Quartic'
CALL GetNewObjectDefInIDD(ObjectName, NwNumArgs, NwAorN, NwReqFld, NwObjMinFlds, NwFldNames, NwFldDefaults, NwFldUnits)
OutArgs(1) = TRIM(sysFanName) // '_curve'
OutArgs(2) = OldFanVO(Num3)%coeff1 !- Coefficient1 Constant
OutArgs(3) = OldFanVO(Num3)%coeff2 !- Coefficient2 x
OutArgs(4) = OldFanVO(Num3)%coeff3 !- Coefficient3 x**2
OutArgs(5) = OldFanVO(Num3)%coeff4 !- Coefficient4 x**3
OutArgs(6) = OldFanVO(Num3)%coeff5 !- Coefficient5 x**4
OutArgs(7) = '0.0' !- Minimum Value of x
OutArgs(8) = '1.0' !- Maximum Value of x
OutArgs(9) = '0.0' !- Minimum Curve Output
OutArgs(10) = '5.0' !- Maximum Curve Output
OutArgs(11) = 'Dimensionless' !- Input Unit Type for X
OutArgs(12) = 'Dimensionless' !- Output Unit Type
CurArgs = 12
ENDIF
ENDDO
ENDIF

Copy link
Contributor

@rraustad rraustad Jul 17, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should the VAV fan comments be removed from the idd and maybe the docs? Also, should the old fan be deleted during the transition?

ZoneHVAC:TerminalUnit:VariableRefrigerantFlow,
 A7 ,  \field Supply Air Fan Object Type
    \type choice
    \key Fan:SystemModel
    \key Fan:OnOff
    \key Fan:ConstantVolume
    \key Fan:VariableVolume
    \default Fan:ConstantVolume
    \note Supply Air Fan Object Type must be Fan:SystemModel, Fan:OnOff, or Fan:ConstantVolume
    \note if AirConditioner:VariableRefrigerantFlow is used to model VRF outdoor unit
    \note Supply Air Fan Object Type must be Fan:SystemModel or Fan:VariableVolume if
    \note AirConditioner:VariableRefrigerantFlow:FluidTemperatureControl or
    \note AirConditioner:VariableRefrigerantFlow:FluidTemperatureControl:HR
    \note is used to model VRF outdoor unit

Copy link
Contributor

@mjwitte mjwitte Jul 17, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should the VAV fan comments be removed from the idd and maybe the docs? Also, should the old fan be deleted during the transition?

Yes and Yes.

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Changes for report variables, meters, tables -- update names !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Expand Down
8 changes: 8 additions & 0 deletions src/Transition/InputRulesFiles/Rules24-1-0-to-24-2-0.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,3 +73,11 @@ There are three new optional heat recovery fields at the end which transition wi
# Object Change: ObjectStartsWithY

# Object Change: ObjectStartsWithZ
## "ZoneHVAC:TerminalUnit:VariableRefrigerantFlow"
If field "Supply Air Fan Object Type" (A7, the 14th field) in
"ZoneHVAC:TerminalUnit:VariableRefrigerantFlow" is "Fan:VariableVolume", it
needs to be changed to "Fan:SystemModel". A "Fan:SystemModel" object need to be
created based on the former "Fan:VariableVolume" object. A fan power curve will
be created as well that holds the "Fan Power Coefficient i" in Fan:VariableVolume.

See PR https://github.com/NREL/EnergyPlus/pull/10341
Loading
Loading