From e90cab41d53961580b28f577b0af324b5d6ca787 Mon Sep 17 00:00:00 2001 From: salman Date: Thu, 18 Jun 2026 13:29:17 +0200 Subject: [PATCH] Extract the backscattering matrix / energy-angular correlation block. --- fortran/trimspNL.F | 186 +++++++++++++++++++++++++++------------------ 1 file changed, 112 insertions(+), 74 deletions(-) diff --git a/fortran/trimspNL.F b/fortran/trimspNL.F index 4c50383..e2cac27 100644 --- a/fortran/trimspNL.F +++ b/fortran/trimspNL.F @@ -2683,81 +2683,14 @@ C C C BACKSCATTERING : MATRICES , ENERGY - ANGULAR CORRELATIONS C - IF(IB.LT.10000) GO TO 2100 - DO J=1,20 - MEABL(1,J)=J - ENDDO - EABL(2)=DBLE(MEABL(2,21))/(DBLE(NH)*0.1D0) - DO IERLOG=3,74 - EABL(IERLOG)=DBLE(MEABL(IERLOG,21))/(TEMPNH*10.D0**((IERLOG-1) - & /12.D0)) - ENDDO - WRITE(21,2006) - 2006 FORMAT(//,' LOG ENERGY - COS OF EMISSION ANGLE (0.05 STEPS) ', - & '(BACKSCATTERED PROJECTILES)'/) - do ima = 74,1,-1 - if(meabl(ima,21).ne.0) goto 2005 - enddo - ima = 1 - 2005 ima = min(ima+2,74) - do ies = 1, ima - WRITE(21,1858)elog(ies),(meabl(ies,iag),iag=1,21),eabl(ies) - end do - WRITE(21,1858)elog(75),(meabl(75,iag),iag=1,21),eabl(75) - IF(ALPHA.LT.1.) GO TO 2010 - DO IG2=1,NGIK,1 - EEE = IG2*DGI - WRITE(21,2014) EEE - 2014 FORMAT(//,' ENERGY(E/E0 IN %) - POLAR ANGLE IN COS-INTERVALS ', - & '(0.05) AT AZIMUTHAL ANGLE =',F5.1, - & ' (BACKSCATTERED PROJECTILES)'/) - do ima = MAXD1,1,-1 - if(meagb(ima,ig2,22).ne.0) goto 2015 - enddo - ima = 1 - 2015 ima = min(ima+2,MAXD1) - write (6, 1886) ((meagb(ie,ig2,iagb),iagb=1,22),ie=1,ima) - write (6, 1886) (meagb(102,ig2,iagb),iagb=1,22) - ENDDO - 2010 CONTINUE - IF(E0.LT.0.) GO TO 2052 - WRITE(21,2016) - 2016 FORMAT(//,' ENERGY(E/E0 IN %) - POLAR ANGLE IN COS-INTERVALS ', - & '(0.05) (BACKSCATTERED PROJECTILES)'/) - GO TO 2054 - 2052 WRITE(21,2056) - 2056 FORMAT(//,' ENERGY(E IN 0.1*TI) - POLAR ANGLE IN COS-INTERVALS ', - & '(0.05) (BACKSCATTERED PROJECTILES)'/) - do ima = MAXD1,1,-1 - if(meab(ima,22).ne.0) goto 2017 - enddo - ima = 1 - 2017 ima = min(ima+2,MAXD1) - write (6, 1886) ((meab(ie,iagb),iagb=1,22),ie=1,ima) - write (6, 1886) (meab(102,iagb),iagb=1,22) - 2054 continue - WRITE(21,2018) - 2018 FORMAT(//,' AZIMUTHAL ANGLE - POLAR ANGLE IN COS-INTERVALS ', - & '(0.05) (BACKSCATTERED PROJECTILES)'/) - WRITE(21,1886) ((MAGB(IG,IAGB),IAGB=1,22),IG=1,62) - WRITE(21,2022) - 2022 FORMAT(//,' AZIMUTH.ANGLE - POLAR ANGLE IN COS-INTERVALS ', - & '(0.05) (BACKSCATTERED ENERGY)'/) - WRITE(21,2027) (EMA(01,IAGB),IAGB=1,11) - WRITE(21,2025) ((EMA(IG,IAGB),IAGB=1,11),IG=2,NG) - WRITE(21,2028) - WRITE(21,2031) EMA(1,1),(EMA(1,IAGB),IAGB=12,22) - DO IG=2,NG - WRITE(21,2026) EMA(IG,1),(EMA(IG,IAGB),IAGB=12,22) - ENDDO - 2025 FORMAT(1X,1F5.0,10E11.4) - 2026 FORMAT(1X,1F5.0,11E11.4) - 2027 FORMAT(1X,1F5.0,10F11.0) + call writeBackscatterMatrixSummary(IB,NH,MEABL,EABL,TEMPNH, + & ELOG,ALPHA,NGIK,DGI,MAXD1,MEAGB,MEAB,E0,MAGB,EMA,NG, + & MAXD2) +C +C Shared blank-line format used by the remaining inline matrix +C output section. A copy is kept inside the extracted subroutine. +C 2028 FORMAT(/) - 2031 FORMAT(1H1,1X,1F5.0,11F11.0) - 2036 FORMAT(1X,26I4) - 2038 FORMAT(1X,26I4,I6) - 2100 CONTINUE C C TRANSMISSION : MATRICES , ENERGY - ANGULAR CORRELATIONS C @@ -2841,6 +2774,111 @@ C======================================================================= C OUTPUT WRITER SUBROUTINES C======================================================================= +C +C Write backscattering matrix and energy-angle correlation tables. +C + subroutine writeBackscatterMatrixSummary(nBackscatter,nPrimary, + & backLogMatrix,backLogEnergy,tempNh,energyLog,alpha, + & nAzimuthBins,azimuthBinWidth,maxDepthBins,backEnergyAngle, + & backEnergyPolar,initialEnergy,backAngleMatrix,backEnergy, + & nPolarBins,maxDepthBins2) + implicit none + integer*4 nBackscatter,nPrimary,nAzimuthBins,maxDepthBins + integer*4 nPolarBins,maxDepthBins2 + integer*4 J,IERLOG,IMA,IES,IAG,IG2,IE,IAGB,IG + integer*4 backLogMatrix(75,21) + integer*4 backEnergyAngle(maxDepthBins2,36,22) + integer*4 backEnergyPolar(maxDepthBins2,22) + integer*4 backAngleMatrix(62,22) + real*8 backLogEnergy(75),tempNh,energyLog(75),alpha + real*8 azimuthBinWidth,EEE,initialEnergy,backEnergy(62,22) + + IF(nBackscatter.LT.10000) GO TO 2100 + DO J=1,20 + backLogMatrix(1,J)=J + ENDDO + backLogEnergy(2)=DBLE(backLogMatrix(2,21))/(DBLE(nPrimary) + & *0.1D0) + DO IERLOG=3,74 + backLogEnergy(IERLOG)=DBLE(backLogMatrix(IERLOG,21))/(tempNh + & *10.D0**((IERLOG-1)/12.D0)) + ENDDO + WRITE(21,2006) + 2006 FORMAT(//,' LOG ENERGY - COS OF EMISSION ANGLE (0.05 STEPS) ', + & '(BACKSCATTERED PROJECTILES)'/) + do ima = 74,1,-1 + if(backLogMatrix(ima,21).ne.0) goto 2005 + enddo + ima = 1 + 2005 ima = min(ima+2,74) + do ies = 1, ima + WRITE(21,1858)energyLog(ies),(backLogMatrix(ies,iag), + & iag=1,21),backLogEnergy(ies) + end do + WRITE(21,1858)energyLog(75),(backLogMatrix(75,iag),iag=1,21), + & backLogEnergy(75) + IF(alpha.LT.1.) GO TO 2010 + DO IG2=1,nAzimuthBins,1 + EEE = IG2*azimuthBinWidth + WRITE(21,2014) EEE + 2014 FORMAT(//,' ENERGY(E/E0 IN %) - POLAR ANGLE IN COS-INTERVALS ', + & '(0.05) AT AZIMUTHAL ANGLE =',F5.1, + & ' (BACKSCATTERED PROJECTILES)'/) + do ima = maxDepthBins,1,-1 + if(backEnergyAngle(ima,ig2,22).ne.0) goto 2015 + enddo + ima = 1 + 2015 ima = min(ima+2,maxDepthBins) + write (6, 1886) ((backEnergyAngle(ie,ig2,iagb),iagb=1,22), + & ie=1,ima) + write (6, 1886) (backEnergyAngle(102,ig2,iagb),iagb=1,22) + ENDDO + 2010 CONTINUE + IF(initialEnergy.LT.0.) GO TO 2052 + WRITE(21,2016) + 2016 FORMAT(//,' ENERGY(E/E0 IN %) - POLAR ANGLE IN COS-INTERVALS ', + & '(0.05) (BACKSCATTERED PROJECTILES)'/) + GO TO 2054 + 2052 WRITE(21,2056) + 2056 FORMAT(//,' ENERGY(E IN 0.1*TI) - POLAR ANGLE IN COS-INTERVALS ', + & '(0.05) (BACKSCATTERED PROJECTILES)'/) + do ima = maxDepthBins,1,-1 + if(backEnergyPolar(ima,22).ne.0) goto 2017 + enddo + ima = 1 + 2017 ima = min(ima+2,maxDepthBins) + write (6, 1886) ((backEnergyPolar(ie,iagb),iagb=1,22), + & ie=1,ima) + write (6, 1886) (backEnergyPolar(102,iagb),iagb=1,22) + 2054 continue + WRITE(21,2018) + 2018 FORMAT(//,' AZIMUTHAL ANGLE - POLAR ANGLE IN COS-INTERVALS ', + & '(0.05) (BACKSCATTERED PROJECTILES)'/) + WRITE(21,1886) ((backAngleMatrix(IG,IAGB),IAGB=1,22),IG=1,62) + WRITE(21,2022) + 2022 FORMAT(//,' AZIMUTH.ANGLE - POLAR ANGLE IN COS-INTERVALS ', + & '(0.05) (BACKSCATTERED ENERGY)'/) + WRITE(21,2027) (backEnergy(01,IAGB),IAGB=1,11) + WRITE(21,2025) ((backEnergy(IG,IAGB),IAGB=1,11), + & IG=2,nPolarBins) + WRITE(21,2028) + WRITE(21,2031) backEnergy(1,1),(backEnergy(1,IAGB), + & IAGB=12,22) + DO IG=2,nPolarBins + WRITE(21,2026) backEnergy(IG,1),(backEnergy(IG,IAGB), + & IAGB=12,22) + ENDDO + 1858 FORMAT(1X,1E12.4,20I5,I6,1E12.4) + 1886 FORMAT(1X,I3,20I6,I8) + 2025 FORMAT(1X,1F5.0,10E11.4) + 2026 FORMAT(1X,1F5.0,11E11.4) + 2027 FORMAT(1X,1F5.0,10F11.0) + 2028 FORMAT(/) + 2031 FORMAT(1H1,1X,1F5.0,11F11.0) + 2100 CONTINUE + return + end + C C Write forward sputtering matrix and energy-angle correlation tables. C