write_bt_D_D Subroutine

public subroutine write_bt_D_D(id, namelist_file)

Write Deuterium-Deuterium reaction rates to a HDF5 file

Arguments

Type IntentOptional AttributesName
integer(kind=HID_T), intent(inout) :: id

HDF5 file or group object id

character(len=*), intent(in) :: namelist_file

Namelist file that contains settings


Calls

proc~~write_bt_d_d~~CallsGraph proc~write_bt_d_d write_bt_D_D h5ltmake_dataset_int_f h5ltmake_dataset_int_f proc~write_bt_d_d->h5ltmake_dataset_int_f h5ltmake_dataset_double_f h5ltmake_dataset_double_f proc~write_bt_d_d->h5ltmake_dataset_double_f h5gclose_f h5gclose_f proc~write_bt_d_d->h5gclose_f h5ltset_attribute_string_f h5ltset_attribute_string_f proc~write_bt_d_d->h5ltset_attribute_string_f interface~parallel_sum parallel_sum proc~write_bt_d_d->interface~parallel_sum h5gcreate_f h5gcreate_f proc~write_bt_d_d->h5gcreate_f interface~h5ltmake_compressed_dataset_double_f h5ltmake_compressed_dataset_double_f proc~write_bt_d_d->interface~h5ltmake_compressed_dataset_double_f proc~parallel_sum_i1 parallel_sum_i1 interface~parallel_sum->proc~parallel_sum_i1 proc~parallel_sum_i0 parallel_sum_i0 interface~parallel_sum->proc~parallel_sum_i0 proc~parallel_sum_i2 parallel_sum_i2 interface~parallel_sum->proc~parallel_sum_i2 proc~parallel_sum_d4 parallel_sum_d4 interface~parallel_sum->proc~parallel_sum_d4 proc~parallel_sum_d5 parallel_sum_d5 interface~parallel_sum->proc~parallel_sum_d5 proc~parallel_sum_d2 parallel_sum_d2 interface~parallel_sum->proc~parallel_sum_d2 proc~parallel_sum_d3 parallel_sum_d3 interface~parallel_sum->proc~parallel_sum_d3 proc~parallel_sum_d0 parallel_sum_d0 interface~parallel_sum->proc~parallel_sum_d0 proc~parallel_sum_d1 parallel_sum_d1 interface~parallel_sum->proc~parallel_sum_d1 proc~h5ltmake_compressed_dataset_double_f_4 h5ltmake_compressed_dataset_double_f_4 interface~h5ltmake_compressed_dataset_double_f->proc~h5ltmake_compressed_dataset_double_f_4 proc~h5ltmake_compressed_dataset_double_f_5 h5ltmake_compressed_dataset_double_f_5 interface~h5ltmake_compressed_dataset_double_f->proc~h5ltmake_compressed_dataset_double_f_5 proc~h5ltmake_compressed_dataset_double_f_1 h5ltmake_compressed_dataset_double_f_1 interface~h5ltmake_compressed_dataset_double_f->proc~h5ltmake_compressed_dataset_double_f_1 proc~h5ltmake_compressed_dataset_double_f_7 h5ltmake_compressed_dataset_double_f_7 interface~h5ltmake_compressed_dataset_double_f->proc~h5ltmake_compressed_dataset_double_f_7 proc~h5ltmake_compressed_dataset_double_f_6 h5ltmake_compressed_dataset_double_f_6 interface~h5ltmake_compressed_dataset_double_f->proc~h5ltmake_compressed_dataset_double_f_6 proc~h5ltmake_compressed_dataset_double_f_3 h5ltmake_compressed_dataset_double_f_3 interface~h5ltmake_compressed_dataset_double_f->proc~h5ltmake_compressed_dataset_double_f_3 proc~h5ltmake_compressed_dataset_double_f_2 h5ltmake_compressed_dataset_double_f_2 interface~h5ltmake_compressed_dataset_double_f->proc~h5ltmake_compressed_dataset_double_f_2 mpi_allreduce mpi_allreduce proc~parallel_sum_i1->mpi_allreduce proc~parallel_sum_i0->mpi_allreduce proc~parallel_sum_i2->mpi_allreduce proc~h5ltmake_compressed_dataset_double_f_4->h5ltmake_dataset_double_f h5sclose_f h5sclose_f proc~h5ltmake_compressed_dataset_double_f_4->h5sclose_f h5dclose_f h5dclose_f proc~h5ltmake_compressed_dataset_double_f_4->h5dclose_f h5dwrite_f h5dwrite_f proc~h5ltmake_compressed_dataset_double_f_4->h5dwrite_f h5pset_chunk_f h5pset_chunk_f proc~h5ltmake_compressed_dataset_double_f_4->h5pset_chunk_f h5pcreate_f h5pcreate_f proc~h5ltmake_compressed_dataset_double_f_4->h5pcreate_f proc~chunk_size chunk_size proc~h5ltmake_compressed_dataset_double_f_4->proc~chunk_size h5pset_deflate_f h5pset_deflate_f proc~h5ltmake_compressed_dataset_double_f_4->h5pset_deflate_f h5pset_shuffle_f h5pset_shuffle_f proc~h5ltmake_compressed_dataset_double_f_4->h5pset_shuffle_f h5screate_simple_f h5screate_simple_f proc~h5ltmake_compressed_dataset_double_f_4->h5screate_simple_f h5pclose_f h5pclose_f proc~h5ltmake_compressed_dataset_double_f_4->h5pclose_f h5dcreate_f h5dcreate_f proc~h5ltmake_compressed_dataset_double_f_4->h5dcreate_f proc~h5ltmake_compressed_dataset_double_f_5->h5ltmake_dataset_double_f proc~h5ltmake_compressed_dataset_double_f_5->h5sclose_f proc~h5ltmake_compressed_dataset_double_f_5->h5dclose_f proc~h5ltmake_compressed_dataset_double_f_5->h5dwrite_f proc~h5ltmake_compressed_dataset_double_f_5->h5pset_chunk_f proc~h5ltmake_compressed_dataset_double_f_5->h5pcreate_f proc~h5ltmake_compressed_dataset_double_f_5->proc~chunk_size proc~h5ltmake_compressed_dataset_double_f_5->h5pset_deflate_f proc~h5ltmake_compressed_dataset_double_f_5->h5pset_shuffle_f proc~h5ltmake_compressed_dataset_double_f_5->h5screate_simple_f proc~h5ltmake_compressed_dataset_double_f_5->h5pclose_f proc~h5ltmake_compressed_dataset_double_f_5->h5dcreate_f proc~h5ltmake_compressed_dataset_double_f_1->h5ltmake_dataset_double_f proc~h5ltmake_compressed_dataset_double_f_1->h5sclose_f proc~h5ltmake_compressed_dataset_double_f_1->h5dclose_f proc~h5ltmake_compressed_dataset_double_f_1->h5dwrite_f proc~h5ltmake_compressed_dataset_double_f_1->h5pset_chunk_f proc~h5ltmake_compressed_dataset_double_f_1->h5pcreate_f proc~h5ltmake_compressed_dataset_double_f_1->proc~chunk_size proc~h5ltmake_compressed_dataset_double_f_1->h5pset_deflate_f proc~h5ltmake_compressed_dataset_double_f_1->h5pset_shuffle_f proc~h5ltmake_compressed_dataset_double_f_1->h5screate_simple_f proc~h5ltmake_compressed_dataset_double_f_1->h5pclose_f proc~h5ltmake_compressed_dataset_double_f_1->h5dcreate_f proc~h5ltmake_compressed_dataset_double_f_7->h5ltmake_dataset_double_f proc~h5ltmake_compressed_dataset_double_f_7->h5sclose_f proc~h5ltmake_compressed_dataset_double_f_7->h5dclose_f proc~h5ltmake_compressed_dataset_double_f_7->h5dwrite_f proc~h5ltmake_compressed_dataset_double_f_7->h5pset_chunk_f proc~h5ltmake_compressed_dataset_double_f_7->h5pcreate_f proc~h5ltmake_compressed_dataset_double_f_7->proc~chunk_size proc~h5ltmake_compressed_dataset_double_f_7->h5pset_deflate_f proc~h5ltmake_compressed_dataset_double_f_7->h5pset_shuffle_f proc~h5ltmake_compressed_dataset_double_f_7->h5screate_simple_f proc~h5ltmake_compressed_dataset_double_f_7->h5pclose_f proc~h5ltmake_compressed_dataset_double_f_7->h5dcreate_f proc~h5ltmake_compressed_dataset_double_f_6->h5ltmake_dataset_double_f proc~h5ltmake_compressed_dataset_double_f_6->h5sclose_f proc~h5ltmake_compressed_dataset_double_f_6->h5dclose_f proc~h5ltmake_compressed_dataset_double_f_6->h5dwrite_f proc~h5ltmake_compressed_dataset_double_f_6->h5pset_chunk_f proc~h5ltmake_compressed_dataset_double_f_6->h5pcreate_f proc~h5ltmake_compressed_dataset_double_f_6->proc~chunk_size proc~h5ltmake_compressed_dataset_double_f_6->h5pset_deflate_f proc~h5ltmake_compressed_dataset_double_f_6->h5pset_shuffle_f proc~h5ltmake_compressed_dataset_double_f_6->h5screate_simple_f proc~h5ltmake_compressed_dataset_double_f_6->h5pclose_f proc~h5ltmake_compressed_dataset_double_f_6->h5dcreate_f proc~parallel_sum_d4->mpi_allreduce proc~parallel_sum_d5->mpi_allreduce proc~parallel_sum_d2->mpi_allreduce proc~parallel_sum_d3->mpi_allreduce proc~parallel_sum_d0->mpi_allreduce proc~parallel_sum_d1->mpi_allreduce proc~h5ltmake_compressed_dataset_double_f_3->h5ltmake_dataset_double_f proc~h5ltmake_compressed_dataset_double_f_3->h5sclose_f proc~h5ltmake_compressed_dataset_double_f_3->h5dclose_f proc~h5ltmake_compressed_dataset_double_f_3->h5dwrite_f proc~h5ltmake_compressed_dataset_double_f_3->h5pset_chunk_f proc~h5ltmake_compressed_dataset_double_f_3->h5pcreate_f proc~h5ltmake_compressed_dataset_double_f_3->proc~chunk_size proc~h5ltmake_compressed_dataset_double_f_3->h5pset_deflate_f proc~h5ltmake_compressed_dataset_double_f_3->h5pset_shuffle_f proc~h5ltmake_compressed_dataset_double_f_3->h5screate_simple_f proc~h5ltmake_compressed_dataset_double_f_3->h5pclose_f proc~h5ltmake_compressed_dataset_double_f_3->h5dcreate_f proc~h5ltmake_compressed_dataset_double_f_2->h5ltmake_dataset_double_f proc~h5ltmake_compressed_dataset_double_f_2->h5sclose_f proc~h5ltmake_compressed_dataset_double_f_2->h5dclose_f proc~h5ltmake_compressed_dataset_double_f_2->h5dwrite_f proc~h5ltmake_compressed_dataset_double_f_2->h5pset_chunk_f proc~h5ltmake_compressed_dataset_double_f_2->h5pcreate_f proc~h5ltmake_compressed_dataset_double_f_2->proc~chunk_size proc~h5ltmake_compressed_dataset_double_f_2->h5pset_deflate_f proc~h5ltmake_compressed_dataset_double_f_2->h5pset_shuffle_f proc~h5ltmake_compressed_dataset_double_f_2->h5screate_simple_f proc~h5ltmake_compressed_dataset_double_f_2->h5pclose_f proc~h5ltmake_compressed_dataset_double_f_2->h5dcreate_f

Called by

proc~~write_bt_d_d~~CalledByGraph proc~write_bt_d_d write_bt_D_D program~generate_tables generate_tables program~generate_tables->proc~write_bt_d_d

Contents

Source Code


Source Code

subroutine write_bt_D_D(id, namelist_file)
    !+ Write Deuterium-Deuterium reaction rates to a HDF5 file
    integer(HID_T), intent(inout) :: id
        !+ HDF5 file or group object id
    character(len=*), intent(in)  :: namelist_file
        !+ Namelist file that contains settings

    logical :: calculate
    integer :: nbranch = 2
    real(Float64), dimension(2) :: bt_amu = [H2_amu, H2_amu]

    real(Float64) :: emin
    real(Float64) :: emax
    integer :: nenergy

    real(Float64) :: tmin
    real(Float64) :: tmax
    integer :: ntemp

    real(Float64) :: eb
    real(Float64) :: dlogE
    real(Float64), dimension(:), allocatable :: ebarr

    real(Float64) :: ti
    real(Float64) :: dlogT
    real(Float64), dimension(:), allocatable :: tarr

    real(Float64), dimension(:,:,:), allocatable :: fusion

    integer(HID_T) :: gid
    integer(HSIZE_T), dimension(1) :: dim1
    integer(HSIZE_T), dimension(3) :: dim3

    integer :: ie, it, error, cnt
    real(Float64) :: rate_a, rate_b
    logical :: exis

    NAMELIST /D_D_rates/ calculate, nenergy, emin, emax, ntemp, tmin, tmax

    nenergy = 100; emin = 1.d-3 ; emax = 4.d2
    ntemp = 100; tmin = 1.d-3 ; tmax = 2.d1
    calculate = .True.

    inquire(file=namelist_file,exist=exis)
    if(.not.exis) then
        write(*,'(a,a)') 'WRITE_BT_D_D: Input file does not exist: ',trim(namelist_file)
        write(*,'(a)') 'Continuing with default settings...'
    else
        open(13,file=namelist_file)
        read(13,NML=D_D_rates)
        close(13)
    endif

    if(.not.calculate) return

    allocate(ebarr(nenergy))
    allocate(tarr(ntemp))
    allocate(fusion(nenergy,ntemp,nbranch))

    ebarr = 0.d0
    tarr = 0.d0
    fusion = 0.d0

    dlogE = (log10(emax) - log10(emin))/(nenergy - 1)
    do ie=1, nenergy
        ebarr(ie) = 10.d0**(log10(emin) + (ie-1)*dlogE)
    enddo

    dlogT = (log10(tmax) - log10(tmin))/(ntemp - 1)
    do it=1, ntemp
        tarr(it) = 10.d0**(log10(tmin) + (it-1)*dlogT)
    enddo

    if(verbose) then
        write(*,'(a)') "---- D-D reaction rates settings ----"
        write(*,'(T2,"Emin = ",e9.2, " keV")') emin
        write(*,'(T2,"Emax = ",e9.2, " keV")') emax
        write(*,'(T2,"Nenergy = ", i4)') nenergy
        write(*,'(T2,"Tmin = ",e9.2, " keV")') tmin
        write(*,'(T2,"Tmax = ",e9.2, " keV")') tmax
        write(*,'(T2,"Ntemp = ", i4)') ntemp
        write(*,*) ''
    endif

    cnt = 0
    !$OMP PARALLEL DO private(ie, it, eb, ti, rate_a, rate_b)
    do ie=istart, nenergy, istep
        eb = ebarr(ie)
        do it=1, ntemp
            ti = tarr(it)
            call bt_maxwellian(d_d_fusion_t, ti, eb, bt_amu(1), bt_amu(2), rate_a)
            call bt_maxwellian(d_d_fusion_he, ti, eb, bt_amu(2), bt_amu(2), rate_b)
            fusion(ie,it,1) = rate_a
            fusion(ie,it,2) = rate_b
            cnt = cnt + 1
            if(verbose) WRITE(*,'(f7.2,"%",a,$)') 100*istep*cnt/real(nenergy*ntemp),char(13)
        enddo
    enddo
    !$OMP END PARALLEL DO

#ifdef _MPI
    call parallel_sum(fusion)
#endif

    if(verbose) then
        call h5gcreate_f(id, "D_D", gid, error)

        dim1 = [1]
        call h5ltmake_dataset_int_f(gid, "nbranch", 0, dim1, [nbranch], error)
        call h5ltmake_dataset_int_f(gid, "nenergy", 0, dim1, [nenergy], error)
        call h5ltmake_dataset_int_f(gid, "ntemp", 0, dim1, [ntemp], error)
        call h5ltmake_dataset_double_f(gid, "dlogE", 0, dim1, [dlogE], error)
        call h5ltmake_dataset_double_f(gid, "emin", 0, dim1, [emin], error)
        call h5ltmake_dataset_double_f(gid, "emax", 0, dim1, [emax], error)
        call h5ltmake_dataset_double_f(gid, "dlogT", 0, dim1, [dlogT], error)
        call h5ltmake_dataset_double_f(gid, "tmin", 0, dim1, [tmin], error)
        call h5ltmake_dataset_double_f(gid, "tmax", 0, dim1, [tmax], error)

        dim1 = [2]
        call h5ltmake_compressed_dataset_double_f(gid, "bt_amu", 1, dim1, bt_amu, error)
        dim1 = [nenergy]
        call h5ltmake_compressed_dataset_double_f(gid, "energy", 1, dim1, ebarr, error)
        dim1 = [ntemp]
        call h5ltmake_compressed_dataset_double_f(gid, "temperature", 1, dim1, tarr, error)
        dim3 = [nenergy, ntemp, nbranch]
        call h5ltmake_compressed_dataset_double_f(gid, "fusion", 3, dim3, fusion, error)

        call h5ltset_attribute_string_f(id, "D_D", "description", &
             "Beam-Target reaction rates for Deuterium(beam)-Deuterium(target) interactions", error)
        call h5ltset_attribute_string_f(gid, "nbranch", "description", &
             "Number of reaction branches", error)
        call h5ltset_attribute_string_f(gid, "nenergy", "description", &
             "Number of energy values", error)
        call h5ltset_attribute_string_f(gid, "ntemp", "description", &
             "Number of target temperature values", error)
        call h5ltset_attribute_string_f(gid, "energy", "description", &
             "Energy values", error)
        call h5ltset_attribute_string_f(gid, "energy", "units", "keV", error)
        call h5ltset_attribute_string_f(gid, "dlogE", "description", &
             "Energy spacing in log-10", error)
        call h5ltset_attribute_string_f(gid, "dlogE", "units", "log10(keV)", error)
        call h5ltset_attribute_string_f(gid, "emin","description", &
             "Minimum energy", error)
        call h5ltset_attribute_string_f(gid, "emin", "units", "keV", error)
        call h5ltset_attribute_string_f(gid, "emax","description", &
             "Maximum energy", error)
        call h5ltset_attribute_string_f(gid, "emax", "units", "keV", error)

        call h5ltset_attribute_string_f(gid, "temperature", "description", &
             "Target temperature values", error)
        call h5ltset_attribute_string_f(gid, "temperature", "units", "keV", error)
        call h5ltset_attribute_string_f(gid, "dlogT", "description", &
             "Temperature spacing in log-10", error)
        call h5ltset_attribute_string_f(gid, "dlogT", "units", "log10(keV)", error)
        call h5ltset_attribute_string_f(gid, "tmin","description", &
             "Minimum temperature", error)
        call h5ltset_attribute_string_f(gid, "tmin", "units", "keV", error)
        call h5ltset_attribute_string_f(gid, "tmax","description", &
             "Maximum temperature", error)
        call h5ltset_attribute_string_f(gid, "tmax", "units", "keV", error)

        call h5ltset_attribute_string_f(gid, "bt_amu", "description", &
             "Isotope mass of the beam and target species respectively", error)
        call h5ltset_attribute_string_f(gid, "bt_amu", "units", "amu", error)

        call h5ltset_attribute_string_f(gid, "fusion", "description", &
             "Beam-Target reaction rates for T/He3 branches of D-D nuclear reactions: fusion(energy, temp, branch)", error)
        call h5ltset_attribute_string_f(gid, "fusion", "units", "cm^3/s", error)
        call h5ltset_attribute_string_f(gid, "fusion", "reaction", &
             "D + D -> [1] T(1.01 MeV) + p(3.02 MeV) (50%); [2] He3(0.82 MeV) + n(2.45 MeV) (50%)", error)

        call h5gclose_f(gid, error)
    endif

    deallocate(ebarr, tarr, fusion)

end subroutine write_bt_D_D