home *** CD-ROM | disk | FTP | other *** search
Text File | 1987-09-07 | 75.6 KB | 2,416 lines |
- PROGRAM LITE
- REAL X0(4,30,7),BETA(4,30,2),PSI(4,30,2),RHO(4,30),XN(30,400,3),
- 1 DAYF(3,400),DELF(400),F(4,30,30),WSOL(3,400),DSOL(4,30),
- 2 TAU(10),DW(5),LL(4,30,9),A(4,30),COEF(30,30),LS(3),Y(3),
- 3 YM(3),XY(3,4,2),LUM(4,30),AK2(10),X(3),COFB(30,1),FS(30),
- 4 ALPHA(30),FR(30),AIK(30,400),LUMF(30,400),LUMI(30,400),
- 5 XYW(5,2,2),XSUN(5,4,2),ANG(5),OHW(5),OHREF(5),
- 6 RING(5),OHTAU(5),RS(4),WW(5),WH(5),WCX(5),WCY(5),
- 8 W(12),BW(12),
- 9 PLTTMP(4,3)
- C
- INTEGER IDS(30),IOB(4,30,30),JOB(30,30,5),KSUN(4,30),NW(6),TZN,
- 1 KOB(4,30,30),KD(30,11,11),ICO(30),JCO(30,5),NM(30),NN(30),
- 2 ISUN(5),NUM(30),IJOB(26),KJOB(4,30,30),KKOB(4,30,30),
- 3 IOH(5),KOH(5),ISTART(5),ITYPW(5),ISD(5),
- 4 IMG(5,20,20),ICNR(5,4)
- INTEGER*4 ISEED
- C
- COMMON /BLK1/ X0,LL,XDP,YDP
- COMMON /BLK2/ NW,PI,IOB,ICLD,ISEED,NBUNDL,A,KJOB
- COMMON /BLK3/ AK2,TAU,NC
- COMMON /BLK4/ BETAS,LS,AUX(3),GRNDL
- COMMON /BLK5/ ICO,JCO,NSW
- COMMON /BLK6/ XN,AIK,LUMF,LUMI,WSOL,DAYF,DELF,IMG
- 2 ,ICNR
- C ISNGRD - DIMENSION OF IMG(), DIRECT SUN IMAGE ARRAY
- ISNGRD=20
- PI=ATAN(1.)*4.
- RAD=PI/180.
- NBUNDL=2000
- ISEED=123456
- C INID=1.. SIMPLIFIED INPUT FOR RECTANGULAR ROOMS
- C IWRITE=1.. ILLUMINATION DATA FOR WORKING SURFACE ARE PRINTED
- C =2.. DAYLIGHT FACTORS ARE PRINTED
- C =3.. ILLUMINATION AND DAYLIGHT FACTORS ARE PRINTED
- C INID=2.. FULL INPUT FOR ARBITRARY ROOMS,
- C IWRITE=1.. BRIEF OUTPUT (DATA FOR WORKING SURFACE ONLY)
- C =2.. DETAILED OUTPUT (DATA FOR ALL SURFACES)
- C IPLOT=0.. NO PLOT IS BEING GENERATED
- C =1.. ILLUMINATION LEVELS ARE PLOTTED (EQUALLY-SPACED LINES)
- C =2.. ILLUMINATION LEVELS ARE PLOTTED (EQUALLY-SPACED LEVELS)
- C =3.. DAYLIGHT FACTORS ARE PLOTTED (EQUALLY-SPACED LEVELS)
- C NUMIT= # OF ITERATIONS
- C IOH=0.. NO OVERHANGS,
- C =1.. OVERHANG ON TOP,
- C =2.. OVERHANGS ON BOTH SIDES,
- C =3.. OVERHANG ON BOTTOM ONLY,
- C =4.. OVERHANGS ON TOP AND BOTH SIDES,
- C =5.. OVERHANGS ON ALL FOUR SIDES.
- C IWMOD=1.. INPUT IS SUN POSITION, SOLAR RADIATION, ETC.,
- C =2.. INPUT IS LATITUDE,LONGITUDE,TIME,ETC.
- C ITYPW=1.. CLEAR WINDOW,
- C =2.. WINDOW WITH SHADING DEVICE,
- C =3.. DIFFUSING WINDOW.
- C ISD =1.. SHEER CURTAIN
- C
- C INPUT ROUTINES
- OPEN(UNIT=5,FILE='SLITE.IN',STATUS='OLD')
- OPEN(UNIT=7,FILE='SLITE.OUT',STATUS='NEW')
- C * RECL=200)
- OPEN(UNIT=8,FILE='SLITE.PLT',STATUS='NEW')
- C
- CALL LOGO(6)
- READ(5,*) INID,IWMOD,NUMIT,IWRITE,IPLOT
- IF(INID.NE.1) GOTO 31
- C
- C *** SIMPLIFIED INPUT - LIMITED TO RECTANGULAR ROOM WITH
- C *** RECTANGULAR WINDOWS, AND SIMPLE OUTSIDE OBSTRUCTIONS
- C
- C ROOM SIZE AND LOCATION
- C
- READ(5,*) RW,RD,RH
- READ(5,*) RE,RO
- C
- C WINDOW DATA
- C NWINDO = NUMBER OF WINDOWS,
- C LOCW=1.. WINDOWS ARE IN THE FRONT WALL,
- C =2.. WINDOWS ARE IN THE CEILING (SKYLIGHTS)
- READ(5,*) NWINDO,LOCW
- C INITIALIZATION OF AUXILIARY VALUES
- IF (NWINDO.GE.1.AND.NWINDO.LE.5) GOTO 4010
- WRITE(7,8002)
- STOP
- 4010 NSS=0
- NC=0
- NSW=0
- ND=0
- DO 4000 I=1,NWINDO
- IDS(I)=0
- OHW(I)=0.
- RING(I)=0.
- OHREF(I)=0.
- KOH(I)=0
- 4000 OHTAU(I)=0.
- C DATA FOR EACH WINDOW
- DO 4100 I=1,NWINDO
- READ(5,*) WW(I),WH(I),WCX(I),WCY(I),NM(I),NN(I),RHO(1,I)
- READ(5,*) ITYPW(I),AK2(I),TAU(I),DW(I),IOH(I)
- NC=NC+1/ITYPW(I)
- NSW=NSW+ITYPW(I)/2-ITYPW(I)/3
- ND=ND+ITYPW(I)/3
- IF (LOCW.EQ.1) IDS(I)=2
- ALPHA(I)=1.
- ISD(I)=1
- IF(ITYPW(I).NE.2) GOTO 4050
- C SHEER CURTAIN
- READ(5,*) ALPHA(I)
- 4050 IF(ITYPW(I).EQ.3) ALPHA(I)=0.
- IF(IOH(I).EQ.0) GOTO 4100
- C OVERHANG DATA
- READ(5,*) OHW(I),RING(I),OHREF(I),KOH(I),OHTAU(I)
- IF (KOH(I).EQ.0) OHTAU(I)=0.
- 4100 CONTINUE
- C WINDOW ORDERING (PUT IN SEQUENCE CLEAR--SHADED--DIFFUSING)
- IF(ITYPW(NWINDO).GE.ITYPW(1).OR.NWINDO.GT.2) GOTO 4110
- AAA=AK2(1)
- AK2(1)=AK2(2)
- AK2(2)=AAA
- AAA=TAU(1)
- TAU(1)=TAU(2)
- TAU(2)=AAA
- AAA=DW(1)
- DW(1)=DW(2)
- DW(2)=AAA
- AAA=ALPHA(1)
- ALPHA(1)=ALPHA(2)
- ALPHA(2)=AAA
- AAA=OHW(1)
- OHW(1)=OHW(2)
- OHW(2)=AAA
- AAA=RING(1)
- RING(1)=RING(2)
- RING(2)=AAA
- AAA=OHREF(1)
- OHREF(1)=OHREF(2)
- OHREF(2)=AAA
- AAA=OHTAU(1)
- OHTAU(1)=OHTAU(2)
- OHTAU(2)=AAA
- AAA=WW(1)
- WW(1)=WW(2)
- WW(2)=AAA
- AAA=WH(1)
- WH(1)=WH(2)
- WH(2)=AAA
- AAA=WCX(1)
- WCX(1)=WCX(2)
- WCX(2)=AAA
- AAA=WCY(1)
- WCY(1)=WCY(2)
- WCY(2)=AAA
- AAA=RHO(1,1)
- RHO(1,1)=RHO(1,2)
- RHO(1,2)=AAA
- III=ITYPW(1)
- ITYPW(1)=ITYPW(2)
- ITYPW(2)=III
- III=IOH(1)
- IOH(1)=IOH(2)
- IOH(2)=III
- III=KOH(1)
- KOH(1)=KOH(2)
- KOH(2)=III
- III=NM(1)
- NM(1)=NM(2)
- NM(2)=III
- III=NN(1)
- NN(1)=NN(2)
- NN(2)=III
- C
- C REFLECTIVITIES AND DISCRETIZATION FOR WALLS
- C
- C IF LOCW=1, SEQUENCE IS WINDOWS-LEFT WALL-REAR WALL-RIGHT WALL-CEILING-
- C FLOOR-FRONT WALL; IF LOCW=2, FRONT WALL AND CEILING ARE INTERCHANGED
- C TO PLACE SURFACE WITH CUT-OUT (WINDOWS) LAST
- 4110 DO 4120 I=1,6
- IC=I+NWINDO-1
- IF(I.EQ.1) IC=NWINDO+2*(4-LOCW)
- IF(I.EQ.5) IC=NWINDO+2*(1+LOCW)
- 4120 READ(5,*) NM(IC),NN(IC),RHO(1,IC)
- C
- C WORKING SURFACE
- C
- READ(5,*) NM(NWINDO+7),NN(NWINDO+7),WSE
- C
- C DESCRIPTION OF OUTSIDES
- C
- READ(5,*) IOPP
- C
- C OPPOSING BUILDING
- C
- IF(IOPP.EQ.1) READ(5,*) HO,WO,XO,DO,RHO(2,3)
- C
- C SUBJECT BUILDING
- C
- READ(5,*) HS,WS,XS,RHO(2,1)
- C SET AUXILIARY VALUES
-
- NW(2)=IOPP+2
- NWC=5
- NWO=1
- NWS=1
- IF (LOCW.EQ.1) NSS=1
- N0=NC+NSW
- N01=NC+1
- N1=N0+ND
- N11=N1+1
- N2=N1+NWC
- NT=N2+NWO
- NT1=NT+1
- NTS=NT1
- NSP1=NSS+1
- C CALCULATE VALUES FOR CUT-OUT AND OBSTRUCTION IDENTIFIERS
- IMAX=NWINDO+6
- IMAX1=IMAX+1
- ICO(IMAX)=NWINDO
- DO 4170 I=1,IMAX1
- DO 4160 J=1,IMAX
- 4160 IOB(1,I,J)=0
- 4170 IOB(1,I,I)=-1
- DO 4175 I=1,NWINDO
- JCO(IMAX,I)=I
- IOB(1,I,IMAX)=-1
- 4175 IOB(1,IMAX,I)=-1
- IOB(1,IMAX1,NWINDO+5)=-1
- C
- DO 4180 I=1,IMAX1
- DO 4180 J=1,3
- IOB(2,I,J)=0
- IOB(2,J,J)=-1
- 4180 KOB(2,I,J)=-1
- DO 4190 I=1,5
- DO 4190 J=2,3
- 4190 KOB(2,I+NWINDO,J)=0
- KOB(2,NWINDO+5,2)=-1
- KOB(2,NWINDO+7,3)=0
- RO=RO*RAD
- SRO=SIN(RO)
- CRO=COS(RO)
- C
- C DESCRIPTION OF WINDOWS
- C
- DO 4200 I=1,NWINDO
- X0(1,I,1)=(WCX(I)-WW(I)/2.)*SRO
- X0(1,I,2)=-(WCX(I)-WW(I)/2.)*CRO
- X0(1,I,3)=RE+WCY(I)-WH(I)/2.
- X0(1,I,4)=WW(I)
- X0(1,I,5)=0.
- X0(1,I,6)=WW(I)
- X0(1,I,7)=WH(I)
- BETA(1,I,1)=PI/2.
- BETA(1,I,2)=0.
- PSI(1,I,1)=RO-PI/2.
- PSI(1,I,2)=0.
- IF (LOCW.NE.2) GOTO 4200
- X0(1,I,1)=X0(1,I,1) - (WCY(I)-WH(I)/2.)*CRO
- X0(1,I,2)=-WCX(I)*CRO-(WCY(I)-WH(I)/2.)*SRO+WW(I)*.5*SRO
- X0(1,I,3)=RE+RH
- BETA(1,I,2)=PI/2.
- PSI(1,I,2)=RO-PI
- 4200 CONTINUE
- C
- C FRONT WALL
- C
- I=NWINDO+2*(4-LOCW)
- X0(1,I,1)=-RW/2.*SRO
- X0(1,I,2)=RW/2.*CRO
- X0(1,I,3)=RE
- X0(1,I,4)=RW
- X0(1,I,5)=0.
- X0(1,I,6)=RW
- X0(1,I,7)=RH
- BETA(1,I,1)=PI/2.
- BETA(1,I,2)=0.
- PSI(1,I,1)=RO-PI/2.
- PSI(1,I,2)=0.
- C
- C LEFT WALL
- C
- I=NWINDO+1
- X0(1,I,1)=-RD*CRO-RW/2.*SRO
- X0(1,I,2)=-RD*SRO+RW/2.*CRO
- X0(1,I,3)=RE
- X0(1,I,4)=RD
- X0(1,I,5)=0.
- X0(1,I,6)=RD
- X0(1,I,7)=RH
- BETA(1,I,1)=PI/2.
- BETA(1,I,2)=0.
- PSI(1,I,1)=RO
- PSI(1,I,2)=0.
- C
- C REAR WALL
- C
- I=NWINDO+2
- X0(1,I,1)=-RD*CRO+RW/2.*SRO
- X0(1,I,2)=-RD*SRO-RW/2.*CRO
- X0(1,I,3)=RE
- X0(1,I,4)=RW
- X0(1,I,5)=0.
- X0(1,I,6)=RW
- X0(1,I,7)=RH
- BETA(1,I,1)=PI/2.
- BETA(1,I,2)=0.
- PSI(1,I,1)=RO+PI/2.
- PSI(1,I,2)=0.
- C
- C RIGHT SIDE
- C
- I=NWINDO+3
- X0(1,I,1)=RW/2.*SRO
- X0(1,I,2)=-RW/2.*CRO
- X0(1,I,3)=RE
- X0(1,I,4)=RD
- X0(1,I,5)=0.
- X0(1,I,6)=RD
- X0(1,I,7)=RH
- BETA(1,I,1)=PI/2.
- BETA(1,I,2)=0.
- PSI(1,I,1)=RO+PI
- PSI(1,I,2)=0.
- C
- C CEILING
- C
- I=NWINDO+2*(1+LOCW)
- X0(1,I,1)=RW/2.*SRO-RD*CRO
- X0(1,I,2)=-RW/2.*CRO-RD*SRO
- X0(1,I,3)=RE+RH
- X0(1,I,4)=RW
- X0(1,I,5)=0.
- X0(1,I,6)=RW
- X0(1,I,7)=RD
- BETA(1,I,1)=PI/2.
- BETA(1,I,2)=PI/2.
- PSI(1,I,1)=RO+PI/2.
- PSI(1,I,2)=RO
- C
- C FLOOR
- C
- I=NWINDO+5
- X0(1,I,1)=-RW/2.*SRO-RD*CRO
- X0(1,I,2)=RW/2.*CRO-RD*SRO
- X0(1,I,3)=RE
- X0(1,I,4)=RW
- X0(1,I,5)=0.
- X0(1,I,6)=RW
- X0(1,I,7)=RD
- BETA(1,I,1)=PI/2.
- BETA(1,I,2)=PI/2.
- PSI(1,I,1)=RO-PI/2.
- PSI(1,I,2)=RO
- C
- C WORKING SURFACE
- C
- I=NWINDO+7
- X0(1,I,1)=-RW/2.*SRO-RD*CRO
- X0(1,I,2)=RW/2.*CRO-RD*SRO
- X0(1,I,3)=RE+WSE
- X0(1,I,4)=RW
- X0(1,I,5)=0.
- X0(1,I,6)=RW
- X0(1,I,7)=RD
- BETA(1,I,1)=PI/2.
- BETA(1,I,2)=PI/2.
- PSI(1,I,1)=RO-PI/2.
- PSI(1,I,2)=RO
- RHO(1,I)=1.
- C
- C OUTSIDE WINDOW WALL
- C
- X0(2,1,1)=(.5*WS+XS)*SRO
- X0(2,1,2)=-(.5*WS+XS)*CRO
- X0(2,1,3)=0.
- X0(2,1,4)=WS
- X0(2,1,5)=0.
- X0(2,1,6)=WS
- X0(2,1,7)=HS
- BETA(2,1,1)=PI/2.
- BETA(2,1,2)=0.
- PSI(2,1,1)=RO+PI/2.
- PSI(2,1,2)=0.
- C
- C OUTSIDE GROUND
- C
- IF (IOPP.EQ.-1) GOTO 4210
- HGR=WS
- IF(IOPP.EQ.1) HGR=DO
- X0(2,2,1)=-(0.75*WS-XS)*SRO
- X0(2,2,2)= (0.75*WS-XS)*CRO
- X0(2,2,3)=0.
- X0(2,2,4)=1.5*WS
- X0(2,2,5)=0.
- X0(2,2,6)=1.5*WS
- X0(2,2,7)=HGR
- BETA(2,2,1)=PI/2.
- BETA(2,2,2)=PI/2.
- PSI(2,2,1)=RO-PI/2.
- PSI(2,2,2)=RO
- IF(IOPP.LE.0) GOTO 4210
- C
- C OPPOSING BUILDING
- C
- X0(2,3,1)=DO*CRO-(.5*WO-XO)*SRO
- X0(2,3,2)=DO*SRO+(.5*WO-XO)*CRO
- X0(2,3,3)=0.
- X0(2,3,4)=WO
- X0(2,3,5)=0.
- X0(2,3,6)=WO
- X0(2,3,7)=HO
- BETA(2,3,1)=PI/2.
- BETA(2,3,2)=0.
- PSI(2,3,1)=RO-PI/2.
- PSI(2,3,2)=0.
- C
- C INPUT DATA PRINT-OUT
- C
- 4210 RO=RO/RAD
- WRITE(7,6300) RW,RD,RH,RO
- IF(LOCW.EQ.1) WRITE(7,6302) NWINDO
- IF(LOCW.EQ.2) WRITE(7,6303) NWINDO
- DO 4220 I=1,NWINDO
- WRITE(7,6310) I,WW(I),WH(I),WCX(I),WCY(I),NM(I),NN(I)
- IF(ITYPW(I).EQ.1) WRITE(7,6311) ITYPW(I)
- IF(ITYPW(I).NE.2) GOTO 4215
- IF(ISD(I).EQ.1) WRITE(7,6312) ITYPW(I),ALPHA(I)
- 4215 IF(ITYPW(I).EQ.3) WRITE(7,6313) ITYPW(I)
- WRITE(7,6320) AK2(I),DW(I),TAU(I),RHO(1,I)
- IF(IOH(I).EQ.0) GOTO 4220
- IF(IOH(I).EQ.1) WRITE(7,6031) OHW(I),RING(I),OHREF(I)
- IF(IOH(I).EQ.2) WRITE(7,6032) OHW(I),RING(I),OHREF(I)
- IF(IOH(I).EQ.3) WRITE(7,6033) OHW(I),RING(I),OHREF(I)
- IF(IOH(I).EQ.4) WRITE(7,6034) OHW(I),RING(I),OHREF(I)
- IF(IOH(I).EQ.5) WRITE(7,6035) OHW(I),RING(I),OHREF(I)
- IF(KOH(I).EQ.0) WRITE(7,6036)
- IF(KOH(I).EQ.1) WRITE(7,6037) OHTAU(I)
- IF(KOH(I).EQ.2) WRITE(7,6038) OHTAU(I)
- 4220 CONTINUE
- NWP6=NWINDO+2*(4-LOCW)
- NWP4=NWINDO+2*(1+LOCW)
- WRITE(7,6331) NM(NWP6),NN(NWP6),RHO(1,NWP6)
- WRITE(7,6332) NM(NWINDO+1),NN(NWINDO+1),RHO(1,NWINDO+1)
- WRITE(7,6333) NM(NWINDO+2),NN(NWINDO+2),RHO(1,NWINDO+2)
- WRITE(7,6334) NM(NWINDO+3),NN(NWINDO+3),RHO(1,NWINDO+3)
- WRITE(7,6335) NM(NWP4),NN(NWP4),RHO(1,NWP4)
- WRITE(7,6336) NM(NWINDO+5),NN(NWINDO+5),RHO(1,NWINDO+5)
- WRITE(7,6337) NM(NWINDO+7),NN(NWINDO+7),WSE
- WRITE(7,6340) WS,HS,XS,RHO(2,1)
- IF(IOPP.EQ.1) WRITE(7,6350) WO,HO,XO,DO,RHO(2,3)
- GOTO 39
- C *** COMPREHENSIVE INPUT FOR GENERAL ROOM;
- C *** NON-RECTANGULAR ROOMS, NON-RECTANGULAR SURFACES, OBSTRUCTIONS, ETC.
- C
- C DATA FOR ROOM
- C
- 31 WRITE(7,6005)
- C NUMBER OF DIFFERENT TYPES OF SURFACES
- READ(5,*) NC,NSW,ND,NWC,NWO,NWS,NSS
- WRITE(7,6000)NC,NSW,ND,NWC,NWO,NWS,NSS
- N0=NC+NSW
- N01=NC+1
- N1=N0+ND
- N11=N1+1
- N2=N1+NWC
- NT=N2+NWO
- NT1=NT+1
- NTS=NT+NWS
- NSP1=NSS+1
- IF (NWS.LE.3) GOTO 5170
- WRITE(7,8007)
- STOP
- 5170 IF (NSS.LE.2) GOTO 5180
- WRITE(7,8008)
- STOP
- 5180 IF (N1*2+NWC+NWO+NWS.LE.30) GOTO 5200
- WRITE(7,8010)
- STOP
- C
- 5200 DO 10 I=1,NT
- C INTERNAL SURFACE DATA
- READ(5,*) (X0(1,I,IZ),IZ=1,7),(BETA(1,I,IZ),PSI(1,I,IZ),IZ=1,
- 1 2),RHO(1,I),NM(I),NN(I)
- WRITE(7,6010)I,(X0(1,I,IZ),IZ=1,7),(BETA(1,I,IZ),PSI(1,I,IZ),IZ=1,
- 1 2),RHO(1,I)
- WRITE(7,6020)NM(I),NN(I)
- IF (NM(I)*NN(I).LE.400) GOTO 5205
- WRITE(7,8011) I
- STOP
- 5205 IF (RHO(1,I).GE.0..AND.RHO(1,I).LE.1.) GOTO 5210
- WRITE(7,8012) I
- STOP
- 5210 DO 11 IZ=1,2
- BETA(1,I,IZ)=RAD*BETA(1,I,IZ)
- 11 PSI(1,I,IZ)=RAD*PSI(1,I,IZ)
- C
- C NUMBER AND NAMES OF CUT-OUTS
- IF(I.LE.N2) GO TO 13
- READ(5,*) ICO(I),(JCO(I,M),M=1,ICO(I))
- IF (ICO(I).LT.1) GOTO 13
- DO 5020 M=1,ICO(I)
- IF (JCO(I,M).GE.1.AND.JCO(I,M).LE.NTS) GOTO 5020
- WRITE(7,8014) I
- STOP
- 5020 CONTINUE
- C
- C NUMBER AND NAMES OF OBSTRUCTORS
- C
- 13 READ(5,*) (IOB(1,I,J),(JOB(I,J,K),K=1,IOB(1,I,J)),J=1,NT)
- IDS(I)=1
- IF(I.GT.N1) GO TO 10
- C WINDOW DATA
- READ(5,*) IS,AK2(I),TAU(I),DW(I),IOH(I)
- IF (IS.LE.NSS) GOTO 5220
- WRITE(7,8020) I
- STOP
- 5220 IF (TAU(I).GE.0..AND.TAU(I).LE.1.) GOTO 5230
- WRITE(7,8022) I
- STOP
- 5230 IF (AK2(I).GE.0..AND.AK2(I).LE.1.) GOTO 5240
- WRITE(7,8024) I
- STOP
- 5240 IF(IOH(I).EQ.0) GOTO 16
- C OVERHANG DATA
- READ(5,*) OHW(I),RING(I),OHREF(I),KOH(I),OHTAU(I)
- IF (KOH(I).EQ.0) OHTAU(I)=0.
- IF (OHREF(I).GE.0..AND.OHREF(I).LE.1.) GOTO 5250
- WRITE(7,8034) I
- STOP
- 5250 IF (OHTAU(I).GE.0..AND.OHTAU(I).LE.1.) GOTO 16
- WRITE(7,8036) I
- STOP
- 16 IDS(I)=IS+1-1/(1+IS)
- ALPHA(I)=1.
- IF(I.GT.N0)ALPHA(I)=0.
- ISD(I)=1
- WRITE(7,6030)IS,AK2(I),TAU(I),DW(I)
- IF(I.LE.NC.OR.I.GT.N0) GO TO 18
- C SHEER CURTAIN
- READ(5,*) ALPHA(I)
- WRITE(7,6064) ALPHA(I)
- 18 IF(IOH(I).EQ.0) GOTO 10
- IF(IOH(I).EQ.1) WRITE(7,6031) OHW(I),RING(I),OHREF(I)
- IF(IOH(I).EQ.2) WRITE(7,6032) OHW(I),RING(I),OHREF(I)
- IF(IOH(I).EQ.3) WRITE(7,6033) OHW(I),RING(I),OHREF(I)
- IF(IOH(I).EQ.4) WRITE(7,6034) OHW(I),RING(I),OHREF(I)
- IF(IOH(I).EQ.5) WRITE(7,6035) OHW(I),RING(I),OHREF(I)
- IF(KOH(I).EQ.0) WRITE(7,6036)
- IF(KOH(I).EQ.1) WRITE(7,6037) OHTAU(I)
- IF(KOH(I).EQ.2) WRITE(7,6038) OHTAU(I)
- 10 CONTINUE
- C
- C DATA FOR WORKING SURFACES
- C
- DO 35 I=NT1,NTS
- READ(5,*) (X0(1,I,IZ),IZ=1,7),(BETA(1,I,IZ),PSI(1,I,IZ),IZ
- 1 =1,2),NM(I),NN(I)
- WRITE(7,6070)I,(X0(1,I,IZ),IZ=1,7),(BETA(1,I,IZ),PSI(1,I,IZ),IZ=1
- 1 ,2),NM(I),NN(I)
- IF (NM(I)*NN(I).LE.400) GOTO 5270
- WRITE(7,8011) I
- STOP
- 5270 RHO(1,I)=1.
- DO 36 IZ=1,2
- BETA(1,I,IZ)=RAD*BETA(1,I,IZ)
- 36 PSI(1,I,IZ)=RAD*PSI(1,I,IZ)
- READ(5,*) (IOB(1,I,J),(JOB(I,J,K),K=1,IOB(1,I,J)),J=1,NT)
- 35 CONTINUE
- C
- C DATA FOR OUTSIDE ENCLOSURES
- C
- NW(1)=0
- IF(NSS.EQ.0)GO TO 39
- C SCAN OVER ALL OUTSIDE ENCLOSURES
- DO 20 K=2,NSP1
- C NUMBER OF SOLID WALLS IN OUTSIDE ENCLOSURE
- READ(5,*) NW(K)
- K2=K-1
- WRITE(7,6040)K2,NW(K)
- NTK=NW(K)
- DO 20 I=1,NTK
- C SURFACE DATA
- READ (5,*) (X0(K,I,IZ),IZ=1,7),(BETA(K,I,IZ),PSI(K,I,IZ),IZ=1,
- 1 2),RHO(K,I)
- WRITE(7,6010)I,(X0(K,I,IZ),IZ=1,7),(BETA(K,I,IZ),PSI(K,I,IZ),IZ=1,
- 1 2),RHO(K,I)
- IF (RHO(K,I).GE.0..AND.RHO(K,I).LE.1.) GOTO 5290
- WRITE(7,8005) I,K
- STOP
- 5290 DO 17 IZ=1,2
- BETA(K,I,IZ)=RAD*BETA(K,I,IZ)
- 17 PSI(K,I,IZ)=RAD*PSI(K,I,IZ)
- C NUMBER OF OBSTRUCTORS
- 20 READ(5,*) (IOB(K,I,J),(KJOB(K,I,J),L=1,IOB(K,I,J)),J=1,NTK)
- C NUMBER OF OBSTRUCTORS BETWEEN INSIDE AND OUTSIDE SURFACES
- C
- DO 30 K=2,NSP1
- NTK=NW(K)
- DO 30 I=1,NTS
- 30 READ(5,*) (KOB(K,I,J),(KKOB(K,I,L),L=1,KOB(K,I,J)),J=1,NTK)
- 39 WSOR=PSI(1,NT1,1)
- NW(1)=0
- C
- C ILLUMINATION DATA
- C
- MFIRST=1
- MLAST=1
- MSTEP=1
- NTSTEP=1
- IDAY=1
- GOTO(5400,34,5405)IWMOD
- C SPECIFIC SOLAR DATA ARE SUPPLIED
- 5400 READ(5,*) SOLC1,ETSOL,SKYC1,ETSKY,ICLD,RHOGR
- WRITE(7,6050)SOLC1,ETSOL,SKYC1,ETSKY,ICLD,RHOGR
- SKYC=ETSKY*SKYC1
- IF(ICLD.EQ.1.OR.ICLD.EQ.3) GO TO 32
- C CLEAR DAY
- READ(5,*) HSUND,PSID
- GOTO 5410
- C GEOGRAPHICAL DATA ARE SUPPLIED; SCANS THROUGH MONTHS, HOURS
- 34 READ(5,*) ALAT,ALONG,TZN,ALT,ICLD,RHOGR
- READ(5,*) MFIRST,MLAST,MSTEP,IDAY,TFIRST,TLAST,DELTAT
- WRITE(7,6100) ALAT,ALONG,TZN,ALT,ICLD,RHOGR
- WRITE(7,6110) MFIRST,MLAST,MSTEP,IDAY,TFIRST,TLAST,DELTAT
- IF(ICLD.EQ.1.OR.ICLD.EQ.3) GOTO 42
- READ(5,*) (W(M),BW(M),M=MFIRST,MLAST,MSTEP)
- WRITE(7,6120)
- DO 6125 M=MFIRST,MLAST,MSTEP
- IF (W(M).GE.0..AND.W(M).LE.10.) GOTO 6124
- WRITE(7,8030) M
- STOP
- 6124 IF (BW(M).GE.0..AND.BW(M).LE..5) GOTO 6125
- WRITE(7,8032) M
- STOP
- 6125 WRITE(7,6121) M,W(M),BW(M)
- 42 NTSTEP=(TLAST-TFIRST)/DELTAT+1.1
- GOTO 32
- C
- C SUN POSITION( ALTITUDE AND AZIMUTH) DATA ARE SUPPLIED
- C
- 5405 READ(5,*) HSUND,PSID,ALT,ICLD,RHOGR
- WRITE(7,6105) HSUND,PSID,ALT,ICLD,RHOGR
- IF(ICLD.EQ.1.OR.ICLD.EQ.3) GOTO 5410
- READ(5,*) W(1),BW(1)
- 5410 HSUN=HSUND*RAD
- PSIS=PSID*RAD
- IISUN=1
- 32 IF(INID.EQ.1.AND.IOPP.NE.-1)RHO(2,2)=RHOGR
- IF (RHOGR.GE.0..AND.RHOGR.LE.1.) GOTO 5300
- WRITE (6,8026)
- STOP
- C
- C EVALUATION OF DIRECTION COSINES
- C
- 5300 DO 40 K=1,NSP1
- NTK=NTS
- IF(K.GE.2) NTK=NW(K)
- DO 40 I=1,NTK
- SBX=SIN(BETA(K,I,1))
- CBX=COS(BETA(K,I,1))
- SBY=SIN(BETA(K,I,2))
- CBY=COS(BETA(K,I,2))
- SPX=SIN(PSI(K,I,1))
- CPX=COS(PSI(K,I,1))
- SPY=SIN(PSI(K,I,2))
- CPY=COS(PSI(K,I,2))
- LL(K,I,1)=SBX*CPX
- LL(K,I,2)=SBX*SPX
- LL(K,I,3)=CBX
- LL(K,I,4)=SBY*CPY
- LL(K,I,5)=SBY*SPY
- LL(K,I,6)=CBY
- LL(K,I,7)=SBX*SPX*CBY-CBX*SBY*SPY
- LL(K,I,8)=CBX*SBY*CPY-SBX*CPX*CBY
- LL(K,I,9)=SBX*SBY*(SPY*CPX-CPY*SPX)
- 40 CONTINUE
- C
- C CALCULATION OF NODAL COORDINATES
- C
- DO 1100 I=1,NTS
- K=0
- NM1=NM(I)
- NN1=NN(I)
- AA=X0(1,I,7)/(NM1*NN1)
- BB=X0(1,I,4)-X0(1,I,6)+X0(1,I,5)
- DO 1000 N=1,NN1
- ETA=(NN1+.5-N)/NN1
- CC=X0(1,I,4)-BB*ETA
- DO 1000 M=1,NM1
- XSI=(M-.5)/NM1
- XIP=X0(1,I,5)*ETA+CC*XSI
- YIP=X0(1,I,7)*ETA
- DO 1010 L=1,3
- 1010 XN(I,K+1,L)=X0(1,I,L)+LL(1,I,L)*XIP+LL(1,I,L+3)*YIP
- C CHECK WHETHER A NODAL POINT FALLS ONTO A CUT-OUT
- IF(I.LE.N2.OR.I.GT.NT) GOTO 1020
- IICO=ICO(I)
- DO 1030 IC=1,IICO
- J=JCO(I,IC)
- XJP=0.
- YJP=0.
- DO 1040 L=1,3
- XYP=XN(I,K+1,L)-X0(1,J,L)
- XJP=XJP+XYP*LL(1,J,L)
- 1040 YJP=YJP+XYP*LL(1,J,L+3)
- ETAJ=YJP/X0(1,J,7)
- IF(ABS(ETAJ-.5).GT..5) GOTO 1030
- XSIJ=(XJP-X0(1,J,5)*ETAJ)/(X0(1,J,4)-(X0(1,J,4)-X0(1,J,6)+
- 1 X0(1,J,5))*ETAJ)
- IF(ABS(XSIJ-.5).GT..5) GOTO 1030
- GOTO 1000
- 1030 CONTINUE
- 1020 K=K+1
- AIK(I,K)=AA*CC
- 1000 CONTINUE
- C NUMBER OF NODES ON SURFACE
- 1100 NUM(I)=K
- C
- C CALCULATION OF COORDINATES FOR OUTSIDE SURFACE OF WINDOW OPENING
- C (STORE THESE AUXILIARY SURFACES BEYOND WORKING SURFACE, I.E.@ NTS+I)
- C
- DO 45 I=1,N1
- DO 43 J=1,3
- X0(1,I+NTS,J)=X0(1,I,J)-(DW(I)+1.E-3)*LL(1,I,J+6)
- DO 43 K=1,3
- JJ=J+3*(K-1)
- 43 LL(1,I+NTS,JJ)=LL(1,I,JJ)
- DO 45 J=4,7
- 45 X0(1,I+NTS,J)=X0(1,I,J)
- C
- C CALCULATION OF OUTSIDE SURFACE AREAS
- C
- IF(NSS.EQ.0) GOTO 49
- DO 44 K=2,NSP1
- NTK=NW(K)
- DO 44 I=1,NTK
- LUM(K,I)=0
- 44 A(K,I)=(X0(K,I,4)+X0(K,I,6)-X0(K,I,5))*X0(K,I,7)/2.
- C
- C GEOMETRIC DESCRIPTION OF WINDOW OVERHANGS
- C (STORED BEYOND OUTSIDE ENCLOSURES, I.E. 1+NSS+1)
- C
- 49 NOH=NSP1+1
- IOHK=0
- DO 490 I=1,N1
- IF(IOH(I).EQ.0) GOTO 490
- IN=I+NTS
- IOHK=IOHK+1
- ISTART(I)=IOHK
- X2Y=X0(1,IN,5)/X0(1,IN,7)
- RTX2Y=SQRT(1.+X2Y*X2Y)
- X31Y=(X0(1,IN,4)-X0(1,IN,6))/X0(1,IN,7)
- RTX31Y=SQRT(1.+X31Y*X31Y)
- XLT=X0(1,IN,5)-RING(I)*(RTX2Y-X2Y)
- YLT=X0(1,IN,7)+RING(I)
- XTR=X0(1,IN,6)+RING(I)*(RTX31Y-X31Y)
- YTR=YLT
- IF(IOH(I).EQ.2.OR.IOH(I).EQ.3) GOTO 425
- C TOP OVERHANG
- DO 410 L=1,3
- 410 X0(NOH,IOHK,L)=X0(1,IN,L)+LL(1,I,L)*XLT+LL(1,I,L+3)*YLT
- X0(NOH,IOHK,4)=OHW(I)
- X0(NOH,IOHK,5)=0.
- X0(NOH,IOHK,6)=OHW(I)
- X0(NOH,IOHK,7)=XTR-XLT
- C
- DO 420 L=1,3
- LL(NOH,IOHK,L)=-LL(1,I,L+6)
- LL(NOH,IOHK,L+3)=LL(1,I,L)
- 420 LL(NOH,IOHK,L+6)=-LL(1,I,L+3)
- RHO(NOH,IOHK)=OHREF(I)
- IF(IOH(I).LE.1) GOTO 490
- C
- IOHK=IOHK+1
- 425 XBL=-RING(I)*(RTX2Y+X2Y)
- YBL=-RING(I)
- XRB=X0(1,IN,4)+RING(I)*(RTX31Y+X31Y)
- YRB=YBL
- IF(IOH(I).EQ.3) GOTO 455
- C LEFT AND RIGHT OVERHANGS
- DO 430 L=1,3
- X0(NOH,IOHK,L)=X0(1,IN,L)+LL(1,I,L)*XBL+LL(1,I,L+3)*YBL
- 430 X0(NOH,IOHK+1,L)=X0(1,IN,L)+LL(1,I,L)*XTR+LL(1,I,L+3)*YTR
- X0(NOH,IOHK,4)=OHW(I)
- X0(NOH,IOHK,5)=0.
- X0(NOH,IOHK,6)=OHW(I)
- X0(NOH,IOHK,7)=(X0(1,IN,7)+2.*RING(I))*RTX2Y
- X0(NOH,IOHK+1,4)=OHW(I)
- X0(NOH,IOHK+1,5)=0.
- X0(NOH,IOHK+1,6)=OHW(I)
- X0(NOH,IOHK+1,7)=(X0(1,IN,7)+2.*RING(I))*RTX31Y
- C
- DO 440 L=1,3
- LL(NOH,IOHK,L)=-LL(1,I,L+6)
- LL(NOH,IOHK,L+3)=(LL(1,I,L)*X2Y+LL(1,I,L+3))/RTX2Y
- LL(NOH,IOHK+1,L)=-LL(1,I,L+6)
- 440 LL(NOH,IOHK+1,L+3)=(LL(1,I,L)*X31Y-LL(1,I,L+3))/RTX31Y
- DO 450 L=1,3
- L1=L+1-3*(L/3)
- L2=L+2-3*(L/2)
- LL(NOH,IOHK,L+6)=LL(NOH,IOHK,L1)*LL(NOH,IOHK,L2+3)
- 1 -LL(NOH,IOHK,L2)*LL(NOH,IOHK,L1+3)
- 450 LL(NOH,IOHK+1,L+6)=LL(NOH,IOHK+1,L1)*LL(NOH,IOHK+1,L2+3)
- 1 -LL(NOH,IOHK+1,L2)*LL(NOH,IOHK+1,L1+3)
- RHO(NOH,IOHK)=OHREF(I)
- IOHK=IOHK+1
- RHO(NOH,IOHK)=OHREF(I)
- IF(IOH(I).EQ.2.OR.IOH(I).EQ.4) GOTO 490
- C
- C BOTTOM OVERHANG
- IOHK=IOHK+1
- 455 DO 460 L=1,3
- 460 X0(NOH,IOHK,L)=X0(1,IN,L)+LL(1,I,L)*XRB+LL(1,I,L+3)*YRB
- X0(NOH,IOHK,4)=OHW(I)
- X0(NOH,IOHK,5)=0.
- X0(NOH,IOHK,6)=OHW(I)
- X0(NOH,IOHK,7)=XRB-XBL
- C
- DO 470 L=1,3
- LL(NOH,IOHK,L)=-LL(1,I,L+6)
- LL(NOH,IOHK,L+3)=-LL(1,I,L)
- 470 LL(NOH,IOHK,L+6)=LL(1,I,L+3)
- RHO(NOH,IOHK)=OHREF(I)
- 490 CONTINUE
- ISTART(N1+1)=IOHK+1
- ZENL0=0
- C
- C START CYCLE FOR MONTHS AND HOURS (IF IWMOD=2)
- C
- DO 3400 MONTH=MFIRST,MLAST,MSTEP
- DO 3400 ITIME=1,NTSTEP
- IF(IWMOD.NE.2) GOTO 494
- TIME=TFIRST + DELTAT*(ITIME-1)
- WRITE(7,6130) MONTH,TIME
- C
- C ZENITH LUMINANCE
- C
- 494 DO 495 K=2,NSP1
- NK=NW(K)
- DO 495 I=1,NK
- 495 DSOL(K,I)=0.
- DO 496 I=1,NWS
- KMAX=NUM(I+NT)
- DO 496 K=1,KMAX
- 496 WSOL(I,K)=0.
- DO 497 I=1,NTS
- KMAX=NUM(I)
- DO 497 K=1,KMAX
- 497 LUMI(I,K)=0.
- GO TO(50,60,50,60),ICLD
- C ICLD=1.. OVERCAST SKY, SKY LUMINANCE DISTRIBUTION FROM C.I.E.
- C ICLD=2.. CLEAR SKY WITH DIRECT SUN INCLUDED.
- C ICLD=3.. UNIFORM-LUMIN@ANCE SKY, ZENITH VALUE FROM OVERCAST C.I.E.
- C ICLD=4.. CLEAR SKY ONLY
- 50 AK=5.*(3.-2.*RHOGR)/7.*(1/ICLD)
- AUX(1)=1./(1.+AK)
- AUX(2)=AUX(1)*AK
- SOLC=0.
- GOTO(57,58,59)IWMOD
- C LUMINANCE FROM INSOLATION DATA
- 57 ZENL=(1.+AK)*SKYC/((1.+.667*AK))
- GRNDL=SKYC*RHOGR/ZENL
- GO TO 100
- C LUMINANCE FROM GEOGRAPHICAL DATA
- C DETERMINE HSUN=SUN ALTITUDE ANGLE
- 58 CALL SOLAR(ALAT,ALONG,TZN,MONTH,TIME,IISUN,HSUN,PSIS)
- 59 ZENL=92.94*(.123+8.6*SIN(HSUN))*PI
- SKYC=(1.+.667*AK)/(1.+AK)*ZENL
- GRNDL=SKYC*RHOGR/ZENL
- IF(MONTH-MFIRST+ITIME.EQ.1) GOTO 100
- C
- C SET UP LUMINANCES FOR OTHER TIMES IF NOT CLEAR SKY
- C (FOR NON-CLEAR SKY CALCUL@ATIONS NEED TO BE DONE ONLY ONCE, AS
- C GEOMETRY AND SKY DISTRIBUTION REMAIN UNCHANGED; ONLY THE VALUE
- C OF ZENL=ZENITH LUMINANCE CHANGES)
- C
- C RATIO OF NEW AND OLD ZENITH LUMINANCES
- ZR=ZENL/ZENL0
- ZENL0=ZENL
- C OUTSIDE LUMINANCES
- IF (NSS.LE.0) GOTO 2405
- DO 2400 K=1,NSS
- NKT=NW(K+1)
- DO 2400 I=1,NKT
- 2400 LUM(K+1,I)=ZR*LUM(K+1,I)
- 2405 IF(IOHK.EQ.0) GOTO 2415
- C OVERHANG LUMINANCES
- DO 2410 II=1,IOHK
- 2410 LUM(NOH,II)=ZR*LUM(NOH,II)
- C INSIDE AND WORKING SURFACES
- 2415 DO 2420 I=1,NTS
- KMAX=NUM(I)
- DO 2420 K=1,KMAX
- 2420 LUMF(I,K)=ZR*LUMF(I,K)
- GOTO 1405
- C
- C ESTABLISH SUN POSITION FOR THE GEOGRAPHICAL DATA GIVEN
- 60 IF(IWMOD.EQ.2)CALL SOLAR(ALAT,ALONG,TZN,MONTH,TIME,
- 1 IISUN,HSUN,PSIS)
- BETAS=PI/2.-HSUN
- HSUND=HSUN/RAD
- PSID=PSIS/RAD
- IF(IWMOD.EQ.2)WRITE(7,6140) HSUND,PSID
- C INTEGRATE NORMALIZED LUMINANCE OVER SKY
- P=SKYSUM(BETAS)
- AUX(3)=.27385*(.91+10*EXP(-3*BETAS)+.45*COS(BETAS)**2)
- IF (IWMOD.GT.1) GOTO 67
- C IF SOLAR DATA KNOWN CALCULATE ZENL FROM SKY INTEGRAL
- SOLC=ETSOL*SOLC1
- ES=SOLC/COS(BETAS)
- ZENL=SKYC/P
- TERM=SOLC/(SOLC+SKYC)
- C IF TOO LITTLE DIFFUSE LIGHT, FAULTY INPUT DATA HAVE BEEN GIVEN
- IF(TERM.LT..9) GOTO 33
- WRITE(7,8000)
- STOP
- C ROUTINE TO CALCULATE ZENL AS FUNCTION OF TURBIDITY, VAPOR & SOL.ALT.
- 67 CALL ZENLCD(P,W(MONTH),BW(MONTH),HSUN,ZENL)
- C ROUTINE TO CALCULATE DIRECT SUN FROM SIMILAR DATA
- IF(ICLD.EQ.2)SOLC=DIR(MONTH,IDAY,BW(MONTH),W(MONTH),ALT,HSUN)
- IF(ICLD.EQ.4)SOLC=0.
- C USE SKY INTEGRAL AND ZENL TO GET DIFFUSE SKY ILLUMINATION
- SKYC=P*ZENL
- 33 II=0
- ES=SOLC/COS(BETAS)
- GRNDL=(SKYC+SOLC)*RHOGR/ZENL
- IF(NSS.LE.0) GOTO 70
- C INITIALIZATION OF SUNNY-NODES IDENTIFIERS FOR OUTSIDE SURFACES
- DO 38 K=2,NSP1
- NK=NW(K)
- DO 38 J=1,NK
- II=II+1
- KSUN(K,J)=0
- DSOL(K,J)=0.
- DO 37 M=1,11
- DO 37 N=1,11
- KD(II,M,N)=0.
- 37 CONTINUE
- 38 CONTINUE
- C
- C DIRECTION COSINES FOR VECTOR TOWARDS SUN
- C
- 70 LS(1)=SIN(BETAS)*COS(PSIS)
- LS(2)=SIN(BETAS)*SIN(PSIS)
- LS(3)=COS(BETAS)
- C
- C CALCULATION OF DIRECT SUNSHINE ILLUMINATION INSIDE ROOM
- C
- WRITE(7,6067)
- DO 1270 IW=1,N1
- ISUN(IW)=0
- CBW=LS(1)*LL(1,IW,7)+LS(2)*LL(1,IW,8)+LS(3)*LL(1,IW,9)
- C DOES SUN HIT WINDOW?
- IF(CBW.GE.-1.E-4) GOTO 1270
- C ANY OBSTRUCTION BETWEEN WINDOW AND SUN?
- KK=IDS(IW)
- IF(KK.LE.0) GOTO 1240
- NWK=NW(KK)
- DO 1250 L=1,3
- 1250 X(L)=X0(1,IW,L)
- DO 1230 J=1,NWK
- IF(IOB(KK,1,J).LT.0) GOTO 1230
- CALL SECT(X,LS,KK,J,KUT)
- IF(KUT.EQ.1) GOTO 1270
- 1230 CONTINUE
- 1240 ISUN(IW)=1
- WRITE(7,6068) IW,ALPHA(IW)
- 1270 CONTINUE
- C
- IF(N0.EQ.0) GOTO 1300
- DO 1200 I=1,NTS
- C COULD SUN POSSIBLY SHINE ON THIS SURFACE?
- CBS=LS(1)*LL(1,I,7)+LS(2)*LL(1,I,8)+LS(3)*LL(1,I,9)
- IF(CBS.LE.1.E-4) GOTO 1200
- KMAX=NUM(I)
- DO 1210 IW=1,N0
- IF(ISUN(IW).EQ.0) GOTO 1210
- IF(IOB(1,I,IW).LT.0) GOTO 1210
- CBW=LS(1)*LL(1,IW,7)+LS(2)*LL(1,IW,8)+LS(3)*LL(1,IW,9)
- C ATTENUATED AMOUNT OF DIRECT SUN LIGHT TO BE ADDED TO LUMINANCE
- WS=RHO(1,I)*ES*CBS*ALPHA(IW)*TAUB(IW,-CBW)
- DO 1260 K=1,KMAX
- DO 1220 L=1,3
- 1220 X(L)=XN(I,K,L)
- CALL SECT(X,LS,1,IW,KUT)
- C DOES RAY FROM NODE TO SUN PASS THROUGH WINDOW?
- IF(KUT.NE.1) GOTO 1260
- C BACK SIDE OF WINDOW ALSO?
- CALL SECT(X,LS,1,IW+NTS,KUT)
- IF(KUT.NE.1) GOTO 1260
- C HOW ABOUT INTERNAL OBSTRUCTIONS?
- IF(IOB(1,I,IW).EQ.0) GOTO 1255
- IIOB=IOB(1,I,IW)
- DO 1245 IO=1,IIOB
- JO=JOB(I,IW,IO)
- CALL SECT(X,LS,1,JO,KUT)
- IF(KUT.EQ.1) GOTO 1260
- 1245 CONTINUE
- C ANY OVERHANG IN THE WAY?
- 1255 IF(IOH(IW).EQ.0) GOTO 1257
- II1=ISTART(IW)
- II2=ISTART(IW+1)-1
- DO 1256 II=II1,II2
- CALL SECT(X,LS,NOH,II,KUT)
- IF(KUT.NE.1) GOTO 1256
- C IF SO, IS OVERHANG SEMI-TRANSPARENT? (IN THAT CASE ATTENUATE MORE)
- IF(KOH(IW).NE.1) GOTO 1260
- WS=WS*OHTAU(IW)
- GOTO 1257
- 1256 CONTINUE
- C ANY EXTERNAL OBSTRUCTION IN THE WAY?
- 1257 KK=IDS(IW)
- IF (KK.LE.0) GOTO 1275
- NWK=NW(KK)
- DO 1258 J=1,NWK
- IF (KOB(KK,I,J).LT.0) GOTO 1258
- CALL SECT(X,LS,KK,J,KUT)
- IF (KUT.EQ.1) GOTO 1260
- 1258 CONTINUE
- C DIRECT SUN IS INITIAL VALUE OF LUMINANCE
- 1275 LUMI(I,K)=WS
- 1260 CONTINUE
- 1210 CONTINUE
- 1200 CONTINUE
- C STORE THESE VALUES ALSO IN WSOL FOR PLOTTING ROUTINE
- DO 1280 I=NT1,NTS
- KMAX=NUM(I)
- DO 1280 K=1,KMAX
- 1280 WSOL(I-NT,K)=LUMI(I,K)
- C
- C CALCULATION OF DIRECT SUNSHINE ON CURTAINED AND
- C DIFFUSE WINDOWS
- C
- IF(N1.EQ.NC) GOTO 1350
- 1300 DO 1310 I=N01,N1
- C DOES WINDOW GET SUNSHINE?
- IF(ISUN(I).EQ.0) GOTO 1310
- CBW=LS(1)*LL(1,I,7)+LS(2)*LL(1,I,8)+LS(3)*LL(1,I,9)
- C CALCULATE ATTENUATED CONTRIBUTION TO LUMINANCE (NOTE CBW<0)
- WS=-ES*CBW*(1.-ALPHA(I))*TAUB(I,-CBW)
- KMAX=NUM(I)
- C ANY OVERHANG IN THE WAY FOR THIS NODE?
- DO 1320 K=1,KMAX
- TT=1.
- IF(IOH(I).EQ.0) GOTO 1320
- DO 1330 L=1,3
- 1330 X(L)=XN(I,K,L)
- II1=ISTART(I)
- II2=ISTART(I+1)-1
- DO 1340 II=II1,II2
- CALL SECT(X,LS,NOH,II,KUT)
- IF(KUT.NE.1) GOTO 1340
- TT=0.
- C IS OVERHANG SEMI-TRANSPARENT?
- IF(KOH(I).EQ.1) TT=OHTAU(I)
- GOTO 1320
- 1340 CONTINUE
- 1320 LUMI(I,K)=WS*TT
- 1310 CONTINUE
- C
- C CALCULATION OF DIRECT SUNSHINE ILLUMINATION FOR OUTSIDE ENCLOSURE SURFACES
- C
- 1350 IF(NSS.LE.0)GO TO 210
- II=0
- DO 90 K=2,NSP1
- NK=NW(K)
- DO 90 J=1,NK
- II=II+1
- FR(J)=0.
- C ARE SUNNY AREAS POSSIBLE ON THIS SURFACE?
- CBJ=LS(1)*LL(K,J,7)+LS(2)*LL(K,J,8)+LS(3)*LL(K,J,9)
- IF(CBJ.LE.1.E-4) GO TO 90
- C
- C BREAK UP SURFACE INTO 11 BY 11 NODES AND CHECK FOR SUN (SEND RAYS TO SUN)
- DO 95 M=1,11
- ETAM=(M-1.)/10.
- DO 95 N=1,11
- ETAN=(N-1.)/10.
- XPP=X0(K,J,4)-(X0(K,J,4)-X0(K,J,6)+X0(K,J,5))*ETAM
- XP=X0(K,J,5)*ETAM+XPP*ETAN
- YP=X0(K,J,7)*ETAM
- DO 94 L=1,3
- 94 X(L)=X0(K,J,L)+LL(K,J,L)*XP+LL(K,J,L+3)*YP
- C ANYTHING BLOCKING THE SUN?
- DO 93 JJ=1,NK
- IF(J.EQ.JJ) GO TO 93
- CBL=LS(1)*LL(K,JJ,7)+LS(2)*LL(K,JJ,8)+LS(3)*LL(K,JJ,9)
- IF(CBL.GE.-1.E-4)GO TO 93
- CALL SECT (X,LS,K,JJ,KUT)
- IF(KUT.EQ.1) GO TO 95
- 93 CONTINUE
- KD(II,M,N)=1
- C SUNNY FRACTION OF SURFACE
- FR(J)=FR(J)+C(M,11)*C(N,11)*XPP
- 95 CONTINUE
- C
- IF(FR(J).LE.1.E-4)GO TO 90
- FR(J)=FR(J)*2/(X0(K,J,4)+X0(K,J,6)-X0(K,J,5))
- FS(II)=(1.-FR(J))/FR(J)
- KSUN(K,J)=1
- C CONTRIBUTION OF DIRECT SUN TO OUTSIDE SURFACE LUMINANCE
- DSOL(K,J)=FR(J)*CBJ*ES*RHO(K,J)
- 90 CONTINUE
- C
- C CALCULATION OF F I-J IN OUTSIDE ENCLOSURES
- C
- 100 ZENL0=ZENL
- IF(NSS.LE.0) GOTO 210
- DO 400 K=2,NSP1
- NMW=NW(K)
- CALL CONFAC(K,NMW,F)
- 400 CONTINUE
- C
- C LUMINANCES FOR EXTERNAL REFLECTIONS (SOLUTION OF SIMULTANEOUS EQS.
- C BY MATRIX INVERSION)
- C
- DO 220 K=2,NSP1
- NKT=NW(K)
- DO 190 I=1,NKT
- DO 180 J=1,NKT
- DIJ=(I/J)*(J/I)
- 180 COEF(I,J)=DIJ/RHO(K,J)-F(K,I,J)
- 190 COFB(I,1)=ZENL*F(K,I,NKT+1)+DSOL(K,I)/RHO(K,I)
- IF (NKT.EQ.1) GOTO 230
- CALL MATINV(COEF,NKT,COFB,1,DETERM)
- DO 200 I=1,NKT
- 200 LUM(K,I)=COFB(I,1)
- GOTO 220
- 230 LUM(K,1)=COFB(1,1)/COEF(1,1)
- 220 CONTINUE
- C
- C CALCULATION OF OVERHANG LUMINANCES
- C (USING MONTE CARLO, ASSUMING NO INTERFERENCE BETWEEN OVERHANGS)
- C
- 210 NBOH=NBUNDL/5
- DO 1495 IW=1,N1
- IF(IOH(IW).EQ.0) GOTO 1495
- K=IDS(IW)
- C NUMBER OF OVERHANG SURFACES FOR THIS WINDOW
- II1=ISTART(IW)
- II2=ISTART(IW+1)-1
- DO 1450 II=II1,II2
- SUM=0.
- C SEND OUT BUNDLES
- DO 1455 NBUN=1,NBOH
- C ************************ RANDOM NUMBER GENERATOR **********************
- DO 112,INDEX=1,4
- 112 RS(INDEX)=RANDOM(ISEED)
- C CHOOSE DIRECTION
- SINB=SQRT(RS(1))
- COSB=SQRT(1.-RS(1))
- THET=2.*PI*RS(2)
- COST=COS(THET)
- SINT=SIN(THET)
- C CHOOSE EMISSION POINT
- DO 1460 L=1,3
- X(L)=X0(NOH,II,L)+LL(NOH,II,L)*X0(NOH,II,4)*RS(3)
- 1 +LL(NOH,II,L+3)*X0(NOH,II,7)*RS(4)
- Y(L)=(LL(NOH,II,L)*COST+LL(NOH,II,L+3)*SINT)*SINB
- 1 +LL(NOH,II,L+6)*COSB
- 1460 YM(L)=-Y(L)
- IF(K.EQ.0) GOTO 1466
- C DOES IT HIT OUTSIDE SURFACE OF WINDOW?
- NWK=NW(K)
- CALL SECT(X,YM,1,IW+NTS,KUT)
- IF(KUT.NE.1) GOTO 1462
- SUM=SUM+RHO(1,IW)/RHO(K,1)*LUM(K,1)
- GOTO 1455
- C ANY OUTSIDE SURFACE?
- 1462 IF (NSS.LT.1) GOTO 1466
- DO 1465 IR=1,NWK
- CALL SECT(X,Y,K,IR,KUT)
- IF(KUT.NE.1) GOTO 1465
- SUM=SUM+LUM(K,IR)
- GOTO 1455
- 1465 CONTINUE
- C HITS THE SKY, (OR GROUND IF Y POINTS BELOW HORIZ)
- 1466 SUM=SUM+RLPZ(ICLD,Y)*ZENL
- 1455 CONTINUE
- LUM(NOH,II)=OHREF(IW)*SUM/NBOH
- IF(ICLD.EQ.1.OR.ICLD.EQ.3) GOTO 1470
- C DOES DIRECT SUN HIT INSIDE OVERHANG SURFACES?
- IF(ISUN(IW).EQ.0) GOTO 1470
- CBS=LS(1)*LL(NOH,II,7)+LS(2)*LL(NOH,II,8)+LS(3)*LL(NOH,II,9)
- IF(CBS.LT.1.E-4) GOTO 1470
- IF(K.EQ.0) GOTO 1476
- DO 1475 IR=1,NWK
- CALL SECT(X,LS,K,IR,KUT)
- IF(KUT.EQ.1) GOTO 1470
- 1475 CONTINUE
- 1476 LUM(NOH,II)=LUM(NOH,II)+OHREF(IW)*ES*CBS
- 1470 IF(KOH(IW).NE.2) GOTO 1450
- C FOR TRANSLUCENT OVERHANG ALSO NEED LUMINANCE CONTRIBUTION FROM OUTSIDE
- C OF OVERHANG SURFACE; ROUTINE SAME AS THE INSIDE (SEE ABOVE)
- SUM=0.
- DO 1480 NBUN=1,NBOH
- C ************************ RANDOM NUMBER GENERATOR **********************
- DO 113 INDEX=1,4
- 113 RS(INDEX)=RANDOM(ISEED)
- SINB=SQRT(RS(1))
- COSB=SQRT(1.-RS(1))
- THET=2.*PI*RS(2)
- COST=COS(THET)
- SINT=SIN(THET)
- DO 1485 L=1,3
- X(L)=X0(NOH,II,L)+LL(NOH,II,L)*X0(NOH,II,4)*RS(3)
- 1 +LL(NOH,II,L+3)*X0(NOH,II,7)*RS(4)
- 1485 Y(L)=-(LL(NOH,II,L)*COST+LL(NOH,II,L+3)*SINT)*SINB
- 1 -LL(NOH,II,L+6)*COSB
- IF(K.EQ.0) GOTO 1491
- DO 1490 IR=1,NWK
- CALL SECT(X,Y,K,IR,KUT)
- IF(KUT.NE.1) GOTO 1490
- SUM=SUM+LUM(K,IR)
- GOTO 1480
- 1490 CONTINUE
- 1491 SUM=SUM+RLPZ(ICLD,Y)*ZENL
- 1480 CONTINUE
- LUM(NOH,II)=LUM(NOH,II)+OHTAU(IW)*SUM/NBOH
- IF(ICLD.EQ.1.OR.ICLD.EQ.3) GOTO 1450
- IF(ISUN(IW).EQ.0) GOTO 1450
- CBS=-LS(1)*LL(NOH,II,7)-LS(2)*LL(NOH,II,8)-LS(3)*LL(NOH,II,9)
- IF(CBS.LT.1.E-4) GOTO 1450
- IF(K.EQ.0) GOTO 1451
- DO 1505 IR=1,NWK
- CALL SECT(X,LS,K,IR,KUT)
- IF(KUT.EQ.1) GOTO 1450
- 1505 CONTINUE
- 1451 LUM(NOH,II)=LUM(NOH,II)+OHTAU(IW)*ES*CBS
- 1450 CONTINUE
- 1495 CONTINUE
- C
- C OUTSIDE ILLUMINATION ON CURTAINED AND DIFFUSE WINDOWS
- C (USING MIXED METHOD.. INTEGRATION AND MONTE CARLO)
- C
- IF(NC.EQ.N1) GOTO 1600
- DO 1500 I=N01,N1
- IO=I+NTS
- XY1=(X0(1,IO,6)-X0(1,IO,5))/X0(1,IO,4)
- ID1=1
- IF(ABS(XY1-1.).LT.1.E-3) ID1=0
- AX=XY1*ID1
- HI=0.
- K=IDS(I)
- C INTEGRATE OVER ALL DIRECTIONS
- DO 1550 IETA=1,21
- ETA=(IETA-1.)/20.
- SETA=SQRT(1.-ETA*ETA)
- TT=C(IETA,21)*ETA*TAUB(I,ETA)
- DO 1550 IMU=1,21
- AMU=(IMU-1.)/20.
- SWY=SETA*COS(2.*PI*AMU)
- SWZ=SETA*SIN(2.*PI*AMU)
- C EMISSION LOCATION FIXED BY RANDOM NUMBERS
- C ************************ RANDOM NUMBER GENERATOR **********************
- DO 114,INDEX=1,4
- 114 RS(INDEX)=RANDOM(ISEED)
- YY=(1.-SQRT(1.-(1.-XY1*XY1)*RS(1)))/(1.-AX)+(1-ID1)*RS(1)
- XX=X0(1,IO,5)*YY+X0(1,IO,4)*(1.-(1.-XY1)*YY)*RS(2)
- DO 1520 L=1,3
- X(L)=X0(1,IO,L)+LL(1,I,L)*XX+LL(1,I,L+3)*YY*X0(1,IO,7)
- 1520 Y(L)=-ETA*LL(1,I,L+6)+SWY*LL(1,I,L+3)+SWZ*LL(1,I,L)
- C ANY OVERHANG IN THE WAY?
- IF(IOH(I).EQ.0) GOTO 1545
- II1=ISTART(I)
- II2=ISTART(I+1)-1
- DO 1515 II=II1,II2
- CALL SECT(X,Y,NOH,II,KUT)
- IF(KUT.NE.1) GOTO 1515
- SS=LUM(NOH,II)
- GOTO 1550
- 1515 CONTINUE
- C ANY OUTSIDE SURFACE IN THE WAY?
- 1545 IF(K.EQ.0) GOTO 1530
- NWK=NW(K)
- DO 1540 J=1,NWK
- IF(KOB(K,I,J)) 1540,1535,1525
- 1525 JR=KKOB(K,I,J)
- SS=LUM(K,JR)
- CALL SECT(X,Y,K,JR,KUT)
- IF(KUT.EQ.1) GOTO 1550
- 1535 CALL SECT(X,Y,K,J,KUT)
- IF(KUT.NE.1) GOTO 1540
- SS=LUM(K,J)
- GOTO 1550
- 1540 CONTINUE
- C HITS THE SKY, (OR GROUND IF Y POINTS BELOW HORIZ)
- 1530 SS=ZENL*RLPZ(ICLD,Y)
- 1550 HI=HI+TT*SS*C(IMU,21)
- KMAX=NUM(I)
- DO 1500 K=1,KMAX
- 1500 LUMI(I,K)=LUMI(I,K)+2.*(1.-ALPHA(I)*(1/ISD(I)))*HI
- C
- C OUTSIDE ILLUMINATION ON INSIDE NODES
- C (INCLUDES INSIDE LUMINANCE OF WINDOWS, IN PARTICULAR DIFFUSING WINDOWS)
- C
- 1600 DO 1750 I=1,NTS
- KMAXI=NUM(I)
- FRAC=RHO(1,I)/PI
- DO 1750 J=1,N1
- C CAN I SEE J?
- IF(IOB(1,I,J).LT.0) GOTO 1750
- KMAXJ=NUM(J)
- K=IDS(J)
- IF(K.GT.0.AND.J.LE.NC) GOTO 1610
- IF(K.GT.0.AND.ISD(J).EQ.1) GOTO 1610
- C AUXILIARY DATA FOR COMPUTER EFFICIENCY, FOR CASE OF NO OUTSIDE ILLUMINATION
- C POSSIBLE ON THAT NODE
- K=4
- LUM(4,1)=0.
- K1=30
- K2=30
- KOB(4,I,30)=-1
- GOTO 1620
- 1610 K1=1
- K2=NW(K)
- 1620 IF(IOB(1,I,J).GT.0) IIOB=IOB(1,I,J)
- C THE FOLLOWING ALGORITHMS ARE FOR CASES WITH & WITHOUT INTERNAL OBSTRUCTORS
- DO 1660 KI=1,KMAXI
- C START CALCULATIONS FOR NODE KI ON SURFACE I
- DO 1630 L=1,3
- 1630 X(L)=XN(I,KI,L)
- HIT=0.
- DO 1642 KJ=1,KMAXJ
- C DIRECTION, COSINES*S, AND DISTANCE-SQUARED TO NODE KJ ON J (WINDOW)
- SCB1=0.
- SCB2=0.
- SSQ=0.
- DO 1650 L=1,3
- Y(L)=XN(J,KJ,L)-X(L)
- SCB1=SCB1+Y(L)*LL(1,I,L+6)
- SCB2=SCB2-Y(L)*LL(1,J,L+6)
- 1650 SSQ=SSQ+Y(L)*Y(L)
- IF(IOB(1,I,J).EQ.0) GOTO 1680
- C ANY INTERNAL OBSTRUCTORS IN THE WAY?
- DO 1710 IO=1,IIOB
- JO=JOB(I,J,IO)
- CALL SECT(X,Y,1,JO,KUT)
- IF(KUT.EQ.1) GOTO 1642
- 1710 CONTINUE
- 1680 S=SQRT(SSQ)
- DO 1675 L=1,3
- 1675 Y(L)=Y(L)/S
- ICOS1=1.+SCB1/S
- ICOS2=1.+SCB2/S
- C CONFIGURATION FACTOR (CORRECTED BY FUDGE FACTOR FOR CLOSE NODES)
- FIJ=ICOS1*ICOS2*SCB1*SCB2/(SSQ*SSQ)*AIK(J,KJ)
- FIJ=FIJ/(1.+.6*FIJ*FIJ)
- C ASSUME OUTSIDE-WINDOW-WALL LUMINANCE FOR WINDOW FRAME
- HI=LUM(K,1)
- CB2=SCB2/S
- C DOES RAY GET TO THE OUTSIDE?
- CALL SECT(X,Y,1,J+NTS,KUT)
- SDM=1.
- IF(IOB(1,I,J).LE.0.AND.KUT.NE.1) GOTO 1640
- IF(KUT.NE.1) GOTO 1635
- C DOES RAY THROUGH WINDOW HIT ANY OUTSIDE SURFACE?
- DO 1670 JKL=K1,K2
- JK=JKL
- IF(KOB(K,I,JK)) 1670,1625,1615
- 1615 JKK=KKOB(K,I,JK)
- CALL SECT(X,Y,K,JKK,KUT)
- IF(KUT.NE.1) GOTO 1625
- JK=JKK
- GOTO 1605
- 1625 CALL SECT(X,Y,K,JK,KUT)
- IF(KUT.NE.1) GOTO 1670
- 1605 HI=LUM(K,JK)
- IF(ICLD.NE.2.OR.KSUN(K,JK).NE.1) GOTO 1635
- C IS POINT ON OUTSIDE SURFACE IN SUN OR IN SHADE?
- C INTERPOLATE OUTSIDE LUMINANCES IF CLOSE TO SUN/SHADE DIVIDE
- II=JK
- KM1=K-1
- DO 1655 K3=1,KM1
- 1655 II=II+NW(K3)
- TL=LUM(K,JK)-DSOL(K,JK)
- TH=LUM(K,JK)+FS(II)*DSOL(K,JK)
- ETAM=YDP/X0(K,JK,7)
- XPP=X0(K,JK,4)-(X0(K,JK,4)-X0(K,JK,6)+X0(K,JK,5))*ETAM
- ETAN=(XDP-X0(K,JK,5)*ETAM)/XPP
- TY=10*ETAM+1
- LY=TY
- TX=10*ETAN+1
- LX=TX
- F1=KD(II,LY,LX)+(TY-LY)*(KD(II,LY+1,LX)-KD(II,LY,LX))
- F2=KD(II,LY,LX+1)+(TY-LY)*(KD(II,LY+1,LX+1)-KD(II,LY,LX+1))
- PART=(F1+(TX-LX)*(F2-F1))
- HI=TL+PART*(TH-TL)
- GOTO 1635
- 1670 CONTINUE
- C HITS SKY, (OR GROUND IF Y POINTS BELOW HORIZ)
- HI=ZENL*RLPZ(ICLD,Y)
- C ANY OVERHANG IN THE WAY?
- 1635 IF(IOH(J).EQ.0) GOTO 1640
- II1=ISTART(J)
- II2=ISTART(J+1)-1
- DO 1645 II=II1,II2
- CALL SECT(X,Y,NOH,II,KUT)
- IF(KUT.NE.1) GOTO 1645
- HI=LUM(NOH,II)+OHTAU(J)*HI*(2-KOH(J))
- GOTO 1640
- 1645 CONTINUE
- C LUMINANCE CONTRIBUTION FROM OUTSIDE (HI) AND WINDOW ITSELF
- 1640 HIT=HIT+(HI*TAUB(J,CB2)*ALPHA(J)*(1/ISD(J))*SDM+LUMI(J,KJ))*FIJ
- 1642 CONTINUE
- 1660 LUMI(I,KI)=LUMI(I,KI)+FRAC*HIT
- 1750 CONTINUE
- C
- C LUMINANCES FOR INTERNAL REFLECTIONS
- C
- C KEEP DISTINCTION BETWEEN TOTAL (LUMF) AND EXTERNAL CONTRIBUTION (LUMI)
- DO 1760 I=1,NT
- KMAX=NUM(I)
- DO 1760 K=1,KMAX
- 1760 LUMF(I,K)=LUMI(I,K)
- C
- C GO THROUGH DESIRED NUMBER OF ITERATIONS
- DO 2200 ITER=1,NUMIT
- DO 1900 I=1,NT
- C IF WINDOW-REFLECTANCE IS SMALL, ITS CONTRIBUTION IS NEGLECTED
- C (FOR COMPUTER EFFICIENCY)
- C THE ALGORITHMS BELOW ARE BASICALLY THE SAME AS FOR OUTSIDE/WINDOW LUMINANCE
- C EFFECTS COMMENTED ON ABOVE
- IF(RHO(1,I).LE..15) GOTO 1900
- FRAC=RHO(1,I)/PI
- KMAXI=NUM(I)
- DO 1805 KI=1,KMAXI
- 1805 DELF(KI)=0.
- DO 1890 J=N11,NT
- KMAXJ=NUM(J)
- IF(IOB(1,I,J)) 1890,1855,1850
- C
- 1850 IIOB=IOB(1,I,J)
- 1855 DO 1880 KI=1,KMAXI
- DO 1860 L=1,3
- 1860 X(L)=XN(I,KI,L)
- DO 1880 KJ=1,KMAXJ
- SCB1=0.
- SCB2=0.
- SSQ=0.
- DO 1870 L=1,3
- Y(L)=XN(J,KJ,L)-X(L)
- SCB1=SCB1+Y(L)*LL(1,I,L+6)
- SCB2=SCB2-Y(L)*LL(1,J,L+6)
- 1870 SSQ=SSQ+Y(L)*Y(L)
- IF(IOB(1,I,J).EQ.0) GOTO 1877
- DO 1875 IO=1,IIOB
- CALL SECT(X,Y,1,JOB(I,J,IO),KUT)
- IF(KUT.EQ.1) GOTO 1880
- 1875 CONTINUE
- 1877 ICOS1=1.+SCB1/(1.+SSQ)
- ICOS2=1.+SCB2/(1.+SSQ)
- FIJ=SCB1*SCB2/(SSQ*SSQ)*AIK(J,KJ)*ICOS1*ICOS2
- FIJ=FIJ/(1.+.6*FIJ*FIJ)
- DELF(KI)=DELF(KI)+FRAC*FIJ*LUMF(J,KJ)
- 1880 CONTINUE
- 1890 CONTINUE
- DO 1895 KI=1,KMAXI
- C ITERATION FINISHED FOR THIS SURFACE, IMPROVE VALUES FOR LUMF
- 1895 LUMF(I,KI)=LUMI(I,KI)+DELF(KI)
- 1900 CONTINUE
- 2200 CONTINUE
- C
- C CALCULATION OF ILLUMINATION AND DAYLIGHT FACTORS FOR WORKING SURFACE NODES
- C
- C ALGORITHMS ARE THE SAME AS FOR INTERNAL REFLECTIONS, BUT NO ITERATION,
- C BECAUSE OF THEIR IMPORTANCE, CONFIGURATION FACTORS FOR CLOSE NODES
- C ARE CALCULATED MORE ACCURATELY
- DO 1995 I=NT1,NTS
- KMAXI=NUM(I)
- DO 1905 KI=1,KMAXI
- 1905 DELF(KI)=0.
- DO 1990 J=N11,NT
- KMAXJ=NUM(J)
- IF(IOB(1,I,J)) 1990,1910,1950
- 1950 IIOB=IOB(1,I,J)
- 1910 DO 1980 KI=1,KMAXI
- DO 1960 L=1,3
- 1960 X(L)=XN(I,KI,L)
- DO 1980 KJ=1,KMAXJ
- SCB1=0.
- SCB2=0.
- SSQ=0.
- DO 1970 L=1,3
- Y(L)=XN(J,KJ,L)-X(L)
- SCB1=SCB1+Y(L)*LL(1,I,L+6)
- SCB2=SCB2-Y(L)*LL(1,J,L+6)
- 1970 SSQ=SSQ+Y(L)*Y(L)
- IF(IOB(1,I,J).EQ.0) GOTO 1977
- DO 1975 IO=1,IIOB
- CALL SECT(X,Y,1,JOB(I,J,IO),KUT)
- IF(KUT.EQ.1) GOTO 1980
- 1975 CONTINUE
- 1977 ICOS1=SCB1/(1.+SSQ)+1.
- ICOS2=SCB2/(1.+SSQ)+1.
- FIJ=ICOS1*ICOS2*SCB1*SCB2/(SSQ*SSQ)*AIK(J,KJ)
- IF(AIK(J,KJ)/SSQ.LT.1.) GOTO 2160
- KKJ=KJ
- 2100 L1=(KKJ-1)/NM(J)
- L2=KKJ-L1*NM(J)
- IF(J.LE.N2) GOTO 2140
- ETA=1.-(2.*L1+1.)/(2.*NN(J))
- XSI=(2.*L2-1.)/(2.*NM(J))
- CC=X0(1,J,4)-(X0(1,J,4)+X0(1,J,5)-X0(1,J,6))*ETA
- XJP=X0(1,J,5)*ETA+CC*XSI
- YJP=X0(1,J,7)*ETA
- XYZ=0.
- DO 2150 L=1,3
- 2150 XYZ=XYZ+X0(1,J,L)+LL(1,J,L)*XJP+LL(1,J,L+3)*YJP-XN(J,KJ,L)
- IF(ABS(XYZ).LT.1E-4) GOTO 2140
- KKJ=KKJ+1
- GOTO 2100
- 2140 FIJ=0.
- DO 2110 J1=1,3
- ETA=1.-(2.*L1-(.5-J1)/1.5)/(2.*NN(J))
- CC=X0(1,J,4)-(X0(1,J,4)+X0(1,J,5)-X0(1,J,6))*ETA
- AP=X0(1,J,7)*CC/(9.*NN(J)*NM(J))
- DO 2110 J2=1,3
- XSI=(2.*L2+(.5-J2)/1.5)/(2.*NM(J))
- SCB1=0.
- SCB2=0.
- SSQ=0.
- XJP=X0(1,J,5)*ETA+CC*XSI
- YJP=X0(1,J,7)*ETA
- DO 2120 L=1,3
- Y(L)=X0(1,J,L)+LL(1,J,L)*XJP+LL(1,J,L+3)*YJP-X(L)
- SCB1=SCB1+Y(L)*LL(1,I,L+6)
- SCB2=SCB2-Y(L)*LL(1,J,L+6)
- 2120 SSQ=SSQ+Y(L)*Y(L)
- ICOS1=SCB1/(1.+SSQ)+1.
- ICOS2=SCB2/(1.+SSQ)+1.
- 2110 FIJ=FIJ+ICOS1*ICOS2*SCB1*SCB2/(SSQ*SSQ)*AP
- 2160 DELF(KI)=DELF(KI)+FIJ*LUMF(J,KJ)
- 1980 CONTINUE
- 1990 CONTINUE
- C ADD THE INTERNAL-REFLECTION CONTRIBUTION TO THE WORKING SURFACE
- C SURFACE ILLUMINATION (WHICH SO FAR CONTAINS DIRECT SUN AND
- C CONTRIBUTION FROM OUTSIDE (INCLUDING SKY, EXTERNAL REFLECTIONS,
- C AND DIFFUSE WINDOW LIGHT, SUCH AS TRANSMISSION THROUGH CURTAINS,
- C SLATTED BLINDS, DIFFUSING WINDOWS)
- DO 1995 KI=1,KMAXI
- LUMF(I,KI)=LUMI(I,KI)+DELF(KI)/PI
- 1995 DAYF(I-NT,KI)=100.*(LUMF(I,KI)-WSOL(I-NT,KI))/SKYC
- C
- C PRINT WALL NODAL DATA AND LUMINANCES
- C
- 1405 WRITE(7,6250) SOLC,SKYC,ZENL
- IF(IWRITE.EQ.1) GOTO 1440
- C
- C PRINTING OF LIGHT EXCHANGE FACTORS IN OUTSIDE ENCLOSURES
- C
- DO 1410 K=2,NSP1
- NMW=NW(K)
- NM1=NMW+1
- K4=K-1
- WRITE(7,6560)K4
- WRITE(7,6570)(J,J=1,NM1)
- WRITE(7,6572)
- DO 1410 I=1,NMW
- 1410 WRITE(7,6580) I,(F(K,I,J),J=1,NM1)
- C
- C PRINTING OF OUTSIDE LUMINANCES
- C
- DO 1420 K=1,NSS
- NKT=NW(K+1)
- WRITE(7,7010)K
- WRITE(7,7020)(I,I=1,NKT)
- 1420 WRITE(7,6200)(LUM(K+1,I),I=1,NKT)
- DO 1415 IW=1,N1
- IF(IOH(IW).EQ.0) GOTO 1415
- K=IDS(IW)
- II1=ISTART(IW)
- II2=ISTART(IW+1)-1
- WRITE(7,6041) IW
- IF(IOH(IW).EQ.1) WRITE(7,6042)(LUM(NOH,II),II=II1,II2)
- IF(IOH(IW).EQ.2) WRITE(7,6043)(LUM(NOH,II),II=II1,II2)
- IF(IOH(IW).EQ.3) WRITE(7,6044)(LUM(NOH,II),II=II1,II2)
- IF(IOH(IW).EQ.4) WRITE(7,6045)(LUM(NOH,II),II=II1,II2)
- IF(IOH(IW).EQ.5) WRITE(7,6046)(LUM(NOH,II),II=II1,II2)
- 1415 CONTINUE
- WRITE(7,6710)
- DO 1400 I=1,NT
- KP=NM(I)
- KS=1+(KP-1)/12
- L=NN(I)
- DO 1400 L1=1,L,KS
- KL=1+(L1-1)*KP
- KR=L1*KP
- IF(KL.GT.NUM(I)) GOTO 1440
- IF(KR.GT.NUM(I)) KR=NUM(I)
- WRITE(7,6720)(K,K=KL,KR,KS)
- WRITE(7,6730)I,(XN(I,K,1),K=KL,KR,KS)
- WRITE(7,6740)(XN(I,K,2),K=KL,KR,KS)
- WRITE(7,6750)(XN(I,K,3),K=KL,KR,KS)
- WRITE(7,6760)(AIK(I,K),K=KL,KR,KS)
- 1400 WRITE(7,6770)(LUMF(I,K),K=KL,KR,KS)
- C
- C PRINT WORKING SURFACE NODAL DATA, ILLUMINATION, DAYLIGHT FACTOR
- C
- 1440 WRITE(7,6715)
- WRITE(7,6716)
- IF(INID.EQ.1)WRITE(7,6717)
- IF(INID.EQ.1)NT1=NWINDO+7
- DO 1430 I=NT1,NTS
- KP=NM(I)
- KS=1+(KP-1)/12
- L=NN(I)
- DO 1430 L1=1,L,KS
- KL=1+(L1-1)*KP
- KR=L1*KP
- WRITE(7,6720)(K,K=KL,KR,KS)
- IF(INID.EQ.1)WRITE(7,6730)I,(ABS(XN(I,K,1)),K=KL,KR,KS)
- IF(INID.EQ.2)WRITE(7,6730)I,(XN(I,K,1),K=KL,KR,KS)
- WRITE(7,6740)(XN(I,K,2),K=KL,KR,KS)
- WRITE(7,6750)(XN(I,K,3),K=KL,KR,KS)
- WRITE(7,6773) (LUMI(I,K),K=KL,KR,KS)
- WRITE(7,6774) (DELF(K)/PI,K=KL,KR,KS)
- WRITE(7,6775)(LUMF(I,K),K=KL,KR,KS)
- IF(INID.EQ.1)WRITE(7,6780)(DAYF(1,K),K=KL,KR,KS)
- 1430 IF(INID.EQ.2)WRITE(7,6780)(DAYF(I-NT,K),K=KL,KR,KS)
- IF(IPLOT.EQ.0) GOTO 3400
- C
- C SET UP DATA FOR THE PLOTTING ROUTINE; CHOOSE LOCAL ORIGIN OF FIRST
- C WORKING SURFACE AS OVERALL ORIGIN FOR PLOT, AND STORE COORDINATES
- C FOR CORNERPOINTS@ (MUST BE RECTANGULAR)
- XY(1,1,1)=0.
- XY(1,1,2)=0.
- XY(1,2,1)=X0(1,NT1,5)
- XY(1,2,2)=X0(1,NT1,7)
- XY(1,3,1)=X0(1,NT1,6)
- XY(1,3,2)=X0(1,NT1,7)
- XY(1,4,1)=X0(1,NT1,4)
- XY(1,4,2)=0.
- C
- C SUBTRACT DIRECT SUN FROM ILLUMINATION FOR PLOTTING PURPOSES
- C AND RE-ORDER NODES
- KMAX=NUM(NT1)
- DO 3000 K=1,KMAX
- K1=(K-1)/NM(NT1)
- K2=K+(NN(NT1)-2*K1-1)*NM(NT1)
- 3000 LUMI(1,K)=LUMF(NT1,K2)-WSOL(1,K2)
- C
- C FIND ENDPOINTS FOR WINDOW PROJECTION ON FIRST WORKING SURFACE
- DO 2900 I=1,N1
- DO 2800 L=1,3
- PLTTMP(1,L)=X0(1,I,L)
- 2800 PLTTMP(2,L)=PLTTMP(1,L)+LL(1,I,L)*X0(1,I,6)+LL(1,I,L+3)*X0(1,I,7)
- DO 2900 I4=1,2
- DO 2900 I2=1,2
- XYW(I,I4,I2)=0.
- DO 2900 L=1,3
- L2=L+3*(I2-1)
- 2900 XYW(I,I4,I2)=XYW(I,I4,I2)+(PLTTMP(I4,L)-X0(1,NT1,L))*LL(1,NT1,L2)
- C
- IF(NWS.EQ.1) GOTO 3200
- C DO THE SAME AS ABOVE FOR ANY ADDITIONAL WORKING SURFACES
- C WITH RESPECT TO LOCAL AXES OF FIRST WORK SFC
- DO 3100 IW=2,NWS
- DO 3010 L=1,3
- PLTTMP(1,L)=X0(1,NT+IW,L)
- PLTTMP(2,L)=PLTTMP(1,L)+LL(1,NT+IW,L)*X0(1,NT+IW,5)+
- 1 LL(1,NT+IW,L+3)*X0(1,NT+IW,7)
- PLTTMP(3,L)=PLTTMP(1,L)+LL(1,NT+IW,L)*X0(1,NT+IW,6)+
- 1 LL(1,NT+IW,L+3)*X0(1,NT+IW,7)
- 3010 PLTTMP(4,L)=PLTTMP(1,L)+LL(1,NT+IW,L)*X0(1,NT+IW,4)
- C
- DO 3020 I4=1,4
- DO 3020 I2=1,2
- XY(IW,I4,I2)=0.
- DO 3020 L1=1,3
- LI2=L1+(I2-1)*3
- 3020 XY(IW,I4,I2)=XY(IW,I4,I2)+(PLTTMP(I4,L1)-X0(1,NT1,L1))
- 1 *LL(1,NT1,LI2)
- C
- KMAX=NUM(NT+IW)
- DO 3100 K=1,KMAX
- K1=(K-1)/NM(NT+IW)
- K2=K+(NN(NT+IW)-2*K1-1)*NM(NT+IW)
- 3100 LUMI(IW,K)=LUMF(NT+IW,K2)-WSOL(IW,K2)
- C
- C THESE PLOTTING DATA ARE WRITTEN INTO A DATA FILE PLDAT WHICH
- C UPON JOB COMPLETION IS PERMANENTLY PLACED ON PSS-DISK
- C
- 3200 WRITE(8,8200) NT,NWS,ICLD,N0,N1,IPLOT
- WRITE(8,8200)(NM(I),NN(I),I=NT1,NTS)
- WRITE(8,8100) WSOR,SOLC,SKYC
- IF(ICLD.EQ.2.OR.ICLD.EQ.4) WRITE(8,8100) HSUND,PSID
- WRITE(8,8100) (((XYW(I,I4,I2),I2=1,2),I4=1,2),I=1,N1)
- DO 3150 I=1,NWS
- KMAX=NUM(NT+I)
- WRITE(8,8100)(LUMI(I,K),K=1,KMAX)
- 3150 WRITE(8,8100)((XY(I,I4,I2),I2=1,2),I4=1,4)
- IF(ICLD.EQ.1.OR.ICLD.EQ.3) GOTO 3400
- C
- C ADDITIONAL PLOTTING DATA ARE GENERATED IF DIRECT SUN PENETRATES
- C INTO ENCLOSURE, VZ. THE IMAGE OF THE SUNNY AREA ON THE WORKING SURFACE
- C
- DO 3280 I=1,N0
- DO 3205 IP=1,4
- XSUN(I,IP,1)=0.
- 3205 XSUN(I,IP,2)=0.
- ANG(I)=0.
- IF(ISUN(I).EQ.0) GOTO 3280
- DO 3210 L=1,3
- PLTTMP(1,L)=X0(1,I,L)
- PLTTMP(2,L)=PLTTMP(1,L)+LL(1,I,L)*X0(1,I,5)+LL(1,I,L+3)
- 1 *X0(1,I,7)
- PLTTMP(3,L)=PLTTMP(1,L)+LL(1,I,L)*X0(1,I,6)+LL(1,I,L+3)
- 1 *X0(1,I,7)
- 3210 PLTTMP(4,L)=PLTTMP(1,L)+LL(1,I,L)*X0(1,I,4)
- IDENT=0
- DO 3250 IP=1,4
- DO 3220 L=1,3
- X(L)=PLTTMP(IP,L)
- 3220 Y(L)=X(L)-(DW(I)+1E-3)*LL(1,I,L+6)
- IF(IDENT.NE.0) GOTO 3240
- CALL SECT(X,LS,1,I+NTS,KUT)
- IF(KUT.EQ.1) IDENT=IP
- 3240 CALL SECT(X,LS,1,NT1,KUT)
- XSUN(I,IP,1)=XDP
- XSUN(I,IP,2)=YDP
- CALL SECT(Y,LS,1,NT1,KUT)
- 3250 CONTINUE
- IAP2=IDENT+2
- IF (IAP2.GT.4) IAP2=IAP2-4
- IIII=IDENT+1
- IF (IIII.GT.4) IIII=IIII-4
- JJJJ=IDENT+3
- IF (JJJJ.GT.4) JJJJ=JJJJ-4
- C
- DX=0.
- DY=0.
- DO 3260 L=1,3
- DX=DX+LS(L)*LL(1,NT1,L)
- 3260 DY=DY+LS(L)*LL(1,NT1,L+3)
- ANG(I)=-180./PI*ATAN(DY/(DX+1E-8))
- DO 3300 IP=1,ISNGRD
- DO 3300 L=1,ISNGRD
- 3300 IMG(I,IP,L)=0
- ICNR(I,1)=IDENT
- ICNR(I,2)=IIII
- ICNR(I,3)=JJJJ
- ICNR(I,4)=IAP2
- DO 3302 L=1,3
- DO 3302 K=1,4
- PLTTMP(K,L)=XSUN(I,ICNR(I,K),1)*LL(1,NT1,L)
- 2 +XSUN(I,ICNR(I,K),2)*LL(1,NT1,L+3)
- 2 +X0(1,NT1,L)
- 3302 CONTINUE
- DO 3390 M=1,ISNGRD
- DO 3390 N=1,ISNGRD
- DO 3304 L=1,3
- X(L)=(PLTTMP(3,L)-PLTTMP(1,L))*(M-1)/(ISNGRD-1)
- 1 + PLTTMP(1,L)
- DUMMY=(PLTTMP(4,L)-PLTTMP(2,L))*(M-1)/(ISNGRD-1)
- 1 + PLTTMP(2,L)
- X(L)=(DUMMY-X(L))*(N-1)/(ISNGRD-1) + X(L)
- 3304 CONTINUE
- CALL SECT(X,LS,1,I+NTS,KUT)
- IF (KUT.NE.1) GOTO 3390
- DO 3320 IWS=1,NWS
- IWSN=NT+IWS
- IIOB=IOB(1,IWSN,I)
- IF (IIOB.LT.1) GO TO 3320
- DO 3310 K=1,IIOB
- JO=JOB(IWSN,I,K)
- CALL SECT(X,LS,1,JO,KUT)
- IF (KUT.NE.1) GO TO 3310
- IF ((YDP+X0(1,JO,3)).LT.X0(1,IWSN,3)) GOTO 3310
- IF (I.NE.4) GOTO 3390
- GOTO 3390
- 3310 CONTINUE
- 3320 CONTINUE
- IF (IOH(I).EQ.0 .OR. KOH(I).EQ.1) GO TO 3370
- IOHK1=ISTART(I)
- IOHK2=ISTART(I+1)-1
- DO 3350 IOHK=IOHK1,IOHK2
- CALL SECT(X,LS,NOH,IOHK,KUT)
- IF (KUT.EQ.1) GO TO 3390
- 3350 CONTINUE
- 3370 K=IDS(I)
- IF (K.LT.1) GO TO 3385
- K2=NW(K)
- DO 3380 JK=1,K2
- CALL SECT(X,LS,K,JK,KUT)
- IF (KUT.EQ.1) GO TO 3390
- 3380 CONTINUE
- 3385 IMG(I,M,N)=1
- 3390 CONTINUE
- 3280 CONTINUE
- WRITE(8,8100)(((XSUN(I,IP,J),J=1,2),IP=1,4),ANG(I),I=1,N0)
- WRITE(8,8200) (((IMG(I,M,N),N=1,ISNGRD),M=1,ISNGRD),
- 2 (ICNR(I,MM),MM=1,4),I=1,N0)
- C
- 3400 CONTINUE
- STOP
- C
- C6005 FORMAT(1H1,10X,19HINPUT DATA FOR ROOM/11X,19H*******************/)
- 6005 format(1H1,10X,'INPUT DATA FOR ROOM',/,11X,'*******************',
- 1/)
- 6000 FORMAT(/5X,33HNUMBER OF CLEAR WINDOWS ,I3/
- 1 5X,33H SHEER CURTAIN WINDOWS ,I3/
- 2 5X,33H DIFFUSE WINDOWS ,I3/
- 3 5X,33H WALLS WITHOUT CUT-OUTS ,I3/
- 4 5X,33H WALLS WITH CUT-OUTS ,I3/
- 5 5X,33H WORKING SURFACES ,I3/
- 6 5X,33H OUTSIDE ENCLOSURES ,I3///)
- 6010 FORMAT( 5X,7HSURFACE,I3/5X,10H----------//
- 1 10X,4HX0 =,F6.2,6H Y0 =,F6.2,6H Z0 =,F6.2/
- 2 10X,4HX1 =,F6.2,6H X2 =,F6.2,6H X3 =,F6.2,5H Y =,F6.2/
- 3 10X,7HBETAX =,F6.1,8H PSIX =,F6.1,9H BETAY =,F6.1,
- 4 8H PSIY =,F6.1/
- 5 10X,14HREFLECTANCE =,F4.1)
- 6020 FORMAT(10X,15HGRID DIMENSION=,I3,4H BY,I3//)
- 6030 FORMAT(10X,23HWINDOW SURROUNDING NO.=,I3,16H MAINT.FACTOR =,F4.2/
- 1 10X,12HTAU-NORMAL =,F4.2,20H WINDOW THICKNESS =,F6.2//)
- 6031 FORMAT(15X,29HWINDOW HAS AN OVERHANG ON TOP/
- 1 20X,6HWIDTH=,F4.1,18H DIST.FROM GLASS=,F4.1,15H REFLECTAN
- 2CE =,F4.2)
- 6032 FORMAT(15X,31HWINDOW HAS OVERHANGS BOTH SIDES/
- 1 20X,6HWIDTH=,F4.1,18H DIST.FROM GLASS=,F4.1,15H REFLECTAN
- 2CE =,F4.2)
- 6033 FORMAT(15X,34HWINDOW HAS OVERHANG ON BOTTOM ONLY/
- 1 20X,6HWIDTH=,F4.1,18H DIST.FROM GLASS=,F4.1,15H REFLECTAN
- 2CE =,F4.2)
- 6034 FORMAT(15X,37HWINDOW HAS OVERHANGS ON TOP AND SIDES/
- 1 20X,6HWIDTH=,F4.1,18H DIST.FROM GLASS=,F4.1,15H REFLECTAN
- 2CE =,F4.2)
- 6035 FORMAT(15X,38HWINDOW HAS OVERHANGS ON ALL FOUR SIDES/
- 1 20X,6HWIDTH=,F4.1,18H DIST.FROM GLASS=,F4.1,15H REFLECTAN
- 2CE =,F4.2)
- 6064 FORMAT(10X,47HWINDOW HAS SHEER CURTAIN, SHEER CURTAIN FACTOR=,
- 1 F6.2//)
- 6067 FORMAT(10X,40HDIRECT-SUN TRANSMISSION FRACTION, ALPHA )
- 6068 FORMAT(15X,6HWINDOW,I3,8H ALPHA=,F5.3/)
- 6036 FORMAT(15X,18HOVERHANG IS OPAQUE//)
- 6037 FORMAT(15X,45HOVERHANG IS SEMI-TRANSPARENT, TRANSMISSIVITY=,F4.2
- 1//)
- 6038 FORMAT(15X,40HOVERHANG IS TRANSLUCENT, TRANSMISSIVITY=,F4.2//)
- 6040 FORMAT(5X,15HSURROUNDING NO.,I3/5X,18H******************//
- 1 10X,23HNUMBER OF OPAQUE WALLS ,I3/)
- 6041 FORMAT(//2X,37HINSIDE-OVERHANG LUMINANCES FOR WINDOW,I2,
- 1 15H (FOOT-LAMBERT)/
- 2 2X,39H***************************************,
- 3 15H***************/)
- 6042 FORMAT(10X,10HTOP ,F7.1)
- 6043 FORMAT(10X,10HLEFT SIDE ,F7.1/
- 1 10X,10HRIGHT SIDE,F7.1)
- 6044 FORMAT(10X,10HBOTTOM ,F7.1)
- 6045 FORMAT(10X,10HTOP ,F7.1/
- 1 10X,10HLEFT SIDE ,F7.1/
- 2 10X,10HRIGHT SIDE,F7.1)
- 6046 FORMAT(10X,10HTOP ,F7.1/
- 1 10X,10HLEFT SIDE ,F7.1/
- 2 10X,10HRIGHT SIDE,F7.1/
- 3 10X,10HBOTTOM ,F7.1)
- 6050 FORMAT(1H1////5X,30HDIRECT HORIZONTAL INSOLATION ,F6.2,1X,
- 1 16HWATTS PER SQ.FT./5X,18HLUMINOUS EFFICACY ,F6.1,1X,
- 2 15HLUMENS PER WATT/5X,30HDIFFUSE HORIZONTAL INSOLATION ,
- 3 F6.2,1X,16HWATTS PER SQ.FT./5X,18HLUMINOUS EFFICACY ,
- 4 F6.1,1X,15HLUMENS PER WATT/
- 5 5X,22HSKY MODEL ,I3/
- 6 5X,20HGROUND REFLECTANCE ,F4.2)
- 6070 FORMAT(//5X,15HWORKING SURFACE,I3/5X,18H******************//
- 1 10X,4HX0 =,F6.2,6H Y0 =,F6.2,6H Z0 =,F6.2/
- 2 10X,4HX1 =,F6.2,6H X2 =,F6.2,6H X3 =,F6.2,5H Y =,F6.2/
- 3 10X,7HBETAX =,F6.1,8H PSIX =,F6.1,9H BETAY =,F6.1,
- 4 8H PSIY =,F6.1/
- 5 10X,15HGRID DIMENSION=,I3,4H BY,I3//)
- 6100 FORMAT(///10X,46HSKY LUMINANCE DETERMINED BY GEOGRAPHICAL DATA /
- A 15X,24HLATITUDE ,F6.1,5H DEG./
- B 15X,24HLONGITUDE ,F6.1,5H DEG./
- C 15X,24HTIME ZONE ,I4/
- D 15X,24HALTITUDE ,F6.1,7H METERS/
- E 15X,24HSKY MODEL ,I4/
- F 15X,24HGROUND REFLECTANCE ,F7.2)
- 6110 FORMAT( 15X,24HFIRST MONTH ,I4/
- A 15X,24HLAST MONTH ,I4/
- B 15X,24HINCREMENT BETWEEN MONTHS,I4/
- C 15X,24HDAY OF MONTH ,I4/
- D 15X,24HFIRST TIME OF DAY ,F6.1,5H HRS./
- E 15X,24HLAST TIME OF DAY ,F6.1,5H HRS./
- F 15X,24HTIME INCREMENT ,F6.1,5H HRS.)
- 6105 FORMAT(///10X,46HSKY LUMINANCE DETERMINED BY SUN POSITON DATA /
- A 15X,24HALTITUDE ANGLE ,F6.1,5H DEG./
- B 15X,24HAZIMUTH ANGLE ,F6.1,5H DEG./
- D 15X,24HALTITUDE OF STATION ,F6.1,7H METERS/
- E 15X,24HSKY MODEL ,I4/
- F 15X,24HGROUND REFLECTANCE ,F7.2)
- 6120 FORMAT(15X,45HMONTHLY VALUES FOR TURBIDITY AND COND.WATER../
- A 20X,20HMONTH C.W. TURB.)
- 6121 FORMAT(21X,I3,2F8.4)
- 6130 FORMAT(//,5X,7HMONTH =,I3,10X,6HTIME =,F5.1,5H HRS./
- 1 5X,36H====================================)
- 6140 FORMAT(5X,20HSUN ALTITUDE ANGLE =,F6.1,/
- 15X,19HSUN AZIMUTH ANGLE =,F6.1,1X,27HDEG. OFF SOUTH TOWARDS EAST)
- 6200 FORMAT(7X,15F6.0)
- 6250 FORMAT(//10X,35HILLUMINANCE ON A HORIZONTAL SURFACE/
- 1 15X,16HSOLAR COMPONENT=,F8.0,12H FOOT-CANDLE/
- 2 15X,16HSKY COMPONENT=,F8.0,12H FOOT-CANDLE/
- 3 10X,17HZENITH LUMINANCE=,F8.0,1X,14H(FT.-LAMBERTS))
- 6300 FORMAT(1H1/15X,47H***********************************************/
- * 15X,47H* */
- 1 15X,47H* DAYLIGHT ILLUMINATION IN A RECTANGULAR ROOM */
- * 15X,47H* */
- 2 15X,47H***********************************************//
- 3 10X,33HROOM HAS A WIDTH (WINDOW WALL) OF,F5.1,6H UNITS/
- 4 10X,33H A DEPTH OF,F5.1,6H UNITS/
- 5 10X,33H AND A HEIGHT OF,F5.1,6H UNITS/
- 6 10X,47HROOM ORIENTATION (FROM OUTWARD WINDOW NORMAL) =,
- 7 F5.1,15H DEG. OFF SOUTH/)
- 6302 FORMAT(10X,8HROOM HAS,I2,28H WINDOW(S) IN THE FRONT WALL)
- 6303 FORMAT(10X,8HROOM HAS,I2,37H WINDOW(S) IN THE CEILING (SKYLIGHTS))
- 6310 FORMAT(/10X,10HWINDOW NO.,I2,3H IS,F6.2,14H UNITS WIDE BY,F6.2,
- 1 11H UNITS HIGH/15X,16HWINDOW CENTER IS,F6.2,
- 2 30H UNITS TO RIGHT OF WALL CENTER/
- 3 31X,F6.2,17H UNITS FROM FLOOR/
- 4 15X,24HWINDOW DISCRETIZATION IS,I3,3H BY,I3)
- 6311 FORMAT(15X,16HWINDOW TYPE IS ",I1,16H" (CLEAR WINDOW))
- 6312 FORMAT(15X,16HWINDOW TYPE IS ",I1,34H" (SHEER CURTAIN, CLEAR FRACT
- 1ION =,F4.2,1H))
- 6313 FORMAT(15X,16HWINDOW TYPE IS ",I1,20H" (DIFFUSING WINDOW))
- 6320 FORMAT(15X,23HMAINTENANCE FACTOR =,F4.2/
- 1 15X,23HWINDOW THICKNESS =,F4.2/
- 2 15X,23HWINDOW TRANSMISSIVITY =,F4.2/
- 3 15X,23HWINDOW REFLECTANCE =,F4.2)
- 6331 FORMAT(10X,32HFRONT WALL.. DISCRETIZATION,I3,3H BY,I3,
- 1 16H, REFLECTANCE =,F4.2)
- 6332 FORMAT(10X,32HLEFT SIDE.. DISCRETIZATION,I3,3H BY,I3,
- 1 16H, REFLECTANCE =,F4.2)
- 6333 FORMAT(10X,32HREAR WALL.. DISCRETIZATION,I3,3H BY,I3,
- 1 16H, REFLECTANCE =,F4.2)
- 6334 FORMAT(10X,32HRIGHT SIDE.. DISCRETIZATION,I3,3H BY,I3,
- 1 16H, REFLECTANCE =,F4.2)
- 6335 FORMAT(10X,32HCEILING.. DISCRETIZATION,I3,3H BY,I3,
- 1 16H, REFLECTANCE =,F4.2)
- 6336 FORMAT(10X,32HFLOOR.. DISCRETIZATION,I3,3H BY,I3,
- 1 16H, REFLECTANCE =,F4.2)
- 6337 FORMAT(10X,32HWORKING SURFACE.. DISCRETIZATION,I3,3H BY,I3,
- 1 13H, ELEVATION =,F5.2,6H UNITS)
- 6340 FORMAT(/10X,18HSUBJECT BUILDING../
- 1 15X,32HBUILDING WIDTH (FRONT WALL) =,F6.1,6H UNITS/
- 2 15X,32HBUILDING HEIGHT =,F6.1,6H UNITS/
- 3 15X,32HOFFSET TO RIGHT OF ROOM CENTER =,F6.1,6H UNITS/
- 4 15X,32H REFLECTANCE =,F7.2)
- 6350 FORMAT(/10X,13HOBSTRUCTION../
- 1 15X,32HOBSTRUCTION WIDTH =,F6.1,6H UNITS/
- 2 15X,32HOBSTRUCTION HEIGHT =,F6.1,6H UNITS/
- 3 15X,32HOFFSET TO RIGHT OF ROOM CENTER =,F6.1,6H UNITS/
- 4 15X,32HDISTANCE FROM SUBJECT BUILDING =,F6.1,6H UNITS/
- 5 15X,32H OBSTRUCTION REFLECTANCE =,F7.2)
- 6560 FORMAT(//2X,69HLIGHT EXCHANGE FACTORS FROM SURFACE I TO SURFACE J
- 1IN SURROUNDING NO.,I2,/2X,71H*************************************
- 2**********************************/)
- 6570 FORMAT(/7X,1HJ,15I8)
- 6572 FORMAT(4X,1HI)
- 6580 FORMAT(2X,I3,5X,15F8.4/)
- 6710 FORMAT(1H1//3X,71H************************************************
- 1***********************/
- 2 3X,71H* DATA FOR SURFACE NODES; I=SURFACE, K=NODE, X,Y,
- 3Z=COORDINATES (FT) */
- 4 3X,71H* A=AREA (SQFT), L=LUMINANC
- 5E (FT-LAMBERT) */
- 6 3X,71H***************************************************
- 7********************)
- 6715 FORMAT(1H1//3X,71H************************************************
- 1***********************/
- 2 3X,71H* DATA FOR WORKING SURFACE NODES; I=SURFACE, K=NODE
- 3-NO. */
- 4 3X,71H* X,Y,Z=COORDINATES,
- 5 */ )
- 6716 FORMAT( 3X,71H* S=ILLUMINANCE FROM EXTERNAL SOURCES (FOOT-CA
- 7NDLE) */
- 8 3X,71H* R=INTERNAL REFLECTED COMPONENT (FOOT-CANDLE)
- 9 */
- A 3X,71H* I=TOTAL ILLUMINANCE (FOOT-CANDLE), D=DAYLIGH
- BT FACTOR (PERCENT) */
- 6 3X,71H***************************************************
- 7********************)
- 6717 FORMAT(//10X,53HX = DISTANCE FROM FRONT WALL (PARALLEL TO FRONT WA
- 1LL)/
- 2 10X,64HY = DISTANCE FROM ROOM CENTER LINE (PERPENDICULAR
- 3TO FRONT WALL)/
- 4 14X,37HPOSITIVE VALUES (LEFT OF CENTER LINE)/
- 5 14X,38HNEGATIVE VALUES (RIGHT OF CENTER LINE)/
- 6 10X,24HZ = HEIGHT OF WORK PLANE)
- 6720 FORMAT(//3X,2H*K,12I10)
- 6730 FORMAT(3X,2HI*/I4,3H X,12F10.2)
- 6740 FORMAT(6X,1HY,12F10.2)
- 6750 FORMAT(6X,1HZ,12F10.2)
- 6760 FORMAT(6X,1HA,12F10.2)
- 6770 FORMAT(6X,1HL,12F10.2)
- 6773 FORMAT(6X,1HS,12F10.2)
- 6774 FORMAT(6X,1HR,12F10.2)
- 6775 FORMAT(6X,1HI,12F10.2)
- 6780 FORMAT(6X,1HD,12F10.2)
- 7010 FORMAT(//5X,41HLUMINANCE OF SURFACE I IN SURROUNDING NO.,I2,1X,14H
- 1(FT.-LAMBERTS)/5X,58H=============================================
- 2=============)
- 7020 FORMAT(/5X,1HI,15I6)
- 8000 FORMAT(2X,33HTHERE IS TOO MUCH DIRECT SUNLIGHT/
- 1 2X,35HAS COMPARED TO TOTAL HEMISPHERICAL,/
- 2 2X,20HEXECUTION TERMINATED)
- 8002 FORMAT(32HNO. OF WINDOWS EXCEEDS MAXIMUM 5)
- 8005 FORMAT(33HILLEGAL REFLECTANCE FOR SURFACE ,I2,
- 2 14H IN ENCLOSURE ,I2)
- 8007 FORMAT(38HNO. OF WORK SURFACES EXCEEDS MAXIMUM 3)
- 8008 FORMAT(35HNO. OF ENCLOSURES EXCEEDS MAXIMUM 2)
- 8010 FORMAT(41HNO. OF INDOOR SURFACES EXCEEDS MAXIMUM 30)
- 8011 FORMAT(44HNO. OF NODES EXCEEDS 400 FOR INDOOR SURFACE ,I2)
- 8012 FORMAT(40HILLEGAL REFLECTANCE FOR INDOOR SURFACE ,I2)
- 8014 FORMAT(44HILLEGAL SURFACE OCCUPYING CUTOUT IN SURFACE ,I2)
- 8020 FORMAT(29HILLEGAL ENCLOSURE FOR WINDOW ,I2)
- 8022 FORMAT(34HILLEGAL TRANSMISSIVITY FOR WINDOW ,I2)
- 8024 FORMAT(38HILLEGAL MAINTENANCE FACTOR FOR WINDOW ,I2)
- 8026 FORMAT(27HILLEGAL GROUND REFLECTANCE )
- 8030 FORMAT(54HTHICKNESS OF CONDENSABLE WATER OUT OF RANGE FOR MONTH ,
- 1 I2)
- 8032 FORMAT(45HTURBIDITY COEFFICIENT OUT OF RANGE FOR MONTH ,I2)
- 8034 FORMAT(41HILLEGAL OVERHANG REFLECTANCE FOR WINDOW ,I2)
- 8036 FORMAT(43HILLEGAL OVERHANG TRANSMISSIVITY FOR WINDOW ,I2)
- 8100 FORMAT(6F10.3)
- 8200 FORMAT(20I4)
- END
- FUNCTION C(K,NK)
- C THIS FUNCTION CALCULATES NEWTON-COTES COEFFICIENTS FOR NUMERICAL
- C QUADRATURE
- C=1.
- IF(NK.EQ.1)RETURN
- I=(K+1)/2-K/2
- A=1+2*(1-I)+((K+100)/102)-(K/NK)
- C=A/(3.*(NK-1.))
- RETURN
- END
- SUBROUTINE SECT(X,Y,K,J,KUT)
- C THIS ROUTINE CHECKS WHETHER A RAY GOING FROM X INTO DIRECTION Y CUTS
- C SURFACE J IN ENCLOSURE K FROM ITS FRONT SIDE (KUT=1) OR NOT (KUT=0)
- REAL X(3),Y(3),X0(4,30,7),LL(4,30,9)
- COMMON /BLK1/ X0,LL,XDP,YDP
- C
- C INTERSECTION POINT IN LOCAL COORDINATES
- BN=0.
- BD=0.
- DO 1 I=1,3
- BN=BN+(X(I)-X0(K,J,I))*LL(K,J,I+6)
- 1 BD=BD+ Y(I)*LL(K,J,I+6)
- BD=BD+1E-10+BD*1E-5
- B=BN/BD
- XDP=0.
- YDP=0.
- DO 2 I=1,3
- CC=X(I)-X0(K,J,I)-B*Y(I)
- XDP=XDP+CC*LL(K,J,I)
- 2 YDP=YDP+CC*LL(K,J,I+3)
- KUT=0
- C WITHIN CONFINES OF SURFACE?
- ETA=YDP/X0(K,J,7)
- IF(ETA.LT.0..OR.ETA.GT.1.) RETURN
- XI=(XDP-ETA*X0(K,J,5))/(X0(K,J,4)-(X0(K,J,4)-X0(K,J,6)+
- 1 X0(K,J,5))*ETA)
- IF(XI.LT.-1.E-5.OR.XI.GT.1.00001) RETURN
- C IS IT HITTING TOP OF SURFACE?
- KUT=1-(Y(1)*LL(K,J,7)+Y(2)*LL(K,J,8)+Y(3)*LL(K,J,9))*1E-4
- RETURN
- END
- SUBROUTINE CONFAC(J,NT,F)
- C THIS ROUTINE CALCULATES EXCHANGE FACTORS FOR ENCLOSURE J WITH NT
- C SURFACES, INCLUDING EXCHANGE FACTORS TO SKY WITH LUMINANCE VARIATION
- REAL X0(4,30,7),LL(4,30,9),F(4,30,30),X(3),Y(3),
- 1 A(4,30),RS(4),LPZ
- INTEGER NW(6),IOB(4,30,30),KJOB(4,30,30)
- INTEGER*4 ISEED
- COMMON /BLK1/ X0,LL,XDP,YDP
- COMMON /BLK2/ NW,PI,IOB,ICLD,ISEED,NBUNDL,A,KJOB
- NT1=NT+1
- DO 10 I=1,NT
- DO 5 IR=1,NT1
- 5 F(J,I,IR)=0.
- XY=(X0(J,I,6)-X0(J,I,5))/X0(J,I,4)
- ID1=1
- IF(ABS(XY-1).LT.1E-3)ID1=0
- AX=ID1*XY
- C CALCULATION OF COORDINATES AND DIRECTION COSINES OF LIGHT BUNDLE
- DO 60 N=1,NBUNDL
- TT=1.
- C ************************ RANDOM NUMBER GENERATOR **********************
- DO 115,INDEX=1,4
- 115 RS(INDEX)=RANDOM(ISEED)
- YY=(1-SQRT(1-(1-XY*XY)*RS(1)))/(1-AX)+(1-ID1)*RS(1)
- XX=X0(J,I,5)*YY+X0(J,I,4)*(1-(1-XY)*YY)*RS(2)
- SINB=SQRT(RS(3))
- COSB=SQRT(1.-RS(3))
- THET=2.*PI*RS(4)
- COST=COS(THET)
- SINT=SIN(THET)
- DO 30 L=1,3
- X(L)=X0(J,I,L)+LL(J,I,L)*XX+LL(J,I,L+3)*YY*X0(J,I,7)
- Y(L)=(LL(J,I,L)*COST+LL(J,I,L+3)*SINT)*SINB+LL(J,I,L+6)*COSB
- 30 CONTINUE
- C
- C DETERMINATION OF SURFACE INTERSECTED BY LIGHT BUNDLE
- C
- DO 80 IR=1,NT
- IF(IOB(J,I,IR)) 80,70,50
- 50 IMARK=KJOB(J,I,IR)
- CALL SECT(X,Y,J,IMARK,KUT)
- IF(KUT.EQ.1) GOTO 60
- 70 IMARK=IR
- CALL SECT(X,Y,J,IR,KUT)
- IMARK=IR
- IF(KUT.EQ.1) GOTO 60
- 80 CONTINUE
- C
- C EVALUATION OF F I-J IF BUNDLE INTERSECTS SKY, (OR GROUND IF Y POINTS BELOW HORIZ)
- C
- IMARK=NT1
- TT=RLPZ(ICLD,Y)
- 60 F(J,I,IMARK)=F(J,I,IMARK)+TT
- DO 130 IR=1,NT1
- 130 F(J,I,IR)=F(J,I,IR)/NBUNDL
- 10 CONTINUE
- C
- C AVERAGING OF F I-J BASED UPON SURFACE AREA
- C
- DO 220 I=1,NT
- DO 220 IR=I,NT
- WF=1-EXP(-A(J,I)/A(J,IR))+EXP(-A(J,IR)/A(J,I))
- AF=((2-WF)*A(J,I)*F(J,I,IR)+WF*A(J,IR)*F(J,IR,I))/2.
- F(J,I,IR)=AF/A(J,I)
- 220 F(J,IR,I)=AF/A(J,IR)
- RETURN
- END
- FUNCTION TAUB(I,CB)
- C THIS ROUTINE CALCULATES THE TRANSMISSIVITY OF WINDOW I FOR DIRECTION
- C CB (COSINE OF POLAR ANGLE)
- REAL AK2(10),TAU(10)
- COMMON /BLK3/ AK2,TAU,NC
- TAUB=1.018*AK2(I)*TAU(I)*CB*(1.+(1.-CB*CB)**1.5)
- IF (I.GT.NC) TAUB=TAU(I)
- RETURN
- END
- FUNCTION RLPZ(ICLD,Y)
- C THIS ROUTINE CALCULATES SKY-LUMINANCE (NORMALIZED BY ZENITH LUMINANCE)
- C FOR ANY GIVEN DIRECTION AND SKY CONDITION
- REAL Y(3),LS(3)
- COMMON /BLK4/ BETAS,LS,AUX(3),GRNDL
- IF (Y(3).GT..001) GOTO 10
- C HITS GROUND
- RLPZ=GRNDL
- RETURN
- 10 GOTO(1,2,3,2),ICLD
- C OVERCAST SKY
- 1 IY=.999+Y(3)
- RLPZ=AUX(1)+IY*Y(3)*AUX(2)
- RETURN
- C CLEAR SKY
- 2 CD=Y(1)*LS(1)+Y(2)*LS(2)+Y(3)*LS(3)
- RLPZ=(1.-EXP(-.32/Y(3)))*(.91+10*EXP(-3*ACOS(CD))+.45*CD*CD)
- 1 /AUX(3)
- RETURN
- C UNIFORM SKY
- 3 RLPZ=1.
- RETURN
- END
- SUBROUTINE MATINV(A,N,B,M,DETERM)
- DIMENSION IPIVOT(30),A(30,30),B(30,1),INDEX(30,2),PIVOT(30)
- EQUIVALENCE (IROW,JROW), (ICOLUM,JCOLUM), (AMAX, T, SWAP)
- DETERM=1.0
- DO 20 J=1,N
- 20 IPIVOT(J)=0
- DO 550 I=1,N
- AMAX=0.0
- DO 105 J=1,N
- IF (IPIVOT(J)-1) 60, 105, 60
- 60 DO 100 K=1,N
- IF (IPIVOT(K)-1) 80, 100, 740
- 80 IF (ABS(AMAX)-ABS(A(J,K))) 85, 100, 100
- 85 IROW=J
- ICOLUM=K
- AMAX=A(J,K)
- 100 CONTINUE
- 105 CONTINUE
- IF(AMAX) 110,800,110
- 110 IPIVOT(ICOLUM)=IPIVOT(ICOLUM)+1
- IF (IROW-ICOLUM) 140, 260, 140
- 140 DETERM=-DETERM
- DO 200 L=1,N
- SWAP=A(IROW,L)
- A(IROW,L)=A(ICOLUM,L)
- 200 A(ICOLUM,L)=SWAP
- IF(M) 260, 260, 210
- 210 DO 250 L=1, M
- SWAP=B(IROW,L)
- B(IROW,L)=B(ICOLUM,L)
- 250 B(ICOLUM,L)=SWAP
- 260 INDEX(I,1)=IROW
- INDEX(I,2)=ICOLUM
- PIVOT(I)=A(ICOLUM,ICOLUM)
- DETERM=DETERM*PIVOT(I)
- A(ICOLUM,ICOLUM)=1.0
- DO 350 L=1,N
- 350 A(ICOLUM,L)=A(ICOLUM,L)/PIVOT(I)
- IF(M) 380, 380, 360
- 360 DO 370 L=1,M
- 370 B(ICOLUM,L)=B(ICOLUM,L)/PIVOT(I)
- 380 DO 550 L1=1,N
- IF(L1-ICOLUM) 400, 550, 400
- 400 T=A(L1,ICOLUM)
- A(L1,ICOLUM)=0.0
- DO 450 L=1,N
- 450 A(L1,L)=A(L1,L)-A(ICOLUM,L)*T
- IF(M) 550, 550, 460
- 460 DO 500 L=1,M
- 500 B(L1,L)=B(L1,L)-B(ICOLUM,L)*T
- 550 CONTINUE
- DO 710 I=1,N
- L=N+1-I
- IF (INDEX(L,1)-INDEX(L,2)) 630, 710, 630
- 630 JROW=INDEX(L,1)
- JCOLUM=INDEX(L,2)
- DO 705 K=1,N
- SWAP=A(K,JROW)
- A(K,JROW)=A(K,JCOLUM)
- A(K,JCOLUM)=SWAP
- 705 CONTINUE
- 710 CONTINUE
- 740 RETURN
- 800 DETERM = 0.
- RETURN
- END
- SUBROUTINE ZENLCD(P,W,BETA,H,ZENL)
- C THIS SUBROUTINE CALCULATES ZENITH LUMINANCE BASED ON
- C LIEBELT'S EQUATION WHEN SOLAR ALTITUDE IS LESS THAN
- C 60. WHEN SOLAR ALTITUDE IS GREATER THAN 60, THE ZENITH
- C LUMINANCE IS EXTRAPOLATED TO RESULT INTEGRATED HORIZONTAL
- C ILLUMINANCE FOLLOWS SINE CURVE. 4/10/83 JJK.
- PI=4.*ATAN(1.)
- HD=H*180./PI
- T=TUR(HD,W,BETA)
- ZENL=((1.34*T-3.46)*TAN(H)+0.1*T+0.9)*291.87
- IF(HD.LT.60.)RETURN
- ZEN60=((1.34*T-3.46)*TAN(1.0472)+0.1*T+0.9)*291.87
- P60=SKYSUM(0.5236)
- ZENL=1.1547*ZEN60*P60*SIN(H)/P
- RETURN
- END
- SUBROUTINE SOLAR (DLAT,LNG,TZN,M,TIME,ISUN,THETA,PHI)
- C TO FIND THE POSITION OF THE SUN
- C INPUT
- C DLAT - LATITUDE
- C LNG - LONGITUDE
- C TZN - TIME ZONE(HOURS BEHIND GREENWICH MEAN TIME
- C 4- ATLANTIC
- C 5- EASTERN
- C 6- CENTRAL
- C 7- MOUNTAIN
- C 8- PACIFIC
- C M - MONTH(01-12)
- C TIME - HOURS FROM MIDNIGHT
- C
- C OUTPUT
- C THE ALTITUDE AND AZIMUTH ANGLES OF THE SUN.
- REAL LAT, LNG
- INTEGER TZN
- DIMENSION DEC(12), ET(12)
- C
- DATA (DEC(J), J=1,12)/ -0.3491, -0.1885, 0.0 , 0.2025,
- $ 0.3491, 0.4093, 0.3595, 0.2147,
- $ 0.0 , -0.1833, -0.3456, -0.4093/
- C
- DATA (ET(J), J=1,12)/ -0.190, -0.230, -0.123, 0.020,
- $ 0.060, -0.025, -0.103,-0.051,
- $ 0.113, 0.255, 0.235, 0.033/
- DATA PI/3.1415926/
- DATA CNVRT/0.017453295/
- C WHEN SUN IS DOWN THERE IS NO RADIATION
- LAT = DLAT*CNVRT
- SPAN = ACOS(-TAN(LAT)*TAN(DEC(M)))
- HANG =-(15.0*(TIME - 12.0 + TZN + ET(M)) - LNG)*CNVRT
- CHANG = COS(HANG)
- IF(ABS(HANG) .GT. ABS(SPAN)) THEN
- ISUN = 0
- C WHEN SUN IS UP, FIND ITS ORIENTATION
- ELSE
- ISUN = 1
- COSZ = SIN(LAT)*SIN(DEC(M)) +
- $ COS(LAT)*COS(DEC(M))*COS(HANG)
- COSW = COS(DEC(M))*SIN(HANG)
- TEST = 1.0 - COSZ**2 + COSW**2
- ARG = TAN(DEC(M))/TAN(LAT)
- IF (TEST .LE. 0.0) THEN
- COSS = 0.0
- ELSEIF (CHANG .LE. ARG) THEN
- COSS = -SQRT(TEST)
- ELSE
- COSS = SQRT(TEST)
- ENDIF
- THETA = ASIN(COSZ)
- CHECK = COSW/COS(THETA)
- IF (CHECK .GE. 1.0) THEN
- ANG = PI/2.0
- ELSEIF (CHECK .LE. -1.0) THEN
- ANG = -PI/2.0
- ELSE
- ANG = ASIN(CHECK)
- ENDIF
- IF (COSS .GT. 0.0) THEN
- PHI = ANG
- ELSE
- PHI = PI - ANG
- ENDIF
- ENDIF
- RETURN
- END
- FUNCTION E(DATE,IWMOD)
- REAL OMEGA
- DATA OMEGA/.01715/
- A = OMEGA*DATE
- IF(IWMOD.NE.3) GOTO 100
- E=128.8
- RETURN
- 100 E = 128.82 + 4.248*COS(A) + 0.0825*COS(2.0*A)
- $-0.00043*COS(3.0*A) + 0.169*SIN(A) + 0.00914*SIN(2.0*A)
- $+0.01726*SIN(3.0*A)
- RETURN
- END
- FUNCTION ABAR(T,BETA)
- DIMENSION A(3),B(3)
- DATA (A(I),I=1,3)/0.1512,0.1656,0.2021/
- DATA (B(I),I=1,3)/0.0262,0.0215,0.0193/
- INDEX=3
- IF (BETA .LE. .15) INDEX=2
- IF (BETA .LE. .075) INDEX=1
- ABAR = A(INDEX) - T*B(INDEX)
- RETURN
- END
- FUNCTION TUR(HD,W,BETA)
- TUR=(HD + 85.0)/(39.5*EXP(-W) + 47.4) + 0.1
- $+ (16.0+0.22*W)*BETA
- RETURN
- END
- FUNCTION AIR(H,ALT)
- AIR = SIN(H) + 0.15*(H*57.29578+3.885)**(-1.253)
- AIR = 1/AIR
- AIR = AIR*(1.0-1.E-4*ALT)
- RETURN
- END
- FUNCTION DIR(MONTH,IDAY,BETA,W,ALT,H)
- DATA CFAC/92.904/
- C CFAC CONVERTS FROM KLX TO FT-CANDLES
- HD = H*57.2958
- T = TUR(HD,W,BETA)
- A = ABAR(T,BETA)
- AMAS = AIR(H,ALT)
- DATE = FLOAT(JDATE(MONTH,IDAY))
- DIR = CFAC*E(DATE,IWMOD)*EXP(-A*AMAS*T)*SIN(H)
- RETURN
- END
- FUNCTION JDATE(MONTH,IDAY)
- DIMENSION NDAY(12)
- DATA (NDAY(I),I=1,12)/31,28,31,30,31,
- $30,31,31,30,31,30,31/
- JDATE = 0
- IF (MONTH .EQ. 1) GO TO 200
- M1=MONTH-1
- DO 100 I=1,M1
- JDATE = JDATE + NDAY(I)
- 100 CONTINUE
- 200 JDATE = JDATE + IDAY
- RETURN
- END
- FUNCTION SKYSUM(H)
- C -- THIS SUBROUTINE CALCULATES SKY LUMINANCE INTEGRATION FOR
- C-- CLEAR SKY
- PI=4.*ATAN(1.)
- P1=.27385*(.91+10.*EXP(-3*H)+.45*COS(H)**2)
- P=0.
- CBS=COS(H)
- SBS=SIN(H)
- DO 100 K=1,21
- ETAK=(K-1.)/20.
- RT=SQRT(1.-ETAK**2)
- P2=0.
- IF(K.GT.1)P2=(1.-EXP(-.32/ETAK))*C(K,21)*ETAK
- DO 100 L=1,21
- ETA=(L-1.)/20.
- CDEL=CBS*ETAK+SBS*RT*COS(PI*ETA)
- 100 P=P+P2*(.91+10.*EXP(-3*ACOS(CDEL))+.45*CDEL**2)*C(L,21)
- SKYSUM=2./P1*P
- RETURN
- END
- C
- FUNCTION RANDOM(ISEED)
- INTEGER*4 ISEED
- ISEED=DMOD(16807.0D0 * ISEED,2147483647.0D0)
- RANDOM=ISEED * 4.6566128752458D-10
- RETURN
- END
- SUBROUTINE LOGO(N)
- C THIS ROUTINE PRINTS THE SUPERLITE NOTICE TO THE UNIT
- C SPECIFIED AS 'N'
- C CURRENTLY N=6 SENDS NOTICE TO SCREEN ON VAX. FOR BATCH
- C MACHINES THIS CAN BE SET TO THE APPROPRIATE DEVICE
- WRITE(*,100)
- 100 FORMAT(/////////
- *6X,' S U P E R L I T E 1 . 0'/
- *//
- *6X,' DEVELOPED BY:'/
- */
- *6X,' WINDOWS AND DAYLIGHTING GROUP'/
- *6X,' LAWRENCE BERKELEY LABORATORY'/
- *6X,' UNIVERSITY OF CALIFORNIA'/
- *6X,' BERKELEY, CA 94720'/
- *///
- *6X,' COPYRIGHT 1985 REGENTS OF THE UNIVERSITY OF CALIFORNIA'
- *//)
- END
-