Nodes of different colours represent the following:
Solid arrows point from a parent (sub)module to the submodule which is descended from it. Dashed arrows point from a module being used to the module or program unit using it. Where possible, edges connecting nodes are given different colours to make them easier to distinguish in large graphs.
Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed arrows point from an interface to procedures which implement that interface. This could include the module procedures in a generic interface or the implementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are given different colours to make them easier to distinguish in large graphs.
Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed arrows point from an interface to procedures which implement that interface. This could include the module procedures in a generic interface or the implementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are given different colours to make them easier to distinguish in large graphs.
SUBROUTINE DayltgSetupAdjZoneListsAndPointers
! SUBROUTINE INFORMATION:
! AUTHOR Fred Winkelmann
! DATE WRITTEN Feb. 2004
! MODIFIED: June 2010;LKL - Merged two routines.
! RE-ENGINEERED na
! PURPOSE OF THIS SUBROUTINE:
! For each Daylighting:Detailed zone, Z, creates a list of other zones, Zadj,
! that have one or more exterior windows and that share one or more interior
! windows with Z. Used in calculation of daylighting through interior windows.
! Sets the daylighting factor pointers for each Daylighting:Detailed zone. The pointer
! may be associated with an exterior window in a daylit target zone or an exterior window in
! an adjacent zone, daylit or not, that shares interior windows with the target zone.
! METHODOLOGY EMPLOYED:
! na
! REFERENCES:
! na
! USE STATEMENTS:
USE General, ONLY: RoundSigDigits
IMPLICIT NONE ! Enforce explicit typing of all variables in this routine
! SUBROUTINE ARGUMENT DEFINITIONS:
! na
! SUBROUTINE PARAMETER DEFINITIONS:
! na
! INTERFACE BLOCK SPECIFICATIONS
! na
! DERIVED TYPE DEFINITIONS
! na
! SUBROUTINE LOCAL VARIABLE DECLARATIONS:
INTEGER :: ZoneNum ! Zone number
INTEGER :: NumList ! Counter of adjacent zone numbers
INTEGER :: ZoneNumAdj ! Zone number
LOGICAL :: AdjZoneHasExtWins ! True if adjacent zone has one or more exterior windows
INTEGER :: SurfNumAdj ! Surface number
INTEGER :: SurfNumAdj2 ! Surface number
INTEGER :: ExtWinIndex
INTEGER :: IntWinIndex
INTEGER :: ZoneAdjLoop
INTEGER :: NumOfIntWindowsCount
INTEGER :: DayltgFacPtr ! Daylighting factor pointer
INTEGER :: ZoneExtWinCtr ! Exterior window counter
INTEGER :: SurfNum ! Surface number
INTEGER :: loop ! DO loop index
INTEGER, ALLOCATABLE, DIMENSION(:) :: ZoneExtWin
INTEGER :: Winsize
INTEGER :: Refsize
INTEGER :: MapNum
! FLOW:
! Count number of exterior Windows (use to allocate arrays)
! FLOW:
DO ZoneNum = 1,NumOfZones
! Count exterior windows in this zone
DO SurfNum = Zone(ZoneNum)%SurfaceFirst,Zone(ZoneNum)%SurfaceLast
IF((Surface(SurfNum)%Class == SurfaceClass_Window .AND. Surface(SurfNum)%ExtBoundCond == ExternalEnvironment) .OR. &
SurfaceWindow(SurfNum)%OriginalClass == SurfaceClass_TDD_Diffuser) THEN
ZoneDaylight(ZoneNum)%TotalExtWindows = ZoneDaylight(ZoneNum)%TotalExtWindows + 1
END IF
END DO
ENDDO
DO ZoneNum = 1,NumOfZones
NumList = 0
IF(ZoneDaylight(ZoneNum)%TotalDaylRefPoints == 0) CYCLE
! This is a Daylighting:Detailed zone
! Find adjacent zones
DO ZoneNumAdj = 1,NumOfZones
IF(ZoneNumAdj == ZoneNum) CYCLE
! Require that ZoneNumAdj have a least one exterior window
AdjZoneHasExtWins = .FALSE.
DO SurfNumAdj = Zone(ZoneNumAdj)%SurfaceFirst,Zone(ZoneNumAdj)%SurfaceLast
IF(Surface(SurfNumAdj)%Class == SurfaceClass_Window .AND. Surface(SurfNumAdj)%ExtBoundCond == ExternalEnvironment) THEN
AdjZoneHasExtWins = .TRUE.
EXIT
END iF
END DO
IF(.NOT.AdjZoneHasExtWins) CYCLE
! Loop again through surfaces in ZoneNumAdj and see if any are interior windows adjacent to ZoneNum
DO SurfNumAdj = Zone(ZoneNumAdj)%SurfaceFirst,Zone(ZoneNumAdj)%SurfaceLast
IF(Surface(SurfNumAdj)%Class == SurfaceClass_Window .AND. Surface(SurfNumAdj)%ExtBoundCond >= 1) THEN
! This is an interior window in ZoneNumAdj
IF(Surface(Surface(SurfNumAdj)%ExtBoundCond)%Zone == ZoneNum) THEN
! This interior window is adjacent to ZoneNum
NumList = NumList + 1
EXIT
END IF
END If
END DO
END DO
ALLOCATE(ZoneDaylight(ZoneNum)%AdjIntWinZoneNums(NumList))
ZoneDaylight(ZoneNum)%AdjIntWinZoneNums=0
END DO
DO ZoneNum = 1,NumOfZones
NumList = 0
IF(ZoneDaylight(ZoneNum)%TotalDaylRefPoints == 0) CYCLE
! This is a Daylighting:Detailed zone
! Find adjacent zones
DO ZoneNumAdj = 1,NumOfZones
IF(ZoneNumAdj == ZoneNum) CYCLE
! Require that ZoneNumAdj have a least one exterior window
AdjZoneHasExtWins = .FALSE.
DO SurfNumAdj = Zone(ZoneNumAdj)%SurfaceFirst,Zone(ZoneNumAdj)%SurfaceLast
IF(Surface(SurfNumAdj)%Class == SurfaceClass_Window .AND. Surface(SurfNumAdj)%ExtBoundCond == ExternalEnvironment) THEN
AdjZoneHasExtWins = .TRUE.
EXIT
END iF
END DO
IF(.NOT.AdjZoneHasExtWins) CYCLE
! Loop again through surfaces in ZoneNumAdj and see if any are interior windows adjacent to ZoneNum
DO SurfNumAdj = Zone(ZoneNumAdj)%SurfaceFirst,Zone(ZoneNumAdj)%SurfaceLast
IF(Surface(SurfNumAdj)%Class == SurfaceClass_Window .AND. Surface(SurfNumAdj)%ExtBoundCond >= 1) THEN
! This is an interior window in ZoneNumAdj
IF(Surface(Surface(SurfNumAdj)%ExtBoundCond)%Zone == ZoneNum) THEN
! This interior window is adjacent to ZoneNum
NumList = NumList + 1
ZoneDaylight(ZoneNum)%AdjIntWinZoneNums(NumList) = ZoneNumAdj
ZoneDaylight(ZoneNumAdj)%AdjZoneHasDayltgCtrl = .True.
EXIT
END IF
END If
END DO
END DO
ZoneDaylight(ZoneNum)%NumOfIntWinAdjZones = NumList
END DO
! now fill out information on relationship between adjacent exterior windows and associated interior windows
DO ZoneNum = 1,NumOfZones
! first find count of exterior windows
IF (ZoneDaylight(ZoneNum)%NumOfIntWinAdjZones <= 0) THEN
ZoneDaylight(ZoneNum)%NumOfIntWinAdjZoneExtWins = 0
CYCLE
ENDIF
DO ZoneAdjLoop = 1, ZoneDaylight(ZoneNum)%NumOfIntWinAdjZones
ZoneNumAdj = ZoneDaylight(ZoneNum)%AdjIntWinZoneNums(ZoneAdjLoop)
DO SurfNumAdj = Zone(ZoneNumAdj)%SurfaceFirst,Zone(ZoneNumAdj)%SurfaceLast
IF(Surface(SurfNumAdj)%Class == SurfaceClass_Window .AND. Surface(SurfNumAdj)%ExtBoundCond == ExternalEnvironment) THEN
ZoneDaylight(ZoneNum)%NumOfIntWinAdjZoneExtWins = ZoneDaylight(ZoneNum)%NumOfIntWinAdjZoneExtWins + 1
ENDIF
ENDDO
ENDDO
! now allocate nested struct based on exterior window count
ALLOCATE(ZoneDaylight(ZoneNum)%IntWinAdjZoneExtWin(ZoneDaylight(ZoneNum)%NumOfIntWinAdjZoneExtWins))
! now fill nested structure
ExtWinIndex = 0
DO ZoneAdjLoop = 1, ZoneDaylight(ZoneNum)%NumOfIntWinAdjZones
ZoneNumAdj = ZoneDaylight(ZoneNum)%AdjIntWinZoneNums(ZoneAdjLoop)
DO SurfNumAdj = Zone(ZoneNumAdj)%SurfaceFirst,Zone(ZoneNumAdj)%SurfaceLast
IF(Surface(SurfNumAdj)%Class == SurfaceClass_Window .AND. Surface(SurfNumAdj)%ExtBoundCond == ExternalEnvironment) THEN
ExtWinIndex = ExtWinIndex + 1
ZoneDaylight(ZoneNum)%IntWinAdjZoneExtWin(ExtWinIndex)%SurfNum = SurfNumAdj
! now count interior windows shared by both zones
NumOfIntWindowsCount = 0
DO SurfNumAdj2 = Zone(ZoneNumAdj)%SurfaceFirst,Zone(ZoneNumAdj)%SurfaceLast
IF(Surface(SurfNumAdj2)%Class == SurfaceClass_Window .AND. Surface(SurfNumAdj2)%ExtBoundCond >= 1) THEN
! This is an interior window in ZoneNumAdj
IF(Surface(Surface(SurfNumAdj2)%ExtBoundCond)%Zone == ZoneNum) THEN
! This interior window is adjacent to ZoneNum and associated with this
NumOfIntWindowsCount = NumOfIntWindowsCount + 1
ENDIF
ENDIF
ENDDO
! allocate nested array
ALLOCATE(ZoneDaylight(ZoneNum)%IntWinAdjZoneExtWin(ExtWinIndex)%IntWinNum(NumOfIntWindowsCount))
ZoneDaylight(ZoneNum)%IntWinAdjZoneExtWin(ExtWinIndex)%IntWinNum=0
IntWinIndex = 0
DO SurfNumAdj2 = Zone(ZoneNumAdj)%SurfaceFirst,Zone(ZoneNumAdj)%SurfaceLast
IF(Surface(SurfNumAdj2)%Class == SurfaceClass_Window .AND. Surface(SurfNumAdj2)%ExtBoundCond >= 1) THEN
! This is an interior window in ZoneNumAdj
IF(Surface(Surface(SurfNumAdj2)%ExtBoundCond)%Zone == ZoneNum) THEN
! This interior window is adjacent to ZoneNum and associated with this
IntWinIndex = IntWinIndex + 1
ZoneDaylight(ZoneNum)%IntWinAdjZoneExtWin(ExtWinIndex)%IntWinNum(IntWinIndex) = SurfNumAdj2
ENDIF
ENDIF
ENDDO
ENDIF
ENDDO
ENDDO
ENDDO
ALLOCATE(ZoneExtWin(NumOfZones))
ZoneExtWin=0
DO ZoneNum = 1,NumOfZones
IF(ZoneDaylight(ZoneNum)%TotalDaylRefPoints > 0) THEN
! This is a Daylighting:Detailed zone
! Get exterior windows in this zone
DO SurfNum = Zone(ZoneNum)%SurfaceFirst,Zone(ZoneNum)%SurfaceLast
IF((Surface(SurfNum)%Class == SurfaceClass_Window .AND. Surface(SurfNum)%ExtBoundCond == ExternalEnvironment) .OR. &
SurfaceWindow(SurfNum)%OriginalClass == SurfaceClass_TDD_Diffuser) THEN
ZoneExtWin(ZoneNum) = ZoneExtWin(ZoneNum) + 1
END IF
END DO
! Get exterior windows in adjacent zones that share interior windows with ZoneNum
IF(ZoneDaylight(ZoneNum)%NumOfIntWinAdjZones > 0) THEN
DO loop = 1,ZoneDaylight(ZoneNum)%NumOfIntWinAdjZones
ZoneNumAdj = ZoneDaylight(ZoneNum)%AdjIntWinZoneNums(loop)
! Get exterior windows in ZoneNumAdj -- there must be at least one, otherwise
! it would not be an "AdjIntWinZone"
DO SurfNumAdj = Zone(ZoneNumAdj)%SurfaceFirst,Zone(ZoneNumAdj)%SurfaceLast
IF((Surface(SurfNumAdj)%Class == SurfaceClass_Window .AND. Surface(SurfNumAdj)%ExtBoundCond == ExternalEnvironment) .OR. &
SurfaceWindow(SurfNumAdj)%OriginalClass == SurfaceClass_TDD_Diffuser) THEN
ZoneExtWin(ZoneNum) = ZoneExtWin(ZoneNum) + 1
END IF
END DO
END DO
END IF
END IF ! End of check if a Daylighting:Detailed zone
END DO ! End of primary zone loop
DayltgFacPtr = 0
DO ZoneNum = 1,NumOfZones
ZoneDaylight(ZoneNum)%NumOfDayltgExtWins = 0
IF(ZoneDaylight(ZoneNum)%TotalDaylRefPoints > 0) THEN
! This is a Daylighting:Detailed zone
! Get exterior windows in this zone
IF (ZoneExtWin(ZoneNum) == 0) CYCLE
ALLOCATE(ZoneDayLight(ZoneNum)%DayltgExtWinSurfNums(ZoneExtWin(ZoneNum)))
ZoneDayLight(ZoneNum)%DayltgExtWinSurfNums=0
ALLOCATE(ZoneDaylight(ZoneNum)%DayltgFacPtrsForExtWins(ZoneExtWin(ZoneNum)))
ZoneDaylight(ZoneNum)%DayltgFacPtrsForExtWins=0
ALLOCATE(ZoneDaylight(ZoneNum)%SolidAngAtRefPt(ZoneDaylight(ZoneNum)%TotalDaylRefPoints,ZoneExtWin(ZoneNum)))
ZoneDaylight(ZoneNum)%SolidAngAtRefPt=0.0d0
ALLOCATE(ZoneDaylight(ZoneNum)%SolidAngAtRefPtWtd(ZoneDaylight(ZoneNum)%TotalDaylRefPoints,ZoneExtWin(ZoneNum)))
ZoneDaylight(ZoneNum)%SolidAngAtRefPtWtd=0.0d0
ALLOCATE(ZoneDaylight(ZoneNum)%IllumFromWinAtRefPt(ZoneDaylight(ZoneNum)%TotalDaylRefPoints,2,ZoneExtWin(ZoneNum)))
ZoneDaylight(ZoneNum)%IllumFromWinAtRefPt=0.0d0
ALLOCATE(ZoneDaylight(ZoneNum)%BackLumFromWinAtRefPt(ZoneDaylight(ZoneNum)%TotalDaylRefPoints,2,ZoneExtWin(ZoneNum)))
ZoneDaylight(ZoneNum)%BackLumFromWinAtRefPt=0.0d0
ALLOCATE(ZoneDaylight(ZoneNum)%SourceLumFromWinAtRefPt(ZoneDaylight(ZoneNum)%TotalDaylRefPoints,2,ZoneExtWin(ZoneNum)))
ZoneDaylight(ZoneNum)%SourceLumFromWinAtRefPt=0.0d0
DO Loop=1,ZoneDaylight(ZoneNum)%MapCount
MapNum=ZoneDaylight(ZoneNum)%ZoneToMap(Loop)
IF (IllumMapCalc(MapNum)%TotalMapRefPoints > 0) THEN
! might be able to use TotalMapRefPoints for zone in below.
ALLOCATE(IllumMapCalc(MapNum)%SolidAngAtMapPt(IllumMapCalc(MapNum)%TotalMapRefPoints,ZoneExtWin(ZoneNum)))
IllumMapCalc(MapNum)%SolidAngAtMapPt=0.0d0
ALLOCATE(IllumMapCalc(MapNum)%SolidAngAtMapPtWtd(IllumMapCalc(MapNum)%TotalMapRefPoints,ZoneExtWin(ZoneNum)))
IllumMapCalc(MapNum)%SolidAngAtMapPtWtd=0.0d0
ALLOCATE(IllumMapCalc(MapNum)%IllumFromWinAtMapPt(IllumMapCalc(MapNum)%TotalMapRefPoints,2,ZoneExtWin(ZoneNum)))
IllumMapCalc(MapNum)%IllumFromWinAtMapPt=0.0d0
ALLOCATE(IllumMapCalc(MapNum)%BackLumFromWinAtMapPt(IllumMapCalc(MapNum)%TotalMapRefPoints,2,ZoneExtWin(ZoneNum)))
IllumMapCalc(MapNum)%BackLumFromWinAtMapPt=0.0d0
ALLOCATE(IllumMapCalc(MapNum)%SourceLumFromWinAtMapPt(IllumMapCalc(MapNum)%TotalMapRefPoints,2,ZoneExtWin(ZoneNum)))
IllumMapCalc(MapNum)%SourceLumFromWinAtMapPt=0.0d0
ENDIF
ENDDO
ZoneExtWinCtr = 0
DO SurfNum = Zone(ZoneNum)%SurfaceFirst,Zone(ZoneNum)%SurfaceLast
IF((Surface(SurfNum)%Class == SurfaceClass_Window .AND. Surface(SurfNum)%ExtBoundCond == ExternalEnvironment) .OR. &
SurfaceWindow(SurfNum)%OriginalClass == SurfaceClass_TDD_Diffuser) THEN
ZoneExtWinCtr = ZoneExtWinCtr + 1
DayltgFacPtr = DayltgFacPtr + 1
ZoneDaylight(ZoneNum)%DayltgExtWinSurfNums(ZoneExtWinCtr) = SurfNum
ZoneDaylight(ZoneNum)%DayltgFacPtrsForExtWins(ZoneExtWinCtr) = DayltgFacPtr
END IF
END DO
! Get exterior windows in adjacent zones that share interior windows with ZoneNum
IF(ZoneDaylight(ZoneNum)%NumOfIntWinAdjZones > 0) THEN
DO loop = 1,ZoneDaylight(ZoneNum)%NumOfIntWinAdjZones
ZoneNumAdj = ZoneDaylight(ZoneNum)%AdjIntWinZoneNums(loop)
! Get exterior windows in ZoneNumAdj -- there must be at least one, otherwise
! it would not be an "AdjIntWinZone"
DO SurfNumAdj = Zone(ZoneNumAdj)%SurfaceFirst,Zone(ZoneNumAdj)%SurfaceLast
IF((Surface(SurfNumAdj)%Class == SurfaceClass_Window .AND. Surface(SurfNumAdj)%ExtBoundCond == ExternalEnvironment) .OR. &
SurfaceWindow(SurfNumAdj)%OriginalClass == SurfaceClass_TDD_Diffuser) THEN
ZoneExtWinCtr = ZoneExtWinCtr + 1
DayltgFacPtr = DayltgFacPtr + 1
ZoneDaylight(ZoneNum)%DayltgExtWinSurfNums(ZoneExtWinCtr) = SurfNumAdj
ZoneDaylight(ZoneNum)%DayltgFacPtrsForExtWins(ZoneExtWinCtr) = DayltgFacPtr
! If no daylighting in that zone, set up variables anyway:
IF (ZoneDaylight(ZoneNumAdj)%TotalDaylRefPoints == 0) THEN
IF (.not. SurfaceWindow(SurfNumAdj)%SurfDayLightInit) THEN
ALLOCATE(SurfaceWindow(SurfNumAdj)%SolidAngAtRefPt(ZoneDaylight(ZoneNum)%TotalDaylRefPoints))
SurfaceWindow(SurfNumAdj)%SolidAngAtRefPt=0.0d0
ALLOCATE(SurfaceWindow(SurfNumAdj)%SolidAngAtRefPtWtd(ZoneDaylight(ZoneNum)%TotalDaylRefPoints))
SurfaceWindow(SurfNumAdj)%SolidAngAtRefPtWtd=0.0d0
ALLOCATE(SurfaceWindow(SurfNumAdj)%IllumFromWinAtRefPt(ZoneDaylight(ZoneNum)%TotalDaylRefPoints,2))
SurfaceWindow(SurfNumAdj)%IllumFromWinAtRefPt=0.0d0
ALLOCATE(SurfaceWindow(SurfNumAdj)%BackLumFromWinAtRefPt(ZoneDaylight(ZoneNum)%TotalDaylRefPoints,2))
SurfaceWindow(SurfNumAdj)%BackLumFromWinAtRefPt=0.0d0
ALLOCATE(SurfaceWindow(SurfNumAdj)%SourceLumFromWinAtRefPt(ZoneDaylight(ZoneNum)%TotalDaylRefPoints,2))
SurfaceWindow(SurfNumAdj)%SourceLumFromWinAtRefPt=0.0d0
SurfaceWindow(SurfNumAdj)%SurfDayLightInit=.true.
ENDIF
ENDIF
END IF
END DO
END DO
END IF
ZoneDaylight(ZoneNum)%NumOfDayltgExtWins = ZoneExtWin(ZoneNum)
WinSize=ZoneExtWin(ZoneNum)
RefSize=2
ALLOCATE(ZoneDaylight(ZoneNum)%DaylIllFacSky (WinSize,RefSize,4,MaxSlatAngs+1,24))
ALLOCATE(ZoneDaylight(ZoneNum)%DaylSourceFacSky (WinSize,RefSize,4,MaxSlatAngs+1,24))
ALLOCATE(ZoneDaylight(ZoneNum)%DaylBackFacSky (WinSize,RefSize,4,MaxSlatAngs+1,24))
ALLOCATE(ZoneDaylight(ZoneNum)%DaylIllFacSun (WinSize,RefSize,MaxSlatAngs+1,24))
ALLOCATE(ZoneDaylight(ZoneNum)%DaylIllFacSunDisk (WinSize,RefSize,MaxSlatAngs+1,24))
ALLOCATE(ZoneDaylight(ZoneNum)%DaylSourceFacSun (WinSize,RefSize,MaxSlatAngs+1,24))
ALLOCATE(ZoneDaylight(ZoneNum)%DaylSourceFacSunDisk (WinSize,RefSize,MaxSlatAngs+1,24))
ALLOCATE(ZoneDaylight(ZoneNum)%DaylBackFacSun (WinSize,RefSize,MaxSlatAngs+1,24))
ALLOCATE(ZoneDaylight(ZoneNum)%DaylBackFacSunDisk (WinSize,RefSize,MaxSlatAngs+1,24))
DO Loop=1,ZoneDaylight(ZoneNum)%MapCount
MapNum=ZoneDaylight(ZoneNum)%ZoneToMap(Loop)
RefSize=IllumMapCalc(MapNum)%TotalMapRefPoints
ALLOCATE(IllumMapCalc(MapNum)%DaylIllFacSky (WinSize,RefSize,4,MaxSlatAngs+1,24))
ALLOCATE(IllumMapCalc(MapNum)%DaylSourceFacSky (WinSize,RefSize,4,MaxSlatAngs+1,24))
ALLOCATE(IllumMapCalc(MapNum)%DaylBackFacSky (WinSize,RefSize,4,MaxSlatAngs+1,24))
ALLOCATE(IllumMapCalc(MapNum)%DaylIllFacSun (WinSize,RefSize,MaxSlatAngs+1,24))
ALLOCATE(IllumMapCalc(MapNum)%DaylIllFacSunDisk (WinSize,RefSize,MaxSlatAngs+1,24))
ALLOCATE(IllumMapCalc(MapNum)%DaylSourceFacSun (WinSize,RefSize,MaxSlatAngs+1,24))
ALLOCATE(IllumMapCalc(MapNum)%DaylSourceFacSunDisk (WinSize,RefSize,MaxSlatAngs+1,24))
ALLOCATE(IllumMapCalc(MapNum)%DaylBackFacSun (WinSize,RefSize,MaxSlatAngs+1,24))
ALLOCATE(IllumMapCalc(MapNum)%DaylBackFacSunDisk (WinSize,RefSize,MaxSlatAngs+1,24))
ENDDO
END IF ! End of check if a Daylighting:Detailed zone
END DO ! End of primary zone loop
WRITE(OutputFileInits,700)
700 Format('! <Zone/Window Adjacency Daylighting Counts>, Zone Name, ', &
'Number of Exterior Windows, Number of Exterior Windows in Adjacent Zones')
DO ZoneNum=1,NumOfZones
IF(ZoneDaylight(ZoneNum)%TotalDaylRefPoints == 0) CYCLE
WRITE(OutputFileInits,701) trim(Zone(ZoneNum)%Name),trim(RoundSigDigits(ZoneDaylight(ZoneNum)%TotalExtWindows)), &
trim(RoundSigDigits(ZoneDaylight(ZoneNum)%NumOfDayltgExtWins-ZoneDaylight(ZoneNum)%TotalExtWindows))
END DO
701 Format('Zone/Window Adjacency Daylighting Counts, ',A,',',A,',',A)
WRITE(OutputFileInits,702)
702 Format('! <Zone/Window Adjacency Daylighting Matrix>, Zone Name, Number of Adjacent Zones with Windows,', &
'Adjacent Zone Names - 1st 100 (max)')
DO ZoneNum=1,NumOfZones
IF(ZoneDaylight(ZoneNum)%TotalDaylRefPoints == 0) CYCLE
WRITE(OutputFileInits,703) trim(Zone(ZoneNum)%Name),trim(RoundSigDigits(ZoneDaylight(ZoneNum)%NumOfIntWinAdjZones)), &
(trim(Zone(ZoneDaylight(ZoneNum)%AdjIntWinZoneNums(loop))%Name),loop=1,MIN(ZoneDaylight(ZoneNum)%NumOfIntWinAdjZones,100))
END DO
703 Format('Zone/Window Adjacency Daylighting Matrix, ',A,',',A,100(',',A))
DEALLOCATE(ZoneExtWin)
RETURN
END SUBROUTINE DayltgSetupAdjZoneListsAndPointers