Writes nweight to a HDF5 file
subroutine write_npa_weights
!+ Writes [[libfida:nweight]] to a HDF5 file
character(charlim) :: filename
integer :: i
real(Float64), dimension(:), allocatable :: ebarr,ptcharr
!! HDF5 variables
integer(HID_T) :: fid
integer(HSIZE_T), dimension(5) :: dim5
integer(HSIZE_T), dimension(3) :: dim3
integer(HSIZE_T), dimension(2) :: dim2
integer(HSIZE_T), dimension(1) :: d
integer :: error
!! define energy - array
allocate(ebarr(inputs%ne_wght))
do i=1,inputs%ne_wght
ebarr(i)=real(i-0.5)*inputs%emax_wght/real(inputs%ne_wght)
enddo
!! define pitch - array
allocate(ptcharr(inputs%np_wght))
do i=1,inputs%np_wght
ptcharr(i)=real(i-0.5)*2./real(inputs%np_wght)-1.
enddo
filename=trim(adjustl(inputs%result_dir))//"/"//trim(adjustl(inputs%runid))//"_npa_weights.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
d(1) = 1
dim2 = [inputs%ne_wght, npa_chords%nchan]
dim3 = [inputs%ne_wght, inputs%np_wght, npa_chords%nchan]
dim5 = [inputs%ne_wght, beam_grid%nx, beam_grid%ny, beam_grid%nz, npa_chords%nchan]
call h5ltmake_dataset_int_f(fid, "/nchan", 0, d, [npa_chords%nchan], error)
call h5ltmake_dataset_int_f(fid, "/nenergy", 0, d, [inputs%ne_wght], error)
call h5ltmake_dataset_int_f(fid, "/npitch", 0, d, [inputs%np_wght], error)
call h5ltmake_compressed_dataset_double_f(fid, "/radius", 1, &
dim2(2:2), npa_chords%radius, error)
call h5ltmake_compressed_dataset_double_f(fid, "/energy", 1, &
dim2(1:1), ebarr, error)
call h5ltmake_compressed_dataset_double_f(fid, "/pitch", 1, &
dim3(2:2), ptcharr, error)
call h5ltmake_compressed_dataset_double_f(fid, "/flux", 2, &
dim2, nweight%flux, error)
call h5ltmake_compressed_dataset_double_f(fid, "/weight", 3, &
dim3, nweight%weight, error)
!Add attributes
call h5ltset_attribute_string_f(fid, "/", "version", version, error)
call h5ltset_attribute_string_f(fid,"/", "description", &
"NPA E-p space sensitivity/weights and Flux calculated by FIDASIM", error)
call h5ltset_attribute_string_f(fid,"/nchan", "description", &
"Number of channels", 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 value", 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,"/radius", "description", &
"Line of sight radius at midplane or tangency point", error)
call h5ltset_attribute_string_f(fid,"/radius", "units","cm", error)
call h5ltset_attribute_string_f(fid,"/flux", "description", &
"Neutral flux: flux(energy,chan)", error)
call h5ltset_attribute_string_f(fid,"/flux", "units", &
"neutrals/(s*dE)", error)
call h5ltset_attribute_string_f(fid,"/weight", "description", &
"E-p space sensivity/weight of NPA diagnostics: weight(energy,pitch,chan)", error)
call h5ltset_attribute_string_f(fid,"/weight","units", &
"neutrals/(s*fast-ion*dE*dP)",error)
if(inputs%calc_npa_wght.ge.2) then !Write diagnostic variables
call write_beam_grid(fid, error)
call h5ltmake_compressed_dataset_double_f(fid, "/emissivity", 4, &
dim5(2:5), nweight%emissivity, error)
call h5ltmake_compressed_dataset_double_f(fid, "/attenuation", 5, &
dim5, nweight%attenuation, error)
call h5ltmake_compressed_dataset_double_f(fid, "/cx", 5, &
dim5, nweight%cx, error)
call h5ltmake_compressed_dataset_double_f(fid, "/phit", 4, &
dim5(2:5), npa_chords%phit%p, error)
call h5ltset_attribute_string_f(fid,"/emissivity", "description", &
"Neutral emissivity: emissivity(x,y,z,chan)", error)
call h5ltset_attribute_string_f(fid,"/emissivity", "units", &
"neutrals/(s*dV)", error)
call h5ltset_attribute_string_f(fid,"/cx", "description", &
"Charge-exchange rate: cx(energy,x,y,z,chan)", error)
call h5ltset_attribute_string_f(fid,"/cx", "units", "s^(-1)", error)
call h5ltset_attribute_string_f(fid,"/attenuation","description", &
"Attenuation factor i.e. survival probability: attenuation(energy,x,y,z,chan)", error)
call h5ltset_attribute_string_f(fid,"/phit","description", &
"Probability of hitting the detector given an isotropic source: phit(x,y,z,chan)", error)
endif
!Close file
call h5fclose_f(fid, error)
!Close HDF5 interface
call h5close_f(error)
if(inputs%verbose.ge.1) then
write(*,'(T4,a,a)') 'NPA weights written to: ',trim(filename)
endif
end subroutine write_npa_weights