[Search for users]
[Overall Top Noters]
[List of all Conferences]
[Download this site]
Title: | Kuck Associates Preprocessor Users |
Notice: | KAP V2.1 (f90,f77,C) SSB-kits - see note 2 |
Moderator: | HPCGRP::DEGREGORY |
|
Created: | Fri Nov 22 1991 |
Last Modified: | Fri Jun 06 1997 |
Last Successful Update: | Fri Jun 06 1997 |
Number of topics: | 390 |
Total number of notes: | 1440 |
Hi,
I have an astrophysics code that I am trying to optimise and it appears
that KAP is generating incorrect code. I have found the problem but don't
know how to force KAP to generate correct code. The code calculates the inner
points of an array and then boundry points in row 1 followed by the boundry
points in row NJ. The inner points and row 1 calculates are correct but for
the final row calculation it appears that KAP does not compute the values.
I've tried KF77 and KF90. The FORTRAN source code is
DO 75 I=2,NI-1
DO 85 J=2,NJ-1
PPLUS(J,I) = PCOEF1(J,I)*PZERO(J,I-1)
$ + PCOEF2(J,I)*PZERO(J-1,I)
$ + PCOEF3(J,I)*PZERO(J+1,I)
$ + PCOEF4(J,I)*PZERO(J,I+1)
$ + PCOEF5(J,I)*PMINUS(J,I)
$ + PTCOF5(J,I)*TZERO(J,I)*ALPHA(J,I)
c***** to calculate the diffusion operator on a *****
DIFFA(J,I) = (PPLUS(J,I) - PMINUS(J,I) -
$ ALPHA(J,I)*TZERO(J,I)*2.0D0*DTIME)
$ *UNDER(J,I)
c***** end of j-loop **********
85 CONTINUE
J=1
PPLUS(J,I) = PCOEF1(J,I)*PZERO(J,I-1)
$ + PCOEF2(J,I)*PZERO(NJ,I)
$ + PCOEF3(J,I)*PZERO(J+1,I)
$ + PCOEF4(J,I)*PZERO(J,I+1)
$ + PCOEF5(J,I)*PMINUS(J,I)
$ + PTCOF5(J,I)*TZERO(J,I)*ALPHA(J,I)
c***** to calculate the diffusion operator on a *****
DIFFA(J,I) = (PPLUS(J,I) - PMINUS(J,I) -
$ ALPHA(J,I)*TZERO(J,I)*2.0D0*DTIME)
$ *UNDER(J,I)
J=NJ
PPLUS(J,I) = PCOEF1(J,I)*PZERO(J,I-1)
$ + PCOEF2(J,I)*PZERO(J-1,I)
$ + PCOEF3(J,I)*PZERO(1,I)
$ + PCOEF4(J,I)*PZERO(J,I+1)
$ + PCOEF5(J,I)*PMINUS(J,I)
$ + PTCOF5(J,I)*TZERO(J,I)*ALPHA(J,I)
c***** to calculate the diffusion operator on a *****
DIFFA(J,I) = (PPLUS(J,I) - PMINUS(J,I) -
$ ALPHA(J,I)*TZERO(J,I)*2.0D0*DTIME)
$ *UNDER(J,I)
c***** end of i loop ******
75 CONTINUE
The produced KAP code is
DO I=2,NI-1
DO J=2,NJ-1
DD21 = PCOEF1(J,I) * PZERO(J,I-1) + PCOEF2(J,I) * PZERO(J-1,I)
X + PCOEF3(J,I) * PZERO(J+1,I) + PCOEF4(J,I) * PZERO(J,I+1) +
X PCOEF5(J,I) * PMINUS(J,I) + PTCOF5(J,I) * TZERO(J,I) * ALPHA(
X J,I)
c***** to calculate the diffusion operator on a *****
DIFFA(J,I) = (DD21 - PMINUS(J,I) - ALPHA(J,I) * TZERO(J,I) *
X 2.D0 * DTIME) * UNDER(J,I)
PPLUS(J,I) = DD21
END DO
END DO
DO I=2,NI-1
DD22 = PCOEF1(1,I) * PZERO(1,I-1) + PCOEF2(1,I) * PZERO(NJ,I) +
X PCOEF3(1,I) * PZERO(2,I) + PCOEF4(1,I) * PZERO(1,I+1) + PCOEF5
X (1,I) * PMINUS(1,I) + PTCOF5(1,I) * TZERO(1,I) * ALPHA(1,I)
c***** to calculate the diffusion operator on a *****
DIFFA(1,I) = (DD22 - PMINUS(1,I) - ALPHA(1,I) * TZERO(1,I) *
X 2.D0 * DTIME) * UNDER(1,I)
PPLUS(1,I) = DD22
c***** to calculate the diffusion operator on a *****
DD23 = PPLUS(NJ,I)
DIFFA(NJ,I) = (DD23 - PMINUS(NJ,I) - ALPHA(NJ,I) * TZERO(NJ,I) *
X 2.D0 * DTIME) * UNDER(NJ,I)
PPLUS(NJ,I) = DD23
END DO
DD23 is not calculated as it should be. Anyone any ideas??
Thanks
Donna
[Posted by WWW Notes gateway]
T.R | Title | User | Personal Name | Date | Lines |
---|
377.1 | Please try this ... | HPCGRP::MANLEY | | Tue Apr 15 1997 12:04 | 40 |
|
DO 75 I=2,NI-1
PPLUS(1,I) = PCOEF1(1,I)*PZERO(1,I-1)
$ + PCOEF2(1,I)*PZERO(NJ,I)
$ + PCOEF3(1,I)*PZERO(2,I)
$ + PCOEF4(1,I)*PZERO(1,I+1)
$ + PCOEF5(1,I)*PMINUS(1,I)
$ + PTCOF5(1,I)*TZERO(1,I)*ALPHA(1,I)
c***** to calculate the diffusion operator on a *****
DIFFA(1,I) = (PPLUS(1,I) - PMINUS(1,I) -
$ ALPHA(1,I)*TZERO(1,I)*2.0D0*DTIME)
$ *UNDER(1,I)
DO 85 J=2,NJ-1
PPLUS(J,I) = PCOEF1(J,I)*PZERO(J,I-1)
$ + PCOEF2(J,I)*PZERO(J-1,I)
$ + PCOEF3(J,I)*PZERO(J+1,I)
$ + PCOEF4(J,I)*PZERO(J,I+1)
$ + PCOEF5(J,I)*PMINUS(J,I)
$ + PTCOF5(J,I)*TZERO(J,I)*ALPHA(J,I)
c***** to calculate the diffusion operator on a *****
DIFFA(J,I) = (PPLUS(J,I) - PMINUS(J,I) -
$ ALPHA(J,I)*TZERO(J,I)*2.0D0*DTIME)
$ *UNDER(J,I)
c***** end of j-loop **********
85 CONTINUE
PPLUS(NJ,I) = PCOEF1(NJ,I)*PZERO(NJ,I-1)
$ + PCOEF2(NJ,I)*PZERO(NJ-1,I)
$ + PCOEF3(NJ,I)*PZERO(1,I)
$ + PCOEF4(NJ,I)*PZERO(NJ,I+1)
$ + PCOEF5(NJ,I)*PMINUS(NJ,I)
$ + PTCOF5(NJ,I)*TZERO(NJ,I)*ALPHA(NJ,I)
c***** to calculate the diffusion operator on a *****
DIFFA(NJ,I) = (PPLUS(NJ,I) - PMINUS(NJ,I) -
$ ALPHA(NJ,I)*TZERO(NJ,I)*2.0D0*DTIME)
$ *UNDER(NJ,I)
c***** end of i loop ******
75 CONTINUE
|