@@ -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