# function inlining

Hello,

I’m trying to inline the following function

``````      subroutine slope_wsm3(qrs,den,denfac,t,rslope,rslopeb,rslope2,rslope3,vt,its,ite,kts,kte)
IMPLICIT NONE
INTEGER       ::               its,ite, jts,jte, kts,kte
REAL, DIMENSION( its:ite , kts:kte ) ::                                      &
qrs, &
den, &
denfac, &
t, &
rslope, &
rslopeb, &
rslope2, &
rslope3, &
vt
REAL, PARAMETER  :: t0c = 273.15
REAL, DIMENSION( its:ite , kts:kte ) ::                                      &
n0sfac
REAL       ::  lamdar,lamdas,x, y, z, supcol, pvt
integer :: i, j, k
!----------------------------------------------------------------
!     size distributions: (x=mixing ratio, y=air density):
!     valid for mixing ratio > 1.e-9 kg/kg.
!
lamdar(x,y)=   sqrt(sqrt(pidn0r/(x*y)))      ! (pidn0r/(x*y))**.25
lamdas(x,y,z)= sqrt(sqrt(pidn0s*z/(x*y)))    ! (pidn0s*z/(x*y))**.25
!
do k = kts, kte
do i = its, ite
if(t(i,k).ge.t0c) then
pvt = pvtr
if(qrs(i,k).le.qcrmin)then
rslope(i,k) = rslopermax
rslopeb(i,k) = rsloperbmax
rslope2(i,k) = rsloper2max
rslope3(i,k) = rsloper3max
else
rslope(i,k) = 1./lamdar(qrs(i,k),den(i,k))
rslopeb(i,k) = exp(log(rslope(i,k))*(bvtr))
rslope2(i,k) = rslope(i,k)*rslope(i,k)
rslope3(i,k) = rslope2(i,k)*rslope(i,k)
endif
else
supcol = t0c-t(i,k)
n0sfac(i,k) = max(min(exp(alpha*supcol),n0smax/n0s),1.)
pvt = pvts
if(qrs(i,k).le.qcrmin)then
rslope(i,k) = rslopesmax
rslopeb(i,k) = rslopesbmax
rslope2(i,k) = rslopes2max
rslope3(i,k) = rslopes3max
else
rslope(i,k) = 1./lamdas(qrs(i,k),den(i,k),n0sfac(i,k))
rslopeb(i,k) = exp(log(rslope(i,k))*(bvts))
rslope2(i,k) = rslope(i,k)*rslope(i,k)
rslope3(i,k) = rslope2(i,k)*rslope(i,k)
endif
endif
vt(i,k) = pvt*rslopeb(i,k)*denfac(i,k)
if(qrs(i,k).le.0.0) vt(i,k) = 0.0
enddo
enddo
END subroutine slope_wsm3
``````

with these compilation options

``````-Minline=levels:10,reshape,name:nisflv_rain_plm,slope_wsm3 -Mipa=fast,inline
``````

but the compiler says

``````slope_wsm3:
699, subprogram not inlineable -- contains data, save, or equivalence
``````

How should I understand this diagnostic message and how should I change this function to get it be inlined?

Thanks.

Hi Minh,

It might be the statement functions which can inhibit inlining. I’d try removing them.

If that’s it, can you send a reproducing example to PGI Customer Service (trs@pgroup.com) and ask them to forward it to me?

Thanks,
Mat

Hi Mihn,

In looking at the full file you’ll see that several of the variables used in this routine are module data having the SAVE attribute. However, this limit may be too restrictive so I’ve put in a feature request (TPR#19402) to see if we can improve this.

Until then, you can remove the SAVE attribute at line 24. However, I’m not sure how this will effect the overall correctness of the code.

• Mat

Mihn,

The TPR 19402 associated with this Forum entry has been fixed in the current 13.7 release.

thanks,
dave