! This file has been generated automatically using generate-code.py


FUNCTION AtomicWeight(Z, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION AtomicWeightC(Z, error) &
            BIND(C,NAME='AtomicWeight')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE) :: AtomicWeightC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION AtomicWeightC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = AtomicWeightC(Z, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION AtomicWeight


FUNCTION ElementDensity(Z, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION ElementDensityC(Z, error) &
            BIND(C,NAME='ElementDensity')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE) :: ElementDensityC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION ElementDensityC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = ElementDensityC(Z, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION ElementDensity


FUNCTION CS_Total(Z, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CS_TotalC(Z, E, error) &
            BIND(C,NAME='CS_Total')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CS_TotalC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CS_TotalC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CS_TotalC(Z, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CS_Total


FUNCTION CS_Photo(Z, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CS_PhotoC(Z, E, error) &
            BIND(C,NAME='CS_Photo')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CS_PhotoC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CS_PhotoC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CS_PhotoC(Z, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CS_Photo


FUNCTION CS_Rayl(Z, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CS_RaylC(Z, E, error) &
            BIND(C,NAME='CS_Rayl')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CS_RaylC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CS_RaylC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CS_RaylC(Z, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CS_Rayl


FUNCTION CS_Compt(Z, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CS_ComptC(Z, E, error) &
            BIND(C,NAME='CS_Compt')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CS_ComptC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CS_ComptC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CS_ComptC(Z, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CS_Compt


FUNCTION CS_Energy(Z, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CS_EnergyC(Z, E, error) &
            BIND(C,NAME='CS_Energy')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CS_EnergyC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CS_EnergyC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CS_EnergyC(Z, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CS_Energy


FUNCTION CS_KN(E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CS_KNC(E, error) &
            BIND(C,NAME='CS_KN')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CS_KNC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CS_KNC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CS_KNC(E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CS_KN


FUNCTION CSb_Total(Z, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CSb_TotalC(Z, E, error) &
            BIND(C,NAME='CSb_Total')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CSb_TotalC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CSb_TotalC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CSb_TotalC(Z, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CSb_Total


FUNCTION CSb_Photo(Z, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CSb_PhotoC(Z, E, error) &
            BIND(C,NAME='CSb_Photo')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CSb_PhotoC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CSb_PhotoC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CSb_PhotoC(Z, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CSb_Photo


FUNCTION CSb_Rayl(Z, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CSb_RaylC(Z, E, error) &
            BIND(C,NAME='CSb_Rayl')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CSb_RaylC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CSb_RaylC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CSb_RaylC(Z, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CSb_Rayl


FUNCTION CSb_Compt(Z, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CSb_ComptC(Z, E, error) &
            BIND(C,NAME='CSb_Compt')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CSb_ComptC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CSb_ComptC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CSb_ComptC(Z, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CSb_Compt


FUNCTION DCS_Thoms(theta, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        REAL (C_DOUBLE), INTENT(IN) :: theta
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION DCS_ThomsC(theta, error) &
            BIND(C,NAME='DCS_Thoms')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                REAL (C_DOUBLE), INTENT(IN), VALUE :: theta
                REAL (C_DOUBLE) :: DCS_ThomsC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION DCS_ThomsC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = DCS_ThomsC(theta, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION DCS_Thoms


FUNCTION DCS_KN(E, theta, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: theta
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION DCS_KNC(E, theta, error) &
            BIND(C,NAME='DCS_KN')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: theta
                REAL (C_DOUBLE) :: DCS_KNC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION DCS_KNC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = DCS_KNC(E, theta, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION DCS_KN


FUNCTION DCS_Rayl(Z, E, theta, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: theta
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION DCS_RaylC(Z, E, theta, error) &
            BIND(C,NAME='DCS_Rayl')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: theta
                REAL (C_DOUBLE) :: DCS_RaylC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION DCS_RaylC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = DCS_RaylC(Z, E, theta, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION DCS_Rayl


FUNCTION DCS_Compt(Z, E, theta, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: theta
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION DCS_ComptC(Z, E, theta, error) &
            BIND(C,NAME='DCS_Compt')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: theta
                REAL (C_DOUBLE) :: DCS_ComptC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION DCS_ComptC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = DCS_ComptC(Z, E, theta, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION DCS_Compt


FUNCTION DCSb_Rayl(Z, E, theta, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: theta
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION DCSb_RaylC(Z, E, theta, error) &
            BIND(C,NAME='DCSb_Rayl')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: theta
                REAL (C_DOUBLE) :: DCSb_RaylC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION DCSb_RaylC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = DCSb_RaylC(Z, E, theta, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION DCSb_Rayl


FUNCTION DCSb_Compt(Z, E, theta, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: theta
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION DCSb_ComptC(Z, E, theta, error) &
            BIND(C,NAME='DCSb_Compt')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: theta
                REAL (C_DOUBLE) :: DCSb_ComptC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION DCSb_ComptC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = DCSb_ComptC(Z, E, theta, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION DCSb_Compt


FUNCTION DCSP_Thoms(theta, phi, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        REAL (C_DOUBLE), INTENT(IN) :: theta
        REAL (C_DOUBLE), INTENT(IN) :: phi
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION DCSP_ThomsC(theta, phi, error) &
            BIND(C,NAME='DCSP_Thoms')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                REAL (C_DOUBLE), INTENT(IN), VALUE :: theta
                REAL (C_DOUBLE), INTENT(IN), VALUE :: phi
                REAL (C_DOUBLE) :: DCSP_ThomsC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION DCSP_ThomsC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = DCSP_ThomsC(theta, phi, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION DCSP_Thoms


FUNCTION DCSP_KN(E, theta, phi, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: theta
        REAL (C_DOUBLE), INTENT(IN) :: phi
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION DCSP_KNC(E, theta, phi, error) &
            BIND(C,NAME='DCSP_KN')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: theta
                REAL (C_DOUBLE), INTENT(IN), VALUE :: phi
                REAL (C_DOUBLE) :: DCSP_KNC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION DCSP_KNC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = DCSP_KNC(E, theta, phi, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION DCSP_KN


FUNCTION DCSP_Rayl(Z, E, theta, phi, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: theta
        REAL (C_DOUBLE), INTENT(IN) :: phi
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION DCSP_RaylC(Z, E, theta, phi, error) &
            BIND(C,NAME='DCSP_Rayl')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: theta
                REAL (C_DOUBLE), INTENT(IN), VALUE :: phi
                REAL (C_DOUBLE) :: DCSP_RaylC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION DCSP_RaylC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = DCSP_RaylC(Z, E, theta, phi, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION DCSP_Rayl


FUNCTION DCSP_Compt(Z, E, theta, phi, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: theta
        REAL (C_DOUBLE), INTENT(IN) :: phi
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION DCSP_ComptC(Z, E, theta, phi, error) &
            BIND(C,NAME='DCSP_Compt')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: theta
                REAL (C_DOUBLE), INTENT(IN), VALUE :: phi
                REAL (C_DOUBLE) :: DCSP_ComptC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION DCSP_ComptC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = DCSP_ComptC(Z, E, theta, phi, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION DCSP_Compt


FUNCTION DCSPb_Rayl(Z, E, theta, phi, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: theta
        REAL (C_DOUBLE), INTENT(IN) :: phi
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION DCSPb_RaylC(Z, E, theta, phi, error) &
            BIND(C,NAME='DCSPb_Rayl')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: theta
                REAL (C_DOUBLE), INTENT(IN), VALUE :: phi
                REAL (C_DOUBLE) :: DCSPb_RaylC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION DCSPb_RaylC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = DCSPb_RaylC(Z, E, theta, phi, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION DCSPb_Rayl


FUNCTION DCSPb_Compt(Z, E, theta, phi, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: theta
        REAL (C_DOUBLE), INTENT(IN) :: phi
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION DCSPb_ComptC(Z, E, theta, phi, error) &
            BIND(C,NAME='DCSPb_Compt')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: theta
                REAL (C_DOUBLE), INTENT(IN), VALUE :: phi
                REAL (C_DOUBLE) :: DCSPb_ComptC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION DCSPb_ComptC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = DCSPb_ComptC(Z, E, theta, phi, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION DCSPb_Compt


FUNCTION FF_Rayl(Z, q, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: q
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION FF_RaylC(Z, q, error) &
            BIND(C,NAME='FF_Rayl')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: q
                REAL (C_DOUBLE) :: FF_RaylC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION FF_RaylC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = FF_RaylC(Z, q, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION FF_Rayl


FUNCTION SF_Compt(Z, q, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: q
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION SF_ComptC(Z, q, error) &
            BIND(C,NAME='SF_Compt')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: q
                REAL (C_DOUBLE) :: SF_ComptC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION SF_ComptC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = SF_ComptC(Z, q, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION SF_Compt


FUNCTION MomentTransf(E, theta, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: theta
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION MomentTransfC(E, theta, error) &
            BIND(C,NAME='MomentTransf')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: theta
                REAL (C_DOUBLE) :: MomentTransfC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION MomentTransfC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = MomentTransfC(E, theta, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION MomentTransf


FUNCTION LineEnergy(Z, line, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: line
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION LineEnergyC(Z, line, error) &
            BIND(C,NAME='LineEnergy')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: line
                REAL (C_DOUBLE) :: LineEnergyC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION LineEnergyC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = LineEnergyC(Z, line, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION LineEnergy


FUNCTION FluorYield(Z, shell, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: shell
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION FluorYieldC(Z, shell, error) &
            BIND(C,NAME='FluorYield')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: shell
                REAL (C_DOUBLE) :: FluorYieldC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION FluorYieldC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = FluorYieldC(Z, shell, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION FluorYield


FUNCTION CosKronTransProb(Z, trans, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: trans
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CosKronTransProbC(Z, trans, error) &
            BIND(C,NAME='CosKronTransProb')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: trans
                REAL (C_DOUBLE) :: CosKronTransProbC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CosKronTransProbC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CosKronTransProbC(Z, trans, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CosKronTransProb


FUNCTION EdgeEnergy(Z, shell, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: shell
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION EdgeEnergyC(Z, shell, error) &
            BIND(C,NAME='EdgeEnergy')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: shell
                REAL (C_DOUBLE) :: EdgeEnergyC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION EdgeEnergyC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = EdgeEnergyC(Z, shell, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION EdgeEnergy


FUNCTION JumpFactor(Z, shell, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: shell
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION JumpFactorC(Z, shell, error) &
            BIND(C,NAME='JumpFactor')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: shell
                REAL (C_DOUBLE) :: JumpFactorC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION JumpFactorC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = JumpFactorC(Z, shell, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION JumpFactor


FUNCTION CS_FluorLine(Z, line, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: line
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CS_FluorLineC(Z, line, E, error) &
            BIND(C,NAME='CS_FluorLine')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: line
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CS_FluorLineC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CS_FluorLineC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CS_FluorLineC(Z, line, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CS_FluorLine


FUNCTION CSb_FluorLine(Z, line, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: line
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CSb_FluorLineC(Z, line, E, error) &
            BIND(C,NAME='CSb_FluorLine')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: line
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CSb_FluorLineC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CSb_FluorLineC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CSb_FluorLineC(Z, line, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CSb_FluorLine


FUNCTION CS_FluorShell(Z, shell, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: shell
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CS_FluorShellC(Z, shell, E, error) &
            BIND(C,NAME='CS_FluorShell')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: shell
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CS_FluorShellC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CS_FluorShellC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CS_FluorShellC(Z, shell, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CS_FluorShell


FUNCTION CSb_FluorShell(Z, shell, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: shell
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CSb_FluorShellC(Z, shell, E, error) &
            BIND(C,NAME='CSb_FluorShell')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: shell
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CSb_FluorShellC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CSb_FluorShellC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CSb_FluorShellC(Z, shell, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CSb_FluorShell


FUNCTION RadRate(Z, line, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: line
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION RadRateC(Z, line, error) &
            BIND(C,NAME='RadRate')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: line
                REAL (C_DOUBLE) :: RadRateC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION RadRateC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = RadRateC(Z, line, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION RadRate


FUNCTION ComptonEnergy(E0, theta, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        REAL (C_DOUBLE), INTENT(IN) :: E0
        REAL (C_DOUBLE), INTENT(IN) :: theta
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION ComptonEnergyC(E0, theta, error) &
            BIND(C,NAME='ComptonEnergy')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E0
                REAL (C_DOUBLE), INTENT(IN), VALUE :: theta
                REAL (C_DOUBLE) :: ComptonEnergyC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION ComptonEnergyC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = ComptonEnergyC(E0, theta, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION ComptonEnergy


FUNCTION Fi(Z, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION FiC(Z, E, error) &
            BIND(C,NAME='Fi')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: FiC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION FiC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = FiC(Z, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION Fi


FUNCTION Fii(Z, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION FiiC(Z, E, error) &
            BIND(C,NAME='Fii')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: FiiC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION FiiC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = FiiC(Z, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION Fii


FUNCTION CS_Photo_Total(Z, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CS_Photo_TotalC(Z, E, error) &
            BIND(C,NAME='CS_Photo_Total')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CS_Photo_TotalC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CS_Photo_TotalC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CS_Photo_TotalC(Z, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CS_Photo_Total


FUNCTION CSb_Photo_Total(Z, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CSb_Photo_TotalC(Z, E, error) &
            BIND(C,NAME='CSb_Photo_Total')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CSb_Photo_TotalC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CSb_Photo_TotalC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CSb_Photo_TotalC(Z, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CSb_Photo_Total


FUNCTION CS_Photo_Partial(Z, shell, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: shell
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CS_Photo_PartialC(Z, shell, E, error) &
            BIND(C,NAME='CS_Photo_Partial')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: shell
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CS_Photo_PartialC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CS_Photo_PartialC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CS_Photo_PartialC(Z, shell, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CS_Photo_Partial


FUNCTION CSb_Photo_Partial(Z, shell, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: shell
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CSb_Photo_PartialC(Z, shell, E, error) &
            BIND(C,NAME='CSb_Photo_Partial')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: shell
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CSb_Photo_PartialC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CSb_Photo_PartialC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CSb_Photo_PartialC(Z, shell, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CSb_Photo_Partial


FUNCTION CS_Total_Kissel(Z, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CS_Total_KisselC(Z, E, error) &
            BIND(C,NAME='CS_Total_Kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CS_Total_KisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CS_Total_KisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CS_Total_KisselC(Z, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CS_Total_Kissel


FUNCTION CSb_Total_Kissel(Z, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CSb_Total_KisselC(Z, E, error) &
            BIND(C,NAME='CSb_Total_Kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CSb_Total_KisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CSb_Total_KisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CSb_Total_KisselC(Z, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CSb_Total_Kissel


FUNCTION ComptonProfile(Z, pz, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: pz
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION ComptonProfileC(Z, pz, error) &
            BIND(C,NAME='ComptonProfile')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: pz
                REAL (C_DOUBLE) :: ComptonProfileC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION ComptonProfileC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = ComptonProfileC(Z, pz, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION ComptonProfile


FUNCTION ComptonProfile_Partial(Z, shell, pz, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: shell
        REAL (C_DOUBLE), INTENT(IN) :: pz
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION ComptonProfile_PartialC(Z, shell, pz, error) &
            BIND(C,NAME='ComptonProfile_Partial')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: shell
                REAL (C_DOUBLE), INTENT(IN), VALUE :: pz
                REAL (C_DOUBLE) :: ComptonProfile_PartialC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION ComptonProfile_PartialC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = ComptonProfile_PartialC(Z, shell, pz, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION ComptonProfile_Partial


FUNCTION ElectronConfig(Z, shell, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: shell
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION ElectronConfigC(Z, shell, error) &
            BIND(C,NAME='ElectronConfig')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: shell
                REAL (C_DOUBLE) :: ElectronConfigC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION ElectronConfigC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = ElectronConfigC(Z, shell, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION ElectronConfig


FUNCTION ElectronConfig_Biggs(Z, shell, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: shell
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION ElectronConfig_BiggsC(Z, shell, error) &
            BIND(C,NAME='ElectronConfig_Biggs')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: shell
                REAL (C_DOUBLE) :: ElectronConfig_BiggsC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION ElectronConfig_BiggsC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = ElectronConfig_BiggsC(Z, shell, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION ElectronConfig_Biggs


FUNCTION AtomicLevelWidth(Z, shell, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: shell
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION AtomicLevelWidthC(Z, shell, error) &
            BIND(C,NAME='AtomicLevelWidth')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: shell
                REAL (C_DOUBLE) :: AtomicLevelWidthC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION AtomicLevelWidthC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = AtomicLevelWidthC(Z, shell, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION AtomicLevelWidth


FUNCTION AugerRate(Z, auger_trans, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: auger_trans
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION AugerRateC(Z, auger_trans, error) &
            BIND(C,NAME='AugerRate')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: auger_trans
                REAL (C_DOUBLE) :: AugerRateC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION AugerRateC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = AugerRateC(Z, auger_trans, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION AugerRate


FUNCTION AugerYield(Z, shell, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: shell
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION AugerYieldC(Z, shell, error) &
            BIND(C,NAME='AugerYield')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: shell
                REAL (C_DOUBLE) :: AugerYieldC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION AugerYieldC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = AugerYieldC(Z, shell, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION AugerYield


FUNCTION CS_FluorLine_Kissel(Z, line, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: line
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CS_FluorLine_KisselC(Z, line, E, error) &
            BIND(C,NAME='CS_FluorLine_Kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: line
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CS_FluorLine_KisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CS_FluorLine_KisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CS_FluorLine_KisselC(Z, line, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CS_FluorLine_Kissel


FUNCTION CSb_FluorLine_Kissel(Z, line, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: line
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CSb_FluorLine_KisselC(Z, line, E, error) &
            BIND(C,NAME='CSb_FluorLine_Kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: line
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CSb_FluorLine_KisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CSb_FluorLine_KisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CSb_FluorLine_KisselC(Z, line, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CSb_FluorLine_Kissel


FUNCTION CS_FluorLine_Kissel_Cascade(Z, line, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: line
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CS_FluorLine_Kissel_CascadeC(Z, line, E, error) &
            BIND(C,NAME='CS_FluorLine_Kissel_Cascade')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: line
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CS_FluorLine_Kissel_CascadeC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CS_FluorLine_Kissel_CascadeC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CS_FluorLine_Kissel_CascadeC(Z, line, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CS_FluorLine_Kissel_Cascade


FUNCTION CSb_FluorLine_Kissel_Cascade(Z, line, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: line
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CSb_FluorLine_Kissel_CascadeC(Z, line, E, error) &
            BIND(C,NAME='CSb_FluorLine_Kissel_Cascade')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: line
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CSb_FluorLine_Kissel_CascadeC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CSb_FluorLine_Kissel_CascadeC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CSb_FluorLine_Kissel_CascadeC(Z, line, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CSb_FluorLine_Kissel_Cascade


FUNCTION CS_FluorLine_Kissel_Nonradiative_Cascade(Z, line, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: line
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CS_FluorLine_Kissel_Nonradiative_CascadeC(Z, line, E, error) &
            BIND(C,NAME='CS_FluorLine_Kissel_Nonradiative_Cascade')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: line
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CS_FluorLine_Kissel_Nonradiative_CascadeC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CS_FluorLine_Kissel_Nonradiative_CascadeC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CS_FluorLine_Kissel_Nonradiative_CascadeC(Z, line, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CS_FluorLine_Kissel_Nonradiative_Cascade


FUNCTION CSb_FluorLine_Kissel_Nonradiative_Cascade(Z, line, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: line
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CSb_FluorLine_Kissel_Nonradiative_CascadeC(Z, line, E, error) &
            BIND(C,NAME='CSb_FluorLine_Kissel_Nonradiative_Cascade')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: line
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CSb_FluorLine_Kissel_Nonradiative_CascadeC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CSb_FluorLine_Kissel_Nonradiative_CascadeC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CSb_FluorLine_Kissel_Nonradiative_CascadeC(Z, line, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CSb_FluorLine_Kissel_Nonradiative_Cascade


FUNCTION CS_FluorLine_Kissel_Radiative_Cascade(Z, line, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: line
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CS_FluorLine_Kissel_Radiative_CascadeC(Z, line, E, error) &
            BIND(C,NAME='CS_FluorLine_Kissel_Radiative_Cascade')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: line
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CS_FluorLine_Kissel_Radiative_CascadeC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CS_FluorLine_Kissel_Radiative_CascadeC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CS_FluorLine_Kissel_Radiative_CascadeC(Z, line, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CS_FluorLine_Kissel_Radiative_Cascade


FUNCTION CSb_FluorLine_Kissel_Radiative_Cascade(Z, line, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: line
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CSb_FluorLine_Kissel_Radiative_CascadeC(Z, line, E, error) &
            BIND(C,NAME='CSb_FluorLine_Kissel_Radiative_Cascade')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: line
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CSb_FluorLine_Kissel_Radiative_CascadeC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CSb_FluorLine_Kissel_Radiative_CascadeC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CSb_FluorLine_Kissel_Radiative_CascadeC(Z, line, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CSb_FluorLine_Kissel_Radiative_Cascade


FUNCTION CS_FluorLine_Kissel_no_Cascade(Z, line, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: line
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CS_FluorLine_Kissel_no_CascadeC(Z, line, E, error) &
            BIND(C,NAME='CS_FluorLine_Kissel_no_Cascade')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: line
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CS_FluorLine_Kissel_no_CascadeC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CS_FluorLine_Kissel_no_CascadeC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CS_FluorLine_Kissel_no_CascadeC(Z, line, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CS_FluorLine_Kissel_no_Cascade


FUNCTION CSb_FluorLine_Kissel_no_Cascade(Z, line, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: line
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CSb_FluorLine_Kissel_no_CascadeC(Z, line, E, error) &
            BIND(C,NAME='CSb_FluorLine_Kissel_no_Cascade')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: line
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CSb_FluorLine_Kissel_no_CascadeC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CSb_FluorLine_Kissel_no_CascadeC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CSb_FluorLine_Kissel_no_CascadeC(Z, line, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CSb_FluorLine_Kissel_no_Cascade


FUNCTION CS_FluorShell_Kissel(Z, shell, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: shell
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CS_FluorShell_KisselC(Z, shell, E, error) &
            BIND(C,NAME='CS_FluorShell_Kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: shell
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CS_FluorShell_KisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CS_FluorShell_KisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CS_FluorShell_KisselC(Z, shell, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CS_FluorShell_Kissel


FUNCTION CSb_FluorShell_Kissel(Z, shell, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: shell
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CSb_FluorShell_KisselC(Z, shell, E, error) &
            BIND(C,NAME='CSb_FluorShell_Kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: shell
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CSb_FluorShell_KisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CSb_FluorShell_KisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CSb_FluorShell_KisselC(Z, shell, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CSb_FluorShell_Kissel


FUNCTION CS_FluorShell_Kissel_Cascade(Z, shell, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: shell
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CS_FluorShell_Kissel_CascadeC(Z, shell, E, error) &
            BIND(C,NAME='CS_FluorShell_Kissel_Cascade')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: shell
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CS_FluorShell_Kissel_CascadeC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CS_FluorShell_Kissel_CascadeC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CS_FluorShell_Kissel_CascadeC(Z, shell, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CS_FluorShell_Kissel_Cascade


FUNCTION CSb_FluorShell_Kissel_Cascade(Z, shell, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: shell
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CSb_FluorShell_Kissel_CascadeC(Z, shell, E, error) &
            BIND(C,NAME='CSb_FluorShell_Kissel_Cascade')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: shell
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CSb_FluorShell_Kissel_CascadeC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CSb_FluorShell_Kissel_CascadeC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CSb_FluorShell_Kissel_CascadeC(Z, shell, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CSb_FluorShell_Kissel_Cascade


FUNCTION CS_FluorShell_Kissel_Nonradiative_Cascade(Z, shell, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: shell
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CS_FluorShell_Kissel_Nonradiative_CascadeC(Z, shell, E, error) &
            BIND(C,NAME='CS_FluorShell_Kissel_Nonradiative_Cascade')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: shell
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CS_FluorShell_Kissel_Nonradiative_CascadeC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CS_FluorShell_Kissel_Nonradiative_CascadeC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CS_FluorShell_Kissel_Nonradiative_CascadeC(Z, shell, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CS_FluorShell_Kissel_Nonradiative_Cascade


FUNCTION CSb_FluorShell_Kissel_Nonradiative_Cascade(Z, shell, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: shell
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CSb_FluorShell_Kissel_Nonradiative_CascadeC(Z, shell, E, error) &
            BIND(C,NAME='CSb_FluorShell_Kissel_Nonradiative_Cascade')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: shell
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CSb_FluorShell_Kissel_Nonradiative_CascadeC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CSb_FluorShell_Kissel_Nonradiative_CascadeC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CSb_FluorShell_Kissel_Nonradiative_CascadeC(Z, shell, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CSb_FluorShell_Kissel_Nonradiative_Cascade


FUNCTION CS_FluorShell_Kissel_Radiative_Cascade(Z, shell, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: shell
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CS_FluorShell_Kissel_Radiative_CascadeC(Z, shell, E, error) &
            BIND(C,NAME='CS_FluorShell_Kissel_Radiative_Cascade')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: shell
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CS_FluorShell_Kissel_Radiative_CascadeC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CS_FluorShell_Kissel_Radiative_CascadeC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CS_FluorShell_Kissel_Radiative_CascadeC(Z, shell, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CS_FluorShell_Kissel_Radiative_Cascade


FUNCTION CSb_FluorShell_Kissel_Radiative_Cascade(Z, shell, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: shell
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CSb_FluorShell_Kissel_Radiative_CascadeC(Z, shell, E, error) &
            BIND(C,NAME='CSb_FluorShell_Kissel_Radiative_Cascade')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: shell
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CSb_FluorShell_Kissel_Radiative_CascadeC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CSb_FluorShell_Kissel_Radiative_CascadeC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CSb_FluorShell_Kissel_Radiative_CascadeC(Z, shell, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CSb_FluorShell_Kissel_Radiative_Cascade


FUNCTION CS_FluorShell_Kissel_no_Cascade(Z, shell, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: shell
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CS_FluorShell_Kissel_no_CascadeC(Z, shell, E, error) &
            BIND(C,NAME='CS_FluorShell_Kissel_no_Cascade')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: shell
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CS_FluorShell_Kissel_no_CascadeC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CS_FluorShell_Kissel_no_CascadeC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CS_FluorShell_Kissel_no_CascadeC(Z, shell, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CS_FluorShell_Kissel_no_Cascade


FUNCTION CSb_FluorShell_Kissel_no_Cascade(Z, shell, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        INTEGER (C_INT), INTENT(IN) :: shell
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CSb_FluorShell_Kissel_no_CascadeC(Z, shell, E, error) &
            BIND(C,NAME='CSb_FluorShell_Kissel_no_Cascade')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                INTEGER (C_INT), INTENT(IN), VALUE :: shell
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CSb_FluorShell_Kissel_no_CascadeC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CSb_FluorShell_Kissel_no_CascadeC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = CSb_FluorShell_Kissel_no_CascadeC(Z, shell, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CSb_FluorShell_Kissel_no_Cascade


FUNCTION PL1_pure_kissel(Z, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION PL1_pure_kisselC(Z, E, error) &
            BIND(C,NAME='PL1_pure_kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: PL1_pure_kisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION PL1_pure_kisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = PL1_pure_kisselC(Z, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION PL1_pure_kissel


FUNCTION PL1_rad_cascade_kissel(Z, E, PK, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: PK
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION PL1_rad_cascade_kisselC(Z, E, PK, error) &
            BIND(C,NAME='PL1_rad_cascade_kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PK
                REAL (C_DOUBLE) :: PL1_rad_cascade_kisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION PL1_rad_cascade_kisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = PL1_rad_cascade_kisselC(Z, E, PK, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION PL1_rad_cascade_kissel


FUNCTION PL1_auger_cascade_kissel(Z, E, PK, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: PK
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION PL1_auger_cascade_kisselC(Z, E, PK, error) &
            BIND(C,NAME='PL1_auger_cascade_kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PK
                REAL (C_DOUBLE) :: PL1_auger_cascade_kisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION PL1_auger_cascade_kisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = PL1_auger_cascade_kisselC(Z, E, PK, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION PL1_auger_cascade_kissel


FUNCTION PL1_full_cascade_kissel(Z, E, PK, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: PK
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION PL1_full_cascade_kisselC(Z, E, PK, error) &
            BIND(C,NAME='PL1_full_cascade_kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PK
                REAL (C_DOUBLE) :: PL1_full_cascade_kisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION PL1_full_cascade_kisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = PL1_full_cascade_kisselC(Z, E, PK, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION PL1_full_cascade_kissel


FUNCTION PL2_pure_kissel(Z, E, PL1, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: PL1
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION PL2_pure_kisselC(Z, E, PL1, error) &
            BIND(C,NAME='PL2_pure_kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL1
                REAL (C_DOUBLE) :: PL2_pure_kisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION PL2_pure_kisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = PL2_pure_kisselC(Z, E, PL1, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION PL2_pure_kissel


FUNCTION PL2_rad_cascade_kissel(Z, E, PK, PL1, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: PK
        REAL (C_DOUBLE), INTENT(IN) :: PL1
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION PL2_rad_cascade_kisselC(Z, E, PK, PL1, error) &
            BIND(C,NAME='PL2_rad_cascade_kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PK
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL1
                REAL (C_DOUBLE) :: PL2_rad_cascade_kisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION PL2_rad_cascade_kisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = PL2_rad_cascade_kisselC(Z, E, PK, PL1, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION PL2_rad_cascade_kissel


FUNCTION PL2_auger_cascade_kissel(Z, E, PK, PL1, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: PK
        REAL (C_DOUBLE), INTENT(IN) :: PL1
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION PL2_auger_cascade_kisselC(Z, E, PK, PL1, error) &
            BIND(C,NAME='PL2_auger_cascade_kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PK
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL1
                REAL (C_DOUBLE) :: PL2_auger_cascade_kisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION PL2_auger_cascade_kisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = PL2_auger_cascade_kisselC(Z, E, PK, PL1, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION PL2_auger_cascade_kissel


FUNCTION PL2_full_cascade_kissel(Z, E, PK, PL1, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: PK
        REAL (C_DOUBLE), INTENT(IN) :: PL1
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION PL2_full_cascade_kisselC(Z, E, PK, PL1, error) &
            BIND(C,NAME='PL2_full_cascade_kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PK
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL1
                REAL (C_DOUBLE) :: PL2_full_cascade_kisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION PL2_full_cascade_kisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = PL2_full_cascade_kisselC(Z, E, PK, PL1, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION PL2_full_cascade_kissel


FUNCTION PL3_pure_kissel(Z, E, PL1, PL2, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: PL1
        REAL (C_DOUBLE), INTENT(IN) :: PL2
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION PL3_pure_kisselC(Z, E, PL1, PL2, error) &
            BIND(C,NAME='PL3_pure_kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL1
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL2
                REAL (C_DOUBLE) :: PL3_pure_kisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION PL3_pure_kisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = PL3_pure_kisselC(Z, E, PL1, PL2, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION PL3_pure_kissel


FUNCTION PL3_rad_cascade_kissel(Z, E, PK, PL1, PL2, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: PK
        REAL (C_DOUBLE), INTENT(IN) :: PL1
        REAL (C_DOUBLE), INTENT(IN) :: PL2
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION PL3_rad_cascade_kisselC(Z, E, PK, PL1, PL2, error) &
            BIND(C,NAME='PL3_rad_cascade_kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PK
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL1
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL2
                REAL (C_DOUBLE) :: PL3_rad_cascade_kisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION PL3_rad_cascade_kisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = PL3_rad_cascade_kisselC(Z, E, PK, PL1, PL2, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION PL3_rad_cascade_kissel


FUNCTION PL3_auger_cascade_kissel(Z, E, PK, PL1, PL2, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: PK
        REAL (C_DOUBLE), INTENT(IN) :: PL1
        REAL (C_DOUBLE), INTENT(IN) :: PL2
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION PL3_auger_cascade_kisselC(Z, E, PK, PL1, PL2, error) &
            BIND(C,NAME='PL3_auger_cascade_kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PK
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL1
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL2
                REAL (C_DOUBLE) :: PL3_auger_cascade_kisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION PL3_auger_cascade_kisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = PL3_auger_cascade_kisselC(Z, E, PK, PL1, PL2, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION PL3_auger_cascade_kissel


FUNCTION PL3_full_cascade_kissel(Z, E, PK, PL1, PL2, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: PK
        REAL (C_DOUBLE), INTENT(IN) :: PL1
        REAL (C_DOUBLE), INTENT(IN) :: PL2
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION PL3_full_cascade_kisselC(Z, E, PK, PL1, PL2, error) &
            BIND(C,NAME='PL3_full_cascade_kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PK
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL1
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL2
                REAL (C_DOUBLE) :: PL3_full_cascade_kisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION PL3_full_cascade_kisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = PL3_full_cascade_kisselC(Z, E, PK, PL1, PL2, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION PL3_full_cascade_kissel


FUNCTION PM1_pure_kissel(Z, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION PM1_pure_kisselC(Z, E, error) &
            BIND(C,NAME='PM1_pure_kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: PM1_pure_kisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION PM1_pure_kisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = PM1_pure_kisselC(Z, E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION PM1_pure_kissel


FUNCTION PM1_rad_cascade_kissel(Z, E, PK, PL1, PL2, PL3, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: PK
        REAL (C_DOUBLE), INTENT(IN) :: PL1
        REAL (C_DOUBLE), INTENT(IN) :: PL2
        REAL (C_DOUBLE), INTENT(IN) :: PL3
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION PM1_rad_cascade_kisselC(Z, E, PK, PL1, PL2, PL3, error) &
            BIND(C,NAME='PM1_rad_cascade_kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PK
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL1
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL2
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL3
                REAL (C_DOUBLE) :: PM1_rad_cascade_kisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION PM1_rad_cascade_kisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = PM1_rad_cascade_kisselC(Z, E, PK, PL1, PL2, PL3, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION PM1_rad_cascade_kissel


FUNCTION PM1_auger_cascade_kissel(Z, E, PK, PL1, PL2, PL3, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: PK
        REAL (C_DOUBLE), INTENT(IN) :: PL1
        REAL (C_DOUBLE), INTENT(IN) :: PL2
        REAL (C_DOUBLE), INTENT(IN) :: PL3
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION PM1_auger_cascade_kisselC(Z, E, PK, PL1, PL2, PL3, error) &
            BIND(C,NAME='PM1_auger_cascade_kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PK
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL1
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL2
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL3
                REAL (C_DOUBLE) :: PM1_auger_cascade_kisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION PM1_auger_cascade_kisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = PM1_auger_cascade_kisselC(Z, E, PK, PL1, PL2, PL3, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION PM1_auger_cascade_kissel


FUNCTION PM1_full_cascade_kissel(Z, E, PK, PL1, PL2, PL3, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: PK
        REAL (C_DOUBLE), INTENT(IN) :: PL1
        REAL (C_DOUBLE), INTENT(IN) :: PL2
        REAL (C_DOUBLE), INTENT(IN) :: PL3
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION PM1_full_cascade_kisselC(Z, E, PK, PL1, PL2, PL3, error) &
            BIND(C,NAME='PM1_full_cascade_kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PK
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL1
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL2
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL3
                REAL (C_DOUBLE) :: PM1_full_cascade_kisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION PM1_full_cascade_kisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = PM1_full_cascade_kisselC(Z, E, PK, PL1, PL2, PL3, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION PM1_full_cascade_kissel


FUNCTION PM2_pure_kissel(Z, E, PM1, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: PM1
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION PM2_pure_kisselC(Z, E, PM1, error) &
            BIND(C,NAME='PM2_pure_kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM1
                REAL (C_DOUBLE) :: PM2_pure_kisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION PM2_pure_kisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = PM2_pure_kisselC(Z, E, PM1, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION PM2_pure_kissel


FUNCTION PM2_rad_cascade_kissel(Z, E, PK, PL1, PL2, PL3, PM1, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: PK
        REAL (C_DOUBLE), INTENT(IN) :: PL1
        REAL (C_DOUBLE), INTENT(IN) :: PL2
        REAL (C_DOUBLE), INTENT(IN) :: PL3
        REAL (C_DOUBLE), INTENT(IN) :: PM1
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION PM2_rad_cascade_kisselC(Z, E, PK, PL1, PL2, PL3, PM1, error) &
            BIND(C,NAME='PM2_rad_cascade_kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PK
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL1
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL2
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL3
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM1
                REAL (C_DOUBLE) :: PM2_rad_cascade_kisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION PM2_rad_cascade_kisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = PM2_rad_cascade_kisselC(Z, E, PK, PL1, PL2, PL3, PM1, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION PM2_rad_cascade_kissel


FUNCTION PM2_auger_cascade_kissel(Z, E, PK, PL1, PL2, PL3, PM1, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: PK
        REAL (C_DOUBLE), INTENT(IN) :: PL1
        REAL (C_DOUBLE), INTENT(IN) :: PL2
        REAL (C_DOUBLE), INTENT(IN) :: PL3
        REAL (C_DOUBLE), INTENT(IN) :: PM1
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION PM2_auger_cascade_kisselC(Z, E, PK, PL1, PL2, PL3, PM1, error) &
            BIND(C,NAME='PM2_auger_cascade_kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PK
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL1
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL2
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL3
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM1
                REAL (C_DOUBLE) :: PM2_auger_cascade_kisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION PM2_auger_cascade_kisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = PM2_auger_cascade_kisselC(Z, E, PK, PL1, PL2, PL3, PM1, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION PM2_auger_cascade_kissel


FUNCTION PM2_full_cascade_kissel(Z, E, PK, PL1, PL2, PL3, PM1, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: PK
        REAL (C_DOUBLE), INTENT(IN) :: PL1
        REAL (C_DOUBLE), INTENT(IN) :: PL2
        REAL (C_DOUBLE), INTENT(IN) :: PL3
        REAL (C_DOUBLE), INTENT(IN) :: PM1
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION PM2_full_cascade_kisselC(Z, E, PK, PL1, PL2, PL3, PM1, error) &
            BIND(C,NAME='PM2_full_cascade_kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PK
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL1
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL2
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL3
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM1
                REAL (C_DOUBLE) :: PM2_full_cascade_kisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION PM2_full_cascade_kisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = PM2_full_cascade_kisselC(Z, E, PK, PL1, PL2, PL3, PM1, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION PM2_full_cascade_kissel


FUNCTION PM3_pure_kissel(Z, E, PM1, PM2, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: PM1
        REAL (C_DOUBLE), INTENT(IN) :: PM2
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION PM3_pure_kisselC(Z, E, PM1, PM2, error) &
            BIND(C,NAME='PM3_pure_kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM1
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM2
                REAL (C_DOUBLE) :: PM3_pure_kisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION PM3_pure_kisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = PM3_pure_kisselC(Z, E, PM1, PM2, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION PM3_pure_kissel


FUNCTION PM3_rad_cascade_kissel(Z, E, PK, PL1, PL2, PL3, PM1, PM2, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: PK
        REAL (C_DOUBLE), INTENT(IN) :: PL1
        REAL (C_DOUBLE), INTENT(IN) :: PL2
        REAL (C_DOUBLE), INTENT(IN) :: PL3
        REAL (C_DOUBLE), INTENT(IN) :: PM1
        REAL (C_DOUBLE), INTENT(IN) :: PM2
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION PM3_rad_cascade_kisselC(Z, E, PK, PL1, PL2, PL3, PM1, PM2, error) &
            BIND(C,NAME='PM3_rad_cascade_kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PK
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL1
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL2
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL3
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM1
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM2
                REAL (C_DOUBLE) :: PM3_rad_cascade_kisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION PM3_rad_cascade_kisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = PM3_rad_cascade_kisselC(Z, E, PK, PL1, PL2, PL3, PM1, PM2, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION PM3_rad_cascade_kissel


FUNCTION PM3_auger_cascade_kissel(Z, E, PK, PL1, PL2, PL3, PM1, PM2, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: PK
        REAL (C_DOUBLE), INTENT(IN) :: PL1
        REAL (C_DOUBLE), INTENT(IN) :: PL2
        REAL (C_DOUBLE), INTENT(IN) :: PL3
        REAL (C_DOUBLE), INTENT(IN) :: PM1
        REAL (C_DOUBLE), INTENT(IN) :: PM2
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION PM3_auger_cascade_kisselC(Z, E, PK, PL1, PL2, PL3, PM1, PM2, error) &
            BIND(C,NAME='PM3_auger_cascade_kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PK
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL1
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL2
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL3
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM1
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM2
                REAL (C_DOUBLE) :: PM3_auger_cascade_kisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION PM3_auger_cascade_kisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = PM3_auger_cascade_kisselC(Z, E, PK, PL1, PL2, PL3, PM1, PM2, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION PM3_auger_cascade_kissel


FUNCTION PM3_full_cascade_kissel(Z, E, PK, PL1, PL2, PL3, PM1, PM2, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: PK
        REAL (C_DOUBLE), INTENT(IN) :: PL1
        REAL (C_DOUBLE), INTENT(IN) :: PL2
        REAL (C_DOUBLE), INTENT(IN) :: PL3
        REAL (C_DOUBLE), INTENT(IN) :: PM1
        REAL (C_DOUBLE), INTENT(IN) :: PM2
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION PM3_full_cascade_kisselC(Z, E, PK, PL1, PL2, PL3, PM1, PM2, error) &
            BIND(C,NAME='PM3_full_cascade_kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PK
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL1
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL2
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL3
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM1
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM2
                REAL (C_DOUBLE) :: PM3_full_cascade_kisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION PM3_full_cascade_kisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = PM3_full_cascade_kisselC(Z, E, PK, PL1, PL2, PL3, PM1, PM2, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION PM3_full_cascade_kissel


FUNCTION PM4_pure_kissel(Z, E, PM1, PM2, PM3, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: PM1
        REAL (C_DOUBLE), INTENT(IN) :: PM2
        REAL (C_DOUBLE), INTENT(IN) :: PM3
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION PM4_pure_kisselC(Z, E, PM1, PM2, PM3, error) &
            BIND(C,NAME='PM4_pure_kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM1
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM2
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM3
                REAL (C_DOUBLE) :: PM4_pure_kisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION PM4_pure_kisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = PM4_pure_kisselC(Z, E, PM1, PM2, PM3, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION PM4_pure_kissel


FUNCTION PM4_rad_cascade_kissel(Z, E, PK, PL1, PL2, PL3, PM1, PM2, PM3, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: PK
        REAL (C_DOUBLE), INTENT(IN) :: PL1
        REAL (C_DOUBLE), INTENT(IN) :: PL2
        REAL (C_DOUBLE), INTENT(IN) :: PL3
        REAL (C_DOUBLE), INTENT(IN) :: PM1
        REAL (C_DOUBLE), INTENT(IN) :: PM2
        REAL (C_DOUBLE), INTENT(IN) :: PM3
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION PM4_rad_cascade_kisselC(Z, E, PK, PL1, PL2, PL3, PM1, PM2, PM3, error) &
            BIND(C,NAME='PM4_rad_cascade_kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PK
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL1
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL2
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL3
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM1
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM2
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM3
                REAL (C_DOUBLE) :: PM4_rad_cascade_kisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION PM4_rad_cascade_kisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = PM4_rad_cascade_kisselC(Z, E, PK, PL1, PL2, PL3, PM1, PM2, PM3, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION PM4_rad_cascade_kissel


FUNCTION PM4_auger_cascade_kissel(Z, E, PK, PL1, PL2, PL3, PM1, PM2, PM3, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: PK
        REAL (C_DOUBLE), INTENT(IN) :: PL1
        REAL (C_DOUBLE), INTENT(IN) :: PL2
        REAL (C_DOUBLE), INTENT(IN) :: PL3
        REAL (C_DOUBLE), INTENT(IN) :: PM1
        REAL (C_DOUBLE), INTENT(IN) :: PM2
        REAL (C_DOUBLE), INTENT(IN) :: PM3
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION PM4_auger_cascade_kisselC(Z, E, PK, PL1, PL2, PL3, PM1, PM2, PM3, error) &
            BIND(C,NAME='PM4_auger_cascade_kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PK
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL1
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL2
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL3
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM1
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM2
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM3
                REAL (C_DOUBLE) :: PM4_auger_cascade_kisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION PM4_auger_cascade_kisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = PM4_auger_cascade_kisselC(Z, E, PK, PL1, PL2, PL3, PM1, PM2, PM3, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION PM4_auger_cascade_kissel


FUNCTION PM4_full_cascade_kissel(Z, E, PK, PL1, PL2, PL3, PM1, PM2, PM3, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: PK
        REAL (C_DOUBLE), INTENT(IN) :: PL1
        REAL (C_DOUBLE), INTENT(IN) :: PL2
        REAL (C_DOUBLE), INTENT(IN) :: PL3
        REAL (C_DOUBLE), INTENT(IN) :: PM1
        REAL (C_DOUBLE), INTENT(IN) :: PM2
        REAL (C_DOUBLE), INTENT(IN) :: PM3
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION PM4_full_cascade_kisselC(Z, E, PK, PL1, PL2, PL3, PM1, PM2, PM3, error) &
            BIND(C,NAME='PM4_full_cascade_kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PK
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL1
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL2
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL3
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM1
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM2
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM3
                REAL (C_DOUBLE) :: PM4_full_cascade_kisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION PM4_full_cascade_kisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = PM4_full_cascade_kisselC(Z, E, PK, PL1, PL2, PL3, PM1, PM2, PM3, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION PM4_full_cascade_kissel


FUNCTION PM5_pure_kissel(Z, E, PM1, PM2, PM3, PM4, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: PM1
        REAL (C_DOUBLE), INTENT(IN) :: PM2
        REAL (C_DOUBLE), INTENT(IN) :: PM3
        REAL (C_DOUBLE), INTENT(IN) :: PM4
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION PM5_pure_kisselC(Z, E, PM1, PM2, PM3, PM4, error) &
            BIND(C,NAME='PM5_pure_kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM1
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM2
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM3
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM4
                REAL (C_DOUBLE) :: PM5_pure_kisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION PM5_pure_kisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = PM5_pure_kisselC(Z, E, PM1, PM2, PM3, PM4, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION PM5_pure_kissel


FUNCTION PM5_rad_cascade_kissel(Z, E, PK, PL1, PL2, PL3, PM1, PM2, PM3, PM4, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: PK
        REAL (C_DOUBLE), INTENT(IN) :: PL1
        REAL (C_DOUBLE), INTENT(IN) :: PL2
        REAL (C_DOUBLE), INTENT(IN) :: PL3
        REAL (C_DOUBLE), INTENT(IN) :: PM1
        REAL (C_DOUBLE), INTENT(IN) :: PM2
        REAL (C_DOUBLE), INTENT(IN) :: PM3
        REAL (C_DOUBLE), INTENT(IN) :: PM4
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION PM5_rad_cascade_kisselC(Z, E, PK, PL1, PL2, PL3, PM1, PM2, PM3, PM4, error) &
            BIND(C,NAME='PM5_rad_cascade_kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PK
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL1
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL2
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL3
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM1
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM2
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM3
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM4
                REAL (C_DOUBLE) :: PM5_rad_cascade_kisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION PM5_rad_cascade_kisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = PM5_rad_cascade_kisselC(Z, E, PK, PL1, PL2, PL3, PM1, PM2, PM3, PM4, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION PM5_rad_cascade_kissel


FUNCTION PM5_auger_cascade_kissel(Z, E, PK, PL1, PL2, PL3, PM1, PM2, PM3, PM4, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: PK
        REAL (C_DOUBLE), INTENT(IN) :: PL1
        REAL (C_DOUBLE), INTENT(IN) :: PL2
        REAL (C_DOUBLE), INTENT(IN) :: PL3
        REAL (C_DOUBLE), INTENT(IN) :: PM1
        REAL (C_DOUBLE), INTENT(IN) :: PM2
        REAL (C_DOUBLE), INTENT(IN) :: PM3
        REAL (C_DOUBLE), INTENT(IN) :: PM4
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION PM5_auger_cascade_kisselC(Z, E, PK, PL1, PL2, PL3, PM1, PM2, PM3, PM4, error) &
            BIND(C,NAME='PM5_auger_cascade_kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PK
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL1
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL2
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL3
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM1
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM2
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM3
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM4
                REAL (C_DOUBLE) :: PM5_auger_cascade_kisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION PM5_auger_cascade_kisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = PM5_auger_cascade_kisselC(Z, E, PK, PL1, PL2, PL3, PM1, PM2, PM3, PM4, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION PM5_auger_cascade_kissel


FUNCTION PM5_full_cascade_kissel(Z, E, PK, PL1, PL2, PL3, PM1, PM2, PM3, PM4, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        INTEGER (C_INT), INTENT(IN) :: Z
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: PK
        REAL (C_DOUBLE), INTENT(IN) :: PL1
        REAL (C_DOUBLE), INTENT(IN) :: PL2
        REAL (C_DOUBLE), INTENT(IN) :: PL3
        REAL (C_DOUBLE), INTENT(IN) :: PM1
        REAL (C_DOUBLE), INTENT(IN) :: PM2
        REAL (C_DOUBLE), INTENT(IN) :: PM3
        REAL (C_DOUBLE), INTENT(IN) :: PM4
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION PM5_full_cascade_kisselC(Z, E, PK, PL1, PL2, PL3, PM1, PM2, PM3, PM4, error) &
            BIND(C,NAME='PM5_full_cascade_kissel')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                INTEGER (C_INT), INTENT(IN), VALUE :: Z
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PK
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL1
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL2
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PL3
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM1
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM2
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM3
                REAL (C_DOUBLE), INTENT(IN), VALUE :: PM4
                REAL (C_DOUBLE) :: PM5_full_cascade_kisselC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION PM5_full_cascade_kisselC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        
        rv = PM5_full_cascade_kisselC(Z, E, PK, PL1, PL2, PL3, PM1, PM2, PM3, PM4, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION PM5_full_cascade_kissel


FUNCTION CS_Total_CP(compound, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        CHARACTER (KIND=C_CHAR,LEN=*), INTENT(IN) :: compound 
        CHARACTER (KIND=C_CHAR), DIMENSION(:), ALLOCATABLE, TARGET :: &
        compound_F
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CS_Total_CPC(compound, E, error) &
            BIND(C,NAME='CS_Total_CP')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                TYPE (C_PTR), INTENT(IN), VALUE :: compound
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CS_Total_CPC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CS_Total_CPC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        CALL stringF2C(compound, compound_F)

        rv = CS_Total_CPC(C_LOC(compound_F), E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CS_Total_CP


FUNCTION CS_Photo_CP(compound, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        CHARACTER (KIND=C_CHAR,LEN=*), INTENT(IN) :: compound 
        CHARACTER (KIND=C_CHAR), DIMENSION(:), ALLOCATABLE, TARGET :: &
        compound_F
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CS_Photo_CPC(compound, E, error) &
            BIND(C,NAME='CS_Photo_CP')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                TYPE (C_PTR), INTENT(IN), VALUE :: compound
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CS_Photo_CPC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CS_Photo_CPC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        CALL stringF2C(compound, compound_F)

        rv = CS_Photo_CPC(C_LOC(compound_F), E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CS_Photo_CP


FUNCTION CS_Rayl_CP(compound, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        CHARACTER (KIND=C_CHAR,LEN=*), INTENT(IN) :: compound 
        CHARACTER (KIND=C_CHAR), DIMENSION(:), ALLOCATABLE, TARGET :: &
        compound_F
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CS_Rayl_CPC(compound, E, error) &
            BIND(C,NAME='CS_Rayl_CP')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                TYPE (C_PTR), INTENT(IN), VALUE :: compound
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CS_Rayl_CPC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CS_Rayl_CPC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        CALL stringF2C(compound, compound_F)

        rv = CS_Rayl_CPC(C_LOC(compound_F), E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CS_Rayl_CP


FUNCTION CS_Compt_CP(compound, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        CHARACTER (KIND=C_CHAR,LEN=*), INTENT(IN) :: compound 
        CHARACTER (KIND=C_CHAR), DIMENSION(:), ALLOCATABLE, TARGET :: &
        compound_F
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CS_Compt_CPC(compound, E, error) &
            BIND(C,NAME='CS_Compt_CP')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                TYPE (C_PTR), INTENT(IN), VALUE :: compound
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CS_Compt_CPC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CS_Compt_CPC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        CALL stringF2C(compound, compound_F)

        rv = CS_Compt_CPC(C_LOC(compound_F), E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CS_Compt_CP


FUNCTION CS_Energy_CP(compound, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        CHARACTER (KIND=C_CHAR,LEN=*), INTENT(IN) :: compound 
        CHARACTER (KIND=C_CHAR), DIMENSION(:), ALLOCATABLE, TARGET :: &
        compound_F
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CS_Energy_CPC(compound, E, error) &
            BIND(C,NAME='CS_Energy_CP')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                TYPE (C_PTR), INTENT(IN), VALUE :: compound
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CS_Energy_CPC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CS_Energy_CPC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        CALL stringF2C(compound, compound_F)

        rv = CS_Energy_CPC(C_LOC(compound_F), E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CS_Energy_CP


FUNCTION CSb_Total_CP(compound, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        CHARACTER (KIND=C_CHAR,LEN=*), INTENT(IN) :: compound 
        CHARACTER (KIND=C_CHAR), DIMENSION(:), ALLOCATABLE, TARGET :: &
        compound_F
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CSb_Total_CPC(compound, E, error) &
            BIND(C,NAME='CSb_Total_CP')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                TYPE (C_PTR), INTENT(IN), VALUE :: compound
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CSb_Total_CPC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CSb_Total_CPC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        CALL stringF2C(compound, compound_F)

        rv = CSb_Total_CPC(C_LOC(compound_F), E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CSb_Total_CP


FUNCTION CSb_Photo_CP(compound, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        CHARACTER (KIND=C_CHAR,LEN=*), INTENT(IN) :: compound 
        CHARACTER (KIND=C_CHAR), DIMENSION(:), ALLOCATABLE, TARGET :: &
        compound_F
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CSb_Photo_CPC(compound, E, error) &
            BIND(C,NAME='CSb_Photo_CP')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                TYPE (C_PTR), INTENT(IN), VALUE :: compound
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CSb_Photo_CPC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CSb_Photo_CPC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        CALL stringF2C(compound, compound_F)

        rv = CSb_Photo_CPC(C_LOC(compound_F), E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CSb_Photo_CP


FUNCTION CSb_Rayl_CP(compound, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        CHARACTER (KIND=C_CHAR,LEN=*), INTENT(IN) :: compound 
        CHARACTER (KIND=C_CHAR), DIMENSION(:), ALLOCATABLE, TARGET :: &
        compound_F
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CSb_Rayl_CPC(compound, E, error) &
            BIND(C,NAME='CSb_Rayl_CP')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                TYPE (C_PTR), INTENT(IN), VALUE :: compound
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CSb_Rayl_CPC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CSb_Rayl_CPC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        CALL stringF2C(compound, compound_F)

        rv = CSb_Rayl_CPC(C_LOC(compound_F), E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CSb_Rayl_CP


FUNCTION CSb_Compt_CP(compound, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        CHARACTER (KIND=C_CHAR,LEN=*), INTENT(IN) :: compound 
        CHARACTER (KIND=C_CHAR), DIMENSION(:), ALLOCATABLE, TARGET :: &
        compound_F
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CSb_Compt_CPC(compound, E, error) &
            BIND(C,NAME='CSb_Compt_CP')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                TYPE (C_PTR), INTENT(IN), VALUE :: compound
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CSb_Compt_CPC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CSb_Compt_CPC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        CALL stringF2C(compound, compound_F)

        rv = CSb_Compt_CPC(C_LOC(compound_F), E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CSb_Compt_CP


FUNCTION DCS_Rayl_CP(compound, E, theta, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        CHARACTER (KIND=C_CHAR,LEN=*), INTENT(IN) :: compound 
        CHARACTER (KIND=C_CHAR), DIMENSION(:), ALLOCATABLE, TARGET :: &
        compound_F
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: theta
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION DCS_Rayl_CPC(compound, E, theta, error) &
            BIND(C,NAME='DCS_Rayl_CP')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                TYPE (C_PTR), INTENT(IN), VALUE :: compound
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: theta
                REAL (C_DOUBLE) :: DCS_Rayl_CPC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION DCS_Rayl_CPC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        CALL stringF2C(compound, compound_F)

        rv = DCS_Rayl_CPC(C_LOC(compound_F), E, theta, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION DCS_Rayl_CP


FUNCTION DCS_Compt_CP(compound, E, theta, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        CHARACTER (KIND=C_CHAR,LEN=*), INTENT(IN) :: compound 
        CHARACTER (KIND=C_CHAR), DIMENSION(:), ALLOCATABLE, TARGET :: &
        compound_F
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: theta
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION DCS_Compt_CPC(compound, E, theta, error) &
            BIND(C,NAME='DCS_Compt_CP')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                TYPE (C_PTR), INTENT(IN), VALUE :: compound
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: theta
                REAL (C_DOUBLE) :: DCS_Compt_CPC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION DCS_Compt_CPC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        CALL stringF2C(compound, compound_F)

        rv = DCS_Compt_CPC(C_LOC(compound_F), E, theta, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION DCS_Compt_CP


FUNCTION DCSb_Rayl_CP(compound, E, theta, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        CHARACTER (KIND=C_CHAR,LEN=*), INTENT(IN) :: compound 
        CHARACTER (KIND=C_CHAR), DIMENSION(:), ALLOCATABLE, TARGET :: &
        compound_F
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: theta
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION DCSb_Rayl_CPC(compound, E, theta, error) &
            BIND(C,NAME='DCSb_Rayl_CP')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                TYPE (C_PTR), INTENT(IN), VALUE :: compound
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: theta
                REAL (C_DOUBLE) :: DCSb_Rayl_CPC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION DCSb_Rayl_CPC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        CALL stringF2C(compound, compound_F)

        rv = DCSb_Rayl_CPC(C_LOC(compound_F), E, theta, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION DCSb_Rayl_CP


FUNCTION DCSb_Compt_CP(compound, E, theta, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        CHARACTER (KIND=C_CHAR,LEN=*), INTENT(IN) :: compound 
        CHARACTER (KIND=C_CHAR), DIMENSION(:), ALLOCATABLE, TARGET :: &
        compound_F
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: theta
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION DCSb_Compt_CPC(compound, E, theta, error) &
            BIND(C,NAME='DCSb_Compt_CP')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                TYPE (C_PTR), INTENT(IN), VALUE :: compound
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: theta
                REAL (C_DOUBLE) :: DCSb_Compt_CPC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION DCSb_Compt_CPC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        CALL stringF2C(compound, compound_F)

        rv = DCSb_Compt_CPC(C_LOC(compound_F), E, theta, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION DCSb_Compt_CP


FUNCTION DCSP_Rayl_CP(compound, E, theta, phi, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        CHARACTER (KIND=C_CHAR,LEN=*), INTENT(IN) :: compound 
        CHARACTER (KIND=C_CHAR), DIMENSION(:), ALLOCATABLE, TARGET :: &
        compound_F
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: theta
        REAL (C_DOUBLE), INTENT(IN) :: phi
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION DCSP_Rayl_CPC(compound, E, theta, phi, error) &
            BIND(C,NAME='DCSP_Rayl_CP')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                TYPE (C_PTR), INTENT(IN), VALUE :: compound
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: theta
                REAL (C_DOUBLE), INTENT(IN), VALUE :: phi
                REAL (C_DOUBLE) :: DCSP_Rayl_CPC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION DCSP_Rayl_CPC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        CALL stringF2C(compound, compound_F)

        rv = DCSP_Rayl_CPC(C_LOC(compound_F), E, theta, phi, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION DCSP_Rayl_CP


FUNCTION DCSP_Compt_CP(compound, E, theta, phi, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        CHARACTER (KIND=C_CHAR,LEN=*), INTENT(IN) :: compound 
        CHARACTER (KIND=C_CHAR), DIMENSION(:), ALLOCATABLE, TARGET :: &
        compound_F
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: theta
        REAL (C_DOUBLE), INTENT(IN) :: phi
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION DCSP_Compt_CPC(compound, E, theta, phi, error) &
            BIND(C,NAME='DCSP_Compt_CP')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                TYPE (C_PTR), INTENT(IN), VALUE :: compound
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: theta
                REAL (C_DOUBLE), INTENT(IN), VALUE :: phi
                REAL (C_DOUBLE) :: DCSP_Compt_CPC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION DCSP_Compt_CPC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        CALL stringF2C(compound, compound_F)

        rv = DCSP_Compt_CPC(C_LOC(compound_F), E, theta, phi, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION DCSP_Compt_CP


FUNCTION DCSPb_Rayl_CP(compound, E, theta, phi, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        CHARACTER (KIND=C_CHAR,LEN=*), INTENT(IN) :: compound 
        CHARACTER (KIND=C_CHAR), DIMENSION(:), ALLOCATABLE, TARGET :: &
        compound_F
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: theta
        REAL (C_DOUBLE), INTENT(IN) :: phi
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION DCSPb_Rayl_CPC(compound, E, theta, phi, error) &
            BIND(C,NAME='DCSPb_Rayl_CP')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                TYPE (C_PTR), INTENT(IN), VALUE :: compound
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: theta
                REAL (C_DOUBLE), INTENT(IN), VALUE :: phi
                REAL (C_DOUBLE) :: DCSPb_Rayl_CPC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION DCSPb_Rayl_CPC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        CALL stringF2C(compound, compound_F)

        rv = DCSPb_Rayl_CPC(C_LOC(compound_F), E, theta, phi, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION DCSPb_Rayl_CP


FUNCTION DCSPb_Compt_CP(compound, E, theta, phi, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        CHARACTER (KIND=C_CHAR,LEN=*), INTENT(IN) :: compound 
        CHARACTER (KIND=C_CHAR), DIMENSION(:), ALLOCATABLE, TARGET :: &
        compound_F
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: theta
        REAL (C_DOUBLE), INTENT(IN) :: phi
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION DCSPb_Compt_CPC(compound, E, theta, phi, error) &
            BIND(C,NAME='DCSPb_Compt_CP')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                TYPE (C_PTR), INTENT(IN), VALUE :: compound
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: theta
                REAL (C_DOUBLE), INTENT(IN), VALUE :: phi
                REAL (C_DOUBLE) :: DCSPb_Compt_CPC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION DCSPb_Compt_CPC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        CALL stringF2C(compound, compound_F)

        rv = DCSPb_Compt_CPC(C_LOC(compound_F), E, theta, phi, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION DCSPb_Compt_CP


FUNCTION CS_Photo_Total_CP(compound, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        CHARACTER (KIND=C_CHAR,LEN=*), INTENT(IN) :: compound 
        CHARACTER (KIND=C_CHAR), DIMENSION(:), ALLOCATABLE, TARGET :: &
        compound_F
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CS_Photo_Total_CPC(compound, E, error) &
            BIND(C,NAME='CS_Photo_Total_CP')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                TYPE (C_PTR), INTENT(IN), VALUE :: compound
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CS_Photo_Total_CPC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CS_Photo_Total_CPC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        CALL stringF2C(compound, compound_F)

        rv = CS_Photo_Total_CPC(C_LOC(compound_F), E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CS_Photo_Total_CP


FUNCTION CS_Total_Kissel_CP(compound, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        CHARACTER (KIND=C_CHAR,LEN=*), INTENT(IN) :: compound 
        CHARACTER (KIND=C_CHAR), DIMENSION(:), ALLOCATABLE, TARGET :: &
        compound_F
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CS_Total_Kissel_CPC(compound, E, error) &
            BIND(C,NAME='CS_Total_Kissel_CP')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                TYPE (C_PTR), INTENT(IN), VALUE :: compound
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CS_Total_Kissel_CPC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CS_Total_Kissel_CPC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        CALL stringF2C(compound, compound_F)

        rv = CS_Total_Kissel_CPC(C_LOC(compound_F), E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CS_Total_Kissel_CP


FUNCTION CSb_Photo_Total_CP(compound, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        CHARACTER (KIND=C_CHAR,LEN=*), INTENT(IN) :: compound 
        CHARACTER (KIND=C_CHAR), DIMENSION(:), ALLOCATABLE, TARGET :: &
        compound_F
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CSb_Photo_Total_CPC(compound, E, error) &
            BIND(C,NAME='CSb_Photo_Total_CP')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                TYPE (C_PTR), INTENT(IN), VALUE :: compound
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CSb_Photo_Total_CPC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CSb_Photo_Total_CPC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        CALL stringF2C(compound, compound_F)

        rv = CSb_Photo_Total_CPC(C_LOC(compound_F), E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CSb_Photo_Total_CP


FUNCTION CSb_Total_Kissel_CP(compound, E, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        CHARACTER (KIND=C_CHAR,LEN=*), INTENT(IN) :: compound 
        CHARACTER (KIND=C_CHAR), DIMENSION(:), ALLOCATABLE, TARGET :: &
        compound_F
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION CSb_Total_Kissel_CPC(compound, E, error) &
            BIND(C,NAME='CSb_Total_Kissel_CP')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                TYPE (C_PTR), INTENT(IN), VALUE :: compound
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE) :: CSb_Total_Kissel_CPC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION CSb_Total_Kissel_CPC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        CALL stringF2C(compound, compound_F)

        rv = CSb_Total_Kissel_CPC(C_LOC(compound_F), E, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION CSb_Total_Kissel_CP


FUNCTION Refractive_Index_Re(compound, E, density, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        CHARACTER (KIND=C_CHAR,LEN=*), INTENT(IN) :: compound 
        CHARACTER (KIND=C_CHAR), DIMENSION(:), ALLOCATABLE, TARGET :: &
        compound_F
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: density
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION Refractive_Index_ReC(compound, E, density, error) &
            BIND(C,NAME='Refractive_Index_Re')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                TYPE (C_PTR), INTENT(IN), VALUE :: compound
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: density
                REAL (C_DOUBLE) :: Refractive_Index_ReC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION Refractive_Index_ReC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        CALL stringF2C(compound, compound_F)

        rv = Refractive_Index_ReC(C_LOC(compound_F), E, density, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION Refractive_Index_Re


FUNCTION Refractive_Index_Im(compound, E, density, error) RESULT(rv)
        USE, INTRINSIC :: ISO_C_BINDING
        USE, INTRINSIC :: ISO_FORTRAN_ENV
        IMPLICIT NONE

        CHARACTER (KIND=C_CHAR,LEN=*), INTENT(IN) :: compound 
        CHARACTER (KIND=C_CHAR), DIMENSION(:), ALLOCATABLE, TARGET :: &
        compound_F
        REAL (C_DOUBLE), INTENT(IN) :: E
        REAL (C_DOUBLE), INTENT(IN) :: density
        REAL (C_DOUBLE) :: rv

        TYPE(xrl_error), POINTER, OPTIONAL :: error
        TYPE (C_PTR) :: errorPtr, errorPtrLoc
        TARGET :: errorPtr

        INTERFACE
            FUNCTION Refractive_Index_ImC(compound, E, density, error) &
            BIND(C,NAME='Refractive_Index_Im')
                USE, INTRINSIC :: ISO_C_BINDING
                IMPLICIT NONE
                TYPE (C_PTR), INTENT(IN), VALUE :: compound
                REAL (C_DOUBLE), INTENT(IN), VALUE :: E
                REAL (C_DOUBLE), INTENT(IN), VALUE :: density
                REAL (C_DOUBLE) :: Refractive_Index_ImC
                TYPE (C_PTR),INTENT(IN),VALUE :: error
            ENDFUNCTION Refractive_Index_ImC
        ENDINTERFACE

        errorPtr = C_NULL_PTR
        errorPtrLoc = C_NULL_PTR

        IF (PRESENT(error)) THEN
                IF (.NOT. ASSOCIATED(error)) THEN
                        errorPtrLoc = C_LOC(errorPtr)
                ELSE
                        ! print warning
                        WRITE (error_unit, '(A)') & 
                        'error POINTER must be disassociated!'
                ENDIF
        ENDIF
        CALL stringF2C(compound, compound_F)

        rv = Refractive_Index_ImC(C_LOC(compound_F), E, density, errorPtrLoc)

        IF (C_ASSOCIATED(errorPtr)) THEN
                CALL process_error(errorPtr, error)
        ENDIF
ENDFUNCTION Refractive_Index_Im
