SUBROUTINE ZONE_CLEAR(zone) #include "dyna.inc" #include "zone.inc" RECORD /Zone_Data/ zone INTEGER izn,i,j zone.index = 0 zone.number = 0 zone.destnode = 0 zone.destindex = 0 DO izn = 1,NU_ZN DO i = 0,1 zone.tto(izn,i) = 0.D0 DO j = 0,1 zone.nreach(izn,i,j) = 0 zone.ngen(i,j,izn) = 0 ENDDO ENDDO DO i = 1,MAX_DEMAND_INTERVALS zone.demand(izn,i) = 0.D0 zone.cumdem(izn,i) = 0.D0 ENDDO ENDDO DO i = 1,MAX_DEMAND_INTERVALS zone.totdem(i) = 0.D0 ENDDO zone.totlmz = 0.D0 zone.expgenz = 0.D0 zone.numgenlink = 0 DO i = 1,MAX_GENERATION_LINKS zone.genlink(i) = 0 ENDDO DO i = 1,K_EQ zone.famsplit(i) = 0.D0 ENDDO DO i = 1,3 ! HARDCODED 3 types zone.ifamz(i) = 0 ENDDO RETURN END INTEGER FUNCTION ZONE_READ(unit,zone) #include "dyna.inc" #include "zone.inc" INTEGER unit RECORD /Zone_Data/ zone INTEGER j CALL ZONE_CLEAR(zone) CALL FND(unit) READ(unit,14,END=96600) + zone.number,zone.destnode + ,(zone.famsplit(j),zone.ifamz(j),j=1,3) 14 FORMAT(2I5,3(F5.2,I2)) ZONE_READ = 0 RETURN C - Zone not read 96600 ZONE_READ = 1 RETURN END INTEGER FUNCTION ADD_ZONE(sim,act,zone) #include "dyna.inc" #include "sim.inc" #include "activity.inc" RECORD /Sim_Data/ sim RECORD /Activity/ act RECORD /Zone_Data/ zone INTEGER znum INTEGER ico znum = act.nzones + 1 C - CHECK IF GEOMETRY EXCEEDS PROGRAM PARAMETERS IF (znum.GT.NU_ZN) THEN WRITE(ostr,690) znum,NU_ZN 690 FORMAT(/'ERROR: Number of zones ['I4 + ,'] greater than array parameter NU_ZN ['I4']') CALL DYNA_ERROR(ostr + ,DYNA_FATAL_ERROR + ,DYNA_OUT_OF_MEMORY + ,DYNA_TOO_MANY_ZONES) ENDIF IF (zone.number.LE.0.OR.zone.number.GT.MAX_ZN_NU) THEN WRITE(ostr,650) zone.number,CHAR(0) 650 FORMAT('Invalid zone number ['I5']'A) CALL DYNA_ERROR(ostr + ,DYNA_FATAL_ERROR + ,DYNA_INPUT_ERROR + ,DYNA_INVALID_ZONE_NUMBER) ENDIF act.zonelist(zone.number) = znum zone.totlmz = 0 !INITIALIZE THE TOTAL LANE MILES IN EACH ZONE IF(zone.destnode.GT.0) THEN ico=act.ndests+1 act.destlist(ico)=zone.destnode ! See below act.dest2zone(ico)=znum ! redundant but more useful zone.destindex=ico act.ndests = act.ndests + 1 ELSE zone.destindex=0 ENDIF act.zone(znum) = zone act.nzones = act.nzones + 1 ADD_ZONE = 0 RETURN END