Writes neutron to a HDF5 file
subroutine write_neutrons
!+ Writes [[libfida:neutron]] to a HDF5 file
integer(HID_T) :: fid
integer(HSIZE_T), dimension(1) :: dim1
integer(HSIZE_T), dimension(4) :: dim4
integer :: error
character(charlim) :: filename
!! write to file
filename=trim(adjustl(inputs%result_dir))//"/"//trim(adjustl(inputs%runid))//"_neutrons.h5"
!Open HDF5 interface
call h5open_f(error)
!Create file overwriting any existing file
call h5fcreate_f(filename, H5F_ACC_TRUNC_F, fid, error)
!Write variables
if(particles%nclass.gt.1) then
dim1(1) = 1
call h5ltmake_dataset_int_f(fid,"/nclass", 0, dim1, [particles%nclass], error)
dim1(1) = particles%nclass
call h5ltmake_compressed_dataset_double_f(fid, "/rate", 1, dim1, neutron%rate, error)
call h5ltset_attribute_string_f(fid,"/rate","description", &
"Neutron rate: rate(orbit_class)", error)
else
dim1(1) = 1
call h5ltmake_dataset_double_f(fid, "/rate", 0, dim1, neutron%rate, error)
call h5ltset_attribute_string_f(fid,"/rate","description", &
"Neutron rate", error)
endif
call h5ltset_attribute_string_f(fid,"/rate","units","neutrons/s",error )
if(inputs%dist_type.eq.1) then
dim1(1) = 1
call h5ltmake_dataset_int_f(fid,"/nenergy",0,dim1,[fbm%nenergy], error)
call h5ltmake_dataset_int_f(fid,"/npitch",0,dim1,[fbm%npitch], error)
call h5ltmake_dataset_int_f(fid,"/nr",0,dim1,[fbm%nr], error)
call h5ltmake_dataset_int_f(fid,"/nz",0,dim1,[fbm%nz], error)
dim4 = shape(neutron%weight)
call h5ltmake_compressed_dataset_double_f(fid, "/weight", 4, dim4, neutron%weight, error)
call h5ltmake_compressed_dataset_double_f(fid,"/energy", 1, dim4(1:1), fbm%energy, error)
call h5ltmake_compressed_dataset_double_f(fid,"/pitch", 1, dim4(2:2), fbm%pitch, error)
call h5ltmake_compressed_dataset_double_f(fid,"/r", 1, dim4(3:3), fbm%r, error)
call h5ltmake_compressed_dataset_double_f(fid,"/z", 1, dim4(4:4), fbm%z, error)
call h5ltset_attribute_string_f(fid,"/nenergy", "description", &
"Number of energy values", error)
call h5ltset_attribute_string_f(fid,"/npitch", "description", &
"Number of pitch values", error)
call h5ltset_attribute_string_f(fid,"/nr", "description", &
"Number of R values", error)
call h5ltset_attribute_string_f(fid,"/nz", "description", &
"Number of Z values", error)
call h5ltset_attribute_string_f(fid,"/weight", "description", &
"Neutron Weight Function: weight(E,p,R,Z), rate = sum(f*weight)", error)
call h5ltset_attribute_string_f(fid,"/weight", "units","neutrons*cm^3*dE*dp/fast-ion*s", error)
call h5ltset_attribute_string_f(fid,"/energy","description", &
"Energy array", error)
call h5ltset_attribute_string_f(fid,"/energy", "units","keV", error)
call h5ltset_attribute_string_f(fid,"/pitch", "description", &
"Pitch array: p = v_parallel/v w.r.t. the magnetic field", error)
call h5ltset_attribute_string_f(fid,"/r","description", &
"Radius array", error)
call h5ltset_attribute_string_f(fid,"/r", "units","cm", error)
call h5ltset_attribute_string_f(fid,"/z","description", &
"Z array", error)
call h5ltset_attribute_string_f(fid,"/z", "units","cm", error)
endif
call h5ltset_attribute_string_f(fid, "/", "version", version, error)
call h5ltset_attribute_string_f(fid,"/","description",&
"Neutron rate calculated by FIDASIM", error)
!Close file
call h5fclose_f(fid, error)
!Close HDF5 interface
call h5close_f(error)
if(inputs%verbose.ge.1) then
write(*,'(T4,a,a)') 'Neutrons written to: ', trim(filename)
endif
end subroutine write_neutrons