diff --git a/sammy/src/acs/macs0.f90 b/sammy/src/acs/macs0.f90 index 600a6521ec4f6db97d62bbab7fc9f1307061027a..4349219efe68500e0eb2908dd375d9e985ca230b 100644 --- a/sammy/src/acs/macs0.f90 +++ b/sammy/src/acs/macs0.f90 @@ -56,7 +56,7 @@ module acs_m use AllocateFunctions_m use acs1_m use acs5_m - use SammyFlowControl_M, only : fitOption, Where_To_Next + use SammyFlowControl_M, only : fitOption, Where_To_Next, urr_calc IMPLICIT DOUBLE PRECISION (a-h,o-z) real(kind=8),allocatable,dimension(:)::A_Idm ! @@ -116,6 +116,7 @@ module acs_m STOP END IF ! +! ! IF (Kendf.EQ.0 .AND. (Iterat.EQ.Itmax .OR. Iterat.EQ.0)) THEN ! *** Prepare the plot files diff --git a/sammy/src/acs/macs1.f90 b/sammy/src/acs/macs1.f90 index b5b83549133b69c325fadbdc194f3cc5b5d6d09e..7d06587aa025a92de1c224d2c7793e74893d9215 100644 --- a/sammy/src/acs/macs1.f90 +++ b/sammy/src/acs/macs1.f90 @@ -89,6 +89,7 @@ module acs1_m use acs3_m use acs4_m use acs6_m + use fit1 IMPLICIT DOUBLE PRECISION (a-h,o-z) ! DIMENSION Anrm(3,*), Knrm(3,*), Kktype(*), Kkkntx(*), & @@ -103,8 +104,19 @@ module acs1_m CALL Zero_Array (Theory(1,1,Iterp1), Kntmax*Kdtset) CALL Zero_Array (Theorl, Kntmax*Numelv*Kdtset) CALL Zero_Array (Dtheor, Kntmax*Nvpall*Kdtset) -! -! *** Generate cross sections + + ! ------------------------------------------------------------------------------ + ! JMB: temporary fix to reset the URR parameter values w/out using SAMMY fitting + ! Note: Parnew from fit/mfit1.f + ! ------------------------------------------------------------------------------ + CALL Parnew ( A_Kkanrm , A_Kkdnrm , I_Kkknrm , I_Kiinrm , & + A_Istrel , A_Kkgglg , A_Istren , A_Idstre , A_Idistn , & + A_Iddist , A_Kkkkgg , A_Kkdlgg , A_Kkkkgf , A_Kkdlgf , & + I_Kkkjnl , I_Kkkjxl , I_Iflstr , I_Ifldst , I_Iflggg , & + I_Iflgff , I_Iflnrm , A_Kkktab , A_Kktabf , A_Kktabn , & + A_Ianold , I_Iflold , A_Idnold ) +! +! *** Generate cross sections -- loop over num. datasets DO Iset=1,Kdtset Ktype = Kktype(Iset) ! diff --git a/sammy/src/acs/macs2.f90 b/sammy/src/acs/macs2.f90 index 61497e54ba9dd654f9b6fd9852ea90a71f0b7497..64b5346dfdc2e06d40d13cf4b35dd8585112852e 100644 --- a/sammy/src/acs/macs2.f90 +++ b/sammy/src/acs/macs2.f90 @@ -199,9 +199,9 @@ module acs2_m WRITE (6,10300) (Engurr(K),K=1,Numurr) 10300 FORMAT (1P5G14.6) WRITE (21,10400) -10400 FORMAT ('STOP in Find_Urr in acs/macs2.f') +10400 FORMAT ('STOP in Find_Urr in acs/macs2_m.f') WRITE (21,10100) WRITE (6,10100) - STOP '[STOP in Find_Urr in acs/macs2.f]' + STOP '[STOP in Find_Urr in acs/macs2_m.f]' END end module acs2_m diff --git a/sammy/src/acs/macs3.f90 b/sammy/src/acs/macs3.f90 index 66519a1c4b43d730a192077e1ae5209014ee1269..0c3554c9f90309aab352db4b92617fb8c489c2d8 100644 --- a/sammy/src/acs/macs3.f90 +++ b/sammy/src/acs/macs3.f90 @@ -457,6 +457,6 @@ module acs3_m 10500 FORMAT ('Bi=', 1P5G14.6) 10600 FORMAT ('Af=', 1P5G14.6) 10700 FORMAT ('Bf=', 1P5G14.6) - STOP '[STOP in Dint in acs/macs3.f]' + STOP '[STOP in Dint in acs/macs3_m.f]' END end module acs3_m diff --git a/sammy/src/acs/macs4.f90 b/sammy/src/acs/macs4.f90 index 161d12f2165d4d675203d01b69fd1aef6bbc9be7..a696dd5d85e50321f88c62bd0ad1e93adc6c0956 100644 --- a/sammy/src/acs/macs4.f90 +++ b/sammy/src/acs/macs4.f90 @@ -212,6 +212,9 @@ module acs4_m use z00001_common_m use constn_common_m IMPLICIT DOUBLE PRECISION (a-h,o-z) + + integer :: orbAngMom + DIMENSION Aelast(7,*), Ainela(7,*) DIMENSION Melast(2,*), Minela(2,*) DIMENSION Iflstr(*), Ifldst(*), Dth(*), Iflgff(*), & @@ -219,34 +222,34 @@ module acs4_m ! ! *** Begin with Streng, Distnt, Gg Ipar = 0 - DO Kumelv=1,Numelv + DO orbAngMom=1,Numelv ! ! *** derivs wrt "streng" - IF (Iflstr(Kumelv).NE.0) THEN - Ipar = Iflstr(Kumelv) + IF (Iflstr(orbAngMom).NE.0) THEN + Ipar = Iflstr(orbAngMom) DO N=1,Jelast - IF (Melast(1,N).EQ.Kumelv) Dth(Ipar) = & + IF (Melast(1,N).EQ.orbAngMom) Dth(Ipar) = & Dth(Ipar) + Sclj*Aelast(4,N)*Aelast(6,N) END DO IF (Inelas.GT.0) THEN DO I=1,Inelas - IF (Minela(1,I).EQ.Kumelv) Dth(Ipar) = Dth(Ipar) & + IF (Minela(1,I).EQ.orbAngMom) Dth(Ipar) = Dth(Ipar) & + Sclj*Ainela(4,I)*Ainela(6,I) END DO END IF END IF ! ! *** derivs wrt "distnt" - IF (Ifldst(Kumelv).NE.0) THEN + IF (Ifldst(orbAngMom).NE.0) THEN ! ### Derivative calc was missing here; NML added Jan 27, 1999 - Ipar = Ifldst(Kumelv) + Ipar = Ifldst(orbAngMom) DO N=1,Jelast - IF (Melast(1,N).EQ.Kumelv) Dth(Ipar) = & + IF (Melast(1,N).EQ.orbAngMom) Dth(Ipar) = & Dth(Ipar) + Sclj*Aelast(5,N)*Aelast(6,N) END DO IF (Inelas.GT.0) THEN DO I=1,Inelas - IF (Minela(1,I).EQ.Kumelv) Dth(Ipar) = Dth(Ipar) & + IF (Minela(1,I).EQ.orbAngMom) Dth(Ipar) = Dth(Ipar) & + Sclj*Ainela(5,I)*Ainela(6,I) END DO END IF @@ -254,16 +257,16 @@ module acs4_m ! ! ! *** derivs wrt "Gg" = gamma width - IF (Iflggg(Kumelv).GT.0) THEN - Ipar = Iflggg(Kumelv) - Lmp = iABS(Kumelv-Kparit) + IF (Iflggg(orbAngMom).GT.0) THEN + Ipar = Iflggg(orbAngMom) + Lmp = iABS(orbAngMom-Kparit) Lmp2 = Lmp/2 - IF (Kumelv.LE.2) THEN + IF (orbAngMom.LE.2) THEN IF (Lmp2*2.EQ.Lmp) THEN Dth(Ipar) = Dth(Ipar) + Sclj*Qsum IF (Jelast.GT.0) THEN DO N=1,Jelast - IF (Melast(1,N).EQ.Kumelv) Dth(Ipar) = & + IF (Melast(1,N).EQ.orbAngMom) Dth(Ipar) = & Dth(Ipar) - Sclj*Aelast(6,N) END DO END IF @@ -273,7 +276,7 @@ module acs4_m IF (Lmp2*2.EQ.Lmp) THEN IF (Jelast.GT.0) THEN DO N=1,Jelast - IF (Melast(1,N).EQ.Kumelv) Dth(Ipar) = & + IF (Melast(1,N).EQ.orbAngMom) Dth(Ipar) = & Dth(Ipar) - Sclj*Aelast(6,N) END DO END IF @@ -292,18 +295,18 @@ module acs4_m END IF ! ! *** Fission - DO Kumelv=Kparit,Numelv,2 - Jlo = Jnl(Kumelv) - Jhi = Jxl(Kumelv) + DO orbAngMom=Kparit,Numelv,2 + Jlo = Jnl(orbAngMom) + Jhi = Jxl(orbAngMom) IF (Jlo.LE.Kumjjv .AND. Jhi.GE.Kumjjv .AND. & - Iflgff(Kumelv).NE.0) THEN - Ipar = Iflgff(Kumelv) - Dth(Ipar) = Dth(Ipar) + Sclj*Der_Fis/Gf(Kumelv) + Iflgff(orbAngMom).NE.0) THEN + Ipar = Iflgff(orbAngMom) + Dth(Ipar) = Dth(Ipar) + Sclj*Der_Fis/Gf(orbAngMom) END IF END DO ! RETURN - END + end subroutine Deriva ! ! ! ______________________________________________________________________ @@ -359,14 +362,25 @@ module acs4_m Chisq, Theory, Dtheor, Delpar, Yyy, Www, Iset) use fixedi_m use ifwrit_m + use EndfData_common_m + IMPLICIT DOUBLE PRECISION (a-h,o-z) + CHARACTER*4 Type(5) + integer :: dataInd, theoInd + type(GridData) :: grid ! DIMENSION Anrm(*), Knrm(*), Ex(*), Ee(*), Sx(*), Wx(*), Chisq(*), & Theory(*), Dtheor(Nvpall,*), Delpar(*), Yyy(*), Www(*) ! DATA Type /'TOTA', 'INEL', 'FISS', 'CAPT', 'ELAS'/ DATA Zero /0.0d0/, One /1.0d0/ + + ! data grids were set up in fff module (Fritz Frohner's Fitacs) + ! TODO: maybe change when moving to general 0 K xs calc + call expData%getGrid(grid,Iset) + dataInd = grid%getDataColumn() + theoInd = dataInd+1 ! Chisqu = Zero DO Ienerg=1,Khmax @@ -419,6 +433,18 @@ module acs4_m END DO END DO END IF + + ! --- fill C++ memory to be used in fitAPI ------------------- + ! TODO: Bring FitAcs into the 0k_reconstruction framework + call grid%addData(Ienerg,1,Energy) + call grid%addData(Ienerg,dataInd,Sx(Ienerg)) + call grid%addData(Ienerg,theoInd,Theory(Ienerg)) + + do Ipar=1,Nvpall + ! TODO: consider whether DerivativeList is more appropriate + call grid%addData(Ienerg,theoInd+Ipar,Dtheor(Ipar,Ienerg)) + end do + ! ----------------------------------------------------------------- ! END IF END DO diff --git a/sammy/src/acs/macs5.f90 b/sammy/src/acs/macs5.f90 index 1f3393b8334a4050cc721bdf87019e7158306cc0..4b11e1af4617595c11e53de4617b59b00801d012 100644 --- a/sammy/src/acs/macs5.f90 +++ b/sammy/src/acs/macs5.f90 @@ -162,7 +162,7 @@ module acs5_m ! IF (Kdtset.GT.40) WRITE (6,10000) Kdtset 10000 FORMAT ('Kdtset=',I10, 'but have only 40') - IF (Kdtset.GT.40) STOP '[STOP in Plott2 in acs/macs5.f]' + IF (Kdtset.GT.40) STOP '[STOP in Plott2 in acs/macs5_m.f]' ! New = 0 Kkkkev = Keveng @@ -175,7 +175,7 @@ module acs5_m ELSE WRITE (6,10200) Keveng 10200 FORMAT ('Keveng=',I10) - STOP '[STOP in Plott2 in acs/macs5.f # 2]' + STOP '[STOP in Plott2 in acs/macs5_m.f # 2]' END IF Nsntyp = 0 DO Iset=1,Kdtset @@ -191,7 +191,7 @@ module acs5_m WRITE (6,10100) I, E(I,Iset), Dum(I), Ee, Ooo WRITE (21,10100) I, E(I,Iset), Dum(I), Ee, Ooo, De 10100 FORMAT (' E, Dum, Ee=', I5, 1P5G14.6) - STOP '[STOP in Plott2 in acs/macs5.f # 2]' + STOP '[STOP in Plott2 in acs/macs5_m.f # 2]' END IF END DO ! @@ -293,7 +293,7 @@ module acs5_m ! 200 WRITE (6,99996) Summry 99996 FORMAT (' ENDF file name is wrong: ##', A70, '##') - STOP '[STOP in Make_File_3_Urr in acs/macs5.f]' + STOP '[STOP in Make_File_3_Urr in acs/macs5_m.f]' END end module acs5_m diff --git a/sammy/src/acs/macs6.f90 b/sammy/src/acs/macs6.f90 index 639f4c037f91422fffbfd40922d26999d9351ff3..93373b86d7d161c14cc29345a228ecd587d7fa7d 100644 --- a/sammy/src/acs/macs6.f90 +++ b/sammy/src/acs/macs6.f90 @@ -49,7 +49,7 @@ module acs6_m Const(2) = Two ! RETURN - END + end subroutine Define_Constants ! ! ! ______________________________________________________________________ @@ -90,7 +90,7 @@ module acs6_m ! *** Since Get_Density is used only as a ratio, normalization constant ! *** may be omitted RETURN - END + end function Get_Density ! ! ! ______________________________________________________________________ @@ -113,5 +113,6 @@ module acs6_m 10000 FORMAT (' Kk > 3 in function Kwhich ', 5I5) Kwhich = Kk RETURN - END + end function Kwhich + end module acs6_m diff --git a/sammy/src/acs/macs7.f90 b/sammy/src/acs/macs7.f90 index 245888a6af284504e2bda0825c69403879f67eda..46fb468c87613dbadce407de504f91d3fca7d1b5 100644 --- a/sammy/src/acs/macs7.f90 +++ b/sammy/src/acs/macs7.f90 @@ -291,7 +291,7 @@ module acs7_m ! ========================================== ! RETURN - END + end subroutine Dres ! ! ! ______________________________________________________________________ @@ -365,5 +365,6 @@ module acs7_m END IF Getfff = One/dSQRT(P) RETURN - END + end function Getfff + end module acs7_m \ No newline at end of file diff --git a/sammy/src/blk/SammyFlowControl_M.f90 b/sammy/src/blk/SammyFlowControl_M.f90 index b97ff10bf1ff75beadd7f429da2aa5335fc3c267..d97d9fc7d1db75bb609a207d0aa324fb046322ff 100644 --- a/sammy/src/blk/SammyFlowControl_M.f90 +++ b/sammy/src/blk/SammyFlowControl_M.f90 @@ -5,4 +5,7 @@ module SammyFlowControl_M integer, save :: K_Stop_Segment integer::fitOption ! 1: npv, 2: ipq, 3: mpw, 4: ywy, 5: wyw + + ! do not complete SAMMY operation, only calc theory and deriv's + logical::urr_calc = .false. end module SammyFlowControl_M diff --git a/sammy/src/dat/mdat0.f90 b/sammy/src/dat/mdat0.f90 index 9597460aadabca7d6d0a9b5d9c960f5877d3118e..b796e12f02a72d718d3dcca14c6c5ea86e06d1b1 100644 --- a/sammy/src/dat/mdat0.f90 +++ b/sammy/src/dat/mdat0.f90 @@ -129,7 +129,7 @@ module Samdat_0_M ! If a second grid (if it exists) is the auxilary grid ! call expData%destroy() - call expData%initialize() + call expData%initialize() ! we do this to make sure it's empty call grid%initialize() diff --git a/sammy/src/end/mout5.f b/sammy/src/end/mout5.f index 823a652bc463fc4f1734078d4ae05822b7c132dd..c502d27875ad0e395535c59a9a5cf120e3a6ff5b 100644 --- a/sammy/src/end/mout5.f +++ b/sammy/src/end/mout5.f @@ -14,8 +14,8 @@ C use ifwrit_m use fixedr_m use constn_common_m - use acs6_m use EndfData_common_m, only : radFitFlags + use acs6_m IMPLICIT DOUBLE PRECISION (a-h,o-z) C DIMENSION Anrm(3,*), Dnrm(3,*), Kktype(*), Edirin(*), Sdirin(*), diff --git a/sammy/src/fff/mfff0.f90 b/sammy/src/fff/mfff0.f90 index c4b7183f967e452591849f276ac821e69901bc03..f9809757a726deb042778e8430ec84dd39f300ce 100644 --- a/sammy/src/fff/mfff0.f90 +++ b/sammy/src/fff/mfff0.f90 @@ -197,6 +197,7 @@ module fff_m CALL Adjust_Fff (A_Kkkkex , A_Kkspin , A_Kkkpty ) ! ! *** Read the cross section data + ! also set up C++ mem. GridDataList CALL Acsinp (I_Kkktyp , I_Kkkknt , A_Kkkkex , A_Keeset , & A_Kssset , A_Kuuset , A_Kwwset ) CLOSE (UNIT=15) diff --git a/sammy/src/fff/mfff9.f90 b/sammy/src/fff/mfff9.f90 index 3b8265f567a6dcf253fa7a3e24cdf40cecf752fe..6aa76adb31ef63ad224cf970d57f640e0cf1118f 100644 --- a/sammy/src/fff/mfff9.f90 +++ b/sammy/src/fff/mfff9.f90 @@ -12,7 +12,12 @@ module fff9_m use exploc_urr_common_m use namfil_common_m use fff4_m + use EndfData_common_m IMPLICIT DOUBLE PRECISION (a-h,o-z) + + integer :: numDataSets, dataInd + type(GridData) :: expGrid + DIMENSION Kktype(*), Kkkntx(*), Ex(*), Eeeset(Kntmax,*), & Sssset(Kntmax,*), Uuuset(Kntmax,*), Wwwset(Kntmax,*) DIMENSION Ktype(5) @@ -25,9 +30,17 @@ module fff9_m Emaxa = Zero Iu17 = 15 IF (Kexptd.EQ.1) Iu17 = 17 - Kdtx = Kdtset - IF (Kpntws.NE.0) Kdtx = Kpntws - DO I=1,Kdtx + numDataSets = Kdtset + IF (Kpntws.NE.0) numDataSets = Kpntws + DO I=1,numDataSets + ! ---------------------------------- + ! add grids to the gridDataList + ! ---------------------------------- + call expGrid%initialize() + dataInd = 2 ! 2 since angle-integrated and no time-shift (URR) + call expGrid%setDataIndex(dataInd) + call expData%addGrid(expGrid) + ! ---------------------------------- IF (Kexptd.EQ.1) THEN IF (Fdatax(I).EQ.Fblank) GO TO 30 CALL Filopn (17, Fdatax(I), 0) @@ -149,6 +162,7 @@ module fff9_m ! are not two data points at same energy ! use fixedr_m + IMPLICIT DOUBLE PRECISION (a-h,o-z) DIMENSION E(*), S(*), U(*), W(*), EX(*) CHARACTER*4 Rela, Relax, Utyp diff --git a/sammy/src/fit/mfit0.f b/sammy/src/fit/mfit0.f index 99541f410503da1ce71f12d224653601fdc959b3..651d34aecb1f3d7c08cf12f62baee4569b5da670 100644 --- a/sammy/src/fit/mfit0.f +++ b/sammy/src/fit/mfit0.f @@ -16,6 +16,7 @@ C use exploc_urr_common_m use AllocateFunctions_m use SammyLptPrinting_m + use fit1 IMPLICIT DOUBLE PRECISION (a-h,o-z) real(kind=8),allocatable,dimension(:)::A_Icorrx integer,allocatable,dimension(:)::I_Itabcx diff --git a/sammy/src/fit/mfit1.f b/sammy/src/fit/mfit1.f90 similarity index 68% rename from sammy/src/fit/mfit1.f rename to sammy/src/fit/mfit1.f90 index 6f06a8d223b84d3c85206643bc33e16eecec1509..ec93bc8962bc6396e8e18bd789034c805c35dcf8 100644 --- a/sammy/src/fit/mfit1.f +++ b/sammy/src/fit/mfit1.f90 @@ -1,35 +1,37 @@ -C -C -C ______________________________________________________________________ -C - SUBROUTINE Parnew ( Anrm, Dnrm, Knrm, Inrm, Strenl, Gglg, Streng, - * Dstren, Distnt, Ddistn, Gg, Dlgg, Gf, Dlgf, Jnl, Jxl, Iflstr, - * Ifldst, Iflggg, Iflgff, Iflnrm, Tab, Tabf, Tabn, Aold, Iflold, - * Dold) -C -C *** Purpose -- Generate the improved cross section parameters for URR -C +! +module fit1 + contains +! +! ______________________________________________________________________ +! + SUBROUTINE Parnew ( Anrm, Dnrm, Knrm, Inrm, Strenl, Gglg, Streng, & + Dstren, Distnt, Ddistn, Gg, Dlgg, Gf, Dlgf, Jnl, Jxl, Iflstr, & + Ifldst, Iflggg, Iflgff, Iflnrm, Tab, Tabf, Tabn, Aold, Iflold, & + Dold) +! +! *** Purpose -- Generate the improved cross section parameters for URR +! use fixedi_m use samxxx_common_m use fixedr_m use EndfData_common_m use ResonanceCovariance_M IMPLICIT DOUBLE PRECISION (a-h,o-z) -C - DIMENSION Anrm(3,*), Dnrm(3,*), Knrm(3,*), Inrm(*), - * Strenl(Numelv,*), Gglg(Numelv,*), Streng(Numelv,*), - * Dstren(Numelv,*), Distnt(Numelv,*), Ddistn(Numelv,*), - * Gg(Numelv,*), Dlgg(Numelv,*), Gf(Numelv,Numjjv,*), - * Dlgf(Numelv,Numjjv,*), Jnl(*), Jxl(*), Iflstr(Numelv,*), - * Ifldst(Numelv,*), Iflggg(Numelv,*), IFlgff(Numelv,Numjjv,*), - * Iflnrm(3,*), Tab(Numelv,4,Numurr,*), - * Tabf(Numelv,Numjjv,Numurr,*), Tabn(3,Kdtset,*), - * Aold(3,*), Iflold(3,*), Dold(3,*) +! + DIMENSION Anrm(3,*), Dnrm(3,*), Knrm(3,*), Inrm(*), & + Strenl(Numelv,*), Gglg(Numelv,*), Streng(Numelv,*), & + Dstren(Numelv,*), Distnt(Numelv,*), Ddistn(Numelv,*), & + Gg(Numelv,*), Dlgg(Numelv,*), Gf(Numelv,Numjjv,*), & + Dlgf(Numelv,Numjjv,*), Jnl(*), Jxl(*), Iflstr(Numelv,*), & + Ifldst(Numelv,*), Iflggg(Numelv,*), IFlgff(Numelv,Numjjv,*), & + Iflnrm(3,*), Tab(Numelv,4,Numurr,*), & + Tabf(Numelv,Numjjv,Numurr,*), Tabn(3,Kdtset,*), & + Aold(3,*), Iflold(3,*), Dold(3,*) type(ResonanceCovariance)::uCov -C +! DATA Zero /0.0d0/ -C -C +! +! call covData%getUCovariance(uCov) Ngtvf = 0 Ipar = 0 @@ -39,8 +41,7 @@ C IF (Dstren(L,Kumurr).NE.Zero) THEN Ipar = Ipar + 1 Mm = Mm + Ipar - IF (Ipar.NE.Iflstr(L,Kumurr)) - * STOP '[STOP in Parnew in fit/mfit1.f]' + IF (Ipar.NE.Iflstr(L,Kumurr)) STOP '[STOP in Parnew in fit/mfit1.f]' Strenl(L,Kumurr) = covData%getUParamValue(Ipar) val = uCov%getCovariance(Ipar, Ipar) Streng(L,Kumurr) = dEXP(Strenl(L,Kumurr)) @@ -49,8 +50,7 @@ C IF (Ddistn(L,Kumurr).NE.Zero) THEN Ipar = Ipar + 1 Mm = Mm + Ipar - IF (Ipar.NE.Ifldst(L,Kumurr)) - * STOP '[STOP in Parnew in fit/mfit1.f # 2]' + IF (Ipar.NE.Ifldst(L,Kumurr)) STOP '[STOP in Parnew in fit/mfit1.f # 2]' Distnt(L,Kumurr) = covData%getUParamValue(Ipar) val = uCov%getCovariance(Ipar, Ipar) Ddistn(L,Kumurr) = dSQRT(val) @@ -58,8 +58,7 @@ C IF (L.LE.2 .AND. Dlgg(L,Kumurr).NE.Zero) THEN Ipar = Ipar + 1 Mm = Mm + Ipar - IF (Ipar.NE.Iflggg(L,Kumurr)) - * STOP '[STOP in Parnew in fit/mfit1.f # 3]' + IF (Ipar.NE.Iflggg(L,Kumurr)) STOP '[STOP in Parnew in fit/mfit1.f # 3]' Gglg(L,Kumurr) = covData%getUParamValue(Ipar) Gg (L,Kumurr) = dEXP(Gglg(L,Kumurr)) val = uCov%getCovariance(Ipar, Ipar) @@ -69,7 +68,7 @@ C Gg (L,Kumurr) = Gg (L-2,Kumurr) END IF END DO -C +! DO L=1,Numelv Jlo = Jnl(L) Jhi = Jxl(L) @@ -78,8 +77,7 @@ C IF (Dlgf(L,J,Kumurr).NE.Zero) THEN Ipar = Ipar + 1 Mm = Mm + Ipar - IF (Iflgff(L,J,Kumurr).NE.Ipar) - * STOP '[STOP in Parnew in fit/mfit1.f # 4]' + IF (Iflgff(L,J,Kumurr).NE.Ipar) STOP '[STOP in Parnew in fit/mfit1.f # 4]' Gf(L,J,Kumurr) = covData%getUParamValue(Ipar) val = uCov%getCovariance(Ipar, Ipar) Dlgf(L,J,Kumurr) = dSQRT(val) @@ -94,26 +92,25 @@ C Gf(L,J,Kumurr) = - Gf(L,J,Kumurr) END IF ELSE - Gf(L,J,Kumurr) = - * covData%getUParamValue(Iflgff(L,J,Kumurr)) + Gf(L,J,Kumurr) = covData%getUParamValue(Iflgff(L,J,Kumurr)) END IF END IF END DO END DO -C +! END DO -C *** End of loop on Kumurr +! *** End of loop on Kumurr IF (Ngtvf.EQ.1) THEN WRITE (6,10300) WRITE (21,10300) END IF -10100 FORMAT ('###################################################', - * /, '## CAUTION. Value of Fission width went negative.#', - * /, '## Absolute value will be used instead. #') -10200 FORMAT ('## Gf(', I2, ',', I2, ',', I2, ')=', 1PG14.6, - * ' #') +10100 FORMAT ('###################################################', & + /, '## CAUTION. Value of Fission width went negative.#', & + /, '## Absolute value will be used instead. #') +10200 FORMAT ('## Gf(', I2, ',', I2, ',', I2, ')=', 1PG14.6, & + ' #') 10300 FORMAT ('###################################################') -C +! IF (Kdtold.GT.0) THEN DO I=1,Kdtold DO J=1,3 @@ -139,9 +136,9 @@ C END DO END DO END IF -C +! IF (Inrm(1).EQ.0) THEN -C *** Here add if these are new parameters +! *** Here add if these are new parameters DO I=1,Kdtset DO J=1,3 IF (Iflnrm(J,I).GT.0) THEN @@ -159,8 +156,8 @@ C *** Here add if these are new parameters END DO END DO END IF -C -C *** STORE NEW RESULTS FOR FINAL TABLE +! +! *** STORE NEW RESULTS FOR FINAL TABLE Itp2 = Iterp1 + 1 DO Kumurr=1,Numurr DO L=1,Numelv @@ -182,66 +179,67 @@ C *** STORE NEW RESULTS FOR FINAL TABLE END DO END DO RETURN - END -C -C -C ______________________________________________________________________ -C - SUBROUTINE Csunc (Kktype, Kkkntx, Eeeset, Sssset, Uuuset, Wwwset, - * Theory, Dtheor, It, Konvrg) -C -C Csunc PRINTS FINAL CROSS SECTION UNCERTAINTIES -C + end subroutine Parnew +! +! +! ______________________________________________________________________ +! + SUBROUTINE Csunc (Kktype, Kkkntx, Eeeset, Sssset, Uuuset, Wwwset, & + Theory, Dtheor, It, Konvrg) +! +! Csunc PRINTS FINAL CROSS SECTION UNCERTAINTIES +! use fixedi_m use ifwrit_m use samxxx_common_m use EndfData_common_m use ResonanceCovariance_M IMPLICIT DOUBLE PRECISION (a-h,o-z) - DIMENSION Kkkntx(*), Eeeset(Kntmax,*), Sssset(Kntmax,*), - * Uuuset(Kntmax,*), Wwwset(Kntmax,*), Kktype(*), - * Theory(Kntmax,Kdtset,*), Dtheor(Nvpall,Kntmax,*) + DIMENSION Kkkntx(*), Eeeset(Kntmax,*), Sssset(Kntmax,*), & + Uuuset(Kntmax,*), Wwwset(Kntmax,*), Kktype(*), & + Theory(Kntmax,Kdtset,*), Dtheor(Nvpall,Kntmax,*) type(ResonanceCovariance)::uCov CHARACTER*8 Type(5) - DATA Type /'total ', 'inelastc', 'fission ', 'capture ', - * 'elastic '/ + DATA Type /'total ', 'inelastc', 'fission ', 'capture ', & + 'elastic '/ DATA Zero /0.0d0/, One /1.0d0/ -C +! call covData%getUCovariance(uCov) IF (Konvrg.EQ.1) THEN WRITE (21,20000) -20000 FORMAT (//, ' Iteration has converged. The following cross sec - *tions were generated', //, - * ' with the final parameter values.') +20000 FORMAT (//, ' Iteration has converged. The following cross sections were generated', //, & + ' with the final parameter values.') ELSE WRITE (21,20100) 20100 FORMAT (//, ' Cross section at final values of parameters.') END IF -C +! Cf = One DO Iset=1,Kdtset WRITE (21,10000) Type(Kktype(Iset)) -10000 FORMAT (//, 7x, 'NEUTRON', 9x, 'Average ', A8, - * ' cross section', /, - * ' NO. ENERGY INPUT FIT', /, - * ' (keV) (b) (b)', /) +10000 FORMAT (//, 7x, 'NEUTRON', 9x, 'Average ', A8, & + ' cross section', /, & + ' NO. ENERGY INPUT FIT', /, & + ' (keV) (b) (b)', /) DO K=1,Kkkntx(Iset) Var = Zero DO M=1,Nvpall DO N=1,M val = uCov%getCovariance(M, N) Var = Var + Dtheor(M,K,Iset)*val*Dtheor(N,K,Iset) - IF (M.NE.N) Var = Var + - * Dtheor(M,K,Iset)*val*Dtheor(N,K,Iset) + IF (M.NE.N) Var = Var + & + Dtheor(M,K,Iset)*val*Dtheor(N,K,Iset) END DO END DO Utc = dSQRT(Var)*Cf - WRITE (21,10100) K, Eeeset(K,Iset), Sssset(K,Iset), - * Uuuset(K,Iset), Theory(K,Iset,It), Utc -10100 FORMAT (I4, -3PF11.4, 0PF12.5, ' +-', F8.5, F12.5, - * ' +-', F8.5) + WRITE (21,10100) K, Eeeset(K,Iset), Sssset(K,Iset), & + Uuuset(K,Iset), Theory(K,Iset,It), Utc +10100 FORMAT (I4, -3PF11.4, 0PF12.5, ' +-', F8.5, F12.5, & + ' +-', F8.5) END DO END DO -C +! RETURN - END + end subroutine Csunc + +end module diff --git a/sammy/src/lru/mlru1.f b/sammy/src/lru/mlru1.f index 5ab5fce7963d4ab8411fb3322f69c761c94b066e..f9a58782b7664928487e0960bbb2f7746d1a58ec 100644 --- a/sammy/src/lru/mlru1.f +++ b/sammy/src/lru/mlru1.f @@ -13,8 +13,8 @@ C use fixedr_m use namfil_common_m use constn_common_m - use acs6_m use EndfData_common_m, only : radFitFlags + use acs6_m IMPLICIT DOUBLE PRECISION (a-h,o-z) C DIMENSION Streng(Numelv,*), Distnt(Numelv,*), Gg(Numelv,*), diff --git a/sammy/src/lru/mlru2.f b/sammy/src/lru/mlru2.f index 0b7b2e4a61c8c9b009131f5d8a61a2317a29ae4c..9b5af552ff36d0a8333b2c190e68ee5705f8f855 100644 --- a/sammy/src/lru/mlru2.f +++ b/sammy/src/lru/mlru2.f @@ -15,9 +15,9 @@ C use fixedr_m use constn_common_m use EndfData_common_m + use EndfData_common_m, only : radFitFlags use acs4_m use acs6_m - use EndfData_common_m, only : radFitFlags IMPLICIT DOUBLE PRECISION (a-h,o-z) C DIMENSION Streng(Numelv,*), Distnt(Numelv,*), Gg(Numelv,*), diff --git a/sammy/src/par/mpar03.f90 b/sammy/src/par/mpar03.f90 index 164dfb5d671e78fa70bd638261e4547ab2109228..983d1d4ed82b6f4293116e4d930b2fb5d6ad64f8 100644 --- a/sammy/src/par/mpar03.f90 +++ b/sammy/src/par/mpar03.f90 @@ -52,13 +52,10 @@ module par3_m do read(iu32,'(a)', end=20) line - if (trim(line).eq."") goto 30 + if (trim(line).eq."") goto 20 call reader%addLine(line) end do 20 continue - WRITE (21,300) -300 FORMAT (' BLANK LINE MISSING IN .Par FILE') - 30 continue ierr = reader%readParameterCard1(resParData) @@ -541,14 +538,11 @@ module par3_m read(Kfile,'(a)', end=20) line if (trim(line).eq."") then backspace(Kfile) - goto 30 + goto 20 end if call reader%addLine(line) end do 20 continue - WRITE (21,300) -300 FORMAT (' BLANK LINE MISSING IN .Par FILE') - 30 continue ier = reader%readParameterCard10(resParData) if( ier.ne.0) then diff --git a/sammy/src/sam/SammyApi.h b/sammy/src/sam/SammyApi.h index abca0f4e729639ec71adbd1b3aeea4aa8059e120..0d2c63861204b440045643d3d285d8fad5148351 100644 --- a/sammy/src/sam/SammyApi.h +++ b/sammy/src/sam/SammyApi.h @@ -9,6 +9,7 @@ extern "C" { #endif void sammy_init(int * sizeData); +void sammy_init_api(char * filename, int * sizeData); void sammy_get_theory(int * iter); diff --git a/sammy/src/sam/sammy_api_m.f90 b/sammy/src/sam/sammy_api_m.f90 index 2ad8ae870d63c0189707f5a741f71865ccb11187..3f3cbee868fc2c4ae4567cedc424310c9b95c83e 100755 --- a/sammy/src/sam/sammy_api_m.f90 +++ b/sammy/src/sam/sammy_api_m.f90 @@ -1,5 +1,6 @@ module sammy_api_m use, intrinsic :: ISO_C_BINDING + use, intrinsic :: iso_fortran_env ! input_unit use SammyFlowControl_M use over_common_m use oops_common_m @@ -37,8 +38,37 @@ module sammy_api_m integer::K_Stop contains + + subroutine sammy_init_api(infile,sizeData) BIND(C,name="sammy_init_api") + character(kind = C_CHAR), dimension(*), intent(in) :: infile + character(len=:), allocatable :: filename + integer :: nChar, sizeData, i + ! ----- calculate string length --------- + nChar = 0 + do + if (infile(nChar+1) == C_NULL_CHAR) exit + nChar = nChar + 1 + end do + ! ----- transfer to fortran string ------ + allocate(character(len=nChar)::filename) + filename = transfer(infile(1:nChar),filename) + + ! ----- read user-input ----------------- + open(unit=input_unit,file=filename) + ! ----- run normal sammy initialization - + call sammy_init(sizeData) + close(unit=input_unit) + end subroutine sammy_init_api + subroutine sammy_init(sizeData) BIND(C,name="sammy_init") - integer::sizeData + integer :: sizeData + if( sizeData.lt.0 ) then + urr_calc = .true. ! when we're calling this through fitAPI + sizeData = sizeData * (-1) + else + urr_calc = .false. + end if + call resParData%initialize() call multScat%initialize() call sampleDim%initialize() @@ -55,7 +85,6 @@ contains Nsize = Msize Kount_Initial = - Msize - Kmsize = 1000 Jmsize = 1000 Lmsize = 1000 @@ -81,7 +110,13 @@ contains ! now get to first theory part - call sammy_do_segments('samthe') + ! TODO: Add unresolved calc to 0K framework + if( urr_calc ) then + call sammy_do_segments('genfit') + else + call sammy_do_segments('samthe') + end if + end subroutine sammy_init subroutine sammy_get_theory(iter) BIND(C,name="sammy_get_theory") @@ -100,7 +135,13 @@ contains ii = iter - call Samthe_0 + if( urr_calc ) then + call Samacs_0 + Where_To_Next = 'samthe' + return + else + call Samthe_0 + end if ! run until we find one of the relevant sammy fit subroutine iter = 0 @@ -130,7 +171,9 @@ contains character(len=*)::endSeg do - if (Where_To_Next.eq.endSeg) return + if (Where_To_Next.eq.endSeg) then + return + end if call sammy_next_segment() end do diff --git a/sammy/src/sammy/CMakeLists.txt b/sammy/src/sammy/CMakeLists.txt index e8dc5c4b8c5d6325ac6e318339da7f19fcbd0d11..e7a7864cb24824dc28f77fe81838b11e84eb629b 100644 --- a/sammy/src/sammy/CMakeLists.txt +++ b/sammy/src/sammy/CMakeLists.txt @@ -151,7 +151,7 @@ APPEND_SET(SAMMY_SOURCES ../fin/mfin5.f90 ../fit/mfit0.f - ../fit/mfit1.f + ../fit/mfit1.f90 ../fit/mfit2.f ../fit/mfit3.f