diff options
Diffstat (limited to 'Dragon/src/XCWSCL.f')
| -rw-r--r-- | Dragon/src/XCWSCL.f | 580 |
1 files changed, 580 insertions, 0 deletions
diff --git a/Dragon/src/XCWSCL.f b/Dragon/src/XCWSCL.f new file mode 100644 index 0000000..888bfaf --- /dev/null +++ b/Dragon/src/XCWSCL.f @@ -0,0 +1,580 @@ +*DECK XCWSCL + SUBROUTINE XCWSCL( NDIM, NSURX, NVOL, NBAN, NRT, MSROD, + > MAROD, NANGL, DENS,IFTEMP, IPRT, NCODE, + > SWZERO,NRINFO, RAN, COTE, NRODS, RODS, + > NRODR, RODR, MXSUB, MXSEG, NXRI, IMS) +* +*----------------------------------------------------------------------- +* +*Purpose: +* Perform specular tracking for 2-D square cluster. +* +*Copyright: +* Copyright (C) 1990 Ecole Polytechnique de Montreal +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; either +* version 2.1 of the License, or (at your option) any later version +* +*Author(s): G.Marleau +* +*Parameters: input +* NDIM dimension of problem. +* NSURX number of initial surface. +* NVOL total number of regions. +* NBAN number of concentric regions. +* NRT number of rod types. +* MSROD maximum number of subrod per rods. +* MAROD maximum number of rod in any cluster. +* NANGL number of integration angles. +* DENS minimum parallel line trak density. +* IFTEMP temporary tracking file unit. +* SWZERO logical for specular tracking. +* IPRT print level. +* NCODE boundary type. +* NRINFO type of concentric region: +* NRINFO(1,IAN) = new region number; +* NRINFO(2,IAN) = associated cluster; +* = 0 no cluster. +* RAN radius/lattice side of region. +* COTE Y dimension for rectangle. +* NRODS integer description of rod type: +* NRODS(1,IRT) = number of rod; +* NRODS(2,IRT) = number of subrods in rod; +* NRODS(3,IRT) = associated region. +* RODS description of rod of a given type: +* RODS(1,IRT) = rod center radius; +* RODS(2,IRT) = angle position of one rod. +* NRODR subrod region. +* RODR subrod radius. +* MXSUB current maximum number of subtracks. +* MXSEG current maximum track length. +* NXRI annular region content multi-rod. +* IMS surface merge. +* +*---------------------------------------------------------------------- +* + PARAMETER (IUNOUT=6,PI=3.1415926535897932,EPS=1.E-5) + CHARACTER TEDATA*13 + INTEGER NDIM,NSURX,NVOL,NBAN,NRT,MSROD,MAROD,NANGL, + > IFTEMP,IPRT,NCODE(6),NRINFO(2,NBAN), + > NRODS(3,NRT),NRODR(NRT),MXSUB,MXSEG, + > INDS(2),NXRI(NRT,NBAN),IMS(6),IPER(2) + LOGICAL LINTER,LNEWP,SWZERO + REAL DENS,RAN(NBAN),COTE,RODS(2,NRT),RODR(MSROD,NRT) + DOUBLE PRECISION DFACX,DFACY,SIDE(2),RCIRC,DENSP,DENLIN, + > PROJ,PMAX,PMIN,DEPART,TRKPOS(2,2),ROTPOS(2,2), + > TRKBEG(2,2),DIRBEG(2),RONEPS,ANGD,ANGC,RADC, + > RADC2,WEIGHT,XPO +*---- +* ALLOCATABLE ARRAYS +*---- + INTEGER, ALLOCATABLE, DIMENSION(:) :: NRSEG,NNSEG,KANGL + REAL, ALLOCATABLE, DIMENSION(:) :: ATOP + REAL, ALLOCATABLE, DIMENSION(:,:,:,:) :: RODP + DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:) :: SEGLEN,WGTANG, + > DNSANG,PTSANG + DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:,:,:) :: DANGLE +*---- +* SCRATCH STORAGE ALLOCATION +* NRSEG : region crossed by track +* NNSEG : region crossed by track (left) +* SEGLEN: length of track +* RODP : rod position in cartesian geometry +* ATOP : number of rod between origin and rod1 +* DANGLE: integration angles +* WGTANG: integration weight +* DNSANG: integration densities +* PTSANG: principal integration angles +*---- + ALLOCATE(NRSEG(MXSEG),NNSEG(MXSEG),KANGL(MXSUB)) + ALLOCATE(SEGLEN(MXSEG),RODP(2,MAROD,NRT,2),ATOP(NRT)) + ALLOCATE(DANGLE(NDIM,2,4*NANGL),WGTANG(4*NANGL),DNSANG(NANGL), + > PTSANG(NANGL)) +*---- +* DETERMINE INTEGRATION LIMITS FOR CLUSTER REGIONS +*---- + IF(IPRT.GE.1) THEN + WRITE(IUNOUT,'(//1X,A20)') 'SPECULAR TRACKING ' + ENDIF + MLSEG=MXSEG/(2*NANGL) + SIDE(1)=DBLE(RAN(NBAN)) + SIDE(2)=DBLE(COTE) + IF( ABS((SIDE(1)-SIDE(2))/ABS(1)).GT.10.*EPS )THEN + CALL XABORT('XCWSCL: AVAILABLE ONLY FOR SQUARE GEOMETRIES') + ENDIF + RCIRC=SQRT(SIDE(1)**2+SIDE(2)**2) + SIDE(1)= SIDE(1)/RCIRC + SIDE(2)= SIDE(2)/RCIRC + NTAN=NBAN-1 + IF(IPRT.GT.0) THEN + WRITE(IUNOUT,6000) NVOL,NSURX,NBAN,NRT + WRITE(IUNOUT,6001) + WRITE(IUNOUT,6002) (II,NRODS(1,II),NRODS(2,II), + > NRODS(3,II),II=1,NRT) + WRITE(IUNOUT,6003) NANGL,DENS + ENDIF +*---- +* SET FLAG FOR SURFACE CROSSING +* IPER(1) = X-PERIOD +* IPER(2) = Y-PERIOD +* VALUES ARE +* IPER(I) = 1 FOR PERIODIC BC +* IPER(I) = 2 FOR OTHER BC +*---- + IPER(1)=2 + IPER(2)=2 + IF( (NCODE(1) .EQ. 4) .AND. (NCODE(2) .EQ. 4) ) THEN + IPER(1)=1 + ENDIF + IF( (NCODE(3) .EQ. 4) .AND. (NCODE(4) .EQ. 4) ) THEN + IPER(2)=1 + ENDIF + IPERG=MIN(IPER(1),IPER(2)) + IF( SWZERO )THEN + IFIN= NANGL-1 + IDEB= 0 + ISTRID=1 + ELSE + IFIN= 2*NANGL + IDEB= 0 + ISTRID=2 + ENDIF + IANG=0 + DO 100 ITX= IDEB, IFIN, ISTRID + INDS(1)= ITX + ITY=IFIN-ITX + INDS(2)=ITY + IANG= IANG+1 + ITYPBC= 0 ! Cartesian boundary + CALL XELTSA( NDIM, ITYPBC, SIDE, INDS, DENSP, DANGLE(1,1,IANG)) +*---- +* CHANGE DENLIN FOR HORIZONTAL & VERTICAL ANGLES +*---- + IF( (ITX .EQ. 0) .OR. (ITY .EQ. 0) )THEN + DNSANG(IANG)=DBLE(DENS) + ELSE + DENLIN= DENSP / RCIRC + NTRAC=MAX(1,INT(DBLE(DENS)/DENLIN+0.5D0)) + DNSANG(IANG)= DBLE(NTRAC) * DENLIN + ENDIF +*---- +* COMPUTE NTRAK AND CHANGE DENS ACCORDING TO INPUT +*---- + PTSANG(IANG)= DANGLE(1,1,IANG) + 100 CONTINUE + CALL XELTSW(SIDE,NANGL,PTSANG,WGTANG) + IF( IPRT.GT.2 )THEN + DO 110 IANG= 1, NANGL + WRITE(IUNOUT,6004) IANG, DANGLE(1,1,IANG),WGTANG(IANG), + > DNSANG(IANG),WGTANG(IANG)/DNSANG(IANG) + 110 CONTINUE + ENDIF +*---- +* LOCALIZE CENTER OF REFERENCE ROD WITH RESPECT TO X-Y AXIS +*---- + DO 120 IRT=1,NRT + IF(NRODS(3,IRT).GT.0) THEN + NBROD=NRODS(2,IRT) + DANGR=2.*PI/FLOAT(NRODS(1,IRT)) + IF(RODR(NBROD,IRT).GT.RODS(1,IRT)) THEN + ATOP(IRT)=0.0 + ELSE + ATOP(IRT)=(RODS(2,IRT) + > +ASIN(RODR(NBROD,IRT)/RODS(1,IRT)))/DANGR + ENDIF + ENDIF + 120 CONTINUE + SIDE(1)=DBLE(RAN(NBAN)) + SIDE(2)=DBLE(COTE) +*---- +* COPY ANGLES AND DENSITIES ON TEMPORARY TRACKING FILE +*---- + DO 125 IANG=1,NANGL + DANGLE(1,1,2*NANGL-IANG+1)=-DANGLE(1,1,IANG) + DANGLE(2,1,2*NANGL-IANG+1)=DANGLE(2,1,IANG) + WGTANG(2*NANGL-IANG+1)=WGTANG(IANG) + 125 CONTINUE + DO 126 IANG=1,2*NANGL + DANGLE(1,1,4*NANGL-IANG+1)=DANGLE(1,1,IANG) + DANGLE(2,1,4*NANGL-IANG+1)=-DANGLE(2,1,IANG) + WGTANG(4*NANGL-IANG+1)=WGTANG(IANG) + 126 CONTINUE + WRITE(IFTEMP) ((DANGLE(IDIM,1,IANG),IDIM=1,NDIM),IANG=1,4*NANGL) + WRITE(IFTEMP) (2.0D0/WGTANG(IANG),IANG=1,4*NANGL) +*---- +* PRINT TRACKING INFORMATION IF REQUIRED +*---- + NSOLMX=0 + IF((IPRT.GT.1).AND.(IPRT.LT.100))THEN + WRITE(IUNOUT,'(/8H0ECHO = ,I3,27H SOLID ANGLES TO BE TRACKED)') + > NANGL + NSOLMX= MIN(9, NANGL/10) + IREF1=0 + WRITE(IUNOUT,'(1X,10(I1,9X))') (IREF1, IZZ=0,NSOLMX) + WRITE(IUNOUT,'(1X,10(I1,9X))') (MOD(IZZ,10), IZZ=0,NSOLMX) + WRITE(IUNOUT,'(2H 0)') + TEDATA='(1H+,TXXX,I1)' + ENDIF + NOTRAK= 0 +*---- +* ANGULAR TRACK SWEEP +*---- + IXYN=0 + IXYR=0 + N0LSEG=0 + DO 130 IANG=1,NANGL + DENLIN = DNSANG(IANG) + DENSP = 1.D0 / DENLIN +*---- +* PRINT TRACKING INFORMATION IF REQUIRED +*---- + IF((IPRT.GT.1).AND.(IPRT.LT.100))THEN + IF( MOD(IANG,100) .EQ. 0 )THEN + IREF1=IREF1+1 + NDEBS= NSOLMX+1 + NSOLMX=MIN(NDEBS+9, NANGL/10) + WRITE(IUNOUT,'(1X,10(I1,9X))')(IREF1,IZZ=NDEBS,NSOLMX) + WRITE(IUNOUT,'(1X,10(I1,9X))') + > (MOD(IZZ,10),IZZ=NDEBS,NSOLMX) + WRITE(IUNOUT,'(2H 0)') + ELSE + WRITE(TEDATA(7:9),'(I3.3)') MOD(IANG,100) + 2 + WRITE(IUNOUT,TEDATA) MOD(IANG,10) + ENDIF + ENDIF +*---- +* LOCALIZE ROD POSITIONS WITH RESPECT TO 2 DIFFERENT ANGLES +* POSSIBLE (+-COS(THETA),SIN(THETA)) +*---- + ANGD=ATAN2(DANGLE(2,1,IANG),DANGLE(1,1,IANG)) + DO 300 IA=1,2 + DO 310 IRT=1,NRT + IF(NRODS(3,IRT).GT.0) THEN + DANGR=2.*PI/FLOAT(NRODS(1,IRT)) + ANGC=(ANGD/DANGR)-ATOP(IRT) + IF(ANGC.GT.0.0) THEN + IRDEP=INT(ANGC+0.9999) + ELSE + IRDEP=INT(ANGC) + ENDIF + ANGC=RODS(2,IRT)-ANGD+IRDEP*DANGR + DO 320 IRD=1,NRODS(1,IRT) + RODP(1,IRD,IRT,IA)=RODS(1,IRT)*REAL(COS(ANGC)) + RODP(2,IRD,IRT,IA)=RODS(1,IRT)*REAL(SIN(ANGC)) + ANGC=ANGC+DANGR + 320 CONTINUE + ENDIF + 310 CONTINUE + ANGD=PI-ANGD + 300 CONTINUE +*---- +* PROJECT THE 4 CORNERS OF SQUARE LOCATED AT +* -SIDE(1)/2 < X < SIDE(1)/2 AND -SIDE(2)/2 < Y < SIDE(2)/2 +* ON LINE NORMAL TO TRACK DIRECTION +*---- + PMIN = +1.0D+50 + PMAX = -1.0D+50 + DFACX=1.0D0 + DO 150 IX=1,2 + DFACY=1.0D0 + DO 160 IY=1,2 + PROJ = (SIDE(1)*DFACX*DANGLE(1,2,IANG) + > + SIDE(2)*DFACY*DANGLE(2,2,IANG))/2.0 + IF( PROJ.LT.PMIN ) PMIN = PROJ + IF( PROJ.GT.PMAX ) PMAX = PROJ + DFACY=-1.0D0*DFACY + 160 CONTINUE + DFACX=-1.0D0*DFACX + 150 CONTINUE +*---- +* FIND NUMBER OF PARALLEL TRACK: NEAREST INTEGER +1 FOR SECURITY +*---- + NPOINT =NINT((PMAX-PMIN)*DENLIN)+1 + DEPART =0.5D0*(PMAX+PMIN-DBLE(NPOINT)*DENSP) + DO 170 J = 1, 2 + TRKPOS(J,1)= DEPART*DANGLE(J,2,IANG) + DANGLE(J,2,IANG)= DANGLE(J,2,IANG)*DENSP + 170 CONTINUE + LNEWP=.TRUE. +*---- +* TRACK OVER 2*NPOINT PARALLEL TRACK FOR DIRECTION +* TRACK AND REFLECTION +*---- + IXYF=0 + DO 180 IPOINT = 1,2*NPOINT + NRIN=0 + IF(LNEWP)THEN + NSUB=0 + IA=1 + NOTRAK=NOTRAK+1 + NSEG=0 + N0FSEG=1 + N0LSEG=MLSEG + IF(IXYF.EQ.0) THEN + DO 181 J=1,2 + TRKPOS(J,1)= TRKPOS(J,1) +DANGLE(J,2,IANG) + 181 CONTINUE + IXYN=0 + ENDIF + ELSE + N0FSEG=N0LSEG+1 + N0LSEG=N0LSEG+MLSEG + ENDIF + DO 182 ISEG=N0FSEG,N0LSEG + NRSEG(ISEG)=0 + NNSEG(ISEG)=0 + SEGLEN(ISEG)=0.0D0 + 182 CONTINUE + NLSEG=N0LSEG + NFSEG=N0FSEG +*---- +* FIND EXTERNAL SURFACES CROSSED BY THIS TRACK +*---- + CALL XCWREC(DANGLE(1,1,IANG),SIDE,TRKPOS,LINTER,ROTPOS, + > INDS,IMS) +*---- +* REJECT TRACK IF LINTER IS FALSE +*---- + IF(.NOT.LINTER) GO TO 183 +*---- +* KEEP THE TRACK IF LINTER IS TRUE +* A) SAVE INITIAL AND FINAL SURFACE INFORMATION +*---- + NRSEG(NFSEG)=-INDS(1) + SEGLEN(NFSEG)=0.5D0 + NRSEG(NLSEG)=-INDS(2) + SEGLEN(NLSEG)=0.5D0 + NFSEG=NFSEG+1 + NLSEG=NLSEG-1 +*---- +* SAVE INFORMATION FOR INITIAL AND FINAL ANNULAR TRACKING +*---- + NRSEG(NFSEG)=NRINFO(1,NBAN) + NNSEG(NFSEG)=NRIN + SEGLEN(NFSEG)=ROTPOS(1,1) + NRSEG(NLSEG)=NRIN + NNSEG(NLSEG)=NRINFO(1,NBAN) + SEGLEN(NLSEG)=ROTPOS(1,2) + NLSEG=NLSEG-1 + NFSEG=NFSEG+1 + NRIN=NRINFO(1,NBAN) +*---- +* TRACK INSIDE ANNULAR REGIONS +*---- + RADC=ABS(ROTPOS(2,1)) + RADC2=RADC**2 + DO 210 IAN=NTAN,1,-1 + IF(RADC.GE.RAN(IAN)) GO TO 211 +*---- +* LINE INTERSECT ANNULUS IAN +*---- + XPO=SQRT(RAN(IAN)**2-RADC2) + NRSEG(NLSEG)=NRIN + NNSEG(NFSEG+1)=NRIN + SEGLEN(NLSEG)=XPO + NLSEG=NLSEG-1 + NRIN=NRINFO(1,IAN) + NFSEG=NFSEG+1 + NRSEG(NFSEG)=NRIN + NNSEG(NLSEG+1)=NRIN + SEGLEN(NFSEG)=-XPO + IF(NRINFO(2,IAN).NE.0) THEN +*---- +* TRACK INSIDE RODS +*---- + DO 146 KRT=1,NRT + JRT=NXRI(KRT,IAN) + LRT=MOD(JRT,1000000) + IF((JRT.GT.3000000).OR. + > ((JRT.GT.0).AND.(JRT.LT.1000000)) ) THEN + CALL XCWROD(NRIN,NRODS(1,LRT),NRODR(LRT), + > RODR(1,LRT),RODP(1,1,LRT,IA), + > ROTPOS(2,1),NFSEG,NLSEG,SEGLEN,NRSEG, + > NNSEG) + ELSE IF(JRT.EQ.0) THEN + GO TO 147 + ENDIF + 146 CONTINUE + 147 CONTINUE + DO 143 KRT=1,NRT + JRT=NXRI(KRT,IAN) + IF(JRT.LT.0) THEN + IRT=-JRT + NXTR=NRODR(IRT) + DO 144 IRD=NRODS(2,IRT),1,-1 + IF(RADC.GT.RODR(IRD,IRT)) GO TO 211 +*---- +* LINE INTERSECT CENTERED ROD IRD +*---- + XPO=SQRT(RODR(IRD,IRT)*RODR(IRD,IRT)-RADC2) + NRSEG(NLSEG)=NRIN + NNSEG(NFSEG+1)=NRIN + SEGLEN(NLSEG)=XPO + NLSEG=NLSEG-1 + NRIN=NXTR + NXTR=NXTR-1 + NFSEG=NFSEG+1 + NRSEG(NFSEG)=NRIN + NNSEG(NLSEG+1)=NRIN + SEGLEN(NFSEG)=-XPO + 144 CONTINUE + GO TO 211 + ENDIF + 143 CONTINUE + ENDIF + 210 CONTINUE + 211 CONTINUE + IF( LNEWP )THEN + IF(IXYF .EQ. 0) THEN + IXYF=MOD(INDS(1)+1,2)+1 + ENDIF + DO 250 J= 1, 2 + TRKBEG(J,IXYF)= TRKPOS(J,1) + DIRBEG(J)= DANGLE(J,1,IANG) + 250 CONTINUE + ELSE IF(IXYN .EQ. 0) THEN + IXY=MOD(INDS(1)+1,2)+1 + IF(IXY.NE.IXYF) THEN + IXYN=IXY + DO 251 J= 1, 2 + TRKBEG(J,IXYN)= TRKPOS(J,1) + 251 CONTINUE + ENDIF + ENDIF + IF(IPRT.GE.100) THEN + WRITE(IUNOUT,6100) IANG,DANGLE(1,1,IANG),DANGLE(2,1,IANG), + > IPOINT,INDS(1),(TRKPOS(II,1),II=1,2), + > IPOINT,INDS(2),(TRKPOS(II,2),II=1,2) + ENDIF + NSUB=NSUB+1 + IF(NSUB.GT.MXSUB) CALL XABORT('XCWSCL: MXSUB OVERFLOW.') + KANGL(NSUB)=IANG +*---- +* COMPRESS AND SORT TRACK VECTOR +*---- + ISRT=N0FSEG+1 + NSRT=MLSEG-2 + CALL XCWSRT(IPRT,NSRT,SEGLEN(ISRT),NRSEG(ISRT), + > NNSEG(ISRT),NTSEG) + NOSEG=NSEG+NTSEG+2 + IF(IPRT.GE.200) THEN + WRITE(IUNOUT,6101) ROTPOS(2,1), + > (SEGLEN(IIJJ),NRSEG(IIJJ),IIJJ=NSEG+2,NOSEG), + > SEGLEN(N0LSEG),NRSEG(N0LSEG) + ENDIF +*---- +* CONVERT SEGMENT DIVISION TO SEGMENT LENGTH +*---- + DO 240 ISEG=NSEG+2,NOSEG-1 + SEGLEN(ISEG)=SEGLEN(ISEG+1)-SEGLEN(ISEG) + 240 CONTINUE + SEGLEN(NOSEG)=SEGLEN(N0LSEG) + NRSEG(NOSEG)=NRSEG(N0LSEG) + IF(IPRT.GE.200) THEN + WRITE(IUNOUT,6102) NOSEG-NSEG, + > (SEGLEN(IIJJ),NRSEG(IIJJ),IIJJ=NSEG+1,NOSEG) + ENDIF + NSEG=NOSEG + N0LSEG=NSEG +*---- +* FOR TRANSLATION -> CHANGE TRACK STARTUP POINT +* FOR REFLECTION -> CHANGE TRACK DIRECTION +*---- + JINT=MOD(INDS(2)+1,2)+1 + KINT=MOD(INDS(2),2)+1 + IF(IPER(JINT) .EQ. 1) THEN + TRKPOS(JINT,2)=-TRKPOS(JINT,2) + ELSE + DANGLE(JINT,1,IANG)=-DANGLE(JINT,1,IANG) + IA=MOD(IA,2)+1 + ENDIF + RONEPS= 0.0D0 + DO 260 J= 1, 2 + TRKPOS(J,1)= TRKPOS(J,2) + RONEPS= RONEPS + (TRKPOS(J,1)-TRKBEG(J,IXYF))**2 + > + (DANGLE(J,1,IANG)-DIRBEG(J))**2 + 260 CONTINUE + LNEWP= RONEPS.LT.EPS + IF(LNEWP)THEN +*---- +* NOW, WRITE THE TRACK +*---- + WEIGHT= 0.25*WGTANG(IANG)/DNSANG(IANG) + WRITE(IFTEMP) NSUB,NSEG, WEIGHT, + > (KANGL(I),I=1,NSUB), + > (NRSEG(I),I=1,NSEG), + > (SEGLEN(I),I=1,NSEG) + IF(IPRT.GE.300) THEN + WRITE(IUNOUT,6103) NOTRAK,IANG,NSEG, + > (SEGLEN(I),NRSEG(I),I=1,NSEG) + ENDIF + IF(IPERG .EQ. 1) THEN + IF(IXYN .EQ. IXYF) THEN + TRKPOS(1,1)=TRKBEG(1,IXYR) + TRKPOS(2,1)=TRKBEG(2,IXYR) + DANGLE(IXYF,1,IANG)=ABS(DANGLE(IXYF,1,IANG)) + IXYF=0 + ELSE IF(IXYN .EQ. 0) THEN + IF(IPER(IXYF).EQ.1) THEN + DANGLE(IXYF,1,IANG)=-DANGLE(IXYF,1,IANG) + IXYN=IXYF + IXYR=IXYF + ELSE + IXYF=0 + ENDIF + ELSE IF(IXYN .NE. IXYF) THEN + IF(IPER(IXYF).EQ.1) THEN + IXYR=IXYN + TRKBEG(1,IXYR)=TRKBEG(1,IXYF) + TRKBEG(2,IXYR)=TRKBEG(2,IXYF) + DANGLE(IXYF,1,IANG)=-DANGLE(IXYF,1,IANG) + IXYN=IXYF + ELSE IF(IPER(IXYN).EQ.1) THEN + DANGLE(IXYN,1,IANG)=-DANGLE(IXYN,1,IANG) + TRKPOS(1,1)=TRKBEG(1,IXYN) + TRKPOS(2,1)=TRKBEG(2,IXYN) + IXYR=IXYF + IXYF=IXYN + ENDIF + ENDIF + ELSE + IXYF=0 + ENDIF + ENDIF + 183 CONTINUE + 180 CONTINUE + 130 CONTINUE +*---- +* SCRATCH STORAGE DEALLOCATION +*---- + DEALLOCATE(PTSANG,DNSANG,WGTANG,DANGLE) + DEALLOCATE(ATOP,RODP,SEGLEN) + DEALLOCATE(KANGL,NNSEG,NRSEG) + RETURN +*---- +* FORMATS +*---- + 6000 FORMAT(1X,' TOTAL NUMBER OF REGIONS =',I10/ + > 1X,' NUMBER OF INITIAL SURFACES =',I10/ + > 1X,' NUMBER OF ANNULAR REGIONS =',I10/ + > 1X,' NUMBER OF RODS TYPES =',I10) + 6001 FORMAT(1X,' ROD TYPE',10X,' NB. RODS',10X, + > 'NB. SUBROD',10X,'IN ANNULUS') + 6002 FORMAT((1X,I10,10X,I10,10X,I10,10X,I10)) + 6003 FORMAT(1X,'INTEGRATION PARAMETERS',/ + > 1X,' NUMBER OF ANGLES =',I10,/ + > 1X,' MINIMUM TRACK DENSITY =',1P,E15.7) + 6004 FORMAT( 1X,I4,': COS=',F10.6,' WGT=',F10.6,' DNS=',F10.6, + > ' WGT/DEN=',F10.6) + 6100 FORMAT(//' *** TRACKING INFORMATION ***'/ + > ' ANGLE(',I5,') :',1P,2E15.7/ + > ' START SURFACE (',I5,') :',5X,I10,5X,1P,2E15.7/ + > ' FINISH SURFACE (',I5,') :',5X,I10,5X,1P,2E15.7) + 6101 FORMAT(' INTERSECTION OF REGION AT NORMAL DISTANCE =',1P,E15.7/ + > 3(5X,E15.7,1X,I5)) + 6102 FORMAT(' NUMBER OF SEGMENTS ',I10/1P,3(5X,E15.7,1X,I5)) + 6103 FORMAT(/' INFORMATION TO TRACKING FILE: ', + > ' TRACK NUMBER =',I5,2X,'IANG =',I5,2X,'NSEG =',I7/1P, + > 3(5X,E15.7,1X,I5)) + END |
