Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
Announcements
Welcome to the Intel Community. If you get an answer you like, please mark it as an Accepted Solution to help others. Thank you!
26733 Discussions

Passing type bounded procedure to Quadpack

pDs
Beginner
77 Views

Greetings,

 

I'd like to pass a type bounded procedure to Quadpack's qagpi integrator. Is there a way I could do that? The following code generates a SIGSEGV... so I'm doing this very wrong.

Any help would be much appreciated.

Thanks!

 

module A

      use B
      use C
      
      implicit none

      
      type L
      real                           :: vs 
      integer                        :: itermax
      
      contains

      procedure                      :: a1=>A1
      procedure                      :: b1=>B1
      procedure                      :: c1=>C1
      procedure                      :: d1=>D1
      procedure                      :: e1=>E1
      procedure                      :: intgrd=>integrand
      end type L

      real function D1 ( this, r)
      class(L)   , intent(in) :: this 
      real (kind = 4)  ,intent(inout) :: r 
! Do something
      D1 = somevalue
      return
      end function D1

      real function E1 ( this, r)
      class(L)   , intent(in) :: this 
      real (kind = 4)  ,intent(inout) :: r 
! Do something
      E1 = somevalue
      return
      end function E1

      real function integrand(this, r)
      class(L)   , intent(in) :: this 
      real (kind = 4)  ,intent(inout) :: r 
      real                            :: x, y

      x = this% D1(r)
      y= this% E1(r)
      integrand = x * (y**2) / r
      
      return
      end function integrand
      

      real function A1(this, r)
      class(L)    , intent(in) :: this 
      real (kind = 4)     , intent(in) :: r 
      real (kind = 4)                  :: a
      real ( kind = 4 )                :: abserr
      real ( kind = 4 )    , parameter :: epsabs = 0.0E+00
      real ( kind = 4 )    , parameter :: epsrel = 1E-06
      integer ( kind = 4 )             :: ier
      integer ( kind = 4 ) , parameter :: inf = 1
      integer ( kind = 4 )             :: neval
      real ( kind = 4 )    , parameter :: r4_pi = 3.141592653589793E+00
      real ( kind = 4 )                :: result
      
      a = real ( r, 4 )
      call qagi ( this% intgrd,
     &            a, inf, epsabs, epsrel,
     &            result,
     &            abserr,
     &            neval,
     &            ier)

      A1 = - result
      return
      end function A1
end module A
0 Kudos
1 Reply
mecej4
Black Belt
77 Views

Please provide valid source code. The lines you gave above do not form a complete program acceptable to the compiler.

Was it the compiler, or the compiled and linked program generated from your source code, that produced the seg-fault?

Which version of Quadpack do you use, and what is the interface of its QAGI? Are you using the Fortran 77 implicit interface?

Reply