[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 11: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
 |