summaryrefslogtreecommitdiff
path: root/Dragon/src/FSDF.f90
diff options
context:
space:
mode:
Diffstat (limited to 'Dragon/src/FSDF.f90')
-rw-r--r--Dragon/src/FSDF.f90190
1 files changed, 190 insertions, 0 deletions
diff --git a/Dragon/src/FSDF.f90 b/Dragon/src/FSDF.f90
new file mode 100644
index 0000000..06f5b69
--- /dev/null
+++ b/Dragon/src/FSDF.f90
@@ -0,0 +1,190 @@
+!
+!-----------------------------------------------------------------------
+!
+!Purpose:
+! Fortran-2003 bindings for the NDAS C API.
+!
+!Copyright:
+! Copyright (C) 2012 Atomic Energy of Canada Limited and Ecole
+! Polytechnique de Montreal.
+!
+!Author(s): A. Hebert
+!
+!-----------------------------------------------------------------------
+!
+module FSDF
+ private
+ public :: XSDOPN, XSDNAM, XSDBLD, XSDISO, XSDTHE, XSDRES, XSDTAB, XSDCL
+ interface XSDBLD
+ module procedure XSDBLD_I1, XSDBLD_R1
+ end interface
+ interface XSDISO
+ module procedure XSDISO_I1, XSDISO_R1
+ end interface
+contains
+subroutine XSDOPN(namfil, ierr)
+ ! open the NDAS file
+ use, intrinsic :: iso_c_binding
+ use LCMAUX
+ character(len=*) :: namfil
+ integer ierr
+ character(kind=c_char), dimension(73) :: name73
+ interface
+ subroutine xsdopn_c(namp, ierr) bind(c)
+ use, intrinsic :: iso_c_binding
+ character(kind=c_char), dimension(*) :: namp
+ integer(c_int) :: ierr
+ end subroutine xsdopn_c
+ end interface
+ call STRCUT(name73, namfil)
+ call xsdopn_c(name73, ierr)
+end subroutine XSDOPN
+!
+subroutine XSDNAM(iset, numericId, isonam, ierr)
+ ! recover an isotope name from NDAS file
+ use LCMAUX
+ use, intrinsic :: iso_c_binding
+ integer iset,numericId, ierr
+ character(len=*) :: isonam
+ character(kind=c_char), dimension(73) :: name73
+ interface
+ subroutine xsdnam_c(iset, numericId, namp, ierr) bind(c)
+ use, intrinsic :: iso_c_binding
+ character(kind=c_char), dimension(*) :: namp
+ integer(c_int) :: iset,numericId,ierr
+ end subroutine xsdnam_c
+ end interface
+ call xsdnam_c(iset, numericId, name73, ierr)
+ call STRFIL(isonam, name73)
+end subroutine XSDNAM
+!
+subroutine XSDBLD_I1(item, where, ierr)
+ ! recover a header or integer record from NDAS file
+ use, intrinsic :: iso_c_binding
+ type(c_ptr) :: pt_where
+ integer item,ierr
+ integer, target, dimension(*) :: where
+ integer, pointer :: where_p
+ interface
+ subroutine xsdbld_c(item, where, ierr) bind(c)
+ use, intrinsic :: iso_c_binding
+ integer(c_int) :: item, ierr
+ type(c_ptr), value :: where
+ end subroutine xsdbld_c
+ end interface
+ where_p => where(1)
+ pt_where=c_loc(where_p)
+ call xsdbld_c(item, pt_where, ierr)
+end subroutine XSDBLD_I1
+!
+subroutine XSDBLD_R1(item, where, ierr)
+ ! recover a header or real record from NDAS file
+ use, intrinsic :: iso_c_binding
+ type(c_ptr) :: pt_where
+ integer item,ierr
+ real, target, dimension(*) :: where
+ real, pointer :: where_p
+ interface
+ subroutine xsdbld_c(item, where, ierr) bind(c)
+ use, intrinsic :: iso_c_binding
+ integer(c_int) :: item, ierr
+ type(c_ptr), value :: where
+ end subroutine xsdbld_c
+ end interface
+ where_p => where(1)
+ pt_where=c_loc(where_p)
+ call xsdbld_c(item, pt_where, ierr)
+end subroutine XSDBLD_R1
+!
+subroutine XSDISO_I1(groupRange, item, nuclideIndex, where, ierr)
+ ! recover an integer header for an isotope
+ use, intrinsic :: iso_c_binding
+ type(c_ptr) :: pt_where
+ integer groupRange, item, nuclideIndex, ierr
+ integer, target, dimension(*) :: where
+ integer, pointer :: where_p
+ interface
+ subroutine xsdiso_c(groupRange, item, nuclideIndex, where, ierr) bind(c)
+ use, intrinsic :: iso_c_binding
+ integer(c_int) groupRange, item, nuclideIndex, ierr
+ type(c_ptr), value :: where
+ end subroutine xsdiso_c
+ end interface
+ where_p => where(1)
+ pt_where=c_loc(where_p)
+ call xsdiso_c(groupRange, item, nuclideIndex, pt_where, ierr)
+end subroutine XSDISO_I1
+!
+subroutine XSDISO_R1(groupRange, item, nuclideIndex, where, ierr)
+ ! recover a real header for an isotope
+ use, intrinsic :: iso_c_binding
+ type(c_ptr) :: pt_where
+ integer groupRange, item, nuclideIndex, ierr
+ real, target, dimension(*) :: where
+ real, pointer :: where_p
+ interface
+ subroutine xsdiso_c(groupRange, item, nuclideIndex, where, ierr) bind(c)
+ use, intrinsic :: iso_c_binding
+ integer(c_int) groupRange, item, nuclideIndex, ierr
+ type(c_ptr), value :: where
+ end subroutine xsdiso_c
+ end interface
+ where_p => where(1)
+ pt_where=c_loc(where_p)
+ call xsdiso_c(groupRange, item, nuclideIndex, pt_where, ierr)
+end subroutine XSDISO_R1
+!
+subroutine XSDTHE(groupRange, item, nuclideIndex, index, where, ierr)
+ ! recover a cross-section array
+ use, intrinsic :: iso_c_binding
+ integer groupRange, item, nuclideIndex, index, ierr
+ real, dimension(*) :: where
+ interface
+ subroutine xsdthe_c(groupRange, item, nuclideIndex, index, where, ierr) bind(c)
+ use, intrinsic :: iso_c_binding
+ integer(c_int) groupRange, item, nuclideIndex, index, ierr
+ real(c_float), dimension(*) :: where
+ end subroutine xsdthe_c
+ end interface
+ call xsdthe_c(groupRange, item, nuclideIndex, index, where, ierr)
+end subroutine XSDTHE
+!
+subroutine XSDRES(nuclideIndex, where, ierr)
+ ! recover a resonance information array
+ use, intrinsic :: iso_c_binding
+ integer nuclideIndex, ierr
+ integer, dimension(*) :: where
+ interface
+ subroutine xsdres_c(nuclideIndex, where, ierr) bind(c)
+ use, intrinsic :: iso_c_binding
+ integer(c_int) nuclideIndex, ierr
+ integer(c_int), dimension(*) :: where
+ end subroutine xsdres_c
+ end interface
+ call xsdres_c(nuclideIndex, where, ierr)
+end subroutine XSDRES
+!
+subroutine XSDTAB(item, nuclideIndex, resGroup, where, ierr)
+ ! recover a resonance cross-section array
+ use, intrinsic :: iso_c_binding
+ integer item, nuclideIndex, resGroup, ierr
+ real, dimension(*) :: where
+ interface
+ subroutine xsdtab_c(item, nuclideIndex, resGroup, where, ierr) bind(c)
+ use, intrinsic :: iso_c_binding
+ integer(c_int) item, nuclideIndex, resGroup, ierr
+ real(c_float), dimension(*) :: where
+ end subroutine xsdtab_c
+ end interface
+ call xsdtab_c(item, nuclideIndex, resGroup, where, ierr)
+end subroutine XSDTAB
+!
+subroutine XSDCL()
+ ! close the NDAS file
+ interface
+ subroutine xsdcl_c() bind(c)
+ end subroutine xsdcl_c
+ end interface
+ call xsdcl_c()
+end subroutine XSDCL
+end module FSDF