Skip to content

Commit 0c1b718

Browse files
committed
Update check name algorithm.
Merge fan and cooling water.
1 parent 90436a6 commit 0c1b718

File tree

1 file changed

+84
-13
lines changed

1 file changed

+84
-13
lines changed

openstudiocore/src/bec/ForwardTranslator.cpp

Lines changed: 84 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -986,7 +986,7 @@ void ForwardTranslator::doACSystem(const model::Model &model, QDomElement &ACSys
986986
{
987987
std::vector<model::ModelObject> hvacs = airLoop.supplyComponents();
988988
QString listName = airLoop.name().get().c_str();
989-
if(listName.startsWith("Thai Packaged Air Conditioner"))
989+
if(listName.indexOf("Air Conditioner")>=0)
990990
{
991991
double scapacity = 0;
992992
double spower = 0;
@@ -1042,9 +1042,10 @@ void ForwardTranslator::doACSystem(const model::Model &model, QDomElement &ACSys
10421042
createTagWithText(PackagedAirCooled, "PackagedAirCooledkWth", "0");
10431043
continue;
10441044
}
1045-
else if(listName.startsWith("Thai Split Type Air"))
1045+
else if(listName.indexOf("Split Type Air")>=0)
10461046
{
1047-
for (const model::ModelObject & hvac : hvacs){
1047+
for (size_t i=0; i<hvacs.size(); i++){
1048+
model::ModelObject & hvac = hvacs.at(i);
10481049
if(isSkip(hvac)){
10491050
continue;
10501051
}
@@ -1110,18 +1111,69 @@ void ForwardTranslator::doACSystem(const model::Model &model, QDomElement &ACSys
11101111
createTagWithText(SplitType, "SplitTypekWth", "0");
11111112
break;
11121113
}
1114+
case openstudio::IddObjectType::OS_Fan_VariableVolume:
1115+
{
1116+
model::FanVariableVolume fanv = hvac.cast<model::FanVariableVolume>();
1117+
QString name = fanv.name().get().c_str();
1118+
size_t inx = i+1;
1119+
double coolcap=0.0;
1120+
while(inx < hvacs.size()){
1121+
model::ModelObject & nextItem = hvacs.at(inx);
1122+
if(isSkip(nextItem)){
1123+
inx++;
1124+
}else{
1125+
if(nextItem.iddObject().type().value() == openstudio::IddObjectType::OS_Coil_Cooling_Water){
1126+
model::CoilCoolingWater coolw = nextItem.cast<model::CoilCoolingWater>();
1127+
name = coolw.name().get().c_str();
1128+
//name = QString("%1 And %2").arg(name).arg(coolw.name().get().c_str());
1129+
coolcap = ((1.230*coolw.designAirFlowRate().get_value_or(0.0f))
1130+
*(coolw.designInletAirTemperature().get_value_or(0.0f)-coolw.designOutletAirTemperature().get_value_or(0.0f)))
1131+
+(3010*coolw.designAirFlowRate().get_value_or(0.0f)
1132+
*(coolw.designOutletAirHumidityRatio().get_value_or(0.0f)-coolw.designInletAirHumidityRatio().get_value_or(0.0f)));
1133+
i = inx;
1134+
}
1135+
else{
1136+
i = inx-1;
1137+
}
1138+
break;
1139+
}
1140+
}
1141+
1142+
QDomElement SplitType = createTagWithText(SplitTypeSystem, "SplitType");
1143+
//////////////////////////////////////////////////
1144+
if(fanv.fanEfficiency()==0.0f){
1145+
continue;
1146+
}
1147+
1148+
double maximumFlowRate = fanv.maximumFlowRate().get_value_or(1.0f);
1149+
double power = (maximumFlowRate*fanv.pressureRise())/(fanv.fanEfficiency()*1000);
1150+
1151+
createTagWithText(SplitType, "SplitTypeName", name);
1152+
createTagWithText(SplitType, "SplitTypeCoolingCapacity"
1153+
, QString::number(coolcap));
1154+
createTagWithText(SplitType, "SplitTypeCoolingCapacityUnit"
1155+
, "W");
1156+
createTagWithText(SplitType, "SplitTypePower"
1157+
, QString::number(power));
1158+
createTagWithText(SplitType, "SplitTypePowerUnit", "kW");
1159+
createTagWithText(SplitType, "SplitTypeDescription", "?");
1160+
createTagWithText(SplitType, "SplitTypeCOP", "0");
1161+
createTagWithText(SplitType, "SplitTypekWth", "0");
1162+
break;
1163+
}
11131164
}
11141165
}
11151166
continue;
11161167
}
1117-
else if(listName.startsWith("Thai Central System Loop"))
1168+
else if(listName.indexOf("Central A/C")>=0 || (listName.indexOf("Air Loop")>=0))
11181169
{
11191170
QDomElement CentralACL = createTagWithText(CentralACList, "CentralACL");
11201171
createTagWithText(CentralACL, "CentralACListName", listName);
11211172
createTagWithText(CentralACL, "CentralACListType", airLoop.iddObject().name().c_str());
11221173

11231174
int size = 0;
1124-
for (const model::ModelObject & hvac : hvacs){
1175+
for(size_t i=0;i<hvacs.size();i++){
1176+
model::ModelObject & hvac = hvacs.at(i);
11251177
if(isSkip(hvac)){
11261178
continue;
11271179
}
@@ -1219,23 +1271,42 @@ void ForwardTranslator::doACSystem(const model::Model &model, QDomElement &ACSys
12191271
}
12201272
case openstudio::IddObjectType::OS_Coil_Cooling_Water:
12211273
{
1222-
12231274
model::CoilCoolingWater coolw = hvac.cast<model::CoilCoolingWater>();
1275+
QString name = coolw.name().get().c_str();
1276+
size_t inx = i+1;
1277+
double power=0.0;
1278+
while(inx < hvacs.size()){
1279+
model::ModelObject & nextItem = hvacs.at(inx);
1280+
if(isSkip(nextItem)){
1281+
inx++;
1282+
}else{
1283+
if(nextItem.iddObject().type().value() == openstudio::IddObjectType::OS_Fan_VariableVolume){
1284+
model::FanVariableVolume fanv = nextItem.cast<model::FanVariableVolume>();
1285+
//name = QString("%1 And %2").arg(name).arg(fanv.name().get().c_str());
1286+
double maximumFlowRate = fanv.maximumFlowRate().get_value_or(1.0f);
1287+
power = (maximumFlowRate*fanv.pressureRise())/(fanv.fanEfficiency()*1000);
1288+
i = inx;
1289+
}else{
1290+
i = inx-1;
1291+
}
1292+
break;
1293+
}
1294+
}
1295+
12241296
double coolcap = ((1.230*coolw.designAirFlowRate().get_value_or(0.0f))
12251297
*(coolw.designInletAirTemperature().get_value_or(0.0f)-coolw.designOutletAirTemperature().get_value_or(0.0f)))
12261298
+(3010*coolw.designAirFlowRate().get_value_or(0.0f)
12271299
*(coolw.designOutletAirHumidityRatio().get_value_or(0.0f)-coolw.designInletAirHumidityRatio().get_value_or(0.0f)));
12281300

1229-
12301301
QDomElement CentralACD = createTagWithText(CentralACDetail, "CentralACD");
12311302
createTagWithText(CentralACD, "CentralACDetailListName", listName);
1232-
createTagWithText(CentralACD, "CentralACDetailName", coolw.name().get().c_str());
1303+
createTagWithText(CentralACD, "CentralACDetailName", name);
12331304
createTagWithText(CentralACD, "CentralACDetailEQType", "Fan Coil Unit");
12341305
createTagWithText(CentralACD, "CentralACDetailChillerType", "None");
12351306
createTagWithText(CentralACD, "CentralACDetailQuantity", "1");
12361307
createTagWithText(CentralACD, "CentralACDetailCoolingCapacity", QString::number(coolcap));
12371308
createTagWithText(CentralACD, "CentralACDetailCoolingCapacityUnit", "W");
1238-
createTagWithText(CentralACD, "CentralACDetailPower", QString::number(0.0f));
1309+
createTagWithText(CentralACD, "CentralACDetailPower", QString::number(power));
12391310
createTagWithText(CentralACD, "CentralACDetailPowerUnit", "kW");
12401311
createTagWithText(CentralACD, "CentralACDetailCOP", QString::number(0.0f));
12411312
createTagWithText(CentralACD, "CentralACDetailkWth", QString::number(0.0f));
@@ -1469,7 +1540,7 @@ void ForwardTranslator::doBuildingEnvelope(const model::Model &model, QDomElemen
14691540
zoneName = planloop.get().name().get().c_str();
14701541
}
14711542

1472-
if(zoneName.startsWith("Thai Split Type Air")){
1543+
if(zoneName.indexOf("Split Type Air")>=0){
14731544
if(airloop){
14741545
std::vector<model::ModelObject> hvacs = airloop.get().supplyComponents();
14751546
for (const model::ModelObject & hvac : hvacs){
@@ -1487,7 +1558,7 @@ void ForwardTranslator::doBuildingEnvelope(const model::Model &model, QDomElemen
14871558
}
14881559
}
14891560
}
1490-
else if(zoneName.startsWith("Thai Central System Loop")){
1561+
else if(zoneName.indexOf("Central A/C")>=0 || (zoneName.indexOf("Air Loop")>=0)){
14911562
boost::optional<model::AirLoopHVAC> airLoop = thermal.get().airLoopHVAC();
14921563
if (airLoop){
14931564
std::vector<model::ModelObject> hvacs = airLoop.get().supplyComponents();
@@ -1528,7 +1599,7 @@ void ForwardTranslator::doBuildingEnvelope(const model::Model &model, QDomElemen
15281599
}
15291600
}
15301601
}
1531-
else if(zoneName.startsWith("Thai Packaged Air Conditioner"))
1602+
else if(zoneName.indexOf("Air Conditioner")>=0)
15321603
{
15331604
QDomElement BuildingZoneDXAC
15341605
= createTagWithText(BuildingZoneDXACUnit, "BuildingZoneDXAC");
@@ -1914,7 +1985,7 @@ boost::optional<QDomElement> ForwardTranslator::translateMyModel(const openstudi
19141985
}
19151986
}
19161987

1917-
// spaceElement.appendChild(loadElement);
1988+
//spaceElement.appendChild(loadElement);
19181989
//spaceElement.appendChild(hvacElement);
19191990
buildingStoryElement.appendChild(*spaceElement);
19201991
buildingElement.appendChild(buildingStoryElement);

0 commit comments

Comments
 (0)