7 #include "ScaleSTL/FortranTestMacros.h"
12 use origen_testpaths_m
15 use nemesis_comm
, only: build_types, initialize, finalize, node
20 integer :: count1, count2, count_rate
28 integer :: itot,nsteps
29 real(C_DOUBLE),
allocatable :: times(:)
30 real(C_DOUBLE),
allocatable :: fluxes(:)
31 integer,
parameter :: nnucl0=2
32 real(C_DOUBLE) :: conc0(nnucl0)
33 integer :: nucl0(nnucl0), typ0(nnucl0)
36 real(C_DOUBLE),
allocatable :: conc_fw(:,:), conc_ad(:,:)
43 integer :: solver, nterm, nshrt, cram_order, internal_steps
44 real(C_DOUBLE) :: abstol, reltol
46 real(C_DOUBLE) :: dot1, dot2
50 if(node() /= 0 )
call finalize
53 allocate(times(0:nsteps),fluxes(1:nsteps))
62 typ0=[origen_sublib_2ac,origen_sublib_2ac]
64 call libw%initialize(pwrlib_filepath)
67 call casew1%initialize(libw)
68 call casew1%set_times(times)
69 call casew1%set_fluxes(fluxes)
70 call casew1%set_initial_concentrations(nnucl0,nucl0,conc0,typ0,origen_concentrationunit_gatoms)
72 itot = casew1 % libw % get_itot()
76 call casew1%b_case%set_solver_options(2, -1, -2, -3.0d0, -4.0d0, 14, 4)
79 call casew1%b_case%get_solver_options(solver, nterm, nshrt, abstol, reltol, cram_order, internal_steps)
84 expect_eq(-3.0d0, abstol)
85 expect_eq(-4.0d0, reltol)
86 expect_eq(14, cram_order)
87 expect_eq(4, internal_steps)
90 call system_clock(count1, count_rate)
93 call casew1%get_concentrations(conc_fw)
95 call system_clock(count2, count_rate)
97 Write(*,*)
"ORIGEN RUN TOOK (ms):", dble(count2-count1)/dble(count_rate)*1000.0
102 expect_near(1.1397904580875401d-5, conc_fw(1,libw%find_nuclide(origen_sublib_2ac, 942400)), 1d-10)
103 expect_near(3.1582984913113634d-7, conc_fw(1,libw%find_nuclide(origen_sublib_3fp, 541350)), 1d-10)
110 nucl0=[942390,942400]
112 typ0=[origen_sublib_2ac,origen_sublib_2ac]
114 call casew2%initialize(libw,.true.)
115 call casew2%set_times(times)
116 call casew2%set_fluxes(fluxes)
117 call casew2%set_initial_concentrations(nnucl0,nucl0,conc0,typ0,origen_concentrationunit_gatoms)
118 call casew2%b_case%set_solver_options(2, -1, -2, -3.0d0, -4.0d0, 14, 2)
120 call casew2%get_concentrations(conc_ad)
125 dot1 = dot1 + conc_fw(0,i)*conc_ad(1,i);
126 dot2 = dot2 + conc_fw(1,i)*conc_ad(0,i);
129 expect_near(1d0, dot1/dot2, 1d-10)
132 call casew1%destroy()
135 deallocate(times,fluxes)