[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference nicctr::kap-users

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

377.0. "Kap generating incorrect code" by NNTPD::"[email protected]" (Donna McLaughlin) Tue Apr 15 1997 08:11

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.RTitleUserPersonal
Name
DateLines
377.1Please try this ...HPCGRP::MANLEYTue Apr 15 1997 12:0440
      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