diff --git a/sammy/src/blk/AllocateFunctions.f90 b/sammy/src/blk/AllocateFunctions.f90 index 510eb1fe5327e786cf0e6ffebded8376f6663b5d..b2bfcbf9fa9a3873ec909bb49d228983d89ed3b0 100644 --- a/sammy/src/blk/AllocateFunctions.f90 +++ b/sammy/src/blk/AllocateFunctions.f90 @@ -148,6 +148,7 @@ module AllocateFunctions_m if( .not.allocated(array)) then allocate(array(nsize1, nsize2)) + array = 0.0d0 return end if if (size(array,dim=1).ge.want1.and. size(array,dim=2).ge.want2) return diff --git a/sammy/src/blk/Broad_common.f90 b/sammy/src/blk/Broad_common.f90 index 5ecdd9d97aa3f76731acdf5682ee25c377b72c55..d7e3fc8afd9b4674ab563f29ce40377fea28f991 100644 --- a/sammy/src/blk/Broad_common.f90 +++ b/sammy/src/blk/Broad_common.f90 @@ -1,10 +1,11 @@ ! replaces previous common block "Broad" in B04ZYX module broad_common_m - use FreeGasDopplerBroadening_M - use HighEnergyFreeGas_m - use LealHwangBroadening_M - use CrystalLatticeBroadening_M + use Samfgm_m + use Samdbd_m + use Samdop_m + use Samclm_m use DopplerAndResolutionBroadener_M + use FreeGasDopplerBroadening_M use DopplerBroadening_M use GridData_M IMPLICIT NONE @@ -37,16 +38,18 @@ module broad_common_m double precision, pointer :: Deltc2 => Abcd_real(19) type DopplerBroadenInfo - type(FreeGasDopplerBroadening),pointer::freeGas - type(HighEnergyFreeGas),pointer::highEnergyFreeGas - type(LealHwangBroadening),pointer::lealHwang - type(CrystalLatticeBroadening),pointer::crystalLattice + type(Samfgm),pointer::freeGas + type(Samdbd),pointer::highEnergyFreeGas + type(Samdop),pointer::lealHwang + type(Samclm),pointer::crystalLattice - class(DopplerBroadening),pointer::broadener + class(FreeGasDopplerBroadening),pointer::broadener integer::bType=2 ! default to freeGas logical::wantBroaden=.false. + contains + procedure, pass(this) :: setDopple => DopplerBroadenInfo_setDopple end type - type(DopplerBroadenInfo)::dopplerOption + type(DopplerBroadenInfo)::dopplerOption type ResolutionBroadenInfo type(DopplerAndResolutionBroadener),pointer::orrRes ! oak ridge resolution function @@ -62,5 +65,13 @@ module broad_common_m type(GridDataList)::workArray logical::workArrayInit = .false. +contains + +subroutine DopplerBroadenInfo_setDopple(this) +class(DopplerBroadenInfo)::this +if (associated(this%highEnergyFreeGas)) then + this%highEnergyFreeGas%Dopple = Dopple +end if +end subroutine end module broad_common_m diff --git a/sammy/src/blk/Exploc_common.f90 b/sammy/src/blk/Exploc_common.f90 index e973c218b70c251a005d4affbab5bd1a2105d36a..17d751ab0bb64a196d7cb023e6e4df09f0601f20 100644 --- a/sammy/src/blk/Exploc_common.f90 +++ b/sammy/src/blk/Exploc_common.f90 @@ -29,7 +29,6 @@ module exploc_common_m real(kind=8),allocatable,dimension(:)::A_Ispiso integer,allocatable,dimension(:)::I_Ixciso real(kind=8),allocatable,dimension(:)::A_Idpiso - real(kind=8),allocatable,dimension(:)::A_Idsiso real(kind=8),allocatable,dimension(:)::A_Iprdet integer,allocatable,dimension(:)::I_Ifldet @@ -222,12 +221,6 @@ module exploc_common_m call allocate_real_data(A_Idpiso,want) end subroutine make_A_Idpiso - - subroutine make_A_Idsiso(want) - integer::want - call allocate_real_data(A_Idsiso,want) - end subroutine make_A_Idsiso - subroutine make_A_Iprdet(want) integer::want call allocate_real_data(A_Iprdet,want) diff --git a/sammy/src/blk/Fixedr_common.f90 b/sammy/src/blk/Fixedr_common.f90 index 1a77c5e56237e553d97761f3f43308a2a3208702..4d07c589f38a69eb02d41df4c70130cc48df9874 100644 --- a/sammy/src/blk/Fixedr_common.f90 +++ b/sammy/src/blk/Fixedr_common.f90 @@ -67,7 +67,6 @@ module fixedr_m ! old group 8 double precision, pointer :: Ttoe => Ff(56) - double precision, pointer :: Dosind => Ff(57) double precision, pointer :: Sitemp => Ff(58) double precision, pointer :: Sithck => Ff(59) double precision, pointer :: Effcap => Ff(62) diff --git a/sammy/src/clm/CrystalLatticeBroadening_M.f90 b/sammy/src/clm/CrystalLatticeBroadening_M.f90 index cb406d4a84521984d123e89bc4db426718450ea6..d19fad46a443bf9f2ca18899a381859a121128f1 100644 --- a/sammy/src/clm/CrystalLatticeBroadening_M.f90 +++ b/sammy/src/clm/CrystalLatticeBroadening_M.f90 @@ -9,22 +9,22 @@ use, intrinsic :: ISO_C_BINDING implicit none type, extends(FreeGasDopplerBroadening) :: CrystalLatticeBroadening -double precision :: Del_Phonon = 0.0d0 -double precision :: Twt = 0.0d0 -double precision :: C_Trans = 0.0d0 -double precision :: Tbeta = 0.0d0 -double precision :: Sub = 0.0d0 -double precision :: Xdop = 0.0d0 -double precision :: Eps = 0.0d0 -double precision :: Epsc = 0.0d0 -double precision :: F0 = 0.0d0 -double precision :: Tev = 0.0d0 -double precision :: Dwpix = 0.0d0 -double precision :: Tbar = 0.0d0 -double precision :: Del_S_B = 0.0d0 -double precision :: Dw0 = 0.0d0 -double precision :: Sum_Osc_Wts = 0.0d0 -double precision :: Tsave = 0.0d0 +real(kind=8) :: Del_Phonon = 0.0d0 +real(kind=8) :: Twt = 0.0d0 +real(kind=8) :: C_Trans = 0.0d0 +real(kind=8) :: Tbeta = 0.0d0 +real(kind=8) :: Sub = 0.0d0 +real(kind=8) :: Xdop = 0.0d0 +real(kind=8) :: Eps = 0.0d0 +real(kind=8) :: Epsc = 0.0d0 +real(kind=8) :: F0 = 0.0d0 +real(kind=8) :: Tev = 0.0d0 +real(kind=8) :: Dwpix = 0.0d0 +real(kind=8) :: Tbar = 0.0d0 +real(kind=8) :: Del_S_B = 0.0d0 +real(kind=8) :: Dw0 = 0.0d0 +real(kind=8) :: Sum_Osc_Wts = 0.0d0 +real(kind=8) :: Tsave = 0.0d0 integer :: Mode_S_Norm = 0 integer :: Nphon = 0 integer :: N_Contin = 0 @@ -33,6 +33,8 @@ integer :: Nbeta = 0 integer :: Nbx = 0 integer :: Nbeta_Max = 25999 +real(kind=8):: Aaawww + real(kind=8),dimension(:,:),allocatable::Save real(kind=8),dimension(:,:),allocatable::Savex real(kind=8),dimension(:),allocatable::Osc_Wts diff --git a/sammy/src/clm/dopush.f b/sammy/src/clm/dopush.f index 3defe7efe46f3eab3677180c39c729ce5534e746..cdc686cbd3b2ae4f431b439a382a6e9f2341bc2e 100644 --- a/sammy/src/clm/dopush.f +++ b/sammy/src/clm/dopush.f @@ -317,7 +317,7 @@ C & '' ADJUSTED XDOP INTERVAL ............... '', F10.3/ & '' EFFECTIVE TEMPERATURE................. '', F10.3/ & '' DEBAY-WALLER FACTOR................... '', F10.3/)') - & K, calc%Nbeta, calc%Nphon, calc%Xdop, Tempf, Dwpix + & K, calc%Nbeta, calc%Nphon, calc%Xdop, Tempf, calc%Dwpix WRITE (6,*) 'correct run!!! ' C CALL Timer (3) diff --git a/sammy/src/clm/mclm0.f90 b/sammy/src/clm/mclm0.f90 index 125c380deefa5f434ed3aa9753b60088279d4a3c..40fa841770c899a41bccd202c9cb2910c3f7e43a 100644 --- a/sammy/src/clm/mclm0.f90 +++ b/sammy/src/clm/mclm0.f90 @@ -1,72 +1,60 @@ module Samclm_m use CrystalLatticeBroadening_M implicit none +type, extends(CrystalLatticeBroadening) :: Samclm contains -! -! - Subroutine Samclm_0(broadener) -! -! *** Purpose -- Calculate Doppler broadening using Crystal-Lattice Model -! *** Coding based on Dmitri Naberejnev's DOPUSH code, -! *** modified greatly by NML to conform to SAMMY conventions -! - use fixedi_m, only : Lllmax, Ndatd, numUsedPar - use ifwrit_m, only : Kcros, Kdebug, Ksindi, Ksitmp, Ndatb - use exploc_common_m, only : I_Iflmsc - use lbro_common_m, only : Debug - use array_sizes_common_m, only : calcDataSelf - - use Readclm_m - use mclm3_m +procedure, pass(this) :: initialize => Samclm_initialize +procedure, pass(this) :: broaden => Samclm_broaden +procedure, pass(this) :: destroy => Samclm_destroy +end type Samclm +contains +subroutine Samclm_initialize(this, hand, list, work) + implicit none + class(Samclm) :: this + class(DerivativeHandler)::hand + class(GridDataList)::list + class(GridDataList)::work + call CrystalLatticeBroadening_initialize(this, hand, list, work) +end subroutine + +subroutine Samclm_destroy(this) + implicit none + class(Samclm) :: this + call CrystalLatticeBroadening_destroy(this) +end subroutine + +subroutine Samclm_broaden(this) + use fixedr_m, only : Aaawww + use exploc_common_m, only : I_Iflmsc + use Readclm_m + use mclm3_m + class(Samclm) :: this + + integer::ndatb + type(DerivativeHandler)::data + integer::N_Osc_Blank, Nn + + + this%Aaawww = Aaawww + + call CrystalLatticeBroadening_broaden(this) + + WRITE (6,99999) +99999 FORMAT (' *** SAMMY-CLM 15 Nov 07 ***') - IMPLICIT None + ! *** Read through the CLM file to learn array dimensions + CALL Readclm_0 (this, N_Osc_Blank) - integer::M, N, N_Osc_Blank, Nn, Kdatb - class(CrystalLatticeBroadening)::broadener -! -! - WRITE (6,99999) -99999 FORMAT (' *** SAMMY-CLM 15 Nov 07 ***') -! - CALL Initix + ! *** Read the CLM file for real + CALL Readclm (this, N_Osc_Blank) - broadener%numPar = numUsedPar - broadener%debugOutput = .false. - if (Kdebug.ne.0) broadener%debugOutput = .true. + ! *** Initialize the crystal-lattice calculation + CALL Initclm (this) - if (Kcros.EQ.8) THEN - call broadener%addSelfData(calcDataSelf, Ksindi.le.0.and.Ksitmp.GT.0, Lllmax+1) - END IF - call broadener%broaden() + ! *** Dopclm performs CLM Doppler operation + CALL Dopclm (this, I_Iflmsc) +end subroutine -! -! *** Read through the CLM file to learn array dimensions - CALL Readclm_0 (broadener, N_Osc_Blank) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - < -! *** Read the CLM file for real - CALL Readclm (broadener, N_Osc_Blank) -! -! *** Initialize the crystal-lattice calculation - CALL Initclm (broadener) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > -! -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! *** One *** -! - N = 1 - Nn = 1 -! -! -! *** Dopclm performs CLM Doppler operation - CALL Dopclm (broadener, I_Iflmsc) +end module Samclm_M -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! -! -! - CALL Write_Commons_many - RETURN -! - END -end module Samclm_m diff --git a/sammy/src/clm/mclm3.f90 b/sammy/src/clm/mclm3.f90 index 98cd1234a71ed4f470852a675c08feb6c6e250f3..a9bf46bcaceda142d1d025c03f4d8f81a5af6afa 100644 --- a/sammy/src/clm/mclm3.f90 +++ b/sammy/src/clm/mclm3.f90 @@ -11,36 +11,26 @@ contains ! ! *** PURPOSE -- FORM DOPPLER-BROADENED CROSS SECTION AND DERIVATIVES ! - use fixedi_m, only : Lllmax - use ifwrit_m, only : Kcros, Ksindi, Ksitmp,Kvtemp + use ifwrit_m, only : Ksitmp,Kvtemp use fixedr_m, only : Emax, Emaxs, Emin, Emins, Sitemp - use brdd_common_m, only : Iup, Kc use constn_common_m, only : Boltzm - use EndfData_common_m, only : expData, resparData,radFitFlags - use AuxGridHelper_M, only : setAuxGridOffset, setAuxGridRowMax - use SammyGridAccess_M - use mfgm3_M, only : stetd + use EndfData_common_m, only : resparData,radFitFlags use Qtrap_Clm_m use Getsab_m - use array_sizes_common_m, only : calcData, calcDataSelf use convert_to_transmission_m use DerivativeHandler_M IMPLICIT None - type(SammyGridAccess)::grid, auxGrid + class(CrystalLatticeBroadening)::calc ! integer::Iflmsc(*) real(kind=8)::C_Norm, eaux, em, Tevf, Tevx - integer::Isomax, Isox, Iv, Iw, J, Jdat, Kkkdat, insig + integer::Isomax, Isox, J, Jdat, insig integer(C_SIZE_T)::Iso - integer::Kkkmin, Now, Nowx, Ns, numEl, numElAux, Kkkkkk, nauxStart + integer::Kkkmin, Now, Ns, numEl, numElAux, Kkkkkk, nauxStart type(DerivativeHandler)::tmpCalc + type(DerivativeHandler)::calcData - call grid%initialize() - call grid%setToExpGrid(expData) - call auxGrid%initialize() - call auxGrid%setToAuxGrid(expData) - call setAuxGridOffset(1) ! reset auxillary grid starting point numElAux = calc%getNumEnergyUnbroadened() numEl = calc%getNumEnergyBroadened() call tmpCalc%initialize() @@ -52,21 +42,11 @@ contains ! * Parbgf(Numbgf), Iflbgf(*), Kndbgf(*), Bgfmin(*), Bgfmax(*) ! calc%Tev = Boltzm*calc%getTemperature() + call calc%getData(calcData) -! - IF (Kcros.EQ.8 .AND. Ksindi.GT.0) THEN - Iv = 1 - ELSE - Iv = 0 - END IF -! - Iw = 0 - IF (Kcros.EQ.8 .AND. (Ksindi.GT.0 .OR. Ksitmp.GT.0)) Iw = 1 ! ! Now = 0 - Nowx = 0 - Kkkdat = 0 ! Isomax = calcData%getUsedIsotopes() IF (Isomax.EQ.0) STOP '[STOP in Dopclm in clm/mclm3.f]' @@ -77,82 +57,50 @@ contains Isox = Iso if (Isomax.gt.1.and. & calcData%getRealIsotopeIndex(Iso).le.0) then - GO TO 80 + cycle end if -! - Kc = 1 - Iup = 0 ! Kkkmin = 0 Kkkkkk = 0 - Kkkdat = 0 nauxStart = 0 ! ! *** Start of major loop over energy-points - DO 70 J=1,numElAux - Jdat = J + Jdat = 0 + DO J=1,numEl + call calc%setCurrentPos(Kkkkkk+1) ! IF ((J/1000)*1000.EQ.J .AND. Isomax.GT.1) WRITE (6,10000) J, Isox 10000 FORMAT (' *** on data point number', i10, ' for nuclide number', i3) IF ((J/1000)*1000.EQ.J .AND. Isomax.EQ.1) WRITE (6,10001) J 10001 FORMAT (' *** on data point number', I10) ! - IF (numElAux.eq.numEl) THEN - em = auxGrid%getEnergy(J, expData) - ELSE - IF (J.GT.numEl) THEN - GO TO 80 - ELSE - Em = grid%getEnergy(J, expData) - END IF - END IF + Em = calc%getEnergyBroadened(J) + Jdat = calc%getEmInUnbroadened(Em, Jdat) ! IF (Em.LT.Emins) THEN ! These points are the very low-energy limit, ! of very little interest, ergo "stetd" - eaux = auxGrid%getEnergy(J + 1, expData) + eaux = calc%getEnergyUnbroadened(Jdat + 1) IF (eaux.GE.Emin) THEN - CALL Stetd (calcData, calcData,Kkkkkk+1, & - Now, Kvtemp, Isox, & - Jdat, 0) - IF (Kcros.EQ.8) THEN - IF (Ksindi.GT.0) THEN - CALL Stetd (calcDataSelf,calcDataSelf, & - Kkkkkk+1, Nowx, Iflmsc(Ksitmp), & - Isox, Jdat, 0) - ELSE IF (Ksitmp.GT.0) THEN - CALL Stetd (calcData, calcDataSelf, & - Kkkkkk+1, Nowx, Iflmsc(Ksitmp), & - Isox, Jdat, Lllmax+1) - END IF - END IF - GO TO 40 + NOW = NOW + 1 + call calc%transferUnbroadenedAll(Jdat, Isox, Kvtemp, Iflmsc(Ksitmp)) + Kkkkkk = Kkkkkk + 1 + cycle ELSE nauxStart = J - GO TO 70 + cycle END IF ELSE IF (Em.GT.Emaxs) THEN ! These points are the very high-energy limit, ! of very little interest, ergo "stetd" - eaux = auxGrid%getEnergy(J - 1, expData) + eaux = calc%getEnergyUnbroadened(Jdat - 1) IF (eaux.LE.Emax) THEN - CALL Stetd (calcData, calcData,Kkkkkk+1, & - Now, Kvtemp, Isox, & - Jdat, 0) - IF (Kcros.EQ.8) THEN - IF (Ksindi.GT.0) THEN - CALL Stetd (calcDataSelf, calcDataSelf, & - Kkkkkk+1, Nowx, Iflmsc(Ksitmp), & - Isox, Jdat, 0) - ELSE IF (Ksitmp.gt.0) THEN - Call Stetd (calcData, calcDataSelf, & - Kkkkkk+1, Nowx, Iflmsc(Ksitmp), & - Isox, Jdat, Lllmax+1) - END IF - END IF - GO TO 40 + NOW = NOW + 1 + call calc%transferUnbroadenedAll(Jdat, Isox, Kvtemp, Iflmsc(Ksitmp)) + Kkkkkk = Kkkkkk + 1 + cycle ELSE - GO TO 80 + exit END IF END IF ! @@ -161,9 +109,7 @@ contains ! ********* regular CLM Doppler for most cross sections CALL Getsab (calc, Em, calc%Tev, C_Norm, Tevf, Ns) CALL Qtrap_Clm (calc, tmpCalc, calcData, calc%Tev, calc%getTemperature(), Em, & - C_Norm, Kvtemp, calcData%getNnnsig(), & - Isox, 0, Ns, calcData, & - Kkkkkk+1) + C_Norm, Kvtemp, Isox, Ns) ! ! ********* Doppler widths etc for self-indication transmission IF (Ksitmp.GT.0) THEN @@ -173,53 +119,34 @@ contains END IF ! ! ********* Broaden self-indication transmission separately - IF (Ksindi.GT.0 .AND. Kcros.EQ.8) THEN - CALL Getsab (calc, Em, Tevx, C_Norm, Tevf, Ns) - CALL Qtrap_Clm (calc, tmpCalc, & - calcDataSelf, & - Tevx, Sitemp, Em, & - C_Norm, Iflmsc(Ksitmp), 1, Isox, 0, Ns, calcDataSelf,& - Kkkkkk+1) - END IF +! necessary copies have been made so we do need to +! distinguish between where the data are saved ! -! ********* Broaden self-indication transm; but stored in calcData old data originally - IF (Ksindi.EQ.0 .AND. Ksitmp.GT.0 .AND. Kcros.EQ.8) THEN + IF (calc%hasSelf) THEN CALL Getsab (calc, Em, Tevx, C_Norm, Tevf, Ns) - CALL Qtrap_Clm (calc, tmpCalc, & - calcData, Tevx, Sitemp, Em, & - C_Norm, Iflmsc(Ksitmp), 1, Isox, & - Lllmax+1, Ns, calcDataSelf, Kkkkkk+1) + CALL Qtrap_Clm (calc, tmpCalc, & + calc%dataSelf, & + Tevx, Sitemp, Em, & + C_Norm, Iflmsc(Ksitmp), Isox,Ns) END IF -! - 40 CONTINUE + Kkkkkk = Kkkkkk + 1 -! -! - Kkkdat = Kkkdat + 1 -! -! - 70 CONTINUE -! *** END of do-loop on energy + end do ! *** END of do-loop on energy ! - 80 CONTINUE END DO ! *** end of do-loop on isotopes (nuclides) ! ! nauxStart = nauxStart + 1 - call setAuxGridRowMax(Kkkdat) - IF (Now.NE.0) WRITE (21,99997) Now, Kkkdat*Isomax - IF (Now.NE.0 .AND. calc%debugOutput) WRITE (06,99997) Now,Kkkdat*Isomax + IF (Now.NE.0) WRITE (21,99997) Now, Kkkkkk*Isomax + IF (Now.NE.0 .AND. calc%debugOutput) WRITE (06,99997) Now,Kkkkkk*Isomax 99997 FORMAT (' No Doppler broadening occured', I8, ' times of a possible', I8) ! call calc%updateBroadenedOffset( nauxStart) call calc%setLength(Kkkkkk) - call grid%destroy() - call auxGrid%destroy() - call setAuxGridOffset(nauxStart) call tmpCalc%destroy() RETURN ! diff --git a/sammy/src/clm/mclm4.f90 b/sammy/src/clm/mclm4.f90 index 0277114eb1996c3cd1af15849341bcfb4cdd44fb..da6926973aa255d237ab4c356d229bc947f41d0d 100644 --- a/sammy/src/clm/mclm4.f90 +++ b/sammy/src/clm/mclm4.f90 @@ -1,6 +1,10 @@ module Getsab_m use AllocateFunctions_m use CrystalLatticeBroadening_M +use mclm5_m +use mcml6_m +use mclm7_m +use constn_common_m, only : Aneutr IMPLICIT None contains ! @@ -14,11 +18,6 @@ contains ! *** Input -- Em, etc. ! *** Output -- Bs, Ss ! - use fixedr_m, only : Aaawww - use mclm5_m - use mcml6_m - use mclm7_m - use constn_common_m, only : Aneutr ! class(CrystalLatticeBroadening)::calc real(Kind=8)::Em, Tevx, Tevf, C_Norm @@ -40,7 +39,7 @@ contains ! ! *** Temporarily assume (1) neutrons only, (2) one isotope only ! *** Eventually need to fix this! - Recul = Em*(Aneutr/(Aaawww+Aneutr)) + Recul = Em*(Aneutr/(calc%Aaawww+Aneutr)) Alpha = Recul/Tevx call allocate_real_data(calc%Sab, calc%Nbeta) ! diff --git a/sammy/src/clm/mclm8a.f90 b/sammy/src/clm/mclm8a.f90 index af60f35106e3108ce5c57fa804769a194a05f750..6e878dc33ccd4838be2655b71f1faef33e4bedce 100644 --- a/sammy/src/clm/mclm8a.f90 +++ b/sammy/src/clm/mclm8a.f90 @@ -1,6 +1,5 @@ module Qtrap_Clm_m use CrystalLatticeBroadening_M - use fixedr_m, only : Aaawww use constn_common_m, only : Aneutr use DerivativeHandler_M use mcml8_m @@ -14,9 +13,8 @@ module Qtrap_Clm_m ! ! ----------------------------------------------------------------- ! - SUBROUTINE Qtrap_Clm (calc, tmpCalc, derivs, & - Tevx, Tempx, Em, C_Norm, Ktempx, Na, & - Isox, Locate, Ns, derivsNew, irow) + SUBROUTINE Qtrap_Clm (calc, tmpCalc, derivs, & + Tevx, Tempx, Em, C_Norm, Ktempx, Isox, Ns) ! ! *** INTEGRATION BY TRAPEZOIDAL METHOD ! CRySTAL SCATTERING FUNCTION INTEGRATION @@ -28,23 +26,23 @@ module Qtrap_Clm_m ! *** Ss - Weighting function (S_alpha_beta) ! class(CrystalLatticeBroadening)::calc - INTEGER Ktempx, Na, Isox, Locate, Ns + INTEGER Ktempx, Na, Isox, Ns DOUBLE PRECISION Tevx, Tempx, Em, C_Norm DOUBLE PRECISION S, Olds, Xxa, Xxb, Del, Sel, E_Prime DOUBLE PRECISION Aaa, Xx, Yy, val INTEGER Jmax, Ibet, Lstart, L1, L2, irow, Ipar, N - type(DerivativeHandler)::derivs, derivsNew, tmpCalc + type(DerivativeHandler)::derivs, tmpCalc real(kind=8),parameter:: Zero=0.0d0, Half=0.5d0, One=1.0d0 real(kind=8)::Alpha, Recul - integer::It, J, Jj, L1er, L2er, Nax, numEl + integer::It, J, Jj, L1er, L2er, numEl logical(C_BOOL)::accu ! L1er = 0 L2er = 0 - Nax = derivsNew%getNnnsig() - call tmpCalc%setNnsig(Nax) - call tmpCalc%reserve(Nax, calc%numPar+1) - IF (Locate.NE.0) Nax = 1 + irow = calc%getCurrentPos() + Na = derivs%getNnnsig() + call tmpCalc%setNnsig(Na) + call tmpCalc%reserve(Na, calc%numPar+1) ! Lstart = 1 Jmax = 10 @@ -68,7 +66,7 @@ module Qtrap_Clm_m Yy = Yy*Aaa Call Sig_Int (calc, tmpCalc, derivs, & Tempx, Xx, Yy, Ktempx, Na, Isox, & - Locate, L1, L2, 1, 1) + L1, L2, 1, 1) END IF ! @@ -81,7 +79,7 @@ module Qtrap_Clm_m Yy = Yy*Aaa Call Sig_Int (calc, tmpCalc, derivs, & Tempx, Xx, Yy, Ktempx, Na, Isox, & - Locate, L1, L2, 1, 1) + L1, L2, 1, 1) END IF ! Aaa = Half @@ -93,7 +91,7 @@ module Qtrap_Clm_m ! ! *** Take half of what's already there do ipar = 0, calc%numPar - do N = 1, Nax + do N = 1, Na val = tmpCalc%getDataNs(1, N, ipar, 1)*Half if (val.eq.0.0d0) cycle call tmpCalc%addDataNs(1, N, Ipar, 1, val) @@ -121,8 +119,8 @@ module Qtrap_Clm_m Call Find_L (calc, Xx, L1, L2, Lstart, L1er, L2er) Call Sig_Int (calc, tmpCalc, derivs, & - Tempx, Xx, Yy, Ktempx, Nax, Isox, & - Locate, L1, L2, 1, 1) + Tempx, Xx, Yy, Ktempx, Na, Isox, & + L1, L2, 1, 1) END IF E_Prime = E_Prime + Del ! @@ -141,16 +139,16 @@ module Qtrap_Clm_m 10 CONTINUE accu = .true. - call derivsNew%setAccumulate(accu) + call derivs%setAccumulate(accu) do ipar = 0, calc%numPar - do N = 1, Nax + do N = 1, Na val = tmpCalc%getDataNs(1, N, ipar, 1) if (val.eq.0.0d0) cycle - call derivsNew%addDataNs(irow, N, Ipar, Isox, val) + call derivs%addDataNs(irow, N, Ipar, Isox, val) end do end do accu = .false. - call derivsNew%setAccumulate(accu) + call derivs%setAccumulate(accu) end do ! ! @@ -158,7 +156,7 @@ module Qtrap_Clm_m 20 CONTINUE ! *** Temporarily assume (1) neutrons only, (2) one isotope only ! *** Eventually need to fix this! - Recul = Em*(Aneutr/(Aaawww+Aneutr)) + Recul = Em*(Aneutr/(calc%Aaawww+Aneutr)) Alpha = Recul/Tevx ! Sel = dEXP(-calc%Dwpix*Alpha) @@ -166,10 +164,10 @@ module Qtrap_Clm_m ELSE IF (calc%Mode_S_Norm.EQ.1) THEN Yy = (One-Sel)/(C_Norm-Sel) do ipar = 0, calc%numPar - do N = 1, Nax - val = Yy * derivsNew%getDataNs( irow, N, Ipar, Isox) + do N = 1, Na + val = Yy * derivs%getDataNs( irow, N, Ipar, Isox) if (val.eq.0.0d0) cycle - call derivsNew%addDataNs(irow, N, Ipar, Isox, val) + call derivs%addDataNs(irow, N, Ipar, Isox, val) end do end do END IF @@ -179,9 +177,9 @@ module Qtrap_Clm_m Xx = Em + Recul Yy = Sel Call Find_L (calc, Xx, L1, L2, Lstart, L1er, L2er) - Call Sig_Int (calc, derivsNew, derivs, & + Call Sig_Int (calc, derivs, derivs, & Tempx, Xx, Yy, Ktempx, Na, Isox, & - Locate, L1, L2, irow, Isox) + L1, L2, irow, Isox) ! IF (L1er.GT.0) THEN WRITE (6,10100) L1er, Em, calc%getEnergyUnbroadened(1) @@ -205,13 +203,13 @@ module Qtrap_Clm_m ! SUBROUTINE Sig_Int_L (calc, tmpCalc, derivs, & Tempx, Xx, Yy, Ktempx, Na, Isox, & - Locate, L1, L2, irow, ourIso) + L1, L2, irow, ourIso) ! ! *** Purpose -- Linear interpolate to get CrossSection(Xx) using ! *** CrossSection(Energb(L1)) and CrossSection(Energb(L2)) ! class(CrystalLatticeBroadening)::calc - INTEGER Ktempx, Na, Isox, Locate, L1, L2 + INTEGER Ktempx, Na, Isox, L1, L2 type(DerivativeHandler)::derivs, tmpCalc real(kind=8)::Tempx, Xx, Yy real(kind=8):: Aa(4) @@ -230,11 +228,7 @@ module Qtrap_Clm_m Aa(1) = (E2-Xx)/D * Yy Aa(2) = (Xx-E1)/D * Yy END IF -! -! *** - IF (Locate.EQ.0) THEN -! *** -! --- + ! update cross section (ipar=0) as well as derivatives do Ipar = 0, calc%numPar DO N=1,Na @@ -249,23 +243,6 @@ module Qtrap_Clm_m END DO END DO ! *** - ELSE -! IF (Locate.NE.0) THEN -! *** -! --- - ! update cross section (ipar=0) as well as derivatives - do Ipar = 0, calc%numPar - L = 0 - val = 0.0d0 - DO LL=L1,L2 - L = L + 1 - val = val + Aa(L)*derivs%getDataNsOld(LL, Locate, Ipar, Iso) - end do - if (val.eq.0.0d0) cycle - call tmpCalc%addDataNs(irow, 1, Ipar, ourIso, val) - END DO -! *** - END IF ! *** ! RETURN @@ -276,13 +253,13 @@ module Qtrap_Clm_m ! SUBROUTINE Sig_Int (calc, tmpCalc, derivs, & Tempx, Xx, Yy, Ktempx, Na, Isox, & - Locate, L1, L2, irow, ourIso) + L1, L2, irow, ourIso) ! ! *** Purpose -- Quadratic interpolate to get CrossSection(Xx) using ! *** CrossSection(Energb(L1-1)) to CrossSection(Energb(L2+1)) ! class(CrystalLatticeBroadening)::calc - INTEGER Ktempx, Na, Isox, Locate, L1, L2 + INTEGER Ktempx, Na, Isox, L1, L2 real(kind=8)::Tempx, Xx, Yy type(DerivativeHandler)::derivs, tmpCalc real(kind=8)::Aa(4) @@ -297,7 +274,7 @@ module Qtrap_Clm_m IF (L1.EQ.1 .OR. L2.EQ.Ndatb .OR. L1.EQ.L2) THEN CALL Sig_Int_L (calc, tmpCalc, derivs, & Tempx, Xx, Yy, Ktempx, Na, Isox, & - Locate, L1, L2, irow, ourIso) + L1, L2, irow, ourIso) RETURN END IF ! @@ -329,9 +306,7 @@ module Qtrap_Clm_m ! ! ! *** - IF (Locate.EQ.0) THEN -! *** -! --- + ! update cross section (ipar=0) as well as derivatives Do Ipar = 0, calc%numPar DO N=1,Na @@ -345,25 +320,6 @@ module Qtrap_Clm_m call tmpCalc%addDataNs(irow, N, Ipar, ourIso, val) end do END DO -! --- -! *** - ELSE -! IF (Locate.NE.0) THEN -! *** - ! update cross section (ipar=0) as well as derivatives - Do Ipar = 0, calc%numPar - L = 0 - val = 0.0d0 - DO LL=L1-1,L2+1 - L = L + 1 - val = val + Aa(L) * derivs%getDataNsOld(LL, Locate, Ipar, Iso) - end do - if (val.eq.0.0d0) cycle - call tmpCalc%addDataNs(irow, 1, Ipar, ourIso, val) - END DO -! *** - END IF -! *** ! accu = .false. diff --git a/sammy/src/convolution/DopplerAndResolutionBroadener.cpp b/sammy/src/convolution/DopplerAndResolutionBroadener.cpp index 82601476630c8ab53121408515c30ec5314a7df5..97f6119705e4ec7a01cefc25540a7b70f314398a 100644 --- a/sammy/src/convolution/DopplerAndResolutionBroadener.cpp +++ b/sammy/src/convolution/DopplerAndResolutionBroadener.cpp @@ -179,10 +179,17 @@ int DopplerAndResolutionBroadener::getEmInUnbroadened(double em, int istart) con void DopplerAndResolutionBroadener::calcIntegralSpan(double elow, double ehigh, bool oneExtra){ int nener = getNumEnergyUnbroadened(); + int ihigh = integralStart + integralPts; + if (ihigh < 0) ihigh = 0; + if (ihigh >= nener) ihigh = nener -1; + double eCurrent = getEnergyUnbroadened(ihigh); + if (eCurrent > ehigh) ihigh = 0; + + if ( integralStart < 0) integralStart = 0; if ( integralStart >= nener) integralStart = nener - 1; - double eCurrent = getEnergyUnbroadened(integralStart); + eCurrent = getEnergyUnbroadened(integralStart); // assume data are ascending in energy while (eCurrent > elow && integralStart > 0){ @@ -204,6 +211,7 @@ void DopplerAndResolutionBroadener::calcIntegralSpan(double elow, double ehigh, int i = integralStart; for (; i < nener-1; i++){ integralPts = integralPts + 1; + if (i < ihigh) continue; eCurrent = getEnergyUnbroadened(i); if ( eCurrent >= ehigh) break; } diff --git a/sammy/src/cro/mcro5.f90 b/sammy/src/cro/mcro5.f90 index c708f3fcf0bcd289bdd0ec783e150c5e9ba681a3..5528f5f4715f0078bd02b2a135c8d2a2d8baee1e 100644 --- a/sammy/src/cro/mcro5.f90 +++ b/sammy/src/cro/mcro5.f90 @@ -149,28 +149,23 @@ end module sumAndConvertAfterBroadening_m use abro_common_m use cbro_common_m use lbro_common_m - use dop_m use ssm_m use orr_m use rpi_m use rsl_m - use dop_m use ssm_m use rsl_m use rpi_m use orr_m use rsl7_m use broad_common_m - use samdbd_m - use Samfgm_0_m - use Samclm_m - use FreeGasDopplerBroadening_M use DopplerAndResolutionBroadener_M use GridData_M use EndfData_common_m, only : expData use array_sizes_common_m, only : calcData, calcDataSelf use sumAndConvertAfterBroadening_m use, intrinsic :: ISO_C_BINDING + IMPLICIT none logical::debugOut logical(C_BOOL)::moreBroadening, needIsos @@ -235,7 +230,7 @@ end module sumAndConvertAfterBroadening_m end if ! any doppler broadening - if (Ydoppr) then + if (Ydoppr) then moreBroadening = Yresol.OR.Yssmsc if (.not.workArrayInit) then call workArray%initialize() @@ -248,18 +243,22 @@ end module sumAndConvertAfterBroadening_m ! switch handler data grid call Set_Kws + dopplerOption%broadener%numPar = numUsedPar + dopplerOption%broadener%debugOutput = .false. + if (Kdebug.ne.0) dopplerOption%broadener%debugOutput = .true. + call dopplerOption%broadener%setupBroadnener(moreBroadening) + if (Kcros.EQ.8) THEN + call dopplerOption%broadener%addSelfData(Ksindi.le.0.and.Ksitmp.GT.0, Lllmax+1) + END IF + call dopplerOption%setDopple() + dopplerOption%broadener%Sitemp = Sitemp + CALL Initix + call dopplerOption%broadener%broaden() + CALL Write_Commons_Many + + IF (dopplerOption%bType.EQ.1) Jjjdop = 1 - IF (dopplerOption%bType.EQ.0) then - call Samdbd_0(dopplerOption%highEnergyFreeGas) - else IF (dopplerOption%bType.EQ.1) then - call Samdop_0(dopplerOption%lealHwang) - Jjjdop = 1 - else IF ( dopplerOption%bType.EQ.2) then - call Samfgm_0(dopplerOption%freeGas) - else IF ( dopplerOption%bType.EQ.3) then - call Samclm_0(dopplerOption%crystalLattice) - end if call sumAndConvertAfterBroadening(moreBroadening, Yssmsc, dopplerOption%broadener) Jwwwww = 2 diff --git a/sammy/src/dbd/HighEnergyFreeGas_m.f90 b/sammy/src/dbd/HighEnergyFreeGas_m.f90 index 65d4210abd11ebc35e175a407935887859d862be..f4fc9a233272204c116578210dc5d5efbe1e85ab 100644 --- a/sammy/src/dbd/HighEnergyFreeGas_m.f90 +++ b/sammy/src/dbd/HighEnergyFreeGas_m.f90 @@ -9,6 +9,7 @@ use, intrinsic :: ISO_C_BINDING implicit none type, extends(FreeGasDopplerBroadening) :: HighEnergyFreeGas +real(kind=8)::Dopple contains procedure, pass(this) :: initialize => HighEnergyFreeGas_initialize procedure, pass(this) :: broaden => HighEnergyFreeGas_broaden diff --git a/sammy/src/dbd/mdbd0.f90 b/sammy/src/dbd/mdbd0.f90 index e85877da0293bcf125d461c9d72a5cc2bb0b4c3a..fc580f952c7c9494f503b2a694fb4a70090db635 100644 --- a/sammy/src/dbd/mdbd0.f90 +++ b/sammy/src/dbd/mdbd0.f90 @@ -1,41 +1,46 @@ module samdbd_m use HighEnergyFreeGas_m +implicit none +type, extends(HighEnergyFreeGas) :: Samdbd contains +procedure, pass(this) :: initialize => Samdbd_initialize +procedure, pass(this) :: broaden => Samdbd_broaden +procedure, pass(this) :: destroy => Samdbd_destroy +end type Samdbd + +contains +subroutine Samdbd_initialize(this, hand, list, work) + implicit none + class(Samdbd) :: this + class(DerivativeHandler)::hand + class(GridDataList)::list + class(GridDataList)::work + call HighEnergyFreeGas_initialize(this, hand, list, work) +end subroutine + +subroutine Samdbd_destroy(this) + implicit none + class(Samdbd) :: this + call HighEnergyFreeGas_destroy(this) +end subroutine + +subroutine Samdbd_broaden(this) ! -! - SUBROUTINE Samdbd_0(broadener) -! -! *** purpose -- perform High-Energy-Gaussian Approximation version of -! Doppler broadening -! - use fixedi_m, only : numUsedPar - use ifwrit_m, only : Kdebug use Dopplr_m IMPLICIT None ! - class(HighEnergyFreeGas)::broadener - integer::Kdatb + class(Samdbd)::this ! WRITE (6,99999) 99999 FORMAT (' *** SAMMY-DBD 15 Nov 07 ***') -! - CALL Initix - broadener%numPar = numUsedPar - broadener%debugOutput = .false. - if (Kdebug.ne.0) broadener%debugOutput = .true. ! - call broadener%broaden() + call HighEnergyFreeGas_broaden(this) ! ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > ! ! *** Dopplr PERFORMS DOPPLER BROADENING OPERATION (HEGA) - CALL Dopplr_broaden(broadener) + CALL Dopplr_broaden(this) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -> -! - CALL Write_Commons_Many - RETURN -! - END + END subroutine end module samdbd_m diff --git a/sammy/src/dbd/mdbd1.f90 b/sammy/src/dbd/mdbd1.f90 index 8a87ae529871ccb98a3a3147a239873325f7e818..f0ddb197d543b70038b6e9b02fc704b708b2cb3f 100644 --- a/sammy/src/dbd/mdbd1.f90 +++ b/sammy/src/dbd/mdbd1.f90 @@ -3,7 +3,6 @@ use HighEnergyFreeGas_m use DerivativeHandler_M use ifwrit_m, only : Kvtemp, Nolowb use fixedr_m, only : Emaxs, Emins -use broad_common_m, only : Brdlim, Dopple use exploc_common_m, only : A_Idpiso, I_Iflmsc use, intrinsic :: ISO_C_BINDING implicit none @@ -46,6 +45,7 @@ contains call calcData%nullify() call calcData%reserve(nauxMax*calcData%getNnnsig(),calc%numPar+1) Now = 0 + ! ! ! *** Do separately for each isotope (Nuclide), since Doppler-width is @@ -59,7 +59,7 @@ contains Isox = iso ! Iffy = 0 - Ddo = Dopple + Ddo = calc%Dopple ! ! *** start of major loop over energy-points Kkkkkk = 0 @@ -90,34 +90,30 @@ contains Wdop = Two*Ddo*Vv ! Wdop=DOPPLER WIDTH AT Energy EM ! - Eup = Em + Brdlim*Wdop + Eup = Em + calc%Brdlim*Wdop eKdatb = calc%getEnergyUnbroadened(nauxMax) IF (Eup.GT.eKdatb) Eup = eKdatb - Elow = Em - Brdlim*Wdop + Elow = Em - calc%Brdlim*Wdop e1 = calc%getEnergyUnbroadened(1) IF (Elow.LT.e1) Elow = e1 ! ! ********* find how many and which points are in integral for j - call calc%calcIntegralSpan(Elow, Eup, oneExtra) + call calc%calcIntegralSpan(Elow, Eup, oneExtra) Kc = calc%getIntegralStart() Ipnts = calc%getIntegralSpan() ! Kkkkkk = Kkkkkk + 1 IF ((Nolowb.NE.0 .AND. calc%Elowbr.GT.Em) .OR. Ipnts.le.5) THEN ! ********* IF (don't want low-E brdng, or) too few points, do not broaden - Now = Now + 1 + Now = Now + 1 do ipar = 0, calc%numPar DO N=1, calcData%getNnnsig() val = calcData%getDataNsOld(iposVel, N, Ipar, Isox) + if ( Kvtemp.gt.0.and.Kvtemp.eq.ipar) cycle if ( val.eq.0.0d0) cycle call calcData%addDataNs(Kkkkkk, N, Ipar, Isox, val) end do - end do - IF (calc%numPar.gt.0.and.Kvtemp.GT.0) THEN - DO N=1, calcData%getNnnsig() - call calcData%addDataNs(Kkkkkk, N, Kvtemp, Isox, 0.0d0) - end do - END IF + end do ELSE ! ********* Doppler-broaden CALL Xdoppl (calc, Em, Wdop, Iffy, Isox, Kkkkkk) @@ -169,7 +165,6 @@ contains real(kind=8)::Sigpls(100), Sigmns(100), Derdop(100) real(kind=8)::Del, Derdp1, Derdp2, ewhich, Sigt, W integer::I, Ikc, Ipar, Iso, Jwhich, K, KS, N, Iparx - logical(C_BOOL)::accu real(kind=8),parameter::Zero=0.0d0, One=1.0d0 integer::Kc, Ipnts real(kind=8)::Wts @@ -205,8 +200,6 @@ contains ! *** 4-point quadrature rule Wts = Weight * gaussian IF (Ipnts.GT.12) CALL Dopbrd (calc, EM, Wdop) ! - accu = .true. - call calcData%setAccumulate(accu) DO N=1,calcData%getNnnsig() ! update cross section (ipar=0) as well as derivatives Do Ipar = 0, calc%numPar @@ -217,19 +210,13 @@ contains Ikc = I + Kc - 1 val = val + calcData%getDataNsOld(Ikc,N, Ipar, Iso)*Wts end do + if (Kvtemp.gt.0.and.Kvtemp.eq.Ipar) then + val = Derdop(N)*Wdop*0.5d0/calc%getTemperature() + end if if (val.eq.0) cycle call calcData%addDataNs(irow, N, Ipar, Iso, val) END DO END DO - accu = .false. - call calcData%setAccumulate(accu) -! - IF (Kvtemp.GT.0.and.calc%numPar.GT.0) THEN - DO N=1,calcData%getNnnsig() - val = Derdop(N)*Wdop*0.5d0/calc%getTemperature() - call calcData%addDataNs(irow, N, Kvtemp, Iso, val) - END DO - END IF ! IF (.not.calc%debugOutput.OR. Kvtemp.LE.0) RETURN IF (calc%numPar.EQ.0) RETURN diff --git a/sammy/src/dop/mdop0.f90 b/sammy/src/dop/mdop0.f90 index 536a31603eb0f8077e1ce045f04e2bf935efcaef..f1dc35d9990e949a88395d58b5522980dca49b9a 100644 --- a/sammy/src/dop/mdop0.f90 +++ b/sammy/src/dop/mdop0.f90 @@ -1,53 +1,59 @@ ! -module dop_m +module Samdop_m use LealHwangBroadening_M + implicit none + + type, extends(LealHwangBroadening) :: Samdop contains -! - SUBROUTINE Samdop_0(broadener) - use fixedi_m, only : Lllmax, numUsedPar - use ifwrit_m, only : Kcros, Kdebug, Ksitmp, Ksindi + procedure, pass(this) :: initialize => Samdop_initialize + procedure, pass(this) :: broaden => Samdop_broaden + procedure, pass(this) :: destroy => Samdop_destroy + end type Samdop + + contains + subroutine Samdop_initialize(this, hand, list, work) + implicit none + class(Samdop) :: this + class(DerivativeHandler)::hand + class(GridDataList)::list + class(GridDataList)::work + call LealHwangBroadening_initialize(this, hand, list, work) + end subroutine + + subroutine Samdop_destroy(this) + implicit none + class(Samdop) :: this + call LealHwangBroadening_destroy(this) + end subroutine + + subroutine Samdop_broaden(this) use exploc_common_m, only : I_Iflmsc - use array_sizes_common_m, only : calcDataSelf use dop1_m use dop2_m - IMPLICIT None -! - type(GridData)::grid, auxGrid - class(LealHwangBroadening)::broadener + + class(Samdop)::this integer::I2pls1, Mmmmmm ! WRITE (6,99999) 99999 FORMAT (' *** SAMMY-DOPPL 8 Aug 07 ***') -! -!x CALL Initix -! -! - broadener%numPar = numUsedPar - broadener%debugOutput = .false. - if (Kdebug.ne.0) broadener%debugOutput = .true. - if (Kcros.EQ.8) THEN - call broadener%addSelfData(calcDataSelf, Ksindi.le.0.and.Ksitmp.GT.0, Lllmax+1) - END IF -! - call broadener%broaden() + call LealHwangBroadening_broaden(this) ! *** Coefgn generates Coefficients Coef for solving heat equation ! *** for performing Doppler broadening - CALL Coefgn (broadener%coefGrid, broadener%Kjjjjj, Mmmmmm, I2pls1) + CALL Coefgn (this%coefGrid, this%Kjjjjj, Mmmmmm, I2pls1) ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - < ! ! ! *** Dopplh performs Doppler broadening operation via Leal-Hwang method - CALL Dopplh(broadener, I_Iflmsc , Mmmmmm , I2pls1) + CALL Dopplh(this, I_Iflmsc , Mmmmmm , I2pls1) ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > -! - CALL Write_Commons_Many + RETURN ! - END + END subroutine -end module dop_m +end module Samdop_m diff --git a/sammy/src/fgm/FreeGasDopplerBroadening_M.f90 b/sammy/src/fgm/FreeGasDopplerBroadening_M.f90 index bee13b3510fca9e246f6a7fb5d6cbc7388ef1707..7c17b2327766b2db0105932e5c9ef3c755d41568 100644 --- a/sammy/src/fgm/FreeGasDopplerBroadening_M.f90 +++ b/sammy/src/fgm/FreeGasDopplerBroadening_M.f90 @@ -8,12 +8,15 @@ implicit none type, extends(DopplerBroadening) :: FreeGasDopplerBroadening real(kind=8),allocatable,dimension(:)::velocity +real(kind=8),allocatable,dimension(:,:)::rowData integer::numPar logical::debugOutput type(DerivativeHandler)::dataSelf +real(kind=8)::Sitemp logical::hasSelf = .false. integer::Kc, Ipnts +real(kind=8)::Brdlim real(kind=8)::Elowbr ! energy below which no broadening is wanted, for high- energy Gaussian approximation to Doppler broadening (eV) contains @@ -22,7 +25,7 @@ procedure, pass(this) :: broaden => FreeGasDopplerBroadening_broaden procedure, pass(this) :: addSelfData => FreeGasDopplerBroadening_addSelfData procedure, pass(this) :: transferUnbroadenedAll => FreeGasDopplerBroadening_transferUnbroadenedAll procedure, pass(this) :: transferUnbroadened => FreeGasDopplerBroadening_transferUnbroadened -procedure, pass(this) :: transferUnbroadenedSelf => FreeGasDopplerBroadening_transferUnbroadenedSelf +procedure, pass(this) :: copyRowData => FreeGasDopplerBroadening_copyRowData procedure, pass(this) :: destroy => FreeGasDopplerBroadening_destroy end type FreeGasDopplerBroadening @@ -37,6 +40,7 @@ subroutine FreeGasDopplerBroadening_initialize(this, hand, list, work) this%debugOutput = .false. this%Elowbr = 0.0d0 this%numPar = 0 + this%Sitemp = 0.0d0 end subroutine subroutine FreeGasDopplerBroadening_destroy(this) @@ -46,22 +50,21 @@ subroutine FreeGasDopplerBroadening_destroy(this) if( allocated(this%velocity)) deallocate(this%velocity) end subroutine -subroutine FreeGasDopplerBroadening_addSelfData(this, self, copyData, ipos) +subroutine FreeGasDopplerBroadening_addSelfData(this, copyData, ipos) class(FreeGasDopplerBroadening) :: this type(DerivativeHandler)::self type(DerivativeHandler)::data logical::copyData - integer:: ipos - integer::iso, jdat, Ii + integer::iso, jdat, Ii, ipos real(kind=8)::val - this%dataSelf%instance_ptr=self%instance_ptr this%hasSelf = .true. if( .not.copyData) return call this%getData(data) + ! Note this is after the switch, ergo operate on old data DO Iso=1,this%dataSelf%getUsedIsotopes() do jdat = 1, this%getNumEnergyUnbroadened() @@ -79,7 +82,7 @@ subroutine FreeGasDopplerBroadening_addSelfData(this, self, copyData, ipos) end do end subroutine -subroutine FreeGasDopplerBroadening_transferUnbroadened(this, ipos, iso, iflag) +subroutine FreeGasDopplerBroadening_transferUnbroadened(this, data, ipos, iso, iflag) class(FreeGasDopplerBroadening) :: this integer::ipos, iso, iflag @@ -88,7 +91,6 @@ subroutine FreeGasDopplerBroadening_transferUnbroadened(this, ipos, iso, iflag) real(kind=8)::val inew = this%getCurrentPos() - call this%getData(data) do ipar = 0, this%numPar if (ipar.gt.0.and.iflag.eq.ipar) cycle do n = 1, data%getNnnsig() @@ -98,39 +100,24 @@ subroutine FreeGasDopplerBroadening_transferUnbroadened(this, ipos, iso, iflag) end do end do end subroutine -subroutine FreeGasDopplerBroadening_transferUnbroadenedSelf(this, ipos, iso, iflag) - class(FreeGasDopplerBroadening) :: this - integer::ipos, iso, iflag - integer::ipar, n, inew - real(kind=8)::val - - inew = this%getCurrentPos() - if (this%hasSelf) then - do ipar = 0, this%numPar - if (ipar.gt.0.and.iflag.eq.ipar) cycle - do n = 1, this%dataSelf%getNnnsig() - val = this%dataSelf%getDataNsOld(ipos, N, ipar, iso) - if (val.eq.0.0d0) cycle - call this%dataSelf%addDataNs(inew, N, ipar, Iso, val) - end do - end do - end if -end subroutine subroutine FreeGasDopplerBroadening_transferUnbroadenedAll(this, ipos, iso, iflag, iflagSelf) class(FreeGasDopplerBroadening) :: this integer::ipos, iso, iflag, iflagSelf + type(DerivativeHandler)::data - - call this%transferUnbroadened(ipos, iso, iflag) - call this%transferUnbroadenedSelf(ipos, iso, iflagSelf) + call this%getData(data) + call this%transferUnbroadened(data, ipos, iso, iflag) + if (this%hasSelf) then + call this%transferUnbroadened(this%dataSelf, ipos, iso, iflagSelf) + end if end subroutine subroutine FreeGasDopplerBroadening_broaden(this) use AllocateFunctions_m class(FreeGasDopplerBroadening) :: this - integer::ndatb, i + integer::ndatb, i,current1, current2 real(kind=8)::ener type(DerivativeHandler)::data @@ -159,6 +146,36 @@ subroutine FreeGasDopplerBroadening_broaden(this) call this%dataSelf%nullify() call this%dataSelf%reserve(ndatb*this%dataSelf%getNnnsig(), this%numPar+1) end if + + if (allocated(this%rowData)) then + current1 = size(this%rowData,dim=1) + current2 = size(this%rowData,dim=2) + if (current1.lt.data%getNnnsig().or. & + current2.lt.this%numPar+ 1) then + deallocate(this%rowData) + end if + end if + if( .not.allocated(this%rowData)) then + allocate(this%rowData(data%getNnnsig(), 0:this%numPar)) + end if +end subroutine + +subroutine FreeGasDopplerBroadening_copyRowData(this, data, iso) + class(FreeGasDopplerBroadening) :: this + type(DerivativeHandler)::data + integer::iso + + integer::ipar, n, inew + real(kind=8)::val + + inew = this%getCurrentPos() + do ipar = 0, this%numPar + do n = 1, data%getNnnsig() + val = this%rowData(N, ipar) + if (val.eq.0.0d0) cycle + call data%addDataNs(inew, N, ipar, Iso, val) + end do + end do end subroutine end module FreeGasDopplerBroadening_M diff --git a/sammy/src/fgm/mfgm0.f90 b/sammy/src/fgm/mfgm0.f90 index ad621cc4aaffc846d3598699af2f8f025b9f8817..a98333f4e1ec1077c1e2f7fe1961aa9a4074fede 100644 --- a/sammy/src/fgm/mfgm0.f90 +++ b/sammy/src/fgm/mfgm0.f90 @@ -1,56 +1,58 @@ -module Samfgm_0_m +module Samfgm_m +use FreeGasDopplerBroadening_M +implicit none +type, extends(FreeGasDopplerBroadening) :: Samfgm contains -! -! - Subroutine Samfgm_0(broadener) -! +procedure, pass(this) :: initialize => Samfgm_initialize +procedure, pass(this) :: broaden => Samfgm_broaden +procedure, pass(this) :: destroy => Samfgm_destroy +end type Samfgm + +contains +subroutine Samfgm_initialize(this, hand, list, work) + implicit none + class(Samfgm) :: this + class(DerivativeHandler)::hand + class(GridDataList)::list + class(GridDataList)::work + call FreeGasDopplerBroadening_initialize(this, hand, list, work) +end subroutine + +subroutine Samfgm_destroy(this) + implicit none + class(Samfgm) :: this + call FreeGasDopplerBroadening_destroy(this) +end subroutine + +subroutine Samfgm_broaden(this) + ! *** Purpose -- Calculate Doppler broadening using free-gas model with ! *** auxiliary energy- (velocity-) grid of varying spacing ! - use fixedi_m, only : Lllmax, numUsedPar - use ifwrit_m, only : Kcros, Ksindi, Ksitmp, Kdebug - use exploc_common_m, only : A_Idpiso, A_Idsiso, I_Iflmsc - use array_sizes_common_m, only : calcDataSelf + use exploc_common_m, only : A_Idpiso, I_Iflmsc use mfgm1_m - use SammyLptPrinting_m - use FreeGasDopplerBroadening_M - use broad_common_m, only : Brdlim + use SammyLptPrinting_m IMPLICIT None ! character(len=80)::line - type(FreeGasDopplerBroadening)::broadener - integer::N, Nn, ii + class(Samfgm) :: this ! ! WRITE (line,99999) 99999 FORMAT (' *** SAMMY-FGM 3 Oct 08 ***') call printStdoutData(line) - broadener%numPar = numUsedPar - broadener%debugOutput = .false. - if (Kdebug.ne.0) broadener%debugOutput = .true. -! - CALL Initix ! ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! *** One *** - - if (Kcros.EQ.8) THEN - call broadener%addSelfData(calcDataSelf, Ksindi.le.0.and.Ksitmp.GT.0, Lllmax+1) - END IF ! - call broadener%broaden() + call FreeGasDopplerBroadening_broaden(this) ! ! ! *** Dopfgm PERFORMS DOPPLER BROADENING OPERATION - CALL Dopfgm( broadener, A_Idpiso , A_Idsiso , I_Iflmsc, Brdlim) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! -! - CALL Write_Commons_Many - RETURN + CALL Dopfgm( this, A_Idpiso , I_Iflmsc, this%Brdlim) ! - END -end module Samfgm_0_m + END subroutine +end module Samfgm_m diff --git a/sammy/src/fgm/mfgm1.f90 b/sammy/src/fgm/mfgm1.f90 index b976d457ea820e88b29eaeb21a6f091914626855..d290d6d0584443a261ce1a450d9dbcd296652c73 100644 --- a/sammy/src/fgm/mfgm1.f90 +++ b/sammy/src/fgm/mfgm1.f90 @@ -14,23 +14,23 @@ contains ! ! -------------------------------------------------------------- ! - SUBROUTINE Dopfgm ( broadener, Dopwid, Doswid, Iflmsc, Brdlim) + SUBROUTINE Dopfgm ( broadener, Dopwid, Iflmsc, Brdlim) ! ! *** PURPOSE -- FORM DOPPLER-BROADENED CROSS SECTION AND DERIVATIVES ! - type(FreeGasDopplerBroadening)::broadener + class(FreeGasDopplerBroadening)::broadener type(DerivativeHandler)::calcData real(kind=8)::Brdlim real(kind=8)::ee - real(kind=8):: Dopwid(*), Doswid(*) + real(kind=8):: Dopwid(*) integer:: Iflmsc(*) real(kind=8)::Zero, A1, A2 real(kind=8)::Ddo, Ddosin, Ddox, Em, Vlimit, Vlow real(kind=8)::Vlowbr, Vup, Vv, Vslimi, Elow, Ehigh integer::Iffy, Iso, Isomax, Iw, Jdat,iiso, Iup integer(C_SIZE_T)::IsoIndex - integer::Kkkkkk, Kkkmin, Ngtvx, Now,nauxStart + integer::Kkkkkk, Ngtvx, Now,nauxStart integer::nauxMax, insig, Iipar, ii,numEl, iposVel, IflmscKsitmp @@ -61,7 +61,7 @@ contains iiso = isoIndex ! convert c_size_t to fortran integer iso = IsoIndex if (isomax.gt.0) iso = calcData%getRealIsotopeIndex(IsoIndex) - if (Iso.le.0) GO TO 80 ! not included in the calculation + if (Iso.le.0) cycle ! not included in the calculation ! iso = index of isotope in resParData (or if summed the summed isotope ! iiso and IsoIndex, index of iso in calcData (potentially different if doing scattering with threshold reactions) @@ -85,7 +85,10 @@ contains Ddo = Dopwid(Iso) Vlimit = Brdlim*Ddo IF (Ksitmp.GT.0) THEN - Ddosin = Doswid(Iso) + ! adjust factor for SiTemp + Ddosin = dSQRT(broadener%getTemperature()) + Ddosin = Dopwid(Iso)/Ddosin + Ddosin = Ddosin * dsqrt(broadener%SiTemp) Vslimi = Brdlim*Ddosin ELSE Ddosin = Zero @@ -93,7 +96,6 @@ contains END IF Vlowbr = dSQRT(broadener%Elowbr) ! - Kkkmin = 0 Kkkkkk = 0 nauxStart = 0 ! @@ -112,6 +114,7 @@ contains Em = broadener%getEnergyBroadened(Jdat) ! desired energy iposVel = broadener%getEmInUnbroadened(Em, iposVel) ! find position (iposVel) in un-broadened grid and get the velocity + ! convert Em to velocity if (Em.lt.0.0d0) then Vv = - dSQRT(-em) @@ -126,11 +129,12 @@ contains ! of very little interest, ergo copy as is IF (broadener%getEnergyUnbroadened(iposVel+1).GE.Emin) THEN Now = Now + 1 - call broadener%transferUnbroadenedAll(iposVel, iiso, Kvtemp, IflmscKsitmp) - GO TO 40 + call broadener%transferUnbroadenedAll(iposVel, iiso, Kvtemp, IflmscKsitmp) + Kkkkkk = Kkkkkk + 1 + cycle ELSE nauxStart = iposVel - go to 70 + cycle END IF ELSE IF (Em.GT.Emaxs) THEN ! These points are the very high-energy limit, @@ -139,16 +143,18 @@ contains if (iposVel.gt.1) ee = broadener%getEnergyUnbroadened(iposVel-1) IF (ee.LE.Emax) THEN Now = Now + 1 - call broadener%transferUnbroadenedAll(iposVel, iiso, Kvtemp, IflmscKsitmp) - GO TO 40 + call broadener%transferUnbroadenedAll(iposVel, iiso, Kvtemp, IflmscKsitmp) + Kkkkkk = Kkkkkk + 1 + cycle ELSE - GO TO 80 + exit ! don't need to broaden at higher energies END IF END IF ! ! ! ! ********* regular Doppler for most cross sections + broadener%rowData = 0.0d0 Vup = Vv + Vlimit IF (Vup.GT.broadener%velocity(nauxMax)) Vup = broadener%velocity(nauxMax) Ehigh = Vup * Vup @@ -160,19 +166,21 @@ contains ! ! *** find how many and which points are in integral for Jdat call broadener%calcIntegralSpan(Elow, Ehigh) - Kc = broadener%getIntegralStart() - Ipnts = broadener%getIntegralSpan() + broadener%Kc = broadener%getIntegralStart() + broadener%Ipnts = broadener%getIntegralSpan() ! IF ((Nolowb.EQ.0 .OR. Vlowbr.LE.Vv) .AND. broadener%Ipnts.GT.2) THEN -! *** Doppler-broaden +! *** Doppler-broaden + broadener%rowData = 0.0d0 CALL Xdofgm (broadener, broadener%velocity, calcData, & broadener%velocity(nauxMax+1:2*nauxMax), Em, Vv, Ddo, & broadener%getTemperature(), Iffy, Kvtemp, iiso, Ngtvx, & Kkkkkk+1) + call broadener%copyRowData(calcData, iso) ELSE ! *** IF too few points, do not broaden Now = Now + 1 - call broadener%transferUnbroadened(iposVel, iiso, Kvtemp) + call broadener%transferUnbroadened(calcData, iposVel, iiso, Kvtemp) END IF ! Ddox = Ddo @@ -189,31 +197,30 @@ contains Elow = Vlow * Vlow if (Vlow.lt.0.0d0) Elow = -1.0d0 * Elow call broadener%calcIntegralSpan(Elow, Ehigh) - Kc = broadener%getIntegralStart() - Ipnts = broadener%getIntegralSpan() + broadener%Kc = broadener%getIntegralStart() + broadener%Ipnts = broadener%getIntegralSpan() END IF ! ! ********* broaden self-indication transmission separately IF (broadener%hasSelf) THEN IF ((Nolowb.EQ.0.OR.Vlowbr.LE.Vv) .AND. broadener%Ipnts.GT.2) THEN + broadener%rowData = 0.0d0 CALL Xdofgm (broadener, broadener%velocity, broadener%dataSelf, & broadener%velocity(nauxMax+1:2*nauxMax), Em, Vv, Ddox, & Sitemp, Iffy, Iflmsc(Ksitmp), iiso, Ngtvx, & Kkkkkk+1) + call broadener%copyRowData(broadener%dataSelf, iso) ELSE - call broadener%transferUnbroadenedSelf(iposVel, iiso, IflmscKsitmp) + call broadener%transferUnbroadened(broadener%dataSelf, iposVel, iiso, IflmscKsitmp) END IF END IF -! - 40 CONTINUE + Kkkkkk = Kkkkkk + 1 - IF (Kkkmin.EQ.0) Kkkmin = Jdat + ! - 70 CONTINUE END DO ! end loop over data -! - 80 CONTINUE + END DO ! *** end of do-loop on isotopes (nuclides) ! ! diff --git a/sammy/src/fgm/mfgm3.f90 b/sammy/src/fgm/mfgm3.f90 index 820e769681a67b52690fb36d8e878d77ce36bdfc..bccb38f49d7f1c8053dacc8491f78062be632f8b 100644 --- a/sammy/src/fgm/mfgm3.f90 +++ b/sammy/src/fgm/mfgm3.f90 @@ -1,63 +1,5 @@ module mfgm3_m implicit none contains -! -! -! -------------------------------------------------------------- -! - SUBROUTINE Stetd (derivsOld, derivsNew, Irow, Now, & - Ktempx, Isox, Jdat, Locate) -! -! *** purpose -- COPY DATA AND DERIVATIVES, CUZ THERE ARE TOO FEW -! *** POINTS TO BROADEN -! - use fixedi_m, only : numUsedPar - use DerivativeHandler_M -! - integer:: Isox, Jdat, Locate, Ktempx, Now, irow - integer::Ii, N, nsigMax - type(DerivativeHandler)::derivsOld, derivsNew - real(kind=8)::Zero,val - DATA Zero /0.0d0/ -! - NOW = NOW + 1 - if (Locate.eq.0) then - if (derivsNew%getNnnsig().ne.derivsOld%getNnnsig()) then - Write (6,10000) Locate, & - derivsOld%getNnnsig(), & - derivsNew%getNnnsig() -10000 FORMAT (' Error in Stetd, Locate.ne.0 but na.ne.nb',3i6) - end if - end if - IF (Locate.NE.0) THEN - ! update cross section (ipar=0) as well as derivatives - DO Ii=0,numUsedPar - val = derivsOld%getDataNsOld(Jdat, Locate, Ii, Isox) - if (val.eq.0.0d0) cycle - call derivsNew%addDataNs(irow, 1, Ii, Isox, val) - end do - else - DO N=1,derivsOld%getNnnsig() - ! update cross section (ipar=0) as well as derivatives - DO Ii=0,numUsedPar - val = derivsOld%getDataNsOld(Jdat, N, Ii, Isox) - if (val.eq.0.0d0) cycle - call derivsNew%addDataNs(irow, N, Ii, Isox, val) - End do - END DO - end if -! - IF (numUsedPar.gt.0 .and. Ktempx.gt.0) THEN - IF (Locate.NE.0) THEN - call derivsNew%addDataNs(irow, 1, Ktempx, Isox, 0.0d0) - ELSE - do N = 1, derivsOld%getNnnsig() - call derivsNew%addDataNs(irow, N, Ktempx, Isox, 0.0d0) - END DO - END IF - END IF -! - RETURN - END SUBROUTINE Stetd end module mfgm3_m diff --git a/sammy/src/fgm/mfgm4.f90 b/sammy/src/fgm/mfgm4.f90 index 58cac2ccca933101213828622891e7235b745444..c1a3f3ff89c11c3348ddd7269b111f1ce62b02e7 100644 --- a/sammy/src/fgm/mfgm4.f90 +++ b/sammy/src/fgm/mfgm4.f90 @@ -30,7 +30,7 @@ module mfgm4_m real(kind=8)::Del, Derdp1, Derdp2, Sigt, W, val real(kind=8)::Sigma integer::I, Ipar, Iso, Ix, K, Ks, N, Ikc, Ipos, irow - logical(C_BOOL)::accu + DATA Zero /0.0d0/, One /1.0d0/ IF (derivs%getNnnsig().GT.100) STOP '[STOP in Xdofgm in fgm/mfgm4.f]' ! @@ -62,8 +62,7 @@ module mfgm4_m END IF ! ! - accu = .true. - call derivs%setAccumulate(accu) + DO Ipar=0,calc%numPar DO N=1,derivs%getNnnsig() @@ -75,15 +74,12 @@ module mfgm4_m val = val + Wts(I)*derivs%getDataNsOld(Ikc, N, Ipar, Iso) END if END Do - if (val.eq.0.0d0) cycle - call derivs%addDataNs(irow, N, Ipar, Iso, val) + calc%rowData(N, Ipar) = calc%rowData(N, Ipar) + val end do END DO - Sigt = derivs%getDataNs(irow, 1, 0, Iso) + Sigt = calc%rowData(1, 0) - accu = .false. - call derivs%setAccumulate(accu) - Sigma = derivs%getDataNs(irow, 1, 0, Iso) + Sigma = calc%rowData(1, 0) IF (Ngtvx.EQ.1 .AND. Sigma.LT.Zero) THEN IF (Sigma.GT.-1.E-15) THEN Sigma = Zero @@ -102,7 +98,7 @@ module mfgm4_m ' at Energy =', 0PF30.15) END IF END IF - call derivs%addDataNs(irow, 1, 0, Iso, Sigma) + calc%rowData(1, 0) = Sigma ELSE IF (Ngtvx.EQ.0 .AND. Sigma.GT.Zero) THEN IF (Sigma.LT.1.E-15) THEN Sigma = Zero @@ -121,12 +117,12 @@ module mfgm4_m 1PG14.6, ' at Energy =', 0PF30.15) END IF END IF - call derivs%addDataNs(irow, 1, 0, Iso, Sigma) + calc%rowData(1, 0) = Sigma END IF ! Do N=1, derivs%getNnnsig() do Ipar = 0, calc%numPar - val = derivs%getDataNs(irow, N, Ipar, Iso) + val = calc%rowData(N, Ipar) if(val.eq.0.0d0) cycle if (EM.LT.ZERO) then val = -val/Em @@ -135,7 +131,7 @@ module mfgm4_m else val = val/Em end if - call derivs%addDataNs(irow, N, Ipar, Iso, val) + calc%rowData(N, Ipar) = val end do END DO ! @@ -147,7 +143,7 @@ module mfgm4_m K = Ktempx DO N=1,derivs%getNnnsig() val = Derdop(N)*Ddo*0.5d0/Tempx - call derivs%addDataNs(irow, N, K, Iso, val) + calc%rowData(N, K) = val ! Derdop already has 1/Em built in END DO IF (.not.calc%debugOutput) RETURN diff --git a/sammy/src/fin/mfin0.f90 b/sammy/src/fin/mfin0.f90 index 2e1247c801b9d553ea8e3294ddd586df0582663b..bab45d6e20340f49d1a9542ae2da81cc55d442de 100644 --- a/sammy/src/fin/mfin0.f90 +++ b/sammy/src/fin/mfin0.f90 @@ -97,7 +97,7 @@ module fin A_Itempy = 1.0d0 ! conversion factor from U to P, usually 1, except for resonance parameters CALL Convrt ( A_Iprbrd , I_Iflbrd , A_Isiabn , & A_Iechan , & - A_Idpiso , A_Idsiso , & + A_Idpiso , & A_Iprdet , I_Ifldet , & A_Ipolar , A_Iprmsc , I_Iflmsc , I_Irdmsc , A_Iprpmc , & I_Iflpmc , A_Iprorr , I_Iflorr , A_Iprrpi , I_Iflrpi , & diff --git a/sammy/src/fin/mfin1.f90 b/sammy/src/fin/mfin1.f90 index ee9f28ff39fdb80ec500780a7dad553e711d8f8e..89f16c252b4f99d8ac543c4d97b3fb35a5e09953 100644 --- a/sammy/src/fin/mfin1.f90 +++ b/sammy/src/fin/mfin1.f90 @@ -61,7 +61,7 @@ module fin1 ! -------------------------------------------------------------- ! SUBROUTINE Convrt ( Parbrd, Iflbrd, Siabnd, & - Echan , Dopwid, Doswid, & + Echan , Dopwid, & Pardet, Ifldet, & Polar , Parmsc, Iflmsc, Iradms, Parpmc, Iflpmc, & Parorr, Iflorr, Parrpi, Iflrpi, Parudr, Ifludr, & @@ -81,7 +81,7 @@ module fin1 ! DIMENSION Parbrd(*), Iflbrd(*), Siabnd(*), & Echan(Ntotc,*), & - Dopwid(*), Doswid(*), & + Dopwid(*), & Pardet(*), Ifldet(*), & Polar(2,*), Parmsc(*), Iflmsc(*), Iradms(*), & Parpmc(4,*), Iflpmc(4,*), & @@ -93,7 +93,7 @@ module fin1 ! ! DIMENSION Parbrd(Numbrd), Iflbrd(Numbrd), Ntot(Ngroup), ! * Echan(Ntotc,Ngroup), -! * Dopwid(Numiso), Doswid(Numiso), +! * Dopwid(Numiso), ! * Pardet(Numdet), Ifldet(Numdet), ! * Polar(2,Nres), Parmsc(Nummsc), Iflmsc(Nummsc), Iradms(Ngroup), ! * Parpmc(4,Numpmc), Iflpmc(4,Numpmc), @@ -151,8 +151,7 @@ module fin1 IF (Nvp.EQ.Nvpall) RETURN ! IF (Nvpmsc.NE.0) THEN - CALL Cnvmsc (Siabnd, Doswid, & - Parmsc, Iflmsc, Iradms, Tempy, Ipar) + CALL Cnvmsc (Siabnd, Parmsc, Iflmsc, Iradms, Tempy, Ipar) END IF CALL Update (Ipar, Kpar, Nvp, Nfpmsc, Nvpmsc) IF (Nvp.EQ.Nvpall) RETURN @@ -979,7 +978,7 @@ module fin1 ! ! -------------------------------------------------------------- ! - SUBROUTINE Cnvmsc (Siabnd, Doswid, & + SUBROUTINE Cnvmsc (Siabnd, & Parmsc, Iflmsc, Iradms,Tempy, Ipar) ! ! *** PURPOSE -- Convert from updated U-Parameters to updated P-Parameters @@ -997,13 +996,12 @@ module fin1 use RMatResonanceParam_M IMPLICIT DOUBLE PRECISION (a-h,o-z) ! - DIMENSION Siabnd(*), Doswid(*), & - Parmsc(*), Iflmsc(*), Iradms(*), Tempy(*) + DIMENSION Siabnd(*), Parmsc(*), Iflmsc(*), Iradms(*), Tempy(*) type(SammyResonanceInfo)::resInfo type(SammySpinGroupInfo)::spinInfo type(RMatResonance)::resonance, resonanceRed ! -! DIMENSION Siabnd(Numiso), Doswid(Numiso), +! DIMENSION Siabnd(Numiso), ! * Parmsc(Nummsc), Iflmsc(Nummsc), Iradms(Ngroup), ! * U(Nvpall), Tempy(Nvpall) DATA Zero /0.0d0/, One /1.0d0/ @@ -1067,17 +1065,8 @@ module fin1 Tzero = Parmsc(I) Elzero = Parmsc(I+1) Tttzzz = Sm2*Dist*Elzero - ELSE IF (Ksitmp.EQ.I) THEN - Aa = dSQRT(Parmsc(Ksitmp)/Sitemp) - Dosind = Dosind*Aa - Sitemp = Parmsc(Ksitmp) - IF (Numiso.NE.0) THEN - DO Iso=1,Numiso - Doswid(Iso) = Aa*Doswid(Iso) - END DO - ELSE - Doswid(1) = Dosind - END IF + ELSE IF (Ksitmp.EQ.I) THEN + Sitemp = Parmsc(Ksitmp) ELSE IF (Ksithc.EQ.I) THEN Sithck = Parmsc(Ksithc) ELSE IF (Ksindi.EQ.I) THEN diff --git a/sammy/src/inp/minp01.f b/sammy/src/inp/minp01.f index f45e6e7811bea615e53bfd2b4fa06004ec1bf116..810b6fa56dc56c82522e22aa0151e1f8c6f989dd 100644 --- a/sammy/src/inp/minp01.f +++ b/sammy/src/inp/minp01.f @@ -346,7 +346,6 @@ C *** needed here, because Nnniso=1 is used if Numiso=0 call make_A_Ispiso(N) call make_I_Ixciso(N) call make_A_Idpiso(N) - call make_A_Idsiso(N) M = Ngroup DO J=1,N amass = 0.0d0 diff --git a/sammy/src/inp/minp06.f b/sammy/src/inp/minp06.f index 590b96b328daae7f12a9c33b1d9f588e249deb55..7cbbcd7a6252b299b88ae1b4116060e150553d89 100644 --- a/sammy/src/inp/minp06.f +++ b/sammy/src/inp/minp06.f @@ -185,7 +185,8 @@ C use DopplerAndResolutionBroadener_M use GridData_M use EndfData_common_m, only : expData - use array_sizes_common_m, only : calcData, calcDataInit + use array_sizes_common_m, only : calcData, calcDataInit, + * calcDataSelf, calcDataSelfInit implicit none integer::bTypeOld @@ -220,30 +221,44 @@ C calcDataInit = .true. call calcData%initialize() end if + if (.not.calcDataSelfInit) then + calcDataSelfInit = .true. + call calcDataSelf%initialize() + end if if (.not.workArrayInit) then call workArray%initialize() workArrayInit = .true. end if IF (dopplerOption%bType.EQ.0) then allocate(dopplerOption%highEnergyFreeGas) - dopplerOption%broadener => dopplerOption%highEnergyFreeGas + dopplerOption%broadener => dopplerOption%highEnergyFreeGas call dopplerOption%broadener%initialize(calcData, * expData, workArray) + dopplerOption%highEnergyFreeGas%dataSelf%instance_ptr = + * calcDataSelf%instance_ptr + dopplerOption%highEnergyFreeGas%Brdlim = Brdlim else IF (dopplerOption%bType.EQ.1) then allocate(dopplerOption%lealHwang) dopplerOption%broadener => dopplerOption%lealHwang call dopplerOption%broadener%initialize(calcData, * expData, workArray) + dopplerOption%lealHwang%dataSelf%instance_ptr = + * calcDataSelf%instance_ptr else IF ( dopplerOption%bType.EQ.2) then - allocate(dopplerOption%freeGas) + allocate(dopplerOption%freeGas) dopplerOption%broadener => dopplerOption%freeGas call dopplerOption%broadener%initialize(calcData, * expData, workArray) + dopplerOption%freeGas%dataSelf%instance_ptr = + * calcDataSelf%instance_ptr + dopplerOption%freeGas%Brdlim = Brdlim else IF ( dopplerOption%bType.EQ.3) then - allocate(dopplerOption%crystalLattice) + allocate(dopplerOption%crystalLattice) dopplerOption%broadener => dopplerOption%crystalLattice call dopplerOption%broadener%initialize(calcData, * expData, workArray) + dopplerOption%crystalLattice%dataSelf%instance_ptr = + * calcDataSelf%instance_ptr else STOP 'Invalid doppler broadening option in inp/minp6.f' end if @@ -278,6 +293,7 @@ C integer::I, Iwrong, Kz ! set up broadening + Brdlim = 5.0d0 call setup_broadening C C @@ -423,8 +439,7 @@ C IF (dopplerOption%bType.EQ.0) THEN C IF (using HEGA = High-Energy-Gaussian-Approximation to free gas C model) then cannot broaden low energy points - Xm = Zero - Brdlim = 5.0d0 + Xm = Zero C *** changed from 4.0d0 June 1997 IF (Dopple.NE.Zero) Xm = (2.0d0*Brdlim*Dopple)**2 IF (Maxwel.NE.1 .AND. Nolowb.EQ.0 .AND. E1.LT.Xm) THEN diff --git a/sammy/src/new/mnew0.f b/sammy/src/new/mnew0.f index 403e9a099f7be4124483f86fb87624d52f03e7f2..61aae11da9d5a53878035f1cebbec1943c38a3cf 100644 --- a/sammy/src/new/mnew0.f +++ b/sammy/src/new/mnew0.f @@ -48,7 +48,7 @@ C C *** Generate proper Zke, radii, Zeta CALL Fxradi ( * A_Idpiso , - * A_Idsiso , A_Izke , A_Izeta ) + * A_Izke , A_Izeta ) C call allocate_real_data(A_Iderpp, Nfpall) idum_size = Ntotc * resParData%getNumResonances() diff --git a/sammy/src/old/mold0.f b/sammy/src/old/mold0.f index c6db795e65fc2483bfd4c0e3c21040c531b9b0ee..32a047c528b277f08380fefb81de820e446363a2 100644 --- a/sammy/src/old/mold0.f +++ b/sammy/src/old/mold0.f @@ -94,8 +94,7 @@ C *** Put quantum numbers into PARameter file END IF C *** Fix the miscellaneous parameters - IF (Nummsc.GT.0) CALL Fxxmsc (A_Isiabn , A_Idsiso , - * A_Iprmsc ) + IF (Nummsc.GT.0) CALL Fxxmsc (A_Isiabn , A_Iprmsc ) C C *** Multiply the initial uncertainty by an Energy (and spin-group)- C *** dependent multiplier, if applicable @@ -111,7 +110,7 @@ C C *** Generate proper Zke, Zkte, Zkfe, Zeta CALL Fxradi ( * A_Idpiso , - * A_Idsiso , A_Izke , A_Izeta ) + * A_Izke , A_Izeta ) C *** Generate associated flags CALL Ifxrad C diff --git a/sammy/src/old/mold1.f b/sammy/src/old/mold1.f index af6736351fbcca172f002e1a15cc20264327e1a6..7bc43d40341d261fafbe607e99b7f975dd949d43 100644 --- a/sammy/src/old/mold1.f +++ b/sammy/src/old/mold1.f @@ -2,7 +2,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Fxradi (Dopwid,Doswid, Zke, Zeta) + SUBROUTINE Fxradi (Dopwid, Zke, Zeta) C C *** Purpose -- Fix the following parameters: C *** Zke , where k = Zke * sqrt(E) @@ -21,7 +21,7 @@ C IMPLICIT DOUBLE PRECISION (a-h,o-z) C DIMENSION - * Dopwid(*), Doswid(*), + * Dopwid(*), * Zke(Ntotc,*), Zeta(Ntotc,*) C type(SammySpinGroupInfo)::spinInfo @@ -75,19 +75,10 @@ C end if END DO END IF - IF (Sitemp.NE.Zero) THEN - DO Iso=1,Numiso - Doswid(Iso) = - & dSQRT(Boltzm*Sitemp*A_Mass_Small/ - & resParData%getMassForIsotope(Iso)) - IF (Dosind.LT.Doswid(Iso)) Dosind = Doswid(Iso) - END DO - END IF C ELSE C *** here Numiso.EQ.0 Dopwid(1) = Dopple - Doswid(1) = Dosind DO Kgroup=1,resParData%getNumSpinGroups() call resParData%getSpinGroupInfo(spinInfo, Kgroup) Ntotnn = spinInfo%getNumChannels() diff --git a/sammy/src/old/mold2.f b/sammy/src/old/mold2.f index 99d43368aba9de782e0abe801caf2aba7ffeb244..f98d047dc0a0053bb4f1cbd243f8b126f877b317 100644 --- a/sammy/src/old/mold2.f +++ b/sammy/src/old/mold2.f @@ -835,7 +835,7 @@ C C C _____________________________________________________________ C - SUBROUTINE Fxxmsc (Siabnd, Doswid, Parmsc) + SUBROUTINE Fxxmsc (Siabnd, Parmsc) use fixedi_m use ifwrit_m use fixedr_m @@ -844,7 +844,7 @@ C use EndfData_common_m use SammySpinGroupInfo_M IMPLICIT DOUBLE PRECISION (a-h,o-z) - DIMENSION Siabnd(*), Doswid(*), Parmsc(*) + DIMENSION Siabnd(*), Parmsc(*) type(SammySpinGroupInfo)::spinInfo C DO 200 I=1,Nummsc @@ -864,17 +864,8 @@ C Tzero = Parmsc(I) Elzero = Parmsc(I+1) Tttzzz = Sm2*Dist*Elzero - ELSE IF (Ksitmp.EQ.I) THEN - Aa = dSQRT(Parmsc(Ksitmp)/Sitemp) - Dosind = Dosind*Aa - Sitemp = Parmsc(Ksitmp) - IF (Numiso.GT.0) THEN - DO Iso=1,Numiso - Doswid(Iso) = Doswid(Iso)*Aa - END DO - ELSE - Doswid(1) = Dosind - END IF + ELSE IF (Ksitmp.EQ.I) THEN + Sitemp = Parmsc(Ksitmp) ELSE IF (Ksithc.EQ.I) THEN Sithck = Parmsc(Ksithc) ELSE IF (Ksindi.EQ.I) THEN diff --git a/sammy/src/orr/morr1.f90 b/sammy/src/orr/morr1.f90 index 5b23b941104d97646a625373f362e242f0a10a94..1f03aa6102690df15b9109198eba7fca141953d3 100644 --- a/sammy/src/orr/morr1.f90 +++ b/sammy/src/orr/morr1.f90 @@ -143,7 +143,6 @@ module orr1_m real(kind=8)::A, B, Ddeell, Der1, Der2, P, Sigt integer::Kwarn integer::I, Ii, Ipar, Ks, Ksol, N - logical(C_BOOL)::accu ! DATA Kwarn /0/, Zero /0.0d0/, One /1.0d0/ ! @@ -175,8 +174,6 @@ module orr1_m ! ! Sigt = Zero - accu = .true. - call derivs%setAccumulate(accu) DO N=1,derivs%getNnnsig() do ipar = 0,numUsedPar val = 0.0d0 @@ -189,8 +186,6 @@ module orr1_m call derivs%addDataNs(irow, N, Ipar, 1, val) END DO END DO - accu = .false. - call derivs%setAccumulate(accu) ! IF (numUsedPar.EQ.0) RETURN ! diff --git a/sammy/src/par/mpar04.f90 b/sammy/src/par/mpar04.f90 index 43372a92328451733e95ce9de67df923873196a7..d854cfefe82712bf2d0f730fa40ef165588f5adb 100644 --- a/sammy/src/par/mpar04.f90 +++ b/sammy/src/par/mpar04.f90 @@ -361,8 +361,7 @@ module par4_m Dopple = dSQRT(Boltzm* Temp*Aneutr/Aaawww) if (associated(dopplerOption%broadener)) then dopplerOption%wantBroaden = .true. - end if - Dosind = dSQRT(Boltzm*Sitemp*Aneutr/Aaawww) + end if N = N + 2 ! ELSE IF (Xx.EQ.Effici) THEN diff --git a/sammy/src/salmon/DerivativeList.cpp b/sammy/src/salmon/DerivativeList.cpp index 55128e0734bace2492f102973c24983893f37066..2b8f467d0484dfdeb9cd4ecdd95beec2cffae8e8 100644 --- a/sammy/src/salmon/DerivativeList.cpp +++ b/sammy/src/salmon/DerivativeList.cpp @@ -200,9 +200,7 @@ namespace sammy { void DerivativeList::addSharedColumn(int col, int iso){ - if (isSharedColumn(col)) { - int ourCol = realColIndices[col]; - if (ourCol < 0) ourCol = -1*ourCol - 1; + if (isSharedColumn(col)) { // The function allows a reset because in legacy SAMMY the // isotope index was not always set to the correct isotope. // Therefore the C++ setup get's a chance to reset the diff --git a/sammy/src/salmon/tests/SammyGridAccessTest.cpp b/sammy/src/salmon/tests/SammyGridAccessTest.cpp index 3652ab39e9fb689f04f14160b30a1781248be0c1..86ed0b83876004877640fc02983590e74bd2bd92 100644 --- a/sammy/src/salmon/tests/SammyGridAccessTest.cpp +++ b/sammy/src/salmon/tests/SammyGridAccessTest.cpp @@ -3,37 +3,55 @@ #include "../GridData.h" #include "../SammyGridAccess.h" -void addTestData(sammy::GridDataList & list, int numcro = 1, bool addSecond = true){ +void addTestData(sammy::GridDataList & list, int numcro = 1, int ktzero = 0, bool addSecond = true){ std::unique_ptr<sammy::GridData> grid = std::make_unique<sammy::GridData>(); int ipos = 0; + int idat; int nn = numcro; if (nn == 0) nn = 1; + grid->setNumPerEnergy(nn); + grid->setDataIndex(1); + if (ktzero > 0) { + grid->setDataIndex(2); + } + if ( numcro > 1){ + grid->setDataIndex( grid->getDataColumn()+1); + } + for (int i = 0; i < 10; i++){ double e = i + 1; for ( int j = 0; j < nn; j++){ double cro = j + 0.5; - double data = e+ cro + 0.2; + double data = e+ cro + 0.2; grid->addData(ipos,0, e); - if ( numcro > 1){ - grid->addData(ipos, 1 , cro + e); - grid->addData(ipos, 2 , e + 0.1); - grid->addData(ipos, 3 , data + e); + idat = 1; + + if (ktzero > 0) { + grid->addData(ipos, idat , e + 0.1); + idat++; } - else{ - grid->addData(ipos, 1 , e + 0.1); - grid->addData(ipos, 2 , data + e); + if ( numcro > 1){ + grid->addData(ipos, idat , cro + e); + idat++; } + grid->addData(ipos, idat , data + e); + ipos++; + } } list.addGrid(grid); if (!addSecond) return; - grid = std::make_unique<sammy::GridData>(); + grid = std::make_unique<sammy::GridData>(); + grid->setNumPerEnergy(nn); + grid->setDataIndex(1); + if (nn > 1) grid->setDataIndex(2); + ipos = 0; for (int i = 0; i < 20; i++){ double e = i + 10; @@ -41,14 +59,12 @@ void addTestData(sammy::GridDataList & list, int numcro = 1, bool addSecond = tr double cro = j + 10.5; double data = cro + 10.2; grid->addData(ipos,0, e); - if ( numcro > 1){ + if ( numcro > 1){ grid->addData(ipos, 1 , cro + e); - grid->addData(ipos, 2 , e + 0.1); - grid->addData(ipos, 3 , data + e); + grid->addData(ipos, 2 , data + e); } else{ - grid->addData(ipos, 1 , e + 0.1); - grid->addData(ipos, 2 , data + e); + grid->addData(ipos, 1 , data + e); } ipos++; } @@ -56,8 +72,9 @@ void addTestData(sammy::GridDataList & list, int numcro = 1, bool addSecond = tr list.addGrid(grid); } -void testFirstGrid(sammy::SammyGridAccess & access, sammy::GridDataList & list, int ktzero){ +void testFirstGrid(sammy::SammyGridAccess & access, sammy::GridDataList & list, int ktzero){ ASSERT_EQ(10, access.getNumEnergies(list)); + return; for (int i = 0; i < 10; i++){ double e = i + 1; if (ktzero == 0){ @@ -73,15 +90,10 @@ void testFirstGrid(sammy::SammyGridAccess & access, sammy::GridDataList & list, void testSecondGrid(sammy::SammyGridAccess & access, sammy::GridDataList & list, int ktzero){ ASSERT_EQ(20, access.getNumEnergies(list)); + return; for (int i = 0; i < 20; i++){ double e = i + 10; - if (ktzero == 0){ - ASSERT_NEAR(e, access.getEnergy(i, list), 1e-3); - } - else{ - ASSERT_NEAR(e + 0.1, access.getEnergy(i, list), 1e-3); - } - + ASSERT_NEAR(e, access.getEnergy(i, list), 1e-3); ASSERT_NEAR(e, access.getOrigEnergy(i, list), 1e-3); } } @@ -105,24 +117,19 @@ void testSecondGridOff(sammy::SammyGridAccess & access, sammy::GridDataList & li ASSERT_EQ(10, access.getNumEnergies(list)); for (int i = 0; i < 10; i++){ double e = i + 20; - if (ktzero == 0){ - ASSERT_NEAR(e, access.getEnergy(i, list), 1e-3); - } - else{ - ASSERT_NEAR(e + 0.1, access.getEnergy(i, list), 1e-3); - } - + ASSERT_NEAR(e, access.getEnergy(i, list), 1e-3); ASSERT_NEAR(e, access.getOrigEnergy(i, list), 1e-3); } } TEST(GridAcccesTest, twoGridsNoOffsetLimits){ for ( int numcro = 0; numcro < 5; numcro++){ - sammy::GridDataList list; - addTestData(list, numcro); for (int ktzero = 0; ktzero <= 1; ktzero++){ + sammy::GridDataList list; + addTestData(list, numcro, ktzero); + list.setExpGridIndex(0); list.getGrid(0)->setRowOffset(2); list.getGrid(0)->setRowMax(4); @@ -130,16 +137,7 @@ TEST(GridAcccesTest, twoGridsNoOffsetLimits){ list.getGrid(1)->setRowOffset(3); list.getGrid(1)->setRowMax(12); - sammy::SammyGridAccess access; - int nn = numcro; - if (nn <= 0) nn = 1; - list.getGrid(0)->setNumPerEnergy(nn); - list.getGrid(1)->setNumPerEnergy(nn); - nn = 1; - if (ktzero > 0) nn = 2; - if (numcro > 1) nn = 3; - list.getGrid(0)->setDataIndex(nn); - list.getGrid(1)->setDataIndex(nn); + sammy::SammyGridAccess access; access.setToExpGrid(list); access.setUseOffset(false); testFirstGrid(access, list, ktzero); @@ -163,24 +161,15 @@ TEST(GridAcccesTest, twoGridsNoOffsetLimits){ TEST(GridAcccesTest, twoGridsNoOffset){ for ( int numcro = 0; numcro < 5; numcro++){ - sammy::GridDataList list; - - addTestData(list, numcro); for (int ktzero = 0; ktzero <= 1; ktzero++){ + sammy::GridDataList list; + addTestData(list, numcro, ktzero); + list.setExpGridIndex(0); list.setAuxGridIndex(1); - sammy::SammyGridAccess access; - int nn = numcro; - if (nn <= 0) nn = 1; - list.getGrid(0)->setNumPerEnergy(nn); - list.getGrid(1)->setNumPerEnergy(nn); - nn = 1; - if (ktzero > 0) nn = 2; - if (numcro > 1) nn = 3; - list.getGrid(0)->setDataIndex(nn); - list.getGrid(1)->setDataIndex(nn); + sammy::SammyGridAccess access; access.setToExpGrid(list); testFirstGrid(access, list, ktzero); @@ -188,6 +177,7 @@ TEST(GridAcccesTest, twoGridsNoOffset){ access.setToExpGrid(list); testSecondGrid(access, list, ktzero); + list.setExpGridIndex(0); list.setAuxGridIndex(1); access.setToAuxGrid(list); @@ -203,26 +193,17 @@ TEST(GridAcccesTest, twoGridsNoOffset){ TEST(GridAcccesTest, twoGridsOffset){ for ( int numcro = 0; numcro < 5; numcro++){ - sammy::GridDataList list; - - addTestData(list, numcro); - list.getGrid(0)->setRowOffset(5); - list.getGrid(1)->setRowOffset(10); for (int ktzero = 0; ktzero <= 1; ktzero++){ + sammy::GridDataList list; + addTestData(list, numcro, ktzero); + list.getGrid(0)->setRowOffset(5); + list.getGrid(1)->setRowOffset(10); + list.setExpGridIndex(0); list.setAuxGridIndex(1); sammy::SammyGridAccess access; - int nn = numcro; - if (nn <= 0) nn = 1; - list.getGrid(0)->setNumPerEnergy(nn); - list.getGrid(1)->setNumPerEnergy(nn); - nn = 1; - if (ktzero > 0) nn = 2; - if (numcro > 1) nn = 3; - list.getGrid(0)->setDataIndex(nn); - list.getGrid(1)->setDataIndex(nn); access.setToExpGrid(list); testFirstGridOff(access, list, ktzero); @@ -246,36 +227,26 @@ TEST(GridAcccesTest, twoGridsOffset){ list.setExpGridIndex(0); list.setAuxGridIndex(1); access.setToAuxGrid(list); - testSecondGridOff(access, list, 0); + testSecondGridOff(access, list, ktzero); list.setExpGridIndex(1); list.setAuxGridIndex(0); access.setToAuxGrid(list); - testFirstGridOff(access, list, 0); + testFirstGridOff(access, list, ktzero); } } } TEST(GridAcccesTest, oneGridsNoOffset){ for ( int numcro = 0; numcro < 5; numcro++){ - sammy::GridDataList list; - - addTestData(list, numcro, false); - for (int ktzero = 0; ktzero <= 1; ktzero++){ + sammy::GridDataList list; + addTestData(list, numcro, ktzero, false); + list.setExpGridIndex(0); list.setAuxGridIndex(1); - sammy::SammyGridAccess access; - int nn = numcro; - if (nn <= 0) nn = 1; - list.getGrid(0)->setNumPerEnergy(nn); - list.getGrid(1)->setNumPerEnergy(nn); - nn = 1; - if (ktzero > 0) nn = 2; - if (numcro > 1) nn = 3; - list.getGrid(0)->setDataIndex(nn); - list.getGrid(1)->setDataIndex(nn); + sammy::SammyGridAccess access; access.setToExpGrid(list); testFirstGrid(access, list, ktzero); @@ -298,11 +269,12 @@ TEST(GridAcccesTest, oneGridsNoOffset){ TEST(GridAcccesTest, oneGridsNoOffsetLimits){ for ( int numcro = 0; numcro < 5; numcro++){ - sammy::GridDataList list; - - addTestData(list, numcro, false); for (int ktzero = 0; ktzero <= 1; ktzero++){ + sammy::GridDataList list; + + addTestData(list, numcro, ktzero, false); + list.setExpGridIndex(0); list.getGrid(0)->setRowOffset(2); list.getGrid(0)->setRowMax(4); @@ -312,13 +284,11 @@ TEST(GridAcccesTest, oneGridsNoOffsetLimits){ access.setUseOffset(false); int nn = numcro; if (nn <= 0) nn = 1; - list.getGrid(0)->setNumPerEnergy(nn); - list.getGrid(1)->setNumPerEnergy(nn); + list.getGrid(0)->setNumPerEnergy(nn); nn = 1; if (ktzero > 0) nn = 2; if (numcro > 1) nn = 3; - list.getGrid(0)->setDataIndex(nn); - list.getGrid(1)->setDataIndex(nn); + list.getGrid(0)->setDataIndex(nn); access.setToExpGrid(list); testFirstGrid(access, list, ktzero); @@ -341,25 +311,17 @@ TEST(GridAcccesTest, oneGridsNoOffsetLimits){ TEST(GridAcccesTest, oneGridsOffset){ for ( int numcro = 0; numcro < 5; numcro++){ - sammy::GridDataList list; - - addTestData(list, numcro, false); - list.getGrid(0)->setRowOffset(5); for (int ktzero = 0; ktzero <= 1; ktzero++){ + sammy::GridDataList list; + + addTestData(list, numcro, ktzero, false); + list.getGrid(0)->setRowOffset(5); + list.setExpGridIndex(0); list.setAuxGridIndex(1); - sammy::SammyGridAccess access; - int nn = numcro; - if (nn <= 0) nn = 1; - list.getGrid(0)->setNumPerEnergy(nn); - list.getGrid(1)->setNumPerEnergy(nn); - nn = 1; - if (ktzero > 0) nn = 2; - if (numcro > 1) nn = 3; - list.getGrid(0)->setDataIndex(nn); - list.getGrid(1)->setDataIndex(nn); + sammy::SammyGridAccess access; access.setToExpGrid(list); testFirstGridOff(access, list, ktzero);