diff --git a/sammy/src/ang/mang0.f b/sammy/src/ang/mang0.f index 4ff442bf3d2e5a863f661e0819bd10f0a58cadef..86b73827d6c3745baba485752310fcb48db4213b 100644 --- a/sammy/src/ang/mang0.f +++ b/sammy/src/ang/mang0.f @@ -66,7 +66,7 @@ C ### two Iruth = Idimen (Nangle, 1, 'I_Ruth Nangle, 1') C C *** Generate differential elastic cross sections from Coefficients of P_L - CALL Diffee (I_Inent , I_Ilspin , A_Izke , + CALL Diffee (A_Izke , * A_Izeta , A_Iccoul , A_Idcoul , A_Iangle , A_Idangl , A_Iprmsc , * I_Iflmsc , A_Iprnbk , I_Iflnbk , A(Ie ), A(Ieb ), * A(Ith ), I_Iisopa , A(Iwsigx), A(Iwdasi), A_Iwdbsi , A(Isigxx), diff --git a/sammy/src/ang/mang1.f b/sammy/src/ang/mang1.f index c28132bd7e5ed4d93b7cadfa7ec4a7afb0cbaa60..72eed77f99469b2980775cb98cf5fb1fe191d310 100644 --- a/sammy/src/ang/mang1.f +++ b/sammy/src/ang/mang1.f @@ -2,7 +2,7 @@ C C C ______________________________________________________________________ C - SUBROUTINE Diffee (Nent , Lspin , Zke , Zeta , + SUBROUTINE Diffee (Zke , Zeta , * Ccoul , Dcoul , Angle , Dangle, Parmsc, Iflmsc, Parnbk, Iflnbk, * Energy, Energb, Theory, Isopar, Wsigxx, Wdasig, Wdbsig, * Sigxxx, Dasigx, Dbsigx, Vsigxx, Vdasig, Vdbsig, Ccclll, Poly , @@ -25,7 +25,7 @@ C IMPLICIT DOUBLE PRECISION (a-h,o-z) LOGICAL Another_Process_Will_Happen, Need_Isotopes C - DIMENSION Nent(*), Lspin(Ntotc,*), + DIMENSION * Zke(Ntotc,*), Zeta(Ntotc,*), Ccoul(2,Ntotc,Ngroup,*), * Dcoul(2,Ntotc,Nnpar,Ngroup,*), Iruth(*) DIMENSION Angle(*), Dangle(*), Parmsc(*), Iflmsc(*), Parnbk(*), @@ -183,7 +183,7 @@ C ****** summed over all Q for this isotope C C ****** If (elastic, and Coulomb must be included) Then (do so) IF (IfCoul.GT.0) THEN - CALL Include_Coulomb (Nent, Lspin, Zke, + CALL Include_Coulomb (Zke, * Zeta, Ccoul, Dcoul, Sigxxx, Dasigx, Dbsigx, Angle, * Polyx, Comang, Iruth, Em, Jjdat, Isox, Np) END IF @@ -731,7 +731,7 @@ C C C ______________________________________________________________________ C - SUBROUTINE Include_Coulomb (Nent, Lspin, Zke, + SUBROUTINE Include_Coulomb (Zke, * Zeta, Ccoul, Dcoul, Sigxxx, Dasigx, Dbsigx, Angle, * Polyx, Comang, I_Rutherford, Ee, Jjdat, Isox, Np) use fixedi_m @@ -740,7 +740,7 @@ C use EndfData_common_m use SammySpinGroupInfo_M IMPLICIT DOUBLE PRECISION (a-h,o-z) - DIMENSION Nent(*), Lspin(Ntotc,*), + DIMENSION * Zke(Ntotc,*), Zeta(Ntotc,*), Ccoul(2,Ntotc,Ngroup,*), * Dcoul(2,Ntotc,Nnpar,Ngroup,*), Sigxxx(*), * Dasigx(Nangle,*), Dbsigx(Nangle,*), Angle(*), @@ -749,6 +749,8 @@ C c c type(SammySpinGroupInfo)::spinIg, spinIsox + type(RMatChannelParams)::channel + type(SammyChannelInfo)::channelInfo DATA One /1.0d0/, Two /2.0d0/ DATA Fff /0.0025d0/ C / 0.01 over 4 / @@ -762,9 +764,11 @@ C call resParData%getSpinGroupInfo(spinIg, Igroup) Kgriso = spinIg%getIsotopeIndex() IF (Niniso.EQ.1 .OR. Kgriso.EQ.Isox) THEN - DO Ich=1,Nent(Igroup) + DO Ich=1,spinIg%getNumEntryChannels() + call spinIg%getChannelInfo(channelInfo, Ich) + call resParData%getChannel(channel, channelInfo) Eta = Zeta(Ich,Igroup)/Dsqrt(Ee) - L = Lspin(Ich,Igroup) + L = channel%getL() call resParData%getSpinGroupInfo(spinIsox, Isox) Ab = spinIsox%getAbundance() * diff --git a/sammy/src/avg/mavg0.f b/sammy/src/avg/mavg0.f index 01b5e861fec82dfce160a06dc75a19596ad813b9..d7e50913bd7a4ae7815b3f778deb468370bd51bf 100755 --- a/sammy/src/avg/mavg0.f +++ b/sammy/src/avg/mavg0.f @@ -201,8 +201,7 @@ C *** routine Thefix finds covariance on theoretical cross sections C *** using covariance on parameters + avg'd partial derivatives C IF (Kpasfe.EQ.1) THEN - CALL Resetgx (I_Intot , I_Ilpent , I_Ilspin , A_Iechan , - * A_Izkte , A(Igq ), Ndatq) + CALL Resetgx (A_Iechan , A_Izkte , A(Igq ), Ndatq) C *** sub Resetgx converts to ENDF-style resonance parameters, C *** and prints the partial derivatives (sensitivities) into C *** file SAMSEN.DAT diff --git a/sammy/src/avg/mavg6.f b/sammy/src/avg/mavg6.f index 2f8383d39fa21ea96a3e5bcbca0a55ea90c9c13c..22c80b361a41908cb39d5dfbf0a30abcc6e21045 100644 --- a/sammy/src/avg/mavg6.f +++ b/sammy/src/avg/mavg6.f @@ -138,8 +138,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Resetgx (Ntot, Lpent, Lspin, Echan, - * Zkte, Wdasig, Ndatq) + SUBROUTINE Resetgx (Echan, Zkte, Wdasig, Ndatq) C C *** PURPOSE -- Debug printout of partial derivatives C *** for comparison with ErrorJ and PUPP codes @@ -152,11 +151,15 @@ C IMPLICIT DOUBLE PRECISION (a-h,o-z) CHARACTER*11 Gam C - DIMENSION Ntot(*), Lpent(Ntotc,*), Lspin(Ntotc,*), Echan(Ntotc,*), - * Zkte(Ntotc,*), + DIMENSION Echan(Ntotc,*), Zkte(Ntotc,*), * Wdasig(Nvpall,*), Gnx(5), Gny(5) C type(SammyResonanceInfo)::resInfo + type(SammySpinGroupInfo)::spinInfo + type(SammyChannelInfo)::channelInfo + type(RMatChannelParams)::channel + type(SammyParticlePairInfo)::pairInfo + type(RMatParticlePair)::pair type(RMatResonance)::resonance, resonanceRed DATA Zero /0.0d0/, Half /0.5d0/, Thous /1000.0d0/ DATA Gam /' Gamma_'/ @@ -176,7 +179,8 @@ C call resParData%getResonance(resonance, resInfo) call resParData%getRedResonance(resonanceRed, resInfo) Igrp = resInfo%getSpinGroupIndex() - Ntotik = Ntot(Igrp) + call resParData%getSpinGroupInfo(spinInfo, Igrp) + Ntotik = spinInfo%getNumChannels() IF (Ntotik.GT.5) Ntotik = 5 WRITE (29,10200) K, (Gam, J, J=1,Ntotik) 10200 FORMAT ('Resonance number', I2, /, @@ -190,16 +194,25 @@ C Eey = -Eex C *** June 4, 2004; signs are correct for negative-energy resonances. END IF - IF (Lpent(1,Igrp).NE.0) THEN + iela = spinInfo%getElasticChannel() + call spinInfo%getChannelInfo(channelInfo, iela) + call resParData%getChannel(channel, channelInfo) + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, pairInfo) + IF (pair%getPnt().NE.0) THEN Q = dABS(resonance%getEres()-Echan(1,Igrp)) IF (Q.NE.Zero) THEN Q = dSQRT(Q) Rho = Zkte(1,Igrp)*Q - Lsp = Lspin(1,Igrp) + Lsp = channel%getL() cq IF (Zeta(M2,Igrp).EQ.Zero) THEN cq Assume no Coulomb; also (probably) no threshold cuz that's not right yet P = Pfd (Rho, Der, Lsp) - width = resonanceRed%getWidth(2) + ichan = spinInfo%getElasticChannel() + ichan = spinInfo%getWidthForChannel(ichan) + width = resonanceRed%getWidth(ichan) Eey = - Zkte(1,Igrp) * Eey * Half*width * Der/P cq END IF END IF @@ -207,8 +220,9 @@ cq END IF C DO N=1,Ntotik C *** Particle Width - Gn = resonance%getWidth(N+1) - Bn = resonanceRed%getWidth(N+1) + ichan = spinInfo%getWidthForChannel(N) + Gn = resonance%getWidth(ichan) + Bn = resonanceRed%getWidth(ichan) IF (Gn.GT.Zero) THEN Gn = Half*Bn/Gn ELSE IF (Gn.LT.Zero) THEN @@ -217,11 +231,12 @@ C *** Particle Width Gnx(N) = Gn*Thous END DO C - Ggx = resonance%getWidth(1) + ichan = spinInfo%getGammaWidthIndex() + Ggx = resonance%getWidth(ichan) IF (Ggx.GT.Zero) THEN - Ggx = Half*resonanceRed%getWidth(1)/Ggx + Ggx = Half*resonanceRed%getWidth(ichan)/Ggx ELSE - Ggx = - Half*resonanceRed%getWidth(1)/Ggx + Ggx = - Half*resonanceRed%getWidth(ichan)/Ggx END IF Ggx = Ggx * Thous C diff --git a/sammy/src/blk/Exploc_common.f90 b/sammy/src/blk/Exploc_common.f90 index f516aac0144f36cadbb721a2c27804c4d1b6f480..68bae62412e9cafa08d1108aae32f17d67d3f923 100644 --- a/sammy/src/blk/Exploc_common.f90 +++ b/sammy/src/blk/Exploc_common.f90 @@ -10,33 +10,14 @@ module exploc_common_m real(kind=8),allocatable,dimension(:)::A_Iprbrd integer,allocatable,dimension(:)::I_Iflbrd real(kind=8),allocatable,dimension(:)::A_Isiabn - real(kind=8),allocatable,dimension(:)::A_Igoj ! old group 2 - integer,allocatable,dimension(:)::I_Inent - integer,allocatable,dimension(:)::I_Inext - integer,allocatable,dimension(:)::I_Intot - integer,allocatable,dimension(:)::I_Iishif - integer,allocatable,dimension(:)::I_Ilpent integer,allocatable,dimension(:)::I_Ifexcl - integer,allocatable,dimension(:)::I_Ilspin - real(kind=8),allocatable,dimension(:)::A_Ichspi - + ! old group 3 - real(kind=8),allocatable,dimension(:)::A_Ienbnd real(kind=8),allocatable,dimension(:)::A_Ibound real(kind=8),allocatable,dimension(:)::A_Iechan - real(kind=8),allocatable,dimension(:)::A_Irdeff - real(kind=8),allocatable,dimension(:)::A_Irdtru - real(kind=8),allocatable,dimension(:)::A_Iemmm1 - real(kind=8),allocatable,dimension(:)::A_Iemmm2 - - ! old group 4 - integer,allocatable,dimension(:)::I_Izzzz1 - integer,allocatable,dimension(:)::I_Izzzz2 - integer,allocatable,dimension(:)::I_Ixclud - real(kind=8),allocatable,dimension(:)::A_Ispinx - + ! old group 5 integer,allocatable,dimension(:)::I_Ifcros real(kind=8),allocatable,dimension(:)::A_Iangle @@ -162,10 +143,7 @@ module exploc_common_m ! old group 9 integer,allocatable,dimension(:)::I_Iint real(kind=8),allocatable,dimension(:)::A_Iresol - integer,allocatable,dimension(:)::I_Iisopa - integer,allocatable,dimension(:)::I_Ikppai - real(kind=8),allocatable,dimension(:)::A_Ispnn1 - real(kind=8),allocatable,dimension(:)::A_Ispnn2 + integer,allocatable,dimension(:)::I_Iisopa real(kind=8),allocatable,dimension(:)::A_Iccoul real(kind=8),allocatable,dimension(:)::A_Idcoul @@ -224,65 +202,11 @@ module exploc_common_m call allocate_real_data(A_Isiabn,want) end subroutine make_A_Isiabn - - subroutine make_A_Igoj(want) - integer::want - call allocate_real_data(A_Igoj,want) - end subroutine make_A_Igoj - - - subroutine make_I_Inent(want) - integer::want - call allocate_integer_data(I_Inent,want) - end subroutine make_I_Inent - - - subroutine make_I_Inext(want) - integer::want - call allocate_integer_data(I_Inext,want) - end subroutine make_I_Inext - - - subroutine make_I_Intot(want) - integer::want - call allocate_integer_data(I_Intot,want) - end subroutine make_I_Intot - - - - subroutine make_I_Iishif(want) - integer::want - call allocate_integer_data(I_Iishif,want) - end subroutine make_I_Iishif - - - subroutine make_I_Ilpent(want) - integer::want - call allocate_integer_data(I_Ilpent,want) - end subroutine make_I_Ilpent - - subroutine make_I_Ifexcl(want) integer::want call allocate_integer_data(I_Ifexcl,want) end subroutine make_I_Ifexcl - subroutine make_I_Ilspin(want) - integer::want - call allocate_integer_data(I_Ilspin,want) - end subroutine make_I_Ilspin - - - subroutine make_A_Ichspi(want) - integer::want - call allocate_real_data(A_Ichspi,want) - end subroutine make_A_Ichspi - - subroutine make_A_Ienbnd(want) - integer::want - call allocate_real_data(A_Ienbnd,want) - end subroutine make_A_Ienbnd - subroutine make_A_Ibound(want) integer::want call allocate_real_data(A_Ibound,want) @@ -292,46 +216,6 @@ module exploc_common_m integer::want call allocate_real_data(A_Iechan,want) end subroutine make_A_Iechan - - subroutine make_A_Irdeff(want) - integer::want - call allocate_real_data(A_Irdeff,want) - end subroutine make_A_Irdeff - - subroutine make_A_Irdtru(want) - integer::want - call allocate_real_data(A_Irdtru,want) - end subroutine make_A_Irdtru - - subroutine make_A_Iemmm1(want) - integer::want - call allocate_real_data(A_Iemmm1,want) - end subroutine make_A_Iemmm1 - - subroutine make_A_Iemmm2(want) - integer::want - call allocate_real_data(A_Iemmm2,want) - end subroutine make_A_Iemmm2 - - subroutine make_I_Izzzz1(want) - integer::want - call allocate_integer_data(I_Izzzz1,want) - end subroutine make_I_Izzzz1 - - subroutine make_I_Izzzz2(want) - integer::want - call allocate_integer_data(I_Izzzz2,want) - end subroutine make_I_Izzzz2 - - subroutine make_I_Ixclud(want) - integer::want - call allocate_integer_data(I_Ixclud,want) - end subroutine make_I_Ixclud - - subroutine make_A_Ispinx(want) - integer::want - call allocate_real_data(A_Ispinx,want) - end subroutine make_A_Ispinx subroutine make_I_Ifcros(want) integer::want @@ -801,21 +685,6 @@ module exploc_common_m call allocate_integer_data(I_Iisopa,want) end subroutine make_I_Iisopa - subroutine make_I_Ikppai(want) - integer::want - call allocate_integer_data(I_Ikppai,want) - end subroutine make_I_Ikppai - - subroutine make_A_Ispnn1(want) - integer::want - call allocate_real_data(A_Ispnn1,want) - end subroutine make_A_Ispnn1 - - subroutine make_A_Ispnn2(want) - integer::want - call allocate_real_data(A_Ispnn2,want) - end subroutine make_A_Ispnn2 - subroutine make_A_Iccoul(want) integer::want call allocate_real_data(A_Iccoul,want) diff --git a/sammy/src/cro/mcro0.f b/sammy/src/cro/mcro0.f index 20061fe6e70b1ba6b8d086dc2771063022010e8b..436b37481f8c0f43d6108e9a7ccf2381f52dfa3a 100644 --- a/sammy/src/cro/mcro0.f +++ b/sammy/src/cro/mcro0.f @@ -75,7 +75,7 @@ C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - < Inpxdr = Idimen (Ngroup, 1, 'Ngroup, 1') Krext = Nrext IF (Nrext.EQ.0) Krext = 1 - IF (Ksolve.NE.2) CALL Ppar(I_Intot , I_Iflext , + IF (Ksolve.NE.2) CALL Ppar(I_Iflext , * A(Iiuif), A(Inprdr), A(Inpxdr), Krext) C *** Sbroutine Ppar_Cro Sets Nprdr and Npxdr C @@ -90,8 +90,8 @@ C C - - - - - - - - - - - - - - - - - - - - - - - - - - - < C *** three *** Ix1 = Idimen (NA, 1, 'NA, 1') - IF (Nres.GT.0) CALL Fixx (I_Intot , I_Iishif , I_Ilspin , - * A_Ibound , A_Iechan , I_Ixclud , + IF (Nres.GT.0) CALL Fixx ( + * A_Ibound , A_Iechan , * A_Izkte , A(Ixx ), A(Ix1 ), Mxany) C *** Sbroutine Fixx sets Xx = energy shift I = Idimen (Ix1, -1, 'Ix1, -1') @@ -99,7 +99,7 @@ C - - - - - - - - - - - - - - - - - - - - - - - - - - - > C C c Fals is passed to babb since it is used to set parameters NOT for numerical differentiation - IF (Ksolve.NE.2 .AND. Napres.NE.0) CALL Babb(I_Intot , + IF (Ksolve.NE.2 .AND. Napres.NE.0) CALL Babb( * A_Ipolar , I_Iflpol , A(Iiuif), A(Ibr), A(Ibi), A(Ixx),.false.) C *** Sbroutine Babb_cro generates energy-independent portion of C *** partial derivatives @@ -181,7 +181,7 @@ C *** eight *** * A_Iteabg , A(Ienerb), A(Ith ), A(Iwsigx), A(Iwdasi), * A_Iwdbsi , A(Isigxx), A(Idasig), A(Idbsig), I_Iisopa , * A(Ipiece), A(Idum ), A_Iadder , A_Iaddcr , - * I_Inbt , I_Iint , I_Intot ) + * I_Inbt , I_Iint) C *** Sbroutine Work_Cro generates theory and derivatives I = Idimen (Inprdr, -1, 'Inprdr, -1') C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > diff --git a/sammy/src/cro/mcro1.f b/sammy/src/cro/mcro1.f index 8799f4924b72444b6351f3ea776b3fb72b6163b7..693074066f037eae153359414ca2f0272cb01968 100644 --- a/sammy/src/cro/mcro1.f +++ b/sammy/src/cro/mcro1.f @@ -4,7 +4,7 @@ C SUBROUTINE Work_Cro (A, Iflmsc, Parnbk, Iflnbk, Parbgf, Iflbgf, * Kndbgf, Bgfmin, Bgfmax, Texbgf, Teabgf, Energb, Theory, Wsigxx, * Wdasig, Wdbsig, Sigxxx, Dasigx, Dbsigx, Isopar, - * Pieces, Dum, Adderg, Addcro, Nbt, Int, Ntot) + * Pieces, Dum, Adderg, Addcro, Nbt, Int) C C *** PURPOSE -- GENERATE THEORETICAL DATA "theory" AND PARTIAL C *** DERIVATIVES "GB" @@ -24,7 +24,7 @@ C * Kndbgf(*), Bgfmin(*), Bgfmax(*), Texbgf(Ntepnt,*), * Teabgf(Ntepnt,*), Energb(*), * Theory(*), Pieces(Ngroup,*), Dum(*), Adderg(*), - * Addcro(*), Nbt(*), Int(*), Ntot(*) + * Addcro(*), Nbt(*), Int(*) DIMENSION Wsigxx(Nnniso,*), Wdasig(Ndaxxx,*), * Wdbsig(Ndbxxx,Nnniso,*), Sigxxx(Nnnsig,*), * Dasigx(Nnnsig,*), Dbsigx(Nnnsig,Ndbxxx,*), Isopar(*) diff --git a/sammy/src/cro/mcro2.f b/sammy/src/cro/mcro2.f index 554125ed6d545d95ed5691f62b7340b39e0b8844..93b383ecc7a90c2d14b559fde5d21111ae3ddcbe 100644 --- a/sammy/src/cro/mcro2.f +++ b/sammy/src/cro/mcro2.f @@ -25,13 +25,12 @@ C DIMENSION A(-Msize:Msize) DIMENSION Pieces(*) C - CALL Abpart_Cro (I_Intot , + CALL Abpart_Cro ( * A(Ialphr), A(Ialphi), A(Ibr ), A(Ibi ), A(Ipr), * A(Ipi ), A(Idifen), A(Ixden ), A(Iupr ), A(Iupi), * A(Iiuif ), A(Idifma), A(Inot ), A(Inotu), A(Ixx )) C - CALL Parsh (A,I_Ixclud , A_Igoj , I_Inent , - * I_Inext , I_Intot , + CALL Parsh (A, * A(Inprdr), A(Inpxdr), A_Izke , A_Izkte , * A_Izkfe , I_Ifzke , I_Ifzkte , I_Ifzkfe , Ipoten, Pieces, * A(Isigxx), A(Idasig), A(Idbsig), I_Iisopa ) @@ -147,7 +146,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Setr_Cro (Ntot, Ishift, Lpent, Lspin, Bound, Echan, + SUBROUTINE Setr_Cro (Ntot, Bound, Echan, * Parext, Iflext, Min, igr, Alphar, Alphai, Not, * Z, Rmat, Sphr, Sphi, Phr, Phi, Zkte, Krext, Lrmat) C @@ -169,7 +168,12 @@ C C type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance - DIMENSION Ishift(Ntotc,*), Lpent(Ntotc,*), Lspin(Ntotc,*), + type(SammySpinGroupInfo)::spinInfo + type(SammyChannelInfo)::channelInfo + type(RMatChannelParams)::channel + type(SammyParticlePairInfo)::pairInfo + type(RMatParticlePair)::pair + DIMENSION * Bound(Ntotc,*), Echan(Ntotc,*), Parext(Krext,Ntotc,*), * Iflext(Krext,Ntotc,*), Alphar(*), Alphai(*), * Rmat(2,*), Sphr(*), Sphi(*), Phr(*), Phi(*), Not(*), Z(*), @@ -184,28 +188,30 @@ C * Sphr(Ntotc), Sphi(Ntotc), Phr(Ntotc), Phi(Ntotc), C * Not(Nres), Z(Ntotc) DATA Zero /0.0d0/, One /1.0d0/ C - IF (Ntot.EQ.3 .AND. Su.GT.Zero .AND. Su.LT.Echan(3,Nnnn)) Ntot = 2 - IF (Ntot.EQ.2 .AND. Su.GT.Zero .AND. Su.LT.Echan(2,Nnnn)) Ntot = 1 + call resParData%getSpinGroupInfo(spinInfo, igr) + Ntot = spinInfo%getNumChannels() + IF (Ntot.EQ.3 .AND. Su.GT.Zero .AND. Su.LT.Echan(3,igr)) Ntot = 2 + IF (Ntot.EQ.2 .AND. Su.GT.Zero .AND. Su.LT.Echan(2,igr)) Ntot = 1 C C *** INITIALIZE Rmat ( = NEGATIVE OF R-MATRIX) C Aloge = Zero KL = 0 DO K=1,Ntot - IF (Numext.NE.0 .AND. Iflext(1,K,Nnnn).NE.-1) Aloge - * = dLOG((Parext(2,K,Nnnn)-Su)/ (Su-Parext(1,K,Nnnn))) + IF (Numext.NE.0 .AND. Iflext(1,K,igr).NE.-1) Aloge + * = dLOG((Parext(2,K,igr)-Su)/ (Su-Parext(1,K,igr))) DO L=1,K KL = KL + 1 Rmat(1,KL) = Zero Rmat(2,KL) = Zero IF (L.EQ.K .AND. Numext.NE.0 .AND. - * Iflext(1,K,Nnnn).NE.-1) THEN - Rmat(1,KL) = -(Parext(3,K,Nnnn)+Parext(4,K,Nnnn)*Su) + - * Parext(5,K,Nnnn)*Aloge + * Iflext(1,K,igr).NE.-1) THEN + Rmat(1,KL) = -(Parext(3,K,igr)+Parext(4,K,igr)*Su) + + * Parext(5,K,igr)*Aloge IF (Nrext.EQ.7) Rmat(1,KL) = Rmat(1,KL) - - * Parext(7,K,Nnnn)*Su**2 + Parext(6,K,Nnnn)* - * (Parext(2,K,Nnnn)-Parext(1,K,Nnnn)) + - * Parext(6,K,Nnnn)*Aloge*(Su) + * Parext(7,K,igr)*Su**2 + Parext(6,K,igr)* + * (Parext(2,K,igr)-Parext(1,K,igr)) + + * Parext(6,K,igr)*Aloge*(Su) END IF END DO END DO @@ -216,9 +222,11 @@ C call resParData%getRedResonance(resonance, resInfo) KL = 0 DO K=1,Ntot - channelWidthC = resonance%getWidth(K+1) + ichan = spinInfo%getWidthForChannel(K) + channelWidthC = resonance%getWidth(ichan) DO L=1,K - channelWidthCPrime = resonance%getWidth(L+1) + ichan = spinInfo%getWidthForChannel(L) + channelWidthCPrime = resonance%getWidth(ichan) beta = channelWidthC * channelWidthCPrime KL = KL + 1 IF (Beta.NE.Zero) THEN @@ -259,9 +267,17 @@ C Phr (I) = Zero Phi (I) = Zero Z (I) = Zero + Iffy = 0 -C - IF (Su.LE.Echan(I,Nnnn)) THEN + + call spinInfo%getChannelInfo(channelInfo, I) + call resParData%getChannel(channel, channelInfo) + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, pairInfo) +C + IF (Su.LE.Echan(I,igr)) THEN WRITE (21,10000) WRITE (6,10000) 10000 FORMAT (' Oops -- error in Sub. SETR in mcro2 -- see NML to f @@ -270,12 +286,18 @@ C END IF C C - IF (Lpent(I,Nnnn).EQ.1) THEN + IF (pair%getPnt().EQ.1) THEN C *** HERE penetrability IS TO BE CALCULATED - L = Lspin(I,Nnnn) - Rho = Zkte(I)*dSQRT(Su-Echan(I,Nnnn)) - CALL Pgh (Rho, L, Bound(I,Nnnn), Hr, Hi, P, Dp, Ds, - * Ishift(I,Nnnn), Iffy) + L = channel%getL() + if (pair%getCalcShift()) then + Ishift = 1 + else + Ishift = 0 + end if + + Rho = Zkte(I)*dSQRT(Su-Echan(I,igr)) + CALL Pgh (Rho, L, Bound(I,igr), Hr, Hi, P, Dp, Ds, + * Ishift, Iffy) C HR AND HI ARE REAL AND IMAG PARTS OF 1/(S-B+IP) C *** except when S-B+iP=Zero, in which case iffy=1 IF (Iffy.EQ.0) THEN diff --git a/sammy/src/cro/mcro2a.f b/sammy/src/cro/mcro2a.f index 5bd3770f2015df6d98bc30a730837fa124c010be..5daea4b8854f64ce89b39df5bba7386ee12d9440 100644 --- a/sammy/src/cro/mcro2a.f +++ b/sammy/src/cro/mcro2a.f @@ -2,7 +2,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Abpart_Cro (Ntot, Alphar, + SUBROUTINE Abpart_Cro (Alphar, * Alphai, Br, Bi, Pr, Pi, Difen, Xden, Upr, Upi, Iuif, Difmax, * Not, Notu, Xx) C @@ -22,12 +22,12 @@ C type(SammyResonanceInfo)::resInfo type(SammySpinGroupInfo)::spinInfo type(RMatResonance)::resonance - DIMENSION Ntot(*), + DIMENSION * Alphar(*),Alphai(*), Br(Ntriag,*), Bi(Ntriag,*), * Pr(Ntriag,*), Pi(Ntriag,*), Difen(*), Xden(*), Upr(*), Upi(*), * Iuif(*), Difmax(*), Not(*), Notu(*), Xx(*) C -C DIMENSION Ntot(Ngroup), +C DIMENSION C * Alphar(Nres), Alphai(Nres), C * BR(Ntriag,nyyres), BI(Ntriag,nyyres), Pr(Ntriag,nyyres), C * PI(Ntriag,nyyres), Difen(Nres), Xden(Nres), Upr(napres), @@ -52,11 +52,10 @@ C call resParData%getResonanceInfo(resInfo, I) igr = resInfo%getSpinGroupIndex() - if (.not.resInfo%getIncludeInCalc()) then - igr = -1 * igr - end if IF (resInfo%getIncludeInCalc()) THEN - G2 = resonance%getWidth(1)**2 + call resParData%getSpinGroupInfo(spinInfo, igr) + igam = spinInfo%getGammaWidthIndex() + G2 = resonance%getWidth(igam)**2 G3 = G2**2 Aa = Difen(I)**2 + G3 Xden(I) = 1.0D0/Aa @@ -83,7 +82,8 @@ C IF (resInfo%getEnergyFitOption().GE.0) THEN C "if (Igr.GE.0)" but "resInfo%getEnergyFitOption().LT.0" means C "Igr.LT.0" so it's OK - N2 = Ntot(Igr) + 2 + call resparData%getSpinGroupInfo(spinInfo, Igr) + N2 = spinInfo%getNumResPar() DO M=1,N2 if (m.eq.1) then Ipar = resInfo%getEnergyFitOption() @@ -145,7 +145,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Parsh (A, Jxclud, Goj, Nent, Next, Ntot, + SUBROUTINE Parsh (A, * Nprdr, Npxdr, Zke, Zkte, Zkfe, If_Zke, * If_Zkte, If_Zkfe, Ipoten, Pieces, Sigxxx, Dasigx, Dbsigx, * Isopar) @@ -179,7 +179,7 @@ C * Ixxxxi, Ixx C DIMENSION A(-Msize:Msize) - DIMENSION Jxclud(*), GOJ(*), Nent(*), Next(*), Ntot(*), + DIMENSION * Nprdr(*), Npxdr(*), * Zke(Ntotc,*), Zkte(Ntotc,*), Zkfe(Ntotc,*), If_Zke(*), * If_Zkte(Ntotc,*), If_Zkfe(Ntotc,*), Pieces(Ngroup), @@ -189,8 +189,7 @@ C type(SammySpinGroupInfo)::spinInfo type(RMatResonance)::resonance C -C DIMENSION jxclud(Ngroup), GOJ(Ngroup), Nent(Ngroup), -C * Next(Ngroup), Ntot(Ngroup), +C DIMENSION C * Nprdr(Ngroup), npxdr(Ngroup), C * Zke(Ntotc,Ngroup), Zkte(Ntotc,Ngroup), zkfe(Ntotc,Ngroup), C * If_Zke(Ngroup), If_Zkte(Ntotc,Ngroup), If_zkfe(Ntotc,Ngroup), @@ -220,7 +219,7 @@ C end do call resParData%getSpinGroupInfo(spinInfo, N) - IF (Jxclud(N).EQ.1) THEN + IF (.not.spinInfo%getIncludeInCalc()) THEN IF (Ksolve.NE.2) Kstart = Kstart + Nprdr(N) ELSE IF (Numiso.GT.0) THEN @@ -235,14 +234,15 @@ C IF (Ksolve.NE.2) Npr = Nprdr(N) IF (Ksolve.NE.2) Npx = Npxdr(N) Nnf1 = Nnf1 + Nn2 - Nn2 = Ntot(N)*(Ntot(N)+1) + ntot = spinInfo%getNumChannels() + Nn2 = Ntot*(Ntot+1) NN = Nn2/2 C C IF (Kcros.LE.2) THEN C *** CALCULATE SIN AND COS OF POTENTIAL SCATTERING PHASE SHIFT, C *** AND R-EXTERNAL PHASE SHIFT - CALL Cossin (Nent(Nnnn), I_Ilspin , Zke(1,N), Zkfe(1,N), + CALL Cossin (Zke(1,N), Zkfe(1,N), * A(Ics), A(Isi), A(Idphi), Nnnn, Ipoten) END IF C @@ -250,9 +250,9 @@ C C *** SET R-MATRIX C - Ntotnn = Ntot(Nnnn) + Ntotnn = spinInfo%getNumChannels() Lrmat = 0 - CALL Setr_Cro (Ntotnn, I_Iishif , I_Ilpent , I_Ilspin , + CALL Setr_Cro (Ntotnn, * A_Ibound , A_Iechan , A_Iprext , I_Iflext , Min, n, * A(Ialphr), A(Ialphi), A(Inot), * A(IZ), A(Irmat), A(Isphr), A(Isphi), A(Iphr), A(Iphi), @@ -276,9 +276,11 @@ C *** THE CROSS SECTIONS * A(Iz), A(Ixxxxr), A(Ixxxxi), A(Ipwrr), A(Ipwri), * A(Ixqr), A(Ixqi), A(Iphr), A(Iphi), A(Iqr), A(Iqi)) C - Agoj = VarAbn*goj(n) + Agoj = VarAbn*spinInfo%getGFactor() C *** TOTAL CROSS SECTIONS - IF (Kcros.EQ.1) CALL Total (Agoj, Nent(Nnnn), Ntotnn, + nent = spinInfo%getNumEntryChannels() + next = spinInfo%getNumExitChannels() + IF (Kcros.EQ.1) CALL Total (Agoj, nent, Ntotnn, * A_Iprext , I_Iflext , A(Ipr), A(Ipi), A(Ics), A(Isi), * A(Idphi), A(Iwr), A(Iwi), A(Ipwrr), A(Ipwri), A(Itr), * A(Iti), A(Iqr), A(Iqi), A(Inotu), Krext, Lrmat, @@ -287,7 +289,7 @@ C *** TOTAL CROSS SECTIONS * Dbsigx, Isopar, Iso) C C *** SCATTERING (ELASTIC) CROSS SECTION - IF (Kcros.EQ.2) CALL Elastc (Agoj, Nent(Nnnn), Ntotnn, + IF (Kcros.EQ.2) CALL Elastc (Agoj, Nent, Ntotnn, * A_Iprext , I_Iflext , A(Ipr), A(Ipi), A(Ics), * A(Isi), A(Idphi), A(Iwr), A(Iwi), A(Ipwrr), A(Ipwri), * A(Itr), A(Iti), A(Iqr), A(Iqi), A(Inotu), Krext, Lrmat, @@ -297,7 +299,7 @@ C *** SCATTERING (ELASTIC) CROSS SECTION C C *** REACTION (FISSION, INELASTIC SCATTERING, ETC.) CROSS SECTIONS IF (Kcros.EQ.3 .OR. Kcros.EQ.5 .OR. Kcros.EQ.6) CALL Reactn - * ( Agoj, Nent(Nnnn), Next(Nnnn), Ntotnn, A_Iprext , + * ( Agoj, Nent, Next, Ntotnn, A_Iprext , * I_Iflext , A(Ipr), A(Ipi), A(Iwr), A(Iwi), A(Ipwrr), * A(Ipwri), A(Itr), A(Iti), A(Iqr), A(Iqi), A(Inotu), * Krext, Lrmat, Min , N, @@ -306,7 +308,7 @@ C *** REACTION (FISSION, INELASTIC SCATTERING, ETC.) CROSS SECTIONS C C *** CAPTURE CROSS SECTION IF (Kcros.EQ.4 .OR. Kcros.EQ.5 .OR. Kcros.EQ.6) CALL Captur - * ( Agoj, Nent(Nnnn), Next(Nnnn), Ntotnn, A_Iprext , + * ( Agoj, Nent, Next, Ntotnn, A_Iprext , * I_Iflext , A(Ipr), A(Ipi), A(Iwr), A(Iwi), A(Ipwrr), * A(Ipwri), A(Itr), A(Iti), A(Iqr), A(Iqi), A(Inotu), * Krext, Lrmat,Min, N, diff --git a/sammy/src/cro/mcro8.f b/sammy/src/cro/mcro8.f index bd5a34dc76ac87ed0c2f13a63466c5eda25c2c5f..8249416b39e999037d8cf89919ee98d54575e2a5 100755 --- a/sammy/src/cro/mcro8.f +++ b/sammy/src/cro/mcro8.f @@ -37,7 +37,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Fixx (Ntot, Ishift, Lspin, Bound, Echan, Ixclud, + SUBROUTINE Fixx (Bound, Echan, * Zkte, Xx, X1, Mxany) C C *** PURPOSE -- set Xx(I) = shift for resonance I when shift factors are @@ -50,15 +50,20 @@ C use RMatResonanceParam_M IMPLICIT DOUBLE PRECISION (a-h,o-z) C - DIMENSION Ntot(*), Ishift(Ntotc,*), Lspin(Ntotc,*), - * Bound(Ntotc,*), Echan(Ntotc,*), Ixclud(*), + DIMENSION + * Bound(Ntotc,*), Echan(Ntotc,*), * Zkte(Ntotc,*), Xx(Mres), X1(Mres) type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance + type(SammySpinGroupInfo)::spinInfo + type(SammyParticlePairInfo)::pairInfo + type(RMatParticlePair)::pair + type(RMatChannelParams)::channel + type(SammyChannelInfo)::channelInfo real(kind=8),allocatable::resTmp(:) C -C DIMENSION Ntot(Ngroup), Ishift(Ntotc,Ngroup), Lspin(Ntotc,Ngroup), -C * Bound(Ntotc,Ngroup), Echan,(Ntotc,Ngroup), Ixclud(Ngroup), +C DIMENSION Ntot(Ngroup), +C * Bound(Ntotc,Ngroup), Echan,(Ntotc,Ngroup), C * Zkte(Ntotc,Ngroup), Xx(Nres), X1(Nres) C EXTERNAL Sf @@ -82,6 +87,7 @@ C Jsmall = 0 maxr = 0 DO K=1,Ngroup + call resParData%getSpinGroupInfo(spinInfo, K) minr = maxr + 1 do i = minr, resParData%getNumResonances() call resParData%getResonanceInfo(resInfo, i) @@ -89,7 +95,7 @@ C maxr = i end do - IF (Ixclud(K).NE.1) THEN + IF (spinInfo%getIncludeInCalc()) THEN KI = 0 Nnnn = K DO I=minr, maxr @@ -99,16 +105,23 @@ C II = 0 KI = KI + 1 X1(I) = Zero - DO Ich=1,Ntot(Nnnn) + DO Ich=1,spinInfo%getNumChannels() II = II + Ich - beta = resonance%getWidth(ich+1) - beta = beta * beta - IF (Ishift(Ich,Nnnn).NE.0) THEN + ichan = spinInfo%getWidthForChannel(ich) + call spinInfo%getChannelInfo(channelInfo, Ich) + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, pairInfo) + call resParData%getChannel(channel, channelInfo) + IF (pair%getCalcShift()) THEN IF (dABS(eres).GE.Echan(Ich,Nnnn)) THEN - L = Lspin(Ich,Nnnn) + L = channel%getL() Rho = Zkte(Ich,Nnnn)*dSQRT( * dABS(eres)+xx(I)-Echan(Ich,Nnnn) ) X = Sf (Rho, L, Bound(Ich,Nnnn)) + beta = resonance%getWidth(ichan) + beta = beta * beta X1(I) = X1(I) + X*Beta END IF END IF diff --git a/sammy/src/dat/mdat0.f90 b/sammy/src/dat/mdat0.f90 index 547f1c1e972b863ff93e10ccea863b9eecd00099..f6103fb3d3f75188451dd040c135faa825542f43 100644 --- a/sammy/src/dat/mdat0.f90 +++ b/sammy/src/dat/mdat0.f90 @@ -67,7 +67,7 @@ module Samdat_0_M Krext = Nrext IF (Nrext.EQ.0) Krext = 1 call reader%initialize() - CALL Read00 (I_Intot , A_Ibcf , A_Icf2 , A_Idpiso , & + CALL Read00 (A_Ibcf , A_Icf2 , A_Idpiso , & A_Iprext , I_Iflext , A_Iprorr , A_Icrnch , A_Iedets , & A_Iseses , A_Iesese , A_Iprrpi , A_Iedrpi, A_Ixxrpi , & A_Iprudr , I_Inud_E , I_Inud_T , A_Iude , A_Iudr , A_Iudt , & @@ -139,10 +139,8 @@ module Samdat_0_M Ihsx = Idimen (Ntotc, 1, 'Ntotc, 1') Ir0m = Idimen (Ntotc, 1, 'Ntotc, 1') Ir0x = Idimen (Ntotc, 1, 'Ntotc, 1') - CALL Phase (A(Ienerg), I_ILspin , A_Ichspi , & - I_Inent , I_Iishif , & - A_Ibound , A(Ipm), A(Ipx), & - A(Ism), A(Isx), A(Ihsm), A(Ihsx), A(Ir0m), A(Ir0x)) + CALL Phase (A(Ienerg), A_Ibound , A(Ipm), A(Ipx), & + A(Ism), A(Isx), A(Ihsm), A(Ihsx), A(Ir0m), A(Ir0x)) ! *** PRINT HARD SPHERE AND RESONANCE PHASE SHIFTS I = Idimen (Ipm, -1, 'Ipm, -1') ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > @@ -192,7 +190,7 @@ module Samdat_0_M Mnr = 100*Mnr IF (Nr.EQ.0) Mnr = 1 Idum = Idimen (Mnr, 1, 'Mnr, 1') - CALL Escale ( I_Ixclud , & + CALL Escale ( & A(Ienerg), A(Ie), A(Ienerb), A(Ispken), & A(Iswidt), A(Ienerm), A(Isadd), A_Iadder , A_Iaddcr , & I_Inbt , I_Iint , A(Idum), Ndatbm, Nr, Np) diff --git a/sammy/src/dat/mdat1.f b/sammy/src/dat/mdat1.f index 97e69d38a2b72f3623bc95d8201ca46d13658d18..b26bf37c299c4be263040a3a8f97bd8a5615693d 100644 --- a/sammy/src/dat/mdat1.f +++ b/sammy/src/dat/mdat1.f @@ -2,7 +2,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Limits (Ntot, Bcf, Cf2, Dopwid, Parext, Iflext, Parorr, + SUBROUTINE Limits (Bcf, Cf2, Dopwid, Parext, Iflext, Parorr, * Ecrnch, Endets, Sesese, Eseses, Parrpi, Edxrpi, Xxxrpi, Parudr, * Nud_E, Nud_T, UdE, UdR, UdT, UdR_E, UdT_E, Krext) C @@ -28,7 +28,7 @@ C use Wdsint_m IMPLICIT DOUBLE PRECISION (a-h,o-z) C - DIMENSION Ntot(*), Bcf(*), Cf2(*), Dopwid(*), + DIMENSION Bcf(*), Cf2(*), Dopwid(*), * Parext(Krext,Ntotc,*), Iflext(Krext,Ntotc,*), Parorr(*), * Ecrnch(*), Endets(*), Sesese(*), Eseses(*), Parrpi(*), * Edxrpi(Kxxrpi,*), Xxxrpi(Kmmrpi,*) @@ -228,7 +228,7 @@ cx V = V + Brdlim*1.001d0*Dopple C END IF C - IF (Numext.GT.0) CALL Testxt (Ntot, Parext, Iflext, Krext) + IF (Numext.GT.0) CALL Testxt (Parext, Iflext, Krext) CALL Wwrite (Bcf, Cf2, Dopwid) RETURN C @@ -376,16 +376,21 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Testxt (Ntot, Parext, Iflext, Krext) + SUBROUTINE Testxt (Parext, Iflext, Krext) C use fixedi_m use fixedr_m + use SammyResonanceInfo_M + use RMatResonanceParam_M + use EndfData_common_m IMPLICIT DOUBLE PRECISION (a-h,o-z) C - DIMENSION Ntot(*), Parext(Krext,Ntotc,*), Iflext(Krext,Ntotc,*) + type(SammySpinGroupInfo)::spinInfo + DIMENSION Parext(Krext,Ntotc,*), Iflext(Krext,Ntotc,*) Ii = 0 - DO N=1,Ngroup - Ntotn = Ntot(Ngroup) + DO N=1,resparData%getNumSpinGroups() + call resparData%getSpinGroupInfo(spinInfo, N) + Ntotn = spinInfo%getNumChannels() DO M=1,Ntotn IF (Iflext(1,M,N).NE.-1) THEN IF (Parext(1,M,N).GT.Emind) THEN diff --git a/sammy/src/dat/mdat2.f90 b/sammy/src/dat/mdat2.f90 index 0afc487dccf5b12f07dff5f0ee3d8859a22bb4ad..3cbc60cdae14435173bc578790523173b79d672b 100644 --- a/sammy/src/dat/mdat2.f90 +++ b/sammy/src/dat/mdat2.f90 @@ -5,7 +5,7 @@ module mdat2_m ! ! ______________________________________________________________ ! - SUBROUTINE Read00 (Ntot, Bcf, Cf2, Dopwid, Parext, Jflext, & + SUBROUTINE Read00 (Bcf, Cf2, Dopwid, Parext, Jflext, & Parorr, Ecrnch, Endets, Sesese, Eseses, Parrpi, Edxrpi, Xxxrpi, & Parudr, Nud_E, Nud_T, UdE, UdR, UdT, UdR_E, UdT_E, E, Krext, & Ii, Iwhich, Mind, Mine, Maxe, Maxd, Nmax, reader) @@ -23,7 +23,7 @@ module mdat2_m IMPLICIT DOUBLE PRECISION (a-h,o-z) COMMON /Odfspc/ Nsect, Nch type(EndfData)::reader - DIMENSION Ntot(*), Bcf(*), Cf2(*), Dopwid(*), & + DIMENSION Bcf(*), Cf2(*), Dopwid(*), & Parext(Krext,Ntotc,*), Jflext(Krext,Ntotc,*), Parorr(*), & Ecrnch(*), Endets(*), Sesese(*), Eseses(*), Parrpi(*), & Edxrpi(*), Xxxrpi(*), Parudr(*) @@ -48,7 +48,7 @@ module mdat2_m IF (Kartgd.EQ.1) THEN ELSE ! *** find energy limits for the various processes -- - CALL Limits (Ntot, Bcf, Cf2, Dopwid, Parext, Jflext, Parorr, & + CALL Limits (Bcf, Cf2, Dopwid, Parext, Jflext, Parorr, & Ecrnch, Endets, Sesese, Eseses, Parrpi, Edxrpi, Xxxrpi, & Parudr, Nud_E, Nud_T, UdE, UdR, UdT, UdR_E, UdT_E, Krext) END IF @@ -223,7 +223,7 @@ module mdat2_m END IF ! ! *** find Energy limits for the various processes -- - CALL Limits (Ntot, Bcf, Cf2, Dopwid, Parext, Jflext,Parorr, & + CALL Limits (Bcf, Cf2, Dopwid, Parext, Jflext,Parorr, & Ecrnch, Endets, Sesese, Eseses, Parrpi, Edxrpi, Xxxrpi, Parudr, & Nud_E, Nud_T, UdE, UdR, UdT, UdR_E, UdT_E, Krext) ! diff --git a/sammy/src/dat/mdat4.f b/sammy/src/dat/mdat4.f index 66c4ac5c566d555b9e479fd25a34d4f7229253e6..ba4a7e3194e1d1b269108689c9cc0b8f23db15e4 100644 --- a/sammy/src/dat/mdat4.f +++ b/sammy/src/dat/mdat4.f @@ -2,7 +2,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Escale (Ixclud, Energy, Ee, + SUBROUTINE Escale (Energy, Ee, * Energb, Spken, Swidth, Energm, Sadd, Adder, Addcr, Nbt, Int, * Dum, Ndatbm, Nr, Np) C @@ -15,12 +15,12 @@ C use broad_common_m IMPLICIT DOUBLE PRECISION (a-h,o-z) C - DIMENSION Ixclud(*), + DIMENSION * Energy(*), Ee(*), Energb(*), Spken(*), Swidth(*), Energm(*), * Sadd(*), Addcr(*), Adder(*), Nbt(*), Int(*), Dum(*) C C DIMENSION -C * Ixclud(Ngroup), Energy(Ndat), Ee(Ndatb), +C * Energy(Ndat), Ee(Ndatb), C * Energb(Ndatbm), Spken(Nres), Swidth(Nres), Energm(Ndatbm), C * Sadd(*), Addcr(Np), Adder(Nr), Nbt(Nr), Int(Nr), Dum(Nr) C @@ -130,12 +130,10 @@ C IF (Kkkclq.EQ.0 .AND. Iptdop.GT.0 .AND. Iptwid.GT.0) THEN C *** Add points for resonances with small widths ***** IF (Nogeom.EQ.0) THEN - CALL Fspken (Ixclud, Energb, - * Spken, Swidth, lres) + CALL Fspken (Energb, Spken, Swidth, lres) CALL Tinyrs (Energb, Spken, Swidth, Energm, Lres) ELSE - CALL Weeres (Ixclud, Energb, - * Spken, Swidth, Energm, Sadd) + CALL Weeres (Energb, Spken, Swidth, Energm, Sadd) END IF END IF C @@ -179,8 +177,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Fspken (Ixclud, Energb, - * Spken, Swidth, lres) + SUBROUTINE Fspken (Energb, Spken, Swidth, lres) C C *** PURPOSE -- locate those resonances which require additional points C @@ -193,11 +190,11 @@ C IMPLICIT DOUBLE PRECISION (a-h,o-z) C type(SammyResonanceInfo)::resInfo + type(SammySpinGroupInfo)::spinInfo type(RMatResonance)::resonance - DIMENSION Ixclud(*), - * Energb(*), Spken(*), Swidth(*) + DIMENSION Energb(*), Spken(*), Swidth(*) C -C DIMENSION Pken(Nres), Ixclud(Ngroup), +C DIMENSION Pken(Nres), C * Energb(Ndatbm), Spken(Nres), Swidth(Nres) C Kdatb = Ndatb @@ -206,15 +203,17 @@ C L = 0 DO 30 J=1,resParData%getNumResonances() call resParData%getResonanceInfo(resInfo, J) - IF (.not.resInfo%getIncludeInCalc()) GO TO 30 - IF (Ixclud(resInfo%getSpinGroupIndex()).EQ.1) GO TO 30 + IF (.not.resInfo%getIncludeInCalc()) GO TO 30 + igr = resInfo%getSpinGroupIndex() + call resParData%getSpinGroupInfo(spinInfo, igr) + IF (.not.spinInfo%getIncludeInCalc()) GO TO 30 call resParData%getResonance(resonance, resInfo) eres = resonance%getEres() IF (eres.LT.Energb(1) .OR. eres.GT.Energb(Kdatb)) * GO TO 30 - Gd = dABS(resonance%getWidth(1)) - DO N=1,Ntotc - Gd = Gd + dABS(resonance%getWidth(N+1)) + Gd = 0.0d0 + DO N=1,resonance%getNumChan() + Gd = Gd + dABS(resonance%getWidth(N)) END DO Gd = .001d0*Gd IF (Gd.GT.eres) THEN @@ -734,8 +733,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Weeres (Ixclud, Energb, - * Spken, Swidth, Energm, Sadd) + SUBROUTINE Weeres (Energb, Spken, Swidth, Energm, Sadd) C C *** PURPOSE -- ADD ENERGIES CORRESPONDING TO VERY Small RESONANCES C @@ -749,10 +747,10 @@ C C type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance - DIMENSION Ixclud(*), - * Energb(*), Spken(*), Swidth(*), Energm(*), Sadd(*) + type(SammySpinGroupInfo)::spinInfo + DIMENSION Energb(*), Spken(*), Swidth(*), Energm(*), Sadd(*) C -C DIMENSION Ixclud(Ngroup), +C DIMENSION C * Energb(Ndatbm), Spken(Nres), Swidth(Nres), C * Energm(*), Sadd(*) C @@ -763,14 +761,16 @@ C DO 30 J=1,resParData%getNumResonances() call resParData%getResonanceInfo(resInfo, J) IF (.not.resInfo%getIncludeInCalc()) GO TO 30 - IF (Ixclud(resInfo%getSpinGroupIndex()).EQ.1) GO TO 30 + igr = resInfo%getSpinGroupIndex() + call resParData%getSpinGroupInfo(spinInfo, igr) + IF (.not.spinInfo%getIncludeInCalc()) GO TO 30 call resParData%getResonance(resonance, resInfo) eres = resonance%getEres() IF (eres.LT.Energb(1) .OR. eres.GT.Energb(Kdatb)) * GO TO 30 - Gd = dABS(resonance%getWidth(1)) - DO N=1,Ntotc - Gd = Gd + dABS(resonance%getWidth(N+1)) + Gd = 0.0d0 + DO N=1,resonance%getNumChan() + Gd = Gd + dABS(resonance%getWidth(N)) END DO Gd = .001d0*GD Xmin = eres - Gd diff --git a/sammy/src/end/mout.f b/sammy/src/end/mout.f index ffa046f68bda49836d933cb2066082420aae7b48..6acc5a8a52acc9732dcefb53f34d5b98d76f64a2 100644 --- a/sammy/src/end/mout.f +++ b/sammy/src/end/mout.f @@ -3,7 +3,6 @@ C C -------------------------------------------------------------- C SUBROUTINE Outpar (Iftit , Nunit , Parbrd, Iflbrd, - * Goj , Ntot , Lspin , Chspin, * Pareff, Ifleff, Partru, Ifltru, Igrrad, * Ifliso, * Pardet, Ifldet, Igrdet, Parext, Iflext, @@ -15,7 +14,7 @@ C * Pardtp, Ifldtp, Parusd, Iflusd, Parbag, Iflbag, * Zke , Zkte , Zkfe , If_Zke , If_Zkte, If_Zkfe, Dump, * Avga , Avgb , Va, Vb, Xa, Xb, Allkkk, - * Allxxx, Xxxxxx, Xxxstd, Kkkxxx, Kij, K1, Kppair, + * Allxxx, Xxxxxx, Xxxstd, Kkkxxx, Kij, K1, * Iffff , reduced) C C *** Purpose -- Write resonance parameters into SAMMY.LPT, and @@ -40,11 +39,11 @@ C logical::reduced type(SammyResonanceInfo)::resInfo type(ResonanceCovariance)::physCov - DIMENSION Parbrd(*), Iflbrd(*), Goj(*), - * Ntot(*), Igrrad(Ntotc,*), Pareff(*), Ifleff(*), Partru(*), + DIMENSION Parbrd(*), Iflbrd(*), + * Igrrad(Ntotc,*), Pareff(*), Ifleff(*), Partru(*), * Ifltru(*), Ifliso(*), - * Pardet(*), Ifldet(*), Igrdet(*), Lspin(Ntotc,*), - * Chspin(Ntotc,*), Parext(Nrext,Ntotc,*), Iflext(Nrext,Ntotc,*), + * Pardet(*), Ifldet(*), Igrdet(*), + * Parext(Nrext,Ntotc,*), Iflext(Nrext,Ntotc,*), * Polar(2,*), Iflpol(2,*), Parmsc(*), * Iflmsc(*), Iradms(*), Ijkmsc(*), Etaeee(*), * Parpmc(4,*), Iflpmc(4,*), Isopmc(*), Parorr(*), Iflorr(*), @@ -57,15 +56,13 @@ C * Zkfe(Ntotc,*), If_Zke(*), If_Zkte(Ntotc,*), If_Zkfe(Ntotc,*), * Dump(*), Avga(*), Avgb(*), Xa(*), Xb(*), Va(*), * Vb(*), Allkkk(*), Allxxx(*), Xxxxxx(*), - * Xxxstd(*), Kkkxxx(*), Kij(*), K1(*), Kppair(Ntotc,*) + * Xxxstd(*), Kkkxxx(*), Kij(*), K1(*) C C DIMENSION Parbrd(Numbrd), Iflbrd(Numbrd), -C * Goj(Ngroup), Ntot(Ngroup), C * Igrrad(Ntotc,Ngroup), Pareff(Numrad), Ifleff(Numrad), C * Partru(Numrad), Ifltru(Numrad), C * Ifliso(Numiso), c * Pardet(Numdet), Ifldet(Numdet), Igrdet(Ngroup), -C * Lspin(Ntotc,Ngroup), Chspin(Ntotc,Ngroup), C * Parext(Nrext,Ntotc,Ngroup), Iflext(Nrext,Ntotc,Ngroup), C * Polar(2,Nres), Iflpol(2,Nres), C * Parmsc(Nummsc), Iflmsc(Nummsc), Iradms(Ngroup), Ijkmsc(Nummsc), @@ -84,6 +81,10 @@ C type(SammySpinGroupInfo)::spinInfo type(RMatSpinGroup)::spinGroup type(RMatResonance)::resonance + type(SammyParticlePairInfo)::pairInfo + type(RMatParticlePair)::pair + type(RMatChannelParams)::channel + type(SammyChannelInfo)::channelInfo integer,allocatable,dimension(:)::fitFlags DIMENSION Iif(7) logical::haveRes @@ -118,9 +119,9 @@ C Ipar = 0 IF (Nres.LE.0) GO TO 140 IF (Ntotc.GT.3) THEN - CALL Oooppp (Nunit, Goj, Ntot, Lspin, Chspin, + CALL Oooppp (Nunit, * Zke, Zkte, Zkfe, - * If_Zke, If_Zkte, If_Zkfe, Dump, Kppair, Iff, Ipar, + * If_Zke, If_Zkte, If_Zkfe, Dump, Iff, Ipar, * reduced) GO TO 140 END IF @@ -132,9 +133,10 @@ C C Ipar = 0 maxr = 0 - DO 130 Igroup=1,Ngroup + DO 130 Igroup=1,resParData%getNumSpinGroups() + call resParData%getSpinGroupInfo(spinInfo, Igroup) IF (Iftit.EQ.2) CALL Advzer (Avga, Avgb, Va, Vb, Ntotc2) - Mmax = Ntot(Igroup) + Mmax = spinInfo%getNumChannels(); Mmax2 = Mmax + 2 minr = maxr + 1 @@ -173,14 +175,15 @@ C C Igr = Igroup call resParData%getSpinGroupInfo(spinInfo, Igroup) - call resParData%getSpinGroup(spinGroup, spinInfo) + call resParData%getSpinGroup(spinGroup, spinInfo) + iwGam = spinInfo%getGammaWidthIndex() + iela = spinInfo%getElasticChannel() + iela = spinInfo%getWidthForChannel(iela) CALL Header (Igr, spinGroup%getJ(), - * Lspin(1,Igroup), - * Chspin(1,Igroup), - * spinInfo%getAbundance(), Goj(Igroup), + * spinInfo%getAbundance(), spinInfo%getGFactor(), * If_Zke(Igroup), Zkte(1,Igroup), Zkfe(1,Igroup), * Zke(1,Igroup), If_Zkte(1,Igroup), If_Zkfe(1,Igroup), - * Kppair(1,Igroup), Nunit, Mmax, Kredwa) + * Nunit, Mmax, Kredwa) C IF (Iftit.EQ.2) THEN C *** Here only if need to calculate averages for final values @@ -216,8 +219,8 @@ C fitFlags(nc) = resInfo%getChannelFitOption(nc-1) end do CALL Setflg (fitFlags, Mmax2) - CALL Nwrite (pkenPr, resonance, - * Goj(Igroup), Nunit, Mmax) + CALL Nwrite (pkenPr, resonance, iwGam, iela, + * spinInfo%getGFactor(), Nunit, Mmax) C DO K=1,Mmax2 if( k.eq.1) then @@ -280,8 +283,8 @@ C fitFlags(nc) = resInfo%getChannelFitOption(nc-1) end do CALL Setflg (fitFlags, Mmax+2) - CALL Nwrite (pkenPr, resonance, - * Goj(Igroup), Nunit, Mmax) + CALL Nwrite (pkenPr, resonance, iwGam, iela, + * spinInfo%getGFactor(), Nunit, Mmax) END IF END DO END IF @@ -322,9 +325,7 @@ C *** Here if want fission gamma widths in polar coordinates call resParData%getSpinGroupInfo(spinInfo, Igroup) call resParData%getSpinGroup(spinGroup, spinInfo) CALL Headpc (Igr, spinGroup%getJ(), - * Lspin(1,Igroup), - * Chspin(1,Igroup), - * spinInfo%getAbundance(), Goj(Igroup), + * spinInfo%getAbundance(), spinInfo%getGFactor(), * If_Zke(Igroup), Nunit, Mmax) Ixx = 0 DO N=Minr,Maxr @@ -415,7 +416,7 @@ C 140 CONTINUE Iunit = Nunit IF (Numext.GT.0) THEN - CALL Outext (Ntot, Parext, Iflext, Dump, Iunit, + CALL Outext (Parext, Iflext, Dump, Iunit, * Ipar) END IF C @@ -499,9 +500,9 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Header (Ii, SpinjVal, Lspin, Chspin, AbnVal, Goj, + SUBROUTINE Header (Ii, SpinjVal, AbnVal, Goj, * If_Zke, - * Zkte, Zkfe, Zke, If_Zkte, If_Zkfe, Kppair, Nunit, Mmax, + * Zkte, Zkfe, Zke, If_Zkte, If_Zkfe, Nunit, Mmax, * Kredwa) use fixedi_m use Gachmi_common_m @@ -510,13 +511,18 @@ C use SammyParticlePairInfo_M use RMatResonanceParam_M IMPLICIT DOUBLE PRECISION (a-h,o-z) - DIMENSION Lspin(*), Chspin(*), Zkte(*), Zkfe(*), Zke(*), - * If_Zkte(*), If_Zkfe(*), Kppair(*) + DIMENSION Zkte(*), Zkfe(*), Zke(*), + * If_Zkte(*), If_Zkfe(*) CHARACTER*10 Capt CHARACTER*8 Area DIMENSION Aa(3) character(len=8),allocatable::pname(:) type(SammyParticlePairInfo)::pairInfo + type(SammySpinGroupInfo)::spinInfo + type(RMatChannelParams)::channel + type(SammyChannelInfo)::channelInfo + integer,allocatable,dimension(:)::lspin + real(kind=8),allocatable,dimension(:)::chspin DATA Capt /' capture'/, Area /'area '/ C IF (If_Zke.EQ.0) THEN @@ -543,11 +549,23 @@ C WRITE (Nunit,99996) (Aa(M), (Draw(J,M),J=1,5), M=1,Mmax) 99996 FORMAT (' "true" radius =', 4(1PE12.4,5A1)) C + ! fill in pname with the name of the particle pair for the channel + ! for printing. Mmax channels are always printed even + ! if we only have spinInfo%getNumChannels() channels. allocate(pname(Mmax)) - do k = 1, Mmax - call resParData%getParticlePairInfo(pairInfo, Kppair(K)) + call resParData%getSpinGroupInfo(spinInfo, Ii) + nn = spinInfo%getNumChannels() + if( nn.gt.Mmax) nn = Mmax + do k = 1, nn + call spinInfo%getChannelInfo(channelInfo, k) + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) call pairInfo%getName(pname(k)) end do + do k = nn+1, Mmax + pname(k) = "" + end do IF (Kcarea.NE.1) THEN WRITE (Nunit,99994) (Ga,K=1,Mmax) WRITE (Nunit,99993) (pname(K),K=1,Mmax) @@ -561,8 +579,20 @@ C END IF deallocate(pname) C + allocate(lspin(Mmax)) + lspin = 0 + allocate(chspin(Mmax)) + chspin = 0.0d0 + do k = 1, Mmax + call spinInfo%getChannelInfo(channelInfo, k) + call resParData%getChannel(channel, channelInfo) + lspin(k) = channel%getL() + chspin(k) = channel%getSch() + end do WRITE (Nunit,99992) (Ellll, Lspin(K), Espin, Chspin(K), K=1,Mmax) 99992 FORMAT ((33x, 5(3X, A2, I1, 2X, A5, F4.1))) + deallocate(lspin) + deallocate(chspin) Ntotc1 = Mmax + 1 IF (Kredwa.EQ.0) WRITE (Nunit,99991) (Miev,K=1,Ntotc1) IF (Kredwa.EQ.1) WRITE (Nunit,99990) (Sqmiev,K=1,Ntotc1) @@ -574,7 +604,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Nwrite (Pken, resonance, Goj, Nunit, Mmax) + SUBROUTINE Nwrite (Pken, resonance, iwGam, iela,Goj,Nunit,Mmax) use fixedi_m use ifwrit_m use RMatResonanceParam_M @@ -585,7 +615,7 @@ C type(RMatResonance)::resonance C - integer::j,k + integer::j,k, iwGam, iela real(kind=8):: Gt, carea IF (Kcarea.LE.0) THEN @@ -601,11 +631,12 @@ C * (Draw(J,K+2),J=1,5),K=1,Mmax) END IF ELSE - GT = resonance%getWidth(1) - DO K=1,Mmax - GT = GT + resonance%getWidth(K+1) + GT = 0.0d0 + DO K=1,resonance%getNumChan() + GT = GT + resonance%getWidth(K) END DO - Carea = GoJ*resonance%getWidth(1)*resonance%getWidth(2)/GT + Carea = GoJ*resonance%getWidth(iwGam)* + * resonance%getWidth(iela)/GT IF (Kshort.EQ.0) THEN WRITE (Nunit,99990) Pken, (Draw(J,1),J=1,5), * resonance%getWidth(1), @@ -628,12 +659,18 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Headpc (Igr, SpinjVal, Lspin, Chspin, AbnVal, Goj, - * If_Zke, - * Nunit, Mmax) + SUBROUTINE Headpc (Igr, SpinjVal, AbnVal, Goj, + * If_Zke, Nunit, Mmax) use Gachmi_common_m + use EndfData_common_m + use SammyParticlePairInfo_M + use RMatResonanceParam_M IMPLICIT DOUBLE PRECISION (a-h,o-z) - DIMENSION Lspin(*), Chspin(*) + type(SammySpinGroupInfo)::spinInfo + type(RMatChannelParams)::channel + type(SammyChannelInfo)::channelInfo + integer::lspin(3) + real(kind=8)::chspin(3) C IF (If_Zke.EQ.0) THEN WRITE (Nunit,99998) Igr, SpinjVal, AbnVal, Goj @@ -651,6 +688,19 @@ C WRITE (Nunit,99987) (CH,K,K=1,3) 99987 FORMAT (' GAMMA ', 3(5X, A10, I2), * ' (RADIANS) AMPLITUDE') + + lspin = 0 + chspin = 0.0d0 + call resParData%getSpinGroupInfo(spinInfo, Igr) + nn = spinInfo%getNumChannels() + if( nn.gt.3) nn = 3 + do k = 1, nn + call spinInfo%getChannelInfo(channelInfo, k) + call resParData%getChannel(channel, channelInfo) + lspin(k) = channel%getL() + chspin(k) = channel%getSch() + end do + WRITE (Nunit,99992) (ELlll, Lspin(K), Espin, Chspin(K), K=1,3) 99992 FORMAT ((33x, 5(3X, A2, I1, 2X, A5, F4.1))) WRITE (Nunit,99986) (MIEV,K=1,4) @@ -761,9 +811,9 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Oooppp (Nunit, Goj, Ntot, Lspin, Chspin, + SUBROUTINE Oooppp (Nunit, * Zke, Zkte, Zkfe,If_Zke, - * If_Zkte, If_Zkfe, Dump, Kppair, Iff, Ipar, reduced) + * If_Zkte, If_Zkfe, Dump, Iff, Ipar, reduced) C C *** Purpose -- Write the resonance parameters when there are more C *** than three channels @@ -787,9 +837,7 @@ C IMPLICIT DOUBLE PRECISION (a-h,o-z) C logical::reduced - DIMENSION Goj(*), Ntot(*), Lspin(Ntotc,*), - * Chspin(Ntotc,*), - * Kppair(Ntotc,*), + DIMENSION * Zke(Ntotc,*), Zkte(Ntotc,*), Zkfe(Ntotc,*), * If_Zke( *),If_Zkte(Ntotc,*),If_Zkfe(Ntotc,*), Dump(*) DIMENSION Ii(2) @@ -797,8 +845,11 @@ C type(RMatSpinGroup)::spinGroup type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance - character(len=8)::pname type(SammyParticlePairInfo)::pairInfo + type(RMatParticlePair)::pair + type(RMatChannelParams)::channel + type(SammyChannelInfo)::channelInfo + character(len=8)::pname integer,allocatable,dimension(:)::fitFlags logical::haveRes DATA Zero /0.0d0/ @@ -806,7 +857,7 @@ C C Ipar = 0 maxr = 0 - DO 150 Igroup=1,Ngroup + DO 150 Igroup=1,resParData%getNumSpinGroups() minr = maxr + 1 haveRes = .false. do i = minr, resParData%getNumResonances() @@ -819,8 +870,8 @@ C call resParData%getSpinGroupInfo(spinInfo, Igroup) call resParData%getSpinGroup(spinGroup, spinInfo) - Mmax = Ntot(Igroup) - Mmax2 = Mmax + 2 + Mmax = spinInfo%getNumChannels() + Mmax2 = spinInfo%getNumResPar() IF (Iff.EQ.0) GO TO 20 DO N=Minr,Maxr @@ -834,13 +885,13 @@ C IF (If_Zke(Igroup).EQ.0) THEN WRITE (Nunit,99999) Igroup, * spinGroup%getJ(), - * AbnVal, Goj(Igroup) + * AbnVal, spinInfo%getGFactor() 99999 FORMAT (/, ' SPIN GROUP NUMBER', I3, ' WITH SPIN=', * F5.1, ', ABUNDANCE=', F8.4, ', AND G=', F7.4) ELSE WRITE (Nunit,99998) Igroup, * spinGroup%getJ(), - * AbnVal, If_Zke(Igroup), Goj(Igroup) + * AbnVal, If_Zke(Igroup), spinInfo%getGFactor() 99998 FORMAT (/, ' SPIN GROUP NUMBER', I3, ' WITH SPIN=', * F5.1, ', ABUNDANCE=', F8.4, '(', I3, ')', * ', AND G=', F7.4) @@ -897,66 +948,85 @@ C call resParData%getResonance(resonance, resInfo) end if pkenPr = getPkenPr(resonance%getEres(), reduced) - gga = resonance%getWidth(1) + ichan = spinInfo%getGammaWidthIndex() + gga = resonance%getWidth(ichan) IF (Kshort.EQ.0) THEN + iela = spinInfo%getElasticChannel() + call spinInfo%getChannelInfo(channelInfo, iela) + call resParData%getChannel(channel, channelInfo) call resParData%getParticlePairInfo(pairInfo, - * Kppair(1,Igroup) ) + * channelInfo%getParticlePairIndex()) call pairInfo%getName(pname) - IF (Lspin(1,Igroup).LE.9) THEN + ichan = spinInfo%getElasticChannel() + ichan = spinInfo%getWidthForChannel(ichan) + IF (channel%getL().LE.9) THEN WRITE (Nunit,99992) pkenPr, (Draw(J,1),J=1,5), - * Gga, (Draw(J,2),J=1,5), resonance%getWidth(2), - * (Draw(J,3),J=1,5), ELlll, Lspin(1,Igroup),Espin, - * Chspin(1,Igroup), pname + * Gga, (Draw(J,2),J=1,5),resonance%getWidth(ichan), + * (Draw(J,3),J=1,5), ELlll, channel%getL(),Espin, + * channel%getSch(), pname ELSE WRITE (Nunit,79992) pkenPr, (Draw(J,1),J=1,5), - * Gga, (Draw(J,2),J=1,5), resonance%getWidth(2), - * (Draw(J,3),J=1,5), Lspin(1,Igroup), Espin, - * Chspin(1,Igroup), pname + * Gga, (Draw(J,2),J=1,5),resonance%getWidth(ichan), + * (Draw(J,3),J=1,5), channel%getL(), Espin, + * channel%getSch(), pname END IF DO K=2,Mmax + if (k.eq.spinInfo%getElasticChannel()) cycle + call spinInfo%getChannelInfo(channelInfo, K) + call resParData%getChannel(channel, channelInfo) call resParData%getParticlePairInfo(pairInfo, - * Kppair(k,Igroup) ) + * channelInfo%getParticlePairIndex()) call pairInfo%getName(pname) - IF (Lspin(K,Igroup).LE.9) THEN - WRITE (Nunit,99991) resonance%getWidth(k+1), + ichan = spinInfo%getWidthForChannel(K) + IF (channel%getL().LE.9) THEN + WRITE (Nunit,99991) resonance%getWidth(ichan), * (Draw(J,K+2),J=1,5), - * ELlll, Lspin(K,Igroup), Espin, - * Chspin(K,Igroup), pname + * ELlll, channel%getL(), Espin, + * channel%getSch(), pname ELSE - WRITE (Nunit,79991) resonance%getWidth(k+1), + WRITE (Nunit,79991) resonance%getWidth(ichan), * (Draw(J,K+2),J=1,5), - * Lspin(K,Igroup), Espin, - * Chspin(K,Igroup), pname + * channel%getL(), Espin, + * channel%getSch(), pname END IF END DO ELSE + iela = spinInfo%getElasticChannel() + call spinInfo%getChannelInfo(channelInfo, iela) + call resParData%getChannel(channel, channelInfo) call resParData%getParticlePairInfo(pairInfo, - * Kppair(1,Igroup) ) + * channelInfo%getParticlePairIndex()) call pairInfo%getName(pname) - IF (Lspin(1,Igroup).LE.9) THEN + ichan = spinInfo%getElasticChannel() + ichan = spinInfo%getWidthForChannel(ichan) + IF (channel%getL().LE.9) THEN WRITE (Nunit,99990) pkenPr, (Draw(J,1),J=1,5), - * Gga, (Draw(J,2),J=1,5), resonance%getWidth(2), - * (Draw(J,3),J=1,5), ELlll, Lspin(1,Igroup),Espin, - * Chspin(1,Igroup), pname + * Gga, (Draw(J,2),J=1,5),resonance%getWidth(ichan), + * (Draw(J,3),J=1,5), ELlll, channel%getL(),Espin, + * channel%getSch(), pname ELSE WRITE (Nunit,79990) pkenPr, (Draw(J,1),J=1,5), - * Gga, (Draw(J,2),J=1,5), resonance%getWidth(2), - * (Draw(J,3),J=1,5), Lspin(1,Igroup), Espin, - * Chspin(1,Igroup), pname + * Gga, (Draw(J,2),J=1,5),resonance%getWidth(ichan), + * (Draw(J,3),J=1,5), channel%getL(), Espin, + * channel%getSch(), pname END IF - DO K=2,Mmax + DO K=1,Mmax + if (k.eq.spinInfo%getElasticChannel()) cycle + call spinInfo%getChannelInfo(channelInfo, k) + call resParData%getChannel(channel, channelInfo) call resParData%getParticlePairInfo(pairInfo, - * Kppair(k,Igroup) ) + * channelInfo%getParticlePairIndex()) call pairInfo%getName(pname) - IF (Lspin(K,Igroup).LE.9) THEN - WRITE (Nunit,99989) resonance%getWidth(k+1), + ichan = spinInfo%getWidthForChannel(K) + IF (channel%getL().LE.9) THEN + WRITE (Nunit,99989) resonance%getWidth(ichan), * (Draw(J,K+2), - * J=1,5), ELlll, Lspin(K,Igroup), Espin, - * Chspin(K,Igroup), pname + * J=1,5), ELlll, channel%getL(), Espin, + * channel%getSch(), pname ELSE - WRITE (Nunit,79989) resonance%getWidth(k+1), - * (Draw(J,K+2),J=1,5), Lspin(K,Igroup), Espin, - * Chspin(K,Igroup), pname + WRITE (Nunit,79989) resonance%getWidth(ichan), + * (Draw(J,K+2),J=1,5), channel%getL(), Espin, + * channel%getSch(), pname END IF END DO END IF @@ -1010,88 +1080,112 @@ C call resParData%getResonance(resonance, resInfo) end if pkenPr = getPkenPr(resonance%getEres(), reduced) - gga = resonance%getWidth(1) + ichan = spinInfo%getGammaWidthIndex() + gga = resonance%getWidth(ichan) IF (Kshort.EQ.0) THEN + iela = spinInfo%getElasticChannel() + call spinInfo%getChannelInfo(channelInfo, iela) + call resParData%getChannel(channel, channelInfo) call resParData%getParticlePairInfo(pairInfo, - * Kppair(1,Igroup) ) + * channelInfo%getParticlePairIndex()) call pairInfo%getName(pname) - IF (Lspin(1,Igroup).LE.9) THEN + ichan = spinInfo%getElasticChannel() + ichan = spinInfo%getWidthForChannel(ichan) + IF (channel%getL().LE.9) THEN WRITE (Nunit,99992) pkenPr, (Draw(J,1),J=1,5), - * Gga, (Draw(J,2),J=1,5),resonance%getWidth(2), - * (Draw(J,3),J=1,5), ELlll, Lspin(1,Igroup), - * Espin, Chspin(1,Igroup), + * Gga, (Draw(J,2),J=1,5), + * resonance%getWidth(ichan), + * (Draw(J,3),J=1,5), ELlll, channel%getL(), + * Espin, channel%getSch(), * pname 99992 FORMAT (1PE13.5, 5A1, 2(1PE12.4, 5A1), 3X, A2, * I1, 2X, A5, 0PF4.1, 1X, A8) ELSE WRITE (Nunit,79992) pkenPr, (Draw(J,1),J=1,5), - * Gga, (Draw(J,2),J=1,5),resonance%getWidth(2), - * (Draw(J,3),J=1,5), Lspin(1,Igroup), - * Espin, Chspin(1,Igroup), + * Gga, (Draw(J,2),J=1,5), + * resonance%getWidth(ichan), + * (Draw(J,3),J=1,5), channel%getL(), + * Espin, channel%getSch(), * pname 79992 FORMAT (1PE13.5, 5A1, 2(1PE12.4, 5A1), 3X, 'L', * I2, 2X, A5, 0PF4.1, 1X, A8) END IF - DO K=2,Mmax + DO K=1,Mmax + if( k.eq.spinInfo%getElasticChannel()) cycle + call spinInfo%getChannelInfo(channelInfo, K) + call resParData%getChannel(channel, channelInfo) call resParData%getParticlePairInfo(pairInfo, - * Kppair(k,Igroup) ) + * channelInfo%getParticlePairIndex()) call pairInfo%getName(pname) - IF (Lspin(K,Igroup).LE.9) THEN - WRITE (Nunit,99991) resonance%getWidth(k+1), + ichan = spinInfo%getWidthForChannel(k) + IF (channel%getL().LE.9) THEN + WRITE (Nunit,99991)resonance%getWidth(ichan), * (Draw(J,K+2), - * J=1,5), ELlll, Lspin(K,Igroup), - * Espin, Chspin(K,Igroup), + * J=1,5), ELlll, channel%getL(), + * Espin, channel%getSch(), * pname -99991 FORMAT (35X, 1PE12.4, 5A1, 3X, A2, I1, 2X, +99991 FORMAT (35X, 1PE12.4, 5A1, 3X, A2, I1, 2X, * A5, 0PF4.1, 1X, A8) ELSE - WRITE (Nunit,79991) resonance%getWidth(k+1), - * (Draw(J,K+2),J=1,5), Lspin(K,Igroup), - * Espin, Chspin(K,Igroup), + WRITE (Nunit,79991)resonance%getWidth(ichan), + * (Draw(J,K+2),J=1,5), channel%getL(), + * Espin, channel%getSch(), * pname -79991 FORMAT (35X, 1PE12.4, 5A1, 3X, 'L', I2, 2X, +79991 FORMAT (35X, 1PE12.4, 5A1, 3X, 'L', I2, 2X, * A5, 0PF4.1, 1X, A8) END IF END DO ELSE + iela = spinInfo%getElasticChannel() + call spinInfo%getChannelInfo(channelInfo, iela) + call resParData%getChannel(channel, channelInfo) call resParData%getParticlePairInfo(pairInfo, - * Kppair(1,Igroup) ) + * channelInfo%getParticlePairIndex() ) call pairInfo%getName(pname) - IF (Lspin(1,Igroup).LE.9) THEN + ichan = spinInfo%getElasticChannel() + ichan = spinInfo%getWidthForChannel(ichan) + IF (channel%getL().LE.9) THEN WRITE (Nunit,99990) pkenPr, (Draw(J,1),J=1,5), - * Gga, (Draw(J,2),J=1,5),resonance%getWidth(2), - * (Draw(J,3),J=1,5), ELlll, Lspin(1,Igroup), - * Espin, Chspin(1,Igroup), + * Gga, (Draw(J,2),J=1,5), + * resonance%getWidth(ichan), + * (Draw(J,3),J=1,5), ELlll, channel%getL(), + * Espin, channel%getSch(), * pname 99990 FORMAT (3(F12.4, 5A1), 3X, A2, I1, 2X, A5, F4.1, * 1X, A8) ELSE WRITE (Nunit,79990) pkenPr, (Draw(J,1),J=1,5), - * Gga, (Draw(J,2),J=1,5),resonance%getWidth(2), - * (Draw(J,3),J=1,5), ELlll, Lspin(1,Igroup), - * Espin, Chspin(1,Igroup), + * Gga, (Draw(J,2),J=1,5), + * resonance%getWidth(ichan), + * (Draw(J,3),J=1,5), ELlll, channel%getL(), + * Espin, channel%getSch(), * pname 79990 FORMAT (3(F12.4, 5A1), 3X, 'L', I2, 2X, A5, * F4.1, 1X, A8) END IF - DO K=2,Mmax + DO K=1,Mmax + if( k.eq.spinInfo%getElasticChannel()) cycle + call spinInfo%getChannelInfo(channelInfo, K) + call resParData%getChannel(channel, + * channelInfo) call resParData%getParticlePairInfo(pairInfo, - * Kppair(k,Igroup) ) + * channelInfo%getParticlePairIndex()) call pairInfo%getName(pname) - IF (Lspin(K,Igroup).LE.9) THEN - WRITE (Nunit,99989) resonance%getWidth(k+1), + ichan = spinInfo%getWidthForChannel(k) + IF (channel%getL().LE.9) THEN + WRITE (Nunit,99989)resonance%getWidth(ichan), * (Draw(J,K+2),J=1,5), ELlll, - * Lspin(K,Igroup), - * Espin, Chspin(K,Igroup), + * channel%getL(), + * Espin, channel%getSch(), * pname -99989 FORMAT (34X, (F12.4, 5A1), 3X, A2, I1, 2X, +99989 FORMAT (34X, (F12.4, 5A1), 3X, A2, I1, 2X, * A5, F4.1, 1X, A8) ELSE - WRITE (Nunit,79989) resonance%getWidth(k+1), - * (Draw(J,K+2),J=1,5), Lspin(K,Igroup), - * Espin, Chspin(K,Igroup), + WRITE (Nunit,79989)resonance%getWidth(ichan), + * (Draw(J,K+2),J=1,5), channel%getL(), + * Espin, channel%getSch(), * pname -79989 FORMAT (34X, (F12.4, 5A1), 3X, 'L', I2, 2X, +79989 FORMAT (34X, (F12.4, 5A1), 3X, 'L', I2, 2X, * A5, F4.1, 1X, A8) END IF END DO diff --git a/sammy/src/end/mout1.f b/sammy/src/end/mout1.f index 6c4e5bb53a636e70b7a8f63ba57b8529aefb9913..b21effe1eb5cf96ae745e9f737b4284d36ef7b21 100644 --- a/sammy/src/end/mout1.f +++ b/sammy/src/end/mout1.f @@ -52,7 +52,9 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Outred (Goj, Ntot, Lspin, Chspin, Iff) +C If Iff is not null, we only print the resonance parameters if +C at least one resonance parameters is adjusted. + SUBROUTINE Outred (Iff) C C *** PURPOSE -- OUTPUT RESONANCE PARAMETERS (AMPLITUDES) C @@ -71,14 +73,13 @@ C IMPLICIT DOUBLE PRECISION (a-h,o-z) C logical::haveRes - DIMENSION Goj(*), Ntot(*), Lspin(Ntotc,*), - * Chspin(Ntotc,*) -C -C DIMENSION Goj(Ngroup), -C * Ntot(Ngroup), Lspin(Ntotc,Ngroup), Chspin(Ntotc,Ngroup) -C + integer,allocatable,dimension(:)::lspin + real(kind=8),allocatable,dimension(:)::chspin + type(SammySpinGroupInfo)::spinInfo type(RMatSpinGroup)::spinGroup + type(SammyChannelInfo)::channelInfo + type(RMatChannelParams)::channel type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonanceRed integer,allocatable,dimension(:)::fitFlags @@ -100,7 +101,7 @@ C end do IF (haveRes) THEN - Mmax = Ntot(I) + Mmax = spinInfo%getNumChannels() IF (Iff.NE.0) THEN DO N=Minr,Maxr call resParData%getResonanceInfo(resInfo, N) @@ -111,14 +112,24 @@ C 20 CONTINUE WRITE (21,99998) I, spinGroup%getJ(), * spinInfo%getAbundance(), - * Goj(I) + * spinInfo%getGFactor() Mmax1 = Mmax IF (Mmax.GT.5) Mmax1 = 5 + allocate(lspin(mmax)) + allocate(chspin(mmax)) + do k = 1, spinInfo%getNumChannels() + call spinInfo%getChannelInfo(channelInfo, K) + call resParData%getChannel(channel, channelInfo) + lspin(k) = channel%getL() + chspin(k) = channel%getSch() + end do WRITE (21,99997) (Red,K=1,Mmax1) WRITE (21,99996) (Ga,K=1,Mmax1) WRITE (21,99995) (Ch,K,K=1,Mmax1) - WRITE (21,99994) (ELlll,Lspin(K,I),Espin,Chspin(K,I), + WRITE (21,99994) (ELlll,Lspin(K),Espin,Chspin(K), * K=1,Mmax) + deallocate(lspin) + deallocate(chspin) C DO N=Minr,Maxr call resParData%getResonanceInfo(resInfo, N) @@ -627,8 +638,9 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Outmlb (Goj, Ntot, Ishift, Lspin, Bound, - * Echan, Zkte, Iff) +C If Iff is not null, we only print the resonance parameters if +C at least one resonance parameters is adjusted. + SUBROUTINE Outmlb (Bound, Echan, Zkte, Iff) C C *** PURPOSE -- OUTPUT EQUIVALENT BREIT-WIGNER PARAMETERS C @@ -646,12 +658,10 @@ C EXTERNAL Sf C logical::haveRes - DIMENSION Goj(*), Ntot(*), Ishift(Ntotc,*), - * Lspin(Ntotc,*), Bound(Ntotc,*), Echan(Ntotc,*), + DIMENSION Bound(Ntotc,*), Echan(Ntotc,*), * Zkte(Ntotc,*) C -C DIMENSION Goj(Ngroup), -C * Ntot(Ngroup), Ishift(Ntotc,Ngroup), Lspin(Ntotc,Ngroup), +C DIMENSION C * Bound(Ntotc,Ngroup), Echan(Ntotc,Ngroup), C * Zkte(Ntotc,Ngroup) C @@ -659,6 +669,10 @@ C type(RMatSpinGroup)::spinGroup type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance, resonanceRed + type(SammyChannelInfo)::channelInfo + type(RMatChannelParams)::channel + type(SammyParticlePairInfo)::pairInfo + type(RMatParticlePair)::pair integer,allocatable,dimension(:)::fitFlags DATA Zero /0.0d0/ C @@ -679,7 +693,7 @@ C haveRes = .true. end do IF (haveRes) THEN - Mmax = Ntot(I) + Mmax = spinInfo%getNumChannels() IF (Iff.EQ.0) GO TO 20 DO Ires=Minr,Maxr call resParData%getResonanceInfo(resInfo, Ires) @@ -689,7 +703,7 @@ C 20 CONTINUE WRITE (21,99998) I, spinGroup%getJ(), * spinInfo%getAbundance(), - * Goj(I) + * spinInfo%getGFactor() WRITE (21,99997) WRITE (21,99996) WRITE (21,99995) @@ -708,14 +722,27 @@ C call resParData%getResonance(resonanceRed, resInfo) eres = resonance%getEres() Emlbw = dABS(eres) - Gmlbw = dABS(resonance%getWidth(1)) + ichan = spinInfo%getGammaWidthIndex() + Gmlbw = dABS(resonance%getWidth(ichan)) DO K=1,Mmax - Gmlbw = Gmlbw + dABS(resonance%getWidth(K+1)) - IF (Ishift(K,I).NE.0) THEN + call spinInfo%getChannelInfo(channelInfo, K) + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, pairInfo) + call resParData%getChannel(channel, channelInfo) + if (pair%getCalcShift()) then + Ishift = 1 + else + Ishift = 0 + end if + ichan = spinInfo%getWidthForChannel(k) + Gmlbw = Gmlbw + dABS(resonance%getWidth(ichan)) + IF (Ishift.NE.0) THEN Q = dABS(eres-Echan(K,I)) Rho = Zkte(K,I)*dSQRT(Q) - X = SF(Rho, Lspin(K,I), Bound(K,I)) - X = X*resonanceRed%getWidth(k+1)**2*0.001 + X = SF(Rho, channel%getL(), Bound(K,I)) + X = X*resonanceRed%getWidth(ichan)**2*0.001 Emlbw = Emlbw - X END IF END DO diff --git a/sammy/src/end/mout2.f b/sammy/src/end/mout2.f index 452ee3ae0b28ae6099f079741ed178df356a404f..7b20f8fcd4df8d89e4646f6a62bf912e3bba9119 100644 --- a/sammy/src/end/mout2.f +++ b/sammy/src/end/mout2.f @@ -2,7 +2,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Outext (Ntot, Parext, Iflext, Dump, + SUBROUTINE Outext (Parext, Iflext, Dump, * Iunit, Ipar) C C *** PURPOSE -- OUTPUT R-EXTERNAL PARAMETERS @@ -18,7 +18,7 @@ C use RMatResonanceParam_M IMPLICIT DOUBLE PRECISION (a-h,o-z) C - DIMENSION Ntot(*), Parext(Nrext,Ntotc,*), + DIMENSION Parext(Nrext,Ntotc,*), * Iflext(Nrext,Ntotc,*), Dump(*) C DIMENSION Ntot(Ngroup), Parext(Nrext,Ntotc,Ngroup), C * Iflext(Nrext,Ntotc,Ngroup), Dump(Nvpall) @@ -30,10 +30,10 @@ C WRITE (Iunit,99999) IF (Nrext.EQ.5) WRITE (Iunit,99990) IF (Nrext.EQ.7) WRITE (Iunit,99989) - DO I=1,Ngroup + DO I=1,resParData%getNumSpinGroups() call resParData%getSpinGroupInfo(spinInfo, I) call resParData%getSpinGroup(spinGroup, spinInfo) - Mmax = Ntot(I) + Mmax = spinInfo%getNumChannels() IF (Iflext(1,1,I).NE.-1) CALL Setflg (Iflext(1,1,I), * Nrext) IF (Iflext(1,1,I).NE.-1 .AND. Nrext.EQ.5) WRITE (Iunit,99988) diff --git a/sammy/src/endf/SammySpinGroupInfo.h b/sammy/src/endf/SammySpinGroupInfo.h index 5ac37165437da32097b252d193d6069097e5fb5c..badf3c6ac27b4f19385b7792c2583f1fb3549789 100644 --- a/sammy/src/endf/SammySpinGroupInfo.h +++ b/sammy/src/endf/SammySpinGroupInfo.h @@ -19,7 +19,6 @@ namespace sammy{ entryChannels(0), exitChannels(0), gFactor(0), - bound(0), gammaWidthMiscParIndex(0){} SammySpinGroupInfo(const SammySpinGroupInfo& orig):isotopeIndex(orig.isotopeIndex), resonanceIndex(orig.resonanceIndex), @@ -30,7 +29,6 @@ namespace sammy{ entryChannels(orig.entryChannels), exitChannels(orig.exitChannels), gFactor(orig.gFactor), - bound(orig.bound), gammaWidthMiscParIndex(orig.gammaWidthMiscParIndex){ for (auto it = orig.channelInfo.begin(); it != orig.channelInfo.end(); it++){ channelInfo.push_back( std::make_shared<SammyChannelInfo>( *(*it) ) ); @@ -51,6 +49,9 @@ namespace sammy{ for (auto it = info.channelInfo.begin(); it != info.channelInfo.end(); it++){ channelInfo.push_back( std::make_shared<SammyChannelInfo>( *(*it) ) ); } + + gFactor = info.gFactor; + gammaWidthMiscParIndex = info.gammaWidthMiscParIndex; } /** @@ -151,13 +152,92 @@ namespace sammy{ } /** - * Get the number of channels + * Get the number of channels. + * + * This is the real number of channels. In traditional SAMMY this does not + * include the GAMMA channel. Use getAllChannels() to get the + * number of channels including the gamma channel if present. + * * @return the number of channels */ int getNumChannels() const{ return (int)channelInfo.size(); } - + + /** + * Get the number of channels including the gamma channel if present + */ + int getAllChannels() const{ + return getNumChannels() + 1; // in SAMMY the gamma channel is special + } + + /** + * The number of resonance parameters for a given resonance in this channe. + * The number includes the energy and all widths + */ + int getNumResPar() const{ + return getNumChannels() + 2; // in SAMMY the gamma channel is special (+1) and energy (+1) + } + + /** + * Get the index of the gamma width in the resonance parameters. + * If gamma are not treated special, -1 is returned. + * + * @return the index of the gamma channel. + */ + int getGammaWidthIndex() const{ + return 0; // in SAMMY that is currently always the first width + // Note: currently we don't ever return -1, but will once more than one gamma channel is allowed + } + + /** + * Get the index to the width that goes with this channel. + * + * @return the index of the correspinding width for the chhanel + */ + int getWidthForChannel(int channel) const{ + // in SAMMY that is currently (channel+1) as the gamma chanel is + // not included in the number of channels + return channel + 1; + } + + /** + * Get the index of the elastic channel. + * If there is no elastic channel return -1 + * + * @return the index of the elastic channel + */ + int getElasticChannel() const{ + // In SAMMY this is always the first channel and the second width + return 0; + // Note: currently we don't ever return -1, but might once the SAMMY restrictions on order are lifted + + } + + /** + * Get the first fission channel. + * If there is no fission channel, return -1. + * + * @return the first fission channel + */ + int getFirstFissionChannel() const{ + // In SAMMY the second channel (and the third width) is the first fission channel + return 1; + // Note: currently we don't ever return -1, but might once the SAMMY restrictions on order are lifted + } + + /** + * Get the second fission channel. + * If there is no fission channel, return -1. + * + * @return the first fission channel + */ + int getSecondFissionChannel() const{ + // In SAMMY the third channel (and the fourth width) is the second fission channel + return 2; + // Note: currently we don't ever return -1, but might once the SAMMY restrictions on order are lifted + } + /** * Get the spin group object tor this info * @param resInfo the backing ResonanceInfo object @@ -246,23 +326,7 @@ namespace sammy{ void setGFactor(double g){ gFactor = g; } - - /** - * Get the bound for this spin group - * @return the bound for this spin group - */ - double getBound() const{ - return bound; - } - - /** - * Set the bound for this spin group - * @param b the bound for this spin group - */ - void setBound(double b){ - bound = b; - } - + /** * If gamma width are linked, the index into miscellaneous parameters * that gives the value otherwise less than zero @@ -308,9 +372,6 @@ namespace sammy{ /** THe gFactor for this spin group */ double gFactor; - /** The bound for this spin group */ - double bound; - /** If gamma width are linked, the index into miscellaneous parameters that gives the value */ int gammaWidthMiscParIndex; }; diff --git a/sammy/src/endf/interface/cix/SammySpinGroupInfo.cpp2f.xml b/sammy/src/endf/interface/cix/SammySpinGroupInfo.cpp2f.xml index c7eda9eeb287f1b0131fd72e6c2941b9de77c7cd..3424070d628aab3ae07dede74f973e991142cee9 100644 --- a/sammy/src/endf/interface/cix/SammySpinGroupInfo.cpp2f.xml +++ b/sammy/src/endf/interface/cix/SammySpinGroupInfo.cpp2f.xml @@ -48,17 +48,22 @@ <param name="g" type="double"/> </method> <method name="getGFactor" return_type="double"/> - - <method name="setBound"> - <param name="b" type="double"/> - </method> - <method name="getBound" return_type="double"/> - + <method name="getChannelInfo" return_type="SammyChannelInfo *"> <param name="index" type="int" offset="-1"/> </method> <method name="getNumChannels" return_type="int"/> - + + <method name="getAllChannels" return_type="int"/> + <method name="getNumResPar" return_type="int"/> + <method name="getGammaWidthIndex" return_type="int"/> + <method name="getElasticChannel" return_type="int"/> + <method name="getFirstFissionChannel" return_type="int"/> + <method name="getSecondFissionChannel" return_type="int"/> + <method name="getWidthForChannel" return_type="int"> + <param name="channel" type="int" offset="-1"/> + </method> + <method name="transferData"> <param name="info" type="SammySpinGroupInfo"/> </method> diff --git a/sammy/src/endf/interface/cpp/SammySpinGroupInfoInterface.cpp b/sammy/src/endf/interface/cpp/SammySpinGroupInfoInterface.cpp index 8135bf0c0c9ea6904fcbeb17ff95d9286942914c..d7abe1b86af3b43aea502f0235c9583bf5cc9501 100644 --- a/sammy/src/endf/interface/cpp/SammySpinGroupInfoInterface.cpp +++ b/sammy/src/endf/interface/cpp/SammySpinGroupInfoInterface.cpp @@ -2,7 +2,7 @@ * This file has been dynamically generated by Class Interface Xml (CIX) * DO NOT MODIFY THIS FILE -- CHANGES WILL BE OVERWRITTEN UPON REGENERATION * If changes need to occur, modify the appropriate CIX xml file -* Date Generated: Fri Nov 08 10:09:41 EST 2019 +* Date Generated: Mon Mar 23 09:58:11 EDT 2020 * If any issues are experiences with this generated file that cannot be fixed * with adjustment of the CIX xml file, please contact Robert A. Lefebvre, raq@ornl.gov */ @@ -99,24 +99,49 @@ double SammySpinGroupInfo_getGFactor(void * SammySpinGroupInfo_ptr) return ((SammySpinGroupInfo*)SammySpinGroupInfo_ptr)->getGFactor(); } -void SammySpinGroupInfo_setBound(void * SammySpinGroupInfo_ptr,double * b) +void* SammySpinGroupInfo_getChannelInfo(void * SammySpinGroupInfo_ptr,int * index) { - ((SammySpinGroupInfo*)SammySpinGroupInfo_ptr)->setBound(*b); + return (void*)((SammySpinGroupInfo*)SammySpinGroupInfo_ptr)->getChannelInfo(*index); } -double SammySpinGroupInfo_getBound(void * SammySpinGroupInfo_ptr) +int SammySpinGroupInfo_getNumChannels(void * SammySpinGroupInfo_ptr) { - return ((SammySpinGroupInfo*)SammySpinGroupInfo_ptr)->getBound(); + return ((SammySpinGroupInfo*)SammySpinGroupInfo_ptr)->getNumChannels(); } -void* SammySpinGroupInfo_getChannelInfo(void * SammySpinGroupInfo_ptr,int * index) +int SammySpinGroupInfo_getAllChannels(void * SammySpinGroupInfo_ptr) { - return (void*)((SammySpinGroupInfo*)SammySpinGroupInfo_ptr)->getChannelInfo(*index); + return ((SammySpinGroupInfo*)SammySpinGroupInfo_ptr)->getAllChannels(); } -int SammySpinGroupInfo_getNumChannels(void * SammySpinGroupInfo_ptr) +int SammySpinGroupInfo_getNumResPar(void * SammySpinGroupInfo_ptr) { - return ((SammySpinGroupInfo*)SammySpinGroupInfo_ptr)->getNumChannels(); + return ((SammySpinGroupInfo*)SammySpinGroupInfo_ptr)->getNumResPar(); +} + +int SammySpinGroupInfo_getGammaWidthIndex(void * SammySpinGroupInfo_ptr) +{ + return ((SammySpinGroupInfo*)SammySpinGroupInfo_ptr)->getGammaWidthIndex(); +} + +int SammySpinGroupInfo_getElasticChannel(void * SammySpinGroupInfo_ptr) +{ + return ((SammySpinGroupInfo*)SammySpinGroupInfo_ptr)->getElasticChannel(); +} + +int SammySpinGroupInfo_getFirstFissionChannel(void * SammySpinGroupInfo_ptr) +{ + return ((SammySpinGroupInfo*)SammySpinGroupInfo_ptr)->getFirstFissionChannel(); +} + +int SammySpinGroupInfo_getSecondFissionChannel(void * SammySpinGroupInfo_ptr) +{ + return ((SammySpinGroupInfo*)SammySpinGroupInfo_ptr)->getSecondFissionChannel(); +} + +int SammySpinGroupInfo_getWidthForChannel(void * SammySpinGroupInfo_ptr,int * channel) +{ + return ((SammySpinGroupInfo*)SammySpinGroupInfo_ptr)->getWidthForChannel(*channel); } void SammySpinGroupInfo_transferData(void * SammySpinGroupInfo_ptr,SammySpinGroupInfo * info) diff --git a/sammy/src/endf/interface/cpp/SammySpinGroupInfoInterface.h b/sammy/src/endf/interface/cpp/SammySpinGroupInfoInterface.h index bb1f8294ba9b95d103afa1ebf94ebb3d652d7b14..9509faac8f2afedab136740c66983b3254b54007 100644 --- a/sammy/src/endf/interface/cpp/SammySpinGroupInfoInterface.h +++ b/sammy/src/endf/interface/cpp/SammySpinGroupInfoInterface.h @@ -2,7 +2,7 @@ * This file has been dynamically generated by Class Interface Xml (CIX) * DO NOT MODIFY THIS FILE -- CHANGES WILL BE OVERWRITTEN UPON REGENERATION * If changes need to occur, modify the appropriate CIX xml file -* Date Generated: Fri Nov 08 10:09:41 EST 2019 +* Date Generated: Mon Mar 23 09:58:11 EDT 2020 * If any issues are experiences with this generated file that cannot be fixed * with adjustment of the CIX xml file, please contact Robert A. Lefebvre, raq@ornl.gov */ @@ -31,10 +31,15 @@ void SammySpinGroupInfo_setNumEntryChannels(void * SammySpinGroupInfo_ptr,int * int SammySpinGroupInfo_getNumEntryChannels(void * SammySpinGroupInfo_ptr); void SammySpinGroupInfo_setGFactor(void * SammySpinGroupInfo_ptr,double * g); double SammySpinGroupInfo_getGFactor(void * SammySpinGroupInfo_ptr); -void SammySpinGroupInfo_setBound(void * SammySpinGroupInfo_ptr,double * b); -double SammySpinGroupInfo_getBound(void * SammySpinGroupInfo_ptr); void* SammySpinGroupInfo_getChannelInfo(void * SammySpinGroupInfo_ptr,int * index); int SammySpinGroupInfo_getNumChannels(void * SammySpinGroupInfo_ptr); +int SammySpinGroupInfo_getAllChannels(void * SammySpinGroupInfo_ptr); +int SammySpinGroupInfo_getNumResPar(void * SammySpinGroupInfo_ptr); +int SammySpinGroupInfo_getGammaWidthIndex(void * SammySpinGroupInfo_ptr); +int SammySpinGroupInfo_getElasticChannel(void * SammySpinGroupInfo_ptr); +int SammySpinGroupInfo_getFirstFissionChannel(void * SammySpinGroupInfo_ptr); +int SammySpinGroupInfo_getSecondFissionChannel(void * SammySpinGroupInfo_ptr); +int SammySpinGroupInfo_getWidthForChannel(void * SammySpinGroupInfo_ptr,int * channel); void SammySpinGroupInfo_transferData(void * SammySpinGroupInfo_ptr,SammySpinGroupInfo * info); void SammySpinGroupInfo_setGammWidthParIndex(void * SammySpinGroupInfo_ptr,int * index); int SammySpinGroupInfo_getGammWidthParIndex(void * SammySpinGroupInfo_ptr); diff --git a/sammy/src/endf/interface/fortran/SammySpinGroupInfo_I.f90 b/sammy/src/endf/interface/fortran/SammySpinGroupInfo_I.f90 index 55584926674e7c0ccc114f3c70943ca5152240d1..5b82f29d00b8b2aed2b9a18a01c49374e133e624 100644 --- a/sammy/src/endf/interface/fortran/SammySpinGroupInfo_I.f90 +++ b/sammy/src/endf/interface/fortran/SammySpinGroupInfo_I.f90 @@ -2,7 +2,7 @@ !! This file has been dynamically generated by Class Interface Xml (CIX) !! DO NOT MODIFY THIS FILE -- CHANGES WILL BE OVERWRITTEN UPON REGENERATION !! If changes need to occur, modify the appropriate CIX xml file -!! Date Generated: Fri Nov 08 10:09:41 EST 2019 +!! Date Generated: Mon Mar 23 09:58:11 EDT 2020 !! If any issues are experiences with this generated file that cannot be fixed !! with adjustment of the CIX xml file, please contact Robert A. Lefebvre, raq@ornl.gov !!/ @@ -108,27 +108,52 @@ real(C_DOUBLE) function f_SammySpinGroupInfo_getGFactor(SammySpinGroupInfo_ptr ) implicit none type(C_PTR), value :: SammySpinGroupInfo_ptr; end function -subroutine f_SammySpinGroupInfo_setBound(SammySpinGroupInfo_ptr, b ) BIND(C,name="SammySpinGroupInfo_setBound") +type(C_PTR) function f_SammySpinGroupInfo_getChannelInfo(SammySpinGroupInfo_ptr, index ) BIND(C,name="SammySpinGroupInfo_getChannelInfo") use,intrinsic :: ISO_C_BINDING implicit none type(C_PTR), value :: SammySpinGroupInfo_ptr; - real(C_DOUBLE) :: b; -end subroutine -real(C_DOUBLE) function f_SammySpinGroupInfo_getBound(SammySpinGroupInfo_ptr ) BIND(C,name="SammySpinGroupInfo_getBound") + integer(C_INT) :: index; +end function +integer(C_INT) function f_SammySpinGroupInfo_getNumChannels(SammySpinGroupInfo_ptr ) BIND(C,name="SammySpinGroupInfo_getNumChannels") use,intrinsic :: ISO_C_BINDING implicit none type(C_PTR), value :: SammySpinGroupInfo_ptr; end function -type(C_PTR) function f_SammySpinGroupInfo_getChannelInfo(SammySpinGroupInfo_ptr, index ) BIND(C,name="SammySpinGroupInfo_getChannelInfo") +integer(C_INT) function f_SammySpinGroupInfo_getAllChannels(SammySpinGroupInfo_ptr ) BIND(C,name="SammySpinGroupInfo_getAllChannels") use,intrinsic :: ISO_C_BINDING implicit none type(C_PTR), value :: SammySpinGroupInfo_ptr; - integer(C_INT) :: index; end function -integer(C_INT) function f_SammySpinGroupInfo_getNumChannels(SammySpinGroupInfo_ptr ) BIND(C,name="SammySpinGroupInfo_getNumChannels") +integer(C_INT) function f_SammySpinGroupInfo_getNumResPar(SammySpinGroupInfo_ptr ) BIND(C,name="SammySpinGroupInfo_getNumResPar") + use,intrinsic :: ISO_C_BINDING + implicit none + type(C_PTR), value :: SammySpinGroupInfo_ptr; +end function +integer(C_INT) function f_SammySpinGroupInfo_getGammaWidthIndex(SammySpinGroupInfo_ptr ) BIND(C,name="SammySpinGroupInfo_getGammaWidthIndex") + use,intrinsic :: ISO_C_BINDING + implicit none + type(C_PTR), value :: SammySpinGroupInfo_ptr; +end function +integer(C_INT) function f_SammySpinGroupInfo_getElasticChannel(SammySpinGroupInfo_ptr ) BIND(C,name="SammySpinGroupInfo_getElasticChannel") + use,intrinsic :: ISO_C_BINDING + implicit none + type(C_PTR), value :: SammySpinGroupInfo_ptr; +end function +integer(C_INT) function f_SammySpinGroupInfo_getFirstFissionChannel(SammySpinGroupInfo_ptr ) BIND(C,name="SammySpinGroupInfo_getFirstFissionChannel") + use,intrinsic :: ISO_C_BINDING + implicit none + type(C_PTR), value :: SammySpinGroupInfo_ptr; +end function +integer(C_INT) function f_SammySpinGroupInfo_getSecondFissionChannel(SammySpinGroupInfo_ptr ) BIND(C,name="SammySpinGroupInfo_getSecondFissionChannel") + use,intrinsic :: ISO_C_BINDING + implicit none + type(C_PTR), value :: SammySpinGroupInfo_ptr; +end function +integer(C_INT) function f_SammySpinGroupInfo_getWidthForChannel(SammySpinGroupInfo_ptr, channel ) BIND(C,name="SammySpinGroupInfo_getWidthForChannel") use,intrinsic :: ISO_C_BINDING implicit none type(C_PTR), value :: SammySpinGroupInfo_ptr; + integer(C_INT) :: channel; end function subroutine f_SammySpinGroupInfo_transferData(SammySpinGroupInfo_ptr, info ) BIND(C,name="SammySpinGroupInfo_transferData") use,intrinsic :: ISO_C_BINDING diff --git a/sammy/src/endf/interface/fortran/SammySpinGroupInfo_M.f90 b/sammy/src/endf/interface/fortran/SammySpinGroupInfo_M.f90 index 8177b2653ef59b9c65947e5ff08d6bbc74bad8ce..6a99a718859a725b0627b171b4af2d851d50eab9 100644 --- a/sammy/src/endf/interface/fortran/SammySpinGroupInfo_M.f90 +++ b/sammy/src/endf/interface/fortran/SammySpinGroupInfo_M.f90 @@ -2,7 +2,7 @@ !! This file has been dynamically generated by Class Interface Xml (CIX) !! DO NOT MODIFY THIS FILE -- CHANGES WILL BE OVERWRITTEN UPON REGENERATION !! If changes need to occur, modify the appropriate CIX xml file -!! Date Generated: Fri Nov 08 10:09:41 EST 2019 +!! Date Generated: Mon Mar 23 09:58:11 EDT 2020 !! If any issues are experiences with this generated file that cannot be fixed !! with adjustment of the CIX xml file, please contact Robert A. Lefebvre, raq@ornl.gov !!/ @@ -31,10 +31,15 @@ type SammySpinGroupInfo procedure, pass(this) :: getNumEntryChannels => SammySpinGroupInfo_getNumEntryChannels procedure, pass(this) :: setGFactor => SammySpinGroupInfo_setGFactor procedure, pass(this) :: getGFactor => SammySpinGroupInfo_getGFactor - procedure, pass(this) :: setBound => SammySpinGroupInfo_setBound - procedure, pass(this) :: getBound => SammySpinGroupInfo_getBound procedure, pass(this) :: getChannelInfo => SammySpinGroupInfo_getChannelInfo procedure, pass(this) :: getNumChannels => SammySpinGroupInfo_getNumChannels + procedure, pass(this) :: getAllChannels => SammySpinGroupInfo_getAllChannels + procedure, pass(this) :: getNumResPar => SammySpinGroupInfo_getNumResPar + procedure, pass(this) :: getGammaWidthIndex => SammySpinGroupInfo_getGammaWidthIndex + procedure, pass(this) :: getElasticChannel => SammySpinGroupInfo_getElasticChannel + procedure, pass(this) :: getFirstFissionChannel => SammySpinGroupInfo_getFirstFissionChannel + procedure, pass(this) :: getSecondFissionChannel => SammySpinGroupInfo_getSecondFissionChannel + procedure, pass(this) :: getWidthForChannel => SammySpinGroupInfo_getWidthForChannel procedure, pass(this) :: transferData => SammySpinGroupInfo_transferData procedure, pass(this) :: setGammWidthParIndex => SammySpinGroupInfo_setGammWidthParIndex procedure, pass(this) :: getGammWidthParIndex => SammySpinGroupInfo_getGammWidthParIndex @@ -64,7 +69,7 @@ function SammySpinGroupInfo_getResonanceIndex(this) result(result2Return) implicit none class(SammySpinGroupInfo)::this integer(C_INT):: result2Return - result2Return=f_SammySpinGroupInfo_getResonanceIndex(this%instance_ptr) + result2Return=f_SammySpinGroupInfo_getResonanceIndex(this%instance_ptr) + 1 end function subroutine SammySpinGroupInfo_setSpinGroupIndex(this, index) implicit none @@ -150,18 +155,6 @@ function SammySpinGroupInfo_getGFactor(this) result(result2Return) real(C_DOUBLE):: result2Return result2Return=f_SammySpinGroupInfo_getGFactor(this%instance_ptr) end function -subroutine SammySpinGroupInfo_setBound(this, b) - implicit none - class(SammySpinGroupInfo)::this - real(C_DOUBLE)::b - call f_SammySpinGroupInfo_setBound(this%instance_ptr, b) -end subroutine -function SammySpinGroupInfo_getBound(this) result(result2Return) - implicit none - class(SammySpinGroupInfo)::this - real(C_DOUBLE):: result2Return - result2Return=f_SammySpinGroupInfo_getBound(this%instance_ptr) -end function subroutine SammySpinGroupInfo_getChannelInfo(this, object_ptr, index) implicit none class(SammySpinGroupInfo)::this @@ -175,6 +168,49 @@ function SammySpinGroupInfo_getNumChannels(this) result(result2Return) integer(C_INT):: result2Return result2Return=f_SammySpinGroupInfo_getNumChannels(this%instance_ptr) end function +function SammySpinGroupInfo_getAllChannels(this) result(result2Return) + implicit none + class(SammySpinGroupInfo)::this + integer(C_INT):: result2Return + result2Return=f_SammySpinGroupInfo_getAllChannels(this%instance_ptr) +end function +function SammySpinGroupInfo_getNumResPar(this) result(result2Return) + implicit none + class(SammySpinGroupInfo)::this + integer(C_INT):: result2Return + result2Return=f_SammySpinGroupInfo_getNumResPar(this%instance_ptr) +end function +function SammySpinGroupInfo_getGammaWidthIndex(this) result(result2Return) + implicit none + class(SammySpinGroupInfo)::this + integer(C_INT):: result2Return + result2Return=f_SammySpinGroupInfo_getGammaWidthIndex(this%instance_ptr) + 1 +end function +function SammySpinGroupInfo_getElasticChannel(this) result(result2Return) + implicit none + class(SammySpinGroupInfo)::this + integer(C_INT):: result2Return + result2Return=f_SammySpinGroupInfo_getElasticChannel(this%instance_ptr) + 1 +end function +function SammySpinGroupInfo_getFirstFissionChannel(this) result(result2Return) + implicit none + class(SammySpinGroupInfo)::this + integer(C_INT):: result2Return + result2Return=f_SammySpinGroupInfo_getFirstFissionChannel(this%instance_ptr) + 1 +end function +function SammySpinGroupInfo_getSecondFissionChannel(this) result(result2Return) + implicit none + class(SammySpinGroupInfo)::this + integer(C_INT):: result2Return + result2Return=f_SammySpinGroupInfo_getSecondFissionChannel(this%instance_ptr) + 1 +end function +function SammySpinGroupInfo_getWidthForChannel(this, channel) result(result2Return) + implicit none + class(SammySpinGroupInfo)::this + integer(C_INT)::channel + integer(C_INT):: result2Return + result2Return=f_SammySpinGroupInfo_getWidthForChannel(this%instance_ptr, channel-1) + 1 +end function subroutine SammySpinGroupInfo_transferData(this, info) implicit none class(SammySpinGroupInfo)::this diff --git a/sammy/src/fin/mfin0.f b/sammy/src/fin/mfin0.f index 11e2c3c4950c1c7387cc6ba5144140cb416d0c52..18c19f5360bd1961090baa3e04745cb15d21a94f 100644 --- a/sammy/src/fin/mfin0.f +++ b/sammy/src/fin/mfin0.f @@ -75,7 +75,7 @@ C ### two ### Itempz = Idimen (Kkkkkk, 1, 'Kkkkkk, 1') Itempr = Idimen (K4, 1, 'Tempr K4, 1') CALL Convrt ( A_Iprbrd , I_Iflbrd , A_Isiabn , - * I_Intot , I_Ilpent , I_Ilspin , A_Iechan , I_Ixclud , + * A_Iechan , * A_Ipreff , I_Ifleff , A_Iprtru , I_Ifltru , I_Iigrra , * I_Ifliso , A_Idpiso , A_Idsiso , * A_Iprdet , I_Ifldet , A_Iprext , I_Iflext , @@ -89,7 +89,7 @@ C ### two ### C *** Routine Convrt converts from U-parameters to physical parameters C C *** update Zkte and Zkfe - CALL Updrad (I_Intot , I_Iigrra , A_Ipreff , A_Iprtru , + CALL Updrad (I_Iigrra , A_Ipreff , A_Iprtru , * A_Izke , A_Izkte , A_Izkfe , I_Ifzkte , I_Ifzkfe ) C C @@ -215,9 +215,7 @@ C - - - - - - - - - - - - - - - - - - - - - - - - - -> C Iux = Idimen (Nres*Ntotc2, 1,'Ux , Nres*Ntotc2, 1') CALL Oldord ( A_Iprbrd , I_Iflbrd , A_Idebrd , - * I_Inent , I_Inext , I_Intot , I_Iishif , - * I_Ilpent , I_Ifexcl , I_Ilspin , A_Ichspi , A_Ienbnd , - * I_Ikppai , I_Ixclud , + * I_Ifexcl , * A_Ipreff , I_Ifleff , A_Ideeff , * A_Iprtru , I_Ifltru , A_Idetru , I_Iigrra , * I_Ifliso , A_Ideiso , @@ -380,16 +378,13 @@ C END IF C IF ((Iterat.EQ.Itmax .OR. Ksuppr.EQ.2) .AND. Kreduc.NE.0) THEN - CALL Outred ( A_Igoj , I_Intot , - * I_Ilspin , A_Ichspi , 1) + CALL Outred (1) C IF (Iterat.EQ.Itmax) CALL Outvr (A(Idum3)) END IF C IF ((Iterat.EQ.Itmax .OR. Ksuppr.EQ.2) .AND. Kmlbw.NE.0) THEN - CALL Outmlb( A_Igoj , I_Intot , I_Iishif , - * I_Ilspin , A_Ibound , A_Iechan , - * A_Izeta , 1) + CALL Outmlb(A_Ibound , A_Iechan , A_Izeta , 1) END IF C RETURN diff --git a/sammy/src/fin/mfin1.f b/sammy/src/fin/mfin1.f index 1e233b5e7d946460d28cea3fe8fc2b313f14c355..6ac1590933d93cd7ca6c23b674ca1bbedebbff62 100644 --- a/sammy/src/fin/mfin1.f +++ b/sammy/src/fin/mfin1.f @@ -57,8 +57,8 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Convrt ( Parbrd, Iflbrd, Siabnd, Ntot , - * Lpent , Lspin , Echan , Ixclud, + SUBROUTINE Convrt ( Parbrd, Iflbrd, Siabnd, + * Echan , * Pareff, Ifleff, Partru, Ifltru, Igrrad, * Ifliso, Dopwid, Doswid, * Pardet, Ifldet, Parext, Iflext, @@ -78,8 +78,8 @@ C use namfil_common_m IMPLICIT DOUBLE PRECISION (a-h,o-z) C - DIMENSION Parbrd(*), Iflbrd(*), Siabnd(*), Ntot(*), - * Lpent(Ntotc,*), Lspin(Ntotc,*), Echan(Ntotc,*), Ixclud(*), + DIMENSION Parbrd(*), Iflbrd(*), Siabnd(*), + * Echan(Ntotc,*), * Pareff(*), Ifleff(*), Partru(*), Ifltru(*), Igrrad(Ntotc,*), * Ifliso(*), Dopwid(*), Doswid(*), * Pardet(*), Ifldet(*), @@ -94,8 +94,7 @@ C * Itempx(*), Tempx(*), Tempy(*), Tempz(*), Temprd(Nvpall,*) C C DIMENSION Parbrd(Numbrd), Iflbrd(Numbrd), Ntot(Ngroup), -C * Lpent(Ntotc,Ngroup), Lspin(Ntotc,Ngroup), -C * Echan(Ntotc,Ngroup), Ixclud(Ngroup), +C * Echan(Ntotc,Ngroup), C * Pareff(Numrad), Ifleff(Numrad), C * Partru(Numrad), Ifltru(Numrad), Igrrad(Ntotc,Ngroup), C * Ifliso(Numiso), @@ -121,7 +120,7 @@ C CALL Zero_Array (Tempz, Nvpall) END IF C - CALL Fxcrfn (Iflbrd, Ntot, Pareff, Ifleff, Partru, Ifltru, Igrrad, + CALL Fxcrfn (Iflbrd, Pareff, Ifleff, Partru, Ifltru, Igrrad, * Zke, Zkte, Zkfe, Icrfn) C Ipar = 0 @@ -129,7 +128,7 @@ C Nvp = 0 C IF (Nres.GT.0) THEN - CALL Cnvres (Ntot, Lpent, Lspin, Echan, Ixclud, Igrrad, + CALL Cnvres (Echan, Igrrad, * Polar, Zke, Zkte, Zeta, If_Zkte, Itempx, Tempx, Tempy, * Tempz, Temprd, Icrfn, Ipar) END IF @@ -137,7 +136,7 @@ C IF (Nvp.EQ.Nvpall) RETURN C IF (Nvpext.NE.0) THEN - CALL Cnvext(Ntot, Parext, Iflext, Tempy, Ipar) + CALL Cnvext(Parext, Iflext, Tempy, Ipar) END IF CALL Update (Ipar, Kpar, Nvp, Nfpext, Nvpext) IF (Nvp.EQ.Nvpall) RETURN @@ -225,7 +224,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Fxcrfn (Iflbrd, Ntot, Pareff, Ifleff, Partru, Ifltru, + SUBROUTINE Fxcrfn (Iflbrd, Pareff, Ifleff, Partru, Ifltru, * Igrrad, Zke, Zkte, Zkfe, Icrfn) C use fixedi_m @@ -233,12 +232,15 @@ C use fixedr_m use broad_common_m use EndfData_common_m + use SammyChannelInfo_M + use ResonanceParameterIO_M IMPLICIT DOUBLE PRECISION (a-h,o-z) C - DIMENSION Iflbrd(*), Ntot(*), Pareff(*), Ifleff(*), Partru(*), + type(SammySpinGroupInfo)::spinInfo + DIMENSION Iflbrd(*), Pareff(*), Ifleff(*), Partru(*), * Ifltru(*), Igrrad(Ntotc,*), Zke(Ntotc,*), Zkte(Ntotc,*), * Zkfe(Ntotc,*) -C DIMENSION Iflbrd(Numbrd), Ntot(Ngroup), Pareff(Numrad), +C DIMENSION Iflbrd(Numbrd), Pareff(Numrad), C * Ifleff(Numrad), Partru(Numrad), Ifltru(Numrad), C * Igrrad(Ntotc,Ngroup), Zke(Ntotc,Ngroup), Zkte(Ntotc,Ngroup), C * Zkfe(Ntotc,Ngroup) @@ -253,7 +255,8 @@ C Cycrfn = Cycrfn*val/Crfn Crfn = covData%getUParamValue(Icrfn) DO Ig=1,resParData%getNumSpinGroups() - Ntotig = Ntot(Ig) + call resParData%getSpinGroupInfo(spinInfo, Ig) + Ntotig = spinInfo%getNumChannels() DO M=1,Ntotig Zkte(M,Ig) = Zke(M,Ig)*Crfn Zkfe(M,Ig) = Zke(M,Ig)*Crfn @@ -293,7 +296,8 @@ C END IF END DO DO Ig=1,resParData%getNumSpinGroups() - Ntotig = Ntot(Ig) + call resParData%getSpinGroupInfo(spinInfo, Ig) + Ntotig = spinInfo%getNumChannels() DO M=1,Ntotig Zkte(M,Ig) = Zke(M,Ig)*Partru(Igrrad(M,Ig)) Zkfe(M,Ig) = Zke(M,Ig)*Pareff(Igrrad(M,Ig)) @@ -319,7 +323,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Cnvres (Ntot, Lpent, Lspin, Echan, Ixclud, Igrrad, + SUBROUTINE Cnvres (Echan, Igrrad, * Polar, * Zke, Zkte, Zeta, If_Zkte, Itempx, Tempx, Tempy, Tempz, * Temprd, Icrfn, Ipar) @@ -341,8 +345,12 @@ C C type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance, resonanceRed - DIMENSION Ntot(*), Lpent(Ntotc,*), Lspin(Ntotc,*), - * Echan(Ntotc,*), Ixclud(*), Igrrad(Ntotc,*), + type(SammySpinGroupInfo)::spinInfo + type(SammyChannelInfo)::channelInfo + type(RMatChannelParams)::channel + type(SammyParticlePairInfo)::pairInfo + type(RMatParticlePair)::pair + DIMENSION Echan(Ntotc,*), Igrrad(Ntotc,*), * Polar(2,*), * Zke(Ntotc,*), Zkte(Ntotc,*), Zeta(Ntotc,*), If_Zkte(Ntotc,*), * Itempx(*), Tempx(*), Tempy(*), Tempz(*), @@ -365,8 +373,10 @@ C call resParData%getRedResonance(resonanceRed, resInfo) Igrp = resInfo%getSpinGroupIndex() - Ntotn = Ntot(Igrp) - Ntotn2 = Ntotn + 2 + call resParData%getSpinGroupInfo(spinInfo, Igrp) + Ntotn = spinInfo%getNumChannels() + Ntotn2 = spinInfo%getNumResPar() + iwGam = spinInfo%getGammaWidthIndex() DO M=1,Ntotn2 if (m.eq.1) then IFlr = resInfo%getEnergyFitOption() @@ -398,36 +408,46 @@ C *** sign is correct 4 June 2004 Tempy(Keep) = F*Two*val cq IF (Icrfn.GT.0) Tempz(Keep) = Fz C - ELSE IF (M.EQ.2) THEN + ELSE IF (M.EQ.(iwGam+1)) THEN C *** Gamma_gamma (eliminated capture width) F = Twotho Fz = Zero - call resonanceRed%setWidth(1, val) + call resonanceRed%setWidth(iwGam, val) G2 = val**2 G3 = G2**2 Gga = F*G2 IF (val.LT.Zero) Gga = -Gga - call resonance%setWidth(1, gga) + call resonance%setWidth(iwGam, gga) Tempy(Keep) = F*Two*val cq IF (Icrfn.GT.0) Tempz(Keep) = Fz C - ELSE IF (M.GE.3) THEN + ELSE C *** Gamma_N (Particle widths) M2 = M - 2 + ichan = spinInfo%getWidthForChannel(M2) IF (M2.EQ.1 .OR. Kpolar.NE.1) THEN - call resonanceRed%setWidth(m-1, val) + call resonanceRed%setWidth(ichan, val) P = One Der = Zero - Fz = Zero - IF (resonance%getWidth(m2+1).EQ.Zero) THEN + Fz = Zero + IF (resonance%getWidth(ichan).EQ.Zero) THEN ELSE - IF (Lpent(M2,Igrp).NE.0) THEN + call spinInfo%getChannelInfo(channelInfo, + * M2) + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, + * pairInfo) + IF (pair%getPnt().NE.0) THEN eres = resonance%getEres() Q = dABS(eres-Echan(M2,Igrp)) IF (Q.NE.Zero) THEN Q = dSQRT(Q) Rho = Zkte(M2,Igrp)*Q - Lsp = Lspin(M2,Igrp) + call resParData%getChannel(channel, + * channelInfo) + Lsp = channel%getL() IF (Zeta(M2,Igrp).EQ.Zero) THEN P = Pfd (Rho, Der, Lsp) ELSE @@ -458,19 +478,19 @@ C *** The following line takes care of negative sign for negative Pken END IF F = Twotho*P C - call resonance%setWidth(m2+1,F*val**2) + call resonance%setWidth(ichan,F*val**2) IF (Nvprad.GT.0 .AND. * If_Zkte(M2,Igrp).GT.0) Temprd(Keep, * If_Zkte(M2,Igrp)-Iiirad) = Fz Tempy(Keep) = F*Two*val IF (Jpken.NE.0) THEN Tempx(Keep) = Fx * - * resonance%getWidth(m2+1) + * resonance%getWidth(ichan) END IF IF (Icrfn.GT.0) Tempz(Keep) = Fz - G1 = resonance%getWidth(m2+1) + G1 = resonance%getWidth(ichan) IF (val.LT.Zero) g1 = -g1 - call resonance%setWidth(m2+1,g1) + call resonance%setWidth(ichan,g1) END IF C ELSE @@ -504,8 +524,7 @@ C ************* Here for Polar coordinates END DO C C - CALL Fxgamn (Ntot, Lpent, Lspin, Echan, Ixclud, - * Zkte, Zeta) + CALL Fxgamn (Echan, Zkte, Zeta) C C IF (Icrfn.NE.0) THEN @@ -518,23 +537,31 @@ C *** before do all this ! DO Ires=1,resParData%getNumResonances() call resParData%getResonanceInfo(resInfo, Ires) Igrp = resInfo%getSpinGroupIndex() + call resparData%getSpinGroupInfo(spinInfo, Igrp) IF (resInfo%getIncludeInCalc()) THEN - IF (Ixclud(Igrp).LE.0) THEN + IF (spinInfo%getIncludeInCalc()) THEN call resParData%getResonance(resonance, resInfo) - call resParData%getRedResonance(resonanceRed, resInfo) - Ntotn = Ntot(Igrp) + call resParData%getRedResonance(resonanceRed, resInfo) + Ntotn = spinInfo%getNumChannels() DO M2=1,Ntotn M = M2 + 2 + ichan = spinInfo%getWidthForChannel(M2) ifl = resInfo%getChannelFitOption(m-1) - IF (Ifl.EQ.0 .AND. Lpent(M2,Igrp).NE.0 - * .AND. resonanceRed%getWidth(M2+1).NE.Zero ) THEN + call spinInfo%getChannelInfo(channelInfo, M2) + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, pairInfo) + IF (Ifl.EQ.0 .AND. pair%getPnt().NE.0 + * .AND. resonanceRed%getWidth(ichan).NE.Zero ) THEN P = One eres = resonance%getEres() Q = dABS(eres-Echan(M2,Igrp)) IF (Q.NE.Zero) THEN Q = dSQRT(Q) Rho = Zkte(M2,Igrp)*Q - Lsp = Lspin(M2,Igrp) + call resParData%getChannel(channel, channelInfo) + Lsp = channel%getL() IF (Zeta(M2,Igrp).EQ.Zero) THEN P = Pf (Rho, Lsp) ELSE @@ -548,11 +575,12 @@ C *** before do all this ! END IF F = Twotho*P C keep unvaried Gammas fixed - A = dABS(resonance%getWidth(M2+1)) + A = dABS(resonance%getWidth(ichan)) redWidth = dSQRT(A/F) - IF (resonance%getWidth(M2+1).LT.Zero) redWidth = - * -redWidth - call resonanceRed%setWidth(M2+1, redWidth) + IF (resonance%getWidth(ichan).LT.Zero) then + redWidth = -redWidth + END IF + call resonanceRed%setWidth(ichan, redWidth) END IF END IF END DO @@ -568,8 +596,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Fxgamn (Ntot, Lpent, Lspin, Echan, Ixclud, - * Zkte, Zeta) + SUBROUTINE Fxgamn (Echan, Zkte, Zeta) C C *** PURPOSE -- Fix up the particle widths to correspond to the C *** updated energies (cuz is reduced widths that are @@ -587,11 +614,15 @@ C C type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance,resonanceRed - DIMENSION Ntot(*), Lpent(Ntotc,*), Lspin(Ntotc,*), Echan(Ntotc,*), - * Ixclud(*), Zkte(Ntotc,*), Zeta(Ntotc,*) -C -C DIMENSION Ntot(Ngroup), Lpent(Ntotc,Ngroup), -C * Lspin(Ntotc,Ngroup), Echan(Ntotc,Ngroup), Ixclud(Ngroup), + type(SammySpinGroupInfo)::spinInfo + type(SammyParticlePairInfo)::pairInfo + type(RMatParticlePair)::pair + type(RMatChannelParams)::channel + type(SammyChannelInfo)::channelInfo + DIMENSION Echan(Ntotc,*), Zkte(Ntotc,*), Zeta(Ntotc,*) +C +C DIMENSION +C * Echan(Ntotc,Ngroup), C * Zkte(Ntotc,Ngroup), Zeta(Ntotc,Ngroup) C DATA Zero /0.0d0/, One /1.0d0/, Twotho /2000.0d0/ @@ -605,8 +636,10 @@ C call resParData%getResonance(resonance, resInfo) call resParData%getRedResonance(resonanceRed, resInfo) Igrp = resInfo%getSpinGroupIndex() - Ntotn = Ntot(Igrp) - Ntotn2 = Ntotn + 2 + call resparData%getSpinGroupInfo(spinInfo, Igrp) + Ntotn = spinInfo%getNumChannels() + Ntotn2 = spinInfo%getNumResPar() + iwGam = spinInfo%getGammaWidthIndex() DO M=1,Ntotn2 if(m.eq.1) then ifl = resInfo%getEnergyFitOption() @@ -615,7 +648,7 @@ C end if IF (Ifl.NE.0) THEN Iiipar = Iiipar + 1 - IF (Ixclud(Igrp).EQ.0 .AND. + IF (spinInfo%getIncludeInCalc() .AND. * .not.covData%isPupedParameter(Iiipar)) THEN IF (M.LE.1) THEN C *** IF (varied parameter is resonance energy) THEN @@ -623,12 +656,19 @@ C C *** DO loop over Gamma_N (particle widths) DO M2=1,Ntotn P = One - IF (Lpent(M2,Igrp).NE.0 .AND. - * resonanceRed%getWidth(M2+1).NE.Zero) THEN + call spinInfo%getChannelInfo(channelInfo, M2) + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, pairInfo) + ichan = spinInfo%getWidthForChannel(M2) + IF (pair%getPnt().NE.0 .AND. + * resonanceRed%getWidth(ichan).NE.Zero) THEN eres = resonance%getEres() Q = dSQRT ( dABS ( eres-Echan(M2,Igrp) ) ) Rho = Zkte(M2,Igrp)*Q - Lsp = Lspin(M2,Igrp) + call resParData%getChannel(channel, channelInfo) + Lsp = channel%getL() C IF (Zeta(M2,Igrp).EQ.Zero) THEN P = Pf (Rho, Lsp) @@ -642,10 +682,10 @@ C & Sinphi, Cosphi, Dphi) END IF C - width = resonanceRed%getWidth(m2+1) + width = resonanceRed%getWidth(ichan) G1 = Twotho*P*width**2 IF (width.LT.Zero) g1 = -g1 - call resonance%setWidth(m2+1, G1) + call resonance%setWidth(ichan, G1) END IF END DO END IF @@ -661,7 +701,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Cnvext (Ntot, Parext, Iflext, Tempy, Ipar) + SUBROUTINE Cnvext (Parext, Iflext, Tempy, Ipar) C C *** PURPOSE --CONVERT FROM NEW U-PARAMETERS TO PHYSICAL C *** R-EXTERNAL PARAMETERS @@ -671,19 +711,23 @@ C use fixedr_m use broad_common_m use EndfData_common_m + use SammyResonanceInfo_M + use RMatResonanceParam_M IMPLICIT DOUBLE PRECISION (a-h,o-z) C - DIMENSION Ntot(*), Parext(Nrext,Ntotc,*), + type(SammySpinGroupInfo)::spinInfo + DIMENSION Parext(Nrext,Ntotc,*), * Iflext(Nrext,Ntotc,*), Tempy(*) C -C DIMENSION Ntot(Ngroup), Parext(Nrext,Ntotc,Ngroup), +C DIMENSION Parext(Nrext,Ntotc,Ngroup), C * Iflext(Nrext,Ntotc,Ngroup), Tempy(Nvpall) C DATA One /1.0d0/, Two /2.0d0/ C C DO Igrp=1,resParData%getNumSpinGroups() - Ntotn = Ntot(Igrp) + call resparData%getSpinGroupInfo(spinInfo, Igrp) + Ntotn = spinInfo%getNumChannels() DO I=1,Ntotn IF (Iflext(1,I,Igrp).GE.0) THEN DO J=1,Nrext @@ -960,6 +1004,8 @@ C Parmsc(I) = val Tempy(Ipar) = One DO J=1,resParData%getNumSpinGroups() + call resParData%getSpinGroupInfo(spinInfo, J) + iwGam = spinInfo%getGammaWidthIndex() IF (Iradms(J).EQ.I) THEN JGR = J Ugga = 2.0d+3 * val**2 @@ -977,8 +1023,8 @@ C * resInfo) call resParData%getRedResonance(resonanceRed, * resInfo) - call resonance%setWidth(1,Ugga) - call resonanceRed%setWidth(1,Uu) + call resonance%setWidth(iwGam,Ugga) + call resonanceRed%setWidth(iwGam,Uu) END IF END DO GO TO 40 @@ -1155,16 +1201,19 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Updrad (Ntot, Igrrad, Pareff, Partru, Zke, Zkte, Zkfe, + SUBROUTINE Updrad (Igrrad, Pareff, Partru, Zke, Zkte, Zkfe, * If_Zkte, If_Zkfe) C use fixedi_m use ifwrit_m use fixedr_m use EndfData_common_m + use SammyRMatrixParameters_M + use SammySpinGroupInfo_M IMPLICIT DOUBLE PRECISION (a-h,o-z) C - DIMENSION Ntot(*), Igrrad(Ntotc,*), Pareff(*), Partru(*), + type(SammySpinGroupInfo)::spinInfo + DIMENSION Igrrad(Ntotc,*), Pareff(*), Partru(*), * Zkte(Ntotc,Ngroup), Zkfe(Ntotc,Ngroup), Zke(Ntotc,Ngroup), * If_Zkte(Ntotc,Ngroup), If_Zkfe(Ntotc,Ngroup) C @@ -1176,7 +1225,8 @@ c *** with iso C C *** here Nvpiso.gt.0 and Nvprad.gt.0 DO N=1,resParData%getNumSpinGroups() - Ntotnn = Ntot(N) + call resParData%getSpinGroupInfo(spinInfo, N) + Ntotnn = spinInfo%getNumChannels() DO I=1,Ntotnn Ig = Igrrad(I,N) IF (If_Zkte(I,N).NE.0) Zkte(I,N) = Zke(I,N)*Partru(Ig) @@ -1192,7 +1242,8 @@ C C *** Here only Crfn is varied At = Crfn DO N=1,resParData%getNumSpinGroups() - Ntotnn = Ntot(N) + call resParData%getSpinGroupInfo(spinInfo, N) + Ntotnn = spinInfo%getNumChannels() DO I=1,Ntotnn Zkte(I,N) = Zke(I,N)*At Zkfe(I,N) = Zke(I,N)*At @@ -1206,7 +1257,8 @@ C ELSE IF (Nvpiso.EQ.0) THEN IF (Nvprad.GT.0) THEN C *** here Numiso.EQ.0 but Nvprad.GT.0 DO N=1,resParData%getNumSpinGroups() - Ntotnn = Ntot(N) + call resParData%getSpinGroupInfo(spinInfo, N) + Ntotnn = spinInfo%getNumChannels() DO I=1,Ntotnn Ig = Igrrad(I,N) IF (If_Zkte(I,N).NE.0) Zkte(I,N) = Zke(I,N)*Partru(Ig) @@ -1222,7 +1274,8 @@ C C *** Here only Crfn is varied At = Crfn DO N=1,resParData%getNumSpinGroups() - Ntotnn = Ntot(N) + call resParData%getSpinGroupInfo(spinInfo, N) + Ntotnn =spinInfo%getNumChannels() DO I=1,Ntotnn Zkte(I,N) = Zke(I,N)*At Zkfe(I,N) = Zke(I,N)*At diff --git a/sammy/src/fin/mfin3.f b/sammy/src/fin/mfin3.f index c2ff9cf34315e9d22e449e55eebcde9ac1e0acfd..352b4f59f4df94e7be3cefb5be55d4a3322212cf 100644 --- a/sammy/src/fin/mfin3.f +++ b/sammy/src/fin/mfin3.f @@ -3,9 +3,7 @@ C C -------------------------------------------------------------- C SUBROUTINE Oldord (Parbrd, Iflbrd, Delbrd, - * Nent, Next, Ntot, - * Ishift, Lpent, If_Excl, Lspin, Chspin, Enbnd, Kppair, - * Ixclud, + * If_Excl, * Pareff, Ifleff, Deleff, Partru, Ifltru, Deltru, Igrrad, * Ifliso, Deliso, * Pardet, Ifldet, Deldet, Igrdet, Parext, Iflext, @@ -36,9 +34,7 @@ C type(SammyRMatrixParameters)::relevantData DIMENSION Parbrd(*), Iflbrd(*), Delbrd(*), - * Nent(*), Next(*), Ntot(*), Ishift(Ntotc,*), Lpent (Ntotc,*), - * If_Excl(Ntotc,*), Lspin (Ntotc,*), Chspin(Ntotc,*), - * Enbnd (Ntotc,*), Kppair(Ntotc,*), Ixclud(*), + * If_Excl(Ntotc,*), * Pareff(*), Ifleff(*), Deleff(*), * Partru(*), Ifltru(*), Deltru(*), Igrrad(Ntotc,*), * Ifliso(*), Deliso(*), @@ -88,13 +84,11 @@ C C IF (Kquant.EQ.1 .OR. Kquanx.GT.0) THEN CALL Wr_Pp_Key_Word () - CALL Wr_Spin_Group (Nent, Next, Ntot, - * If_Excl, Lspin, Chspin, Enbnd, Ixclud, Kppair) + CALL Wr_Spin_Group (If_Excl) END IF C IF (resParData%getNumResonances().GT.0) THEN - CALL Ordres (Ntot, Lspin, - * Iflpol, Ddcov, + CALL Ordres (Iflpol, Ddcov, * Uncxxx, Ratio, If_Pub, * relevantData, resetFitFlags) ELSE @@ -111,7 +105,7 @@ C C IF (Numext.NE.0) CALL Ordext (Parext, Iflext) C - IF (Numrad.NE.0) CALL Ordrad (Ntot, Pareff, Ifleff, Deleff, + IF (Numrad.NE.0) CALL Ordrad (Pareff, Ifleff, Deleff, * Partru, Ifltru, Deltru, Igrrad) C IF (Numiso.NE.0 .AND. Kipiso.EQ.1) CALL Ordiso (Ifliso, @@ -220,8 +214,7 @@ C C C ---------------------------------------------------------------- C - SUBROUTINE Ordres ( Ntot, Lspin, - * Iflpol, Ddcov, + SUBROUTINE Ordres ( Iflpol, Ddcov, * Uncxxx, Ratio, * If_Pub, relevantData, resetFitFlags) C @@ -239,6 +232,8 @@ C CHARACTER*6 Ww, Uu type(SammySpinGroupInfo)::spinInfo type(RMatSpinGroup)::spinGroup + type(SammyChannelInfo)::channelInfo + type(RMatChannelParams)::channel type(SammyResonanceInfo)::resInfo,resRelInfo type(RMatResonance)::resonance, resonanceRel, resonanceRed logical::resetFitFlags @@ -247,8 +242,7 @@ C type(SammyRMatrixParameters)::relevantData type(ResonanceCovariance)::physCov integer,allocatable::ifits(:) - DIMENSION Ntot(*), Lspin(Ntotc,*), - * Iflpol(2,*), + DIMENSION Iflpol(2,*), * Ddcov(*), Uncxxx(Ntotc2,*), Ratio(*) C C @@ -284,7 +278,8 @@ C insteat of number of varied parameter END IF Ig = resInfo%getSpinGroupIndex() - N2 = Ntot(Ig) + 2 + call resParData%getSpinGroupInfo(spinInfo, Ig) + N2 = spinInfo%getNumChannels() + 2 if( allocated(ifits).and.size(ifits).lt.2*N2) then deallocate(ifits) @@ -344,9 +339,9 @@ C insteat of number of varied parameter if (ig.lt.0) ig = -1 * ig - CALL Reswrt (resonance%getEres(), resonance, Ifits(1:N2), - * IgroupW, Ddcov(N), Ntot(Ig), Kdecpl, Kenunc, Kkkgrp, 38) + * IgroupW, Ddcov(N), spinInfo%getNumChannels(), + * Kdecpl, Kenunc, Kkkgrp, 38) C repeat for reduced resonance parameters call resParData%getRedResonance(resonanceRed, resInfo) PSQR = resonanceRed%getEres() @@ -354,9 +349,9 @@ C repeat for reduced resonance parameters PSQR = dSQRT(resonanceRed%getEres()) ELSE PSQR = -dSQRT(-resonanceRed%getEres()) - END IF + END IF CALL Reswrt (PSQR, resonanceRed, Ifits, - * IgroupW, Ddcov(N), Ntot(Ig), Kdecpl, + * IgroupW, Ddcov(N), spinInfo%getNumChannels(), Kdecpl, * Kenunc, Kkkgrp, 36) IF (Ifrel.EQ.1) then @@ -366,20 +361,23 @@ C repeat for reduced resonance parameters call relevantData%getResonanceInfoByInput(resRelInfo, Nn, N) call relevantData%getResonance(resonanceRel, resRelInfo) CALL Reswrt (resonanceRel%getEres(),resonanceRel, - * Ifits(N2+1:2*N2), - * IgroupW, Ddcov(N), Ntot(Ig), Kdecpl, Kenunc, + * Ifits(N2+1:2*N2), IgroupW, Ddcov(N), + * spinInfo%getNumChannels(), Kdecpl, Kenunc, * Kkkgrp, 40) end if -C write Fiele 37 data +C write File 37 data IF (Ifk.GT.0) THEN call resParData%getSpinGroupInfo(spinInfo, Ig) - call resParData%getSpinGroup(spinGroup, spinInfo) + call resParData%getSpinGroup(spinGroup, spinInfo) + iela = spinInfo%getElasticChannel() + call spinInfo%getChannelInfo(channelInfo, iela) + call resParData%getChannel(channel, channelInfo) Write (37,10300) spinGroup%getJ(), - * Tab, Lspin(1,Ig), Tab, resonance%getEres(), + * Tab, channel%getL(), Tab, resonance%getEres(), * Tab, Uncxxx(1,N), Tab, resonance%getWidth(1), * Tab, Uncxxx(2,N), (Tab, resonance%getWidth(1+1), - * Tab, Uncxxx(I+2,N), I=1,Ntot(Ig)) + * Tab, Uncxxx(I+2,N), I=1,spinInfo%getNumChannels()) 10300 FORMAT (F4.1, A1, I1, A1, 1PG20.12, A1, G20.12, * ( 20 (A1, G14.6) ) ) end if @@ -707,10 +705,22 @@ C WRITE(36,10200) pair%getZa(1),pair%getZa(2),pair%getPnt(),icalc 10200 FORMAT (5X, 'Za=', I2, 8X, 'Zb=',I2, 9X, 'Pent=', I1, * 5X, 'Shift=',I1) + Em1 = pair%getMass(1) + Em2 = pair%getMass(2) +C +C Since the masses in the pair were fixed in +C Fxradi in mold1.f to get the correct reduced mass +C we reset the values printed in the parameter files +C for fission reactions (indicated by pair%getPnt() == 0 +C + if ( pair%getPnt().eq.0) then + Em1 = 0.0d0 + Em2 = 0.0d0 + end if WRITE (38,10300) pair%getIa(1), pair%getIa(2), - * pair%getMass(1), pair%getMass(2) + * Em1, Em2 WRITE (36,10300) pair%getIa(1), pair%getIa(2), - * pair%getMass(1), pair%getMass(2) + * Em1, Em2 10300 FORMAT (5X, 'Sa=', F5.1, 5X, 'Sb=', F6.1, 5x, 'Ma=', F15.8, * 5X, 'Mb=', F15.8) IF (pair%getQ().NE.Zero) THEN @@ -728,8 +738,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Wr_Spin_Group (Nent, Next, Ntot, - * If_Excl, Lspin, Chspin, Enbnd, Ixclud, Kppair) + SUBROUTINE Wr_Spin_Group (If_Excl) use fixedi_m use ifwrit_m use constn_common_m @@ -739,12 +748,12 @@ C use RMatResonanceParam_M use SammyParticlePairInfo_M IMPLICIT DOUBLE PRECISION (a-h,o-z) - DIMENSION Nent(*), Next(*), Ntot(*), - * If_Excl(Ntotc,*), Lspin (Ntotc,*), Chspin(Ntotc,*), - * Enbnd (Ntotc,*), Kppair(Ntotc,*), Ixclud(*) + DIMENSION If_Excl(Ntotc,*) CHARACTER*3 Qif, Qif1, Qifx, Qbbb type(SammySpinGroupInfo)::spinInfo type(SammyParticlePairInfo)::pairInfo + type(SammyChannelInfo)::channelInfo + type(RMatChannelParams)::channel type(RMatSpinGroup)::spinGroup character(len=8)::pname DATA Qif1 /' 1'/, Qifx /' X'/, Qbbb /' '/ @@ -766,26 +775,31 @@ C call resParData%getSpinGroup(spinGroup, spinInfo) spinjVal = spinGroup%getJ() abnVal = spinInfo%getAbundance() - IF (Ixclud(Igr).EQ.0) THEN + nent = spinInfo%getNumEntryChannels() + next = spinInfo%getNumExitChannels() + IF (spinInfo%getIncludeInCalc()) THEN IF (Iabn.EQ.1) THEN - WRITE (38,10100) Igr, Nent(Igr), Next(Igr), + WRITE (38,10100) Igr, Nent, Next, * SpinjVal, AbnVal - WRITE (36,10100) Igr, Nent(Igr), Next(Igr), + WRITE (36,10100) Igr, Nent, Next, * SpinjVal, AbnVal ELSE IF (Iabn.EQ.0) THEN - WRITE (38,10100) Igr, Nent(Igr), Next(Igr), SpinjVal - WRITE (36,10100) Igr, Nent(Igr), Next(Igr), SpinjVal + WRITE (38,10100) Igr, Nent, Next, SpinjVal + WRITE (36,10100) Igr, Nent, Next, SpinjVal END IF 10100 FORMAT (I3, 4X, I3, 2X, I3, F5.1, F10.7) ELSE - WRITE (38,10200) Igr, Nent(Igr), Next(Igr), + WRITE (38,10200) Igr, Nent, Next, * SpinjVal, AbnVal - WRITE (36,10200) Igr, Nent(Igr), Next(Igr), + WRITE (36,10200) Igr, Nent, Next, * SpinjVal, AbnVal 10200 FORMAT (I3, 1X, 'X', 2X, I3, 2X, I3, F5.1, F10.7) END IF - Ntotg = Ntot(Igr) + Ntotg = spinInfo%getNumChannels() DO N=1,Ntotg + call spinInfo%getChannelInfo(channelInfo, N) + call resParData%getChannel(channel, channelInfo) + Qif = Qbbb C C Added 1/24/17 to maintain SAMMY convention of using @@ -794,7 +808,8 @@ C physical meaning and it is not allowed by ENDF, but C simply to maintain SAMMY convention for the time being. C C Chspns = Chspin(N,Igr) with sign restored to correct parity - Chspns = SIGN(Chspin(N,Igr),((-1)**Lspin(N,Igr))*SpinjVal) + Chspns = SIGN(channel%getSch(), + * ((-1)**channel%getL())*SpinjVal) IF (If_Excl(N,Igr).EQ.1) THEN Qif = Qif1 @@ -802,19 +817,20 @@ C Chspns = Chspin(N,Igr) with sign restored to correct parity Qif = Qifx END IF - call resParData%getParticlePairInfo(pairInfo,Kppair(n,Igr)) + call resParData%getParticlePairInfo(pairInfo, + * channelInfo%getParticlePairIndex()) call pairInfo%getName(pname) - IF (Enbnd(N,Igr).NE.Zero) THEN + IF (channel%getBnd().NE.Zero) THEN WRITE (38,10300) N, pname, Qif, - * Lspin(N,Igr), Chspns, Enbnd(N,Igr) + * channel%getL(), Chspns, channel%getBnd() WRITE (36,10300) N, pname, Qif, - * Lspin(N,Igr), Chspns, Enbnd(N,Igr) + * channel%getL(), Chspns, channel%getBnd() 10300 FORMAT (3X, I2, 2X, A8, A3, I2, F5.1, 5X, F10.3) ELSE WRITE (38,10300) N, pname, Qif, - * Lspin(N,Igr), Chspns + * channel%getL(), Chspns WRITE (36,10300) N, pname, Qif, - * Lspin(N,Igr), Chspns + * channel%getL(), Chspns END IF END DO END DO diff --git a/sammy/src/fin/mfin4.f b/sammy/src/fin/mfin4.f index 15efd033b10105f124c5d67619d1b0b3ef1870cd..a62fc7156d6bf4ce63eb16a44421783d95f6e24b 100644 --- a/sammy/src/fin/mfin4.f +++ b/sammy/src/fin/mfin4.f @@ -57,7 +57,6 @@ C IF (Kredwa.EQ.0) THEN C write partial width data (indicated by last .false. in the argument list) CALL Outpar ( Iftit, Nunit , A_Iprbrd , I_Iflbrd , - * A_Igoj , I_Intot , I_Ilspin , A_Ichspi , * A_Ipreff , I_Ifleff , A_Iprtru , I_Ifltru , I_Iigrra , * I_Ifliso , A_Iprdet , I_Ifldet , I_Iigrde , * A_Iprext , I_Iflext , @@ -71,12 +70,11 @@ C write partial width data (indicated by last .false. in the argument list) * A_Izkte , A_Izkfe , I_Ifzke , I_Ifzkte , I_Ifzkfe , A(Idum3 ), * A_Iavga , A_Iavgb , A_Iva , A_Ivb , A_Ixa , * A_Ixb , A_Iallkk , A_Iallkx , A_Ixx , A_Ixxstd , - * A_Ikkxxx , A_Ikij , A_Ik1 , I_Ikppai , Iffff , + * A_Ikkxxx , A_Ikij , A_Ik1 , Iffff , * .false.) ELSE C write reduced width data (indicated by last .true. in the argument list) CALL Outpar ( Iftit, Nunit , A_Iprbrd , I_Iflbrd , - * A_Igoj , I_Intot , I_Ilspin , A_Ichspi , * A_Ipreff , I_Ifleff , A_Iprtru , I_Ifltru , I_Iigrra , * I_Ifliso , A_Iprdet , I_Ifldet , I_Iigrde , * A_Iprext , I_Iflext , @@ -90,7 +88,7 @@ C write reduced width data (indicated by last .true. in the argument list) * A_Izkte , A_Izkfe , I_Ifzke , I_Ifzkte , I_Ifzkfe , A(Idum3 ), * A_Iavga , A_Iavgb , A_Iva , A_Ivb , A_Ixa , * A_Ixb , A_Iallkk , A_Iallkx , A_Ixx , A_Ixxstd , - * A_Ikkxxx , A_Ikij , A_Ik1 , I_Ikppai , Iffff , + * A_Ikkxxx , A_Ikij , A_Ik1 , Iffff , * .true.) END IF IF (Ixxxxx.NE.1) THEN @@ -114,14 +112,15 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Ordrad (Ntot, Pareff, Ifleff, Deleff, Partru, Ifltru, + SUBROUTINE Ordrad (Pareff, Ifleff, Deleff, Partru, Ifltru, * Deltru, Igrrad) C *** Write radius parameters, using key-word format use fixedi_m use EndfData_common_m IMPLICIT DOUBLE PRECISION (a-h,o-z) integer,allocatable, dimension(:)::kchan - DIMENSION Ntot(*), Igrrad(Ntotc,*), Pareff(*), Ifleff(*), + type(SammySpinGroupInfo)::spinInfo + DIMENSION Igrrad(Ntotc,*), Pareff(*), Ifleff(*), * Deleff(*), Partru(*), Ifltru(*), Deltru(*) DATA Zero /0.0d0/ C @@ -169,7 +168,8 @@ C kchan(:) = 0 Ig = 0 Ich = 0 - DO Ichan=1,Ntot(Igr) + call resParData%getSpinGroupInfo(spinInfo, Igr) + DO Ichan=1,spinInfo%getNumChannels() IF (Igrrad(Ichan,Igr).EQ.I) THEN Ig = Igr Ich = Ich + 1 diff --git a/sammy/src/fin/mfin5.f b/sammy/src/fin/mfin5.f index f427c2f61ab0d09debe09d8c07db9ef4ee10f32c..2718479b0e870a471112461d68f8fea565aa7a37 100644 --- a/sammy/src/fin/mfin5.f +++ b/sammy/src/fin/mfin5.f @@ -580,7 +580,10 @@ C# WRITE (Iu64) 'Gga ', Nres, 0 DO Ires=1,resParData%getNumResonances() call resParData%getResonanceInfo(resInfo, Ires) call resParData%getResonance(resonance, resInfo) - resTmpData(1,ires) = resonance%getWidth(1) + igr = resInfo%getSpinGroupIndex() + call resParData%getSpinGroupInfo(spinInfo, igr) + ichan = spinInfo%getGammaWidthIndex() + resTmpData(1,ires) = resonance%getWidth(ichan) end do WRITE (Iu64)(resTmpData(1,I),I=1,resParData%getNumResonances()) @@ -589,8 +592,11 @@ C# WRITE (Iu64) 'Gsi ', Nres, Ntotc DO Ires=1,resParData%getNumResonances() call resParData%getResonanceInfo(resInfo, Ires) call resParData%getResonance(resonance, resInfo) + igr = resInfo%getSpinGroupIndex() + call resParData%getSpinGroupInfo(spinInfo, igr) do k = 1, ntotc - resTmpData(k,Ires) = resonance%getWidth(K+1) + ichan = spinInfo%getWidthForChannel(k) + resTmpData(k,Ires) = resonance%getWidth(ichan) end do end do WRITE (Iu64) ((resTmpData(J,I),J=1,Ntotc), @@ -614,8 +620,11 @@ C# WRITE (Iu64) 'Betapr', Nres, Ntotc DO Ires=1,resParData%getNumResonances() call resParData%getResonanceInfo(resInfo, Ires) call resParData%getRedResonance(resonance, resInfo) + igr = resInfo%getSpinGroupIndex() + call resParData%getSpinGroupInfo(spinInfo, igr) do k = 1, ntotc - resTmpData(k,Ires) = resonance%getWidth(K+1) + ichan = spinInfo%getWidthForChannel(k) + resTmpData(k,Ires) = resonance%getWidth(ichan) end do end do WRITE (Iu64) ((resTmpData(J,I),J=1,Ntotc),I=1, @@ -624,7 +633,10 @@ C# WRITE (Iu64) 'reduced gamma width', Nres, 3 DO Ires=1,resParData%getNumResonances() call resParData%getResonanceInfo(resInfo, Ires) call resParData%getRedResonance(resonance, resInfo) - resTmpData(1,ires) = resonance%getWidth(1) + igr = resInfo%getSpinGroupIndex() + call resParData%getSpinGroupInfo(spinInfo, igr) + ichan = spinInfo%getGammaWidthIndex() + resTmpData(1,ires) = resonance%getWidth(ichan) end do WRITE (Iu64) ( resTmpData(1,I), * resTmpData(1,I)*resTmpData(1,I), @@ -636,11 +648,15 @@ C# WRITE (Iu64) 'reduced gamma width', Nres, 3 DO Ires=1,resParData%getNumResonances() call resParData%getResonanceInfo(resInfo, Ires) call resParData%getRedResonance(resonance, resInfo) + igr = resInfo%getSpinGroupIndex() + call resParData%getSpinGroupInfo(spinInfo, igr) kl = 0 do k = 1, ntotc - f1 = resonance%getWidth(K+1) + ichan = spinInfo%getWidthForChannel(k) + f1 = resonance%getWidth(ichan) DO L=1,K - f2 = resonance%getWidth(L+1) + ichan = spinInfo%getWidthForChannel(L) + f2 = resonance%getWidth(ichan) KL = KL + 1 resTmpData(KL,Ires) = f1 * f2 END DO diff --git a/sammy/src/grp/mgrp0.f b/sammy/src/grp/mgrp0.f index edc54a06ee43ed2c7a77c14d4908e24a9deac8c6..d6816040e5264152f320fae991a2bae06859b161 100644 --- a/sammy/src/grp/mgrp0.f +++ b/sammy/src/grp/mgrp0.f @@ -125,8 +125,7 @@ C *** Grpavg calculates group-averaged cross section C - - - - - - - - - - - - - - - - - - - - - - - - - - - - > C IF (Kpasfe.EQ.1) THEN - CALL Resetgx (I_Intot , I_Ilpent , I_Ilspin , A_Iechan , - * A_Izkte , A(Iwdasi), Ndatq) + CALL Resetgx (A_Iechan , A_Izkte , A(Iwdasi), Ndatq) C *** sub Resetgx converts to ENDF-style resonance parameters, C *** and prints the partial derivatives (sensitivities) into C *** file SAMSEN.DAT diff --git a/sammy/src/inp/minp0.f b/sammy/src/inp/minp0.f index 5b739fbbb6d4ce89847d6b7d347643eaa57fbf6e..c6ab00055141ce171c8df5f910894beeafb8da15 100644 --- a/sammy/src/inp/minp0.f +++ b/sammy/src/inp/minp0.f @@ -74,12 +74,9 @@ C C *** Routine Set_Dimensions sets the dimensions of the various arrays C Iq_V00 = Iq_Val - CALL Inpfil ( A_Iprbrd , I_Iflbrd , A_Igoj , - * I_Inent , I_Inext , I_Intot , I_Iishif , I_Ilpent , - * I_Ifexcl , I_Ilspin , A_Ichspi , A_Ienbnd , A_Ibound , - * A_Iechan , A_Irdeff , A_Irdtru , A_Iemmm1 , A_Iemmm2 , - * I_Izzzz1 , I_Izzzz2 , A_Ispnn1 , A_Ispnn2 , I_Ikppai , - * I_Ixclud , A_Ispinx , I_Ifcros , A_Iangle , A_Idangl , + CALL Inpfil ( A_Iprbrd , I_Iflbrd , + * I_Ifexcl , A_Ibound , A_Iechan , + * I_Ifcros , A_Iangle , A_Idangl , * A_Ibcf , A_Icf2 , A_Iresol , * I_Ifliso , A_Ideiso , * A_Ispiso , I_Ixciso , diff --git a/sammy/src/inp/minp01.f b/sammy/src/inp/minp01.f index e58596028b2dce74359a818ca110922b8795e99f..fd029a057a6241936f33c95257c284a8772a9d97 100644 --- a/sammy/src/inp/minp01.f +++ b/sammy/src/inp/minp01.f @@ -295,30 +295,9 @@ C *** One IF (Ksindi.NE.0) THEN call make_A_Isiabn(Ngroup) END IF - call make_A_Igoj(Ngroup) - call make_I_Inent(Ngroup) - call make_I_Inext(Ngroup) - call make_I_Intot(Ngroup) - call make_I_Iishif(Ngroup * Ntotc) - call make_I_Ilpent(Ngroup * Ntotc) call make_I_Ifexcl(Ngroup * Ntotc) - call make_I_Ilspin(Ngroup * Ntotc) - call make_A_Ichspi(Ngroup * Ntotc) - call make_A_Ienbnd(Ngroup * Ntotc) call make_A_Ibound(Ngroup * Ntotc) call make_A_Iechan(Ngroup * Ntotc) - call make_A_Irdeff(Ngroup * Ntotc) - call make_A_Irdtru(Ngroup * Ntotc) - call make_A_Iemmm1(Ngroup * Ntotc) - call make_A_Iemmm2(Ngroup * Ntotc) - call make_I_Izzzz1(Ngroup * Ntotc) - call make_I_Izzzz2(Ngroup * Ntotc) - M = Ngroup*Ntotc - call make_A_Ispnn1(M) - call make_A_Ispnn2(M) - call make_I_Ikppai(M) - call make_I_Ixclud(Ngroup) - call make_A_Ispinx(Ngroup) C C *** three Ncrsss = Ntotc + 1 diff --git a/sammy/src/inp/minp03.f b/sammy/src/inp/minp03.f index 4efca8c8ed632647f8f1f95dd0adcc9e6a5a04c5..528c2b61865c2d90f9596da4bd4745a6e2b045df 100644 --- a/sammy/src/inp/minp03.f +++ b/sammy/src/inp/minp03.f @@ -3,12 +3,9 @@ C *** THIS FILE CONTAINS ROUTINES FOR READING "INPUT" FILE C C -------------------------------------------------------------- C - SUBROUTINE Inpfil (Parbrd, Iflbrd, Goj , - * Nent , Next , Ntot , Ishift, Lpent, - * If_Excl,Lspin , Chspin, Enbnd , Bound , - * Echan , Rdeff , Rdtru , Emmm1 , Emmm2 , - * Kzzz1 , Kzzz2 , Spnn1 , Spnn2 , Kppair, - * Ixclud, Spinx , Ifcros, Angle , Dangle, + SUBROUTINE Inpfil (Parbrd, Iflbrd, + * If_Excl,Bound , Echan , + * Ifcros, Angle , Dangle, * Bcf , Cf2 , Eresol, * Ifliso, Deliso, * Spniso, Ixciso, @@ -42,16 +39,8 @@ C IMPLICIT DOUBLE PRECISION (a-h,o-z) C C DIMENSION Parbrd(Numbrd), Iflbrd(Numbrd), -C * Goj(Ngroup), Nent(Ngroup), -C * Next(Ngroup), Ntot(Ngroup), Ishift(Ntotc,Ngroup), -C * Lpent(Ntotc,Ngroup), If_Excl(Ntotc,Ngroup), -C * Lspin(Ntotc,Ngroup), -C * Chspin(Ntotc,Ngroup), Enbnd(Ntotc,Ngroup), +C * If_Excl(Ntotc,Ngroup), C * Bound(Ntotc,Ngroup), Echan(Ntotc,Ngroup), -C * Rdeff(Ntotc,Ngroup), Rdtru(Ntotc,Ngroup), -C * Emmm1(Ntotc,Ngroup), Emmm2(Ntotc,Ngroup), -C * Kppair(Ntotc,Ngroup), -C * Ixclud(Ngroup), Spinx(Ngroup), C * Ifcros(Ncrsss), Angle(Nangle), Dangle(Nangle), C * Bcf(ncf), Cf2(ncf), Eresol(Nresol), C *Pardet(Numdet), Ifldet(Numdet), Deldet(Numdet), Igrdet(Ngroup), @@ -59,13 +48,9 @@ C *Parorr(Numorr), Iflorr(Numorr), Delorr(Numorr), Ecrnch(Numorr-11), C *Endets(Nmdets), Sesese(Nmdets), Eseses(Nmdets), Sigdts(Nmdets), C *Parrpi(Numrpi), Iflrpi(Numrpi), Delrpi(Numrpi), Ecrnch(Numrpi-?) C - DIMENSION Parbrd(*), Iflbrd(*), Goj(*), - * Nent(*), Next(*), Ntot(*), Ishift(Ntotc,*), Lpent(Ntotc,*), - * If_Excl(Ntotc,*), Lspin(Ntotc,*), Chspin(Ntotc,*), - * Enbnd(Ntotc,*), Bound(Ntotc,*), Echan(Ntotc,*), Ixclud(*), - * Spinx(*), Rdeff(Ntotc,*), Rdtru(Ntotc,*), Emmm1(Ntotc,*), - * Emmm2(Ntotc,*), Kzzz1(Ntotc,*), Kzzz2(Ntotc,*), - * Spnn1(Ntotc,*), Spnn2(Ntotc,*), Kppair(Ntotc,*), Ifcros(*), + DIMENSION Parbrd(*), Iflbrd(*), + * If_Excl(Ntotc,*), + * Bound(Ntotc,*), Echan(Ntotc,*), Ifcros(*), * Angle (*), Dangle(*), Bcf(*), Cf2(*), Eresol(*), * Ifliso(*), Deliso(*), * Spniso(*), Ixciso(*), @@ -208,28 +193,17 @@ C END IF END IF C -C -C *** Zero some of the non-standard stuff - CALL Zernst (If_Excl, Rdeff, Rdtru, Emmm1, Emmm2, Kzzz1, Kzzz2, - * Ntotc, Ngroup) -C C *** Read quantum numbers, other information for spin groups C IF (Kquant.EQ.0 .AND. Krdspn.EQ.0) THEN C *** Card Set 10.1 - CALL Rdspin (Goj, Nent, Next, Ntot, Ishift, - * Lpent, If_Excl, Lspin, Chspin, Enbnd, Bound, Echan, Rdeff, - * Rdtru, Emmm1, Emmm2, Kzzz1, Kzzz2, Spnn1, Spnn2, Ixclud, - * Spinx, Spini, If_9, Kppair) + CALL Rdspin (If_Excl, Bound, Echan, Spini, If_9) ELSE IF (Kquant.EQ.1 .OR. * (Kquant.EQ.0 .AND. (Krdspn.EQ.2 .OR. Krdspn.EQ.3))) THEN C *** Card Set 10.2 (particle-pair spin definitions are given) - CALL Rdspi2 (Goj, Nent, Next, Ntot, Ishift, - * Lpent, If_Excl, Lspin, Chspin, Enbnd, Bound, Echan, Rdeff, - * Rdtru, Emmm1, Emmm2, Kzzz1, Kzzz2, Spnn1, Spnn2, Kppair, - * Ixclud, Spinx, Spini, Ipp_Final, If_9, - * Ipp_Final_M) + CALL Rdspi2 ( If_Excl, Bound, Echan, Spini, + * Ipp_Final, If_9,Ipp_Final_M) END IF C C @@ -239,7 +213,7 @@ C Iq_Val = 0 END IF C - CALL Fissil (Next, Nfissl, Ngroup) + CALL Fissil (Nfissl) C C C *** Card Set 11 @@ -261,8 +235,7 @@ C ELSE IF (Alfnm1.EQ.Endddd) THEN GO TO 50 ELSE IF (Alfnm1.EQ.Xisoto .OR. Alfnm1.EQ.Xnucli) THEN - CALL Readis (Goj, Spinx, Ifliso, Deliso, - * Spniso, Ixclud, Ixciso, Iu22) + CALL Readis (Ifliso, Deliso, Spniso, Ixciso, Iu22) ELSE IF (Alfnm1.EQ.Detect) THEN CALL Readde (Pardet, Ifldet, Deldet, Igrdet, Iu22) ELSE IF (Alfnm1.EQ.Broade) THEN diff --git a/sammy/src/inp/minp06.f b/sammy/src/inp/minp06.f index 9b4099a109ddabc87ab5a83459efc90af4fa9920..0e9c8fcf3a4de82d79938a033dc3d515aee21012 100644 --- a/sammy/src/inp/minp06.f +++ b/sammy/src/inp/minp06.f @@ -405,12 +405,16 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Fissil (Next, Nfissl, Ngroup) + SUBROUTINE Fissil (Nfissl) + use EndfData_common_m + use SammySpinGroupInfo_M C *** Purpose -- Set Nfissl=0 if non-Fissile, =1 if Fissile - DIMENSION Next(*) + type(SammySpinGroupInfo)::spinInfo Nfissl = 0 - DO I=1,Ngroup - IF (Next(I).GT.0) THEN + DO I=1,resParData%getNumSpinGroups() + call resparData%getSpinGroupInfo(spinInfo, I) + next = spinInfo%getNumExitChannels() + IF (Next.GT.0) THEN Nfissl = 1 RETURN END IF diff --git a/sammy/src/inp/minp10.f b/sammy/src/inp/minp10.f index 1db8f4830d509c83a4a49b3fb373c258d1821cd6..7a828d7a24eafde12d0fb8fa4fa74f96af533c89 100644 --- a/sammy/src/inp/minp10.f +++ b/sammy/src/inp/minp10.f @@ -411,22 +411,4 @@ C *** Read angles for differential cross section (elastic or reaction) C C RETURN - END -C -C -C -------------------------------------------------------------- -C - SUBROUTINE Zernst (If_Excl, Rdeff, Rdtru, Emmm1, Emmm2, - * Kzzz1, Kzzz2, Ntotc, Ngroup) - IMPLICIT DOUBLE PRECISION (a-h,o-z) - DIMENSION If_Excl(Ntotc,*), Rdeff(Ntotc,*), Rdtru(Ntotc,*), - * Emmm1(Ntotc,*), Emmm2(Ntotc,*), Kzzz1(Ntotc,*), Kzzz2(Ntotc,*) - CALL Zero_Array (Rdeff, Ngroup*Ntotc) - CALL Zero_Array (Rdtru, Ngroup*Ntotc) - CALL Zero_Array (Emmm1, Ngroup*Ntotc) - CALL Zero_Array (Emmm2, Ngroup*Ntotc) - CALL Zero_Integer (Kzzz1, Ngroup*Ntotc) - CALL Zero_Integer (Kzzz2, Ngroup*Ntotc) - CALL Zero_Integer (If_Excl, Ngroup*Ntotc) - RETURN - END + END \ No newline at end of file diff --git a/sammy/src/inp/minp11.f b/sammy/src/inp/minp11.f index 14f118dab0ef94a585b8036e66e9386da6d34438..08b02e621bd3309259c5847f715dcb9b5fb6110f 100644 --- a/sammy/src/inp/minp11.f +++ b/sammy/src/inp/minp11.f @@ -2,10 +2,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Rdspin ( Goj, Nent, Next, Ntot, Ishift, - * Lpent, If_Excl, Lspin, Chspin, Enbnd, Bound, Echan, Rdeff, - * Rdtru, Emmm1, Emmm2, Kzzz1, Kzzz2, Spnn1, Spnn2, Ixclud, Spinx, - * Spinii, If_9, Kppair) + SUBROUTINE Rdspin (If_Excl, Bound, Echan, Spinii, If_9) C C *** PURPOSE -- Read resonance quantum numbers and other information, C *** using "NEW SPIN FORMAT" (which is now old!) @@ -28,16 +25,8 @@ C integer::If_9 REAL(KIND=8)::Spinii - REAL(KIND=8):: - * Goj(*), Chspin(Ntotc,*), Enbnd(Ntotc,*), - * Bound(Ntotc,*), Echan(Ntotc,*), Spinx(*), - * Rdeff(Ntotc,*), Rdtru(Ntotc,*), Emmm1(Ntotc,*), Emmm2(Ntotc,*), - * Spnn1(Ntotc,*), Spnn2(Ntotc,*) - INTEGER:: - * Nent(*), Next(*), Kppair(Ntotc,*), - * Ntot(*), Ishift(Ntotc,*), Lpent(Ntotc,*), If_Excl(Ntotc,*), - * Lspin(Ntotc,*), Ixclud(*), - * Kzzz1(Ntotc,*), Kzzz2(Ntotc,*) + REAL(KIND=8):: Bound(Ntotc,*), Echan(Ntotc,*) + INTEGER::If_Excl(Ntotc,*) C type(SammyRMatrixParameters)::reorgResPar @@ -100,17 +89,9 @@ C *** Now read Card Set 10.1 DO Ig=1,resparData%getNumSpinGroups() call resparData%getSpinGroupInfo(spinInfo, Ig) - if (spinInfo%getIncludeInCalc()) then - Ixclud(Ig) = 0 - else - Ixclud(Ig) = 1 + IF (spinInfo%getTargetSpin().NE.0.0d0) then + Ifspin = 1 end if - nent(Ig) = spinInfo%getNumEntryChannels() - next(Ig) = spinInfo%getNumExitChannels() - Ntot(Ig) = Nent(Ig) + Next(Ig) - - Spinx(Ig) = spinInfo%getTargetSpin() - IF (Spinx(Ig).NE.0.0d0) Ifspin = 1 Alabcm = 0.0 DO N=1,spinInfo%getNumChannels() @@ -120,18 +101,6 @@ C *** Now read Card Set 10.1 * channelInfo%getParticlePairIndex()) call resParData%getParticlePair(pair, pairInfo) call resParData%getChannel(channel, channelInfo) - - Kppair(N,Ig) = channelInfo%getParticlePairIndex() - - Lpent (N,Ig) = pair%getPnt() - Kzzz1 (N,Ig) = pair%getZa(2) - Kzzz2 (N,Ig) = pair%getZa(1) - - if (pair%getCalcShift()) then - Ishift(N,Ig) = 1 - else - Ishift(N,Ig) = 0 - end if if (channelInfo%getIncludeInCalc()) then If_Excl(N,Ig) = 0 @@ -139,16 +108,6 @@ C *** Now read Card Set 10.1 If_Excl(N,Ig) = 1 end if - Lspin (N,Ig) = channel%getL() - Chspin(N,Ig) = channel%getSch() - Enbnd (N,Ig) = channel%getBnd() - - Rdeff(N,Ig) = channel%getApe() - Rdtru(N,Ig) = channel%getApt() - - Emmm1 (N,Ig) = pair%getMass(2) - Emmm2 (N,Ig) = pair%getMass(1) - ! get the reduced mass ratio from the first channel. ! It is assumed to be the first channel. ! The user supplied value is echan(n,ig) @@ -164,7 +123,8 @@ C *** Now read Card Set 10.1 if (kz.ne.0.and.Kcolab.EQ.1) CoulombExcitationFlag = .true. IF (N.EQ.1) THEN - Alabcm = -(Emmm1(N,Ig)+Emmm2(N,Ig))/Emmm1(N,Ig) + Alabcm = -(pair%getMass(2)+pair%getMass(1))/ + * pair%getMass(2) END IF if ( pair%getQ().ne.0.0) then @@ -176,16 +136,11 @@ C *** Now read Card Set 10.1 else Echan (N,Ig) = 0.0d0 end if - - Spnn1(N,Ig) = pair%getIa(2) - Spnn2(N,Ig) = pair%getIa(1) - end do - + end do + do N = spinInfo%getNumChannels() + 1, Ntotc Bound(N,Ig) = 0.0d0 - Enbnd(N,Ig) = 0.0d0 - Lspin(N,Ig) = 0 - Lpent(N,Ig) = 0 + If_Excl(N,Ig) = 0 END DO end do @@ -227,7 +182,8 @@ C call resParData%getChannel(channel, channelInfo) IF (N.EQ.1) THEN - Alabcm = -(Emmm1(N,Ig)+Emmm2(N,Ig))/Emmm1(N,Ig) + Alabcm = -(pair%getMass(2)+pair%getMass(1))/ + * pair%getMass(2) END IF if ( pair%getQ().eq.0.0) cycle @@ -260,7 +216,7 @@ C Spinii = spinInfo%getTargetSpin() END IF - CALL Organize_Bound_Etc (Goj, Bound) + CALL Organize_Bound_Etc (Bound) debug = .false. diff --git a/sammy/src/inp/minp15.f b/sammy/src/inp/minp15.f index ebfd01dd9e49c91e36b5da9045e2e16aaa1786c5..5761639c5dc5bf0bf91cddebd2126b289fb2e530 100644 --- a/sammy/src/inp/minp15.f +++ b/sammy/src/inp/minp15.f @@ -2,11 +2,8 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Rdspi2 (Goj, Nent, Next, Ntot, Ishift, - * Lpent, If_Excl, Lspin, Chspin, Enbnd, Bound, Echan, Rdeff, - * Rdtru, Emmm1, Emmm2, Kzzz1, Kzzz2, Spnn1, Spnn2, Kppair, - * Ixclud, Spinx, Spinii, Ipp_Final, If_9, - * Ipp_Final_M) + SUBROUTINE Rdspi2(If_Excl, Bound, Echan, + * Spinii, Ipp_Final, If_9, Ipp_Final_M) C C *** PURPOSE -- Read resonance quantum numbers and other information, C *** using Card Set 10.2, particle-pair definitions @@ -28,32 +25,15 @@ C use, intrinsic :: ISO_C_BINDING Implicit none C -C DIMENSION Goj(Ngroup), -C * Nent(Ngroup), Next(Ngroup), Ntot(Ngroup), -C * Ishift(Ntotc,Ngroup), Lpent(Ntotc,Ngroup), +C DIMENSION C * If_Excl(Ntotc,Ngroup), -C * Lspin(Ntotc,Ngroup), Chspin(Ntotc,Ngroup), -C * Enbnd(Ntotc,Ngroup), Bound(Ntotc,Ngroup), -C * Echan(Ntotc,Ngroup), Ixclud(Ngroup), Spinx(Ngroup), -C * Rdeff(Ntotc,Ngroup), Rdtru(Ntotc,Ngroup), -C * Emmm1(Ntotc,Ngroup), Emmm2(Ntotc,Ngroup), -C * Kzzz1(Ntotc,Ngroup), Kzzz2(Ntotc,Ngroup) +C * Bound(Ntotc,Ngroup), +C * Echan(Ntotc,Ngroup) C real(kind=8)::Spinii integer::If_9, Ipp_Final_M - REAL(KIND=8):: - * Goj(*), Chspin(Ntotc,*), Enbnd(Ntotc,*), - * Bound(Ntotc,*), Echan(Ntotc,*), Spinx(*), - * Rdeff(Ntotc,*), Rdtru(Ntotc,*), - * Emmm1(Ntotc,*), Emmm2(Ntotc,*), - * Spnn1(Ntotc,*), Spnn2(Ntotc,*) - Integer:: - * Nent(*), Next(*), - * Ntot(*), Ishift(Ntotc,*), - * Lpent(Ntotc,*), If_Excl(Ntotc,*), - * Lspin(Ntotc,*), Ixclud(*), - * Kzzz1(Ntotc,*), Kzzz2(Ntotc,*), - * Kppair(Ntotc,*),Ipp_Final(*) + REAL(KIND=8):: Bound(Ntotc,*), Echan(Ntotc,*) + Integer::If_Excl(Ntotc,*), Ipp_Final(*) C type(SammyRMatrixParameters)::reorgResPar type(SammySpinGroupInfo)::spinInfo @@ -68,7 +48,7 @@ C character(len=100)::line integer::ierr, Ipp, Iux, j, N, nx, num, ll - integer::Ifspin, Kpound + integer::Ifspin, Kpound, lspin, iela real(kind=8)::Alabcm C Iux = Iu22 @@ -136,18 +116,8 @@ C set relevant data C DO J=1,resParData%getNumSpinGroups() call resParData%getSpinGroupInfo(spinInfo, J) + iela = spinInfo%getElasticChannel() - if (spinInfo%getIncludeInCalc()) then - Ixclud(J) = 0 - else - Ixclud(J) = 1 - end if - nent(j) = spinInfo%getNumEntryChannels() - next(j) = spinInfo%getNumExitChannels() - Spinx(j) = spinInfo%getTargetSpin() - - Ntot(J) = Nent(J) + Next(J) - DO N=1,spinInfo%getNumChannels() call spinInfo%getChannelInfo(channelInfo, N) call resParData%getParticlePairInfo( @@ -155,7 +125,12 @@ C * channelInfo%getParticlePairIndex()) call resParData%getParticlePair(pair, pairInfo) call resParData%getChannel(channel, channelInfo) - + + ! get the target spin from the elastic channel in the first spin group + if (j.eq.1.and.n.eq.iela) then + Spninc = pair%getIa(1) + end if + IF (Ipp_Final_M.EQ.0) THEN ! no particle pairs contribute to final state (see function Final_States ) if ( channelInfo%getExcludeCompletely()) then If_Excl(N,J) = -1 @@ -183,43 +158,23 @@ C END IF - Kzzz1 (N,J) = pair%getZa(2) - Kzzz2 (N,J) = pair%getZa(1) - Lpent (N,j) = pair%getPnt() - if (pair%getCalcShift()) then - Ishift(N,J) = 1 - else - Ishift(N,J) = 0 - end if - Spnn1 (N,J) = pair%getIa(2) - Spnn2 (N,J) = pair%getIa(1) - Emmm1 (N,J) = pair%getMass(2) - Emmm2 (N,J) = pair%getMass(1) - - Chspin(N,J) = channel%getSch() - Lspin (N,J) = channel%getL() - Enbnd (N,J) = channel%getBnd() - - Rdeff(N,J) = channel%getApe() - Rdtru(N,J) = channel%getApt() - IF (N.EQ.1) THEN - Alabcm = - (Emmm1(N,J)+Emmm2(N,J))/Emmm1(N,J) + Alabcm = - (pair%getMass(2)+pair%getMass(1))/ + * pair%getMass(2) END IF Echan (N,J) = pair%getQ() * Alabcm - Kppair(N,J) = channelInfo%getParticlePairIndex() - - IF (Ishift(N,J).NE.0 .AND. Lspin(N,J).NE.0) THEN - IF (Enbnd(N,J).EQ.0.0d0) Enbnd(N,J) = - Lspin(N,J) + lspin = channel%getL() + IF (pair%getCalcShift() .AND. Lspin.NE.0) THEN + IF (channel%getBnd().EQ.0.0d0) then + call channel%setBnd(-1.0d0*Lspin) + end if END IF END DO do n = spinInfo%getNumChannels() + 1, Ntotc Bound(N,j) = 0.0d0 - Enbnd(N,j) = 0.0d0 - Lspin(N,j) = 0 - Lpent(N,j) = 0 + If_Excl(N,J) = 0 END DO Nx = 0 @@ -238,8 +193,7 @@ C END DO - Spninc = Spnn2(1,1) - CALL Organize_Bound_Etc (Goj, Bound) + CALL Organize_Bound_Etc (Bound) debug = .false. @@ -309,7 +263,7 @@ C type(SammyParticlePairInfo)::pairInfo type(RMatParticlePair)::pair, pairEl integer::Iq, Iqx, Iso, n, Ntotn, Nentp - integer::Ichan + integer::Ichan, iela real(kind=8)::Sin, Sout, Alabcm, echa CALL Zero_Array (Cmlab, Iq_Val) @@ -322,7 +276,9 @@ C IF (Ntotn.GT.spinInfo%getNumEntryChannels()) THEN Nentp = spinInfo%getNumEntryChannels() + 1 - call spinInfo%getChannelInfo(channelInfo, 1) + ! use elastic channel to get masses + iela = spinInfo%getElasticChannel() + call spinInfo%getChannelInfo(channelInfo, iela) call resParData%getParticlePairInfo( * pairInfo, * channelInfo%getParticlePairIndex()) diff --git a/sammy/src/inp/minp17.f b/sammy/src/inp/minp17.f index 245a906c1256b8cfacdb7e207e6ad4c6504bd3a7..56cf39b9316c56fc5d3b4b7f9bb7e59630af51ec 100644 --- a/sammy/src/inp/minp17.f +++ b/sammy/src/inp/minp17.f @@ -2,7 +2,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Organize_Bound_Etc (Goj, Bound) + SUBROUTINE Organize_Bound_Etc (Bound) C C *** PURPOSE -- Generate Goj and Bound and other things C @@ -22,7 +22,7 @@ C IMPLICIT DOUBLE PRECISION (a-h,o-z) EXTERNAL Sf C - DIMENSION Goj(*), Bound(Ntotc,*) + DIMENSION Bound(Ntotc,*) type(SammySpinGroupInfo)::spinInfo type(RMatSpinGroup)::spinGroup @@ -39,8 +39,8 @@ C Spnig = spinInfo%getTargetSpin() D = Ggginc/(Two*Dabs(Spnig)+One) call resParData%getSpinGroup(spinGroup, spinInfo) - Goj(Ig) = D*(Two*Dabs(spinGroup%getJ())+One) - call spinInfo%setGFactor(Goj(Ig)) + Goj = D*(Two*Dabs(spinGroup%getJ())+One) + call spinInfo%setGFactor(Goj) IF (spinInfo%getAbundance().EQ.Zero) then call spinInfo%setAbundance(One) end if @@ -56,11 +56,9 @@ C Bound(N,Ig) = Zero IF (pair%getCalcShift()) THEN IF (channel%getBnd().LT.Zero) THEN - Bound(N,Ig) = channel%getBnd() - call spinInfo%setBound( Bound(N,Ig)) + Bound(N,Ig) = channel%getBnd() ELSE IF (channel%getBnd().EQ.Zero) THEN Bound(N,Ig) = -channel%getL() - call spinInfo%setBound( Bound(N,Ig)) ELSE IF (channel%getBnd().GT.Zero) THEN Docoul = Dfloat(pair%getZa(2)*pair%getZa(1)) Rho = Cycrfn*Dsqrt(channel%getBnd()) @@ -83,7 +81,6 @@ C IF (Ifail.NE.0) WRITE (6,10400) Ifail 10400 FORMAT(' minp3: PSPCOU ERROR: Ifail =', i2) END IF - call spinInfo%setBound( Bound(N,Ig)) END IF END IF END DO diff --git a/sammy/src/mlb/mmlb0.f b/sammy/src/mlb/mmlb0.f index 5167781d952fa99a3d149e006f27f0af1b17d7ab..53e3b7faf6e1c8213ee10de04f2acff09c9c48ea 100644 --- a/sammy/src/mlb/mmlb0.f +++ b/sammy/src/mlb/mmlb0.f @@ -73,7 +73,7 @@ C ### one ### CALL Set_Kws_Xct C - - - - - - - - - - - - - - - - - - - - - - - - - - - - < Inprdr = Idimen (Ngroup, 1, 'Ngroup, 1') - IF (Ksolve.NE.2) CALL Ppar_Mlb (I_Intot , A(Iiuif), A(Inprdr)) + IF (Ksolve.NE.2) CALL Ppar_Mlb (A(Iiuif), A(Inprdr)) C *** SUBR Ppar_Mlb sets Nprdr C C diff --git a/sammy/src/mlb/mmlb1.f b/sammy/src/mlb/mmlb1.f index be3ef8944f466263a00897eb29e4b9c8cc5d7d0e..0c9cf367bb02e2a11b385cfeff50e0d4398a7c8f 100644 --- a/sammy/src/mlb/mmlb1.f +++ b/sammy/src/mlb/mmlb1.f @@ -1,7 +1,7 @@ C C -------------------------------------------------------------- C - SUBROUTINE Ppar_Mlb (Ntot, Iuif, Nprdr) + SUBROUTINE Ppar_Mlb (Iuif, Nprdr) C C *** Purpose -- Set Nprdr(K) = Number of varied parameters in group K C @@ -12,7 +12,8 @@ C IMPLICIT DOUBLE PRECISION (a-h,o-z) C type(SammyResonanceInfo)::resInfo - DIMENSION Ntot(*), Iuif(*), Nprdr(*) + type(SammySpinGroupInfo)::spinInfo + DIMENSION Iuif(*), Nprdr(*) C DIMENSION Ntot(Ngroup), C * Iuif(Nvpres), Nprdr(Ngroup) C @@ -24,9 +25,10 @@ C DO I=1,resParData%getNumResonances() call resParData%getResonanceInfo(resInfo, I) IF (resInfo%getIncludeInCalc()) THEN - igrp = resInfo%getSpinGroupIndex() - Mmax = Ntot(Igrp) - Mmax2 = Mmax + 2 + igrp = resInfo%getSpinGroupIndex() + call resparData%getSpinGroupInfo(spinInfo, igrp) + Mmax = spinInfo%getNumChannels() + Mmax2 = spinInfo%getNumResPar() DO M=1,Mmax2 if( m.eq.1) then Ifl = resInfo%getEnergyFitOption() diff --git a/sammy/src/mlb/mmlb2.f b/sammy/src/mlb/mmlb2.f index a49157df797ed48ec1e8bf83569cac69aac03467..05daddf6290c70ef53ce1a5fe4666a87e7167389 100755 --- a/sammy/src/mlb/mmlb2.f +++ b/sammy/src/mlb/mmlb2.f @@ -21,13 +21,12 @@ C * Iplmis, Iplsis, Ipiece DIMENSION A(-Msize:Msize) C - CALL Abpart_Mlb (I_Intot , I_Ilpent , I_Ilspin , A_Iechan , + CALL Abpart_Mlb (A_Iechan , * A(Iiuif) , A_Izkte , A(Iaaone), A(Iaatwo), A(Iaathr), * A(Ipaone), A(Ipatwo), A(Ipathr), * A(Ip) , A(Igami), A(Idphi)) C - CALL Parsh_Mlb (A, A_Igoj , I_Inent , I_Inext , - * I_Intot , I_Ixclud , A(Inprdr), + CALL Parsh_Mlb (A, A(Inprdr), * A_Izke , A_Izkfe , I_Ifzke , I_Ifzkte , I_Ifzkfe , * A(Iaaone), A(Iaatwo), A(Iaathr), A(Ipiece), Ipoten, * A(Isigxx), A(Idasig), A(Idbsig), I_Iisopa ) diff --git a/sammy/src/mlb/mmlb4.f b/sammy/src/mlb/mmlb4.f index 26a37009f54afdde9ca73dbabc6e6c68ea8d2002..39b38eefc787981f923992c10378da175fc07a70 100644 --- a/sammy/src/mlb/mmlb4.f +++ b/sammy/src/mlb/mmlb4.f @@ -2,8 +2,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Abpart_Mlb (Ntot, Lpent, Lspin, Echan, - * Iuif, Zkte, Aaaone, + SUBROUTINE Abpart_Mlb (Echan, Iuif, Zkte, Aaaone, * Aaatwo, Aaathr, Paaone, Paatwo, Paathr, P, Gami , Dphi) C C *** Purpose -- Generate Aaaone(I ,ig) = Gamma(I)*(E-Pken)/Den @@ -27,14 +26,16 @@ C type(SammyResonanceInfo)::resInfo type(SammySpinGroupInfo)::spinInfo type(RMatResonance)::resonance - DIMENSION Ntot(*), Lpent(Ntotc,*), Lspin(Ntotc,*), Echan(Ntotc,*), - * Iuif(*), Zkte(Ntotc,*), + type(SammyParticlePairInfo)::pairInfo + type(RMatParticlePair)::pair + type(RMatChannelParams)::channel + type(SammyChannelInfo)::channelInfo + DIMENSION Echan(Ntotc,*), Iuif(*), Zkte(Ntotc,*), * Aaaone(Ntotc,*), Aaatwo(Ntotc,*), Aaathr(Ntriag,*), * Paaone(Ntotc,*), Paatwo(Ntotc,*), Paathr(Ntriag,*), * P(*), Gami(*), Dphi(*) C -C DIMENSION Ntot(Ngroup), Lpent(Ntotc,Ngroup), -C * Lspin(Ntotc,Ngroup), Echan(Ntotc,Ngroup), +C DIMENSION Ntot(Ngroup), Echan(Ntotc,Ngroup), C * Iuif(Nvpres), Zkte(ntotc,Ngroup), C * Aaaone(Ntotc,Ngroup), C * Aaatwo(Ntotc,Ngroup), Aaathr(Ntriag,Ngroup), @@ -56,16 +57,24 @@ C istart = 1 DO Ig=1,resParData%getNumSpinGroups() + call resparData%getSpinGroupInfo(spinInfo, Ig) Nnnn = Ig Min = istart Ij = 0 - Ntott = Ntot(Ig) + Ntott = spinInfo%getNumChannels() DO I=1,Ntott - L = Lspin(I,Nnnn) + call spinInfo%getChannelInfo(channelInfo, I) + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, pairInfo) + call resParData%getChannel(channel, channelInfo) + + L = channel%getL() Rho = Zkte(I,Ig)*dSQRT(Su-Echan(I,Nnnn)) P(I) = One Dphi(I) = Zero - IF (Lpent(I,Nnnn).EQ.1) P(I) = Pfd (Rho, Dphi(I), L) + IF (pair%getPnt().EQ.1) P(I) = Pfd (Rho, Dphi(I), L) END DO C DO Ires = Min, resParData%getNumResonances() @@ -76,11 +85,13 @@ C IF (resInfo%getIncludeInCalc()) THEN call resParData%getRedResonance(resonance, resInfo) - gammaRed = resonance%getWidth(1) + ichan = spinInfo%getGammaWidthIndex() + gammaRed = resonance%getWidth(ichan) De = Su - resonance%getEres() G = gammaRed**2 DO I=1,Ntott - width = resonance%getWidth(I+1) + ichan = spinInfo%getWidthForChannel(I) + width = resonance%getWidth(ichan) G = G + P(I)*width**2 END DO Gamtot = 2.0D0*G @@ -89,13 +100,15 @@ C Gamgam = 2.0D0*gammaRed**2 Ij = 0 DO I=1,Ntott - width = resonance%getWidth(I+1) + ichan = spinInfo%getWidthForChannel(I) + width = resonance%getWidth(ichan) Gami(I) = 2.0*P(I)*width**2 Aaaone(I,Ig) = Aaaone(I,Ig) + Gami(I)*De/Den Aaatwo(I,Ig) = Aaatwo(I,Ig) + Gami(I)*Gamgam/Den DO J=1,I Ij = Ij + 1 - width = resonance%getWidth(J+1) + ichan = spinInfo%getWidthForChannel(J) + width = resonance%getWidth(ichan) Gamj = 2.0D0*P(J)*width**2 Aaathr(Ij,Ig) = Aaathr(Ij,Ig) + Gami(I)*Gamj/Den END DO @@ -159,7 +172,8 @@ C *** HERE Gamma-CHANNEL-K IS A VARIABLE Ipar = Ipar + 1 IF (Iuif(Ipar).NE.1) THEN Iipar = Iipar + 1 - width = resonance%getWidth(K+1) + ichan = spinInfo%getWidthForChannel(K) + width = resonance%getWidth(ichan) W = 0.5D0*Gamtot*Gami(K)/Den X = 2.0D0*De/(width*Den) Y = 2.0D0*Gamgam/(width*Den) @@ -193,7 +207,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Parsh_Mlb (A, Goj, Nent, Next, Ntot, Jxclud, + SUBROUTINE Parsh_Mlb (A, * Nprdr, Zke, Zkfe, Jfzke, Jfzkte, Jfzkfe, * Aaaone, Aaatwo, Aaathr, Pieces, Ipoten, Sigxxx, Dasigx, * Dbsigx, Isopar) @@ -220,7 +234,7 @@ C * Ip, Igami, Ics, Isi, Idphi, Iaaone, Iaatwo, Iaathr, Icayis, * Iplmis, Iplsis, Ipiece C - DIMENSION Goj(*), Nent(*), Next(*), Ntot(*), Jxclud(*), + DIMENSION * Nprdr(*), Zke(Ntotc,*), Zkfe(Ntotc,*), * Jfzke(*), Jfzkte(Ntotc,*), Jfzkfe(Ntotc,*), Aaaone(Ntotc,*), * Aaatwo(Ntotc,*), Aaathr(Ntriag,*), Pieces(*), Sigxxx(*), @@ -228,8 +242,7 @@ C type(SammySpinGroupInfo)::spinInfo C -C DIMENSION Goj(Ngroup), Nent(Ngroup), Next(Ngroup), -C * Ntot(Ngroup), Jxclud(Ngroup), +C DIMENSION C * Nprdr(Ngroup), Aaaone(Ntotc,Ngroup), Aaatwo(Ntotc,Ngroup), C * Aaathr(ntriag,Ngroup), Cayiso(Numiso), Pilmis(Numiso), C * Pilsis(Numiso), Pieces(Ngroup) @@ -246,8 +259,8 @@ C *** Goes to end of sub_routine C DO N=1,resParData%getNumSpinGroups() Kiso = 0 - IF (Jxclud(N).NE.1) THEN - call resParData%getSpinGroupInfo(spinInfo, N) + call resParData%getSpinGroupInfo(spinInfo, N) + IF (spinInfo%getIncludeInCalc()) THEN C IF (Numiso.GT.0) THEN isoN = spinInfo%getIsotopeIndex() @@ -261,33 +274,36 @@ C Nnnn = N IF (Ksolve.NE.2) Npr = Nprdr(N) Nnf1 = Nnf1 + Nn2 - Nn2 = Ntot(N)*(Ntot(N)+1) + Ntot = spinInfo%getNumChannels() + Nn2 = Ntot*(Ntot+1) Nn = Nn2/2 C C C *** CALCULATE SIN AND COS OF POTENTIAL SCATTERING PHASE C *** SHIFT, AND DERIVATIVE OF PHI WRT Rho - IF (Kcros.LE.2) CALL Cossin (Nent(Nnnn), I_Ilspin ,Zke(1,N), + IF (Kcros.LE.2) CALL Cossin (Zke(1,N), * Zkfe(1,N), A(Ics), A(Isi), A(Idphi), Nnnn, Ipoten) C C - Agoj = varAbn*Goj(N) + Agoj = varAbn*spinInfo%getGFactor() C *** SCATTERING CROSS SECTION (IE ELASTIC CROSS SECTION) + nent = spinInfo%getNumEntryChannels() + next = spinInfo%getNumExitChannels() IF (Kcros.EQ.1 .OR. Kcros.EQ.2) CALL Elastc_Mlb (Agoj, - * Nent(N), Next(N), Zke(1,N), Jfzke(N), Jfzkfe(1,N), + * Nent, Next, Zke(1,N), Jfzke(N), Jfzkfe(1,N), * Jfzkfe(1,N), Aaaone(1,N), Aaatwo(1,N), Aaathr(1,N), * A(Ipaone), A(Ipatwo), A(Ipathr), A(Ics), A(Isi), * A(Idphi), Sigxxx, Dasigx, Isopar, Iso) C C *** REACTION CROSS SECTIONS IF (Kcros.EQ.1 .OR. Kcros.EQ.3 .OR. Kcros.EQ.5) CALL - * Reactn_Mlb (Agoj, Nent(N), Next(N), Zke(1,N), Jfzke(N), + * Reactn_Mlb (Agoj, Nent, Next, Zke(1,N), Jfzke(N), * Jfzkte(1,N), Aaathr(1,N), A(Ipathr), * Sigxxx, Dasigx, Isopar, Iso) C C *** CAPTURE CROSS SECTION IF (Kcros.EQ.1 .OR. Kcros.EQ.4 .OR. Kcros.EQ.5) CALL - * Captur_Mlb (Agoj, Nent(N), Zke(1,N), Jfzke(N), + * Captur_Mlb (Agoj, Nent, Zke(1,N), Jfzke(N), * Jfzkte(1,N), Aaatwo(1,N), A(Ipatwo), * Sigxxx, Dasigx, Isopar, Iso) C diff --git a/sammy/src/mxw/mmxw5.f b/sammy/src/mxw/mmxw5.f index 53fc90749ea57c8b2a8e7715586caeb8716a1978..368876c21221667f3461d5036bdba60ff3e3a8aa 100644 --- a/sammy/src/mxw/mmxw5.f +++ b/sammy/src/mxw/mmxw5.f @@ -69,7 +69,7 @@ C *** Plotun generates plot and ascii file of unaveraged cross sections C C C *** Findem_Mxw locates the highest energy at which there is a resonance - CALL Findem_Mxw (I_Intot , Caytmp, Resmax, Ndatq) + CALL Findem_Mxw (Caytmp, Resmax, Ndatq) C Addcrx = Zero IF (Kaddcr.EQ.1) CALL Fil3xx (Addcrx, A_Iadder , A_Iaddcr ,Npfil3) @@ -182,7 +182,7 @@ C STOP '[STOP in Mxwell in mmxw5.f third time]' END IF C - CALL Approx ( A_Igoj , I_Intot , I_Ixclud, + CALL Approx ( * Emx, Emm, Eethrm, Ssthrm, Sum, Isox) Sumres(J) = Sumres(J) + Sum END DO diff --git a/sammy/src/mxw/mmxw6.f b/sammy/src/mxw/mmxw6.f index 94c1e0c949d3138cebb7f8e9c55f4b0e3908ade3..2d3346789d4d8acb66c938fee39235a72b304379 100644 --- a/sammy/src/mxw/mmxw6.f +++ b/sammy/src/mxw/mmxw6.f @@ -2,7 +2,7 @@ C C C ------------------------------------------------------------------ C - SUBROUTINE Findem_Mxw (Ntot, Caytmp, Resmax, Ndatq) + SUBROUTINE Findem_Mxw (Caytmp, Resmax, Ndatq) C C *** Purpose ... find those resonances for which the Maxwellian varies C *** significantly over the full-Width-at-half-max of the resonance @@ -16,7 +16,7 @@ C use SammySpinGroupInfo_M use RMatResonanceParam_M IMPLICIT DOUBLE PRECISION (a-h,o-z) - DIMENSION Ntot(*), Caytmp(*) + DIMENSION Caytmp(*) DIMENSION Ifff(1000) type(SammyResonanceInfo)::resInfo type(SammySpinGroupInfo)::spinInfo @@ -36,10 +36,12 @@ C call resParData%getResonance(resonance, resInfo) eres = resonance%getEres() IF (eres.GT.Emax .OR. eres.LT.Emin) GO TO 40 - Width = resonance%getWidth(1) - Ntotci = Ntot(resInfo%getSpinGroupIndex()) + Width = 0.0d0 + call resParData%getSpinGroupInfo(spinInfo, + * resInfo%getSpinGroupIndex()) + Ntotci = spinInfo%getAllChannels() DO J=1,Ntotci - Width = Width + dABS(resonance%getWidth(J+1)) + Width = Width + dABS(resonance%getWidth(J)) END DO E = eres + Width*5.0d-3 Ee = eres - Width*5.0d-3 @@ -48,8 +50,6 @@ C *** factor of 1000 is cuz Widths are milli-eV and energies eV IF (Ee.LT.Emin) Ee = Emin Jk = 0 IF (Numiso.GT.0) THEN - call resParData%getSpinGroupInfo(spinInfo, - * resInfo%getSpinGroupIndex()) Iso = spinInfo%getIsotopeIndex() Amass = resParData%getMassForIsotope(Iso) Amass = Amass/(Amass+A_Mass_Small) @@ -79,14 +79,12 @@ C C C ------------------------------------------------------------------ C - SUBROUTINE Approx (Goj, Ntot, Jxclud, - * Emx, Emm, Eethrm, Ssthrm, Sumres, Isox) + SUBROUTINE Approx (Emx, Emm, Eethrm, Ssthrm, Sumres, Isox) use fixedi_m use EndfData_common_m use SammySpinGroupInfo_M use RMatResonanceParam_M IMPLICIT DOUBLE PRECISION (a-h,o-z) - DIMENSION Goj(*), Ntot(*), Jxclud(*) type(SammyResonanceInfo)::resInfo type(SammySpinGroupInfo)::spinInfo type(RMatResonance)::resonance @@ -100,19 +98,23 @@ C IF (eres.GE.Zero) THEN Jgroup = resInfo%getSpinGroupIndex() call resParData%getSpinGroupInfo(spinInfo, Jgroup) + iGam = spinInfo%getGammaWidthIndex() + iCap = spinInfo%getElasticChannel() + iCap = spinInfo%getWidthForChannel(iCap) Iso = spinInfo%getIsotopeIndex() IF (Nnniso.LE.1 .OR. Iso.EQ.Isox) THEN - IF (Jxclud(Jgroup).NE.1) THEN + IF (spinInfo%getIncludeInCalc()) THEN A = dEXP(-eres/Emm) - Ntotci = Ntot(Jgroup) - Width = resonance%getWidth(1) + Ntotci = spinInfo%getAllChannels() + Width = 0.0d0 DO Ichan=1,Ntotci - Width = Width + dABS(resonance%getWidth(Ichan+1)) + Width = Width + dABS(resonance%getWidth(Ichan)) END DO Sum = Sum + - * A*Goj(Jgroup)* + * A*spinInfo%getGFactor()* * spinInfo%getAbundance() * - * resonance%getWidth(2)*resonance%getWidth(1)/Width + * resonance%getWidth(iCap)* + * resonance%getWidth(iGam)/Width END IF END IF END IF diff --git a/sammy/src/ndf/mndf0.f b/sammy/src/ndf/mndf0.f index 553a35406a35a75a98f9f316378efe31eb89b480..96b25678258e8a92439be0d96f99964f57b1b1a0 100644 --- a/sammy/src/ndf/mndf0.f +++ b/sammy/src/ndf/mndf0.f @@ -43,7 +43,7 @@ cx10200 FORMAT (' Initialized') If (Ndfcov.NE.0) THEN N = (Nvpall*(Nvpall+1))/2 allocate(I_Ix(Nvpall)) - CALL Get_Allvr (I_Intot , I_Ix ) + CALL Get_Allvr (I_Ix ) deallocate(I_Ix) allocate(I_Ilocat(nres)) END IF @@ -62,7 +62,7 @@ C call allocate_integer_data(I_Isammy,N) call allocate_integer_data(I_Iisrs,Ngroup) C - CALL Pre_Endfb6 (A_Iemmm1 , I_Izzzz1 , A_Ispnn1 , + CALL Pre_Endfb6 ( * A_Ispi , A_Izai , A_Iawri , * A_Iabn , I_Nendfg , I_Lendfg , I_Kendfg , I_Ngrpsm, * I_Isammy , I_Iisrs , Defunc, Awr, Za, @@ -81,15 +81,12 @@ cx10600 FORMAT (' After Pre_Endfb6') call allocate_real_data(A_Ivsrs, N) END IF C - CALL Endfb6 ( A_Ksj , I_Intot , I_Inent , I_Iishif , - * I_Ilpent , I_Ilspin , A_Ichspi , A_Iechan , A_Iemmm1 , A_Iemmm2 , - * I_Izzzz1 , I_Izzzz2 , A_Ispnn1 , A_Ispnn2 , I_Ikppai , + CALL Endfb6 ( A_Ksj , * A_Izke , A_Izkte , A_Izkfe , I_ILocat , A_Ispi , * A_Izai , A_Iawri , A_Iabn , I_Nendfg , I_Lendfg , I_Kendfg, * I_Ngrpsm , I_Isammy , I_Kresis , A_Iunc , A_Iunkun , I_Iisrs , * A_Iesrs , A_Ivsrs , I_Icov , Num_Res_Parx, Mat, Mf, Mfx, Mt, - * Ns, Lcomp, If_diag, Lrf, Defunc, Awr, Nsrs, Nisotp, Za, Knofis, - * A_Ienbnd ) + * Ns, Lcomp, If_diag, Lrf, Defunc, Awr, Nsrs, Nisotp, Za, Knofis) deallocate(A_Ksj) IF (Ndfcov.NE.0) THEN @@ -100,7 +97,7 @@ C deallocate(A_Idiag) ELSE IF (Lcomp.EQ.1 .AND. If_Diag.EQ.0 .AND. Nsrs.LE.0) THEN CALL Fix_Allvr (I_ILocat) - CALL Write_Lcomp_1 (I_Intot , + CALL Write_Lcomp_1 ( * A_Iunkun, Num_Res_Parx, Mat, Mfx, Mt, Ns, Nsrs, Knofis, * Lrf) ELSE IF (Lcomp.EQ.0 .AND. (Lrf.EQ.1 .OR. Lrf.EQ.2) ) THEN diff --git a/sammy/src/ndf/mndf1.f b/sammy/src/ndf/mndf1.f index 9e52d46f9de5883423523d76d69c845c29330e97..edf28a2e0e077c772496bf10a432863da1b27f22 100644 --- a/sammy/src/ndf/mndf1.f +++ b/sammy/src/ndf/mndf1.f @@ -1,7 +1,7 @@ C C ______________________________________________________________ C - SUBROUTINE Get_Allvr (Ntot, Ix) + SUBROUTINE Get_Allvr (Ix) C C *** Purpose -- Rewrite Allvr, to be in terms of G=S*Gamma C *** where S = sign on gamma @@ -15,7 +15,8 @@ C type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance type(ResonanceCovariance)::physCov - DIMENSION Ntot(*), Ix(*) + type(SammySpinGroupInfo)::spinInfo + DIMENSION Ix(*) DATA Zero /0.0d0/ C C *** Set Is(Ipar) = 0 if width is positive, 1 if negative @@ -24,7 +25,8 @@ C *** Set Is(Ipar) = 0 if width is positive, 1 if negative call resParData%getResonanceInfo(resInfo, N) call resParData%getResonance(resonance, resInfo) Igr = resInfo%getSpinGroupIndex() - DO M=1,Ntot(Igr)+2 + call resParData%getSpinGroupInfo(spinInfo,Igr) + DO M=1,spinInfo%getNumResPar() if (M.eq.1) then ifl = resInfo%getEnergyFitOption() else @@ -63,7 +65,7 @@ C C C ______________________________________________________________ C - SUBROUTINE Pre_Endfb6 (Emmm1, Kzzz1, Spnn1, + SUBROUTINE Pre_Endfb6 ( * Spi, Zai, Awri, Abn, Nendfg, * Lendfg, Kendfg, Ngrpsm, Isammy, Isrs, Defunc, Awr, Za, * Mat, Mt, Lcomp, If_Diag, Lrf, Nsrs, Nisotp) @@ -76,9 +78,20 @@ C use fixedr_m use namfil_common_m use constn_common_m + use EndfData_common_m + use SammyRMatrixParameters_M + use SammySpinGroupInfo_M + use SammyParticlePairInfo_M + use RMatResonanceParam_M + use SammyChannelInfo_M IMPLICIT DOUBLE PRECISION (A-h,o-z) C - DIMENSION Emmm1(Ntotc,*), Kzzz1(Ntotc,*), Spnn1(Ntotc,*), + type(SammySpinGroupInfo)::spinInfo + type(SammyParticlePairInfo)::pairInfo + type(RMatParticlePair)::pair + type(RMatChannelParams)::channel + type(SammyChannelInfo)::channelInfo + DIMENSION * Spi(*), Zai(*), * Awri(*), Abn(*), Nendfg(*), Lendfg(Ngroup,*), * Kendfg(Ngroup,Ngroup,*), Ngrpsm(Ngroup,*), Isammy(*), Isrs(*) @@ -98,7 +111,14 @@ C ELSE IF (Ndfndf.EQ.1) use file that was made automatically... CALL Oldopn (10, 'SAMNDF.NDF', 0) END IF C - Kz = Kzzz1(1,1) + call resParData%getSpinGroupInfo(spinInfo, 1) + iela = spinInfo%getElasticChannel() + call spinInfo%getChannelInfo(channelInfo, iela) + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, pairInfo) + Kz = pair%getZa(2) C *** Lcomp = 2 => Compact Covariance format = default Lcomp = 2 C *** Defunc = Default Uncertainty = unknown @@ -112,7 +132,14 @@ C *** Read first bit of *.ndf file to get Z, A, Mass, etc. IF (Ndigit.EQ.0 .AND. Lcomp.EQ.2) Ndigit = 2 C IF (Lrf.NE.7) THEN - Spix = Spnn1(1,1) + call resParData%getSpinGroupInfo(spinInfo, 1) + iela = spinInfo%getElasticChannel() + call spinInfo%getChannelInfo(channelInfo, iela) + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, pairInfo) + Spix = pair%getIa(2) CALL Rdndf ( * Spi, Zai, Awri, Abn, Za, Nendfg, Lendfg, Kendfg, * Ngrpsm, Isammy, Lrf, Nisotp, Kz, Spix, Nsrs, Isrs, Lcomp, @@ -124,7 +151,7 @@ C Kendfg(2,J,K) = second SAMMY group # for ENDF grp # J C Ngrpsm( J,K) = how many SAMMY groups for this ENDF grp J & nuc K C Isammy( K) = SAMMY nuclide # for ENDF nuclide # K ELSE - CALL Rdndf7 (Emmm1, Kzzz1, Spnn1, + CALL Rdndf7 (Spnn1, * Spi, Zai, Awri, Abn, Za, Nendfg, Lrf, Nisotp, Nsrs, Iflag) END IF C @@ -140,13 +167,11 @@ C C C ______________________________________________________________ C - SUBROUTINE Endfb6 (Sj, Ntot, Nent, Ishift, Lpent, Lspin, - * Chspin, Echan, Emmm1, Emmm2, Kzzz1, Kzzz2, Spnn1, Spnn2, Kppair, - * Zke, Zkte, Zkfe, + SUBROUTINE Endfb6 (Sj, Zke, Zkte, Zkfe, * Locate, Spi, Zai, Awri, Abn, Nendfg, Lendfg, Kendfg, * Ngrpsm, Isammy, Kresis, Unc, Unkunc, Isrs, Esrs, Vsrs, Icov, * Num_Res_Parx, Mat, Mf, Mfx, Mt, Ns, Lcomp, If_Diag, Lrf, - * Defunc, Awr, Nsrs, Nisotp, Za, Knofis, Bndry) + * Defunc, Awr, Nsrs, Nisotp, Za, Knofis) C C NML, January 1988 C with a few more modifications March 1991 & Sept 91 @@ -166,17 +191,18 @@ C use SammyResonanceInfo_M IMPLICIT DOUBLE PRECISION (A-h,o-z) C - DIMENSION Ntot(*), Ishift(Ntotc,*), Lpent(Ntotc,*), - * Lspin(Ntotc,*), Chspin(Ntotc,*), Echan(Ntotc,*), - * Emmm1(Ntotc,*), Emmm2(Ntotc,*), Kzzz1(Ntotc,*), Kzzz2(Ntotc,*), - * Spnn1(Ntotc,*), Spnn2(Ntotc,*), Kppair(Ntotc,*), - * Zke(Ntotc,*), Zkte(Ntotc,*), Zkfe(Ntotc,*), + DIMENSION Zke(Ntotc,*), Zkte(Ntotc,*), Zkfe(Ntotc,*), * Spi(*), Zai(*), Awri(*), Abn(*), Nendfg(*), Lendfg(Ngroup,*), * Kendfg(Ngroup,Ngroup,*), Ngrpsm(Ngroup,*), Isammy(*), * Kresis(*), Sj(*), Locate(*), Unc(*), Unkunc(*), - * Isrs(*), Esrs(*), Vsrs(*), Icov(*), Bndry(Ntotc,*) + * Isrs(*), Esrs(*), Vsrs(*), Icov(*) C type(SammyResonanceInfo)::resInfo + type(SammySpinGroupInfo)::spinInfo + type(SammyChannelInfo)::channelInfo + type(SammyParticlePairInfo)::pairInfo + type(RMatChannelParams)::channel + type(RMatParticlePair)::pair DIMENSION Lxxx(20), Lyyy(20), Eminxx(20), Appxx(20) DATA Tenth /0.1d0/, Zero /0.0d0/ DATA Zz8 /0.8d0/, Z123 /1.23d0/, One /1.0d0/, Three /3.0d0/ @@ -224,13 +250,23 @@ C *** first entry in ENDF/B-VI file -- for sample material -- HEAD record C C C *** generate Sj = find ENDF spins - CALL Findsj (Sj, Chspin, Ntotc) + CALL Findsj (Sj) C C *** determine Lfw =1 if fission widths are present, =0 if not C *** Note: ENDF manual says this is for UNresolved region only! Oops. Lfw = 0 IF (Ntotc.GT.1) THEN - IF (Lpent(2,1).EQ.0) Lfw = 1 + call resParData%getSpinGroupInfo(spinInfo, 1) + if (spinInfo%getNumChannels().ge.2) then + ifis = spinInfo%getFirstFissionChannel() + call spinInfo%getChannelInfo(channelInfo, ifis) + call resParData%getChannel(channel, channelInfo) + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, pairInfo) + IF (pair%getPnt().EQ.0) Lfw = 1 + end if ELSE END IF C @@ -396,7 +432,8 @@ C = Ifg = 0 if use Gamma, 1 if use gamma C *** Determine Ngf = number of spin groups with resonances Ngf = 0 DO Ig=1,resParData%getNumSpinGroups() - Ntotc2x = Ntot(Ig) + 2 + call resParData%getSpinGroupInfo(spinInfo, Ig) + Ntotc2x = spinInfo%getNumResPar() DO Ires=1,resParData%getNumResonances() call resParData%getResonanceInfo(resInfo, Ires) igrIres = resInfo%getSpinGroupIndex() @@ -453,31 +490,29 @@ cx * Ndigit, Mat, Mfx, Mt, Ns, Iux) END IF C IF (Lrf.EQ.1. OR. Lrf.EQ.2) THEN - CALL Wrres2 (Sj, Ntot, Lspin, + CALL Wrres2 (Sj, * Zke, Zkte, Zkfe, Locate, Awri, Lendfg, * Kendfg, Ngrpsm, Kresis, Unkunc, Icov, Nendfx, Mmsotp, * Num_Res_Parx, Defunc, Mat, Mf, Mfx, Ns, Iu, Iux, Lcomp, * If_Diag, Nsrs) ELSE IF (Lrf.EQ.3) THEN - CALL Wrres3 (Sj, Ntot, Lspin, + CALL Wrres3 (Sj, * Zke, Zkte, Zkfe, Locate, Awri, Lendfg, * Kendfg, Ngrpsm, Kresis, Unkunc, Icov, Nendfx, Mmsotp, * Num_Res_Parx, Defunc, Mat, Mf, Mfx, Ns, Iu, Iux, Lcomp, * If_Diag, Nsrs, Knofis) IF (Lcomp.EQ.1 .AND. Nsrs.GT.0) THEN - CALL Wrres3x (Sj, Ntot, + CALL Wrres3x (Sj, * Locate, Awri, Unkunc, Isrs, Esrs, Vsrs, Icov, * Defunc, Mat, Mf, Mfx, Ns, Iux, Nsrs, Mmsotp) END IF ELSE IF (Lrf.EQ.6) THEN STOP '[LRF=6 is no longer supported.]' ELSE IF (Lrf.EQ.7) THEN - CALL Wrres7 (Ntot, Nent, Ishift, Lpent, Lspin,Chspin, - * Echan, Emmm1, Emmm2, Kzzz1, Kzzz2, Spnn1, Spnn2, Kppair, - * Zke, Zkte, Zkfe, + CALL Wrres7 (Zke, Zkte, Zkfe, * Locate, Unc, Unkunc, Icov, Awri, Defunc, Misotp, * Num_Res_Parx, Mat, Mf, Mfx, Ns, Iu, Iux, Lcomp, If_Diag, - * Nsrs, Bndry) + * Nsrs) END IF END DO C *** End of do=loop on isotopes diff --git a/sammy/src/ndf/mndf3.f b/sammy/src/ndf/mndf3.f index d7400f9b4450a0dbaebdbf53c198ee3a5b21fa69..48ec1c133a5a7fc0d3c40f696b335366700df406 100644 --- a/sammy/src/ndf/mndf3.f +++ b/sammy/src/ndf/mndf3.f @@ -2,7 +2,7 @@ C C C ______________________________________________________________ C - SUBROUTINE Wrres3 (Sj, Ntot, Lspin, + SUBROUTINE Wrres3 (Sj, * Zke, Zkte, Zkfe, Locate, Awri, Lendfg, Kendfg, * Ngrpsm, Kresis, Unkunc, Icov, Nendfx, Misotp, Num_Res_Parx, * Defunc, Mat, Mf, Mfx, Ns, Iu, Iux, Lcomp, If_Diag, Nsrs,Knofis) @@ -24,7 +24,12 @@ C C type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance - DIMENSION Sj(*), Ntot(*), Lspin(Ntotc,*), + type(SammySpinGroupInfo)::spinInfo + type(RMatSpinGroup)::spinGroup + type(SammyChannelInfo)::channelInfo + type(RMatChannelParams)::channel + integer,allocatable,dimension(:)::ntotTmp + DIMENSION Sj(*), * Awri(*), Lendfg(Ngroup,*), Kendfg(Ngroup,Ngroup,*), * Ngrpsm(Ngroup,*), Kresis(*), Unkunc(*), Icov(*), * Locate(*) @@ -33,15 +38,25 @@ C C Iparf = 0 Kbegin = 0 - Nt = Ntot(Kendfg(1,1,Misotp)) + call resParData%getSpinGroupInfo(spinInfo, + * Kendfg(1,1,Misotp)) + Nt = spinInfo%getNumChannels() Nx = Nt C *** Check the number of channels DO Mendfg=1,Nendfx DO I=1,Ngrpsm(Mendfg,Misotp) - Nx = Ntot(Kendfg(I,Mendfg,Misotp)) + call resParData%getSpinGroupInfo(spinInfo, + * Kendfg(I,Mendfg,Misotp)) + Nx = spinInfo%getNumChannels() IF (Nx.NE.Nt) then + allocate(ntotTmp(resParData%getNumSpinGroups())) + DO j=1,resParData%getNumSpinGroups() + call resParData%getSpinGroupInfo(spinInfo, j) + ntotTmp(J) = spinInfo%getNumChannels() + end do WRITE (6,10100) - * (Ntot(J),J=1,resParData%getNumSpinGroups()) + * (ntotTmp(J),J=1,resParData%getNumSpinGroups()) + deallocate(ntotTmp) end if END DO END DO @@ -51,9 +66,9 @@ C C *** Find the total number of resonances to be included in file 2 Nrs_File2 = 0 DO Mendfg=1,Nendfx - CALL Figure_Nmbr_Res (Lspin, Lendfg(Mendfg,Misotp), + CALL Figure_Nmbr_Res (Lendfg(Mendfg,Misotp), * Kendfg(1,Mendfg,Misotp), Ngrpsm(Mendfg,Misotp), - * Kresis, Nrs, Ntotc) + * Kresis, Nrs) Nrs_File2 = Nrs_File2 + Nrs END DO C @@ -64,8 +79,10 @@ C *** Here only resonances with flags are to be included in File 32, C *** ergo must count how many resonances have flags Nres_Included = 0 DO I=1,resParData%getNumResonances() - call resParData%getResonanceInfo(resInfo, I) - Ntot2 = Ntot(resInfo%getSpinGroupIndex()) + 2 + call resParData%getResonanceInfo(resInfo, I) + call resParData%getSpinGroupInfo(spinInfo, + * resInfo%getSpinGroupIndex()) + Ntot2 = spinInfo%getNumResPar() Iflag = 0 if (resInfo%getEnergyFitOption().gt.0) then Iflag = 1 @@ -86,9 +103,9 @@ C DO Mendfg=1,Nendfx C C *** figure out how many resonances for this ENDF/B-VI spin group - CALL Figure_Nmbr_Res (Lspin, Lendfg(Mendfg,Misotp), + CALL Figure_Nmbr_Res (Lendfg(Mendfg,Misotp), * Kendfg(1,Mendfg,Misotp), Ngrpsm(Mendfg,Misotp), - * Kresis, Nrs, Ntotc) + * Kresis, Nrs) Nrs6 = 6*Nrs CALL Getap (Zke, Zkte, Zkfe, Kendfg(1,Mendfg,Misotp), * Ngrpsm(Mendfg,Misotp), Apl, Ntotc) @@ -162,19 +179,21 @@ C *** second part of sixth entry eres = resonance%getEres() Nnn = N Igy = resInfo%getSpinGroupIndex() + call resParData%getSpinGroupInfo(spinInfo, Igy) + ntotIgy = spinInfo%getNumChannels() IF (Kresis(N).NE.0) THEN C ************ Resonance # N is in this ENDF spin group Lful = Lful + 1 IF (Iux.NE.0) THEN Locate(N) = Lful CALL Get_Unc (Unkunc, Icov, K_Unc, E, - * Ga, Gb, Gc, Gd, Defunc, Ntot(Igy), Nnn, Lcomp, + * Ga, Gb, Gc, Gd, Defunc, ntotIgy, Nnn, Lcomp, * Nsrs, Iparf) IF (Lcomp.EQ.1 .AND. If_Diag.NE.0) THEN C ****************** Write File 32 when If_Diag>0 (each resonance alone in C ****************** its own short-range section) Kbegin = 1 - Mpar = Ntot(Igy) + 2 + Mpar = ntotIgy + 2 Nrb = 1 Kkk = Mpar * Nrb Nvs = (Kkk*(Kkk+1))/2 @@ -204,13 +223,13 @@ C * (Nsrs.EQ.0 .OR. * resInfo%getEnergyFitOption().GE.0)) THEN C ********************* Write uncertainties into File 32 for LCOMP=2 - CALL Write_Lrf3_2 (Ntot(Igy), E, Ax, Ga, Gb, Gc, + CALL Write_Lrf3_2 (ntotIgy, E, Ax, Ga, Gb, Gc, * Gd, Mat, Mfx, Mt, Ns, Iux) C ELSE IF (Lcomp.EQ.1 .AND. If_Diag.EQ.1) THEN C ********************* Write covariance matrix for LCOMP=1 when diagonal C ********************* wrt resonances - CALL Write_Lrf3_3 (Ntot(Igy), E, Ax, Ga, Gb, Gc, + CALL Write_Lrf3_3 (ntotIgy, E, Ax, Ga, Gb, Gc, * Gd, Mat, Mfx, Mt, Ns, Iux) END IF C @@ -367,14 +386,17 @@ C C C ______________________________________________________________ C - SUBROUTINE Figure_Nmbr_Res (Lspin, Lendfg, Kendfg, Ngrpsm, - * Kresis, Nrs, Ntotc) + SUBROUTINE Figure_Nmbr_Res (Lendfg, Kendfg, Ngrpsm, + * Kresis, Nrs) C *** Purpose -- Figure out which resonances form this ENDF/B-VI spin group use EndfData_common_m use SammyResonanceInfo_M IMPLICIT DOUBLE PRECISION (A-h,o-z) type(SammyResonanceInfo)::resInfo - DIMENSION Lspin(Ntotc,*), Kendfg(*), Kresis(*) + type(SammySpinGroupInfo)::spinInfo + type(SammyChannelInfo)::channelInfo + type(RMatChannelParams)::channel + DIMENSION Kendfg(*), Kresis(*) C Lspin(Ngroup), Kendfg(Ngrpsm), Kresis(Nres) C DO N=1,resParData%getNumResonances() @@ -384,7 +406,12 @@ C Nrs = 0 DO Mgrpsm=1,Ngrpsm Kgroup = Kendfg(Mgrpsm) - IF (Lspin(1,Kgroup).NE.Lendfg) GO TO 40 + call resParData%getSpinGroupInfo(spinInfo, Kgroup) + iela = spinInfo%getElasticChannel() + call spinInfo%getChannelInfo(channelInfo, iela) + call resParData%getChannel(channel, channelInfo) + lspin = channel%getL() + IF (lspin.NE.Lendfg) GO TO 40 DO N=1,resParData%getNumResonances() call resParData%getResonanceInfo(resInfo, N) IF (resInfo%getSpinGroupIndex().EQ.Kgroup) THEN @@ -396,7 +423,7 @@ C RETURN C 40 CONTINUE - WRITE (6,99999) Kgroup, Lspin(1,Kgroup), Lendfg + WRITE (6,99999) Kgroup, lspin, Lendfg 99999 FORMAT (' SAMMY group #', I3, ' has L of', I3, * ', which does not correspond to ENDF/B-VI value of', I3) STOP '[STOP in Figur in ndf/mndf3.f]' @@ -444,7 +471,7 @@ C C C ______________________________________________________________ C - SUBROUTINE Wrres3x (Sj, Ntot, + SUBROUTINE Wrres3x (Sj, * Locate, Awri, Unkunc, Isrs, Esrs, Vsrs, Icov, Defunc, * Mat, Mf, Mfx, Ns, Iux, Nsrs, Misotp) C @@ -462,7 +489,8 @@ C C type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance - DIMENSION Sj(*), Ntot(*), + type(SammySpinGroupInfo)::spinInfo + DIMENSION Sj(*), * Awri(*), Unkunc(*), * Locate(*), Isrs(Ngroup,*), Esrs(2,*), Vsrs(*), Icov(*) real(kind=8)::listData(6) @@ -558,8 +586,10 @@ C call resParData%getResonance(resonance, resInfo) eres = resonance%getEres() Igy = resInfo%getSpinGroupIndex() + call resParData%getSpinGroupInfo(spinInfo, igy) + ntotIgy =spinInfo%getNumChannels() CALL Get_Unc (Unkunc, Icov, K_Unc, E, - * Ga, Gb, Gc, Gd, Defunc, Ntot(Igy), N, Lcomp, + * Ga, Gb, Gc, Gd, Defunc, ntotIgy, N, Lcomp, * Nsrs, Iparf) listData(1) = resonance%getEres() listData(2) = Sj(Igy) @@ -575,7 +605,7 @@ C * listFlag(1), listFlag(2), listFlag(3), * listFlag(4), listFlag(5), listFlag(6), * Iux) - IF (Ntot(Igy).gt.3) THEN + IF (ntotIgy.gt.3) THEN STOP '[STOP in Wrres3 in ndf/mndf3.f]' END IF END DO diff --git a/sammy/src/ndf/mndf4.f b/sammy/src/ndf/mndf4.f index 8e526c21a880b5ed1048d8494e0e161072588165..fb093ac8e9e80c9b79f01eeeb6b42abcc756f611 100644 --- a/sammy/src/ndf/mndf4.f +++ b/sammy/src/ndf/mndf4.f @@ -2,7 +2,7 @@ C C C ______________________________________________________________ C - SUBROUTINE Wrres2 (Sj, Ntot, Lspin, + SUBROUTINE Wrres2 (Sj, * Zke, Zkte, Zkfe, Locate, Awri, Lendfg, Kendfg, * Ngrpsm, Kresis, Unkunc, Icov, Nendfx, Misotp, Num_Res_Parx, * Defunc, Mat, Mf, Mfx, Ns, Iu, Iux, Lcomp, If_Diag, Nsrs) @@ -25,7 +25,12 @@ C C type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance - DIMENSION Sj(*), Ntot(*), Lspin(Ntotc,*), + type(SammySpinGroupInfo)::spinInfo + type(RMatSpinGroup)::spinGroup + type(SammyChannelInfo)::channelInfo + type(RMatChannelParams)::channel + integer,allocatable,dimension(:)::ntotTmp + DIMENSION Sj(*), * Awri(*), Lendfg(Ngroup,*), Kendfg(Ngroup,Ngroup,*), * Ngrpsm(Ngroup,*), Kresis(*), Unkunc(*), Locate(*) DIMENSION Zke(Ntotc,*), Zkte(Ntotc,*), Zkfe(Ntotc,*), Icov(*) @@ -34,14 +39,23 @@ C C Iparf = 0 Kbegin = 0 - Nt = Ntot(1) + call resParData%getSpinGroupInfo(spinInfo, 1) + Nt = spinInfo%getNumChannels() Nx = Nt DO I=1,resParData%getNumSpinGroups() - IF (Ntot(I).NE.Nt) THEN - Nx = Ntot(I) + call resParData%getSpinGroupInfo(spinInfo, I) + nn = spinInfo%getNumChannels() + IF (nn.NE.Nt) THEN + Nx = nn IF (Nx.NE.Nt) then + allocate(ntotTmp(resParData%getNumSpinGroups())) + DO j=1,resParData%getNumSpinGroups() + call resParData%getSpinGroupInfo(spinInfo, j) + ntotTmp(J) = spinInfo%getNumChannels() + end do WRITE (6,50100) - * (Ntot(J),J=1,resParData%getNumSpinGroups()) + * (ntotTmp(J),J=1,resParData%getNumSpinGroups()) + deallocate(ntotTmp) end if END IF END DO @@ -51,9 +65,9 @@ C C *** Find the total number of resonances to be included in file 2 Nrs_File2 = 0 DO Mendfg=1,Nendfx - CALL Figure_Nmbr_Res (Lspin, Lendfg(Mendfg,Misotp), + CALL Figure_Nmbr_Res (Lendfg(Mendfg,Misotp), * Kendfg(1,Mendfg,Misotp), Ngrpsm(Mendfg,Misotp), - * Kresis, Nrs, Ntotc) + * Kresis, Nrs) Nrs_File2 = Nrs_File2 + Nrs END DO C @@ -66,7 +80,8 @@ C *** ergo must count how many resonances have flags DO I=1,resParData%getNumResonances() call resParData%getResonanceInfo(resInfo, I) igrp = resInfo%getSpinGroupIndex() - Ntot2 = Ntot(Igrp) + 2 + call resParData%getSpinGroupInfo(spinInfo, igrp) + Ntot2 = spinInfo%getNumResPar() Iflag = 0 DO J=1,Ntot2 if (j.eq.1) then @@ -88,9 +103,9 @@ C DO Mendfg=1,Nendfx C C *** figure out how many resonances for this ENDF/B-VI spin group - CALL Figure_Nmbr_Res (Lspin, Lendfg(Mendfg,Misotp), + CALL Figure_Nmbr_Res (Lendfg(Mendfg,Misotp), * Kendfg(1,Mendfg,Misotp), Ngrpsm(Mendfg,Misotp), - * Kresis, Nrs, Ntotc) + * Kresis, Nrs) Nrs6 = 6*Nrs C C *** first part of sixth entry in ENDF/B-VI file [LIST record] @@ -180,17 +195,20 @@ C *** second part of sixth entry Nnn = N IF (Kresis(N).NE.0) THEN - Igy = resInfo%getSpinGroupIndex() + Igy = resInfo%getSpinGroupIndex() + call resParData%getSpinGroupInfo(spinInfo, igy) + ntotIgy =spinInfo%getNumChannels() Lful = Lful + 1 IF (Iux.NE.0) THEN Locate(N) = Lful CALL Get_Unc (Unkunc, Icov, K_Unc, E, Ga, Gb, - * Gc, Gd, Defunc, Ntot(Igy), Nnn, Lcomp, Nsrs, Iparf) + * Gc, Gd, Defunc, ntotIgy, Nnn, Lcomp, Nsrs, Iparf) IF (Lcomp.EQ.1 .AND. If_Diag.EQ.1) THEN C ****************** Write File 32 when If_Diag>0 (each resonance alone in C ****************** its own short-range section) igrp = resInfo%getSpinGroupIndex() - Mpar = Ntot(Igrp) + 2 + call resParData%getSpinGroupInfo(spinInfo, igrp) + Mpar = spinInfo%getNumResPar() Nrb = 1 Kkk = Mpar*Nrb Nvs = (Kkk*(Kkk+1))/2 @@ -224,27 +242,27 @@ C * (Nsrs.EQ.0 .OR. * resInfo%getEnergyFitOption().GE.0)) THEN C ********************* Write uncertainties into File 32 for LCOMP=2 - CALL Write_Lrf2_2 (Ntot(Igy), E, Ax, Ga, Gb, Gc, + CALL Write_Lrf2_2 (ntotIgy, E, Ax, Ga, Gb, Gc, * Gd, Mat, Mfx, Mt, Ns, Iux) C ELSE IF (Lcomp.EQ.1 .AND. If_Diag.EQ.1) THEN C ********************* Write covariance matrix for LCOMP=1 when diagonal C ********************* wrt resonances IF (Nsrs.EQ.0) THEN - CALL Write_Lrf2_3 (Ntot(Igy), E, Ax, Ga, Gb, + CALL Write_Lrf2_3 (ntotIgy, E, Ax, Ga, Gb, * Gc, Gd, Mat, Mfx, Mt, Ns, Iux) ELSE IF (resInfo%getEnergyFitOption().ge.0) THEN - CALL Write_Lrf2_3 (Ntot(Igy), E, Ax, Ga, Gb, + CALL Write_Lrf2_3 (ntotIgy, E, Ax, Ga, Gb, * Gc, Gd, Mat, Mfx, Mt, Ns, Iux) END IF C ELSE IF (Lcomp.EQ.0) THEN C ********************* Write cov mtrx for LCOMP=0 IF (Nsrs.EQ.0) THEN - CALL Write_Lrf2_0 (Ntot(Igy), E, Ax, Ga, Gb, + CALL Write_Lrf2_0 (ntotIgy, E, Ax, Ga, Gb, * Gc, Gd, Mat, Mfx, Mt, Ns, Iux) ELSE IF (resInfo%getEnergyFitOption().GE.0) THEN - CALL Write_Lrf2_0 (Ntot(Igy), E, Ax, Ga, Gb, + CALL Write_Lrf2_0 (ntotIgy, E, Ax, Ga, Gb, * Gc, Gd, Mat, Mfx, Mt, Ns, Iux) END IF END IF diff --git a/sammy/src/ndf/mndf6.f b/sammy/src/ndf/mndf6.f index d5b773b270de2015f69eb4faf0f4bb857b720fa2..3b1ec379489c3ab4f89c7a4a2e5a85fab48be854 100644 --- a/sammy/src/ndf/mndf6.f +++ b/sammy/src/ndf/mndf6.f @@ -2,7 +2,7 @@ C C C ______________________________________________________________ C - SUBROUTINE Rdndf7 (Emmm1, Kzzz1, Spnn1, + SUBROUTINE Rdndf7 (Spnn1, * Spi, Zai, Awri, Abn, Za, Nendfg, Lrf, Nisotp, Nsrs, Iflag) C C *** Purpose -- Read rest of "ndf file" @@ -19,12 +19,16 @@ C use mdf5_m use EndfData_common_m use SammySpinGroupInfo_M + use ResonanceParameterIO_M IMPLICIT DOUBLE PRECISION (A-h,o-z) C CHARACTER*1 Alpha(80) - DIMENSION Emmm1(Ntotc2,*), Kzzz1(Ntotc2,*), Spnn1(Ntotc2,*), + DIMENSION Spnn1(Ntotc2,*), * Spi(*), Zai(*), Awri(*), Abn(*), Nendfg(*) type(SammySpinGroupInfo)::spinInfo + type(SammyParticlePairInfo)::pairInfo + type(RMatParticlePair)::pair + type(SammyChannelInfo)::channelInfo DATA Zero /0.0d0/, One /1.0d0/ C C @@ -114,7 +118,13 @@ C *** other Lrf values) call resParData%getSpinGroupInfo(spinInfo, Ig) isoIg = spinInfo%getIsotopeIndex() IF (IsoIg.EQ.Misotp) THEN - Nzz = Kzzz1(1,Ig) + iela = spinInfo%getElasticChannel() + call spinInfo%getChannelInfo(channelInfo, iela) + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair,pairInfo) + Nzz = pair%getZa(2) GO TO 65 END IF END DO @@ -155,7 +165,15 @@ C Nisotp = number of ENDF isotopes isoIg = spinInfo%getIsotopeIndex() IF (IsoIg.EQ.Iso) THEN IF (N.EQ.0) THEN - IF (Awri(Iso).EQ.Zero) Awri(Iso) = Emmm1(1,Ig)/Aneutr + IF (Awri(Iso).EQ.Zero) then + iela = spinInfo%getElasticChannel() + call spinInfo%getChannelInfo(channelInfo, iela) + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, pairInfo) + Awri(Iso) = pair%getMass(2)/Aneutr + end if Spi(Iso) = Spnn1(1,Ig) END IF N = N + 1 @@ -171,12 +189,9 @@ C C C ______________________________________________________________ C - SUBROUTINE Wrres7 (Ntot, Nent, Ishift, Lpent, Lspin,Chspin, - * Echan, Emmm1, Emmm2, Kzzz1, Kzzz2, Spnn1, Spnn2, Kppair, - * Zke, Zkte, Zkfe, + SUBROUTINE Wrres7 (Zke, Zkte, Zkfe, * Locate, Unc, Unkunc, Icov, Awri, Defunc, Misotp, - * Num_Res_Parx, Mat, Mf, Mfx, Ns, Iu, Iux, Lcomp, If_Diag, Nsrs, - * Bndry) + * Num_Res_Parx, Mat, Mf, Mfx, Ns, Iu, Iux, Lcomp, If_Diag, Nsrs) C C NML, May 2002 Lrf=7 format for ENDF C with more mods later wrt covariances etc. @@ -191,17 +206,14 @@ C use RMatResonanceParam_M IMPLICIT DOUBLE PRECISION (A-h,o-z) C - DIMENSION Ntot(*), Nent(*), Ishift(Ntotc,*), - * Lpent(Ntotc,*), Lspin(Ntotc,*), Chspin(Ntotc,*), - * Echan(Ntotc,*), Emmm1(Ntotc,*), Emmm2(Ntotc,*), - * Kzzz1(Ntotc,*), Kzzz2(Ntotc,*), Spnn1(Ntotc,*), Spnn2(Ntotc,*), - * Awri(*), Locate(*), Unc(*), Unkunc(*), Icov(*), - * Zke(Ntotc,*), Zkte(Ntotc,*), Zkfe(Ntotc,*), Kppair(Ntotc,*), - * Bndry(Ntotc,*) + DIMENSION Awri(*), Locate(*), Unc(*), Unkunc(*), Icov(*), + * Zke(Ntotc,*), Zkte(Ntotc,*), Zkfe(Ntotc,*) type(SammySpinGroupInfo)::spinInfo type(RMatSpinGroup)::spinGroup type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance + type(SammyChannelInfo)::channelInfo + type(RMatChannelParams)::channel DATA Zero /0.0d0/, Tenth /0.1d0/, One /1.0d0/ C C @@ -214,9 +226,7 @@ C K_Unc = 0 C C *** Determine and write particle-pair definitions - CALL Pp7 (Ntot, Nent, Ishift, Lpent, Echan, Emmm1, Emmm2, - * Kzzz1, Kzzz2, Spnn1, Spnn2, Kppair, Misotp, Mat, Mf, - * Mfx, Ns, Iu, Iux, Lcomp) + CALL Pp7 (Misotp, Mat, Mf, Mfx, Ns, Iu, Iux, Lcomp) C @@@ File 2 LRF=7, first LIST on III-16 C @@@ File 32 LRF=7 LCOMP=2, first LIST on IV-20 C @@ -233,7 +243,8 @@ C C ****** Determine Ngf = number of groups with parameters for cov mtrx Ngf = 0 DO Ig=1,resParData%getNumSpinGroups() - Ntotc2x = Ntot(Ig) + 2 + call resParData%getSpinGroupInfo(spinInfo, Ig) + Ntotc2x = spinInfo%getNumResPar() DO Ires=1,resParData%getNumResonances() call resParData%getResonanceInfo(resInfo, Ires) igrp = resInfo%getSpinGroupIndex() @@ -295,7 +306,7 @@ C END IF END IF IF (K_Want.EQ.0) THEN - Ntotc2x = Ntot(Ig) + 2 + Ntotc2x = spinInfo%getNumResPar() C C *** Figure Nrs = how many resonances for this ENDF/B-VI spin group C *** and (if needed) Nrsx = how many have varied parameters @@ -322,14 +333,31 @@ C *** and (if needed) Nrsx = how many have varied parameters END IF END IF END DO - Ntotcx = Ntot(Ig) + 1 - Num_Res_Parx = Num_Res_Parx + Nrsx*(Ntot(Ig)+2) + Ntotcx = spinInfo%getAllChannels() + Num_Res_Parx = Num_Res_Parx + + * Nrsx*spinInfo%getNumResPar() C *** first part of LIST record ... Define J; How many channels? Ntotc6 = Ntotcx*6 Parity = Zero IF (spinGroup%getJ().EQ.Zero) then - Parity = Parity_Z (Lspin(1,Ig), - * Chspin(1,Ig), Ntot(Ig)) + Parity = 0.0d0 + DO I=1,spinInfo%getNumChannels() + call spinInfo%getChannelInfo(channelInfo, I) + call resParData%getChannel(channel, channelInfo) + C = channel%getSch() + IF (C.NE.0.0D0) THEN + IF (C.GT.0.0D0) THEN + C = 1.0D0 + ELSE + C = -1.0D0 + END IF + IF (MOD(channel%getL(),2).NE.0) THEN + C = - C + END IF + Parity = C + exit + END IF + END DO end if 10200 FORMAT ('####', /, * '#### Spin group is defined in the next lines', /, @@ -367,19 +395,22 @@ C @@@@@@@@@@@@ File 2 LRF=7, 2nd line (gamma ch) of 2nd LIST on III-16 * Mat, Mfx, Mt, Ns, Iux) END IF Flag = Zero - DO I=1,Ntot(Ig) + DO I=1,spinInfo%getNumChannels() IF (Nppair.EQ.0) THEN - Apair = (I-Nent(Ig)+1) + One + Apair = (I-spinInfo%getNumEntryChannels()+1) + One ELSE - Apair = dFLOAT(Kppair(I,Ig)) + One + call spinInfo%getChannelInfo(channelInfo, I) + ipp = channelInfo%getParticlePairIndex() + Apair = dFLOAT(ipp) + One END IF - El = Lspin(I,Ig) + call spinInfo%getChannelInfo(channelInfo, I) + call resParData%getChannel(channel, channelInfo) + El = channel%getL() C &&&&&&&&&& Changed by A. Holcomb 11/11/16 - channel spin parity is a good check for consistency, C &&&&&&&&&& but has been ruffling some feathers. In any case, the sign of the channel spin does C &&&&&&&&&& not change the angle-integrated cross sections, double-differential xs, or derivatives. -C Es = Chspin(I,Ig) !old line - Es = DABS( Chspin(I,Ig) ) - Flag= Bndry(I,Ig) + Es = DABS( channel%getSch() ) + Flag= channel%getBnd() C Rad1 = effective, Rad2 = true radius. Pre-July 2006, these were backwards Rad1 = Zkfe(I,Ig)/Zke(I,Ig) * Tenth Rad2 = Zkte(I,Ig)/Zke(I,Ig) * Tenth @@ -650,28 +681,3 @@ C END IF RETURN END -C -C -C ______________________________________________________________ -C - DOUBLE PRECISION FUNCTION Parity_Z (Lspin, Chspin, Ntotg) - IMPLICIT DOUBLE PRECISION (A-h,o-z) - DIMENSION Lspin(*), Chspin(*) - DO I=1,Ntotg - C = Chspin(I) - IF (C.NE.0.0D0) THEN - IF (C.GT.0.0D0) THEN - C = 1.0D0 - ELSE - C = -1.0D0 - END IF - IF (MOD(Lspin(I),2).NE.0) THEN - C = - C - END IF - Parity_Z = C - RETURN - END IF - END DO - Parity_Z = 0.0d0 - RETURN - END diff --git a/sammy/src/ndf/mndf7.f b/sammy/src/ndf/mndf7.f index 785a238153f1e9967cd600cf6652a40b7e16d986..9d1f32e5b989e0bfaad063bbbf155f0cf4cb7e33 100644 --- a/sammy/src/ndf/mndf7.f +++ b/sammy/src/ndf/mndf7.f @@ -91,9 +91,7 @@ C C C ______________________________________________________________ C - SUBROUTINE Pp7 (Ntot, Nent, Ishift, Lpent, Echan, Emmm1, - * Emmm2, Kzzz1, Kzzz2, Spnn1, Spnn2, Kppair, Misotp, - * Mat, Mf, Mfx, Ns, Iu, Iux, Lcomp) + SUBROUTINE Pp7 (Misotp, Mat, Mf, Mfx, Ns, Iu, Iux, Lcomp) C C *** Determine and write particle-pair definitions C @@ -105,11 +103,12 @@ C use SammySpinGroupInfo_M IMPLICIT DOUBLE PRECISION (A-h,o-z) C - DIMENSION Ntot(*), Nent(*), Ishift(Ntotc,*), - * Lpent(Ntotc,*), Echan(Ntotc,*), Emmm1(Ntotc,*), - * Emmm2(Ntotc,*), Kzzz1(Ntotc,*), Kzzz2(Ntotc,*), Spnn1(Ntotc,*), - * Spnn2(Ntotc,*), Kppair(Ntotc,*) type(SammySpinGroupInfo)::spinInfo + type(RMatResonance)::resonance + type(SammyParticlePairInfo)::pairInfo + type(RMatParticlePair)::pair + type(RMatChannelParams)::channel + type(SammyChannelInfo)::channelInfo DATA Zero /0.0d0/, One /1.0d0/ C C @@ -122,54 +121,10 @@ C N1 = 1 Inel = 0 C - IF (Nppair.EQ.0) THEN -C -C *** When particle-pairs were not defined in INPut file - Npop = 0 - DO Ig=1,Ngroup - IF (Npop.GT.0) GO TO 10 - IF (Numiso.LE.0) THEN - K_Want = 0 - ELSE - call resParData%getSpinGroupInfo(spinInfo, Ig) - isoig = spinInfo%getIsotopeIndex() - IF (IsoIg.EQ.Misotp) THEN - K_Want = 0 - ELSE - K_Want = 1 - END IF - END IF - IF (K_Want.EQ.0) THEN - Ntotcx = Ntot(Ig) + 1 -C - IF (Npop.EQ.0) THEN -C *** LIST record ... pairs of particles - Npop = Ntotcx -C -C *** First, the gamma channel - Npop2 = 2*Npop -C 2 lines for each pair-of-particles - Npop26 = 6*Npop2 - WRITE (Iu,10000) Npop - IF (Iuxx.NE.0) WRITE (Iux,10000) Npop 10000 FORMAT ('####', /, '####', I3, * ' pairs of particles are defined next', /, * '#### First pair is gamma & compound nucleus', /, * '#### Others are particle pairs') - CALL Cont_Ndfa (Ax, Ax, Npop, Lx, Npop26, Npop2, - * Mat, Mf, Mt, Ns, Iu) -C @@@@@@@ File 2 LRF=7, first line of first LIST on III-16 - IF (Iuxx.NE.0) CALL Cont_Ndfa (Ax, Ax, Npop, Lx, - * Npop26, Npop2, Mat, Mfx, Mt, Ns, Iux) -C @@@@@@@ File 32 LRF=7 LCOMP=2, first line of first LIST on IV-20 -C *** First pair is gamma & compound nucleus - Em2 = Zero - Em1 = Emmm1(1,Ig)/Aneutr + One - Zz1 = Kzzz1(1,Ig) - Zz2 = Zero - Sp2 = One - Sp1 = Zero - Amtx = 102.0 10100 FORMAT ('####', /, * '#### MA MB ZA ZB', 9X, * 'IA IB', /, @@ -177,105 +132,37 @@ C *** First pair is gamma & compound nucleus * 'PA PB') 10010 FORMAT ('#### Number of groups with varied prmtrs =', * I3) - WRITE (Iu,10100) - CALL List_7a (Em2, Em1, Zz2, Zz1, Sp2, Sp1, - * Mat, Mf, Mt, Ns, Iu) -C @@@@@@@ File 2 LRF=7, second line of first LIST on III-16 -C @@@@@@@ (capture "particle pair") - CALL List_7b (Ax, Ax, Ax, Amtx, Ax, Ax, - * Mat, Mf, Mt, Ns, Iu) -C @@@@@@@ File 2 LRF=7, third line of first LIST on III-16 -C @@@@@@@ but only mass of target is given here -C @@@@@@@ (capture "particle pair") - IF (Iuxx.NE.0) THEN - WRITE (Iux,10100) - CALL List_7a (Em2, Em1, Zz2, Zz1, Sp2, Sp1, - * Mat, Mfx, Mt, Ns, Iux) -C @@@@@@@ File 32 LRF=7 LCOMP=2, 2nd line of first LIST on IV-20 -C @@@@@@@ (capture "particle pair") - CALL List_7b (Ax, Ax, Ax, Amtx, Ax, Ax, - * Mat, Mfx, Mt, Ns, Iux) -C @@@@@@@ File 32 LRF=7 LCOMP=2, 3rd line of first LIST on IV-20 -C @@@@@@@ (capture "particle pair") - END IF - END IF -C - Em2 = Emmm2(1,Ig)/Aneutr - Em1 = Emmm1(1,Ig)/Aneutr - Alabcm = - Em1/(Em1+Em2) - DO I=1,Ntot(Ig) - IF ((I.EQ.1) .OR. (I.GT.1 .AND. I.GT.Nent(Ig))) THEN -C *** next pair is SAMMY's Channel I, Spin Group Ig - Em2 = Emmm2(I,Ig)/Aneutr - Em1 = Emmm1(I,Ig)/Aneutr - Zz1 = Kzzz1(I,Ig) - Kz1 = Kzzz1(I,Ig) - Zz2 = Kzzz2(I,Ig) - Sp1 = Spnn1(I,Ig) - Sp2 = Spnn2(I,Ig) - CALL List_7a (Em2, Em1, Zz2, Zz1, Sp2, Sp1, - * Mat, Mf, Mt, Ns, Iu) -C @@@@@@@ File 2 LRF=7, 2nd-last line of first LIST on III-16 -C @@@@@@@ (two true particles) - IF (Iuxx.NE.0) CALL List_7a (Em2, Em1, Zz2, Zz1, - * Sp2, Sp1, Mat, Mfx, Mt, Ns, Iux) -C @@@@@@@ File 32 LRF=7 LCOMP=2, second-from-last line of first -C @@@@@@@ LIST on IV-20 (two particles) - Q = Echan (I,Ig)/Alabcm - Ashift = Ishift(I,Ig) - Lp = Lpent (I,Ig) - Apent = Lpent (I,Ig) - Pi1 = Ax - Pi2 = Ax - CALL Get_Mat (Em2, Kz1, Sp2, Q, Inel, Lp, Amtx) - IF (Sp1.EQ.Zero) Pi1 = One - IF (Sp2.EQ.Zero) Pi2 = One - CALL List_7b (Q, Apent, Ashift, Amtx, Pi2, Pi1, - * Mat, Mf, Mt, Ns, Iu) -C @@@@@@@ File 2 LRF=7, last line of first LIST on III-16 -C @@@@@@@ (two particles) - IF (Iuxx.NE.0) CALL List_7b (Q, Apent, Ashift, - * Amtx, Pi2, Pi1, Mat, Mfx, Mt, Ns, Iux) -C @@@@@@@ File 32 LRF=7 LCOMP=2, last line in LIST on IV-20 -C @@@@@@@ (two particles) - END IF - END DO - END IF - END DO - 10 CONTINUE -C -C - ELSE C C C *** When particle-pairs were defined in INPut file C *** First, check to be sure all are actually used I_Unwanted = 0 - DO Ippair=1,Nppair - DO Ig=1,Ngroup - IF (Numiso.LE.0) THEN - K_Want = 0 + Npop = resParData%getNumParticlePair() + DO Ippair=1,Npop + DO Ig=1,resParData%getNumSpinGroups() + call resParData%getSpinGroupInfo(spinInfo, Ig) + isoIg = spinInfo%getIsotopeIndex() + IF (IsoIg.EQ.Misotp) THEN ! does it belong to the desired isotope + K_Want = 0 ELSE - call resParData%getSpinGroupInfo(spinInfo, Ig) - isoIg = spinInfo%getIsotopeIndex() - IF (IsoIg.EQ.Misotp) THEN - K_Want = 0 - ELSE - K_Want = 1 - END IF + K_Want = 1 END IF IF (K_Want.EQ.0) THEN - DO I=1,Ntot(Ig) - IF (Ippair.EQ.Kppair(I,Ig)) THEN + DO I=1,spinInfo%getNumChannels() + call spinInfo%getChannelInfo(channelInfo, I) + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, pairInfo) + call resParData%getChannel(channel, channelInfo) + IF (Ippair.EQ. + * channelInfo%getParticlePairIndex()) THEN K_Want = 0 ELSE K_Want = 1 END IF - IF (K_Want.EQ.0) THEN - GO TO 20 - END IF + IF (K_Want.EQ.0) GO TO 20 END DO - ELSE END IF END DO I_Unwanted = I_Unwanted + 1 @@ -285,7 +172,7 @@ C *** First, check to be sure all are actually used END DO C C *** Next, write into ENDF files - Npop = Nppair - I_Unwanted + 1 + Npop = Npop - I_Unwanted + 1 Npop2 = 2*Npop C 2 lines for each pair-of-particles Npop26 = 6*Npop2 @@ -301,10 +188,31 @@ C @@@@@@ File 32 LRF=7 LCOMP=2, first line of first LIST on IV-20 END IF C C *** First pair is gamma & compound nucleus - Ig = Misotp +C find the first spin group for the desired isotope + IgIso = 0 + DO Ig=1,resParData%getNumSpinGroups() + call resParData%getSpinGroupInfo(spinInfo, Ig) + isoIg = spinInfo%getIsotopeIndex() + IF (IsoIg.EQ.Misotp) THEN + IgIso = Ig + exit + end if + end do + if (Igiso.eq.0) then + STOP '[STOP in Pp7 in ndf/mndf7.f: Invalid isotope]' + end if + Ig = IgIso + call resParData%getSpinGroupInfo(spinInfo, Ig) + iela = spinInfo%getElasticChannel() + call spinInfo%getChannelInfo(channelInfo, iela) + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, pairInfo) + call resParData%getChannel(channel, channelInfo) Em2 = Zero - Em1 = Emmm1(1,Ig)/Aneutr + One - Zz1 = Kzzz1(1,Ig) + Em1 = pair%getMass(2)/Aneutr + One + Zz1 = pair%getZa(2) Zz2 = Zero Sp2 = One Sp1 = Zero @@ -327,39 +235,41 @@ C @@@@@@ File 32 LRF=7 LCOMP=2, third line of first LIST on IV-20 END IF C C *** Now the particle (non-gamma) pairs - DO Ippair=1,Nppair - DO Ig=1,Ngroup - IF (Numiso.LE.0) THEN - K_Want = 0 + DO Ippair=1,resParData%getNumParticlePair() + DO Ig=1,resParData%getNumSpinGroups() + call resParData%getSpinGroupInfo(spinInfo, Ig) + isoIg = spinInfo%getIsotopeIndex() + IF (IsoIg.EQ.Misotp) THEN ! does it belong to the desired isotope + K_Want = 0 ELSE - call resParData%getSpinGroupInfo(spinInfo, Ig) - isoIg = spinInfo%getIsotopeIndex() - IF (IsoIg.EQ.Misotp) THEN - K_Want = 0 - ELSE - K_Want = 1 - END IF + K_Want = 1 END IF IF (K_Want.EQ.0) THEN C C *** the rest of the LIST record ... pairs of particles - Em2 = Emmm2(1,Ig)/Aneutr - Em1 = Emmm1(1,Ig)/Aneutr - Alabcm = - Em1/(Em1+Em2) - DO I=1,Ntot(Ig) - IF (Ippair.EQ.Kppair(I,Ig)) THEN + DO I=1,spinInfo%getNumChannels() + call spinInfo%getChannelInfo(channelInfo, I) + + IF (Ippair.EQ. + * channelInfo%getParticlePairIndex()) THEN K_Want = 0 ELSE K_Want = 1 END IF IF (K_Want.EQ.0) THEN + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, pairInfo) + call resParData%getChannel(channel, channelInfo) + C *** next pair is SAMMY's Channel I, Spin Group Ig - Em2 = Emmm2(I,Ig)/Aneutr - Em1 = Emmm1(I,Ig)/Aneutr - Zz1 = Kzzz1(I,Ig) - Zz2 = Kzzz2(I,Ig) - Sp1 = Spnn1(I,Ig) - Sp2 = Spnn2(I,Ig) + Em2 = pair%getMass(1)/Aneutr + Em1 = pair%getMass(2)/Aneutr + Zz1 = pair%getZa(2) + Zz2 = pair%getZa(1) + Sp1 = pair%getIa(2) + Sp2 = pair%getIa(1) CALL List_7a (Em2, Em1, Zz2, Zz1, Sp2, Sp1, * Mat, Mf, Mt, Ns, Iu) C @@@@@@ File 2 LRF=7, 2nd-last line in LIST on III-16 @@ -368,10 +278,14 @@ C @@@@@@ (two particles) * Sp2, Sp1, Mat, Mfx, Mt, Ns, Iux) C @@@@@@ File 32 LRF=7 LCOMP=2, 2nd-last line in LIST on C @@@@@@ IV-20 (two particles) - Q = Echan (I,Ig)*Alabcm - Ashift = Ishift(I,Ig) - Apent = Lpent (I,Ig) - Lp = Lpent (I,Ig) + Q = pair%getQ() + if (pair%getCalcShift()) then + Ashift = 1 + else + Ashift = 0 + end if + Apent = pair%getPnt() + Lp = pair%getPnt() Pi1 = Ax Pi2 = Ax IF (Sp1.EQ.Zero) Pi1 = One @@ -394,9 +308,7 @@ C @@@@@@ IV-20 (two particles) END DO 30 CONTINUE END DO -C -C - END IF + RETURN END C diff --git a/sammy/src/ndf/mndf8.f b/sammy/src/ndf/mndf8.f index 7df1c70821fb1aad87e89455047d7504ea7315eb..e4369406f1d6e87132fad3038a97d51b1dc41d24 100755 --- a/sammy/src/ndf/mndf8.f +++ b/sammy/src/ndf/mndf8.f @@ -697,7 +697,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Write_Lcomp_1 (Ntot, Unkunc, + SUBROUTINE Write_Lcomp_1 (Unkunc, * Num_Res_Par, Mat, Mfx, Mt, Ns, Nsrs, Knofis, Lrf) C C *** PURPOSE -- Write covariance matrix in Lcomp=1 format @@ -720,8 +720,9 @@ C IMPLICIT DOUBLE PRECISION (a-h,o-z) type(SammyResonanceInfo)::resN, resL type(ResonanceCovariance)::physCov + type(SammySpinGroupInfo)::spinInfo CHARACTER*1 Aaaa(78), Bbbb(66) - DIMENSION Ntot(*), Unkunc(*) + DIMENSION Unkunc(*) DIMENSION Dum(6) DATA Zero/0.0d0/ C @@ -742,7 +743,8 @@ C ######################################################## find Ipar #### call resParData%getResonanceInfo(resN, N) IF (Lrf.EQ.7) THEN ig = resN%getSpinGroupIndex() - Nn2 = Ntot(Ig) + 2 + call resparData%getSpinGroupInfo(spinInfo, ig) + Nn2 = spinInfo%getNumChannels() + 2 ELSE Nn2 = Ntotc2 END IF @@ -776,7 +778,8 @@ C ######################################################## find Jpar #### call resParData%getResonanceInfo(resL, L) IF (Lrf.EQ.7) THEN ig = resL%getSpinGroupIndex() - Ll2 = Ntot(Ig) + 2 + call resparData%getSpinGroupInfo(spinInfo, ig) + Ll2 = spinInfo%getNumResPar() ELSE Ll2 = Ntotc2 END IF @@ -829,7 +832,8 @@ C ######################################################## find Jpar #### call resParData%getResonanceInfo(resL, L) IF (Lrf.EQ.7) THEN ig = resL%getSpinGroupIndex() - Ll2 = Ntot(Ig) + 2 + call resparData%getSpinGroupInfo(spinInfo, ig) + Ll2 = spinInfo%getNumResPar() ELSE Ll2 = Ntotc2 END IF diff --git a/sammy/src/ndf/mndf9.f b/sammy/src/ndf/mndf9.f index 709fe907ea89dfff8851247ed2ff56b25ce32333..245930a8eacff42cf219fd39e9e6dc0642d08167 100644 --- a/sammy/src/ndf/mndf9.f +++ b/sammy/src/ndf/mndf9.f @@ -638,7 +638,7 @@ C C C ______________________________________________________________ C - SUBROUTINE Findsj (Sj, Chspin, Ntotc) + SUBROUTINE Findsj (Sj) C C *** Purpose -- Determine the appropriate Sj to put into the endf file C *** Criteria - (1) ABS(Sj) = ABS(Spinj) @@ -651,27 +651,36 @@ C use SammySpinGroupInfo_M use RMatResonanceParam_M IMPLICIT DOUBLE PRECISION (A-h,o-z) - DIMENSION Sj(*), Chspin(Ntotc,*) + DIMENSION Sj(*) type(SammySpinGroupInfo)::spinInfo type(RMatSpinGroup)::spinGroup + type(SammyChannelInfo)::channelInfo + type(RMatChannelParams)::channel DATA Zero /0.0d0/ C Csmin = 100.0d0 Csmax = -100.0d0 DO I=1,resParData%getNumSpinGroups() call resParData%getSpinGroupInfo(spinInfo, I) - call resParData%getSpinGroup(spinGroup, spinInfo) + call resParData%getSpinGroup(spinGroup, spinInfo) Sj(I) = dABS(spinGroup%getJ()) - Ccccc = dABS(Chspin(1,I)) + iela = spinInfo%getElasticChannel() + call spinInfo%getChannelInfo(channelInfo, iela) + call resParData%getChannel(channel, channelInfo) + Ccccc = dABS(channel%getSch()) IF (Ccccc.GT.Csmax) Csmax = Ccccc IF (Ccccc.LT.Csmin) Csmin = Ccccc END DO C IF (Csmin.NE.Csmax) THEN DO I=1,resParData%getNumSpinGroups() - Ccccc = dABS(Chspin(1,I)) + call resParData%getSpinGroupInfo(spinInfo, I) + iela = spinInfo%getElasticChannel() + call spinInfo%getChannelInfo(channelInfo, iela) + call resParData%getChannel(channel, channelInfo) + Ccccc = dABS(channel%getSch()) IF (Ccccc.LT.Csmin .OR. Ccccc.GT.Csmax) THEN - WRITE (6,10100) Csmin, Chspin(1,I), Csmax + WRITE (6,10100) Csmin, channel%getSch(), Csmax 10100 FORMAT (' Csmin < Chspin < Csmax ', 3F6.1) STOP '[STOP in Findsj in ndf/mndf9.f]' ELSE IF (Sj(I).NE.Zero) THEN diff --git a/sammy/src/new/SetUParameters_M.f90 b/sammy/src/new/SetUParameters_M.f90 index 25d88b82daa0025fc5c9121853d43265675846b1..d453e2fd85c65f3965c29176ac8a6778dcdd9f1f 100644 --- a/sammy/src/new/SetUParameters_M.f90 +++ b/sammy/src/new/SetUParameters_M.f90 @@ -571,7 +571,7 @@ subroutine SetUParameters_setCovarianceDefault(this, factor, & igr = resInfo%getSpinGroupIndex() call resParData%getSpinGroupInfo(spinInfo, igr) - do m = 1, spinInfo%getNumChannels() + 2 + do m = 1, spinInfo%getNumResPar() ! if gamma width and gamma width data are fitted together we use miscelleanous parameters if( m.eq.2.and.spinInfo%getGammWidthParIndex().ne.0) cycle diff --git a/sammy/src/new/SetUResonanceCovData.cpp b/sammy/src/new/SetUResonanceCovData.cpp index 0d59d7ccbe46a291f88cb41dae51e0f3a6521417..9d762d2a5d78fe9fe6b9ef9b5f400b6a0e85bebd 100644 --- a/sammy/src/new/SetUResonanceCovData.cpp +++ b/sammy/src/new/SetUResonanceCovData.cpp @@ -17,7 +17,7 @@ namespace sammy{ SammySpinGroupInfo * spinInfo = resData.getSpinGroupInfo( resInfo->getSpinGroupIndex()); - for ( int ichan = 0 ; ichan < spinInfo->getNumChannels() + 1; ichan++){ // loop adds +1 since SAMMY does not count gamma channel in input + for ( int ichan = 0 ; ichan < spinInfo->getAllChannels(); ichan++){ // loop adds +1 since SAMMY does not count gamma channel in input // if the gamma width for this group are fitted as one parameter // there is no contribution to the fit parameters from the gamma width if ( spinInfo->getGammWidthParIndex() > 0 && ichan == 0) continue; @@ -39,7 +39,7 @@ namespace sammy{ resInfo->setEnergyFitOption( flag); SammySpinGroupInfo * spinInfo = resData.getSpinGroupInfo( resInfo->getSpinGroupIndex()); - for ( int ichan = 0 ; ichan < spinInfo->getNumChannels() + 1; ichan++){ + for ( int ichan = 0 ; ichan < spinInfo->getAllChannels(); ichan++){ // if the gamma width for this group are fitted as one parameter // there is no contribution to the fit parameters from the gamma width if ( spinInfo->getGammWidthParIndex() > 0 && ichan == 0){ @@ -82,14 +82,18 @@ namespace sammy{ // calculate polar fission width data if desired double p1 = 0.0,p2 = 0.0; if (polarFission && spinInfo->getNumChannels() >= 3){ // getNumChannels does not count gamma channel - double b2 = redResonance->getWidth(2); - double b3 = redResonance->getWidth(3); + int ifis1 = spinInfo->getFirstFissionChannel(); + ifis1 = spinInfo->getWidthForChannel(ifis1); + int ifis2 = spinInfo->getSecondFissionChannel(); + ifis2 = spinInfo->getWidthForChannel(ifis2); + double b2 = redResonance->getWidth(ifis1); + double b3 = redResonance->getWidth(ifis2); p1 = std::atan2(b3,b2); p2 = std::sqrt(b2 * b2 + b3 * b3); } - for ( int ichan = 0 ; ichan < spinInfo->getNumChannels()+ 1; ichan++){ + for ( int ichan = 0 ; ichan < spinInfo->getAllChannels(); ichan++){ if ( resInfo->getChannelFitOption(ichan) <= 0) continue; // if the gamma width for this group are fitted as one parameter @@ -157,7 +161,7 @@ namespace sammy{ SammySpinGroupInfo * spinInfo = resData.getSpinGroupInfo( resInfo->getSpinGroupIndex()); - for ( int ichan = 0 ; ichan < spinInfo->getNumChannels() + 1; ichan++){ + for ( int ichan = 0 ; ichan < spinInfo->getAllChannels(); ichan++){ if ( resInfo->getChannelFitOption(ichan) <= 0) continue; int ipar = covData.getCovIndex(resInfo->getChannelFitOption(ichan) - 1); if (covData.getCovariance()->getCovariance(ipar,ipar) != 0.0) continue; // already set diff --git a/sammy/src/new/mnew0.f b/sammy/src/new/mnew0.f index 3cf3a90a277f7437a88804fc386cc46a0b0e1d32..ca5f14e371f2a75a0b9e35a17c97c97a0aed7863 100644 --- a/sammy/src/new/mnew0.f +++ b/sammy/src/new/mnew0.f @@ -46,10 +46,9 @@ C call allocate_real_data(A_Idiag, K) C C *** Generate proper Zke, Zkte, Zkfe, Zeta - CALL Fxradi ( I_Intot , A_Iechan , A_Irdeff , A_Irdtru , - * A_Iemmm1 , A_Iemmm2 , I_Izzzz1 , I_Izzzz2 , I_Iigrra , - * A_Ipreff , A_Iprtru , A_Idpiso , - * A_Idsiso , A_Izke , A_Izkte , A_Izkfe , A_Izeta ) + CALL Fxradi ( I_Iigrra , + * A_Ipreff , A_Iprtru , A_Idpiso , + * A_Idsiso , A_Izke , A_Izkte , A_Izkfe , A_Izeta ) C call allocate_real_data(A_Iderpp, Nfpall) Iderpp = Idimen (1 , 1, 'Iderpp Nvpres , 1') ! do delete @@ -57,8 +56,7 @@ C Idummy = Idimen (idum_size, 1, 'Idummy Ntotc*Nres, 1') Kkrext = Nrext IF (Kkrext.EQ.0) Kkrext = 1 - CALL Betset ( A_Iprbrd , I_Iflbrd , I_Intot , - * I_Ilpent , I_Ilspin , A_Iechan , + CALL Betset ( A_Iprbrd , I_Iflbrd , A_Iechan , * A_Ipreff , I_Ifleff , A_Iprtru , I_Ifltru , * I_Ifliso , A_Iprdet , I_Ifldet , * A_Iprext , I_Iflext , @@ -114,7 +112,7 @@ C *** Read covariance data from COVariance file C IF (Nretro.EQ.1 .OR. Nretro.EQ.3) THEN C *** Convert U-covariance to P-covariance - CALL Ucov_to_Pcov (I_Iflbrd , I_Intot, A_Iderpp ) + CALL Ucov_to_Pcov (I_Iflbrd , A_Iderpp ) END IF C IF (Nretro.EQ.3 .OR. Nretro.EQ.4) THEN @@ -125,7 +123,7 @@ C *** modify all of P-covariance C IF (Nretro.EQ.2 .OR. Nretro.EQ.3 .OR. Nretro.EQ.4) THEN C *** Convert P-covariance to U-covariance - CALL Pcov_to_Ucov (I_Iflbrd , I_Intot, A_Iderpp) + CALL Pcov_to_Ucov (I_Iflbrd , A_Iderpp) END IF C IF (Fcovin.NE.0) THEN @@ -149,14 +147,13 @@ C *** Kompci=1 ==> reading from ENDF File32 (Lcomp=0, 1, or 2) idum_size = resParData%getNumResonances() Idum = Idimen (idum_size, 1, 'Nres, 1') Idii = Idimen ((idum_size+1)/2, 1, '(Nres+1)/2, 1') - CALL Covrdd_Endf_File32 (I_Intot , - * A(Idum), A(Idii), A_Idiag) + CALL Covrdd_Endf_File32 ( A(Idum), A(Idii), A_Idiag) I = Idimen (Idum, -1, 'Idum, -1') Idum = Idimen (Nvpall, 1, 'Nvpall, 1') C *** Get_Allvr converts from ENDF-style to SAMMY-style (or vv) - CALL Get_Allvr (I_Intot , A(Idum)) + CALL Get_Allvr (A(Idum)) I = Idimen (Idum, -1, 'Idum, -1') C END IF @@ -165,14 +162,14 @@ C *** Check to be sure all uncertainties are greater than zero IF (Kuncer.EQ.0) CALL Checkz (A_Idiag, Nvpall) C C *** Convert P-covariance (physParCov) to U-covariance (uCov) - CALL Pcov_to_Ucov ( I_Iflbrd , I_Intot , A_Iderpp) + CALL Pcov_to_Ucov ( I_Iflbrd , A_Iderpp) ELSE C C *** Generate prior parameter covariance (both U and P) from C *** information provided by the user C - CALL Rparfl ( I_Iflbrd , A_Idebrd , I_Intot , A_Ibcf , + CALL Rparfl ( I_Iflbrd , A_Idebrd , A_Ibcf , * A_Icf2 , I_Ifleff , A_Ideeff , I_Ifltru , A_Idetru , * I_Ifliso , A_Ideiso , I_Ifldet , A_Idedet , I_Iflext , * I_Iflmsc , A_Idemsc , I_Irdmsc , I_Iflpmc , A_Idepmc , @@ -189,10 +186,10 @@ C C IF (Ipucov.EQ.1) THEN C *** Assume U cov mtrx is diagonal; generate P-cov matrix - CALL Ucov_to_Pcov (I_Iflbrd, I_Intot, A_Iderpp) + CALL Ucov_to_Pcov (I_Iflbrd, A_Iderpp) ELSE IF (Ipucov.EQ.2) THEN C *** Assume P cov mtrx is diagonal; generate U-cov matrix - CALL Pcov_to_Ucov (I_Iflbrd , I_Intot , A_Iderpp) + CALL Pcov_to_Ucov (I_Iflbrd , A_Iderpp) END IF END IF C @@ -205,7 +202,7 @@ C I = Idimen (Iderpp, -1, 'Iderpp, -1') deallocate(A_Iderpp) C *** Generate flags associated with Zke, Zkte, Zkfe - CALL Ifxrad ( I_Intot , I_Iigrra , I_Ifleff , I_Ifltru , + CALL Ifxrad (I_Iigrra , I_Ifleff , I_Ifltru , * I_Ifliso , I_Ifzke , I_Ifzkte , I_Ifzkfe ) C IF (Kdropp.EQ.1) CALL Drop_Small @@ -217,7 +214,7 @@ C *** dependent multiplier, if applicable n_e_dep = 4*Kmax*resParData%getNumSpinGroups() Idum = Idimen (n_e_dep, 1, 'E-Dependent Dum, 1') Ix = Idimen (Nvpres, 1, 'X, 1') - CALL E_Depend_Mult (I_Intot, A(Idum), A(Ix), Kmax) + CALL E_Depend_Mult (A(Idum), A(Ix), Kmax) I = Idimen (Idum, -1, 'E-Dependent Dum, -1') END IF C @@ -351,10 +348,8 @@ C resetFitFlags is set to true Ifrex = Ifrel Ifrel = 0 C write the par file but with the new fit values - CALL Oldord ( A_Iprbrd , A(Jflbrd), A_Idebrd , - * I_Inent , I_Inext , I_Intot , I_Iishif , - * I_Ilpent , I_Ifexcl , I_Ilspin , A_Ichspi , A_Ienbnd , - * I_Ikppai , I_Ixclud , + CALL Oldord ( A_Iprbrd , A(Jflbrd), A_Idebrd , + * I_Ifexcl , * A_Ipreff , A(Jfleff), A_Ideeff , * A_Iprtru , I_Ifltru , A_Idetru , I_Iigrra , * A(Jfliso), A_Ideiso , diff --git a/sammy/src/new/mnew2.f b/sammy/src/new/mnew2.f index 638ba1052289cac7392c9eba2387a9e918305883..99deb67b8b2779fbb40ff3e01be4c9eea471e65c 100644 --- a/sammy/src/new/mnew2.f +++ b/sammy/src/new/mnew2.f @@ -45,7 +45,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Ucov_to_Pcov (Iflbrd, Ntot, Derppp) + SUBROUTINE Ucov_to_Pcov (Iflbrd, Derppp) C C *** Purpose -- Determine variance on varied parameters P when C *** have u parameter covariance from earlier SAMMY run (or somewhere else) @@ -63,11 +63,12 @@ C use ResonanceCovariance_M IMPLICIT DOUBLE PRECISION (a-h,o-z) C - DIMENSION Iflbrd(*), Ntot(*), Derppp(*) + DIMENSION Iflbrd(*), Derppp(*) C type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance type(ResonanceCovariance)::physCov + type(SammySpinGroupInfo)::spinInfo DATA Zero /0.0d0/, Half /0.5d0/, One /1.0d0/ C IF (Nvpall.NE.Nvpres) STOP '[STOP in Ucov_to_Pcov in new/mnew2.f]' @@ -98,7 +99,9 @@ C *** Now convert IF (resInfo%getEnergyFitOption().GE.0) THEN call resParData%getResonance(resonance, resInfo) eres = resonance%getEres() - Mmax2 = Ntot(resInfo%getSpinGroupIndex()) + 2 + igr = resInfo%getSpinGroupIndex() + call resparData%getSpinGroupInfo(spinInfo, Igr) + Mmax2 = spinInfo%getNumResPar() DO Mmmm=1,Mmax2 M = Mmmm Ix = 0 @@ -117,29 +120,19 @@ C *** Now convert IF (P.NE.Zero) A = uVal*Half/P Iparx = Ipar A_Pken = A - ELSE IF (M.EQ.2) THEN - P = resonance%getWidth(1) - IF (P.NE.Zero) A = uVal*Half/P - IF (P.LT.Zero) A = -A - ELSE IF (M.EQ.3) THEN - P = resonance%getWidth(M-1) - IF (P.NE.Zero) A = uVal*Half/P - IF (P.LT.Zero) A = -A - ELSE IF (M.GT.3 .AND. Kpolar.EQ.0) THEN + ELSE P = resonance%getWidth(M-1) IF (P.NE.Zero) A = uVal*Half/P IF (P.LT.Zero) A = -A - ELSE IF (M.GT.3 .AND. Kpolar.EQ.1) THEN + END IF + IF (M.GT.3 .AND. Kpolar.EQ.1) THEN P = uVal A = One - ELSE - P = Zero - A = Zero END IF IF (Derppp(Ipar).NE.Zero .AND. Iparx.NE.0) THEN Ax = - Derppp(Ipar)/A/A_Pken END IF - CALL Ucov_to_Pcov_J (Ntot, + CALL Ucov_to_Pcov_J ( * Derppp, A, Ax, Ipar, * Iparx, Iparmn) Iparmn = Iparmn + Ipar @@ -160,8 +153,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Ucov_to_Pcov_J (Ntot, - * Derppp, A, Ax, Ipar, Iparx, Iparmn) + SUBROUTINE Ucov_to_Pcov_J (Derppp, A, Ax, Ipar, Iparx, Iparmn) C C *** Called from Ucov_to_Pcov C @@ -175,8 +167,9 @@ C C type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance + type(SammySpinGroupInfo)::spinInfo type(ResonanceCovariance)::physCov, uCov - DIMENSION Ntot(*), Derppp(*) + DIMENSION Derppp(*) DATA Zero /0.0d0/, Half /0.5d0/, One /1.0d0/ C Jpar = 0 @@ -187,7 +180,9 @@ C call resParData%getResonanceInfo(resInfo, K) Jparx = 0 Kxx = K - Mmax2 = Ntot(resInfo%getSpinGroupIndex()) + 2 + igr = resInfo%getSpinGroupIndex() + call resparData%getSpinGroupInfo(spinInfo, Igr) + Mmax2 = spinInfo%getNumResPar() IF (resInfo%getEnergyFitOption().GE.0) THEN call resParData%getResonance(resonance, resInfo) eres = resonance%getEres() @@ -209,22 +204,13 @@ C B = Half*uVal/P Jparx = Jpar B_Pken = B - ELSE IF (L.EQ.2) THEN - P = resonance%getWidth(1) - B = Half*uVal/P - IF (P.LT.Zero) B = -B - ELSE IF (L.EQ.3) THEN - P = resonance%getWidth(L-1) - B = Half*uVal/P - IF (P.LT.Zero) B = -B - ELSE IF (L.GT.3 .AND. Kpolar.EQ.0) THEN + ELSE P = resonance%getWidth(L-1) B = Half*uVal/P IF (P.LT.Zero) B = -B - ELSE IF (L.GT.3 .AND. Kpolar.EQ.1) THEN + END IF + IF (L.GT.3 .AND. Kpolar.EQ.1) THEN B = One - ELSE - B = Zero END IF covU = uCov%getCovariance(ipar, jpar) cov = covU/(B*A) @@ -305,4 +291,4 @@ C Uncertainty value does not change C deallocate(Dum1) RETURN - END \ No newline at end of file + END diff --git a/sammy/src/new/mnew3.f90 b/sammy/src/new/mnew3.f90 index c168620566645cbc2ee1f0991ede2eb9369e319f..3edf335d011a165bf5ff0fd0a1df22e94b3e572d 100644 --- a/sammy/src/new/mnew3.f90 +++ b/sammy/src/new/mnew3.f90 @@ -2,7 +2,7 @@ !C !C -------------------------------------------------------------- !C - SUBROUTINE Betset (Parbrd, Iflbrd, Ntot , Lpent , Lspin , Echan , & + SUBROUTINE Betset (Parbrd, Iflbrd, Echan , & Pareff, Ifleff, Partru, Ifltru, Ifliso, Pardet, Ifldet, & Parext, Iflext, & Polar , Parmsc, Iflmsc, Iradms, Parpmc, Iflpmc, & @@ -22,8 +22,8 @@ IMPLICIT DOUBLE PRECISION (a-h,o-z) !C EXTERNAL pf - DIMENSION Parbrd(*), Iflbrd(*), Ntot(*), Lpent(Ntotc,*), & - Lspin(Ntotc,*), Echan(Ntotc,*), Pareff(*), Ifleff(*), & + DIMENSION Parbrd(*), Iflbrd(*), & + Echan(Ntotc,*), Pareff(*), Ifleff(*), & Partru(*), Ifltru(*), Ifliso(*), & Pardet(*), Ifldet(*), & Parext(Kkrext,Ntotc,*), Iflext(Kkrext,Ntotc,*), & @@ -35,9 +35,9 @@ U(*), Derppp(*), Dummy(Ntotc,*) type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance + type(SammySpinGroupInfo)::spinInfo !C -!C DIMENSION Parbrd(Numbrd), Iflbrd(Numbrd), Ntot(Ngroup), -!C * Lpent(Ntotc,Ngroup), Lspin(Ntotc,Ngroup), +!C DIMENSION Parbrd(Numbrd), Iflbrd(Numbrd), !C * Echan(Ntotc,Ngroup), Pareff(Numrad), Ifleff(Numrad), !C * Partru(Numrad), Ifltru(Numrad), Ifliso(Numiso), !C * Pardet(Numdet), Ifldet(Numdet), Parext(Nrext,Ntotc,Ngroup), @@ -65,11 +65,11 @@ IF (Kredwa.EQ.0) THEN !C *** Partial widths are in the PAR file !C reduced width are calculated - CALL Betset1 (Ntot, Lpent, Lspin, Echan, Zkte, Zeta, Dummy) + CALL Betset1 (Echan, Zkte, Zeta, Dummy) ELSE !C *** Reduced width amplitudes are in the PAR file !C partial width are calculated - CALL Betset2 (Ntot, Lpent, Lspin, Echan, Zkte, Zeta, Dummy) + CALL Betset2 (Echan, Zkte, Zeta, Dummy) END IF !C !C *** Generate polar parameters @@ -77,8 +77,14 @@ DO Ires=1,Nres call resParData%getResonanceInfo(resInfo, Ires) call resParData%getRedResonance(resonance, resInfo) - b2 = resonance%getWidth(3) - b3 = resonance%getWidth(4) + igrp = resInfo%getSpinGroupIndex() + call resparData%getSpinGroupInfo(spinInfo, Igrp) + iFis1 = spinInfo%getFirstFissionChannel() + iFis1 = spinInfo%getWidthForChannel(iFis1) + iFis2 = spinInfo%getSecondFissionChannel() + iFis2 = spinInfo%getWidthForChannel(iFis2) + b2 = resonance%getWidth(iFis1) + b3 = resonance%getWidth(iFis2) Polar(1,Ires) = dATAN2(b3, b2) Polar(2,Ires) = dSQRT(b2**2 + b3**2) END DO @@ -96,9 +102,12 @@ end if IF (resInfo%getEnergyFitOption().GE.0) THEN call resParData%getRedResonance(resonance, resInfo) - Mmaxc = Ntot(Igrp) - Mmaxc2 = Mmaxc + 2 + igrp = resInfo%getSpinGroupIndex() + call resparData%getSpinGroupInfo(spinInfo, Igrp) + Mmaxc = spinInfo%getNumChannels() + Mmaxc2 = spinInfo%getNumResPar() Ddd = Zero + iGam = spinInfo%getGammaWidthIndex() DO M=1,Mmaxc2 if (m.eq.1) then ipar = resInfo%getEnergyFitOption() @@ -119,7 +128,7 @@ Ddd = UIpar call covData%setUParamValue(ipar, UIpar) U(Ipar) = UIpar - ELSE IF (M.EQ.2) THEN + ELSE IF (M.EQ.(iGam+1)) THEN IF (Krdmsc.EQ.0) THEN Knpar = Knpar + 1 IF (covData%isPupedParameter(ipar)) THEN @@ -128,10 +137,10 @@ K1 = K1 + 1 END IF END IF - UIpar = resonance%getWidth(1) + UIpar = resonance%getWidth(iGam) call covData%setUParamValue(ipar, UIpar) U(Ipar) = UIpar - ELSE IF (M.GE.3) THEN + ELSE Knpar = Knpar + 1 IF (covData%isPupedParameter(ipar)) THEN K3 = K3 + 1 @@ -139,7 +148,8 @@ K1 = K1 + 1 END IF M2 = M - 2 - UIpar = resonance%getWidth(m2+1) + ichan = spinInfo%getWidthForChannel(M2) + UIpar = resonance%getWidth(ichan) call covData%setUParamValue(ipar, UIpar) U(Ipar) = UIpar Derppp(Ipar) = Dummy(M2,Ires) @@ -174,8 +184,9 @@ !C IF (Nfpext.GT.0) THEN !C *** REXTERNAL PARAMETERS - DO Kgroup=1,Ngroup - Mmaxc = Ntot(Kgroup) + DO Kgroup=1,resParData%getNumSpinGroups() + call resparData%getSpinGroupInfo(spinInfo, Kgroup) + Mmaxc = spinInfo%getNumChannels() DO J=1,Mmaxc IF (Iflext(1,J,Kgroup).GE.0) THEN DO Kqq=1,Nrext @@ -334,7 +345,7 @@ !C !C -------------------------------------------------------------- !C - SUBROUTINE Betset1 (Ntot, Lpent, Lspin, Echan, Zkte, Zeta, Dummy) + SUBROUTINE Betset1 (Echan, Zkte, Zeta, Dummy) !C !C *** Purpose -- Generate reduced widths when input used !C *** partial widths not reduced width parameters @@ -350,19 +361,25 @@ IMPLICIT DOUBLE PRECISION (a-h,o-z) !C EXTERNAL pf - DIMENSION Ntot(*), Lpent(Ntotc,*), Lspin(Ntotc,*), Echan(Ntotc,*), & + DIMENSION Echan(Ntotc,*), & Zkte(Ntotc,*), Zeta(Ntotc,*), Dummy(Ntotc,*) !C type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance, resonanceRed - + type(SammySpinGroupInfo)::spinInfo + type(SammyParticlePairInfo)::pairInfo + type(RMatParticlePair)::pair + type(RMatChannelParams)::channel + type(SammyChannelInfo)::channelInfo + DATA Zero /0.0d0/, One /1.0d0/, Halfth /5.d-4/, Four /4.0d0/ !C Jdopha = 0 Jdoder = 0 DO Ires=1,resParData%getNumResonances() call resParData%getResonanceInfo(resInfo, Ires) - igrp = resInfo%getSpinGroupIndex() + igrp = resInfo%getSpinGroupIndex() + call resparData%getSpinGroupInfo(spinInfo, Igrp) !C !C Need to convert all parameters, even for resonances not included in the calculation @@ -371,15 +388,23 @@ call resParData%getResonance(resonance, resInfo) call resParData%getRedResonance(resonanceRed, resInfo) eres = resonance%getEres() - Mmaxc = Ntot(Igrp) + Mmaxc = spinInfo%getNumChannels() Ig = Igrp DO J=1,Mmaxc P = One Rho = Zero - IF (resonance%getWidth(J+1).NE.Zero) THEN + ichan = spinInfo%getWidthForChannel(J) + IF (resonance%getWidth(ichan).NE.Zero) THEN Ddd = Zero - IF (Lpent(J,Ig).NE.0) THEN - Lsp = Lspin(J,Ig) + call spinInfo%getChannelInfo(channelInfo, J) + call resParData%getChannel(channel, channelInfo) + call resParData%getParticlePairInfo( & + pairInfo, & + channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, pairInfo) + call resParData%getChannel(channel, channelInfo) + IF (pair%getPnt().NE.0) THEN + Lsp = channel%getL() Q = dABS ( eres-Echan(J,Ig) ) IF (Q.NE.Zero) THEN Q = dSQRT(Q) @@ -411,7 +436,7 @@ END IF END IF !C par file contained partial width, also calculate reduced width - w1 = resonance%getWidth(J+1) + w1 = resonance%getWidth(ichan) B1 = dSQRT(Halfth* dABS(W1)/P) IF (W1.LT.Zero) B1 = -B1 call resonanceRed%setWidth(j+1, B1) @@ -419,8 +444,9 @@ END IF END DO !C -!C par file contained partial width, also calculate reduced width - gga = resonance%getWidth(1) +!C par file contained partial width, also calculate reduced width + ichan = spinInfo%getGammaWidthIndex() + gga = resonance%getWidth(ichan) G2 = Halfth*dABS(Gga) G1 = dSQRT(g2) IF (Gga.LT.Zero) G1 = - G1 @@ -432,7 +458,7 @@ !C !C -------------------------------------------------------------- !C - SUBROUTINE Betset2 (Ntot, Lpent, Lspin, Echan, Zkte, Zeta, Dummy) + SUBROUTINE Betset2 (Echan, Zkte, Zeta, Dummy) !C !C *** Purpose -- Generate reduced width when input used !C *** reduced width parameters not partial widths @@ -448,11 +474,16 @@ IMPLICIT DOUBLE PRECISION (a-h,o-z) !C EXTERNAL pf - DIMENSION Ntot(*), Lpent(Ntotc,*), Lspin(Ntotc,*), Echan(Ntotc,*), & + DIMENSION Echan(Ntotc,*), & Zkte(Ntotc,*), Zeta(Ntotc,*), Dummy(Ntotc,*) !C type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance, resonanceRed + type(SammySpinGroupInfo)::spinInfo + type(SammyParticlePairInfo)::pairInfo + type(RMatParticlePair)::pair + type(RMatChannelParams)::channel + type(SammyChannelInfo)::channelInfo DATA Zero /0.0d0/, One /1.0d0/, Halfth /5.d-4/, Four /4.0d0/ !C Jdopha = 0 @@ -460,6 +491,7 @@ DO Ires=1,resParData%getNumResonances() call resParData%getResonanceInfo(resInfo, Ires) igrp = resInfo%getSpinGroupIndex() + call resparData%getSpinGroupInfo(spinInfo, Igrp) !C !C Need to convert all parameters, even for resonances not included in the calculation @@ -467,7 +499,7 @@ !C call resParData%getResonance(resonance, resInfo) call resParData%getRedResonance(resonanceRed, resInfo) - Mmaxc = Ntot(Igrp) + Mmaxc = spinInfo%getNumChannels() Ig = Igrp factor = 1.0d0 eres = resonance%getEres() @@ -485,10 +517,18 @@ DO J=1,Mmaxc P = One Rho = Zero - IF (resonance%getWidth(J+1).NE.Zero) THEN + ichan = spinInfo%getWidthForChannel(j) + IF (resonance%getWidth(ichan).NE.Zero) THEN Ddd = Zero - IF (Lpent(J,Ig).NE.0) THEN - Lsp = Lspin(J,Ig) + call spinInfo%getChannelInfo(channelInfo, J) + call resParData%getChannel(channel, channelInfo) + call resParData%getParticlePairInfo( & + pairInfo, & + channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, pairInfo) + call resParData%getChannel(channel, channelInfo) + IF (pair%getPnt().NE.0) THEN + Lsp = channel%getL() Q = dABS ( eres-Echan(J,Ig) ) IF (Q.NE.Zero) THEN Q = dSQRT(Q) @@ -525,7 +565,7 @@ !C Thus, we make sure that the reduced width is stored in the currect spot for !C reduced width and the partial width in its spot. !C - r1 = resonance%getWidth(J+1) + r1 = resonance%getWidth(ichan) call resonanceRed%setWidth(j+1, r1) w1 = r1**2*P/Halfth IF (r1.LT.Zero) w1 = -w1 @@ -539,12 +579,13 @@ !C Thus, we make sure that the reducued width is stored in the currect spot for !C reduced width and the partial width in its spot. !C - gga = resonance%getWidth(1) + ichan = spinInfo%getGammaWidthIndex() + gga = resonance%getWidth(ichan) call resonanceRed%setWidth(1, gga) G2 = gga**2 Gga = G2/Halfth - IF (resonanceRed%getWidth(1).LT.Zero) then + IF (resonanceRed%getWidth(ichan).LT.Zero) then Gga = - Gga end if call resonance%setWidth(1, gga) diff --git a/sammy/src/new/mnew4.f b/sammy/src/new/mnew4.f index e926222c9cb9e23628db382960b47c466ce83b44..eb740091dcae5e17d20535d5f3017870ee598d2c 100644 --- a/sammy/src/new/mnew4.f +++ b/sammy/src/new/mnew4.f @@ -3,7 +3,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Rparfl (Iflbrd, Delbrd, Ntot, Bcf, Cf2, + SUBROUTINE Rparfl (Iflbrd, Delbrd, Bcf, Cf2, * Ifleff, Deleff, Ifltru, Deltru, * Ifliso, Deliso, Ifldet, Deldet, Iflext, * Iflmsc, Delmsc, Iradms, Iflpmc, Delpmc, @@ -45,7 +45,7 @@ C * Runcs(Ntotc2+1,*), * Prior(*), Ddcov(*), * Upup(*), Pdum(*), Pupcov(*), Pdumm(*) - integer::Iflbrd(*), Ntot(*), + integer::Iflbrd(*), * Ifleff(*), Ifltru(*), * Ifliso(*), Iflpmc(*), * IFldet(*), Iflext(Nrext,Ntotc,*), diff --git a/sammy/src/new/mnew6.f b/sammy/src/new/mnew6.f index 87215d21063f16247fd8e177982d4200bb727208..8a8ee903f5489111d3cfedca990fd6c4f9e8bd43 100644 --- a/sammy/src/new/mnew6.f +++ b/sammy/src/new/mnew6.f @@ -27,7 +27,7 @@ C if (resInfo%getEnergyFitOption().lt.0) cycle call resParData%getResonance(resonance, resInfo) call resParData%getSpinGroupInfo(spinInfo, igrp) - Mmax2 = spinInfo%getNumChannels() + 2 + Mmax2 = spinInfo%getNumResPar() DO M=1,Mmax2 @@ -55,18 +55,11 @@ C uVal = covData%getUParamValue(Ifl) IF (M.EQ.1) THEN P = resonance%getEres() - ELSE IF (M.EQ.2) THEN - P = resonance%getWidth(1) ELSE - IF (Kpolar.EQ.0) THEN - P = resonance%getWidth(m-1) - ELSE - IF (M.EQ.3) THEN - P = resonance%getWidth(M-1) - ELSE - P = uVal - END IF - END IF + P = resonance%getWidth(M-1) + END IF + IF (Kpolar.EQ.1.AND.M.GT.3) THEN + P = uVal END IF diff --git a/sammy/src/new/mnew9.f b/sammy/src/new/mnew9.f index 7c438610372637b0dab6292e230ac8702bee4123..1f00d1ea7a6e8a255ddebe198f993406eee354ea 100644 --- a/sammy/src/new/mnew9.f +++ b/sammy/src/new/mnew9.f @@ -2,7 +2,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Covrdd_Endf_File32 (Ntot, Dum, + SUBROUTINE Covrdd_Endf_File32 (Dum, * Idiag, Diag) C C *** Purpose -- Read ENDf File32 and decide whether Lcomp = 0, 1, or 2 @@ -11,8 +11,7 @@ C use namfil_common_m IMPLICIT DOUBLE PRECISION (a-h,o-z) CHARACTER*1 A(66) - DIMENSION Ntot(*), Dum(*), - * Idiag(*), Diag(*) + DIMENSION Dum(*), Idiag(*), Diag(*) C N = Nvpall N = (N*(N+1))/2 @@ -60,14 +59,14 @@ C STOP '[STOP in Covrdd_Endf_File32 in mnew9.f # 3]' END IF ELSE IF (Lcomp.EQ.1) THEN - CALL Covrdd_Lcomp_1 (Ntot, Dum, Idiag, + CALL Covrdd_Lcomp_1 (Dum, Idiag, * Diag, Lrf) ELSE IF (Lcomp.EQ.2) THEN IF (Lrf.NE.7) THEN - CALL Covrdd_Lcomp_2 (Ntot, Dum, Idiag, Diag, + CALL Covrdd_Lcomp_2 (Dum, Idiag, Diag, * Lrf, Ndigit) ELSE - CALL Covrdd_Lcomp_27 (Ntot, Dum, Idiag, Diag, + CALL Covrdd_Lcomp_27 (Dum, Idiag, Diag, * Igg, Ndigit) END IF ELSE @@ -180,7 +179,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Covrdd_Lcomp_1 (Ntot, Dum, Idiag, + SUBROUTINE Covrdd_Lcomp_1 (Dum, Idiag, * Diag, Lrf) cx * Diag, Lrf, Igg) C @@ -196,8 +195,8 @@ C type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance type(ResonanceCovariance)::physCov - DIMENSION Ntot(*), Dum(*), - * Idiag(*), Diag(*), B(6) + type(SammySpinGroupInfo)::spinInfo + DIMENSION Dum(*), Idiag(*), Diag(*), B(6) DATA Zero/0.0d0/, Small /0.0000001/, Thous /1000.0d0/ C C *** Nsrs = Number of Short-Range Sections @@ -264,7 +263,8 @@ C *** Now read # of channels, # of resonances in that spin group if (.not.resInfo%getIncludeInCalc()) then igr = -1 * igr end if - Ntotc2x = Ntot(Igr) + 2 + call resparData%getSpinGroupInfo(spinInfo, igr) + Ntotc2x = spinInfo%getNumResPar() IF (Ntotc2x.NE.Ntotcx+1) THEN WRITE (6,10775) Ntotc2x, Ntotcx WRITE (21,10775) Ntotc2x, Ntotcx @@ -319,7 +319,8 @@ C if (.not.resInfo%getIncludeInCalc()) then igr = -1 * igr end if - Knofis = Ntot(Igr) + 2 + call resparData%getSpinGroupInfo(spinInfo, igr) + Knofis = spinInfo%getNumResPar() end if Kchan = 0 Jx = 1 @@ -351,8 +352,9 @@ C *** Organize to look like SAMMY covariance matrix igr = resInfo%getSpinGroupIndex() if (.not.resInfo%getIncludeInCalc()) then igr = -1 * igr - end if - Knofis = Ntot(Igr) + 2 + end if + call resparData%getSpinGroupInfo(spinInfo, igr) + Knofis = spinInfo%getNumResPar() end if ELSE IF (Kres.GT.Nrb) THEN Kchan = Jchan + 1 @@ -363,8 +365,9 @@ C *** Organize to look like SAMMY covariance matrix igr = resInfo%getSpinGroupIndex() if (.not.resInfo%getIncludeInCalc()) then igr = -1 * igr - end if - Knofis = Ntot(Igr) + 2 + end if + call resparData%getSpinGroupInfo(spinInfo, igr) + Knofis = spinInfo%getNumResPar() end if Kx = Jx + 1 IF (Kchan.GT.Knofis) THEN @@ -377,8 +380,9 @@ C *** Organize to look like SAMMY covariance matrix igr = resInfo%getSpinGroupIndex() if (.not.resInfo%getIncludeInCalc()) then igr = -1 * igr - end if - Knofis = Ntot(Igr) + 2 + end if + call resparData%getSpinGroupInfo(spinInfo, igr) + Knofis = spinInfo%getNumResPar() end if END IF Jchan = Kchan @@ -461,7 +465,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Covrdd_Lcomp_2 (Ntot, Dum, Idiag, Diag, + SUBROUTINE Covrdd_Lcomp_2 (Dum, Idiag, Diag, * Lrf, Ndigit) C C *** Purpose -- Read initial covariance matrix in ENDf Lcomp=2 format @@ -476,7 +480,8 @@ C type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance type(ResonanceCovariance)::physCov - DIMENSION Ntot(*), Dum(*), Idiag(*), Diag(*), + type(SammySpinGroupInfo)::spinInfo + DIMENSION Dum(*), Idiag(*), Diag(*), * B(6), Mm(18) DATA Zero/0.0d0/, Thous /1000.0d0/ Half /0.5d0/ Itu = 0 @@ -629,7 +634,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Covrdd_Lcomp_27 (Ntot, Dum, Idiag, Diag, + SUBROUTINE Covrdd_Lcomp_27 (Dum, Idiag, Diag, * Igg, Ndigit) C C *** Purpose -- Read initial covariance matrix in ENDf Lcomp=2 format, @@ -645,7 +650,8 @@ C type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance type(ResonanceCovariance)::physCov - DIMENSION Ntot(*), Dum(*), Idiag(*), Diag(*), + type(SammySpinGroupInfo)::spinInfo + DIMENSION Dum(*), Idiag(*), Diag(*), * Gn(50), dGn(50), Mm(18) DATA Zero /0.0d0/, Thous /1000.0d0/ DATA Small /0.000001d0/ @@ -679,16 +685,18 @@ C *** Read the channel info for this group C C *** Find number of resonances for this spin group READ (62,10100) Ndum, Nresg - IF (Ntotcx.NE.Ntot(Ig)+1) THEN - WRITE (6,10300) Ntotcx, Ntot(Ig), Ig + call resparData%getSpinGroupInfo(spinInfo, Ig) + Ntot = spinInfo%getNumChannels() + IF (Ntotcx.NE.Ntot+1) THEN + WRITE (6,10300) Ntotcx, Ntot, Ig 10300 FORMAT ('Ntotcx.NE.Ntot(Ig)+1', 10i5) STOP '[STOP in Covrdd_Lcomp_27 in new/mnew9.f #1]' END IF IF (Nresg.GT.0) THEN DO Kr=1,Nresg Kres = Kres + 1 - READ (62,10400) E, Gg, (Gn(I),I=1,Ntot(Ig)) - READ (62,10400) dE, dGg, (dGn(I),I=1,Ntot(Ig)) + READ (62,10400) E, Gg, (Gn(I),I=1,Ntot) + READ (62,10400) dE, dGg, (dGn(I),I=1,Ntot) 10400 FORMAT (6E11.1) Dum(Kres) = E DO Ires=Ires_Sam+1,resParData%getNumResonances() @@ -700,7 +708,7 @@ C *** Find number of resonances for this spin group Ires_Sam = Ires GO TO 10 ELSE - Ipar_Sammy = Ipar_Sammy + 2 + Ntot(Ig) + Ipar_Sammy = Ipar_Sammy + 2 + Ntot END IF END DO 10 CONTINUE @@ -712,7 +720,7 @@ C *** Find number of resonances for this spin group Ipar_Endf = Ipar_Endf + 1 Idiag(Ipar_Endf) = Ii Diag(Ii) = Unc_Or_Default (dGg, Gg, 'g', Itu) * Thous - DO I=1,Ntot(Ig) + DO I=1,Ntot Ii = Ii + 1 Ipar_Endf = Ipar_Endf + 1 Idiag(Ipar_Endf) = Ii @@ -845,7 +853,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Pcov_to_Ucov (Iflbrd, Ntot, Derppp) + SUBROUTINE Pcov_to_Ucov (Iflbrd, Derppp) C C *** PURPOSE -- Determine variance uParCov on varied parameters U when C *** know covariance information (phys parameter Cov) from ENDF file @@ -862,10 +870,11 @@ C use RMatResonanceParam_M IMPLICIT DOUBLE PRECISION (a-h,o-z) C - DIMENSION Iflbrd(*), Ntot(*), Derppp(*) + DIMENSION Iflbrd(*), Derppp(*) C type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance + type(SammySpinGroupInfo)::spinInfo DATA Zero /0.0d0/, Half /0.5d0/, One /1.0d0/ C IF (Nvpall.NE.Nvpres) STOP '[STOP in Pcov_to_Ucov in new/mnew9.f]' @@ -889,7 +898,8 @@ C IF (resInfo%getEnergyFitOption().GE.0) THEN call resParData%getResonance(resonance, resInfo) eres = resonance%getEres() - Mmax2 = Ntot(Igr) + 2 + call resparData%getSpinGroupInfo(spinInfo, igr) + Mmax2 = spinInfo%getNumResPar() DO Mmmm=1,Mmax2 M = Mmmm if (m.eq.1) then @@ -906,27 +916,17 @@ C P = eres IF (P.NE.Zero) A = uVal*Half/P Iparx = Ipar - ELSE IF (M.EQ.2) THEN - P = resonance%getWidth(1) - IF (P.LT.Zero) P = -P - IF (P.NE.Zero) A = uVal*Half/P - ELSE IF (M.EQ.3) THEN - P = resonance%getWidth(M-1) - IF (P.LT.Zero) P = -P - IF (P.NE.Zero) A = uVal*Half/P - ELSE IF (M.GT.3 .AND. Kpolar.EQ.0) THEN + ELSE P = resonance%getWidth(M-1) IF (P.LT.Zero) P = -P IF (P.NE.Zero) A = uVal*Half/P - ELSE IF (M.GT.3 .AND. Kpolar.EQ.1) THEN + END IF + IF (M.GT.3 .AND. Kpolar.EQ.1) THEN P = uVal A = One - ELSE - P = Zero - A = Zero END IF Ax = Derppp(Ipar) - CALL Pcov_to_Ucov_J (Ntot, + CALL Pcov_to_Ucov_J ( * Derppp, A, Ax, Ipar, * Iparx, Iparmn) Iparmn = Iparmn + Ipar @@ -948,7 +948,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Pcov_to_Ucov_J (Ntot, + SUBROUTINE Pcov_to_Ucov_J ( * Derppp, A, Ax, Ipar, Iparx, Iparmn) C C *** called from Pcov_to_Ucov @@ -963,8 +963,9 @@ C C type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance + type(SammySpinGroupInfo)::spinInfo type(ResonanceCovariance)::physCov, uCov - DIMENSION Ntot(*), Derppp(*) + DIMENSION Derppp(*) DATA Zero /0.0d0/, Half /0.5d0/, One /1.0d0/ C call covData%getCovariance(physCov) @@ -980,7 +981,8 @@ C Jparx = 0 Kxx = K - Mmax2 = Ntot(Igr) + 2 + call resparData%getSpinGroupInfo(spinInfo, Igr) + Mmax2 = spinInfo%getNumResPar() IF (resInfo%getEnergyFitOption().GE.0) THEN call resParData%getResonance(resonance, resInfo) eres = resonance%getEres() @@ -1004,26 +1006,13 @@ C P = eres B = Half*uVal/P Jparx = Jpar - ELSE IF (L.EQ.2) THEN - P = resonance%getWidth(1) - IF (P.LT.Zero) P = -P - B = Half*uVal/P - ELSE IF (L.EQ.3) THEN + ELSE P = resonance%getWidth(L-1) IF (P.LT.Zero) P = -P - B = Half*uVal/P - ELSE IF (L.GT.3 .AND. Kpolar.EQ.0) THEN - P = resonance%getWidth(L-1) - IF (P.NE.Zero) THEN - IF (P.LT.Zero) P = -P - B = Half*uVal/P - ELSE - B = Zero - END IF - ELSE IF (L.GT.3 .AND. Kpolar.EQ.1) THEN + IF (P.NE.ZERO) B = Half*uVal/P + END IF + IF (L.GT.3 .AND. Kpolar.EQ.1) THEN B = One - ELSE - B = Zero END IF covP = physCov%getCovariance(ipar,jpar) cov = A*covP*B diff --git a/sammy/src/ntg/mntg2.f b/sammy/src/ntg/mntg2.f index 8ced2499b37ba7def75b3d7da5c969f4a359f690..e4435a4e154eb14344b4ba7259cf6c7d52fc695d 100644 --- a/sammy/src/ntg/mntg2.f +++ b/sammy/src/ntg/mntg2.f @@ -88,7 +88,7 @@ C *** J = 1 Kountr=1+Many*(Iso-1) thermal cross section * Vdbsig, Isopar, Kdatb, Numntg, Iso, Kountr) C C *** Findem locates the highest energy at which there is a resonance - CALL Findem (I_Intot , Resmax) + CALL Findem (Resmax) C C *** J = 2 Maxwellian average C *** Kountr = J + Many*(Iso-1) [+2 if fissile] diff --git a/sammy/src/ntg/mntg3.f b/sammy/src/ntg/mntg3.f index 44823046e798cfb93a96d0ef6b488f98c3eebe04..87e20ed7c817287dcfdb2890fd4b67ef8c3def24 100644 --- a/sammy/src/ntg/mntg3.f +++ b/sammy/src/ntg/mntg3.f @@ -124,7 +124,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Findem (Ntot, Resmax) + SUBROUTINE Findem (Resmax) C C *** Purpose ... find maximum energy for influence from resonances C @@ -135,12 +135,12 @@ C use RMatResonanceParam_M IMPLICIT none type(SammyResonanceInfo)::resInfo + type(SammySpinGroupInfo)::spinInfo type(RMatResonance)::resonance - integer:: Ntot(*) real(kind=8)::Resmax real(kind=8)::Rrrmax,eres, E, Width - integer::I, J, Ntotci + integer::I, J, Ntotci, igr C Rrrmax = 0.0d0 DO I=1,resParData%getNumResonances() @@ -148,8 +148,10 @@ C call resParData%getResonance(resonance, resInfo) eres = resonance%getEres() IF (eres.LE.Emax .AND. eres.GE.Emin) THEN - Width = resonance%getWidth(1) - Ntotci = Ntot(resInfo%getSpinGroupIndex()) + Width = 0.0d0 + igr = resInfo%getSpinGroupIndex() + call resParData%getSpinGroupInfo(spinInfo, igr) + Ntotci = spinInfo%getAllChannels() DO J=1,Ntotci Width = Width + dABS(resonance%getWidth(J+1)) END DO diff --git a/sammy/src/old/mold0.f b/sammy/src/old/mold0.f index 47f8431a6e9aafa38f7ed82ba04d8b940dd9323d..bfc3245e2cfe5731ac6d4dc408ad772562ca9af5 100644 --- a/sammy/src/old/mold0.f +++ b/sammy/src/old/mold0.f @@ -106,17 +106,16 @@ C *** dependent multiplier, if applicable CALL Get_E_Dep (Kmax) Idum = Idimen (4*Kmax*Ngroup, 1, 'E-Dependent Dum, 1') Ix = Idimen (Nvpres, 1, 'X, 1') - CALL E_Depend_Mult (I_Intot, A(Idum), A(Ix), Kmax) + CALL E_Depend_Mult (A(Idum), A(Ix), Kmax) I = Idimen (Idum, -1, 'E-Dependent Dum, -1') END IF C C *** Generate proper Zke, Zkte, Zkfe, Zeta - CALL Fxradi ( I_Intot , A_Iechan , A_Irdeff , A_Irdtru , - * A_Iemmm1 , A_Iemmm2 , I_Izzzz1 , I_Izzzz2 , I_Iigrra , - * A_Ipreff , A_Iprtru , A_Idpiso , - * A_Idsiso , A_Izke , A_Izkte , A_Izkfe , A_Izeta ) + CALL Fxradi ( I_Iigrra , + * A_Ipreff , A_Iprtru , A_Idpiso , + * A_Idsiso , A_Izke , A_Izkte , A_Izkfe , A_Izeta ) C *** Generate associated flags - CALL Ifxrad ( I_Intot , I_Iigrra , I_Ifleff , I_Ifltru , + CALL Ifxrad (I_Iigrra , I_Ifleff , I_Ifltru , * I_Ifliso , I_Ifzke , I_Ifzkte , I_Ifzkfe ) C C *** Organized PUPs @@ -138,8 +137,8 @@ C Ix = Idimen (K, 1, 'X K, 1') Iy = Idimen (K, 1, 'Y K, 1') Ikntr = Idimen (K, 1, 'Kntr K, 1') - CALL Addup ( I_Ilspin , - * A_Izkte , A_Igoj , A(Iallvr), + CALL Addup ( + * A_Izkte , A(Iallvr), * A(Idiag), A(Id ), A(Ix ), A(Iy ), A(Ikntr )) C *** Sub routine Addup calculates the summed strength function STOP @@ -204,8 +203,7 @@ C call allocate_real_data(A_Ipupcv, Nn) Kkrext = Nrext IF (Kkrext.EQ.0) Kkrext = 1 - CALL Bet_Pup( A_Iprbrd , I_Iflbrd , I_Intot , - * I_Ilpent , I_Ilspin , A_Iechan , + CALL Bet_Pup( A_Iprbrd , I_Iflbrd , A_Iechan , * A_Ipreff , I_Ifleff , A_Iprtru , I_Ifltru , * I_Ifliso , A_Iprdet , I_Ifldet , * A_Iprext , I_Iflext , @@ -216,7 +214,7 @@ C * A_Iprdtp , I_Ifldtp , A_Izkte , A_Izeta , * A_Iupupx , Kkrext) CALL Rparfl_Pup (I_Iflbrd , A_Idebrd , - * I_Intot , A_Ibcf , A_Icf2 , + * A_Ibcf , A_Icf2 , * I_Ifleff , A_Ideeff , I_Ifltru , A_Idetru , * I_Ifliso , A_Ideiso , I_Ifldet , A_Idedet , I_Iflext , * A_Iprmsc , I_Iflmsc , A_Idemsc , I_Irdmsc , diff --git a/sammy/src/old/mold1.f b/sammy/src/old/mold1.f index 8bf0b0d24bcd66fa58e6d6a26b79036963990faa..9a8b6cbeff7817d95e5f29031d45c9170c437bcb 100644 --- a/sammy/src/old/mold1.f +++ b/sammy/src/old/mold1.f @@ -2,9 +2,8 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Fxradi (Ntot, Echan, Rdeff, Rdtru, Emmm1, Emmm2, - * Kzzz1, Kzzz2, Igrrad, Pareff, Partru, Dopwid, - * Doswid, Zke, Zkte, Zkfe, Zeta) + SUBROUTINE Fxradi (Igrrad, Pareff, Partru, Dopwid, + * Doswid, Zke, Zkte, Zkfe, Zeta) C C *** Purpose -- Fix the following parameters: C *** Zke , where k = Zke * sqrt(E) @@ -22,13 +21,16 @@ C use SammySpinGroupInfo_M IMPLICIT DOUBLE PRECISION (a-h,o-z) C - DIMENSION Ntot(*), Echan(Ntotc,*), Rdeff(Ntotc,*), Rdtru(Ntotc,*), - * Emmm1(Ntotc,*), Emmm2(Ntotc,*), Kzzz1(Ntotc,*), Kzzz2(Ntotc,*), + DIMENSION * Igrrad(Ntotc,*), Pareff(*), Partru(*), * Dopwid(*), Doswid(*), Zkte(Ntotc,*), Zkfe(Ntotc,*), * Zke(Ntotc,*), Zeta(Ntotc,*) C type(SammySpinGroupInfo)::spinInfo + type(SammyParticlePairInfo)::pairInfo + type(RMatParticlePair)::pair + type(SammyChannelInfo)::channelInfo + type(RMatChannelParams)::channel DATA Zero /0.0d0/ C IF (A_Mass_Small.NE.Aneutr) THEN @@ -43,21 +45,26 @@ C CALL Zero_Array (Zeta, Ntotc*Ngroup) C IF (Numiso.GT.0) THEN - DO Kgroup=1,Ngroup - Ntotnn = Ntot(Kgroup) + DO Kgroup=1,resParData%getNumSpinGroups() call resParData%getSpinGroupInfo(spinInfo, Kgroup) + Ntotnn = spinInfo%getNumChannels() Kgriso = spinInfo%getIsotopeIndex() IF (Kgriso.NE.0) THEN DO Ichan=1,Ntotnn - IF (Emmm1(Ichan,Kgroup).EQ.Zero) THEN - Emmm1(Ichan,Kgroup) = - * resParData%getMassForIsotope(Kgriso) - END IF - IF (Emmm2(Ichan,Kgroup).EQ.Zero) THEN - Emmm2(Ichan,Kgroup) = Aneutr - ELSE - IF (Ichan.EQ.1) A_Mass_Small = Emmm2(Ichan,Kgroup) + call spinInfo%getChannelInfo(channelInfo, Ichan) + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, pairInfo) + IF (Ichan.EQ.1) A_Mass_Small = pair%getMass(1) + + IF (pair%getMass(2).EQ.Zero) THEN + call pair%setMass(2, + * resParData%getMassForIsotope(Kgriso)) END IF + IF (pair%getMass(1).EQ.Zero) THEN + call pair%setMass(1,Aneutr) + end if END DO END IF END DO @@ -82,16 +89,22 @@ C C *** here Numiso.EQ.0 Dopwid(1) = Dopple Doswid(1) = Dosind - DO Kgroup=1,Ngroup - Ntotnn = Ntot(Kgroup) + DO Kgroup=1,resParData%getNumSpinGroups() + call resParData%getSpinGroupInfo(spinInfo, Kgroup) + Ntotnn = spinInfo%getNumChannels() DO Ichan=1,Ntotnn - IF (Emmm1(Ichan,Kgroup).EQ.Zero) THEN - Emmm1(Ichan,Kgroup) = Aaawww - END IF - IF (Emmm2(Ichan,Kgroup).EQ.Zero) THEN - Emmm2(Ichan,Kgroup) = Aneutr - ELSE - IF (Ichan.EQ.1) A_mass_Small = Emmm2(Ichan,Kgroup) + call spinInfo%getChannelInfo(channelInfo, Ichan) + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, pairInfo) + IF (Ichan.EQ.1) A_mass_Small = pair%getMass(1) + + IF (pair%getMass(2).EQ.Zero) THEN + call pair%setMass(2, Aaawww) + end if + IF (pair%getMass(1).EQ.Zero) THEN + call pair%setMass(1,Aneutr) END IF END DO END DO @@ -106,15 +119,31 @@ C *** February 2003 How do we ensure that we don't do this more than once? C C - DO Kgroup=1,Ngroup - Ntotnn = Ntot(Kgroup) - Factor = Emmm1(1,Kgroup) + Emmm2(1,Kgroup) - Alabcm = Emmm1(1,Kgroup)/Factor - Factor = Alabcm/Emmm2(1,Kgroup) + DO Kgroup=1,resParData%getNumSpinGroups() + call resParData%getSpinGroupInfo(spinInfo, Kgroup) + Ntotnn = spinInfo%getNumChannels() + + iela = spinInfo%getElasticChannel() + call spinInfo%getChannelInfo(channelInfo, iela) + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, pairInfo) + Factor = pair%getMass(2) + pair%getMass(1) + Alabcm = pair%getMass(2)/Factor + Factor = Alabcm/pair%getMass(1) DO Ichan=1,Ntotnn - Aa = Emmm1(Ichan,Kgroup) + Emmm2(Ichan,Kgroup) - Aa = Emmm1(Ichan,Kgroup)/Aa - Redmas = Aa * Emmm2(Ichan,Kgroup) + call spinInfo%getChannelInfo(channelInfo, Ichan) + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, pairInfo) + call resParData%getChannel(channel, channelInfo) + + Aa = pair%getMass(2) + pair%getMass(1) + Aa = pair%getMass(2)/Aa + Redmas = Aa * pair%getMass(1) + Zke(Ichan,Kgroup) = Twomhb * dSQRT(Redmas*Factor) IF (Numrad.GT.0) THEN Kgrrad = Igrrad(Ichan,Kgroup) @@ -123,14 +152,14 @@ C ELSE At = Crfn Af = Crfn - IF (Rdtru(Ichan,Kgroup).NE.Zero) At = Rdtru(Ichan,Kgroup) - IF (Rdeff(Ichan,Kgroup).NE.Zero) Af = Rdeff(Ichan,Kgroup) + IF (channel%getApt().NE.Zero) At = channel%getApt() + IF (channel%getApe().NE.Zero) Af = channel%getApe() Zkte(Ichan,Kgroup) = Zke(Ichan,Kgroup)*At Zkfe(Ichan,Kgroup) = Zke(Ichan,Kgroup)*Af END IF - IF (Kzzz1(Ichan,Kgroup).NE.0 .AND. Kzzz2(Ichan,Kgroup).NE.0) + IF (pair%getZa(2).NE.0 .AND. pair%getZa(1).NE.0) & THEN - Docoul = Dfloat(Kzzz1(Ichan,Kgroup)*Kzzz2(Ichan,Kgroup)) + Docoul = Dfloat(pair%getZa(2)*pair%getZa(1)) Zeta(Ichan,Kgroup) = Etac*Docoul*Redmas/Zke(Ichan,Kgroup) ELSE END IF @@ -144,7 +173,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Ifxrad (Ntot, Igrrad, Iffeff, Ifftru, Iffiso, + SUBROUTINE Ifxrad (Igrrad, Iffeff, Ifftru, Iffiso, * If_Zke , If_Zkte, If_Zkfe) C C *** Purpose -- Fix the following flags: @@ -159,7 +188,6 @@ C use SammySpinGroupInfo_M IMPLICIT DOUBLE PRECISION (a-h,o-z) C - DIMENSION Ntot(*) DIMENSION Igrrad(Ntotc,*), Iffeff(*), Ifftru(*), Iffiso(*) DIMENSION If_Zke(Ngroup), If_Zkte(Ntotc,Ngroup), If_Zkfe(Ntotc,*) C @@ -171,7 +199,7 @@ C C C IF (Numiso.GT.0) THEN - DO Kgroup=1,Ngroup + DO Kgroup=1,resparData%getNumSpinGroups() call resParData%getSpinGroupInfo(spinInfo, Kgroup) Kgriso = spinInfo%getIsotopeIndex() IF (Kgriso.EQ.0) GO TO 10 @@ -182,8 +210,9 @@ C C IF (Numrad.GT.0) THEN C *** Here Numiso.GT.0 and Numrad.GT.0 - DO Kgroup=1,Ngroup - Ntotnn = Ntot(Kgroup) + DO Kgroup=1,resparData%getNumSpinGroups() + call resParData%getSpinGroupInfo(spinInfo, Kgroup) + Ntotnn = spinInfo%getNumChannels() DO Ichan=1,Ntotnn Kgrrad = Igrrad(Ichan,Kgroup) IF (Ifftru(Kgrrad).GT.0) If_Zkte(Ichan,Kgroup) = @@ -195,8 +224,9 @@ C *** Here Numiso.GT.0 and Numrad.GT.0 C ELSE C *** Here Numiso.GT.0 but Numrad.EQ.0 - DO Kgroup=1,Ngroup - Ntotnn = Ntot(Kgroup) + DO Kgroup=1,resparData%getNumSpinGroups() + call resParData%getSpinGroupInfo(spinInfo, Kgroup) + Ntotnn = spinInfo%getNumChannels() DO Ichan=1,Ntotnn IF (Kvcrfn.NE.0) IF_Zkte(Ichan,Kgroup) = Kvcrfn IF (Kvcrfn.NE.0) IF_Zkfe(Ichan,Kgroup) = Kvcrfn @@ -207,8 +237,9 @@ C ELSE IF (Numrad.GT.0) THEN C *** Here Numiso.EQ.0 but Numrad.GT.0 - DO Kgroup=1,Ngroup - Ntotnn = Ntot(Kgroup) + DO Kgroup=1,resparData%getNumSpinGroups() + call resParData%getSpinGroupInfo(spinInfo, Kgroup) + Ntotnn = spinInfo%getNumChannels() DO Ichan=1,Ntotnn Kgrrad = Igrrad(Ichan,Kgroup) IF (Ifftru(Kgrrad).GT.0) IF_Zkte(Ichan,Kgroup) = @@ -221,8 +252,9 @@ C ELSE C C *** Here Numiso.EQ.0 and Numrad.EQ.0 - DO Kgroup=1,Ngroup - Ntotnn = Ntot(Kgroup) + DO Kgroup=1,resparData%getNumSpinGroups() + call resParData%getSpinGroupInfo(spinInfo, Kgroup) + Ntotnn = spinInfo%getNumChannels() DO Ichan=1,Ntotnn IF (Kvcrfn.GT.0) IF_Zkte(Ichan,Kgroup) = Kvcrfn IF (Kvcrfn.GT.0) IF_Zkfe(Ichan,Kgroup) = Kvcrfn @@ -235,7 +267,7 @@ C C *** Set Kvprrt & Kvprrf = 0 if no flags, 1 if any are varied Kvprrt = 0 Kvprrf = 0 - DO Kgroup=1,Ngroup + DO Kgroup=1,resparData%getNumSpinGroups() DO Ichan=1,Ntotc IF (If_Zkte(Ichan,Kgroup).NE.0) THEN Kvprrt = 1 @@ -244,7 +276,7 @@ C *** Set Kvprrt & Kvprrf = 0 if no flags, 1 if any are varied END DO END DO 20 CONTINUE - DO Kgroup=1,Ngroup + DO Kgroup=1,resparData%getNumSpinGroups() DO Ichan=1,Ntotc IF (IF_Zkfe(Ichan,Kgroup).NE.0) THEN Kvprrf = 1 @@ -313,15 +345,12 @@ C END IF C C - IF (Kreduc.NE.0) CALL Outred ( A_Igoj , - * I_Intot , I_Ilspin , A_Ichspi , N) + IF (Kreduc.NE.0) CALL Outred (N) C IF (Kreduc.NE.0 .AND. Ksolve.NE.2 .AND. Kgenpd.EQ.0) CALL Outvr ( * A(Idump)) C - IF (Kmlbw.NE.0) CALL Outmlb ( A_Igoj , - * I_Intot , I_Iishif , I_Ilspin , A_Ibound , A_Iechan , - * A_Izkte , N) + IF (Kmlbw.NE.0) CALL Outmlb (A_Ibound , A_Iechan ,A_Izkte , N) C I = Idimen (Idump, -1, 'Idump, -1') RETURN diff --git a/sammy/src/old/mold4.f90 b/sammy/src/old/mold4.f90 index 0170323a214a9c81f6c6cdfddc3e372566e55374..05a3dfdc7e4fa5ef8f9eef76b47de5453d95948c 100644 --- a/sammy/src/old/mold4.f90 +++ b/sammy/src/old/mold4.f90 @@ -502,7 +502,7 @@ END SUBROUTINE ! ! -------------------------------------------------------------- ! - SUBROUTINE E_Depend_Mult_int (Ntot, Dum, Xx, Kmax) + SUBROUTINE E_Depend_Mult_int (Dum, Xx, Kmax) ! *** Purpose -- Read E-dependent initial uncertainty multiplier file, ! *** modify initial covariance matrix appropriately use fixedi_m @@ -519,13 +519,13 @@ END SUBROUTINE Integer :: Kmax, Iflr, Jpar, J, Ires, Ipar Integer :: Ij, Ii, Igr, I, Mmax, Mmax2, M, Kpound, Kk, K Double precision :: Dd, E2, E1, E, X1, X2, X, Xxx, cov, covU - Integer, Dimension(*) :: Ntot Double Precision, Dimension(4,Kmax,*) :: Dum Double Precision, Dimension(*) :: Xx Double Precision, Parameter :: Zero = 0.0d0 Double Precision, Parameter :: One = 1.0d0 type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance + type(SammySpinGroupInfo)::spinInfo type(ResonanceCovariance)::physCov, uCov ! DATA Zero /0.0d0/, One /1.0d0/ @@ -608,8 +608,9 @@ END SUBROUTINE END IF END DO 50 CONTINUE - Mmax = Ntot(Igr) - Mmax2 = Mmax + 2 + call resparData%getSpinGroupInfo(spinInfo, Igr) + Mmax = spinInfo%getNumChannels() + Mmax2 = spinInfo%getNumResPar() Iflr = resInfo%getEnergyFitOption() IF (Iflr.GT.0 .AND. Iflr.LE.Nfpres) THEN Ipar = Ipar + 1 @@ -856,7 +857,7 @@ END MODULE mold4_m -SUBROUTINE E_Depend_Mult (Ntot, Dum, Xx, Kmax) +SUBROUTINE E_Depend_Mult (Dum, Xx, Kmax) ! *** Purpose -- Read E-dependent initial uncertainty multiplier file, ! *** modify initial covariance matrix appropriately ! INCLUDE 'B23ZYX' @@ -867,7 +868,6 @@ SUBROUTINE E_Depend_Mult (Ntot, Dum, Xx, Kmax) Integer :: Kmax, Iflr, Jpar, J, Ires, Ipar Integer :: Ij, Ii, Igr, I, Mmax, Mmax2, M, Kpound, Kk, K Double precision :: Dd, E2, E1, E, X1, X2, X, Xxx - Integer, Dimension(*) :: Ntot Double Precision, Dimension(4,Kmax,*) :: Dum Double Precision, Dimension(*) :: Xx Double Precision, Parameter :: Zero = 0.0d0 @@ -875,6 +875,6 @@ SUBROUTINE E_Depend_Mult (Ntot, Dum, Xx, Kmax) ! DATA Zero /0.0d0/, One /1.0d0/ - Call E_Depend_Mult_int(Ntot, Dum, Xx, Kmax) + Call E_Depend_Mult_int(Dum, Xx, Kmax) END SUBROUTINE diff --git a/sammy/src/old/mold7.f b/sammy/src/old/mold7.f index e85c51010f8fd8ab9cf9397e93502b84a9f9a4b6..51b9654c9ae430aeab11b2eeb4e303552262d153 100644 --- a/sammy/src/old/mold7.f +++ b/sammy/src/old/mold7.f @@ -51,7 +51,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Addup (Lspin, Zkte, Goj, + SUBROUTINE Addup (Zkte, * Vx, V, De, X, Y, Kntr) C C *** PURPOSE -- OUTPUT SUMMED STRENGTHS AND COVARIANCE MATRIX @@ -70,7 +70,10 @@ C type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance type(ResonanceCovariance)::physCov, uCov - DIMENSION Lspin(Ntotc,*), Zkte(Ntotc,*), Goj(*), + type(SammySpinGroupInfo)::spinInfo + type(RMatChannelParams)::channel + type(SammyChannelInfo)::channelInfo + DIMENSION Zkte(Ntotc,*), * Vx(*), V(*), De(*), X(*), Y(*), Kntr(*) C DATA Zero /0.0d0/, One /1.0d0/, Two /2.0d0/ @@ -87,16 +90,31 @@ C IF (Ngrp.EQ.0 .OR. Ngrp.GT.Ngroup) GO TO 100 C C + call resParData%getSpinGroupInfo(spinInfo, Ngrp) + gojNgrp = spinInfo%getGFactor() + iela = spinInfo%getElasticChannel() + call spinInfo%getChannelInfo(channelInfo, iela) + call resParData%getChannel(channel, channelInfo) + LspinNgrp = channel%getL() + IF (Ngrp2.GT.0) THEN - IF (Lspin(1,Ngrp).NE.Lspin(1,Ngrp2)) THEN - WRITE (21,10200) Lspin(1,Ngrp), Lspin(1,Ngrp2) + IF (Ngrp2.EQ.0 .OR. Ngrp2.GT.Ngroup) GO TO 100 + call resParData%getSpinGroupInfo(spinInfo, Ngrp2) + gojNgrp2 = spinInfo%getGFactor() + iela = spinInfo%getElasticChannel() + call spinInfo%getChannelInfo(channelInfo, iela) + call resParData%getChannel(channel, channelInfo) + LspinNgrp2 = channel%getL() + + IF (LspinNgrp.NE.LspinNgrp2) THEN + WRITE (21,10200) LspinNgrp, LspinNgrp2 10200 FORMAT (' Spin groups', I3, ' and', I3, * ' do not have same orbital angular momentum --', * ' Lspin(1,', I3, ')=', I3, ' and Lspin(1,', I3, ')=', * I3) STOP '[STOP in Addup in old/mold7.f]' ELSE - WRITE (21,10300) Ngrp, Ngrp2, Emina, Emaxa, Lspin(1,Ngrp) + WRITE (21,10300) Ngrp, Ngrp2, Emina, Emaxa, LspinNgrp 10300 FORMAT (/, * ' Summed strengths for resonances in spin groups', * 2I3, /, ' in energy range from', 1PG14.6, @@ -104,7 +122,7 @@ C * I2) END IF ELSE - WRITE (21,10400) Ngrp, Emina, Emaxa, Lspin(1,Ngrp) + WRITE (21,10400) Ngrp, Emina, Emaxa, LspinNgrp 10400 FORMAT (/,' Summed strengths for resonances in spin group', * I3, /, ' in energy range from', 1PG14.6, ' to',G14.6, * /, ' with orbital angular momentum =', I2) @@ -114,10 +132,10 @@ C 10500 FORMAT (8X, 'ENERGY', 26X, 'SUMMED', /, 8X, 'MAXIMUM', 8X, * 'STRENGTH', 9X, 'STRENGTH', 7X, 'Uncertainty') C - Out = One / (Lspin(1,Ngrp)+0.5d0) - Out1 = Goj(Ngrp ) * Zkte(1,Ngrp ) * Out + Out = One / (LspinNgrp+0.5d0) + Out1 = gojNgrp * Zkte(1,Ngrp ) * Out IF (Ngrp2.GT.0) THEN - Out2 = Goj(Ngrp2) * Zkte(1,Ngrp2) * Out + Out2 = gojNgrp2 * Zkte(1,Ngrp2) * Out ELSE Out2 = Out1 END IF diff --git a/sammy/src/old/mold8.f b/sammy/src/old/mold8.f index 2c10df489fe30b53268f395a60ba8f4690e22718..3ce4264c2d4d539d6defca5c63bfc2fd8c835a6f 100644 --- a/sammy/src/old/mold8.f +++ b/sammy/src/old/mold8.f @@ -2,7 +2,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Rparfl_Pup (Iflbrd, Delbrd, Ntot, Bcf, Cf2, + SUBROUTINE Rparfl_Pup (Iflbrd, Delbrd,Bcf, Cf2, * Ifleff, Deleff, Ifltru, Deltru, * Ifliso, Deliso, Ifldet, Deldet, Iflext, * Parmsc, Iflmsc, Delmsc, Iradms, Iflpmc, Delpmc, @@ -27,7 +27,7 @@ C type(SetUParameters)::covarianceSetter type(ResonanceCovariance)::physCov, uCov logical(C_BOOL)::haveUParam - DIMENSION Iflbrd(*), Delbrd(*), Ntot(*), Bcf(*), Cf2(*), + DIMENSION Iflbrd(*), Delbrd(*),Bcf(*), Cf2(*), * Ifleff(*), Deleff(*), Ifltru(*), Deltru(*), * Ifliso(*), Deliso(*), * IFldet(*), Deldet(*), Iflext(Nrext,Ntotc,*), @@ -40,7 +40,7 @@ C * Diag(*), Pupcov(*), Runcs(Ntotc2+1,*), Juncs(Ntotc2,*), * Prior(*), Iprior(*), Jprior(Ntotc2,*) ,Parmsc(*) C -C DIMENSION Iflbrd(Numbrd), Ntot(Ngroup), Bcf(Ncf), Cf2(Ncf), +C DIMENSION Iflbrd(Numbrd), Bcf(Ncf), Cf2(Ncf), C * Ifleff(Numrad), Deleff(Numrad), Ifltru(Numrad), Deltru(Numrad), C * IFliso(Numiso), Deliso(Numiso), C * IFldet(Numdet), Deldet(Numdet), diff --git a/sammy/src/old/mold9.f b/sammy/src/old/mold9.f index ad2aea22167593046c1cf08fdf69b9772061828f..ba048e3af3cac3a9cc516de8ef32616d72362cfc 100644 --- a/sammy/src/old/mold9.f +++ b/sammy/src/old/mold9.f @@ -7,7 +7,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Bet_Pup (Parbrd, Iflbrd, Ntot , Lpent , Lspin , Echan , + SUBROUTINE Bet_Pup (Parbrd, Iflbrd, Echan , * Pareff, Ifleff, Partru, Ifltru, Ifliso, Pardet, Ifldet, * Parext, Iflext, * Polar , Parmsc, Iflmsc, Iradms, Parpmc, Iflpmc, Parorr, @@ -27,8 +27,8 @@ C IMPLICIT DOUBLE PRECISION (a-h,o-z) C EXTERNAL pf - DIMENSION Parbrd(*), Iflbrd(*), Ntot(*), Lpent(Ntotc,*), - * Lspin(Ntotc,*), Echan(Ntotc,*), Pareff(*), Ifleff(*), + DIMENSION Parbrd(*), Iflbrd(*), + * Echan(Ntotc,*), Pareff(*), Ifleff(*), * Partru(*), Ifltru(*), Ifliso(*), * Pardet(*), Ifldet(*), * Parext(Kkrext,Ntotc,*), Iflext(Kkrext,Ntotc,*), @@ -59,8 +59,9 @@ C *** First -- resonance parameters call resParData%getRedResonance(resonance, resInfo) igr = resInfo%getSpinGroupIndex() - Mmaxc = Ntot(Igr) - Mmaxc2 = Mmaxc + 2 + call resparData%getSpinGroupInfo(spinInfo, Igr) + Mmaxc = spinInfo%getNumChannels() + Mmaxc2 = spinInfo%getNumResPar() DO M=1,Mmaxc2 if (m.eq.1) then ifl = resInfo%getEnergyFitOption() @@ -93,17 +94,22 @@ C *** First -- resonance parameters IF (eres.LT.Zero) Upup(Knpar) = * - Upup(Knpar) call covData%setUParamValue(keep,Upup(Knpar)) - ELSE IF (M.EQ.2) THEN - Upup(Knpar) = resonance%getWidth(1) - call covData%setUParamValue(keep,Upup(Knpar)) - ELSE IF (M.GE.3) THEN - M2 = M - 2 - Upup(Knpar) = resonance%getWidth(m2+1) - IF (.NOT.(Kpolar.EQ.0 .OR. M2.EQ.1)) THEN - IF (M2.EQ.2) Upup(Knpar) = Polar(1,Ires) - IF (M2.EQ.3) Upup(Knpar) = Polar(2,Ires) + ELSE + iChan = m - 1 ! m=1 is energy, reset are channels + Upup(Knpar) = resonance%getWidth(iChan) + IF (Kpolar.EQ.1) then + iFis1 = spinInfo%getFirstFissionChannel() + iFis1 = spinInfo%getWidthForChannel(iFis1) + iFis2 = spinInfo%getSecondFissionChannel() + iFis2 = spinInfo%getWidthForChannel(iFis2) + IF (iChan.EQ.iFis1) then + Upup(Knpar)=Polar(1,Ires) + end if + IF (iChan.EQ.iFis2) then + Upup(Knpar)=Polar(2,Ires) + end if END IF - call covData%setUParamValue(keep,Upup(Knpar)) + call covData%setUParamValue(keep,Upup(Knpar)) END IF END IF END IF @@ -115,7 +121,8 @@ C IF (Nfpext.GT.0) THEN C *** R_external parameters DO Kgroup=1,Ngroup - Mmaxc = Ntot(Kgroup) + call resparData%getSpinGroupInfo(spinInfo, Kgroup) + Mmaxc = spinInfo%getNumChannels() DO J=1,Mmaxc IF (Iflext(1,J,Kgroup).GE.0) THEN DO Kqq=1,Nrext diff --git a/sammy/src/par/mpar0.f b/sammy/src/par/mpar0.f index afaa8d4456cb71dc59c9a9bf141770fc1766029c..f2e8b9a53bd7acbc8869b548ea3e841bbb9140ec 100644 --- a/sammy/src/par/mpar0.f +++ b/sammy/src/par/mpar0.f @@ -46,7 +46,7 @@ C C *** Routine Estpar guestimates size of array needed for PAR module C C - CALL Set3a (I_Intot , I_Ilspin , Lmax) + CALL Set3a (Lmax) C *** Routine Set3a sets dimensions for resonance parameters C Kumpup = Numpup @@ -64,11 +64,10 @@ C allocate(I_tmp(itotsize)) I_tmp(:) = 0 CALL Parfil ( A_Iprbrd , I_Iflbrd , A_Isiabn , - * A_Igoj , I_Intot , A_Ispinx , I_Ilspin , I_Ikppai , * A_Ipreff , I_Ifleff , A_Ideeff , * A_Iprtru , I_Ifltru , A_Idetru , I_Iigrra , * I_Ifliso , A_Ideiso , - * A_Ispiso , I_Ixclud , I_Ixciso , + * A_Ispiso , I_Ixciso , * A_Iprdet , I_Ifldet , A_Idedet , I_Iigrde , * A_Iprext , I_Iflext , * A_Iprmsc , I_Iflmsc , A_Idemsc , I_Irdmsc , I_Ijkmsc , @@ -100,9 +99,7 @@ C C *** Routine Fixabn sets Abundances to 1 for all spin groups, if C *** integral quantities are being calculated C - IF (Numrad.NE.0) CALL Radfix (I_Intot , I_Iishif , I_Ilspin , - * A_Ienbnd , A_Ibound , I_Iigrra , A_Iprtru , I_Izzzz1 , - * I_Izzzz2 , A_Iemmm1 , A_Iemmm2 ) + IF (Numrad.NE.0) CALL Radfix (A_Ibound , I_Iigrra , A_Iprtru) C *** Routine Radfix fixes "Bound" for the case where radii are C *** different for different spin groups and/or channels C *** Note cannot use zkte & zke here, because these are not yet set @@ -111,12 +108,12 @@ C Numpup = Kumpup Nunit = 21 IF (Kdecpl.NE.0) CALL Outddc (Nunit) - CALL Order ( I_Intot , A_Iprmsc , I_Irdmsc , A_Iddcov) + CALL Order (A_Iprmsc , I_Irdmsc , A_Iddcov) C *** Sub routine Order reorders resonances according to J-Pi groups C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > C IF (Kpolar.EQ.1.AND. Nres.NE.0) CALL Fixpol (I_Iflpol ) - CALL Fix (I_Intot , I_Iflbrd , I_Ifleff , I_Ifltru , I_Ifliso , + CALL Fix (I_Iflbrd , I_Ifleff , I_Ifltru , I_Ifliso , * I_Ifldet , I_Iflext , I_Iflmsc , * I_Irdmsc , I_Iflpmc , I_Iflorr , I_Iflrpi , I_Iflnbk , * I_Iflbgf , I_Ifldtp , I_Iflusd , Nnrext) diff --git a/sammy/src/par/mpar01.f b/sammy/src/par/mpar01.f index 880dbacb4ebf09ab474509a9e0a37cbcd07e167e..1520a99e758801edbe6622744734319b0cd03ad0 100644 --- a/sammy/src/par/mpar01.f +++ b/sammy/src/par/mpar01.f @@ -19,19 +19,29 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Set3a (Ntot, Lspin, Lmax) + SUBROUTINE Set3a (Lmax) C use fixedi_m use ifwrit_m use exploc_common_m use broad_common_m + use SammyResonanceInfo_M + use EndfData_common_m + use RMatResonanceParam_M IMPLICIT DOUBLE PRECISION (a-h,o-z) - DIMENSION Ntot(*), Lspin(Ntotc,*) + type(SammySpinGroupInfo)::spinInfo + type(RMatChannelParams)::channel + type(SammyChannelInfo)::channelInfo C Lmax = 0 - DO Ig=1,Ngroup - DO Ic=1,Ntot(Ig) - IF (Lspin(Ic,Ig).GT.Lmax) Lmax = Lspin(Ic,Ig) + DO Ig=1,resParData%getNumSpinGroups() + call resParData%getSpinGroupInfo(spinInfo, Ig) + DO Ic=1,spinInfo%getNumChannels() + call spinInfo%getChannelInfo(channelInfo, Ic) + call resParData%getChannel(channel, channelInfo) + IF (channel%getL().GT.Lmax) then + Lmax = channel%getL() + end if END DO END DO Lmax = Lmax + 1 diff --git a/sammy/src/par/mpar02.f b/sammy/src/par/mpar02.f index 68cce171b80a9cd52ceca9cc4705516fe8d33c4a..9ab6dd82984763081f75c7b7c78fefccf4e10721 100644 --- a/sammy/src/par/mpar02.f +++ b/sammy/src/par/mpar02.f @@ -4,10 +4,9 @@ C *** THIS FILE CONTAINS ROUTINES FOR READING "PARAMETER" FILE C C -------------------------------------------------------------- C - SUBROUTINE Parfil (Parbrd, Iflbrd, Siabnd, Goj, Ntot, - * Spinx , Lspin , Kppair, + SUBROUTINE Parfil (Parbrd, Iflbrd, Siabnd, * Pareff, Ifleff, Deleff, Partru, Ifltru, Deltru, Igrrad, - * Ifliso, Deliso, Spniso, Ixclud, Ixciso, + * Ifliso, Deliso, Spniso, Ixciso, * Pardet, Ifldet, Deldet, Igrdet, * Parext, Iflext, Parmsc, Iflmsc, Delmsc, Iradms, Ijkmsc, * Znonu , Rnonu , Anonu , Bnonu , @@ -37,11 +36,10 @@ C IMPLICIT DOUBLE PRECISION (a-h,o-z) C DIMENSION Parbrd(*), Iflbrd(*), Siabnd(*), - * Goj(*), Ntot(*), Spinx(*), Lspin(Ntotc,*), Kppair(*), * Pareff(*), Ifleff(*), Deleff(*), Partru(*), Ifltru(*), * Deltru(*), Igrrad(Ntotc,*), * Ifliso(*), Deliso(*), - * Spniso(*), Ixclud(*), Ixciso(*), + * Spniso(*), Ixciso(*), * Pardet(*), Ifldet(*), Deldet(*), Igrdet(*), * Parext(Nnrext,Ntotc,*), Iflext(Nnrext,Ntotc,*), * Parmsc(*), Iflmsc(*), Delmsc(*), Iradms(*), Ijkmsc(*), @@ -63,12 +61,10 @@ C * Kprior(Ntotc2,*), Lprior(*) C C DIMENSION Parbrd(Numbrd), Iflbrd(Numbrd), -C * Siabnd(Ngroup), Goj(Ngroup), Ntot (Ngroup), -C * Spinx(Ngroup) , Pareff(Numrad), Ifleff(Numrad), +C * Siabnd(Ngroup), Pareff(Numrad), Ifleff(Numrad), C * Partru(Numrad), Ifltru(Numrad), Igrrad(Ntotc,Ngroup), C * Ifliso(Numiso), Deliso(Numiso), -C * Spniso(Numiso), -C * Ixclud(Ngroup), Ixciso(Numiso), +C * Spniso(Numiso), Ixciso(Numiso), C * Pardet(Numdet), Ifldet(Numdet), C * Deldet(Numdet), Igrdet(Ngroup), C * Parext(Nrext,Ntotc,Ngroup) , Iflext(Nrext,Ntotc,Ngroup), @@ -132,13 +128,12 @@ C ELSE IF (Alfnm1.EQ.Radius .OR. Alfnm1.EQ.Radiii .OR. * Alfnm1.EQ.Channe) THEN C *** card set 7 "Radii" or "Channel Radii" - CALL Readrd (Parbrd, Ntot, Lspin, Kppair, Pareff, Ifleff, + CALL Readrd (Parbrd, Pareff, Ifleff, * Deleff, Partru, Ifltru, Deltru, Igrrad, Lrad, Lmax) C ELSE IF (Alfnm1.EQ.Xisoto .OR. Alfnm1.EQ.Xnucli) THEN C *** card set 10 "Nuclide" or "Isotopic Abundance" - CALL Readis (Goj, Spinx, Ifliso, Deliso, - * Spniso, Ixclud, Ixciso, Iu32) + CALL Readis (Ifliso, Deliso, Spniso, Ixciso, Iu32) C ELSE IF (Alfnm1.EQ.Broade) THEN C *** card set 4 "Broadening parameters" @@ -252,7 +247,7 @@ C ELSE IF (Alfnm1.EQ.Prioru) THEN C *** last card set, "prior" alternative (Key-Word format) C *** (called "Last D" in Table VIB.1 in manual) - CALL Readpr (Ntot, Lspin, Kppair, Prior, + CALL Readpr (Prior, * Iprior, Jprior, Kprior, Lprior, Alfn80, Lmax, Nprior) C ELSE IF (Alfnm1.EQ.Relunc .AND. Nuncer.GT.0) THEN diff --git a/sammy/src/par/mpar03.f b/sammy/src/par/mpar03.f index 95cd4f16e0a25b6ffa47f6a8ba070051f7b9ce18..6f67723bf781145dc218624a5b175a242ff34a94 100644 --- a/sammy/src/par/mpar03.f +++ b/sammy/src/par/mpar03.f @@ -218,7 +218,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Readrd (Parbrd, Ntot, Lspin, Kppair, Pareff, Ifleff, + SUBROUTINE Readrd (Parbrd, Pareff, Ifleff, * Deleff, Partru, Ifltru, Deltru, Igrrad, Lrad, Lmax) C C *** Card Set 7 @@ -230,9 +230,12 @@ C use misccc_common_m use partyp_common_m use par_parameter_names_common_m + use EndfData_common_m + use SammyResonanceInfo_M IMPLICIT DOUBLE PRECISION (a-h,o-z) C - DIMENSION Parbrd(*), Ntot(*), Lspin(Ntotc,*), Kppair(Ntotc,*), + type(SammySpinGroupInfo)::spinInfo + DIMENSION Parbrd(*), * Pareff(*), Ifleff(*), Deleff(*), * Partru(*), Ifltru(*), Deltru(*), Igrrad(Ntotc,*), Lrad(*) DIMENSION Iss(28), Jss(1003) @@ -254,7 +257,7 @@ C C *** Note that Find_Key_Word may change Alfnm1, so "END IF" and new "IF" END IF IF (Alfnm1.EQ.Channe) THEN - CALL Rd_Rad_Key_Word (Ntot, Lspin, Kppair, Pareff, Ifleff, + CALL Rd_Rad_Key_Word (Pareff, Ifleff, * Deleff, Partru, Ifltru, Deltru, Igrrad, Dumnam, * Lrad, Alfnum, I_Rad, Ntotc, Nnniso, Nppair, Lmax, Numrad, * Ngroup, Iu32) @@ -380,7 +383,8 @@ C IF (Iwrong.GT.0) STOP '[STOP in Readrd in par/mpar03.f # 5]' C DO N=1,Ngroup - Ntot_N = Ntot(N) + call resparData%getSpinGroupInfo(spinInfo,N) + Ntot_N = spinInfo%getNumChannels() DO Ich=1,Ntot_N IF (Igrrad(Ich,N).EQ.0) THEN DO K=1,Ngroup @@ -422,8 +426,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Readis (Goj, Spinx, Ifliso, Deliso, - * Spniso, Ixclud, Ixciso, Kfile) + SUBROUTINE Readis (Ifliso, Deliso, Spniso, Ixciso, Kfile) C C *** Card Set 10 C *** PURPOSE -- Read isotopic (nuclide) parameters -- mass and @@ -442,12 +445,11 @@ C use RMatResonanceParam_M IMPLICIT DOUBLE PRECISION (a-h,o-z) C -C DIMENSION Goj(Ngroup), Spinx(Ngroup), +C DIMENSION C * Ifliso(Numiso), Deliso(Numiso), -C * Spniso(Numiso), -C * Ixclud(Ngroup), Ixciso(Numiso) - DIMENSION Goj(*), Spinx(*), Ifliso(*), - * Deliso(*), Spniso(*), Ixclud(*), Ixciso(*) +C * Spniso(Numiso), Ixciso(Numiso) + DIMENSION Ifliso(*), + * Deliso(*), Spniso(*), Ixciso(*) DIMENSION Iss(24), Jss(1003) EQUIVALENCE (Iss(1),Jss(1)) @@ -547,9 +549,10 @@ C Iso = spinInfo%getIsotopeIndex() IF (Iso.EQ.N) THEN IF (Ix.EQ.0) THEN - Spniso(N) = Spinx(Iso) + Spniso(N) = spinInfo%getTargetSpin() Ix = 1 - ELSE IF (Ix.NE.0 .AND. Spinx(Iso).NE.Spniso(N)) THEN + ELSE IF (Ix.NE.0 .AND. + * spinInfo%getTargetSpin().NE.Spniso(N)) THEN WRITE (6,99995) 99995 FORMAT (' #### All spin groups belonging to the same', * 1X, 'isotope must have same Spinx ####') @@ -566,7 +569,7 @@ C DO I=1,Ngroup call resParData%getSpinGroupInfo(spinInfo, I) Iso = spinInfo%getIsotopeIndex() - IF (Ixclud(I).EQ.0) Ixciso(Iso) = 0 + IF (spinInfo%getIncludeInCalc()) Ixciso(Iso) = 0 END DO C *** Note that Ixciso(Iso)=1 means exclude this isotope completely C diff --git a/sammy/src/par/mpar10.f b/sammy/src/par/mpar10.f index 0f517fd3e4d007444b27bb679a2006e8f3553bea..24609481ed5d464515970638e89d985cd75a0c15 100755 --- a/sammy/src/par/mpar10.f +++ b/sammy/src/par/mpar10.f @@ -176,7 +176,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Readpr (Ntot, Lspin, Kppair, Prior, + SUBROUTINE Readpr (Prior, * Iprior, Jprior, Kprior, Lprior, Alfn80, Lmax, Nprior) C *** Read resonance parameter uncertainties in key-word format use fixedi_m @@ -187,11 +187,12 @@ C *** Read resonance parameter uncertainties in key-word format use EndfData_common_m IMPLICIT DOUBLE PRECISION (a-h,o-z) type(SammyResonanceInfo)::resInfo + type(SammySpinGroupInfo)::spinInfo CHARACTER*80 File CHARACTER*1 Alfn80(80), Alfn80_Orig(80) CHARACTER*8 Name, Prinam - DIMENSION Ntot(*), Lspin(Ntotc,*), - * Kppair(Ntotc,*), Prior(*), Iprior(*), Jprior(Ntotc2,*), + DIMENSION + * Prior(*), Iprior(*), Jprior(Ntotc2,*), * Kprior(Ntotc2,*), Lprior(*) C * Kprior(Ntotc2,Ngroup), Lprior(Lmax) EQUIVALENCE (File, Alfn80_Orig) @@ -258,7 +259,7 @@ C ELSE IF (Alfn80(I).EQ.'R' .AND. Alfn80(I+1).EQ.'E' .AND. * Alfn80(I+2).EQ.'L' .AND. Alfn80(I+3).EQ.'A') THEN C *** Here the key-word is "relative uncertainty" - IF (Iprio.GT.0) CALL Group_To_Resonance (Ntot, + IF (Iprio.GT.0) CALL Group_To_Resonance ( * Jprior, Kprior, Lprior, Pmin, Pmax, Iprio, * Lmax) Istart = Istart + 4 @@ -274,7 +275,7 @@ C * (Alfn80(I).EQ.'U' .AND. Alfn80(I+1).EQ.'N' .AND. * Alfn80(I+2).EQ.'C' .AND. Alfn80(I+3).EQ.'E'))THEN C *** Here the key-word is "absolute unc" or "uncertainty" - IF (Iprio.GT.0) CALL Group_To_Resonance (Ntot, + IF (Iprio.GT.0) CALL Group_To_Resonance ( * Jprior, Kprior, Lprior, Pmin, Pmax, Iprio, * Lmax) Istart = Istart + 2 @@ -314,7 +315,7 @@ C *** Here the key-word is "Particle-Pair" or "PP" CALL Set_Nam (Name, Alfn80, Ia, Ib, Ierr) IF (Name.EQ.'ENERGY ' .OR. Name.EQ.'GAMMA ') THEN Prinam = Name - CALL Move_To_Ke (Ntot, Kprior, Prinam, Iprio) + CALL Move_To_Ke (Kprior, Prinam, Iprio) END IF C ELSE IF ((Alfn80(I).EQ.'L' .AND. Alfn80(I+1).EQ.'=') .OR. @@ -328,19 +329,18 @@ C *** (These must be the last values on the line) IF (Iprio.EQ.0) * STOP '[Iprio.EQ.0 in Readpr in par/mpar10.f]' CALL Get_L (Lprior, Alfn80, Istart, Istop, Ierr, Lmax) - CALL Move_To_K (Ntot, Lspin, Kppair, - * Kprior, Prinam, Lprior, Lmax, Iprio) + CALL Move_To_K (Kprior, Prinam, Lprior, Lmax, Iprio) C ELSE IF (Alfn80(I).EQ.'G' .AND. Alfn80(I+1).EQ.'R') THEN C *** Here the key-word is "GRoup" CALL Get_Group (Ig, Alfn80, Istart, Istop, Ierr, * Ngroup) - CALL Get_Channel (Ntot, Kprior, Alfn80, Istart, + CALL Get_Channel (Kprior, Alfn80, Istart, * Istop, Ierr, Ntotc2, Ig, Iprio) C ELSE IF (Alfn80(I).EQ.'C' .AND. Alfn80(I+1).EQ.'H') THEN C *** Here the key-word is "CHannel" - CALL Get_Channel (Ntot, Kprior, Alfn80, Istart, + CALL Get_Channel (Kprior, Alfn80, Istart, * Istop, Ierr, Ntotc2, Ig, Iprio) C ELSE @@ -361,15 +361,16 @@ C 40 CONTINUE IF (Iprio.NE.Nprior) * STOP '[Iprio.NE.Nprior in Readpr in par/mpar10.f]' - IF (Iprio.GT.0) CALL Group_To_Resonance (Ntot, + IF (Iprio.GT.0) CALL Group_To_Resonance ( * Jprior, Kprior, Lprior, Pmin, Pmax, Iprio, Lmax) C C *** Reorganize to put energy & gamma width ahead of particle-widths C *** Note that Lprior is a dummy here DO Ires=1,Nres call resParData%getResonanceInfo(resInfo, Ires) - Ig = resInfo%getSpinGroupIndex() - Nchan = Ntot(Ig) + Ig = resInfo%getSpinGroupIndex() + call resparData%getSpinGroupInfo(spinInfo,ig) + Nchan = spinInfo%getNumChannels() DO Ich=1,Nchan Lprior(Ich) = Jprior(Ich,Ires) END DO @@ -397,7 +398,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Group_To_Resonance (Ntot, Jprior, + SUBROUTINE Group_To_Resonance (Jprior, * Kprior, Lprior, Pmin, Pmax, Iprio, Lmax) C *** Convert from Kprior to Jprior to take care of Emin,Emax C *** Zero temporary arrays to restart @@ -410,11 +411,12 @@ C *** Zero temporary arrays to restart use EndfData_common_m IMPLICIT NONE - integer Ntot(*), Jprior(Ntotc2,*), Kprior(Ntotc2,*), Lprior(Lmax) + integer Jprior(Ntotc2,*), Kprior(Ntotc2,*), Lprior(Lmax) real(kind=8)::Pmin, Pmax integer::Iprio, Lmax type(SammyResonanceInfo)::resInfo + type(SammySpinGroupInfo)::spinInfo type(RMatResonance)::resonance real(kind=8)::Zero, ener integer::ires, kp, nchan2, I, ig @@ -427,7 +429,8 @@ C Ig = resInfo%getSpinGroupIndex() ener = resonance%getEres() - Nchan2 = Ntot(Ig) + 2 + call resparData%getSpinGroupInfo(spinInfo,ig) + Nchan2 = spinInfo%getNumResPar() DO I=1,Nchan2 IF (Jprior(I,Ires).EQ.0) THEN Kp = Kprior(I,Ig) @@ -451,18 +454,22 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Move_To_Ke (Ntot, Kprior, Prinam, Iprio) + SUBROUTINE Move_To_Ke (Kprior, Prinam, Iprio) C *** Convert from Prinam=ENERGY or GAMMA to Kprior use fixedi_m + use EndfData_common_m + use SammyParticlePairInfo_M IMPLICIT DOUBLE PRECISION (a-h,o-z) CHARACTER*8 Prinam - DIMENSION Ntot(*), Kprior(Ntotc2,*) + type(SammySpinGroupInfo)::spinInfo + DIMENSION Kprior(Ntotc2,*) C - DO Ig=1,Ngroup + DO Ig=1,resParData%getNumSpinGroups() + call resParData%getSpinGroupInfo(spinInfo, Ig) IF (Prinam.EQ.'ENERGY ') THEN - Ich = Ntot(Ig) + 1 + Ich = spinInfo%getAllChannels() ELSE IF (Prinam.EQ.'GAMMA ') THEN - Ich = Ntot(Ig) + 2 + Ich = spinInfo%getNumResPar() ELSE STOP '[STOP in Move_To_Ke in mpar10.f]' END IF @@ -477,7 +484,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Move_To_K (Ntot, Lspin, Kppair, Kprior, Prinam, Lprior, + SUBROUTINE Move_To_K (Kprior, Prinam, Lprior, * Lmax, Iprio) C *** Convert from Lprior+Prinam to Kprior use fixedi_m @@ -487,17 +494,24 @@ C *** Convert from Lprior+Prinam to Kprior IMPLICIT DOUBLE PRECISION (a-h,o-z) CHARACTER*8 Name, Prinam type(SammyParticlePairInfo)::pairInfo + type(SammySpinGroupInfo)::spinInfo + type(RMatParticlePair)::pair + type(RMatChannelParams)::channel + type(SammyChannelInfo)::channelInfo character(len=8)::pname - DIMENSION Ntot(*), Lspin(Ntotc,*), Kppair(Ntotc,*), - * Kprior(Ntotc2,*), Lprior(Lmax) -C - DO Ig=1,Ngroup - DO Ich=1,Ntot(Ig) - Kpp = Kppair(Ich,Ig) + DIMENSION Kprior(Ntotc2,*), Lprior(Lmax) +C + DO Ig=1,resParData%getNumSpinGroups() + call resParData%getSpinGroupInfo(spinInfo, Ig) + DO Ich=1,spinInfo%getNumChannels() + call spinInfo%getChannelInfo(channelInfo, Ich) + call resParData%getChannel(channel, channelInfo) + + Kpp = channelInfo%getParticlePairIndex() call resParData%getParticlePairInfo(pairInfo,Kpp) call pairInfo%getName(pname) Name = pname - Lsp = Lspin (Ich,Ig) + Lsp = channel%getL() Kpr = Kprior(Ich,Ig) IF (Kpr.EQ.0) THEN IF (Prinam.EQ.' ') GO TO 50 diff --git a/sammy/src/par/mpar11.f b/sammy/src/par/mpar11.f index a94c75f7778d0f0fc1615473dab1a313db8850bf..50eec0786e89f0a098d56caa822d1c2dfc04b9c5 100644 --- a/sammy/src/par/mpar11.f +++ b/sammy/src/par/mpar11.f @@ -2,50 +2,69 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Radfix (Ntot, Ishift, Lspin, Enbnd, Bound, Igrrad, - * Partru, Kzzz1, Kzzz2, Emmm1, Emmm2) + SUBROUTINE Radfix (Bound, Igrrad, Partru) C use sammy_CoulombSelector_I use fixedi_m use ifwrit_m use fixedr_m use constn_common_m + use SammyResonanceInfo_M + use EndfData_common_m + use RMatResonanceParam_M IMPLICIT DOUBLE PRECISION (a-h,o-z) EXTERNAL Sf C -C DIMENSION Ntot(Ngroup), Ishift(Ntotc,Ngroup), Lspin(Ntotc,Ngroup), -C * Enbnd(Ntotc,Ngroup), Bound(Ntotc,Ngroup), Igrrad(Ntotc,Ngroup), +C DIMENSION Ntot(Ngroup), +C * Bound(Ntotc,Ngroup), Igrrad(Ntotc,Ngroup), C * Partru(Numrad) - DIMENSION Ntot(*), Ishift(Ntotc,*), Lspin(Ntotc,*),Enbnd(Ntotc,*), - * Bound(Ntotc,*), Igrrad(Ntotc,*), Partru(*) - DIMENSION Kzzz1(Ntotc,*), Kzzz2(Ntotc,*), - * Emmm1(Ntotc,*), Emmm2(Ntotc,*) + type(SammySpinGroupInfo)::spinInfo + type(SammyParticlePairInfo)::pairInfo + type(RMatParticlePair)::pair + type(RMatChannelParams)::channel + type(SammyChannelInfo)::channelInfo + DIMENSION Bound(Ntotc,*), Igrrad(Ntotc,*), Partru(*) C Jdopha = 0 Jdoder = 0 C DATA Zero /0.0d0/ C - DO J=1,Ngroup - Ntotj = Ntot(j) + DO J=1,resParData%getNumSpinGroups() + call resParData%getSpinGroupInfo(spinInfo, J) + Ntotj = spinInfo%getNumChannels() DO N=1,Ntotj + call spinInfo%getChannelInfo(channelInfo, N) + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, pairInfo) + call resParData%getChannel(channel, channelInfo) + enbnd = channel%getBnd() Bound(N,J) = Zero - IF (Ishift(N,J).NE.0) THEN - IF (Enbnd(N,J).GT.Zero) THEN + + IF (pair%getCalcShift()) THEN + IF (Enbnd.GT.Zero) THEN Cycrfn = Cayt*Partru(Igrrad(N,J)) - Docoul = dfloat(Kzzz1(N,J)*Kzzz2(N,J)) + Docoul = dfloat(pair%getZa(1)*pair%getZa(2)) IF (Docoul.EQ.Zero) THEN - Bound(N,J) = Sf(Cycrfn*dSQRT(Enbnd(N,J)), - * Lspin(N,J), Zero) + Bound(N,J) = Sf(Cycrfn*dSQRT(Enbnd), + * channel%getL(), Zero) ELSE - L = Lspin(N,J) - Rho = Cycrfn * dSQRT(Enbnd(N,J)) - Rhox = Cayt * dSQRT(Enbnd(N,J)) - A1 = Emmm1(N,J) - A2 = Emmm2(N,J) + L = channel%getL() + Rho = Cycrfn * dSQRT(Enbnd) + Rhox = Cayt * dSQRT(Enbnd) + A1 = pair%getMass(2) + A2 = pair%getMass(1) Eta = Etac*Docoul*(A1*A2)/(A1+A2)/Rhox + + if (pair%getCalcShift()) then + Ishift = 1 + else + Ishift = 0 + end if CALL f_sammy_columb_Pspcou (kwcoul, - & Rho, L, Eta, Ishift(N,J), + & Rho, L, Eta, Ishift, & Jdopha, & Jdoder, Ifail, Pent, Shift, Der, Dshift, & Sinphi, Cosphi, Dphi) @@ -56,9 +75,9 @@ C 10000 FORMAT (' RADFIX: PSPCOUL ERROR: Ifail = ') END IF END IF - ELSE IF (Enbnd(N,J).LT.Zero) THEN - Bound(N,J) = Enbnd(N,J) - ELSE IF (Lspin(N,J).NE.0) THEN + ELSE IF (Enbnd.LT.Zero) THEN + Bound(N,J) = Enbnd + ELSE IF (channel%getL().NE.0) THEN STOP '[STOP -- must have Enbnd.NE.0 when Shift]' END IF END IF @@ -144,7 +163,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Order (Ntot, Parmsc, Iradms, Ddcov) + SUBROUTINE Order (Parmsc, Iradms, Ddcov) C C *** Purpose -- Reorder resonance parameters by energy (low to high) and C *** by J-pi groups @@ -160,7 +179,7 @@ C use EndfData_common_m IMPLICIT DOUBLE PRECISION (a-h,o-z) C - DIMENSION Ntot(*), + DIMENSION * Parmsc(*), * Iradms(*), Ddcov(*) C @@ -219,7 +238,9 @@ C do J = 1, resParData%getNumResonances() call resParData%getResonanceInfo(resInfo, j) call resParData%getResonance(resonance, resInfo) - igrp = resInfo%getSpinGroupIndex() + igrp = resInfo%getSpinGroupIndex() + call resParData%getSpinGroupInfo(spinInfo, igrp) + ntot = spinInfo%getNumChannels() ! sanity check for channel size @@ -229,9 +250,9 @@ C numChan = numChan + 1 end if end do - if( Ntot(igrp).lt.numChan ) then - WRITE ( 6,99997) igrp, Ntot(igrp), numChan - WRITE (21,99997) igrp, Ntot(igrp), numChan + if( Ntot.lt.numChan ) then + WRITE ( 6,99997) igrp, Ntot, numChan + WRITE (21,99997) igrp, Ntot, numChan STOP '[STOP in Order in par/mpar11.f # 3]' end if diff --git a/sammy/src/par/mpar12.f90 b/sammy/src/par/mpar12.f90 index 282f5a2c778a1a2c018f9bacda64c552be9ce853..8161935ea7b69dc36227da340cefcff8e3734249 100755 --- a/sammy/src/par/mpar12.f90 +++ b/sammy/src/par/mpar12.f90 @@ -31,7 +31,7 @@ end module FixUpParameterData_M !C !C -------------------------------------------------------------- !C - SUBROUTINE Fix ( Ntot , Iflbrd, Ifleff, Ifltru, Ifliso, Ifldet, & + SUBROUTINE Fix ( Iflbrd, Ifleff, Ifltru, Ifliso, Ifldet, & Iflext, Iflmsc, Iradms, Iflpmc, Iflorr, Iflrpi, & Iflnbk, Iflbgf, Ifldtp, Iflusd, Nnrext) !C @@ -42,7 +42,7 @@ end module FixUpParameterData_M use FixUpParameterData_M IMPLICIT NONE - integer:: Ntot(*), Iflbrd(*), Ifleff(*), Ifltru(*), Ifliso(*), & + integer:: Iflbrd(*), Ifleff(*), Ifltru(*), Ifliso(*), & Ifldet(*), Iflext(Nnrext,Ntotc,*), & Iflmsc(*), Iradms(*), Iflpmc(4,*), Iflorr(*), Iflrpi(*), & Iflnbk(6,*), Iflbgf(*), Ifldtp(*), Iflusd(*) diff --git a/sammy/src/qua/mqua1.f b/sammy/src/qua/mqua1.f index 029b2c7242a0baba9d3a95238b1d6e48bfdcbf3a..f73deb5ec67a6ace9d49e3b1b8930768b8d45469 100755 --- a/sammy/src/qua/mqua1.f +++ b/sammy/src/qua/mqua1.f @@ -100,7 +100,7 @@ C *** Alfn80 = 'RADius' or 'RADii', or 'CHAnnel radi' Iux = 56 Ng = 0 C Ksolve and Numpup are not really needed in SAMQUA - CALL Rd_Rad_Key_Word (Ntot, Lspin, Kppair, Pareff, Ifleff, + CALL Rd_Rad_Key_Word (Pareff, Ifleff, * Deleff, Partru, Ifltru, Deltru, Igrrad, Dumnam, * Lrad, Alfn80, Numrad, Max_Chan, Max_Nuclide, Max_Pp, Max_L, * Max_Rad, Ng, Iux) diff --git a/sammy/src/qua/mqua9.f b/sammy/src/qua/mqua9.f index 9ca10c365a750d25fc9a934f3b3459bdfbdd3063..5ed30de6c731fb5d6392615eca2f04332809682e 100755 --- a/sammy/src/qua/mqua9.f +++ b/sammy/src/qua/mqua9.f @@ -229,13 +229,15 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Rd_Rad_Key_Word (Ntot, Lspin, Kppair, Pareff, Ifleff, + SUBROUTINE Rd_Rad_Key_Word (Pareff, Ifleff, * Deleff, Partru, Ifltru, Deltru, Igrrad, Dumnam, Lrad, * Alfn80, I_Rad, Ntotc, Max_Nuclide, Max_Pp, Max_L, Numrad, * Ngroup, Iux) C *** Read radii in key-word format use EndfData_common_m use SammyParticlePairInfo_M + use SammyRMatrixParameters_M + use SammyResonanceInfo_M IMPLICIT DOUBLE PRECISION (a-h,o-z) CHARACTER*80 File CHARACTER*1 Alfn80(80), Alfn80_Orig(80) @@ -244,9 +246,13 @@ C DIMENSION Par???(Max_Rad), Ifl???(Max_Rad), Igrrad(Ntotc,Ngroup), C * Dumnam(Max_Pp,Max_Rad), Lrad(Max_L,Max_Pp,Max_Rad) DIMENSION Pareff(*), Partru(*), Ifleff(*), Ifltru(*), * Deleff(*), Deltru(*), - * Igrrad(Ntotc,*), Ntot(*), Lspin(Ntotc,*), Kppair(Ntotc,*), + * Igrrad(Ntotc,*), * Dumnam(Max_Pp,*), Lrad(Max_L,Max_Pp,*) type(SammyParticlePairInfo)::pairInfo + type(SammySpinGroupInfo)::spinInfo + type(RMatParticlePair)::pair + type(RMatChannelParams)::channel + type(SammyChannelInfo)::channelInfo character(len=8)::pname EQUIVALENCE (File, Alfn80_Orig) C @@ -426,7 +432,7 @@ C *** Here the key-word is "GRoup" CALL Get_Group (Ig, Alfn80, Istart, Istop, Ierr, * Ngroup) IF (Ngroup.GT.0) THEN - CALL Get_Channel (Ntot, Igrrad, Alfn80, Istart, + CALL Get_Channel (Igrrad, Alfn80, Istart, * Istop, Ierr, Ntotc, Ig, I_Rad) ELSE WRITE (6,10300) @@ -437,7 +443,7 @@ C ELSE IF (Alfn80(I).EQ.'C' .AND. Alfn80(I+1).EQ.'H') THEN C *** Here the key-word is "CHannel" [with Ig .ne. 0] IF (Ngroup.GT.0) THEN - CALL Get_Channel (Ntot, Igrrad, Alfn80, Istart, + CALL Get_Channel (Igrrad, Alfn80, Istart, * Istop, Ierr, Ntotc, Ig, I_Rad) ELSE WRITE (6,10300) @@ -470,13 +476,16 @@ C GO TO 10 C 40 CONTINUE - IF (Ngroup.GT.0) THEN - DO Ig=1,Ngroup - DO Ich=1,Ntot(Ig) - Kpp = Kppair(Ich,Ig) + IF (resParData%getNumSpinGroups().GT.0) THEN + DO Ig=1,resParData%getNumSpinGroups() + call resParData%getSpinGroupInfo(spinInfo, Ig) + DO Ich=1,spinInfo%getNumChannels() + call spinInfo%getChannelInfo(channelInfo, Ich) + Kpp = channelInfo%getParticlePairIndex() call resParData%getParticlePairInfo(pairInfo,Kpp) call pairInfo%getName(pname) - Lsp = Lspin (Ich,Ig) + call resParData%getChannel(channel, channelInfo) + Lsp = channel%getL() Igr = Igrrad(Ich,Ig) IF (Igr.EQ.0) THEN DO Irad=1,Numrad @@ -862,12 +871,15 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Get_Channel (Ntot, Keep, Alfn80, Istart, Istop, + SUBROUTINE Get_Channel (Keep, Alfn80, Istart, Istop, * Ierr, Nx, Ig, Number) use mdf5_m + use EndfData_common_m + use SammyResonanceInfo_M IMPLICIT DOUBLE PRECISION (a-h,o-z) CHARACTER*1 Alfn80(*) - DIMENSION Keep(Nx,*), Ntot(*) + type(SammySpinGroupInfo)::spinInfo + DIMENSION Keep(Nx,*) Ierr = 0 I = Istart DO J=Istart,Istop @@ -907,24 +919,35 @@ C 50 CONTINUE C Ng = -Ig + if (ig.gt.0.and. + * resParData%getNumSpinGroups().ge.Ig) then + call resparData%getSpinGroupInfo(spinInfo,ig) + ntotIg = spinInfo%getNumChannels() + else + ntotIg = 0 + end if DO I=Istart,Iquit IF (Alfn80(I).EQ.'E') THEN IF (Ig.LT.0) THEN DO Igr=1,Ng - Keep(Ntot(Igr)+1,Igr) = Number + call resparData%getSpinGroupInfo(spinInfo,igr) + ntotIgr = spinInfo%getNumChannels() + Keep(ntotIgr+1,Igr) = Number END DO ELSE - Keep(Ntot(Ig)+1,Ig) = Number + Keep(ntotIg+1,Ig) = Number END IF Istart = Iquit + 2 RETURN ELSE IF (Alfn80(I).EQ.'G') THEN IF (Ig.LT.0) THEN DO Igr=1,Ng - Keep(Ntot(Igr)+2,Igr) = Number + call resparData%getSpinGroupInfo(spinInfo,igr) + ntotIgr = spinInfo%getNumChannels() + Keep(ntotIgr+2,Igr) = Number END DO ELSE - Keep(Ntot(Ig)+2,Ig) = Number + Keep(ntotIg+2,Ig) = Number END IF Istart = Iquit + 2 RETURN @@ -933,17 +956,19 @@ C C CALL Get_Intg (Alfn80(1:80), Istart, Iquit, Intg, Intgx, Kintgx) IF (Ig.GT.0) THEN - IF (Intg.LE.Ntot(Ig) .AND. Intg.GT.0) THEN + IF (Intg.LE.NtotIg .AND. Intg.GT.0) THEN Keep(Intg,Ig) = Number ELSE - WRITE (6,20100) Intg, Ntot(Ig), Ig + WRITE (6,20100) Intg, NtotIg, Ig 20100 FORMAT ('Intg, Ntot(Ig), Ig=', 5i5) STOP '[STOP in Get_Channel in mqua9.f]' END IF ELSE IF (Intg.GT.0) THEN DO Igg=1,Ng - IF (Intg.LE.Ntot(Igg)) Keep(Intg,Igg) = Number + call resparData%getSpinGroupInfo(spinInfo,igg) + ntotIgg = spinInfo%getNumChannels() + IF (Intg.LE.NtotIgg) Keep(Intg,Igg) = Number END DO END IF END IF diff --git a/sammy/src/rec/mrec0.f b/sammy/src/rec/mrec0.f index d16a1f46dda38f45c6c2af49601f37f522fde923..36fd12bedc0ec9a99c9d8b9691f81de74e0c2b85 100644 --- a/sammy/src/rec/mrec0.f +++ b/sammy/src/rec/mrec0.f @@ -52,7 +52,7 @@ C C *** one *** C *** initialize difmax Idifma = Idimen (Mres, 1, 'Mres, 1') - CALL Uuuset (I_Intot , I_Ilspin , A(Idifma), I_Ixclud ) + CALL Uuuset (A(Idifma) ) C C *** two *** Ietab2 = Idimen (Nemax, 1, 'Nemax, 1') @@ -63,8 +63,7 @@ C C - - - - - - - - - - - - - - - - - - - - - - - - - - - < C *** three *** Ix1 = Idimen (Na, 1, 'Na, 1') - CALL Fixx (I_Intot , I_Iishif , I_Ilspin , A_Ibound , A_Iechan , - * I_Ixclud, + CALL Fixx (A_Ibound , A_Iechan , * A_Izkte , A(Ixx), A(Ix1), Mxany) C *** SBROUTNE Fixx sets Xx = energy shift I = Idimen (Ix1, -1, 'Ix1, -1') @@ -144,7 +143,7 @@ C C *** thirteen *** Ienode = Idimen (Mres+2, 1, 'Mres+2, 1') Iwnode = Idimen (Mres+2, 1, 'Mres+2, 1') - CALL Eorder (I_Ixclud , A(Ienode), A(Iwnode), Node) + CALL Eorder (A(Ienode), A(Iwnode), Node) Iesave = Idimen (Nesave, 1, 'Nesave, 1') Isigsa = Idimen (N1, 1, 'N1, 1') Iesub = Idimen (Nesub, 1, 'Nesub, 1') diff --git a/sammy/src/rec/mrec1.f b/sammy/src/rec/mrec1.f index faa58d813e029fece2045665fda4c090c9f5975f..654247699b0bf5f9836ad5a3a8c8a3c1e246da23 100644 --- a/sammy/src/rec/mrec1.f +++ b/sammy/src/rec/mrec1.f @@ -2,7 +2,7 @@ C C C ---------------------------------------------------------------------- C - SUBROUTINE Eorder (Ixclud, Enode, Widnod, Node) + SUBROUTINE Eorder (Enode, Widnod, Node) C C *** Decide which resonances are inside range (emin,emax) and which are C *** not to be excluded @@ -18,8 +18,8 @@ C C type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance + type(SammySpinGroupInfo)::spinInfo DIMENSION Enode(*), Widnod(*) - DIMENSION Ixclud(*) C C *** Find which resonances are inside energy range J = 1 @@ -28,15 +28,16 @@ C *** Find which resonances are inside energy range DO I=1,resParData%getNumResonances() call resParData%getResonanceInfo(resInfo, I) Igrp = resInfo%getSpinGroupIndex() - IF (Ixclud(Igrp).NE.1) THEN + call resParData%getSpinGroupInfo(spinInfo, igrp) + IF (spinInfo%getIncludeInCalc()) THEN call resParData%getResonance(resonance, resInfo) eres = resonance%getEres() IF (eres.GE.Emin .AND. eres.LE.Emax) THEN J = J + 1 Enode(J) = eres - Widnod(J) = resonance%getWidth(1) - DO M=1,Ntotc - Widnod(J) = Widnod(J) + resonance%getWidth(M+1) + Widnod(J) = 0.0d0 + DO M=1,resonance%getNumChan() + Widnod(J) = Widnod(J) + resonance%getWidth(M) END DO Widnod(J) = Widnod(J)/1000.D0 END IF diff --git a/sammy/src/rec/mrec3.f b/sammy/src/rec/mrec3.f index d5f951c042a6512446cc696ed545dcb87092ae14..37bcc90d5e3244b19e858839f5af44f4352617f1 100644 --- a/sammy/src/rec/mrec3.f +++ b/sammy/src/rec/mrec3.f @@ -95,7 +95,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Uuuset (Ntot, Lspin, Difmax, Ixclud) + SUBROUTINE Uuuset (Difmax) C C *** PURPOSE -- GENERATE Uup, Udown, Iuif, Nnpar, Difmax C *** modified from program Uset in mthe1 @@ -109,10 +109,12 @@ C C type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance - DIMENSION Ntot(*), Lspin(Ntotc,*),Difmax(*), Ixclud(*) + type(SammySpinGroupInfo)::spinInfo + type(RMatChannelParams)::channel + type(SammyChannelInfo)::channelInfo + DIMENSION Difmax(*) C -C DIMENSION Ntot(Ngroup), Lspin(Ntotc,Ngroup), -C * Difmax(Nres), Ixclud(Ngroup) +C DIMENSION Difmax(Nres) DATA Zero /0.0d0/, Two /2.0d0/ C Ks_Res = Ksolve @@ -120,20 +122,25 @@ C DO N=1,resParData%getNumResonances() call resParData%getResonanceInfo(resInfo, N) IF (resInfo%getIncludeInCalc()) THEN - Mmax = Ntot(resInfo%getSpinGroupIndex()) - Mmax2 = Mmax + 2 + igr = resInfo%getSpinGroupIndex() + call resParData%getSpinGroupInfo(spinInfo, igr) + Mmax = spinInfo%getNumChannels() + Mmax2 = spinInfo%getNumResPar() Igrp = resInfo%getSpinGroupIndex() - IF (Ixclud(Igrp).NE.1) THEN + IF (spinInfo%getIncludeInCalc()) THEN Difmax(N) = 1.E30 - IF (Kscut.NE.0 .OR. Lspin(1,Igrp).NE.0) THEN + iela = spinInfo%getElasticChannel() + call spinInfo%getChannelInfo(channelInfo, iela) + call resParData%getChannel(channel, channelInfo) + IF (Kscut.NE.0 .OR. channel%getL().NE.0) THEN call resParData%getResonance(resonance, resInfo) P = resonance%getEres() IF (P.GE.Zero) THEN - G = dABS(resonance%getWidth(1)) - DO M=1,Mmax - G = G + dABS(resonance%getWidth(M+1)) + G = 0.0d0 + DO M=1,resonance%getNumChan() + G = G + dABS(resonance%getWidth(M)) END DO - IF (Kscut.NE.0 .AND. Lspin(1,Igrp).EQ.0) G = + IF (Kscut.NE.0 .AND. channel%getL().EQ.0) G = * G * Two Difmax(N) = G END IF diff --git a/sammy/src/ref/mref0.f b/sammy/src/ref/mref0.f index ab77209b5835322d3aed9a2018f39c9e97bb8611..afa186ebeea8f131f1fb19e46b7dc1805247984c 100644 --- a/sammy/src/ref/mref0.f +++ b/sammy/src/ref/mref0.f @@ -34,9 +34,7 @@ C *** Read Energy from sam50.dat and Data & Covariance from SAM44.DAT CALL Refdat (A(Ienerg), A_Idatb , A_Ivv ) C c *** convert from SAMMY information to REFIT information - CALL Refwrt ( I_Inent , I_Inext , I_Intot , I_Ilpent , - * I_Ilspin , A_Irdeff , A_Irdtru , - * A_Ispinx) + CALL Refwrt C WRITE (6,10200) 10200 FORMAT (' Normal finish of SAMREF') diff --git a/sammy/src/ref/mref1.f b/sammy/src/ref/mref1.f index 7c041e4a7d726b0f5725b04c9150606d6beb6d64..e7a60fd83fd90b63cc46c9338f41c162936d8b5d 100644 --- a/sammy/src/ref/mref1.f +++ b/sammy/src/ref/mref1.f @@ -2,8 +2,7 @@ C C C -------------------------------------------------------------------- C - SUBROUTINE Refwrt ( Nent, Next, Ntot, Lpent, Lspin, Rdeff, - * Rdtru, Spinx) + SUBROUTINE Refwrt C C *** purpose -- convert from SAMMY input to REFIT input; WRITE C *** out files for REFIT @@ -19,10 +18,6 @@ C C CHARACTER*10 Files(10) C - DIMENSION Nent(*), Next(*), Ntot(*), - * Lpent(Ntotc,*), Lspin(Ntotc,*), Rdeff(Ntotc,*), - * Rdtru(Ntotc,*), - * Spinx(*) DIMENSION Lw(10,30,20), Lwie(10,10,30,20), Rcoe(4,10),Rcoei(4,10) C DIMENSION G(3) @@ -30,6 +25,10 @@ C type(RMatSpinGroup)::spinGroup type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance + type(SammyChannelInfo)::channelInfo + type(RMatChannelParams)::channel + type(SammyParticlePairInfo)::pairInfo + type(RMatParticlePair)::pair DATA Zero /0.0d0/ DATA Files / 'REFIT0.DAT', 'REFIT1.DAT', 'REFIT2.DAT', * 'REFIT3.DAT', 'REFIT4.DAT', 'REFIT5.DAT', 'REFIT6.DAT', @@ -57,14 +56,25 @@ C *** Output file for this isotope 09000 FORMAT ('/nucld', i2) C C *** write out the resonance parameters etc for REFIT FILES -C +Cc Iel = 2 IF (Ntotc.EQ.2) Iel = 1 IF (Ntotc.EQ.1) Iel = 0 IF (Iel.GT.0) THEN Ig = 1 C *** consider first spin group only - N = Next(Ig) + call resParData%getSpinGroupInfo(spinInfo, Ig) + nent = spinInfo%getNumEntryChannels() + N = spinInfo%getNumExitChannels() + + if ( spinInfo%getNumChannels().ge.Nent+1) then + call spinInfo%getChannelInfo(channelInfo, Nent+1) + call resParData%getChannel(channel, channelInfo) + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, pairInfo) + end if IF (N.EQ.0) THEN Iel = 0 ELSE @@ -72,9 +82,22 @@ C *** consider first spin group only Iel = 1 ELSE Iel = 1 - lp = Lpent(Nent(Ig)+1,ig) - DO 5 i=2,n - IF (Lpent(Nent(Ig)+i,ig).ne.lp) THEN + lp = 0 + if( spinInfo%getNumChannels().ge.Nent+1) then + lp = pair%getPnt() + end if + nmax = n + if (nmax.gt.spinInfo%getNumChannels()) then + nmax = spinInfo%getNumChannels() + end if + DO 5 i=2,nmax + call spinInfo%getChannelInfo(channelInfo, Nent+i) + call resParData%getChannel(channel, channelInfo) + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, pairInfo) + IF (pair%getPnt().ne.lp) THEN Iel = 2 GO TO 6 END IF @@ -114,7 +137,11 @@ C set up to write for spins J to J+Jspin-1 C DO 70 Jx=1,resParData%getNumSpinGroups() call resParData%getSpinGroupInfo(spinInfo, Jx) - call resParData%getSpinGroup(spinGroup, spinInfo) + call resParData%getSpinGroup(spinGroup, spinInfo) + iela = spinInfo%getElasticChannel() + call spinInfo%getChannelInfo(channelInfo, iela) + call resParData%getChannel(channel, channelInfo) + spinjVal = spinGroup%getJ() isojx = spinInfo%getIsotopeIndex() IF (Numiso.GT.0 .AND. IsoJx.NE.Iso) GO TO 70 @@ -131,10 +158,10 @@ C READ (Iunit,20000) Ar(Jx), Gjx, Ehalf2 C Ar(Jx) = Radius for resonance calculations, in 1.e-12 cm C Gjx = g-factor (2J+1)/((2i+1)(2I+1)) Ehalf = Zero - Rad = Rdtru(1,Jx)/10.0d0 + Rad = channel%getApt()/10.0d0 IF (Rad.EQ.0.0d0) Rad = crfn/10.0d0 Sj = dABS(SpinjVal) - Si = dABS(Spinx(Jx)) + Si = dABS(spinInfo%getTargetSpin()) Gjx = (2.0d0*Sj+1.0d0)/(2.0d0*(2.0d0*Si+1.0d0)) WRITE (Iunit,20000) Rad, Gjx, Ehalf WRITE (Iunitx,20020) Rad, Gjx, Ehalf @@ -149,9 +176,10 @@ C Ncj = Number of particle channels for this spin group 40010 FORMAT (' Number of r-coefficients =', 12i6) C C READ (Iunit,50000) (RCOE(2,L),L=1,NCJ) -C ASP(Jx) = AR(Jx)*(1.0-RCOE(2,1)) - IF (Rad.NE.0.0d0 .AND. Rdeff(1,Jx).NE.0.0d0) THEN - Rcoe(2,1) = 1.0d0 - Rdeff(1,Jx)/rad +C ASP(Jx) = AR(Jx)*(1.0-RCOE(2,1)) + IF (Rad.NE.0.0d0 .AND. + * channel%getApe().NE.0.0d0) THEN + Rcoe(2,1) = 1.0d0 - channel%getApe()/rad ELSE Rcoe(2,1) = 0.0d0 END IF @@ -181,14 +209,36 @@ C * LWIE(1,2,Jx,Jw) C Lw (1, Jx,Jw) = Number of entrance channels C Lwie(1,1,Jx,Jw) = Number of "level 1" channels C Lwie(1,2,Jx,Jw) = Number of "level 2" channels - N1 = Nent(Jx) - N23 = Next(Jx) + N1 = spinInfo%getNumEntryChannels() + N23 = spinInfo%getNumExitChannels() N2 = N23 N3 = 0 + + lp = 0 + if ( spinInfo%getNumChannels().ge.N1+1) then + call spinInfo%getChannelInfo(channelInfo, N1+1) + call resParData%getChannel(channel, channelInfo) + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, pairInfo) + lp = pair%getPnt() + end if + IF (N23.GT.1) THEN N2 = 1 - DO 30 N=N1+2,N1+N23 - IF (Lpent(N,Jx).EQ.Lpent(N1+1,Jx)) THEN + nmax = N1+N23 + if (nmax.gt.spinInfo%getNumChannels()) then + nmax = spinInfo%getNumChannels() + end if + DO 30 N=N1+2,nmax + call spinInfo%getChannelInfo(channelInfo, N) + call resParData%getChannel(channel, channelInfo) + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, pairInfo) + IF (pair%getPnt().EQ.Lp) THEN N2 = N2 + 1 ELSE N3 = N3 + 1 @@ -203,7 +253,9 @@ C C READ (Iunit,40000) (Lw(Jz+1,Jx,Jw),Jz=1,Lw(1,Jx,Jw)) Jw = 1 DO 40 Nn=1,N1 - Lw(Nn+1,Jx,Jw) = Lspin(Nn,Jx) + 1 + call spinInfo%getChannelInfo(channelInfo, Nn) + call resParData%getChannel(channel, channelInfo) + Lw(Nn+1,Jx,Jw) = channel%getL() + 1 40 CONTINUE WRITE (Iunit,40000) (Lw(Nn+1,Jx,Jw),Nn=1,N1) WRITE (Iunitx,40030) (Lw(Nn+1,Jx,Jw),Nn=1,N1) @@ -219,8 +271,14 @@ C END IF C END IF IF (N2.GT.0) THEN DO 50 N=1,N2 - IF (Lpent(1+N1,Jx).NE.0) THEN - Lwie(N+1,1,Jx,Jw) = Lspin(N+N1,Jx) + call spinInfo%getChannelInfo(channelInfo, N+N1) + call resParData%getChannel(channel, channelInfo) + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, pairInfo) + IF (Lp.NE.0) THEN + Lwie(N+1,1,Jx,Jw) = channel%getL() ELSE Lwie(N+1,1,Jx,Jw) = 9 END IF @@ -230,8 +288,23 @@ C END IF 40040 FORMAT (' "level 1" l-values =', 12I6) IF (N3.GT.0) THEN DO 60 N=1,N3 - IF (Lpent(N1+n2+1,Jx).NE.0) THEN - Lwie(N+1,1,Jx,Jw) = Lspin(N+N1+N2,Jx) + lp1 = 0 + if (N1+n2+1.le.spinInfo%getNumChannels()) then + call spinInfo%getChannelInfo(channelInfo, + * N1+n2+1) + call resParData%getChannel(channel, channelInfo) + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, pairInfo) + lp1 = pair%getPnt() + end if + index = N1+n2+N + IF (lp1.NE.0.and. + * index.lt.spinInfo%getNumChannels())THEN + call spinInfo%getChannelInfo(channelInfo,index) + call resParData%getChannel(channel, channelInfo) + Lwie(N+1,1,Jx,Jw) = channel%getL() ELSE Lwie(N+1,1,Jx,Jw) = 0 END IF @@ -280,8 +353,15 @@ C C *** write out Energy,spin,l-val,radiation width C READ (Iunit,60000) Er(Lj), AJ(Lj), Lresx, Gg(Lj) Sj = spinGroup%getJ() - Lresx = Lspin(1,resInfo%getSpinGroupIndex()) - Gg = resonance%getWidth(1)/1000.0d0 + + igr = resInfo%getSpinGroupIndex() + call resParData%getSpinGroupInfo(spinInfo, igr) + iela = spinInfo%getElasticChannel() + call spinInfo%getChannelInfo(channelInfo, iela) + call resParData%getChannel(channel, channelInfo) + Lresx = channel%getL() + iGam = spinInfo%getGammaWidthIndex() + Gg = resonance%getWidth(iGam)/1000.0d0 WRITE (Iunit,60000) resonance%getEres(), Sj, Lresx, Gg 60000 FORMAT (F15.6,F6.1,I3,E12.4) WRITE (Iunitx,60010) resonance%getEres(), Sj, Lresx, Gg @@ -291,7 +371,9 @@ C C *** WRITE out elastic neutron width C READ (Iunit,70000) Gn(1,Lj) DO 90 Nn=1,N1 - G(Nn) = resonance%getWidth(2)/1000.0d0 + iCap = spinInfo%getElasticChannel() + iCap = spinInfo%getWidthForChannel(iCap) + G(Nn) = resonance%getWidth(iCap)/1000.0d0 90 CONTINUE WRITE (Iunit,70000) (G(Nn),Nn=1,N1) 70000 FORMAT (24X, 3E12.4) @@ -302,7 +384,8 @@ C *** WRITE out first inelastic neutron width IF (Iel.GE.1) THEN C READ (Iunit,70000) Gn(2,Lj) DO 100 Nn=1,N2 - g(Nn) = resonance%getWidth(Nn+N1+1)/1000.0d0 + iChan = spinInfo%getWidthForChannel(N1 + Nn) + g(Nn) = resonance%getWidth(iChan)/1000.0d0 100 CONTINUE WRITE (Iunit,70000) (G(Nn),Nn=1,N2) WRITE (Iunitx,70020) (G(Nn),Nn=1,N2) @@ -313,7 +396,8 @@ C *** Write out second inelastic neutron width C READ (Iunit,70000) Gn(3,Lj) C Gt(Lj) = Gt(Lj) + Gn(3,Lj) DO 110 Nn=1,N3 - G(Nn) = resonance%getWidth(Nn+N1+N2+1)/1000.0d0 + iChan = spinInfo%getWidthForChannel(N1 + N2 + NN) + G(Nn) = resonance%getWidth(iChan)/1000.0d0 110 CONTINUE WRITE (Iunit,70000) (G(Nn),Nn=1,N3) WRITE (Iunitx,70030) (G(Nn),Nn=1,N3) diff --git a/sammy/src/ref/mrfs0.f b/sammy/src/ref/mrfs0.f index ed6fb3af750e0b5d0f2af7c188eb92d58366f288..bd3fd14cad107ee6a8c72ef0bb90d78e28202df8 100644 --- a/sammy/src/ref/mrfs0.f +++ b/sammy/src/ref/mrfs0.f @@ -45,19 +45,15 @@ C *** sizes C C *** collect information for input file Icf = Idimen (1, 1, '1, 1') - CALL Cnvinp (A_Iprbrd , I_Iflbrd , A_Igoj , - * I_Inent , I_Inext , I_Intot , - * I_Iishif , I_Ilpent , I_Ilspin , A_Ichspi , - * A_Ienbnd , A_Ibound , A_Iechan , - * A_Irdeff , A_Irdtru , A_Iemmm1 , A_Iemmm2 , - * I_Ixclud , A_Ispinx , + CALL Cnvinp (A_Iprbrd , I_Iflbrd , + * A_Ibound , A_Iechan , * I_Ifcros , A_Iangle , A_Idangl , * A_Ibcf , A_Icf2 , A(Icf ), A_Iresol ) I = Idimen (Icf, -1, 'Icf, -1') C C *** collect values needed for parameter file Korder = Idimen (1, 1, '1, 1') - CALL Cnvpar ( A_Iprbrd , I_Iflbrd , I_Intot , + CALL Cnvpar ( A_Iprbrd , I_Iflbrd , * A_Ipreff , I_Ifleff , A_Iprtru , I_Ifltru , I_Iigrra , * I_Ifliso , A_Ideiso , * A_Iprext , I_Iflext , I_Iflpol , diff --git a/sammy/src/ref/mrfs2.f b/sammy/src/ref/mrfs2.f index 16ff125d27796bcc73eba697910a9325b366889d..d026d3bb754b704ca8e0d6f71deeb7061d975b0a 100644 --- a/sammy/src/ref/mrfs2.f +++ b/sammy/src/ref/mrfs2.f @@ -100,23 +100,8 @@ C *** one N = Ngroup IF (Ksindi.EQ.0) N = 1 call make_A_Isiabn(N) - call make_A_Igoj(Ngroup) - call make_I_Inent(Ngroup) - call make_I_Inext(Ngroup) - call make_I_Intot(Ngroup) - call make_I_Iishif(Ngroup * Ntotc) - call make_I_Ilpent(Ngroup * Ntotc) - call make_I_Ilspin(Ngroup * Ntotc) - call make_A_Ichspi(Ngroup * Ntotc) - call make_A_Ienbnd(Ngroup * Ntotc) call make_A_Ibound(Ngroup * Ntotc) call make_A_Iechan(Ngroup * Ntotc) - call make_A_Irdeff (Ngroup * Ntotc) - call make_A_Irdtru(Ngroup * Ntotc) - call make_A_Iemmm1(Ngroup * Ntotc) - call make_A_Iemmm2(Ngroup * Ntotc) - call make_I_Ixclud(Ngroup) - call make_A_Ispinx(Ngroup) C C *** three N = Nangle diff --git a/sammy/src/ref/mrfs3.f b/sammy/src/ref/mrfs3.f index 55be7f5f97ca7ad2d42ceb3cb07e54aca6c0214d..fe82899471c0f735d13dd7338ce05f901f46d647 100644 --- a/sammy/src/ref/mrfs3.f +++ b/sammy/src/ref/mrfs3.f @@ -2,11 +2,8 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Cnvinp (Parbrd, Iflbrd, Goj , - * Nent , Next , Ntot , Ishift, Lpent, Lspin , Chspin, - * Enbnd , Bound, Echan, Rdeff , Rdtru, Emmm1 , Emmm2 , - * Ixclud, Spinx, Ifcros, Angle , Dangle, Bcf, Cf2, Cf, - * Eresol) + SUBROUTINE Cnvinp (Parbrd, Iflbrd, Bound, Echan, + * Ifcros, Angle , Dangle, Bcf, Cf2, Cf, Eresol) C C *** PURPOSE -- collect THE INPUT FILE information from REFIT, i.e. C *** NON-VARIABLE PARAMETERS AND QUANTUM NUMBERS @@ -22,34 +19,29 @@ C use SammyRMatrixParameters_M use SammySpinGroupInfo_M use ExpPars_common_m + use, intrinsic :: ISO_C_BINDING IMPLICIT DOUBLE PRECISION (A-h,o-z) CHARACTER*5 Dtype type(SammyRMatrixParameters)::reorgResPar type(RMatSpinGroup)::rmatSpin type(SammySpinGroupInfo)::spinInfo + type(SammyChannelInfo)::channelInfo + type(RMatChannelParams)::channel + type(SammyParticlePairInfo)::pairInfo + type(RMatParticlePair)::pair + logical(C_BOOL)::calcShift C C DIMENSION Parbrd(Numbrd), Iflbrd(Numbrd), -C * Goj(Ngroup), Nent(Ngroup), -C * Next(Ngroup), Ntot(Ngroup), Ishift(Ntotc,Ngroup), -C * Lpent(Ntotc,Ngroup), Lspin(Ntotc,Ngroup), -C * Chspin(Ntotc,Ngroup), Enbnd(Ntotc,Ngroup), C * Bound(Ntotc,Ngroup), Echan(Ntotc,Ngroup), -C * Rdeff(Ntotc,Ngroup), Rdtru(Ntotc,Ngroup), -C * Emmm1(Ntotc,Ngroup), Emmm2(Ntotc,Ngroup), -C * Ixclud(Ngroup), Spinx(Ngroup), C * IFcros(Ncrsss), Angle(Nangle), Dangle(Nangle), C * Bcf(Ncf), Cf2(Ncf), Cf(Ncf), Eresol(Nresol) C - DIMENSION Parbrd(*), Iflbrd(*), Goj(*), - * Nent(*), Next(*), Ntot(*), Ishift(Ntotc,*), Lpent(Ntotc,*), - * Lspin(Ntotc,*), Chspin(Ntotc,*), Enbnd(Ntotc,*), - * Bound(Ntotc,*), Echan(Ntotc,*), Ixclud(*), Spinx(*), - * Rdeff(Ntotc,*), Rdtru(Ntotc,*), - * Emmm1(Ntotc,*), Emmm2(Ntotc,*), - * Ifcros(*), Angle(*), Dangle(*), Bcf(*), Cf2(*), Cf(*), - * Eresol(*) + DIMENSION Parbrd(*), Iflbrd(*), + * Bound(Ntotc,*), Echan(Ntotc,*), + * Ifcros(*), Angle(*), Dangle(*), Bcf(*), + * Cf2(*), Cf(*), Eresol(*) C C !real(kind=8) Ybeam @@ -147,12 +139,9 @@ C *** RESONANCE QUANTUM NUMBERS AND OTHER INFO call reorgResPar%addIsotope(1.0d0, 1, 1.0d0) end if + ipp = 1 DO 30 J=1,Ngroup - Nent(J) = 1 - Next(J) = 0 - Spinx(J) = Spin00 - Ntot(J) = Nent(J) + Next(J) - Ntotcj = Ntot(J) + Ntotcj = 1 iso = 1 if ( resParData%getNumSpinGroups().ge.j) then @@ -164,18 +153,43 @@ C *** RESONANCE QUANTUM NUMBERS AND OTHER INFO call reorgResPar%addSpinGroup(iso, spinnj(j), parity) call reorgResPar%getSpinGroupInfo(spinInfo, j) call spinInfo%setAbundance(1.0d0) + call spinInfo%setTargetSpin(Spin00) + call spinInfo%setNumEntryChannels(1) + call spinInfo%setNumExitChannels(0) + + calcShift = .false. DO 20 N=1,Ntotcj - Lpent(N,J) = 1 - Ishift(N,J) = 0 - Lspin (N,J) = Llllll(J) - Chspin(N,J) = dabs(Spinnj(J)-Llllll(J)) - Enbnd (N,J) = 0.0d0 + ! make the particle pair + call pair%initialize_DEFAULT(N) + call pair%setCalcShift(calcShift) + call pair%setPnt(1) + + call pairInfo%initialize() + call pairInfo%setInputIndex(ipp) + call pairInfo%setIsotopeIndex(N) + call pairInfo%setPairIndex(-1) + call pairInfo%setTrueRadius(ar(J)*10.0d0) + call pairInfo%setEffectiveRadius(asp(J)*10.0d0) + call pairInfo%setParticlePair(pair) + call reorgResPar%addParticlePair(pairInfo) + + call channel%initialize_DEFAULT(N) + call channel%setL(Llllll(J)) + call channel%setSch( dabs(Spinnj(J)-Llllll(J))) + call channel%setApt(ar(J)*10.0d0) + call channel%setApe(asp(J)*10.0d0) + + call channelInfo%initialize() + call channelInfo%setSpinGroupIndex(J) + call channelInfo%setChannelIndex(N) + call channelInfo%setInputIndex(ipp) + call channelInfo%setParticlePairIndex(ipp) + call reorgResPar%addChannelData(channelInfo, channel) + + ipp = ipp + 1 + Echan (N,J) = 0.0d0 - Rdeff (N,J) = asp(J)*10.0d0 - Rdtru (N,J) = ar(J)*10.0d0 - Emmm1 (N,J) = 0.0d0 - Emmm2 (N,J) = 0.0d0 20 CONTINUE 30 CONTINUE call reorgResPar%transferParticlePairData(resParData) diff --git a/sammy/src/ref/mrfs4.f b/sammy/src/ref/mrfs4.f index f2baf03195bb78ac4eef434b270d3de93240a648..733358c91670e5b0e28a514afbdb36dbbd96aaa1 100644 --- a/sammy/src/ref/mrfs4.f +++ b/sammy/src/ref/mrfs4.f @@ -2,7 +2,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Cnvpar ( Parbrd, Iflbrd, Ntot , + SUBROUTINE Cnvpar ( Parbrd, Iflbrd, * Pareff, Ifleff, Partru, Ifltru, Igrrad, * Ifliso, Deliso, * Parext, Iflext, Iflpol, @@ -34,7 +34,7 @@ C type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance logical(C_BOOL)::reduced - DIMENSION Parbrd(*), Iflbrd(*), Ntot(*) , + DIMENSION Parbrd(*), Iflbrd(*), * Pareff(*), Ifleff(*), Partru(*), Ifltru(*), Igrrad(Ntotc,*), * Ifliso(*), Deliso(*), * Parext(Nrext,Ntotc,*), Iflext(Nrext,Ntotc,*), @@ -50,7 +50,7 @@ C * ParBAG(*), Iflbag(*), Ddcov(*) C C DIMENSION Parbrd(Numbrd), Iflbrd(Numbrd), -C * Ntot (Ngroup), Igrrad(Ntotc,Ngroup), +C * Igrrad(Ntotc,Ngroup), C * Pareff(Numrad), Ifleff(Numrad), Partru(Numrad), C * Ifltru(Numrad), C * Ifliso(Numiso), @@ -98,9 +98,6 @@ C end do end do 40 CONTINUE - DO 50 Ig=1,Ngroup - Ntot(Ig) = 1 - 50 CONTINUE END IF C IF (Numext.NE.0) THEN diff --git a/sammy/src/ref/mwrt0.f b/sammy/src/ref/mwrt0.f index 51350f6bc4bfac0e734fd9959414c01dcfe2e96a..20e8da999e2797ffa8264b910836895f23e25a0f 100644 --- a/sammy/src/ref/mwrt0.f +++ b/sammy/src/ref/mwrt0.f @@ -29,12 +29,8 @@ C C Icf = Idimen (1, 1, '1, 1') C *** Write INPut file - CALL Winpfl (A_Iprbrd , I_Iflbrd , A_Igoj , - * I_Inent , I_Inext , I_Intot , - * I_Iishif , I_Ilpent , I_Ilspin , A_Ichspi , - * A_Ienbnd , A_Ibound , A_Iechan , - * A_Irdeff , A_Irdtru , A_Iemmm1 , A_Iemmm2 , - * I_Ixclud , A_Ispinx , + CALL Winpfl (A_Iprbrd , I_Iflbrd , + * A_Iechan , * I_Ifcros , A_Iangle , A_Idangl , * A_Ibcf , A_Icf2 , A(Icf ), A_Iresol ) I = Idimen (Icf, -1, 'Icf, -1') @@ -50,9 +46,7 @@ C *** Write Parameter file I4 = 1 Kkkgrp = 50 CALL Oldord ( A_Iprbrd , I_Iflbrd , A_Idebrd , - * I_Inent , I_Inext , I_Intot , I_Iishif , - * I_Ilpent , I_Ifexcl , I_Ilspin , A_Ichspi , A_Ienbnd , - * I_Ikppai , I_Ixclud , + * I_Ifexcl , * A_Ipreff , I_Ifleff , A_Ideeff , * A_Iprtru , I_Ifltru , A_Idetru , I_Iigrra , * I_Ifliso , A_Ideiso , diff --git a/sammy/src/ref/mwrt1.f b/sammy/src/ref/mwrt1.f index d00bb52dcab8837f38632cac61cd3c7a1dec4829..8b37d45c67f10883fc31aa23c6d9d2d56e487337 100644 --- a/sammy/src/ref/mwrt1.f +++ b/sammy/src/ref/mwrt1.f @@ -4,10 +4,8 @@ c *** "DATa" file C C -------------------------------------------------------------- C - SUBROUTINE Winpfl (Parbrd, Iflbrd, Goj, - * Nent , Next , Ntot , Ishift, Lpent, Lspin , Chspin, - * Enbnd , Bound , Echan , Rdeff , Rdtru, Emmm1 , Emmm2, - * Ixclud, Spinx , Ifcros, Angle , Dangle, Bcf, Cf2, Cf, + SUBROUTINE Winpfl (Parbrd, Iflbrd, + * Echan , Ifcros, Angle , Dangle, Bcf, Cf2, Cf, * Eresol) C C *** PURPOSE -- WRITE THE INPUT FILE FOR CONTROL MESSAGES FOR @@ -28,29 +26,21 @@ C CHARACTER*5 Dtype C C DIMENSION Parbrd(Numbrd), Iflbrd(Numbrd), -C * Goj(Ngroup), Nent(Ngroup), -C * Next(Ngroup), Ntot(Ngroup), Ishift(Ntotc,Ngroup), -C * Lpent(Ntotc,Ngroup), Lspin(Ntotc,Ngroup), -C * Chspin(Ntotc,Ngroup), Enbnd(Ntotc,Ngroup), -C * Bound(Ntotc,Ngroup), Echan(Ntotc,Ngroup), -C * Rdeff(Ntotc,Ngroup), Rdtru(Ntotc,Ngroup), -C * Emmm1(Ntotc,Ngroup), Emmm2(Ntotc,Ngroup), -C * Ixclud(Ngroup), Spinx(Ngroup), +C * Echan(Ntotc,Ngroup), C * IFcros(Ncrsss), Angle(Nangle), Dangle(Nangle), C * Bcf(Ncf), Cf2(Ncf), Cf(Ncf), Eresol(Nresol) C - DIMENSION Parbrd(*), Iflbrd(*), Goj(*), - * Nent(*), Next(*), Ntot(*), Ishift(Ntotc,*), Lpent(Ntotc,*), - * Lspin(Ntotc,*), Chspin(Ntotc,*), Enbnd(Ntotc,*), - * Bound(Ntotc,*), Echan(Ntotc,*), Ixclud(*), Spinx(*), - * Rdeff(Ntotc,*), Rdtru(Ntotc,*), - * Emmm1(Ntotc,*), Emmm2(Ntotc,*), - * Ifcros(*), Angle(*), Dangle(*), Bcf(*), Cf2(*), Cf(*), - * Eresol(*) + DIMENSION Parbrd(*), Iflbrd(*), + * Echan(Ntotc,*), Ifcros(*), Angle(*), + * Dangle(*), Bcf(*), Cf2(*), Cf(*), Eresol(*) C type(SammySpinGroupInfo)::spinInfo type(RMatSpinGroup)::spinGroup + type(SammyParticlePairInfo)::pairInfo + type(RMatParticlePair)::pair + type(RMatChannelParams)::channel + type(SammyChannelInfo)::channelInfo C OPEN (UNIT=11, FILE='SAMMY.INP', STATUS='unknown', * FORM='formatted') @@ -128,22 +118,39 @@ C C *** ALTERNATIVE TO CARD SET 10 C *** RESONANCE QUANTUM NUMBERS AND OTHER INFO Exclud = ' ' - DO 30 J=1,Ngroup + DO 30 J=1,resParData%getNumSpinGroups() C *** 3 5 10 15 call resParData%getSpinGroupInfo(spinInfo, J) - call resParData%getSpinGroup(spinGroup, spinInfo) - WRITE (11,11000) J, Exclud, Nent(J), Next(J), + call resParData%getSpinGroup(spinGroup, spinInfo) + nent = spinInfo%getNumEntryChannels() + next = spinInfo%getNumExitChannels() + WRITE (11,11000) J, Exclud, Nent, Next, * spinGroup%getJ(), - * spinInfo%getAbundance(), Spinx(J) + * spinInfo%getAbundance(), + * spinInfo%getTargetSpin() C *** 20 30 35 11000 FORMAT (I3, 1X, A1, 4X, I1, 4X, I1, F5.1, F10.5, F5.1) C *** 3 5 10 15 20 30 35 - Ntotcj = Ntot(J) + Ntotcj = spinInfo%getNumChannels() DO 20 N=1,Ntotcj C *** 5 10 15 - WRITE (11,11001) N, Lpent(N,J), Ishift(N,J), - * Lspin (N,J), Chspin(N,J), Enbnd(N,J), Echan (N,J), - * Rdeff (N,J), Rdtru (N,J), Emmm1(N,J), Emmm2 (N,J) + call spinInfo%getChannelInfo(channelInfo, N) + call resParData%getChannel(channel, channelInfo) + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, pairInfo) + if (pair%getCalcShift()) then + Ishift = 1 + else + Ishift = 0 + end if + nx = 9 + WRITE (11,11001) N, pair%getPnt(), Ishift, + * channel%getL(), channel%getSch(), + * channel%getBnd(), Echan (N,J), + * channel%getApe(), channel%getApt(), + * pair%getMass(2), pair%getMass(1) C *** 20 30 40 50, C *** 55 60 70 80 11001 FORMAT (4X, I1, 4X, I1, 4X, I1, 3X, I2, F10.1, 2F10.5, diff --git a/sammy/src/the/mthe0.f b/sammy/src/the/mthe0.f index afe8523ab3a6ce479784d230fd8b8f0952d878e4..0edd73a6f44900042fee9e505c96966f99c824ce 100644 --- a/sammy/src/the/mthe0.f +++ b/sammy/src/the/mthe0.f @@ -49,9 +49,9 @@ C allocate(A_Ivarda(ndatt)) allocate(A_Idum(ndat)) C - CALL Uset (I_Intot , I_ILspin , A_Ibcf , A_Icf2 , + CALL Uset (A_Ibcf , A_Icf2 , * A_Idcov , A_Iudown , A_Iuup , A(Iiuif), A(Idifma), - * A(Ienerg), A_Ivarda , A_Idum , I_Ixclud) + * A(Ienerg), A_Ivarda , A_Idum) C *** Uset determines Napres, sets up arrays Udown, Uup, C *** Iuif, and modifies Vardat C diff --git a/sammy/src/the/mthe1.f b/sammy/src/the/mthe1.f index 978ee7301b2a746fc73986886eac5fb43e578cf5..048bcc28e7f87172ca41282c8921108d1ae289c2 100644 --- a/sammy/src/the/mthe1.f +++ b/sammy/src/the/mthe1.f @@ -2,9 +2,9 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Uset (Ntot, Lspin, Bcf, Cf2, + SUBROUTINE Uset (Bcf, Cf2, * Dcov, Udown, Uup, Iuif, Difmax, - * Energy, Vardat, Dum, Ixclud) + * Energy, Vardat, Dum) C C *** PURPOSE -- GENERATE Uup, Udown, Iuif, Nnpar, and Difmax C @@ -23,15 +23,18 @@ C C type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance - DIMENSION Ntot(*), Lspin(Ntotc,*), Bcf(*), Cf2(*), + type(SammySpinGroupInfo)::spinInfo + type(RMatChannelParams)::channel + type(SammyChannelInfo)::channelInfo + DIMENSION Bcf(*), Cf2(*), * Dcov(*), * Udown(*), Uup(*), Iuif(*), Difmax(*), Energy(*), Vardat(*), - * Dum(*), Ixclud(*) + * Dum(*) C -C DIMENSION Ntot(Ngroup), Lspin(Ntotc,Ngroup), Bcf(Ncf), Cf2(Ncf), +C DIMENSION Bcf(Ncf), Cf2(Ncf), C * Dcov(Nfpres), Udown(Nfpres), Uup(Nfpres), C * Iuif(Nxxres), Difmax(Nres), Energy(Ndat), Vardat(Nnnnn), -C * Dum(Ndat), Ixclud(Ngroup) +C * Dum(Ndat) C DATA Zero /0.0d0/, One /1.0d0/, Two /2.0d0/, Three /3.0d0/ C @@ -68,19 +71,23 @@ C *** Use cutoff on derivatives call resParData%getResonanceInfo(resInfo, N) call resParData%getResonance(resonance, resInfo) eres = resonance%getEres() - igr = resInfo%getSpinGroupIndex() - + igr = resInfo%getSpinGroupIndex() + IF (resInfo%getIncludeInCalc()) THEN - Mmax = Ntot(Igr) - Mmax2 = Mmax + 2 - IF (Ixclud(Igr).NE.1) THEN + call resParData%getSpinGroupInfo(spinInfo, igr) + Mmax = spinInfo%getNumChannels() + Mmax2 = spinInfo%getNumResPar() + IF (spinInfo%getIncludeInCalc()) THEN Difmax(N) = 1.d30 - IF (Kscut.NE.0 .OR. Lspin(1,Igr).NE.0) THEN + iela = spinInfo%getElasticChannel() + call spinInfo%getChannelInfo(channelInfo, iela) + call resParData%getChannel(channel, channelInfo) + IF (Kscut.NE.0 .OR. channel%getL().NE.0) THEN P = eres IF (P.GE.Zero) THEN - G = dABS(resonance%getWidth(1)) - DO M=1,Mmax - G = G + dABS(resonance%getWidth(M+1)) + G = 0.0d0 + DO M=1,resonance%getNumChan() + G = G + dABS(resonance%getWidth(M)) END DO G = G*0.02d0 C 0.02 is 20*(width) and 1/1000 = @@ -93,7 +100,7 @@ C conversion from meV to eV G = G + (Wdop+Widgau+Widexp)*Three END IF END IF - IF (Kscut.NE.0 .AND. Lspin(1,Igr).EQ.0) + IF (Kscut.NE.0 .AND. channel%getL().EQ.0) * G = G*two Difmax(N) = G END IF @@ -124,9 +131,14 @@ C *** This is not correct for PUPd constant-Gamma-gamma Udown(Ipar) = 1.D30 Uup(Ipar) = Zero ELSE - IF (Ixclud(Igr).NE.1) THEN + IF (spinInfo%getIncludeInCalc()) THEN + iela = spinInfo%getElasticChannel() + call spinInfo%getChannelInfo(channelInfo, + * iela) + call resParData%getChannel(channel, + * channelInfo) IF (Kscut.NE.0 .OR. - * Lspin(1,Igr).NE.0) THEN + * channel%getL().NE.0) THEN IF (eres.GE.Zero) THEN Udown(Ipar) = P - G Uup(Ipar) = P + G diff --git a/sammy/src/xct/mxct0.f b/sammy/src/xct/mxct0.f index 00191e6f11c101a2b0a2d2361f1107df4569e371..5990900e3188520c52e57860b602cbdcc4e5b4fa 100644 --- a/sammy/src/xct/mxct0.f +++ b/sammy/src/xct/mxct0.f @@ -72,8 +72,7 @@ C *** Numdrc = max number of energy/value pairs END IF C C *** GUESSTIMATE SIZE OF ARRAY NEEDED FOR SAMMY-XCT - CALL Find_If_Coulomb (I_Inent , A_Izeta , IfCoul, - * resParData%getNumSpinGroups(), Ifdif) + CALL Find_If_Coulomb (A_Izeta , IfCoul, Ifdif) CALL Estxct (Ntwo1, Nthr1, Nthr2, Nthr3, Nfour, Nfour1, Nfour2, * Nfive1, Nfive2, Nfive3, Nfive4, Nfive1x, Nfive3x, Nsix, Neight, * Nnine, Nw1, Icr, Mxany, Nfprrr, K_Coul_N) @@ -113,7 +112,7 @@ C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - < Inpxdr = Idimen (Ng, 1, 'Inpxdr Ngroup, 1') Krext = Nrext IF (Nrext.EQ.0) Krext = 1 - CALL Ppar ( I_Intot , I_Iflext , + CALL Ppar ( I_Iflext , * A(Iiuif), A(Inprdr), A(Inpxdr), Krext) C *** Sbroutine Ppar Sets Nprdr and Npxdr ELSE @@ -131,9 +130,8 @@ C C - - - - - - - - - - - - - - - - < Ix1 = Idimen (Ntwo1, 1, 'Ix1 Ntwo1, 1') IF (resParData%getNumResonances().GT.0) then - CALL Fixx (I_Intot , I_Iishif , I_Ilspin , - * A_Ibound , A_Iechan , I_Ixclud , - * A_Izkte , A(Ixx), A(Ix1), Mxany) + CALL Fixx ( A_Ibound , A_Iechan , + * A_Izkte , A(Ixx), A(Ix1), Mxany) end if C *** SBROUTINE Fixx sets Xx = energy shift I = Idimen (Ix1, -1, ' Ix1, -1') @@ -170,8 +168,7 @@ C Nfour = (Ntriag) * (Napres) Ipgai = Idimen (N, 1, 'Ipgai N, 1') C IF (Napres.NE.0) THEN - CALL Babb ( I_Intot , - * A_Ipolar , I_Iflpol , + CALL Babb ( A_Ipolar , I_Iflpol , * A(Iiuif ), A(Ibr ), A(Ibi ), XxTmp, .true.) C *** SBROUTINE Babb GENERATES ENERGY-INDEPENDENT PORTION OF C *** PARTIAL DERIVATIVES @@ -179,9 +176,8 @@ C *** PARTIAL DERIVATIVES C IF ((Nfprad.NE.0 .OR. Kvcrfn.NE.0 ) .AND. * (Ksolve.NE.2 .OR. Nfprad.NE.Nvprad) ) THEN - CALL Babbga (I_Intot , I_Iishif , I_Ilpent , I_ILspin , - * A_Ibound , A_Iechan , - * A_Izke , A_Izkte , A_Izeta , A(Ibga )) + CALL Babbga ( A_Ibound , A_Iechan , + * A_Izke , A_Izkte , A_Izeta , A(Ibga )) C *** Sbroutine Babbga generates energy-independent portion of partial C *** derivatives wrt unvaried widths (for use in figuring partial C *** derivatives wrt varied channel radii) diff --git a/sammy/src/xct/mxct01.f b/sammy/src/xct/mxct01.f index 3978b6997a11be04b86bbfa21faa63bd8580ca27..fa225f3773896bda1cc9da010b5c77c165aba3d7 100755 --- a/sammy/src/xct/mxct01.f +++ b/sammy/src/xct/mxct01.f @@ -2,7 +2,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Ppar (Ntot, Iflext, Iuif, Nprdr, + SUBROUTINE Ppar (Iflext, Iuif, Nprdr, * Npxdr, Krext) C C *** Purpose -- @@ -16,10 +16,11 @@ C IMPLICIT DOUBLE PRECISION (a-h,o-z) C type(SammyResonanceInfo)::resInfo - DIMENSION Ntot(*), Iflext(Krext,Ntotc,*), + type(SammySpinGroupInfo)::spinInfo + DIMENSION Iflext(Krext,Ntotc,*), * Iuif(*), Nprdr(*), Npxdr(*) C -C DIMENSION Ntot(Ngroup), Iflext(.,.,Ngroup), +C DIMENSION Iflext(.,.,Ngroup), C * Iuif(Nxxres), Nprdr(Ngroup), Npxdr(Ngroup) C C @@ -32,8 +33,9 @@ C call resParData%getResonanceInfo(resInfo, Ires) IF (resInfo%getIncludeInCalc()) THEN igr = resInfo%getSpinGroupIndex() - Mmax = Ntot(Igr) - Mmax2 = Mmax + 2 + call resparData%getSpinGroupInfo(spinInfo, igr) + Mmax = spinInfo%getNumChannels() + Mmax2 = spinInfo%getNumResPar() DO M=1,Mmax2 if(m.eq.1) then Iflr = resInfo%getEnergyFitOption() @@ -54,7 +56,8 @@ C C IF (Nfpext.GT.0) THEN DO Igr=1,resParData%getNumSpinGroups() - N = Ntot(Igr) + call resparData%getSpinGroupInfo(spinInfo, igr) + N = spinInfo%getNumChannels() DO J=1,N IF (Iflext(1,J,Igr).NE.-1) Npxdr(Igr) = 1 END DO @@ -68,10 +71,12 @@ C 99998 FORMAT (' Problem in Ppar -- Nfpres is not correct', 2I5) DO Ires=1,resParData%getNumResonances() call resParData%getResonanceInfo(resInfo, Ires) - igrp = resInfo%getSpinGroupIndex() + igrp = resInfo%getSpinGroupIndex() + call resparData%getSpinGroupInfo(spinInfo, igr) + ntot = spinInfo%getAllChannels() WRITE (21,99997) Ires,resInfo%getEnergyFitOption(), - * (resInfo%getChannelFitOption(m-1), - * M=2,Ntot(Igrp)+2) + * (resInfo%getChannelFitOption(m), + * M=1,Ntot) END DO STOP '[STOP in Ppar in xct/mxct01.f]' END IF @@ -82,10 +87,12 @@ C 99999 FORMAT (' Problem in Ppar -- Napres is not correct', 2I5) DO Ires=1,resParData%getNumResonances() call resParData%getResonanceInfo(resInfo, Ires) - igrp = resInfo%getSpinGroupIndex() + igrp = resInfo%getSpinGroupIndex() + call resparData%getSpinGroupInfo(spinInfo, igr) + ntot = spinInfo%getAllChannels() WRITE (21,99997) Ires,resInfo%getEnergyFitOption(), - * (resInfo%getChannelFitOption(m-1), - * M=2,Ntot(Igrp)+2) + * (resInfo%getChannelFitOption(m), + * M=1,Ntot) 99997 FORMAT ('Iflres(M,', I4, ') =', 10I4) END DO STOP '[STOP in Ppar in xct/mxct01.f # 2]' @@ -99,8 +106,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Babb (Ntot, - * Polar, Iflpol, Iuif, Br, Bi, Xx, numDiff) + SUBROUTINE Babb (Polar, Iflpol, Iuif, Br, Bi, Xx, numDiff) C C *** Purpose -- Generate energy-independent portion of partial C *** derivatives of R with respect to U-parameters @@ -114,13 +120,12 @@ C C type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance + type(SammySpinGroupInfo)::spinInfo logical::numDiff - DIMENSION Ntot(*), - * Polar(2,*), + DIMENSION Polar(2,*), * Iflpol(2,*), Iuif(*), Br(Ntriag,*), Bi(Ntriag,*), Xx(*) C -C DIMENSION Ntot(Ngroup), -C * Polar(2,Nres), Iflpol(2,Nres), +C DIMENSION Polar(2,Nres), Iflpol(2,Nres), C * Iuif(Nxxres), Br(Ntriag,Nyyres), Bi(Ntriag,Nyyres) C DATA Zero /0.0d0/, Two /2.0d0/ @@ -136,8 +141,10 @@ C Igr = resInfo%getSpinGroupIndex() IF (resInfo%getIncludeInCalc()) THEN call resParData%getRedResonance(resonance, resInfo) - Mmax = Ntot(Igr) - Mmax2 = Mmax + 2 + call resparData%getSpinGroupInfo(spinInfo, igr) + Mmax = spinInfo%getNumChannels() + Mmax2 = spinInfo%getNumResPar() + iGam = spinInfo%getGammaWidthIndex() C DO M=1,Mmax2 if(m.eq.1) then @@ -176,9 +183,11 @@ C *** HERE U-PARAMETER IS RESONANCE ENERGY D1 = Two*DSQRT(dABS(arg)) Kj = 0 DO K=1,Mmax - f1 = resonance%getWidth(k+1) + ichan = spinInfo%getWidthForChannel(K) + f1 = resonance%getWidth(ichan) DO J=1,K - f2 = resonance%getWidth(j+1) + ichan = spinInfo%getWidthForChannel(J) + f2 = resonance%getWidth(ichan) Kj = Kj + 1 D = f1*f2*D1 Br(Kj,Iiparx) = D @@ -186,14 +195,16 @@ C *** HERE U-PARAMETER IS RESONANCE ENERGY END DO END DO C - ELSE IF (M.EQ.2) THEN + ELSE IF (M.EQ.(iGam+1)) THEN C *** HERE U-PARAMETER IS GAMMA-SUB-GAMMA - D1 = resonance%getWidth(1) + D1 = resonance%getWidth(iGam) Kj = 0 DO K=1,Mmax - f1 = resonance%getWidth(k+1) + ichan = spinInfo%getWidthForChannel(K) + f1 = resonance%getWidth(ichan) DO J=1,K - f2 = resonance%getWidth(j+1) + ichan = spinInfo%getWidthForChannel(J) + f2 = resonance%getWidth(ichan) Kj = Kj + 1 D = f1*f2*D1 D = D + D @@ -210,7 +221,8 @@ C *** HERE U-PARAMETERS ARE GAMMA-SUB-CHANNEL(M-2) DO J=1,K Kj = Kj + 1 IF (J.EQ.Mmm) THEN - D = resonance%getWidth(k+1) + ichan = spinInfo%getWidthForChannel(k) + D = resonance%getWidth(ichan) IF (K.EQ.Mmm) D = D + D Br(Kj,Iiparx) = D Bi(Kj,Iiparx) = D @@ -221,7 +233,9 @@ C *** HERE U-PARAMETERS ARE GAMMA-SUB-CHANNEL(M-2) DO J=Kk,Mmax IF (J.EQ.Mmm) THEN Jk = (J*(J-1))/2 + K - D = resonance%getWidth(k+1) + ichan = + * spinInfo%getWidthForChannel(k) + D = resonance%getWidth(ichan) IF (K.EQ.Mmm) D = D + D Br(Jk,Iiparx) = D Bi(Jk,Iiparx) = D @@ -239,14 +253,18 @@ C *** channels index = Iipar end if Kj = 0 + iFis1 = spinInfo%getFirstFissionChannel() + iFis1 = spinInfo%getWidthForChannel(iFis1) + iFis2 = spinInfo%getSecondFissionChannel() + iFis2 = spinInfo%getWidthForChannel(iFis2) DO K=1,Mmax DO J=1,K Kj = Kj + 1 Aa = Br(Kj,index-1) Bb = Br(Kj,index) IF (Aa.NE.Zero .OR. Bb.NE.Zero) THEN - W2 = resonance%getWidth(3) - W3 = resonance%getWidth(4) + W2 = resonance%getWidth(iFis1) + W3 = resonance%getWidth(iFis2) Br(KJ,index-1) = -W3* Aa +W2*Bb IF (Iflpol(2,Ires).EQ.0) THEN Br(Kj,index) = Zero @@ -258,8 +276,8 @@ C *** channels Aa = Bi(Kj,index-1) Bb = Bi(Kj,index) IF (Aa.NE.Zero .OR. Bb.NE.Zero) THEN - W2 = resonance%getWidth(3) - W3 = resonance%getWidth(4) + W2 = resonance%getWidth(iFis1) + W3 = resonance%getWidth(iFis2) Bi(Kj,index-1) = -W3*Aa + W2*Bb IF (Iflpol(2,Ires).EQ.0) THEN Bi(Kj,index) = Zero @@ -299,8 +317,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Babbga (Ntot, Ishift, Lpent, Lspin, Bound, Echan, - * Zke, Zkte, Zeta, Bga) + SUBROUTINE Babbga (Bound, Echan, Zke, Zkte, Zeta, Bga) C C *** PURPOSE -- GENERATE ENERGY-INDEPENDENT PORTION OF PARTIAL of R wrt C *** reduced-width-amplitudes (for those which are not varied) @@ -315,7 +332,12 @@ C C type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance - DIMENSION Ntot(*), Ishift(Ntotc,*), Lpent(Ntotc,*),Lspin(Ntotc,*), + type(SammySpinGroupInfo)::spinInfo + type(SammyChannelInfo)::channelInfo + type(RMatChannelParams)::channel + type(SammyParticlePairInfo)::pairInfo + type(RMatParticlePair)::pair + DIMENSION * Bound(Ntotc,*), Echan(Ntotc,*), * Zke(Ntotc,*), Zkte(Ntotc,*), * Zeta(Ntotc,*), Bga(Ntriag,Ntotc,*) @@ -328,8 +350,9 @@ C call resParData%getResonanceInfo(resInfo, Ires) IF (resInfo%getIncludeInCalc()) THEN call resParData%getRedResonance(resonance, resInfo) - igr = resInfo%getSpinGroupIndex() - Mmax = Ntot(Igr) + igr = resInfo%getSpinGroupIndex() + call resParData%getSpinGroupInfo(spinInfo, igr) + Mmax = spinInfo%getNumChannels() eres = resonance%getEres() Su = dABS(eres) DO Mmm=1,Mmax @@ -340,21 +363,34 @@ C Iflr = resInfo%getChannelFitOption(m-1) end if IF (Iflr.LE.0 .OR. Iflr.GT.Nfpres) THEN - width = resonance%getWidth(mmm+1) - IF (Lpent(Mmm,Igr).EQ.1 .AND. width.NE.Zero) THEN - Lsp = Lspin(Mmm,Igr) + call spinInfo%getChannelInfo(channelInfo, Mmm) + call resParData%getChannel(channel, channelInfo) + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, pairInfo) + if (pair%getCalcShift()) then + Ishift = 1 + else + Ishift = 0 + end if + + ichan = spinInfo%getWidthForChannel(Mmm) + width = resonance%getWidth(ichan) + IF (pair%getPnt().EQ.1 .AND. width.NE.Zero) THEN + Lsp = channel%getL() Q = dSQRT( dABS(eres-Echan(Mmm,Igr)) ) Rho = Zkte(Mmm,Igr)*Q Rhox = Zke (Mmm,Igr)*Q IF (Zeta(Mmm,Igr).EQ.Zero) THEN CALL Pgh (Rho, Lsp, Bound(Mmm,Igr), Hr, Hi, P, - * Dp, Ds, Ishift(Mmm,Igr), Iffy) + * Dp, Ds, Ishift, Iffy) ELSE Eta = Zeta(Mmm,Igr)/Q CALL f_sammy_columb_Pghcou(Kwcoul, * Rho, Lsp, Bound(Mmm,Igr), * Hr, Hi, - * P, Dp, Ds, Ishift(Mmm,Igr), Iffy, Eta, + * P, Dp, Ds, Ishift, Iffy, Eta, * Sinphi, Cosphi, Dphi, 0) END IF C @@ -369,7 +405,8 @@ C DO J=1,K Kj = Kj + 1 IF (J.EQ.Mmm) THEN - D = resonance%getWidth(k+1) + ichan = spinInfo%getWidthForChannel(k) + D = resonance%getWidth(ichan) IF (K.EQ.Mmm) D = D + D Bga(Kj,Mmm,Ires) = D END IF @@ -379,7 +416,8 @@ C DO J=Kk,Mmax IF (J.EQ.Mmm) THEN Jk = (J*(J-1))/2 + K - D = resonance%getWidth(k+1) + ichan = spinInfo%getWidthForChannel(k) + D = resonance%getWidth(ichan) IF (K.EQ.Mmm) D = D + D Bga(Jk,Mmm,Ires) = D END IF diff --git a/sammy/src/xct/mxct02.f b/sammy/src/xct/mxct02.f index 2b5328e2272ef1b63073e311feea17e83b5ff3e3..d75e2575b40339b0dd0954d485fcea606ea3d5fe 100644 --- a/sammy/src/xct/mxct02.f +++ b/sammy/src/xct/mxct02.f @@ -88,8 +88,7 @@ C *** Start Coulomb if needed IF (Nnpar.GT.0) CALL Zero_Array (A_Idcoul , * 2*Ntotc*Ng*Ndatb*Nnpar) CALL Zero_Array (A(Icx), Ntotc*Ng) - CALL Start_Coul (I_Inent , I_Intot , A_Igoj , - * A_Izke , A(Icx)) + CALL Start_Coul (A_Izke , A(Icx)) END IF C Idrcp = 1 @@ -138,7 +137,7 @@ C ************ Want dummy Gaussian resonances C C ************ Generate cross sections and derivatives IF (Nd_Xct.NE.0 .AND. Ksolve.NE.2) THEN - CALL N_D_Zcross (A, I_Intot , A(Iiuif), Kount_Helmut) + CALL N_D_Zcross (A, A(Iiuif), Kount_Helmut) ELSE CALL Zcross (A, Nnndrc, Ipoten, Kount_Helmut) END IF diff --git a/sammy/src/xct/mxct03.f b/sammy/src/xct/mxct03.f index 8acae7a4f94d5df3c1930eaf8b20bcf2e44cbf3b..214d0bbaba6646265a78e449a67420cc1ca9b732 100644 --- a/sammy/src/xct/mxct03.f +++ b/sammy/src/xct/mxct03.f @@ -2,7 +2,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE N_D_Zcross (A, Ntot, Iuif, Kount_Helmut) + SUBROUTINE N_D_Zcross (A, Iuif, Kount_Helmut) C C *** PURPOSE -- Calculate numerically the partial derivatives C *** of the cross section wrt R-matrix parameters @@ -23,8 +23,9 @@ C C type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance + type(SammySpinGroupInfo)::spinInfo real(kind=8)::XxTmp(1) - DIMENSION Ntot(*), Iuif(*) + DIMENSION Iuif(*) C DATA Zero /0.0d0/, One /1.0d0/ DATA U_Increment /0.0001d0/ @@ -43,24 +44,24 @@ C C *** First, for the original parameter values -- C *** Generate energy-independent pieces C True is passed to babb since it is used to set parameters for numerical differentiation - CALL Babb (I_Intot , + CALL Babb ( * A_Ipolar , I_Iflpol , A(Iiuif), A(Ibr), * A(Ibi), Xxtmp, .true.) CALL Abpart ( * A(Ialphr), A(Ialphi), A(Ibr ), * A(Ibi ), A(Ipr ), A(Ipi ), A(Idifen), A(Ixden ), A(Iupr ), * A(Iupi ), A(Iiuif ), A(Idifma), A(Inot ), A(Inotu ), A(Ixx ), - * A(Iprer ), A(Iprei ), I_Ixclud ) + * A(Iprer ), A(Iprei )) C C *** Form the cross section Crss - CALL Crosss (A, A_Igoj , I_Inent , I_Inext , - * I_Intot , I_Iishif , I_Ilpent , I_Ifexcl , I_Ilspin , - * A_Ibound , A_Iechan , I_Ixclud , I_Ifcros , + CALL Crosss (A, + * I_Ifexcl , + * A_Ibound , A_Iechan , I_Ifcros , * A_Iprmsc , I_Iflmsc , I_Ijkmsc , A_Izke , * A_Izkte , A_Izkfe , A_Izeta , I_Ifzke , I_Ifzkte , * I_Ifzkfe , A(Inprdr), A(Inpxdr), A(Icrss ), A(Ideriv), * A(Icrssx), A(Idervx), A(Iprer ), A(Iprei ), A(Ixdrcp), - * A(Indrcp), I_Izzzz2 , Nnndrc, 0, Kount_Helmut) + * A(Indrcp), Nnndrc, 0, Kount_Helmut) C IF (Ncrssx.NE.0) THEN N = Ncrsss*Nnpar*resParData%getNumSpinGroups() @@ -80,8 +81,10 @@ C *** Now vary parameters one-by-one to get derivatives IF (resInfo%getEnergyFitOption().GE.0) THEN Igrp = resInfo%getSpinGroupIndex() - Ntotn = Ntot(Igrp) - Ntotn2 = Ntotn + 2 + call resparData%getSpinGroupInfo(spinInfo, Igrp) + Ntotn = spinInfo%getNumChannels() + Ntotn2 = spinInfo%getNumResPar() + iGam = spinInfo%getGammaWidthIndex() call resParData%getRedResonance(resonance, resInfo) @@ -111,17 +114,18 @@ C *** RESONANCE ENERGY eres = B eres = eres*(One+U_Increment/100.d0)**2 call resonance%setEres(eres) - ELSE IF (M.EQ.2) THEN + ELSE IF (M.EQ.(iGam+1)) THEN C *** GAMMA-SUB-GAMMA - G1 = resonance%getWidth(1) + G1 = resonance%getWidth(iGam) X = G1*U_increment call resonance%setWidth(1, G1*(One+U_increment)) - ELSE IF (M.GE.3) THEN + ELSE C *** GAMMA-SUB-N (PARTICLE WIDTHS) M2 = M - 2 + ichan = spinInfo%getWidthForChannel(M) IF (M2.EQ.1 .OR. Kpolar.NE.1) THEN - B = resonance%getWidth(m2+1) - call resonance%setWidth(m2+1, + B = resonance%getWidth(ichan) + call resonance%setWidth(ichan, * B*(One+U_Increment)) X = B*U_Increment ELSE @@ -137,28 +141,25 @@ C END IF C C *** Generate energy-independent pieces with new parameter - CALL Babb ( I_Intot , - * A_Ipolar , + CALL Babb ( A_Ipolar , * I_Iflpol , A(Iiuif ), A(Ibr ), A(Ibi), * Xxtmp, .true.) CALL Abpart (A(Ialphr), * A(Ialphi), A(Ibr ), A(Ibi ), A(Ipr ), * A(Ipi ), A(Idifen), A(Ixden ), A(Iupr ), * A(Iupi ), A(Iiuif ), A(Idifma), A(Inot ), - * A(Inotu ), A(Ixx ), A(Iprer ), A(Iprei ), - * I_Ixclud ) + * A(Inotu ), A(Ixx ), A(Iprer ), A(Iprei )) C C *** Form the cross section Crss with new parameter value - CALL Crosss (A, A_Igoj , I_Inent , - * I_Inext , I_Intot , I_Iishif , I_Ilpent , - * I_Ifexcl , I_Ilspin , A_Ibound , A_Iechan , - * I_Ixclud , I_Ifcros , + CALL Crosss (A, + * I_Ifexcl , A_Ibound , A_Iechan , + * I_Ifcros , * A_Iprmsc , I_Iflmsc , I_Ijkmsc , A_Izke , * A_Izkte , A_Izkfe , A_Izeta , I_Ifzke , * I_Ifzkte , I_Ifzkfe , A(Inprdr), A(Inpxdr), * A(Icrsnd), A(Ideriv), A(Icrxnd), A(Idervx), * A(Iprer ), A(Iprei ), A(Ixdrcp), A(Indrcp), - * I_Izzzz2 , Nnndrc, 0, Kount_Helmut) + * Nnndrc, 0, Kount_Helmut) C C *** Generate numerical derivatives CALL Fix_N_D (A(Icrss), A(Icrssx), A(Ideriv), diff --git a/sammy/src/xct/mxct04.f b/sammy/src/xct/mxct04.f index 9ed4a8a53df844853f11abf29ce123acc3e54d76..084a121db62937bc81f5cab95b118baee43466f7 100644 --- a/sammy/src/xct/mxct04.f +++ b/sammy/src/xct/mxct04.f @@ -27,7 +27,7 @@ C *** from Upr and Upi = energy-dependent pieces of those derivs * A(Ialphr), A(Ialphi), A(Ibr ), * A(Ibi ), A(Ipr ), A(Ipi ), A(Idifen), A(Ixden ), A(Iupr), * A(Iupi ), A(Iiuif ), A(Idifma), A(Inot ), A(Inotu ), A(Ixx ), - * A(Iprer ), A(Iprei ), I_Ixclud ) + * A(Iprer ), A(Iprei )) end if C C *** Generate Pgar & Pgai = partial of R wrt (Gamma-x) * @@ -45,14 +45,14 @@ C C C *** FORM THE CROSS SECTION Crss AND THE ( PARTIAL DERIVATIVES OF THE C *** CROSS SECTION WITH RESPECT TO THE VARIED PARAMETERS ) = Deriv - CALL Crosss (A, A_Igoj , I_Inent , I_Inext , - * I_Intot , I_Iishif , I_Ilpent , I_Ifexcl , I_Ilspin , - * A_Ibound , A_Iechan , I_Ixclud , I_Ifcros , + CALL Crosss (A, + * I_Ifexcl , + * A_Ibound , A_Iechan , I_Ifcros , * A_Iprmsc , I_Iflmsc , I_Ijkmsc , A_Izke , * A_Izkte , A_Izkfe , A_Izeta , I_Ifzke , I_Ifzkte , * I_Ifzkfe , A(Inprdr), A(Inpxdr), A(Icrss ), A(Ideriv), * A(Icrssx), A(Idervx), A(Iprer ), A(Iprei ), A(Ixdrcp), - * A(Indrcp), I_Izzzz2 , Nnndrc, Ipoten, Kount_Helmut) + * A(Indrcp), Nnndrc, Ipoten, Kount_Helmut) C RETURN END diff --git a/sammy/src/xct/mxct05.f b/sammy/src/xct/mxct05.f index e00cf4e71b9316cae2527c0d9e028498799ef853..966e7612aea74bac21b47351ab5eb312d0fcab3c 100644 --- a/sammy/src/xct/mxct05.f +++ b/sammy/src/xct/mxct05.f @@ -4,7 +4,7 @@ C -------------------------------------------------------------- C SUBROUTINE Abpart ( * Alphar, Alphai, Br, Bi, Pr, Pi, Difen, Xden, Upr, Upi, - * Iuif, Difmax, Not, Notu, Xx, Prer, Prei, Ixclud) + * Iuif, Difmax, Not, Notu, Xx, Prer, Prei) C C *** Purpose -- Generate Alphar & Alphai = energy-independent bits C *** and Upr and Upi = Energy-dependent pieces of Pr & Pi @@ -25,8 +25,7 @@ C * Alphar(*), Alphai(*), * Br(Ntriag,*), Bi(Ntriag,*), Pr(Ntriag,*), Pi(Ntriag,*), * Difen(*), Xden(*), Upr(*), Upi(*), Iuif(*), Difmax(*), - * Not(*), Notu(*), Xx(*), Prer(Ntriag,*), Prei(Ntriag,*), - * Ixclud(*) + * Not(*), Notu(*), Xx(*), Prer(Ntriag,*), Prei(Ntriag,*) type(SammyResonanceInfo)::resInfo type(SammySpinGroupInfo)::spinInfo type(RMatResonance)::resonance @@ -37,7 +36,7 @@ C * Bi(Ntriag,Nyyres), Pr(Ntriag,Nyyres), C * Pi(Ntriag,Nyyres), Difen(Nres), Xden(Nres), C * Upr(Nyyres), Upi(Nyyres), Iuif(Nyyres), Difmax(Nres), C * Not(Nres) , Notu(Nyyres), Xx(Nres), Prer(Ntriag,Ngroup), -C * Prei(Ntriag,Ngroup), Ixclud(Ngroup) +C * Prei(Ntriag,Ngroup) C DATA Zero /0.0d0/, One /1.0d0/, Two /2.0d0/ C @@ -62,7 +61,8 @@ C ccccccccccccccccccccccccccccccccccc not(n)=0 ccccccccccccccccccccccccccccccccccc - G2 = resonance%getWidth(1)**2 + ichan = spinInfo%getGammaWidthIndex() + G2 = resonance%getWidth(ichan)**2 G3 = G2**2 Aa = Difen(N)**2 + g3 Xden(N) = One/Aa @@ -90,7 +90,7 @@ C C resonance has spinInfo%getNumChannels() + 1 width associated with it C as gamma width does not have a channel number C - N2 = spinInfo%getNumChannels() + 2 + N2 = spinInfo%getNumResPar() DO M=1,N2 if(m.eq.1) then Ipar = resInfo%getEnergyFitOption() @@ -174,10 +174,12 @@ C resonance has spinInfo%getNumChannels() + 1 width associated with it C as gamma width does not have a channel number C DO IjK=1,spinInfo%getNumChannels() - channelWidthC = resonance%getWidth(ijk + 1) + ichan = spinInfo%getWidthForChannel(Ijk) + channelWidthC = resonance%getWidth(ichan) DO Ijl=1, IjK Ij = Ij + 1 - channelWidthCPrime = resonance%getWidth(ijl + 1) + ichan = spinInfo%getWidthForChannel(Ijl) + channelWidthCPrime = resonance%getWidth(ichan) Prer(Ij,Ig) = Prer(Ij,Ig) + * Aa*channelWidthC*channelWidthCPrime Prei(Ij,Ig) = Prei(Ij,Ig) + diff --git a/sammy/src/xct/mxct06.f b/sammy/src/xct/mxct06.f index bfbe9eed64245fc784c5071407105aab228ae67a..ebe4f9692de80df36ff2461c91f9d0b13614c506 100644 --- a/sammy/src/xct/mxct06.f +++ b/sammy/src/xct/mxct06.f @@ -2,15 +2,12 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Crosss (A, Goj, Nent , Next , Ntot , - * Ishift, Lpent , Jfexcl, Lspin , Bound , Echan , Jxclud, + SUBROUTINE Crosss (A, + * Jfexcl, Bound , Echan , * Jfcros, Parmsc, Jflmsc , Jjkmsc , Zke , * Zkte , Zkfe , Zeta , If_Zke, If_Zkte, If_Zkfe, Nprdr , * Npxdr , Crss , Deriv , Crssx , Derivx , Prer , Prei , - * Xdrcpt, Ndrcpt, Kzzz2, Nnndrc, Ipoten, Kount_Helmut) -C -C *** CAREFUL -- This must be "Jxclud" because it cannot be "Ixclud" which -C *** is in SAMLOC. Likewise several others. + * Xdrcpt, Ndrcpt, Nnndrc, Ipoten, Kount_Helmut) C C *** PURPOSE -- Form the cross sections Crss(Isigma,Igroup) and the C *** ( partial derivatives of the cross section with respect to @@ -36,21 +33,19 @@ C COMMON /Ifsubs/ Ifres, Ifcap, Ifzzz, Ifext, Ifrad, Ifiso, Ifradt C DIMENSION A(-Msize:Msize) - DIMENSION Goj(*), Nent(*), Next(*), Ntot(*), - * Ishift(Ntotc,*), Lpent(Ntotc,*), Jfexcl(Ntotc,*), - * Lspin(Ntotc,*), Bound(Ntotc,*), Echan(Ntotc,*), Jxclud(*), + DIMENSION Jfexcl(Ntotc,*), + * Bound(Ntotc,*), Echan(Ntotc,*), * Jfcros(*), Nprdr(*), Npxdr(*), * Parmsc(*), Jflmsc(*), Jjkmsc(*), * Crss(Ncrsss,*), Deriv(Ncrsss,Nnpar,*), Crssx(2,Ntotc,Ntotc,*), * Derivx(2,Ntotc,Ntotc,Nnpar,*), Zke(Ntotc,*), Zkte(Ntotc,*), * Zkfe(Ntotc,*), Zeta(Ntotc,*), If_Zke(*), If_Zkte(Ntotc,*), * If_Zkfe(Ntotc,*), Prer(Ntriag,*), Prei(Ntriag,*), - * Xdrcpt(*), Ndrcpt(*), Kzzz2(Ntotc,*) + * Xdrcpt(*), Ndrcpt(*) C -C DIMENSION Goj(Ngroup), Nent(Ngroup), Next(Ngroup), -C * Ntot(Ngroup), Ishift(Ntotc,Ngroup), Lpent(Ntotc,Ngroup), -C * Jfexcl(Ntotc,Ngroup), Lspin(Ntotc,Ngroup), Bound(Ntotc,Ngroup), -C * Echan(Ntotc,Ngroup), Jxclud(Ngroup), Jfcros(Ncrsss), +C DIMENSION +C * Jfexcl(Ntotc,Ngroup), Bound(Ntotc,Ngroup), +C * Echan(Ntotc,Ngroup), Jfcros(Ncrsss), C * Nprdr(Ngroup), Npxdr(Ngroup), C * Crss(Ncrsss,Ngroup), Deriv(Ncrsss,Nnpar,Ngroup), C * Crssx(2,Ntotc,Ntotc,Ngroup), Derivx(2,Ntotc,Ntotc,Nnpar,Ngroup), @@ -108,12 +103,12 @@ C END IF Nnnn = N - Ntotnn = Ntot(N) + call resParData%getSpinGroupInfo(spinInfo, N) + Ntotnn = spinInfo%getNumChannels() IF (Ifdif.NE.0) CALL Zero_Array (A(Icscs), 2*Ntriag) - IF (Jxclud(N).EQ.1) THEN + IF (.not.spinInfo%getIncludeInCalc()) THEN If (Ks_Res.NE.2) Kstart = Kstart + Nprdr(N) ELSE - call resParData%getSpinGroupInfo(spinInfo, N) VarAbn = spinInfo%getAbundance() C Nnnn = N @@ -121,7 +116,7 @@ C Npr = 0 IF (Ks_Res.NE.2) Npr = Nprdr(N) IF (Ks_Res.NE.2) Npx = Npxdr(N) - Nn2 = Ntot(N)*(Ntot(N)+1) + Nn2 = Ntotnn*(Ntotnn+1) Nn = Nn2/2 C C @@ -129,9 +124,10 @@ C *** Set R-Matrix and other necessary arrays Lrmat = 0 - Nentnn = Nent(Nnnn) - CALL Setr (Nentnn, Ntotnn, Ishift(1,N), Lpent(1,N), - * Lspin(1,N), Bound(1,N), Echan(1,N), A_Iprext , I_Iflext , + Nentnn = spinInfo%getNumEntryChannels() + Nextnn = spinInfo%getNumExitChannels() + CALL Setr (Nentnn, Ntotnn, N, + * Bound(1,N), Echan(1,N), A_Iprext , I_Iflext , * A(Isinsq), A(Isinph), A(Idphi), A(Icscs), * A(Iss), A(Icc), Zkfe(1,N), Zkte(1,N), Zeta(1,N), * A(Ialphr), A(Ialphi), A(Inot), A(Idpdr), A(Idsdr), @@ -163,9 +159,9 @@ C *** Generate XQ & Xxxx matrices * A(Irootp), A(Linvr), A(Linvi), A(Ixxxxr), A(Ixxxxi)) END IF C - Dgoj = Goj(N) + Dgoj = spinInfo%getGFactor() C *** generate cross section pieces - CALL Sectio (Nent(N), Next(N), Lspin(1,N), Echan(1,N), + CALL Sectio (Nentnn, Nextnn, N, Echan(1,N), * Jfexcl(1,N), Jfcros, Zke(1,N), Zeta(1,N), A(Ixxxxr), * A(Ixxxxi), A(Isinsq), A(Isinph), A(Itermf), Crss(1,N), * Crssx, A(Icscs), Dgoj, Ntotnn) @@ -183,7 +179,7 @@ C *** Generate Q = partial Derivative of Xxxx wrt R C C *** Generate T = partial of cross sections with respect to R C *** T = [ partial (sigma) wrt X ] * Q - CALL Settri (Nent(N), Next(N), Lspin(1,N), Echan(1,N), + CALL Settri (Nentnn, Nextnn, N, Echan(1,N), * Jfexcl(1,N), Zke(1,N), Zeta(1,N), Jfcros,A(Ixxxxr), * A(Ixxxxi), A(Isinsq), A(Isinph), A(Icscs), A(Iqr), * A(Iqi), A(Itr), A(Iti), A(Itx), Ntotnn) @@ -191,7 +187,7 @@ C *** T = [ partial (sigma) wrt X ] * Q C IF (Lrmat.EQ.0 .AND. Npr.NE.0 .AND. Ifres.EQ.0) THEN C *** Find derivatives of cross sections wrt res pars - CALL Derres (Nent(N), Jfexcl(1,N), Jfcros, + CALL Derres (Nentnn, Jfexcl(1,N), Jfcros, * A(Ipr), A(Ipi), Deriv(1,1,N), Derivx(1,1,1,1,N), * A(Itr), A(Iti), A(Itx), A(Inotu), A(Iddddd), Dgoj, * Ntotnn, Minr, Maxr) @@ -199,7 +195,7 @@ C *** Find derivatives of cross sections wrt res pars C IF (Lrmat.EQ.0 .AND. Ifcap.EQ.0) THEN C *** Find derivatives of cs wrt universal capture width - CALL Dercap (Nent(N), Jfexcl(1,N), Jfcros, + CALL Dercap (Nentnn, Jfexcl(1,N), Jfcros, * A(Ipr), A(Ipi), Deriv(1,1,N), Derivx(1,1,1,1,N), * A(Itr), A(Iti), A(Itx), A(Inotu), A(Iddddd), Dgoj, * Ntotnn, Minr, Maxr) @@ -209,7 +205,7 @@ C IF (Ifzzz.EQ.0) THEN C *** Find derivatives of cross sections wrt Tzero & Elzero C *** (via energy-denominator portion of R-matrix) - CALL Dereee (Nent(n), Jfexcl(1,N), Jfcros, + CALL Dereee (Nentnn, Jfexcl(1,N), Jfcros, * Derivx(1,1,1,1,N), A(Itr), A(Iti), A(Itx), * Prer(1,N), Prei(1,N), A(Iddtlz), Ntotnn) END IF @@ -218,7 +214,7 @@ C C *** Find deriv of cross sections with respect to R-ext pars CALL Derext (Jfexcl(1,N), Jfcros,A_Iprext , I_Iflext , * Deriv(1,1,N), Derivx(1,1,1,1,N), A(Itr), A(Itx), - * Dgoj, Ntotnn, Nent(N), Krext) + * Dgoj, Ntotnn, Nentnn, Krext) END IF C IF (Lrmat.EQ.0 .AND. (Ifzzz.EQ.0 .OR. Ifrad.EQ.0)) THEN @@ -227,7 +223,7 @@ C *** Find derivatives of Xxxx wrt rho * A(Idpdr), A(Idsdr), A(Ipxrr), A(Ipxri), Ntotnn) END IF C - Nnext = Next(N) + Nnext = Nextnn IF (Nnext.EQ.0) Nnext = 1 IF (Ifzzz.EQ.0 .OR. Ifrad.EQ.0) THEN C *** Find derivatives of Crss & Crssx wrt rho @@ -240,7 +236,7 @@ C *** Find derivatives of Crss & Crssx wrt rho C IF (Ifrad.EQ.0) THEN C *** Find Deriv of Crss & Crssx wrt radii - CALL Derrad (Nent(N), Next(N), Echan(1,N), + CALL Derrad (Nentnn, Nextnn, Echan(1,N), * Jfexcl(1,N), Jfcros, Zke(1,N), If_Zkte(1,N), * If_Zkfe(1,N), Deriv(1,1,N), Derivx(1,1,1,1,N), * A(Idsf), A(Idst), A(Idstt), A(Idsfx), A(Idstx), @@ -253,20 +249,20 @@ C *** part due to non-varied particle widths) CALL Derwid (Jfexcl(1,N), Jfcros, I_Ifltru , * A(Ipgar), A(Ipgai), Deriv(1,1,N), * Derivx(1,1,1,1,N), A(Itr), A(Iti), A(Itx), - * A(Iddddd), Dgoj, Ntotnn, Nent(N), Nfprrr) + * A(Iddddd), Dgoj, Ntotnn, Nentnn, Nfprrr) END IF C IF (Ifzzz.EQ.0) THEN C *** Find deriv of Crss & Crssx wrt Tzero & Elzero (via rho C via Phi) - CALL Dertze_Phi (Nent(N), Jfcros, Zkfe(1,N),A(Iddtlz), + CALL Dertze_Phi (Nentnn, Jfcros, Zkfe(1,N),A(Iddtlz), * Derivx(1,1,1,1,N), A(Idsf), A(Idsfx), A(Idstx)) END IF C IF (Lrmat.EQ.0 .AND. Ifzzz.EQ.0) THEN C *** Find deriv of Crss & Crssx wrt Tzero & Elzero (via rho C via P & S) - CALL Dertze (Nent(N), Next(N), Jfexcl(1,N), Jfcros, + CALL Dertze (Nentnn, Nextnn, Jfexcl(1,N), Jfcros, * Zkte(1,N), A(Iddtlz), Derivx(1,1,1,1,N), A(Idst), * A(Idstt), A(Idstx), Nnext, Ntotnn) END IF diff --git a/sammy/src/xct/mxct07.f b/sammy/src/xct/mxct07.f index fdd84d0f7b73a4f808085f35b734530d1b280379..c61f1c657989d1357e03e974bc99087c5ae823df 100644 --- a/sammy/src/xct/mxct07.f +++ b/sammy/src/xct/mxct07.f @@ -2,7 +2,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Setr (Nent, Ntot, Ishift, Lpent, Lspin, Bound, Echan, + SUBROUTINE Setr (Nent, Ntot, Igr, Bound, Echan, * Parext, Iflext, Sinsqr, Sin2ph, Dphi, Cscs, Sinphi, * Cosphi, Zkfe, Zkte, Zeta, Alphar, Alphai, Not, Dpdr, Dsdr, Rmat, * Ymat, Rootp, Elinvr, Elinvi, Psmall, Krext, Lrmat, Min, Max, @@ -26,7 +26,7 @@ C use RMatResonanceParam_M IMPLICIT DOUBLE PRECISION (a-h,o-z) C - DIMENSION Ishift(*), Lpent(*), Lspin(*), Bound(*), Echan(*), + DIMENSION Bound(*), Echan(*), * Parext(Krext,Ntotc,*), Iflext(Krext,Ntotc,*), * Sinsqr(*), Sin2ph(*), Dphi(*), Cscs(2,*), Zkfe(*), * Zkte(*), Zeta(*), Alphar(*), Alphai(*), Not(*), Dpdr(*), @@ -36,11 +36,16 @@ C LOGICAL ABOVE_THRESHOLD type(SammyResonanceInfo)::resInfo type(RMatResonance)::resonance + type(SammySpinGroupInfo)::spinInfo + type(SammyChannelInfo)::channelInfo + type(RMatChannelParams)::channel + type(SammyParticlePairInfo)::pairInfo + type(RMatParticlePair)::pair type(sammy_LogarithmicDerivativeCWF) :: cwf_solver ! CWF solver interface REAL(selected_real_kind(14)) :: tmp_holder double precision, parameter :: Big = 1.0E30 C -C DIMENSION Ishift(Ntotc), Lpent(Ntotc), Lspin(Ntotc), Bound(Ntotc), +C DIMENSION Bound(Ntotc), C * Echan(Ntotc), Parext(Nrext,Ntotc,Ngroup), C * Iflext(Nrext,Ntotc,Ngroup), C * Zkte(Ntotc), Zeta(Ntotc), Alphar(Nres), Alphai(Nres), @@ -80,20 +85,36 @@ C END DO END DO C + call resParData%getSpinGroupInfo(spinInfo, igr) + IF (Max.GE.Min .AND. Min.GT.0) THEN DO Ires=Min,Max call resParData%getResonanceInfo(resInfo, Ires) call resParData%getRedResonance(resonance, resInfo) KL = 0 DO K=1,Ntot - channelWidthC = resonance%getWidth(k+1) + ichan = spinInfo%getWidthForChannel(k) + channelWidthC = resonance%getWidth(ichan) + call spinInfo%getChannelInfo(channelInfo, K) + call resParData%getChannel(channel, channelInfo) + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, pairInfo) + if (pair%getCalcShift()) then + Ishift = 1 + else + Ishift = 0 + end if + DO L=1,K - channelWidthCPrime = resonance%getWidth(l+1) + ichan = spinInfo%getWidthForChannel(L) + channelWidthCPrime = resonance%getWidth(ichan) beta = channelWidthC * channelWidthCPrime KL = KL + 1 ! Check on Beta is unnecessary, as we would just add zero - who cares ! Use K to track whether we add closed channel contribution based on value of Ishift - IF( Ishift( K ) == 0 ) THEN ! B=S + IF( Ishift == 0 ) THEN ! B=S IF ( Su.GT.Echan(K) .AND. Su.GT.Echan(L) ) THEN Rmat(1,KL) = Rmat(1,KL)+Alphar(Ires)*Beta IF (Not(Ires).NE.1) THEN @@ -146,6 +167,13 @@ C C II = 0 DO I=1,Ntot + call spinInfo%getChannelInfo(channelInfo, I) + call resParData%getChannel(channel, channelInfo) + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, pairInfo) + II = II + I Rootp (I) = Zero ! new default to cancel out closed channels Elinvr(I) = Zero @@ -159,7 +187,7 @@ C ABOVE_THRESHOLD = .FALSE. if( (Su - Echan(I) ) .GT. Zero ) ABOVE_THRESHOLD = .TRUE. - Lsp = Lspin( I ) + Lsp = channel%getL() Q = Zero ! effective incoming energy IF ( ABOVE_THRESHOLD ) THEN ! effective incoming energy is above channel threshold Q = dSQRT( Su - Echan(I) ) @@ -191,7 +219,7 @@ C P = Zero Dp = Zero IF( ABOVE_THRESHOLD ) THEN - IF( Lpent( I ) == 0 ) THEN ! assign value + IF( pair%getPnt() == 0 ) THEN ! assign value P = One Dp = Zero ELSE ! compute value @@ -202,7 +230,14 @@ C S = Zero Ds = Zero - IF( Ishift( I ) /= 0 ) THEN ! Told B=/=S + + if (pair%getCalcShift()) then + Ishift = 1 + else + Ishift = 0 + end if + + IF( Ishift /= 0 ) THEN ! Told B=/=S IF( .NOT. ABOVE_THRESHOLD ) THEN ! recompute wave functions... ! TODO: Might want to set the rho/eta on the solver based on ! ABOVE_THRESHOLD to begin with - reduces # CWF solves @@ -220,7 +255,7 @@ C Hr = Zero Hi = Zero - IF( Ishift( I ) /= 0 ) THEN + IF( Ishift /= 0 ) THEN ! we set the denominator first, then divide by it later Hr = ( S - Bound( I ) )**2 + P**2 Hi = -P / Hr @@ -269,14 +304,14 @@ C ENDIF ! Looking at the OLD SAMMY check on this part: - ! IF (Iffy.EQ.0 .AND. .NOT. (Ishift(I).EQ.0 .AND. (One-P*Rmat(2,Ii).EQ.One .OR. P.LT.Tiny))) THEN + ! IF (Iffy.EQ.0 .AND. .NOT. (Ishif.EQ.0 .AND. (One-P*Rmat(2,Ii).EQ.One .OR. P.LT.Tiny))) THEN ! ... ! ELSE ! ... ! ENDIF ! Let's apply some boolean algebra, with these as convenience truth values: ! A = ( Iffy.EQ.0 ) - ! B = ( Ishift(I).EQ.0 ) + ! B = ( Ishift.EQ.0 ) ! C = ( One-P*Rmat(2,Ii).EQ.One ) ! D = ( P.LT.Tiny ) ! Now the truth value of the compound statement in the IF can be expressed as: @@ -298,7 +333,7 @@ C Dpdr(I) = Dp Dsdr(I) = Ds - IF (Iffy.EQ.0 .AND. .NOT. (Ishift(I).EQ.0 .AND. + IF (Iffy.EQ.0 .AND. .NOT. (Ishift.EQ.0 .AND. * (One-P*Rmat(2,Ii).EQ.One .OR. P.LT.Tiny))) THEN Elinvr(I) = Hr Elinvi(I) = Hi diff --git a/sammy/src/xct/mxct09.f b/sammy/src/xct/mxct09.f index 57d5525e180aa52644aed767c5f8a8d40c35e781..dd431d65dd14a5295a48e9cf25a146e63d62082e 100644 --- a/sammy/src/xct/mxct09.f +++ b/sammy/src/xct/mxct09.f @@ -63,7 +63,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Sectio (Nent, Next, Lspin, Echan, If_Excl, Ifcros, Zke, + SUBROUTINE Sectio (Nent, Next, igr, Echan, If_Excl, Ifcros, Zke, * Zeta, Xxxxr, Xxxxi, Sinsqr, Sin2ph, Termf, Crss, Crssx, Cscs, * Dgoj, Ntotnn) C @@ -72,9 +72,15 @@ C use fixedi_m use ifwrit_m use varyr_common_m + use EndfData_common_m + use SammyResonanceInfo_M + use RMatResonanceParam_M IMPLICIT DOUBLE PRECISION (a-h,o-z) C - DIMENSION Lspin(*), Echan(*), If_Excl(*), Ifcros(*), Zke(*), + type(SammySpinGroupInfo)::spinInfo + type(SammyChannelInfo)::channelInfo + type(RMatChannelParams)::channel + DIMENSION Echan(*), If_Excl(*), Ifcros(*), Zke(*), * Zeta(*), Xxxxr(*), Xxxxi(*),Sinsqr(*), Sin2ph(*), Termf(*), * Crss(*), Crssx(2,Ntotc,Ntotc,*), Cscs(2,*) DATA Zero /0.0d0/, One /1.0d0/, Two /2.0d0/ @@ -160,18 +166,25 @@ C IF (Ifdif.NE.0) THEN C C *** Angular Distribution Crssx(.,i,ix,igroup) = (1-U)/2 + call resParData%getSpinGroupInfo(spinInfo, igr) DO Ichan=1,Ntotnn + call spinInfo%getChannelInfo(channelInfo, Ichan) + call resParData%getChannel(channel, channelInfo) + Lspin = channel%getL() Ifs = If_Stay (Ichan, Ifdif, Nent, If_Excl(Ichan), Kaptur) IF (Ifs.EQ.0) THEN C IF (Zeta(Ichan).NE.Zero .AND. Su.GT.Echan(Ichan)) THEN - CALL Get_Coul_Phase (Cr, Ci, Lspin(Ichan), + CALL Get_Coul_Phase (Cr, Ci, Lspin, * Echan(Ichan), Zeta(Ichan), Su) ELSE Cr = One Ci = Zero END IF DO Ichanx=1,Nent + call spinInfo%getChannelInfo(channelInfo, Ichanx) + call resParData%getChannel(channel, channelInfo) + Lspinx = channel%getL() IF (Ichanx.LE.Ichan) THEN II = (Ichan*(Ichan-1))/2 + Ichanx ELSE @@ -191,13 +204,13 @@ C *** real and imaginary parts of (1-U)/2 * Zeta(Ichanx).NE.Zero) THEN Br = Ar*Cr - Ai*Ci Bi = Ar*Ci + Ai*Cr - IF ((Lspin(Ichanx).NE.Lspin(Ichan) .OR. + IF ((Lspinx.NE.Lspin .OR. * Zeta(Ichanx).NE.Zeta(Ichan)) .AND. * Ichan.NE.Ichanx ) THEN IF (Zeta(Ichanx).NE.Zero .AND. * Su.GT.Echan(Ichanx)) THEN CALL Get_Coul_Phase (Dr, Di, - * Lspin(Ichanx), Echan(Ichanx), + * Lspinx, Echan(Ichanx), * Zeta(Ichanx), Su) ELSE Dr = One diff --git a/sammy/src/xct/mxct10.f b/sammy/src/xct/mxct10.f index 657c132ffc75c1fb8ef24346e9fb53115d6bd77c..fbb0c83e5df20a8903ba5b64bf5aa8bea43ef565 100644 --- a/sammy/src/xct/mxct10.f +++ b/sammy/src/xct/mxct10.f @@ -78,7 +78,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Settri (Nent, Next, Lspin, Echan, If_Excl, Zke, Zeta, + SUBROUTINE Settri (Nent, Next, igr, Echan, If_Excl, Zke, Zeta, * Ifcros, Xxxxr, Xxxxi, Sinsqr, Sin2ph, Cscs, Qr, Qi, Tr, Ti, Tx, * Ntot) C @@ -88,9 +88,15 @@ C use fixedi_m use ifwrit_m use varyr_common_m + use EndfData_common_m + use SammyResonanceInfo_M + use RMatResonanceParam_M IMPLICIT DOUBLE PRECISION (a-h,o-z) C - DIMENSION Lspin(*), Echan(*), If_Excl(*), Zke(*), Zeta(*), + type(SammySpinGroupInfo)::spinInfo + type(SammyChannelInfo)::channelInfo + type(RMatChannelParams)::channel + DIMENSION Echan(*), If_Excl(*), Zke(*), Zeta(*), * Ifcros(*), Xxxxr(*), Xxxxi(*), Sinsqr(*), Sin2ph(*), Cscs(2,*), * Qr(NN,*), Qi(NN,*), Tr(Ncrsss,*), Ti(Ncrsss,*), Tx(2,Ntriag,*) C @@ -287,10 +293,15 @@ C *** Ar = Qr*Dr - Qi*Di, Ai = Qi*Dr + Qr*Di C C *** Now multiply by Coulomb phase shift if needed C + call resParData%getSpinGroupInfo(spinInfo, igr) DO K=1,Ntot + call spinInfo%getChannelInfo(channelInfo, K) + call resParData%getChannel(channel, channelInfo) + Lspin = channel%getL() + IF (If_Stay (K,Ifdif,Nent,If_Excl(K),Kaptur) .EQ.0) THEN IF (Zeta(K).NE.Zero .AND. Su.GT.Echan(K)) THEN - CALL Get_Coul_Phase (Cr, Ci, Lspin(K), Echan(K), + CALL Get_Coul_Phase (Cr, Ci, Lspin, Echan(K), * Zeta(K), Su) Ix = 1 ELSE @@ -301,6 +312,9 @@ C C KL = (K*(K-1))/2 DO L=1,K + call spinInfo%getChannelInfo(channelInfo, L) + call resParData%getChannel(channel, channelInfo) + LspinL = channel%getL() KL = KL + 1 IF (K.EQ.L) THEN Dr = Cr @@ -308,7 +322,7 @@ C Iy = Ix ELSE IF (Zeta(L).NE.Zero .AND. Su.GT.Echan(L)) THEN - CALL Get_Coul_Phase (Dr, Di, Lspin(L), Echan(L), + CALL Get_Coul_Phase (Dr, Di, LspinL, Echan(L), * Zeta(L), Su) Iy = 1 ELSE diff --git a/sammy/src/xct/mxct26.f b/sammy/src/xct/mxct26.f index 814a600e70ce5acb09b01a50dd98c5712e1c3a39..86e9baae8410735ec85fe64ad9215395bb7f7b76 100644 --- a/sammy/src/xct/mxct26.f +++ b/sammy/src/xct/mxct26.f @@ -2,15 +2,20 @@ C C C -------------------------------------------------------------- C - Subroutine Find_If_Coulomb (Nent, Zeta, IfCoul, Ngroup, Ifdif) + Subroutine Find_If_Coulomb (Zeta, IfCoul, Ifdif) + use EndfData_common_m + use SammySpinGroupInfo_M IMPLICIT DOUBLE PRECISION (a-h,o-z) - DIMENSION Nent(*), Zeta(*) + type(SammySpinGroupInfo)::spinInfo + DIMENSION Zeta(*) C *** On output, IfCoul = Maximum number of entrance channels which C *** require Coulomb IF (Ifdif.EQ.1) THEN Nn = 0 - DO I=1,Ngroup - IF (Nent(I).GT.Nn) Nn = Nent(I) + DO I=1,resParData%getNumSpinGroups() + call resParData%getSpinGroupInfo(spinInfo, I) + nent = spinInfo%getNumEntryChannels() + IF (Nent.GT.Nn) Nn = Nent END DO IF (Zeta(1).NE.0.0d0) THEN IfCoul = Nn @@ -26,22 +31,23 @@ C C C ______________________________________________________________________ C - SUBROUTINE Start_Coul (Nent, Ntot, Dgoj, Zke, Ccoulx) + SUBROUTINE Start_Coul (Zke, Ccoulx) use fixedi_m use fixedr_m use EndfData_common_m use SammySpinGroupInfo_M IMPLICIT DOUBLE PRECISION (a-h,o-z) - DIMENSION Nent(*), Ntot(*), Dgoj(*), Zke(Ntotc,*), + DIMENSION Zke(Ntotc,*), * Ccoulx(Ntotc,*) type(SammySpinGroupInfo)::spinInfo DATA Hth/0.01d0/ DO Igroup=1,resParData%getNumSpinGroups() call resParData%getSpinGroupInfo(spinInfo, Igroup) A = Hth* - * spinInfo%getAbundance()*Dgoj(Igroup) - Nenti = Nent(Igroup) - Ntoti = Ntot(Igroup) + * spinInfo%getAbundance()* + * spinInfo%getGFactor() + Nenti = spinInfo%getNumEntryChannels() + Ntoti = spinInfo%getNumChannels() DO Ich=1,Nenti Ccoulx(Ich,Igroup) = A/Zke(Ich,Igroup)**2 END DO diff --git a/sammy/src/xct/mxct28.f b/sammy/src/xct/mxct28.f index fa91bdc94f339e0e1fdb58242f4272b59e768cf2..5bb7b5366578512d919bd1b44423f27c1b5d9b2b 100755 --- a/sammy/src/xct/mxct28.f +++ b/sammy/src/xct/mxct28.f @@ -38,9 +38,9 @@ C call resParData%getResonanceInfo(resInfo, I) call resParData%getResonance(resonance, resInfo) IF (resonance%getEres().EQ.One) THEN - Gamtot = resonance%getWidth(1) - DO N=1,Ntotc - Gamtot = Gamtot + resonance%getWidth(N+1) + Gamtot = 0.0d0 + DO N=1,resonance%getNumChan() + Gamtot = Gamtot + resonance%getWidth(N) END DO Eee = 1000.0d0*(Eb-resonance%getEres())/Gamtot Gb(1) = Gb(1) + dEXP(-Eee**2) diff --git a/sammy/src/xxx/mxxx4.f b/sammy/src/xxx/mxxx4.f index 86b950ecd014705a46bbe6ad3b5033b07a02d516..6207a1e89dacfcb4861c86aad5acef13bac03954 100644 --- a/sammy/src/xxx/mxxx4.f +++ b/sammy/src/xxx/mxxx4.f @@ -2,7 +2,7 @@ C C C ___________________________________________________________________ C - SUBROUTINE Phase (Energy, Lspin, Chspin, Nent, Ishift, + SUBROUTINE Phase (Energy, * Bound, Pm, Px, Sm, Sx, Hsm, Hsx, * R0m, R0x) C @@ -26,20 +26,22 @@ C EXTERNAL Sf, Pf, Phif C C DIMENSION Energy(Ndat), -C * Lspin(Ntotc,Ngroup), Chspin(Ntotc,Ngroup), -C * Nent(Ngroup), Ishift(Ntotc), C * Bound(Ntotc,Ngroup), C * Pm(Ntotc), C * Px(Ntotc), Sm(Ntotc), Sx(Ntotc), Hsm(Ntotc), C * Hsx(Ntotc), R0m(Ntotc), R0x(Ntotc) C - DIMENSION Energy(*), Lspin(Ntotc,*), - * Chspin(Ntotc,*), Nent(*), Ishift(*), - * Bound(Ntotc,*), + DIMENSION Energy(*), Bound(Ntotc,*), * Pm(*), Px(*), Sm(*), Sx(*), Hsm(*), Hsx(*), R0m(*), R0x(*) type(SammySpinGroupInfo)::spinInfo type(RMatSpinGroup)::spinGroup type(SammyResonanceInfo)::resInfo + type(SammyParticlePairInfo)::pairInfo + type(RMatParticlePair)::pair + type(RMatChannelParams)::channel + type(SammyChannelInfo)::channelInfo + integer,allocatable,dimension(:)::lspin + real(kind=8),allocatable,dimension(:)::chspin type(RMatResonance)::resonance DATA Zero /0.0d0/, One /1.0d0/ C @@ -52,9 +54,10 @@ C WRITE (21,99999) WRITE (70,99999) maxr = 0 - DO N=1,Ngroup + DO N=1,resParData%getNumSpinGroups() minr = maxr + 1 haveRes = .false. + call resParData%getSpinGroupInfo(spinInfo, N) do i = minr, resParData%getNumResonances() call resParData%getResonanceInfo(resInfo, i) if( resInfo%getSpinGroupIndex().ne.n) exit @@ -62,14 +65,22 @@ C haveRes = .true. end do IF (haveRes) THEN - Nentn = Nent(N) + Nentn = spinInfo%getNumEntryChannels() call resParData%getSpinGroupInfo(spinInfo, N) call resParData%getSpinGroup(spinGroup, spinInfo) spinjVal = spinGroup%getJ() - WRITE (21,99998) SpinjVal, (EL,Lspin(J,N),ES, - * Chspin(J,N),J=1,Nentn) - WRITE (70,99998) SpinjVal, (EL,Lspin(J,N),ES, - * Chspin(J,N),J=1,Nentn) + allocate(lspin(Nentn)) + allocate(chspin(Nentn)) + do J=1,Nentn + call spinInfo%getChannelInfo(channelInfo, j) + call resParData%getChannel(channel, channelInfo) + lspin(j) = channel%getL() + chspin(j) = channel%getSch() + end do + WRITE (21,99998) SpinjVal, (EL,Lspin(J),ES, + * Chspin(J),J=1,Nentn) + WRITE (70,99998) SpinjVal, (EL,Lspin(J),ES, + * Chspin(J),J=1,Nentn) WRITE (21,99997) (Epev,J=1,Nentn) WRITE (70,99997) (Epev,J=1,Nentn) WRITE (21,99996) (Energy(1),Energy(Ndat),J=1,Nentn) @@ -77,17 +88,25 @@ C Nentn2 = Nentn + Nentn WRITE (21,99995) (HS,R0,J=1,Nentn2) WRITE (70,99995) (HS,R0,J=1,Nentn2) + deallocate(lspin) + deallocate(chspin) DO J=1,Nentn - Pm(J) = Pf (Rhom,Lspin(J,N)) - Px(J) = Pf (Rhox,Lspin(J,N)) + call spinInfo%getChannelInfo(channelInfo, j) + call resParData%getChannel(channel, channelInfo) + call resParData%getParticlePairInfo( + * pairInfo, + * channelInfo%getParticlePairIndex()) + call resParData%getParticlePair(pair, pairInfo) + Pm(J) = Pf (Rhom,channel%getL()) + Px(J) = Pf (Rhox,channel%getL()) Sm(J) = Zero - Sx(J) = Zero - IF (Ishift(J).NE.0) THEN - Sm(J) = Sf (Rhom, Lspin(J,N), Bound(J,N)) - Sx(J) = Sf (Rhox, Lspin(J,N), Bound(J,N)) + Sx(J) = Zero + IF (pair%getCalcShift()) THEN + Sm(J) = Sf (Rhom, channel%getL(), Bound(J,N)) + Sx(J) = Sf (Rhox, channel%getL(), Bound(J,N)) END IF - Hsm(J) = Phif (Rhom, Lspin(J,N)) *Pi90 - Hsx(J) = Phif (Rhox, Lspin(J,N)) *Pi90 + Hsm(J) = Phif (Rhom, channel%getL()) *Pi90 + Hsx(J) = Phif (Rhox, channel%getL()) *Pi90 END DO DO I=Minr,Maxr call resParData%getResonanceInfo(resInfo, i) diff --git a/sammy/src/xxx/mxxx6.f b/sammy/src/xxx/mxxx6.f index f38fbbcadac52e80676fd8b4fe3b7fb14a9d8f33..6e1262dda08b5f12165ee78ea345a433f4bb898b 100644 --- a/sammy/src/xxx/mxxx6.f +++ b/sammy/src/xxx/mxxx6.f @@ -2,8 +2,7 @@ C C C -------------------------------------------------------------- C - SUBROUTINE Cossin (Nent, Lspin, Zke, Zkfe, Cs, Si, Dphi, N, - * Ipoten) + SUBROUTINE Cossin (Zke, Zkfe, Cs, Si, Dphi, N, Ipoten) C C *** PURPOSE -- GENERATE COS AND SIN OF ( 2.* Phi(HARD SHELL) ) C @@ -11,18 +10,26 @@ C use fixedi_m use ifwrit_m use varyr_common_m + use SammyResonanceInfo_M + use EndfData_common_m + use RMatResonanceParam_M IMPLICIT DOUBLE PRECISION (a-h,o-z) + type(SammySpinGroupInfo)::spinInfo + type(RMatChannelParams)::channel + type(SammyChannelInfo)::channelInfo C C DIMENSION Zke(*), Zkfe(*) - DIMENSION Cs(*), Si(*), Lspin(Ntotc,*), Dphi(*) -C DIMENSION Cs(Ntotc), Si(Ntotc), Lspin(Ntotc,Ngroup), -C * Dphi(Ntotc) + DIMENSION Cs(*), Si(*), Dphi(*) +C DIMENSION Cs(Ntotc), Si(Ntotc), Dphi(Ntotc) DATA Fourpi /0.1256637061435917290808D0/ C - DO 70 K=1,Nent + call resParData%getSpinGroupInfo(spinInfo, N) + DO 70 K=1,spinInfo%getNumEntryChannels() + call spinInfo%getChannelInfo(channelInfo, K) + call resParData%getChannel(channel, channelInfo) A = Zkfe(K)*Squ - L = Lspin(K,N) + L = channel%getL() C IF (L.EQ.0) THEN C *** Phi0 *** @@ -85,7 +92,10 @@ C C = C * 2.0 * Fourpi /Su C *** Is the above formula right ???? factor of two ??? C *** Hard-sphere potential scattering due to this spin group - L = Lspin(1,N) + iela = spinInfo%getElasticChannel() + call spinInfo%getChannelInfo(channelInfo, iela) + call resParData%getChannel(channel, channelInfo) + L = channel%getL() A = 2.0D0*(dFLOAT(L)) + 1.0D0 A = A*C C *** Total hard-sphere potential scattering for this l-value