|
| View previous topic :: View next topic |
| Author |
Message |
Minh Duc Nguyen
Joined: 15 Apr 2010 Posts: 6
|
Posted: Thu Jun 06, 2013 12:33 pm Post subject: function inlining |
|
|
Hello,
I'm trying to inline the following function
| Code: | 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
| Code: | -Minline=levels:10,reshape,name:nisflv_rain_plm,slope_wsm3 -Mipa=fast,inline
|
but the compiler says
| Code: | 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. |
|
| Back to top |
|
 |
mkcolg
Joined: 30 Jun 2004 Posts: 5001 Location: The Portland Group Inc.
|
Posted: Thu Jun 06, 2013 2:27 pm Post subject: |
|
|
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 |
|
| Back to top |
|
 |
mkcolg
Joined: 30 Jun 2004 Posts: 5001 Location: The Portland Group Inc.
|
Posted: Fri Jun 07, 2013 1:21 pm Post subject: |
|
|
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 |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2002 phpBB Group
|