tstState.f90

./Core/dc/f/tests/tstState.f90

1 program tststate
2 
3 #include "ScaleSTL/FortranTestMacros.h"
4 
7 
8 implicit none
9 
10 type(origen_state) :: state
11 type(origen_concentrations) :: concs,prev
12 type(origen_nuclideset) :: nucset
13 
14 type(scalestl_vec_int) :: ivec
15 type(scalestl_vec_dbl) :: dvec
16 
17 integer,parameter :: l=c_size_t
18 integer(C_SIZE_T) :: i,n,nn
19 integer(C_INT) :: s
20 
21 call state % initialize()
22 call state % getptr_concs(concs)
23 assert_c_assoc(concs)
24 
25 !nuclide ids
26 call ivec % initialize_size(3_l)
27 call ivec%set(1_l,10010)
28 call ivec%set(2_l,10020)
29 call ivec%set(3_l,10030)
30 call nucset%initialize_legacy_vec(1,1,1,ivec)
31 
32 !nuclide densities
33 call dvec % initialize_size(3_l)
34 call dvec%set(1_l,0.1d0)
35 call dvec%set(2_l,0.2d0)
36 call dvec%set(3_l,0.3d0)
37 
38 !set up a concentrations object
39 call concs % initialize()
40 call concs % set_nuclide_set(nucset)
41 call concs % set_vals_vec(dvec);
42 
43 !check stuff
44 expect_eq(10001001,nucset%ids_at(1_l))
45 expect_eq(20001002,nucset%ids_at(2_l))
46 expect_eq(30001003,nucset%ids_at(3_l))
47 expect_eq(1_l,nucset % num_in_sublib(origen_sublib_1lt))
48 expect_eq(1_l,nucset % num_in_sublib(origen_sublib_2ac))
49 expect_eq(1_l,nucset % num_in_sublib(origen_sublib_3fp))
50 expect_eq(0.1d0,concs%vals_at(1_l))
51 expect_eq(0.2d0,concs%vals_at(2_l))
52 expect_eq(0.3d0,concs%vals_at(3_l))
53 expect_eq(3_l,concs%vals_size())
54 
55 expect_true(nucset%has_sublibs())
56 expect_eq(3_l,nucset%count_sublibs())
57 
58 expect_true(nucset%has_sublib(origen_sublib_1lt))
59 expect_true(nucset%has_sublib(origen_sublib_2ac))
60 expect_true(nucset%has_sublib(origen_sublib_3fp))
61 expect_false(nucset%has_sublib(origen_sublib_4u1))
62 expect_false(nucset%has_sublib(origen_sublib_5u2))
63 expect_false(nucset%has_sublib(origen_sublib_6u3))
64 expect_false(nucset%has_sublib(origen_sublib_7u4))
65 expect_false(nucset%has_sublib(origen_sublib_8u5))
66 expect_false(nucset%has_sublib(origen_sublib_9by))
67 
68 nn=0
69 do s=1,9
70  n=0
71  do i=nucset%sublib_begin(s),nucset%sublib_end(s)
72  n=n+1
73  nn=nn+1
74  end do
75  if( s<=3 )then
76  expect_eq(1,n)
77  else
78  expect_eq(0,n)
79  end if
80 end do
81 expect_eq(3,nn)
82 
83 !save the pointer
84 prev%instance_ptr = concs%instance_ptr
85 
86 !tell the state to manage this pointer (don't delete now!)
87 call state % manageptr_concs(concs)
88 
89 !nullify and get pointer and check it's the right one
90 concs%instance_ptr = c_null_ptr
91 call state % getptr_concs(concs)
92 assert_c_assoc(concs)
93 assert_c_assoc2(concs,prev)
94 
95 !nullify both pointers
96 concs%instance_ptr = c_null_ptr
97 prev%instance_ptr = c_null_ptr
98 
99 call ivec % destroy()
100 call dvec % destroy()
101 call state % destroy()
102 
103 end program