@@ -2101,6 +2101,17 @@ PRI::PRI( basAnc* b, TI i, SI noZ /*=0*/)
21012101// called from basAnc::reAl() and this c'tor, Copy()
21022102{ x.xs_Init ( this );
21032103} // PRI::FixUp
2104+ // -----------------------------------------------------------------------------
2105+ RC PRI::pr_Ckf (
2106+ int options) // 1
2107+ {
2108+ RC rc = RCOK;
2109+ FixUp ();
2110+
2111+ return rc;
2112+ } // PRI::pr_Ckf
2113+ // /////////////////////////////////////////////////////////////////////////////
2114+
21042115// =============================================================================
21052116XSRAT::XSRAT ( basAnc* b, TI i, SI noZ /* =0*/ )
21062117 : record( b, i, noZ)
@@ -2133,7 +2144,7 @@ XSRAT::XSRAT( basAnc* b, TI i, SI noZ /*=0*/)
21332144 rc |= errCrit ( WRN, " XSRAT::Validate: Bad XSURF pParent" );
21342145 }
21352146 if (rc == RCOK)
2136- RC rc = x.xs_Validate ( options);
2147+ rc = x.xs_Validate ( options);
21372148 return rc;
21382149} // XSRAT::Validate
21392150// =============================================================================
@@ -2239,8 +2250,6 @@ RC XSURF::xs_Validate(
22392250 { if (xs_msi)
22402251 rc |= errCrit ( WRN, " XSURF '%s': Unexpected mass %d for non-CTMXWALL" , xs_Name (), xs_msi);
22412252 }
2242-
2243-
22442253 }
22452254 // ASHWAT back pointer should always be good if present
22462255 for (int iFA=0 ; iFA<2 ; iFA++)
@@ -2407,8 +2416,10 @@ void XSURF::xs_SetRunConstants()
24072416 }
24082417#endif
24092418
2410- xs_sbcI.sb_SetRunConstants ( dbPrint);
2411- xs_sbcO.sb_SetRunConstants ( dbPrint);
2419+ if (!xs_IsPerim ())
2420+ { xs_sbcI.sb_SetRunConstants (dbPrint);
2421+ xs_sbcO.sb_SetRunConstants (dbPrint);
2422+ }
24122423
24132424 xs_DeleteFENAW (); // insurance
24142425 if (xs_IsASHWAT ())
@@ -2661,15 +2672,16 @@ void SBC::sb_SetCoeffs( // set convective and radiant coefficients
26612672
26622673// NOTE: Some values pre-set in sb_SetRunConstants for some cases.
26632674// Do not add general inits here w/o review
2664-
2665- if (sb_zi) // if exposed to zone
2675+ if (sb_pXS->xs_IsPerim ())
2676+ sb_qrAbs = 0 .;
2677+ else if (sb_zi) // if exposed to zone
26662678 { // boundary is adjacent to zone
26672679 // sb_txa, sb_txr set at end of prior step
2668- if (sb_pXS->xs_ty != CTKIVA )
2680+ if (! sb_pXS->xs_IsKiva () )
26692681 {
26702682 sb_HCZone (); // convection
26712683 sb_hxa = sb_hcMult * (sb_hcNat + sb_hcFrc);
2672- sb_hxr = sb_frRad* pow3 (DegFtoR (0.5 *(sb_tSrf + sb_txr)));
2684+ sb_hxr = sb_frRad * pow3 (DegFtoR (0.5 *(sb_tSrf + sb_txr)));
26732685 }
26742686 sb_qrAbs = area > 0 . ? sb_sgTarg.st_tot / area : 0 .;
26752687 }
@@ -2693,7 +2705,7 @@ void SBC::sb_SetCoeffs( // set convective and radiant coefficients
26932705 + sb_cTGrnd * Wthr.d .wd_tGrnd ) * sb_rGrnd;
26942706 sb_txr = sb_txa; // no radiation, set sb_txr as insurance
26952707 }
2696- else if (sb_pXS->sfExCnd ==C_EXCNDCH_ADIABATIC)
2708+ else if (sb_pXS->sfExCnd ==C_EXCNDCH_ADIABATIC || sb_pXS-> xs_IsPerim () )
26972709 { sb_hcNat = sb_hcFrc = sb_hxr = sb_hxa = 0 .;
26982710 }
26992711 else
@@ -2980,16 +2992,13 @@ x printf( "Hit\n");
29802992 }
29812993
29822994 case C_CONVMODELCH_TARP:
2983- {
2984-
2985- sb_hcNat = sb_hcConst[TD>0 .] * pow (fabs (TD), 1 . / 3 .);
2995+ { sb_hcNat = sb_hcConst[TD>0 .] * pow (fabs (TD), 1 . / 3 .);
29862996 sb_hcFrc = 0 .f ;
29872997 break ;
29882998 }
29892999
29903000 case C_CONVMODELCH_MILLS:
29913001 {
2992-
29933002 // get nat conv h for underside of roof construction:
29943003 // Ref: A.F. Mills, "Heat Transfer", '92; Eq 4.85 & 4.86.
29953004 // applied to hot all roofs facing downward, and to cold roof facing downward if Theta < 60 deg.
@@ -3043,7 +3052,6 @@ x printf( "Hit\n");
30433052 break ;
30443053 }
30453054
3046-
30473055 case C_CONVMODELCH_INPUT:
30483056 sb_hcNat = 1 .f ;
30493057 sb_hcFrc = 0 .f ;
@@ -3246,6 +3254,16 @@ TI XSURF::xs_GetZi( // get zone idx
32463254 return zi;
32473255} // XSURF::xs_GetZi
32483256// -----------------------------------------------------------------------------
3257+ int XSURF::xs_IsPerim () const // nz iff this is a PERIMETER
3258+ {
3259+ return xs_ty == CTPERIM;
3260+ } // XSURF::xs_IsPerim
3261+ // -----------------------------------------------------------------------------
3262+ int XSURF::xs_IsKiva () const // nz iff surface uses Kiva ground conduction
3263+ {
3264+ return xs_ty == CTKIVA;
3265+ } // XSURF::xs_IsKiva
3266+ // -----------------------------------------------------------------------------
32493267int XSURF::xs_IsASHWAT () const // nz iff this is an ASHWAT window
32503268{
32513269 return xs_fenModel == C_FENMODELCH_ASHWAT;
0 commit comments