def globe7(p, Input, flags):
    '''
/*       CALCULATE G(L) FUNCTION 
 *       Upper Thermosphere Parameters */
'''
    t = [0]*15  #modified this, there was a for loop that did this
    sw9 = 1
    sr = 7.2722E-5;
    dgtr = 1.74533E-2;
    dr = 1.72142E-2;
    hr = 0.2618;

    tloc = Input.lst
    #for j in range(14):
    #    t[j] = 0
    if(flags.sw[9] > 0):
        sw9 = 1
    elif(flags.sw[9] < 0): # pragma: no cover
        sw9 = -1
    xlong = Input.g_long

    #/* calculate legendre polynomials */
    c = sin(Input.g_lat * dgtr);
    s = cos(Input.g_lat * dgtr);
    c2 = c*c;
    c4 = c2*c2;
    s2 = s*s;

    plg[0][1] = c;
    plg[0][2] = 0.5*(3.0*c2 -1.0);
    plg[0][3] = 0.5*(5.0*c*c2-3.0*c);
    plg[0][4] = (35.0*c4 - 30.0*c2 + 3.0)/8.0;
    plg[0][5] = (63.0*c2*c2*c - 70.0*c2*c + 15.0*c)/8.0;
    plg[0][6] = (11.0*c*plg[0][5] - 5.0*plg[0][4])/6.0;
#/*      plg[0][7] = (13.0*c*plg[0][6] - 6.0*plg[0][5])/7.0; */
    plg[1][1] = s;
    plg[1][2] = 3.0*c*s;
    plg[1][3] = 1.5*(5.0*c2-1.0)*s;
    plg[1][4] = 2.5*(7.0*c2*c-3.0*c)*s;
    plg[1][5] = 1.875*(21.0*c4 - 14.0*c2 +1.0)*s;
    plg[1][6] = (11.0*c*plg[1][5]-6.0*plg[1][4])/5.0;
#/*      plg[1][7] = (13.0*c*plg[1][6]-7.0*plg[1][5])/6.0; */
#/*      plg[1][8] = (15.0*c*plg[1][7]-8.0*plg[1][6])/7.0; */
    plg[2][2] = 3.0*s2;
    plg[2][3] = 15.0*s2*c;
    plg[2][4] = 7.5*(7.0*c2 -1.0)*s2;
    plg[2][5] = 3.0*c*plg[2][4]-2.0*plg[2][3];
    plg[2][6] =(11.0*c*plg[2][5]-7.0*plg[2][4])/4.0;
    plg[2][7] =(13.0*c*plg[2][6]-8.0*plg[2][5])/5.0;
    plg[3][3] = 15.0*s2*s;
    plg[3][4] = 105.0*s2*s*c; 
    plg[3][5] =(9.0*c*plg[3][4]-7.*plg[3][3])/2.0;
    plg[3][6] =(11.0*c*plg[3][5]-8.*plg[3][4])/3.0;

    if( not (((flags.sw[7]==0) and (flags.sw[8]==0)) and (flags.sw[14] == 0))):
        global stloc
        stloc = sin(hr*tloc);
        global ctloc
        ctloc = cos(hr*tloc);
        global s2tloc
        s2tloc = sin(2.0*hr*tloc);
        global c2tloc
        c2tloc = cos(2.0*hr*tloc);
        global s3tloc
        s3tloc = sin(3.0*hr*tloc);
        global c3tloc
        c3tloc = cos(3.0*hr*tloc);

    cd32 = cos(dr*(Input.doy-p[31]));
    cd18 = cos(2.0*dr*(Input.doy-p[17]));
    cd14 = cos(dr*(Input.doy-p[13]));
    cd39 = cos(2.0*dr*(Input.doy-p[38]));
    p32=p[31];
    p18=p[17];
    p14=p[13];
    p39=p[38];

    #/* F10.7 EFFECT */
    df = Input.f107 - Input.f107A;
    global dfa
    dfa = Input.f107A - 150.0;
    t[0] =  p[19]*df*(1.0+p[59]*dfa) + p[20]*df*df + p[21]*dfa + p[29]*pow(dfa,2.0);
    f1 = 1.0 + (p[47]*dfa +p[19]*df+p[20]*df*df)*flags.swc[1];
    f2 = 1.0 + (p[49]*dfa+p[19]*df+p[20]*df*df)*flags.swc[1];

    #/*  TIME INDEPENDENT */
    t[1] = (p[1]*plg[0][2]+ p[2]*plg[0][4]+p[22]*plg[0][6]) + \
          (p[14]*plg[0][2])*dfa*flags.swc[1] +p[26]*plg[0][1];

    #/*  SYMMETRICAL ANNUAL */
    t[2] = p[18]*cd32;

    #/*  SYMMETRICAL SEMIANNUAL */
    t[3] = (p[15]+p[16]*plg[0][2])*cd18;

    #/*  ASYMMETRICAL ANNUAL */
    t[4] =  f1*(p[9]*plg[0][1]+p[10]*plg[0][3])*cd14;

    #/*  ASYMMETRICAL SEMIANNUAL */
    t[5] =    p[37]*plg[0][1]*cd39;

    #/* DIURNAL */
    if (flags.sw[7]):
        t71 = (p[11]*plg[1][2])*cd14*flags.swc[5];
        t72 = (p[12]*plg[1][2])*cd14*flags.swc[5];
        t[6] = f2*((p[3]*plg[1][1] + p[4]*plg[1][3] + p[27]*plg[1][5] + t71) * \
                   ctloc + (p[6]*plg[1][1] + p[7]*plg[1][3] + p[28]*plg[1][5] \
                            + t72)*stloc);


    #/* SEMIDIURNAL */
    if (flags.sw[8]):
        t81 = (p[23]*plg[2][3]+p[35]*plg[2][5])*cd14*flags.swc[5];
        t82 = (p[33]*plg[2][3]+p[36]*plg[2][5])*cd14*flags.swc[5];
        t[7] = f2*((p[5]*plg[2][2]+ p[41]*plg[2][4] + t81)*c2tloc +(p[8]*plg[2][2] + p[42]*plg[2][4] + t82)*s2tloc);
    

    #/* TERDIURNAL */
    if (flags.sw[14]):
        t[13] = f2 * ((p[39]*plg[3][3]+(p[93]*plg[3][4]+p[46]*plg[3][6])*cd14*flags.swc[5])* s3tloc +(p[40]*plg[3][3]+(p[94]*plg[3][4]+p[48]*plg[3][6])*cd14*flags.swc[5])* c3tloc);


    #/* magnetic activity based on daily ap */
    if (flags.sw[9]==-1):
        ap = Input.ap_a;
        if (p[51]!=0):
            exp1 = exp(-10800.0*sqrt(p[51]*p[51])/(1.0+p[138]*(45.0-sqrt(Input.g_lat*Input.g_lat))));
            if (exp1>0.99999): # pragma: no cover
                    exp1=0.99999;
            if (p[24]<1.0E-4): # pragma: no cover
                    p[24]=1.0E-4;
            apt[0]=sg0(exp1,p,ap.a);
            #/* apt[1]=sg2(exp1,p,ap->a);
            #   apt[2]=sg0(exp2,p,ap->a);
            #   apt[3]=sg2(exp2,p,ap->a);
            #*/
            if (flags.sw[9]):
                t[8] = apt[0]*(p[50]+p[96]*plg[0][2]+p[54]*plg[0][4]+ \
                        (p[125]*plg[0][1]+p[126]*plg[0][3]+p[127]*plg[0][5])*cd14*flags.swc[5]+ \
                        (p[128]*plg[1][1]+p[129]*plg[1][3]+p[130]*plg[1][5])*flags.swc[7]* \
                                       cos(hr*(tloc-p[131])));
                    
            
    else:
        apd=Input.ap-4.0;
        p44=p[43];
        p45=p[44];
        if (p44<0): # pragma: no cover
            p44 = 1.0E-5;
        global apdf
        apdf = apd + (p45-1.0)*(apd + (exp(-p44 * apd) - 1.0)/p44);
        if (flags.sw[9]):
            t[8]=apdf*(p[32]+p[45]*plg[0][2]+p[34]*plg[0][4]+ \
             (p[100]*plg[0][1]+p[101]*plg[0][3]+p[102]*plg[0][5])*cd14*flags.swc[5]+
             (p[121]*plg[1][1]+p[122]*plg[1][3]+p[123]*plg[1][5])*flags.swc[7]*
                cos(hr*(tloc-p[124])));
            
    

    if ((flags.sw[10]) and (Input.g_long>-1000.0)):

            #/* longitudinal */
            if (flags.sw[11]):
                    t[10] = (1.0 + p[80]*dfa*flags.swc[1])* \
                     ((p[64]*plg[1][2]+p[65]*plg[1][4]+p[66]*plg[1][6]\
                      +p[103]*plg[1][1]+p[104]*plg[1][3]+p[105]*plg[1][5]\
                      +flags.swc[5]*(p[109]*plg[1][1]+p[110]*plg[1][3]+p[111]*plg[1][5])*cd14)* \
                          cos(dgtr*Input.g_long) \
                      +(p[90]*plg[1][2]+p[91]*plg[1][4]+p[92]*plg[1][6]\
                      +p[106]*plg[1][1]+p[107]*plg[1][3]+p[108]*plg[1][5]\
                      +flags.swc[5]*(p[112]*plg[1][1]+p[113]*plg[1][3]+p[114]*plg[1][5])*cd14)* \
                      sin(dgtr*Input.g_long));
            

            #/* ut and mixed ut, longitude */
            if (flags.sw[12]):
                    t[11]=(1.0+p[95]*plg[0][1])*(1.0+p[81]*dfa*flags.swc[1])*\
                            (1.0+p[119]*plg[0][1]*flags.swc[5]*cd14)*\
                            ((p[68]*plg[0][1]+p[69]*plg[0][3]+p[70]*plg[0][5])*\
                            cos(sr*(Input.sec-p[71])));
                    t[11]+=flags.swc[11]*\
                            (p[76]*plg[2][3]+p[77]*plg[2][5]+p[78]*plg[2][7])*\
                            cos(sr*(Input.sec-p[79])+2.0*dgtr*Input.g_long)*(1.0+p[137]*dfa*flags.swc[1]);
            

            #/* ut, longitude magnetic activity */
            if (flags.sw[13]):
                if (flags.sw[9]==-1):
                    if (p[51]):
                            t[12]=apt[0]*flags.swc[11]*(1.+p[132]*plg[0][1])*\
                                    ((p[52]*plg[1][2]+p[98]*plg[1][4]+p[67]*plg[1][6])*\
                                     cos(dgtr*(Input.g_long-p[97])))\
                                    +apt[0]*flags.swc[11]*flags.swc[5]*\
                                    (p[133]*plg[1][1]+p[134]*plg[1][3]+p[135]*plg[1][5])*\
                                    cd14*cos(dgtr*(Input.g_long-p[136])) \
                                    +apt[0]*flags.swc[12]* \
                                    (p[55]*plg[0][1]+p[56]*plg[0][3]+p[57]*plg[0][5])*\
                                    cos(sr*(Input.sec-p[58]));
                        
                else:
                    t[12] = apdf*flags.swc[11]*(1.0+p[120]*plg[0][1])*\
                            ((p[60]*plg[1][2]+p[61]*plg[1][4]+p[62]*plg[1][6])*\
                            cos(dgtr*(Input.g_long-p[63])))\
                            +apdf*flags.swc[11]*flags.swc[5]* \
                            (p[115]*plg[1][1]+p[116]*plg[1][3]+p[117]*plg[1][5])* \
                            cd14*cos(dgtr*(Input.g_long-p[118])) \
                            + apdf*flags.swc[12]* \
                            (p[83]*plg[0][1]+p[84]*plg[0][3]+p[85]*plg[0][5])* \
                            cos(sr*(Input.sec-p[75]));
                    			
            
    

    #/* parms not used: 82, 89, 99, 139-149 */
    tinf = p[30];
    for i in range(14):
        tinf = tinf + abs(flags.sw[i+1])*t[i];
    return tinf;
/*       CALCULATE G(L) FUNCTION 
 *       Upper Thermosphere Parameters */