Ignore:
Timestamp:
Jul 8, 2015, 3:57:15 PM (9 years ago)
Author:
alain
Message:

Modify all applications to support two new rules:
1) introduce a local Makefile for each application.
2) change "application.elf" name to "application/appli.elf" name in the application.py" file.
Introduce the shell application.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • soft/giet_vm/applications/ocean/jacobcalc2.C

    r581 r589  
    1 /*************************************************************************/
    2 /*                                                                       */
    3 /*  Copyright (c) 1994 Stanford University                               */
    4 /*                                                                       */
    5 /*  All rights reserved.                                                 */
    6 /*                                                                       */
    7 /*  Permission is given to use, copy, and modify this software for any   */
    8 /*  non-commercial purpose as long as this copyright notice is not       */
    9 /*  removed.  All other uses, including redistribution in whole or in    */
    10 /*  part, are forbidden without prior written permission.                */
    11 /*                                                                       */
    12 /*  This software is provided with absolutely no warranty and no         */
    13 /*  support.                                                             */
    14 /*                                                                       */
    15 /*************************************************************************/
     1#line 115 "/Users/alain/soc/giet_vm/applications/ocean/null_macros/c.m4.null.GIET"
    162
    17 /* Does the arakawa jacobian calculation (of the x and y matrices,
    18    putting the results in the z matrix) for a subblock. */
    19 
    20 EXTERN_ENV
    21 
    22 #include <stdio.h>
    23 #include <math.h>
    24 
    25 #include "decs.h"
    26 
    27 void jacobcalc2(double ****x, double ****y, double ****z, long psiindex, long pid, long firstrow, long lastrow, long firstcol, long lastcol)
    28 {
    29     double f1;
    30     double f2;
    31     double f3;
    32     double f4;
    33     double f5;
    34     double f6;
    35     double f7;
    36     double f8;
    37     long iindex;
    38     long indexp1;
    39     long indexm1;
    40     long im1;
    41     long ip1;
    42     long i;
    43     long j;
    44     long jj;
    45     double **t2a;
    46     double **t2b;
    47     double **t2c;
    48     double *t1a;
    49     double *t1b;
    50     double *t1c;
    51     double *t1d;
    52     double *t1e;
    53     double *t1f;
    54     double *t1g;
    55 
    56     t2a = z[pid][psiindex];
    57     if ((gp[pid].neighbors[UP] == -1) && (gp[pid].neighbors[LEFT] == -1)) {
    58         t2a[0][0] = 0.0;
    59     }
    60     if ((gp[pid].neighbors[DOWN] == -1) && (gp[pid].neighbors[LEFT] == -1)) {
    61         t2a[im - 1][0] = 0.0;
    62     }
    63     if ((gp[pid].neighbors[UP] == -1) && (gp[pid].neighbors[RIGHT] == -1)) {
    64         t2a[0][jm - 1] = 0.0;
    65     }
    66     if ((gp[pid].neighbors[DOWN] == -1) && (gp[pid].neighbors[RIGHT] == -1)) {
    67         t2a[im - 1][jm - 1] = 0.0;
    68     }
    69 
    70     t2a = x[pid][psiindex];
    71     jj = gp[pid].neighbors[UPLEFT];
    72     if (jj != -1) {
    73         t2a[0][0] = x[jj][psiindex][im - 2][jm - 2];
    74     }
    75     jj = gp[pid].neighbors[UPRIGHT];
    76     if (jj != -1) {
    77         t2a[0][jm - 1] = x[jj][psiindex][im - 2][1];
    78     }
    79     jj = gp[pid].neighbors[DOWNLEFT];
    80     if (jj != -1) {
    81         t2a[im - 1][0] = x[jj][psiindex][1][jm - 2];
    82     }
    83     jj = gp[pid].neighbors[DOWNRIGHT];
    84     if (jj != -1) {
    85         t2a[im - 1][jm - 1] = x[jj][psiindex][1][1];
    86     }
    87 
    88     t2a = y[pid][psiindex];
    89     jj = gp[pid].neighbors[UPLEFT];
    90     if (jj != -1) {
    91         t2a[0][0] = y[jj][psiindex][im - 2][jm - 2];
    92     }
    93     jj = gp[pid].neighbors[UPRIGHT];
    94     if (jj != -1) {
    95         t2a[0][jm - 1] = y[jj][psiindex][im - 2][1];
    96     }
    97     jj = gp[pid].neighbors[DOWNLEFT];
    98     if (jj != -1) {
    99         t2a[im - 1][0] = y[jj][psiindex][1][jm - 2];
    100     }
    101     jj = gp[pid].neighbors[DOWNRIGHT];
    102     if (jj != -1) {
    103         t2a[im - 1][jm - 1] = y[jj][psiindex][1][1];
    104     }
    105 
    106     t2a = x[pid][psiindex];
    107     if (gp[pid].neighbors[UP] == -1) {
    108         jj = gp[pid].neighbors[LEFT];
    109         if (jj != -1) {
    110             t2a[0][0] = x[jj][psiindex][0][jm - 2];
    111         } else {
    112             jj = gp[pid].neighbors[DOWN];
    113             if (jj != -1) {
    114                 t2a[im - 1][0] = x[jj][psiindex][1][0];
    115             }
    116         }
    117         jj = gp[pid].neighbors[RIGHT];
    118         if (jj != -1) {
    119             t2a[0][jm - 1] = x[jj][psiindex][0][1];
    120         } else {
    121             jj = gp[pid].neighbors[DOWN];
    122             if (jj != -1) {
    123                 t2a[im - 1][jm - 1] = x[jj][psiindex][1][jm - 1];
    124             }
    125         }
    126     } else if (gp[pid].neighbors[DOWN] == -1) {
    127         jj = gp[pid].neighbors[LEFT];
    128         if (jj != -1) {
    129             t2a[im - 1][0] = x[jj][psiindex][im - 1][jm - 2];
    130         } else {
    131             jj = gp[pid].neighbors[UP];
    132             if (jj != -1) {
    133                 t2a[0][0] = x[jj][psiindex][im - 2][0];
    134             }
    135         }
    136         jj = gp[pid].neighbors[RIGHT];
    137         if (jj != -1) {
    138             t2a[im - 1][jm - 1] = x[jj][psiindex][im - 1][1];
    139         } else {
    140             jj = gp[pid].neighbors[UP];
    141             if (jj != -1) {
    142                 t2a[0][jm - 1] = x[jj][psiindex][im - 2][jm - 1];
    143             }
    144         }
    145     } else if (gp[pid].neighbors[LEFT] == -1) {
    146         jj = gp[pid].neighbors[UP];
    147         if (jj != -1) {
    148             t2a[0][0] = x[jj][psiindex][im - 2][0];
    149         }
    150         jj = gp[pid].neighbors[DOWN];
    151         if (jj != -1) {
    152             t2a[im - 1][0] = x[jj][psiindex][1][0];
    153         }
    154     } else if (gp[pid].neighbors[RIGHT] == -1) {
    155         jj = gp[pid].neighbors[UP];
    156         if (jj != -1) {
    157             t2a[0][jm - 1] = x[jj][psiindex][im - 2][jm - 1];
    158         }
    159         jj = gp[pid].neighbors[DOWN];
    160         if (jj != -1) {
    161             t2a[im - 1][jm - 1] = x[jj][psiindex][1][jm - 1];
    162         }
    163     }
    164 
    165     t2a = y[pid][psiindex];
    166     if (gp[pid].neighbors[UP] == -1) {
    167         jj = gp[pid].neighbors[LEFT];
    168         if (jj != -1) {
    169             t2a[0][0] = y[jj][psiindex][0][jm - 2];
    170         } else {
    171             jj = gp[pid].neighbors[DOWN];
    172             if (jj != -1) {
    173                 t2a[im - 1][0] = y[jj][psiindex][1][0];
    174             }
    175         }
    176         jj = gp[pid].neighbors[RIGHT];
    177         if (jj != -1) {
    178             t2a[0][jm - 1] = y[jj][psiindex][0][1];
    179         } else {
    180             jj = gp[pid].neighbors[DOWN];
    181             if (jj != -1) {
    182                 t2a[im - 1][jm - 1] = y[jj][psiindex][1][jm - 1];
    183             }
    184         }
    185     } else if (gp[pid].neighbors[DOWN] == -1) {
    186         jj = gp[pid].neighbors[LEFT];
    187         if (jj != -1) {
    188             t2a[im - 1][0] = y[jj][psiindex][im - 1][jm - 2];
    189         } else {
    190             jj = gp[pid].neighbors[UP];
    191             if (jj != -1) {
    192                 t2a[0][0] = y[jj][psiindex][im - 2][0];
    193             }
    194         }
    195         jj = gp[pid].neighbors[RIGHT];
    196         if (jj != -1) {
    197             t2a[im - 1][jm - 1] = y[jj][psiindex][im - 1][1];
    198         } else {
    199             jj = gp[pid].neighbors[UP];
    200             if (jj != -1) {
    201                 t2a[0][jm - 1] = y[jj][psiindex][im - 2][jm - 1];
    202             }
    203         }
    204     } else if (gp[pid].neighbors[LEFT] == -1) {
    205         jj = gp[pid].neighbors[UP];
    206         if (jj != -1) {
    207             t2a[0][0] = y[jj][psiindex][im - 2][0];
    208         }
    209         jj = gp[pid].neighbors[DOWN];
    210         if (jj != -1) {
    211             t2a[im - 1][0] = y[jj][psiindex][1][0];
    212         }
    213     } else if (gp[pid].neighbors[RIGHT] == -1) {
    214         jj = gp[pid].neighbors[UP];
    215         if (jj != -1) {
    216             t2a[0][jm - 1] = y[jj][psiindex][im - 2][jm - 1];
    217         }
    218         jj = gp[pid].neighbors[DOWN];
    219         if (jj != -1) {
    220             t2a[im - 1][jm - 1] = y[jj][psiindex][1][jm - 1];
    221         }
    222     }
    223 
    224     t2a = y[pid][psiindex];
    225     j = gp[pid].neighbors[UP];
    226     if (j != -1) {
    227         t1a = (double *) t2a[0];
    228         t1b = (double *) y[j][psiindex][im - 2];
    229         for (i = 1; i <= lastcol; i++) {
    230             t1a[i] = t1b[i];
    231         }
    232     }
    233     j = gp[pid].neighbors[DOWN];
    234     if (j != -1) {
    235         t1a = (double *) t2a[im - 1];
    236         t1b = (double *) y[j][psiindex][1];
    237         for (i = 1; i <= lastcol; i++) {
    238             t1a[i] = t1b[i];
    239         }
    240     }
    241     j = gp[pid].neighbors[LEFT];
    242     if (j != -1) {
    243         t2b = y[j][psiindex];
    244         for (i = 1; i <= lastrow; i++) {
    245             t2a[i][0] = t2b[i][jm - 2];
    246         }
    247     }
    248     j = gp[pid].neighbors[RIGHT];
    249     if (j != -1) {
    250         t2b = y[j][psiindex];
    251         for (i = 1; i <= lastrow; i++) {
    252             t2a[i][jm - 1] = t2b[i][1];
    253         }
    254     }
    255 
    256     t2a = x[pid][psiindex];
    257     j = gp[pid].neighbors[UP];
    258     if (j != -1) {
    259         t1a = (double *) t2a[0];
    260         t1b = (double *) x[j][psiindex][im - 2];
    261         for (i = 1; i <= lastcol; i++) {
    262             t1a[i] = t1b[i];
    263         }
    264     }
    265     j = gp[pid].neighbors[DOWN];
    266     if (j != -1) {
    267         t1a = (double *) t2a[im - 1];
    268         t1b = (double *) x[j][psiindex][1];
    269         for (i = 1; i <= lastcol; i++) {
    270             t1a[i] = t1b[i];
    271         }
    272     }
    273     j = gp[pid].neighbors[LEFT];
    274     if (j != -1) {
    275         t2b = x[j][psiindex];
    276         for (i = 1; i <= lastrow; i++) {
    277             t2a[i][0] = t2b[i][jm - 2];
    278         }
    279     }
    280     j = gp[pid].neighbors[RIGHT];
    281     if (j != -1) {
    282         t2b = x[j][psiindex];
    283         for (i = 1; i <= lastrow; i++) {
    284             t2a[i][jm - 1] = t2b[i][1];
    285         }
    286     }
    287 
    288     t2a = x[pid][psiindex];
    289     t2b = y[pid][psiindex];
    290     t2c = z[pid][psiindex];
    291     for (i = firstrow; i <= lastrow; i++) {
    292         ip1 = i + 1;
    293         im1 = i - 1;
    294         t1a = (double *) t2a[i];
    295         t1b = (double *) t2b[i];
    296         t1c = (double *) t2c[i];
    297         t1d = (double *) t2b[ip1];
    298         t1e = (double *) t2b[im1];
    299         t1f = (double *) t2a[ip1];
    300         t1g = (double *) t2a[im1];
    301         for (iindex = firstcol; iindex <= lastcol; iindex++) {
    302             indexp1 = iindex + 1;
    303             indexm1 = iindex - 1;
    304             f1 = (t1b[indexm1] + t1d[indexm1] - t1b[indexp1] - t1d[indexp1]) * (t1f[iindex] - t1a[iindex]);
    305             f2 = (t1e[indexm1] + t1b[indexm1] - t1e[indexp1] - t1b[indexp1]) * (t1a[iindex] - t1g[iindex]);
    306             f3 = (t1d[iindex] + t1d[indexp1] - t1e[iindex] - t1e[indexp1]) * (t1a[indexp1] - t1a[iindex]);
    307             f4 = (t1d[indexm1] + t1d[iindex] - t1e[indexm1] - t1e[iindex]) * (t1a[iindex] - t1a[indexm1]);
    308             f5 = (t1d[iindex] - t1b[indexp1]) * (t1f[indexp1] - t1a[iindex]);
    309             f6 = (t1b[indexm1] - t1e[iindex]) * (t1a[iindex] - t1g[indexm1]);
    310             f7 = (t1b[indexp1] - t1e[iindex]) * (t1g[indexp1] - t1a[iindex]);
    311             f8 = (t1d[iindex] - t1b[indexm1]) * (t1a[iindex] - t1f[indexm1]);
    312 
    313             t1c[iindex] = factjacob * (f1 + f2 + f3 + f4 + f5 + f6 + f7 + f8);
    314 
    315         }
    316     }
    317 
    318     if (gp[pid].neighbors[UP] == -1) {
    319         t1c = (double *) t2c[0];
    320         for (j = firstcol; j <= lastcol; j++) {
    321             t1c[j] = 0.0;
    322         }
    323     }
    324     if (gp[pid].neighbors[DOWN] == -1) {
    325         t1c = (double *) t2c[im - 1];
    326         for (j = firstcol; j <= lastcol; j++) {
    327             t1c[j] = 0.0;
    328         }
    329     }
    330     if (gp[pid].neighbors[LEFT] == -1) {
    331         for (j = firstrow; j <= lastrow; j++) {
    332             t2c[j][0] = 0.0;
    333         }
    334     }
    335     if (gp[pid].neighbors[RIGHT] == -1) {
    336         for (j = firstrow; j <= lastrow; j++) {
    337             t2c[j][jm - 1] = 0.0;
    338         }
    339     }
    340 
    341 }
Note: See TracChangeset for help on using the changeset viewer.