#include "petscvec.h"
#include "petscda.h"
/************************** DISCLAIMER ********************************/
/*                                                                    */
/*   This file was generated on 03/27/01 09:29:12 by the version of   */
/*   ADIC compiled on  08/07/00 18:06:31                              */
/*                                                                    */
/*   ADIC was prepared as an account of work sponsored by an          */
/*   agency of the United States Government and the University of     */
/*   Chicago.  NEITHER THE AUTHOR(S), THE UNITED STATES GOVERNMENT    */
/*   NOR ANY AGENCY THEREOF, NOR THE UNIVERSITY OF CHICAGO, INCLUDING */
/*   ANY OF THEIR EMPLOYEES OR OFFICERS, MAKES ANY WARRANTY, EXPRESS  */
/*   OR IMPLIED, OR ASSUMES ANY LEGAL LIABILITY OR RESPONSIBILITY FOR */
/*   THE ACCURACY, COMPLETENESS, OR USEFULNESS OF ANY INFORMATION OR  */
/*   PROCESS DISCLOSED, OR REPRESENTS THAT ITS USE WOULD NOT INFRINGE */
/*   PRIVATELY OWNED RIGHTS.                                          */
/*                                                                    */
/**********************************************************************/
#include "ad_deriv.h"
#include <math.h>
#include "adintrinsics.h"
typedef struct  {
InactiveDouble  lidvelocity, prandtl, grashof;
PetscTruth  draw_contours;
}
AppCtx;
typedef struct  {
DERIV_TYPE  u, v, omega, temp;
}
Field;
int  ad_localfunction2d(Field  **x,Field  **f,int  xs,int  xm,int  ys,int  ym,int  mx,int  my,void   *ptr) {
AppCtx  *user = (AppCtx * )ptr;
int  ierr, i, j;
int  xints, xinte, yints, yinte;
DERIV_TYPE  two, one, p5, hx, hy, dhx, dhy, hxdhy, hydhx;
DERIV_TYPE  grashof, prandtl, lid;
DERIV_TYPE  u, uxx, uyy, vx, vy, avx, avy, vxp, vxm, vyp, vym;
DERIV_TYPE  ad_var_0, ad_var_1, ad_var_6;
int  ad_var_2, ad_var_3, ad_var_4, ad_var_5, ad_var_7, ad_var_8, ad_var_9;
double  ad_adji_0;
    double  ad_loc_0;
    double  ad_adj_0;
    double  ad_adj_1;
    double  ad_loc_1;
    double  ad_loc_2;
    double  ad_adj_2;
    double  ad_loc_3;
    double  ad_adj_3;
    double  ad_loc_4;
    double  ad_adj_4;
    double  ad_loc_5;
    double  ad_loc_6;
    double  ad_loc_7;
    double  ad_loc_8;
    double  ad_loc_9;
    double  ad_loc_10;
    double  ad_loc_11;
    double  ad_loc_12;
    double  ad_loc_13;
    double  ad_loc_14;
    double  ad_loc_15;
    double  ad_loc_16;
    double  ad_loc_17;
    double  ad_loc_18;
    double  ad_loc_19;
    double  ad_adj_5;
    double  ad_adj_6;
    double  ad_adj_7;
    double  ad_adj_8;
    double  ad_adj_9;
    double  ad_adj_10;
    double  ad_adj_11;
    double  ad_adj_12;
    double  ad_adj_13;
    double  ad_adj_14;
    double  ad_adj_15;
    double  ad_adj_16;
    double  ad_adj_17;
    double  ad_adj_18;

        static int g_filenum = 0;
        if (g_filenum == 0) {
            adintr_ehsfid(&g_filenum, __FILE__, "ad_localfunction2d");
        }
            {
        ad_grad_axpy_0(&(two));
        DERIV_val(two) = 2.0;
    }
    {
        ad_grad_axpy_0(&(one));
        DERIV_val(one) = 1.0;
    }
    {
        ad_grad_axpy_0(&(p5));
        DERIV_val(p5) = 0.5;
    }
    {
        ad_grad_axpy_0(&(grashof));
        DERIV_val(grashof) = user->grashof;
    }
    {
        ad_grad_axpy_0(&(prandtl));
        DERIV_val(prandtl) = user->prandtl;
    }
    {
        ad_grad_axpy_0(&(lid));
        DERIV_val(lid) = user->lidvelocity;
    }
    {
        ad_grad_axpy_0(&(ad_var_0));
        DERIV_val(ad_var_0) = (double )(mx - 1);
    }
    {
        ad_grad_axpy_copy(&(dhx), &(ad_var_0));
        DERIV_val(dhx) = DERIV_val(ad_var_0);
    }
    {
        ad_grad_axpy_0(&(ad_var_1));
        DERIV_val(ad_var_1) = (double )(my - 1);
    }
    {
        ad_grad_axpy_copy(&(dhy), &(ad_var_1));
        DERIV_val(dhy) = DERIV_val(ad_var_1);
    }
    {
        ad_loc_0 = DERIV_val(one) / DERIV_val(dhx);
        ad_adj_0 =  -ad_loc_0 / DERIV_val(dhx);
        ad_adj_1 = 1.000000000000000e+00 / DERIV_val(dhx);
        ad_grad_axpy_2(&(hx), ad_adj_1, &(one), ad_adj_0, &(dhx));
        DERIV_val(hx) = ad_loc_0;
    }
    {
        ad_loc_0 = DERIV_val(one) / DERIV_val(dhy);
        ad_adj_0 =  -ad_loc_0 / DERIV_val(dhy);
        ad_adj_1 = 1.000000000000000e+00 / DERIV_val(dhy);
        ad_grad_axpy_2(&(hy), ad_adj_1, &(one), ad_adj_0, &(dhy));
        DERIV_val(hy) = ad_loc_0;
    }
    {
        ad_loc_0 = DERIV_val(hx) * DERIV_val(dhy);
        ad_grad_axpy_2(&(hxdhy), DERIV_val(dhy), &(hx), DERIV_val(hx), &(dhy));
        DERIV_val(hxdhy) = ad_loc_0;
    }
    {
        ad_loc_0 = DERIV_val(hy) * DERIV_val(dhx);
        ad_grad_axpy_2(&(hydhx), DERIV_val(dhx), &(hy), DERIV_val(hy), &(dhx));
        DERIV_val(hydhx) = ad_loc_0;
    }
    xints = xs;
    xinte = xs + xm;
    yints = ys;
    yinte = ys + ym;
    if (yints == 0)     {
        j = 0;
        yints = yints + 1;
        for (i = xs;         i < xs + xm;         )        {
            {
                ad_grad_axpy_copy(&((f[j][i]).u), &((x[j][i]).u));
                DERIV_val((f[j][i]).u) = DERIV_val((x[j][i]).u);
            }
            {
                ad_grad_axpy_copy(&((f[j][i]).v), &((x[j][i]).v));
                DERIV_val((f[j][i]).v) = DERIV_val((x[j][i]).v);
            }
            {
                ad_loc_0 = DERIV_val((x[j + 1][i]).u) - DERIV_val((x[j][i]).u);
                ad_loc_1 = ad_loc_0 * DERIV_val(dhy);
                ad_loc_2 = DERIV_val((x[j][i]).omega) + ad_loc_1;
                ad_adj_0 =  -DERIV_val(dhy);
                ad_grad_axpy_4(&((f[j][i]).omega), 1.000000000000000e+00, &((x[j][i]).omega), DERIV_val(dhy), &((x[j + 1][i]).u), ad_adj_0, &((x[j][i]).u), ad_loc_0, &(dhy));
                DERIV_val((f[j][i]).omega) = ad_loc_2;
            }
            {
                ad_loc_0 = DERIV_val((x[j][i]).temp) - DERIV_val((x[j + 1][i]).temp);
                ad_grad_axpy_2(&((f[j][i]).temp), 1.000000000000000e+00, &((x[j][i]).temp), -1.000000000000000e+00, &((x[j + 1][i]).temp));
                DERIV_val((f[j][i]).temp) = ad_loc_0;
            }
            ad_var_2 = i++;
        }
    }
    if (yinte == my)     {
        j = my - 1;
        yinte = yinte - 1;
        for (i = xs;         i < xs + xm;         )        {
            {
                ad_loc_0 = DERIV_val((x[j][i]).u) - DERIV_val(lid);
                ad_grad_axpy_2(&((f[j][i]).u), 1.000000000000000e+00, &((x[j][i]).u), -1.000000000000000e+00, &(lid));
                DERIV_val((f[j][i]).u) = ad_loc_0;
            }
            {
                ad_grad_axpy_copy(&((f[j][i]).v), &((x[j][i]).v));
                DERIV_val((f[j][i]).v) = DERIV_val((x[j][i]).v);
            }
            {
                ad_loc_0 = DERIV_val((x[j][i]).u) - DERIV_val((x[j - 1][i]).u);
                ad_loc_1 = ad_loc_0 * DERIV_val(dhy);
                ad_loc_2 = DERIV_val((x[j][i]).omega) + ad_loc_1;
                ad_adj_0 =  -DERIV_val(dhy);
                ad_grad_axpy_4(&((f[j][i]).omega), 1.000000000000000e+00, &((x[j][i]).omega), DERIV_val(dhy), &((x[j][i]).u), ad_adj_0, &((x[j - 1][i]).u), ad_loc_0, &(dhy));
                DERIV_val((f[j][i]).omega) = ad_loc_2;
            }
            {
                ad_loc_0 = DERIV_val((x[j][i]).temp) - DERIV_val((x[j - 1][i]).temp);
                ad_grad_axpy_2(&((f[j][i]).temp), 1.000000000000000e+00, &((x[j][i]).temp), -1.000000000000000e+00, &((x[j - 1][i]).temp));
                DERIV_val((f[j][i]).temp) = ad_loc_0;
            }
            ad_var_3 = i++;
        }
    }
    if (xints == 0)     {
        i = 0;
        xints = xints + 1;
        for (j = ys;         j < ys + ym;         )        {
            {
                ad_grad_axpy_copy(&((f[j][i]).u), &((x[j][i]).u));
                DERIV_val((f[j][i]).u) = DERIV_val((x[j][i]).u);
            }
            {
                ad_grad_axpy_copy(&((f[j][i]).v), &((x[j][i]).v));
                DERIV_val((f[j][i]).v) = DERIV_val((x[j][i]).v);
            }
            {
                ad_loc_0 = DERIV_val((x[j][i + 1]).v) - DERIV_val((x[j][i]).v);
                ad_loc_1 = ad_loc_0 * DERIV_val(dhx);
                ad_loc_2 = DERIV_val((x[j][i]).omega) - ad_loc_1;
                ad_adj_0 =  -ad_loc_0;
                ad_adj_1 =  -DERIV_val(dhx);
                ad_adj_2 =  -ad_adj_1;
                ad_grad_axpy_4(&((f[j][i]).omega), 1.000000000000000e+00, &((x[j][i]).omega), ad_adj_1, &((x[j][i + 1]).v), ad_adj_2, &((x[j][i]).v), ad_adj_0, &(dhx));
                DERIV_val((f[j][i]).omega) = ad_loc_2;
            }
            {
                ad_grad_axpy_copy(&((f[j][i]).temp), &((x[j][i]).temp));
                DERIV_val((f[j][i]).temp) = DERIV_val((x[j][i]).temp);
            }
            ad_var_4 = j++;
        }
    }
    if (xinte == mx)     {
        i = mx - 1;
        xinte = xinte - 1;
        for (j = ys;         j < ys + ym;         )        {
            {
                ad_grad_axpy_copy(&((f[j][i]).u), &((x[j][i]).u));
                DERIV_val((f[j][i]).u) = DERIV_val((x[j][i]).u);
            }
            {
                ad_grad_axpy_copy(&((f[j][i]).v), &((x[j][i]).v));
                DERIV_val((f[j][i]).v) = DERIV_val((x[j][i]).v);
            }
            {
                ad_loc_0 = DERIV_val((x[j][i]).v) - DERIV_val((x[j][i - 1]).v);
                ad_loc_1 = ad_loc_0 * DERIV_val(dhx);
                ad_loc_2 = DERIV_val((x[j][i]).omega) - ad_loc_1;
                ad_adj_0 =  -ad_loc_0;
                ad_adj_1 =  -DERIV_val(dhx);
                ad_adj_2 =  -ad_adj_1;
                ad_grad_axpy_4(&((f[j][i]).omega), 1.000000000000000e+00, &((x[j][i]).omega), ad_adj_1, &((x[j][i]).v), ad_adj_2, &((x[j][i - 1]).v), ad_adj_0, &(dhx));
                DERIV_val((f[j][i]).omega) = ad_loc_2;
            }
            {
                ad_grad_axpy_0(&(ad_var_6));
                DERIV_val(ad_var_6) = (double )(DERIV_val(grashof) > 0);
            }
            {
                ad_loc_0 = DERIV_val((x[j][i]).temp) - DERIV_val(ad_var_6);
                ad_grad_axpy_2(&((f[j][i]).temp), 1.000000000000000e+00, &((x[j][i]).temp), -1.000000000000000e+00, &(ad_var_6));
                DERIV_val((f[j][i]).temp) = ad_loc_0;
            }
            ad_var_5 = j++;
        }
    }
    for (j = yints;     j < yinte;     )    {
        for (i = xints;         i < xinte;         )        {
            {
                ad_grad_axpy_copy(&(vx), &((x[j][i]).u));
                DERIV_val(vx) = DERIV_val((x[j][i]).u);
            }
     DERIV_val(avx) = fabs( DERIV_val(vx)); /*fabs*/
     if ( DERIV_val(vx) > 0.0) {
           ad_adji_0 =  1.0;
     }
     else if ( DERIV_val(vx) < 0.0) {
           ad_adji_0 = -1.0;
     }
     else {
adintr_fabs(1, g_filenum, __LINE__, & ad_adji_0);
     }
            {
                ad_grad_axpy_1(&(avx), ad_adji_0, &(vx));
            }
            {
                ad_loc_0 = DERIV_val(vx) + DERIV_val(avx);
                ad_loc_1 = DERIV_val(p5) * ad_loc_0;
                ad_grad_axpy_3(&(vxp), ad_loc_0, &(p5), DERIV_val(p5), &(vx), DERIV_val(p5), &(avx));
                DERIV_val(vxp) = ad_loc_1;
            }
            {
                ad_loc_0 = DERIV_val(vx) - DERIV_val(avx);
                ad_loc_1 = DERIV_val(p5) * ad_loc_0;
                ad_adj_0 =  -DERIV_val(p5);
                ad_grad_axpy_3(&(vxm), ad_loc_0, &(p5), DERIV_val(p5), &(vx), ad_adj_0, &(avx));
                DERIV_val(vxm) = ad_loc_1;
            }
            {
                ad_grad_axpy_copy(&(vy), &((x[j][i]).v));
                DERIV_val(vy) = DERIV_val((x[j][i]).v);
            }
     DERIV_val(avy) = fabs( DERIV_val(vy)); /*fabs*/
     if ( DERIV_val(vy) > 0.0) {
           ad_adji_0 =  1.0;
     }
     else if ( DERIV_val(vy) < 0.0) {
           ad_adji_0 = -1.0;
     }
     else {
adintr_fabs(1, g_filenum, __LINE__, & ad_adji_0);
     }
            {
                ad_grad_axpy_1(&(avy), ad_adji_0, &(vy));
            }
            {
                ad_loc_0 = DERIV_val(vy) + DERIV_val(avy);
                ad_loc_1 = DERIV_val(p5) * ad_loc_0;
                ad_grad_axpy_3(&(vyp), ad_loc_0, &(p5), DERIV_val(p5), &(vy), DERIV_val(p5), &(avy));
                DERIV_val(vyp) = ad_loc_1;
            }
            {
                ad_loc_0 = DERIV_val(vy) - DERIV_val(avy);
                ad_loc_1 = DERIV_val(p5) * ad_loc_0;
                ad_adj_0 =  -DERIV_val(p5);
                ad_grad_axpy_3(&(vym), ad_loc_0, &(p5), DERIV_val(p5), &(vy), ad_adj_0, &(avy));
                DERIV_val(vym) = ad_loc_1;
            }
            {
                ad_grad_axpy_copy(&(u), &((x[j][i]).u));
                DERIV_val(u) = DERIV_val((x[j][i]).u);
            }
            {
                ad_loc_0 = DERIV_val(two) * DERIV_val(u);
                ad_loc_1 = ad_loc_0 - DERIV_val((x[j][i - 1]).u);
                ad_loc_2 = ad_loc_1 - DERIV_val((x[j][i + 1]).u);
                ad_loc_3 = ad_loc_2 * DERIV_val(hydhx);
                ad_adj_0 =  -DERIV_val(hydhx);
                ad_adj_1 =  -DERIV_val(hydhx);
                ad_adj_2 = DERIV_val(two) * DERIV_val(hydhx);
                ad_adj_3 = DERIV_val(u) * DERIV_val(hydhx);
                ad_grad_axpy_5(&(uxx), ad_adj_3, &(two), ad_adj_2, &(u), ad_adj_1, &((x[j][i - 1]).u), ad_adj_0, &((x[j][i + 1]).u), ad_loc_2, &(hydhx));
                DERIV_val(uxx) = ad_loc_3;
            }
            {
                ad_loc_0 = DERIV_val(two) * DERIV_val(u);
                ad_loc_1 = ad_loc_0 - DERIV_val((x[j - 1][i]).u);
                ad_loc_2 = ad_loc_1 - DERIV_val((x[j + 1][i]).u);
                ad_loc_3 = ad_loc_2 * DERIV_val(hxdhy);
                ad_adj_0 =  -DERIV_val(hxdhy);
                ad_adj_1 =  -DERIV_val(hxdhy);
                ad_adj_2 = DERIV_val(two) * DERIV_val(hxdhy);
                ad_adj_3 = DERIV_val(u) * DERIV_val(hxdhy);
                ad_grad_axpy_5(&(uyy), ad_adj_3, &(two), ad_adj_2, &(u), ad_adj_1, &((x[j - 1][i]).u), ad_adj_0, &((x[j + 1][i]).u), ad_loc_2, &(hxdhy));
                DERIV_val(uyy) = ad_loc_3;
            }
            {
                ad_loc_0 = DERIV_val(uxx) + DERIV_val(uyy);
                ad_loc_1 = DERIV_val((x[j + 1][i]).omega) - DERIV_val((x[j - 1][i]).omega);
                ad_loc_2 = DERIV_val(p5) * ad_loc_1;
                ad_loc_3 = ad_loc_2 * DERIV_val(hx);
                ad_loc_4 = ad_loc_0 - ad_loc_3;
                ad_adj_0 =  -ad_loc_2;
                ad_adj_1 =  -DERIV_val(hx);
                ad_adj_2 = DERIV_val(p5) * ad_adj_1;
                ad_adj_3 = ad_loc_1 * ad_adj_1;
                ad_adj_4 =  -ad_adj_2;
                ad_grad_axpy_6(&((f[j][i]).u), 1.000000000000000e+00, &(uxx), 1.000000000000000e+00, &(uyy), ad_adj_3, &(p5), ad_adj_2, &((x[j + 1][i]).omega), ad_adj_4, &((x[j - 1][i]).omega), ad_adj_0, &(hx));
                DERIV_val((f[j][i]).u) = ad_loc_4;
            }
            {
                ad_grad_axpy_copy(&(u), &((x[j][i]).v));
                DERIV_val(u) = DERIV_val((x[j][i]).v);
            }
            {
                ad_loc_0 = DERIV_val(two) * DERIV_val(u);
                ad_loc_1 = ad_loc_0 - DERIV_val((x[j][i - 1]).v);
                ad_loc_2 = ad_loc_1 - DERIV_val((x[j][i + 1]).v);
                ad_loc_3 = ad_loc_2 * DERIV_val(hydhx);
                ad_adj_0 =  -DERIV_val(hydhx);
                ad_adj_1 =  -DERIV_val(hydhx);
                ad_adj_2 = DERIV_val(two) * DERIV_val(hydhx);
                ad_adj_3 = DERIV_val(u) * DERIV_val(hydhx);
                ad_grad_axpy_5(&(uxx), ad_adj_3, &(two), ad_adj_2, &(u), ad_adj_1, &((x[j][i - 1]).v), ad_adj_0, &((x[j][i + 1]).v), ad_loc_2, &(hydhx));
                DERIV_val(uxx) = ad_loc_3;
            }
            {
                ad_loc_0 = DERIV_val(two) * DERIV_val(u);
                ad_loc_1 = ad_loc_0 - DERIV_val((x[j - 1][i]).v);
                ad_loc_2 = ad_loc_1 - DERIV_val((x[j + 1][i]).v);
                ad_loc_3 = ad_loc_2 * DERIV_val(hxdhy);
                ad_adj_0 =  -DERIV_val(hxdhy);
                ad_adj_1 =  -DERIV_val(hxdhy);
                ad_adj_2 = DERIV_val(two) * DERIV_val(hxdhy);
                ad_adj_3 = DERIV_val(u) * DERIV_val(hxdhy);
                ad_grad_axpy_5(&(uyy), ad_adj_3, &(two), ad_adj_2, &(u), ad_adj_1, &((x[j - 1][i]).v), ad_adj_0, &((x[j + 1][i]).v), ad_loc_2, &(hxdhy));
                DERIV_val(uyy) = ad_loc_3;
            }
            {
                ad_loc_0 = DERIV_val(uxx) + DERIV_val(uyy);
                ad_loc_1 = DERIV_val((x[j][i + 1]).omega) - DERIV_val((x[j][i - 1]).omega);
                ad_loc_2 = DERIV_val(p5) * ad_loc_1;
                ad_loc_3 = ad_loc_2 * DERIV_val(hy);
                ad_loc_4 = ad_loc_0 + ad_loc_3;
                ad_adj_0 = DERIV_val(p5) * DERIV_val(hy);
                ad_adj_1 = ad_loc_1 * DERIV_val(hy);
                ad_adj_2 =  -ad_adj_0;
                ad_grad_axpy_6(&((f[j][i]).v), 1.000000000000000e+00, &(uxx), 1.000000000000000e+00, &(uyy), ad_adj_1, &(p5), ad_adj_0, &((x[j][i + 1]).omega), ad_adj_2, &((x[j][i - 1]).omega), ad_loc_2, &(hy));
                DERIV_val((f[j][i]).v) = ad_loc_4;
            }
            {
                ad_grad_axpy_copy(&(u), &((x[j][i]).omega));
                DERIV_val(u) = DERIV_val((x[j][i]).omega);
            }
            {
                ad_loc_0 = DERIV_val(two) * DERIV_val(u);
                ad_loc_1 = ad_loc_0 - DERIV_val((x[j][i - 1]).omega);
                ad_loc_2 = ad_loc_1 - DERIV_val((x[j][i + 1]).omega);
                ad_loc_3 = ad_loc_2 * DERIV_val(hydhx);
                ad_adj_0 =  -DERIV_val(hydhx);
                ad_adj_1 =  -DERIV_val(hydhx);
                ad_adj_2 = DERIV_val(two) * DERIV_val(hydhx);
                ad_adj_3 = DERIV_val(u) * DERIV_val(hydhx);
                ad_grad_axpy_5(&(uxx), ad_adj_3, &(two), ad_adj_2, &(u), ad_adj_1, &((x[j][i - 1]).omega), ad_adj_0, &((x[j][i + 1]).omega), ad_loc_2, &(hydhx));
                DERIV_val(uxx) = ad_loc_3;
            }
            {
                ad_loc_0 = DERIV_val(two) * DERIV_val(u);
                ad_loc_1 = ad_loc_0 - DERIV_val((x[j - 1][i]).omega);
                ad_loc_2 = ad_loc_1 - DERIV_val((x[j + 1][i]).omega);
                ad_loc_3 = ad_loc_2 * DERIV_val(hxdhy);
                ad_adj_0 =  -DERIV_val(hxdhy);
                ad_adj_1 =  -DERIV_val(hxdhy);
                ad_adj_2 = DERIV_val(two) * DERIV_val(hxdhy);
                ad_adj_3 = DERIV_val(u) * DERIV_val(hxdhy);
                ad_grad_axpy_5(&(uyy), ad_adj_3, &(two), ad_adj_2, &(u), ad_adj_1, &((x[j - 1][i]).omega), ad_adj_0, &((x[j + 1][i]).omega), ad_loc_2, &(hxdhy));
                DERIV_val(uyy) = ad_loc_3;
            }
            {
                ad_loc_0 = DERIV_val(uxx) + DERIV_val(uyy);
                ad_loc_1 = DERIV_val(u) - DERIV_val((x[j][i - 1]).omega);
                ad_loc_2 = DERIV_val(vxp) * ad_loc_1;
                ad_loc_3 = DERIV_val((x[j][i + 1]).omega) - DERIV_val(u);
                ad_loc_4 = DERIV_val(vxm) * ad_loc_3;
                ad_loc_5 = ad_loc_2 + ad_loc_4;
                ad_loc_6 = ad_loc_5 * DERIV_val(hy);
                ad_loc_7 = ad_loc_0 + ad_loc_6;
                ad_loc_8 = DERIV_val(u) - DERIV_val((x[j - 1][i]).omega);
                ad_loc_9 = DERIV_val(vyp) * ad_loc_8;
                ad_loc_10 = DERIV_val((x[j + 1][i]).omega) - DERIV_val(u);
                ad_loc_11 = DERIV_val(vym) * ad_loc_10;
                ad_loc_12 = ad_loc_9 + ad_loc_11;
                ad_loc_13 = ad_loc_12 * DERIV_val(hx);
                ad_loc_14 = ad_loc_7 + ad_loc_13;
                ad_loc_15 = DERIV_val(p5) * DERIV_val(grashof);
                ad_loc_16 = DERIV_val((x[j][i + 1]).temp) - DERIV_val((x[j][i - 1]).temp);
                ad_loc_17 = ad_loc_15 * ad_loc_16;
                ad_loc_18 = ad_loc_17 * DERIV_val(hy);
                ad_loc_19 = ad_loc_14 - ad_loc_18;
                ad_adj_0 =  -ad_loc_17;
                ad_adj_1 =  -DERIV_val(hy);
                ad_adj_2 = ad_loc_15 * ad_adj_1;
                ad_adj_3 = ad_loc_16 * ad_adj_1;
                ad_adj_4 =  -ad_adj_2;
                ad_adj_5 = DERIV_val(p5) * ad_adj_3;
                ad_adj_6 = DERIV_val(grashof) * ad_adj_3;
                ad_adj_7 = DERIV_val(vym) * DERIV_val(hx);
                ad_adj_8 = ad_loc_10 * DERIV_val(hx);
                ad_adj_9 =  -ad_adj_7;
                ad_adj_10 = DERIV_val(vyp) * DERIV_val(hx);
                ad_adj_11 = ad_loc_8 * DERIV_val(hx);
                ad_adj_12 =  -ad_adj_10;
                ad_adj_13 = DERIV_val(vxm) * DERIV_val(hy);
                ad_adj_14 = ad_loc_3 * DERIV_val(hy);
                ad_adj_15 =  -ad_adj_13;
                ad_adj_16 = DERIV_val(vxp) * DERIV_val(hy);
                ad_adj_17 = ad_loc_1 * DERIV_val(hy);
                ad_adj_18 =  -ad_adj_16;
ad_grad_axpy_n(21, &((f[j][i]).omega), 1.000000000000000e+00, &(uxx), 1.000000000000000e+00, &(uyy), ad_adj_17, &(vxp), ad_adj_16, &(u), ad_adj_18, &((x[j][i - 1]).omega), ad_adj_14, &(vxm), ad_adj_13, &((x[j][i + 1]).omega), ad_adj_15, &(u), ad_loc_5, &(hy), ad_adj_11, &(vyp), ad_adj_10, &(u), ad_adj_12, &((x[j - 1][i]).omega), ad_adj_8, &(vym), ad_adj_7, &((x[j + 1][i]).omega), ad_adj_9, &(u), ad_loc_12, &(hx), ad_adj_6, &(p5), ad_adj_5, &(grashof), ad_adj_2, &((x[j][i + 1]).temp), ad_adj_4, &((x[j][i - 1]).temp), ad_adj_0, &(hy));
                DERIV_val((f[j][i]).omega) = ad_loc_19;
            }
            {
                ad_grad_axpy_copy(&(u), &((x[j][i]).temp));
                DERIV_val(u) = DERIV_val((x[j][i]).temp);
            }
            {
                ad_loc_0 = DERIV_val(two) * DERIV_val(u);
                ad_loc_1 = ad_loc_0 - DERIV_val((x[j][i - 1]).temp);
                ad_loc_2 = ad_loc_1 - DERIV_val((x[j][i + 1]).temp);
                ad_loc_3 = ad_loc_2 * DERIV_val(hydhx);
                ad_adj_0 =  -DERIV_val(hydhx);
                ad_adj_1 =  -DERIV_val(hydhx);
                ad_adj_2 = DERIV_val(two) * DERIV_val(hydhx);
                ad_adj_3 = DERIV_val(u) * DERIV_val(hydhx);
                ad_grad_axpy_5(&(uxx), ad_adj_3, &(two), ad_adj_2, &(u), ad_adj_1, &((x[j][i - 1]).temp), ad_adj_0, &((x[j][i + 1]).temp), ad_loc_2, &(hydhx));
                DERIV_val(uxx) = ad_loc_3;
            }
            {
                ad_loc_0 = DERIV_val(two) * DERIV_val(u);
                ad_loc_1 = ad_loc_0 - DERIV_val((x[j - 1][i]).temp);
                ad_loc_2 = ad_loc_1 - DERIV_val((x[j + 1][i]).temp);
                ad_loc_3 = ad_loc_2 * DERIV_val(hxdhy);
                ad_adj_0 =  -DERIV_val(hxdhy);
                ad_adj_1 =  -DERIV_val(hxdhy);
                ad_adj_2 = DERIV_val(two) * DERIV_val(hxdhy);
                ad_adj_3 = DERIV_val(u) * DERIV_val(hxdhy);
                ad_grad_axpy_5(&(uyy), ad_adj_3, &(two), ad_adj_2, &(u), ad_adj_1, &((x[j - 1][i]).temp), ad_adj_0, &((x[j + 1][i]).temp), ad_loc_2, &(hxdhy));
                DERIV_val(uyy) = ad_loc_3;
            }
            {
                ad_loc_0 = DERIV_val(uxx) + DERIV_val(uyy);
                ad_loc_1 = DERIV_val(u) - DERIV_val((x[j][i - 1]).temp);
                ad_loc_2 = DERIV_val(vxp) * ad_loc_1;
                ad_loc_3 = DERIV_val((x[j][i + 1]).temp) - DERIV_val(u);
                ad_loc_4 = DERIV_val(vxm) * ad_loc_3;
                ad_loc_5 = ad_loc_2 + ad_loc_4;
                ad_loc_6 = ad_loc_5 * DERIV_val(hy);
                ad_loc_7 = DERIV_val(u) - DERIV_val((x[j - 1][i]).temp);
                ad_loc_8 = DERIV_val(vyp) * ad_loc_7;
                ad_loc_9 = DERIV_val((x[j + 1][i]).temp) - DERIV_val(u);
                ad_loc_10 = DERIV_val(vym) * ad_loc_9;
                ad_loc_11 = ad_loc_8 + ad_loc_10;
                ad_loc_12 = ad_loc_11 * DERIV_val(hx);
                ad_loc_13 = ad_loc_6 + ad_loc_12;
                ad_loc_14 = DERIV_val(prandtl) * ad_loc_13;
                ad_loc_15 = ad_loc_0 + ad_loc_14;
                ad_adj_0 = ad_loc_11 * DERIV_val(prandtl);
                ad_adj_1 = DERIV_val(hx) * DERIV_val(prandtl);
                ad_adj_2 = DERIV_val(vym) * ad_adj_1;
                ad_adj_3 = ad_loc_9 * ad_adj_1;
                ad_adj_4 =  -ad_adj_2;
                ad_adj_5 = DERIV_val(vyp) * ad_adj_1;
                ad_adj_6 = ad_loc_7 * ad_adj_1;
                ad_adj_7 =  -ad_adj_5;
                ad_adj_8 = ad_loc_5 * DERIV_val(prandtl);
                ad_adj_9 = DERIV_val(hy) * DERIV_val(prandtl);
                ad_adj_10 = DERIV_val(vxm) * ad_adj_9;
                ad_adj_11 = ad_loc_3 * ad_adj_9;
                ad_adj_12 =  -ad_adj_10;
                ad_adj_13 = DERIV_val(vxp) * ad_adj_9;
                ad_adj_14 = ad_loc_1 * ad_adj_9;
                ad_adj_15 =  -ad_adj_13;
ad_grad_axpy_n(17, &((f[j][i]).temp), 1.000000000000000e+00, &(uxx), 1.000000000000000e+00, &(uyy), ad_loc_13, &(prandtl), ad_adj_14, &(vxp), ad_adj_13, &(u), ad_adj_15, &((x[j][i - 1]).temp), ad_adj_11, &(vxm), ad_adj_10, &((x[j][i + 1]).temp), ad_adj_12, &(u), ad_adj_8, &(hy), ad_adj_6, &(vyp), ad_adj_5, &(u), ad_adj_7, &((x[j - 1][i]).temp), ad_adj_3, &(vym), ad_adj_2, &((x[j + 1][i]).temp), ad_adj_4, &(u), ad_adj_0, &(hx));
                DERIV_val((f[j][i]).temp) = ad_loc_15;
            }
            ad_var_8 = i++;
        }
        ad_var_7 = j++;
    }
    ad_var_9 = PetscLogFlops((84 * ym) * xm);
    ierr = ad_var_9;
    CHKERRQ(ierr);
    return 0;
}
void   ad_AD_Init(int  arg0) {
    ad_AD_GradInit(arg0);

}
void   ad_AD_Final() {
    ad_AD_GradFinal();

}
