예제 #1
0
 def __init__(self, file, subfolder, folder = '/home/aholaj/mounttauskansiot/voimahomemount/UCLALES-SALSA/' ):
     self.folder=folder
     self.file = file
     self.subfolder = subfolder
     #file = 'sound_in_DYCOMSIIRF02'
     #file = 'sound_in'
     filu = self.folder + "/" + self.subfolder + "/" + self.file
     f = open(filu, 'r')
 
     self.z = []
     self.t = []
     self.q = []
     self.u = []
     self.v = []
     
     
     
     
     for line in f:
         zA, tA, qA, uA, vA = line.split()
         self.z.append(float(zA))
         self.t.append(float(tA))
         self.q.append(float(qA))
         self.u.append(float(uA))
         self.v.append(float(vA))
     
         
     f.close()
     
     
     self.zu = np.column_stack(( self.z, self.u ))
     self.zv = np.column_stack(( self.z, self.v ))
     
     self.rh, self.ps = calc_rh_profile( self.t, np.multiply(np.asarray(self.q), 1.e-3),  self.z )
     self.z[0]=0.
예제 #2
0
def write_sound_in(input_vector):
    #    input_vector = pres0[0], windprofile[1], case[2], q_inv[3], tpot_inv[4], q_pbl[5], tpot_pbl[6], pblh[7], dz[8], nzp[9]
    pres0 = float(input_vector[0])
    windprofile = input_vector[1]
    case = str(input_vector[2])
    q_inv = float(input_vector[3])
    tpot_inv = float(input_vector[4])
    q_pbl = float(input_vector[5])
    tpot_pbl = float(input_vector[6])
    pblh = float(input_vector[7])
    dz = float(input_vector[8])
    nzp = int(input_vector[9])

    folder = rootfolder + 'emul' + case + '/'
    call(['mkdir', '-p', folder])
    filename = 'sound_in'  #+case
    #    print filename
    filu = folder + filename

    f = open(filu, 'w')

    #z = [ 100., 200., 500.,790.,795.,800.,850.,900.,950.,1000.,1050.,1100.,1150.,1200.,1250.,1300.,1350.,1400.,1450.,1500.,1550.,1600.,1650.,1700.,1750.,1800.,1850.,1900.,1950.,2000.]

    #    print row

    z = define_z(pblh, dz, nzp)

    print('case ' + str(case))
    print('deltaz ' + str(dz))
    print('korkeus ' + str(z[-1]))
    print('pblh ' + str(round(pblh, 2)))
    print('nzp ' + str(nzp))

    print('tpot_pbl ' + str(round(tpot_pbl, 2)))
    print('tpot_inv ' + str(round(tpot_inv, 2)))
    print('q_pbl ' + str(round(q_pbl, 2)))
    print('q_inv ' + str(round(q_inv, 2)))
    #print('num_pbl '  + str(round(num_pbl,2)))
    z[0] = pres0
    potTemp = [tpot_pbl]
    wc = [q_pbl]
    u = [0.]
    v = [0.]

    #    invThi = 50.
    t_grad = 0.3
    invThi = thickness(tpot_inv, t_grad)
    print('inversion thickness ' + str(round(invThi, 2)))
    print(" ")

    for k in range(1, len(z)):

        #        potTemp.append( pot_temp_IT( z[k], pblh, tpot_pbl, tpot_inv, invThi ) )
        #        wc.append(      tot_wat_mix_rat_IT( z[k], pblh, q_pbl, q_inv, invThi, q_toa = min( max( q_pbl-q_inv-0.01, 0.01) , 2. ) ) )

        potTemp.append(
            pot_temp_LIN(z[k],
                         pblh,
                         tpot_pbl,
                         tpot_inv,
                         t_grad,
                         invThi,
                         dtdzFT=0.003))
        wc.append(tot_wat_mix_rat_LIN(z[k], pblh, q_pbl, q_inv, invThi))

        if (windprofile == 'zero'):
            u_apu, v_apu = wind_0(z[k])
        elif (windprofile == 'ascos'):
            u_apu, v_apu = wind_ascos(z[k])
        elif (windprofile == 'dycoms'):
            u_apu, v_apu = wind_dycoms(z[k])
        elif (windprofile == 'ideal'):
            u_apu, v_apu = wind_ideal(z[k])
        u.append(u_apu)
        v.append(v_apu)
    if (windprofile == 'zero'):
        u_apu, v_apu = wind_0(0.)
    elif (windprofile == 'ascos'):
        u_apu, v_apu = wind_ascos(0.)
    elif (windprofile == 'dycoms'):
        u_apu, v_apu = wind_dycoms(0.)
    elif (windprofile == 'ideal'):
        u_apu, v_apu = wind_ideal(0.)
    u[0] = u_apu
    v[0] = v_apu
    #    for k in xrange(len(z)):
    #        print z[k], potTemp[k]

    #    print 'lev '+ str(lev)+' theta '+ str(potTemp(lev))+ ' wc ' + str(wc(lev)) + ' u ' + str(u(lev)) + ' v ' + str(v(lev))

    rh, pressL = calc_rh_profile(potTemp, np.multiply(np.asarray(wc), 0.001),
                                 z)
    #drop, cloudwater = calc_cloud_droplet_diam( potTemp, np.multiply(np.asarray(wc), 0.001),  pressL, num_pbl*1e6) drawing
    #cloudwater = np.multiply(cloudwater,1000.)
    wind = calcWind(u, v)
    windshear = calcWindShear(u, v, z)
    #    if you want to modify water content use the two following commands
    #    rh, wc2 = calc_rh_profile(  potTemp, np.multiply(np.asarray(wc), 0.001),  z, True )
    #    wc = np.multiply(wc,1000.)[7]

    # write to sound_in

    for k in range(len(z)):

        row= ' {0:15f} {1:15.6f} {2:15.6f} {3:15.6f} {4:15.6f}\n'.format(            \
                                        z[k],                           \
                                        potTemp[k],                  \
                                        wc[k],                          \
                                        u[k],                           \
                                        v[k]                            )
        f.write(row)

    f.close()

    #     plotting if mounted
    if (mounted):
        print("Plotataan case " + str(case))
        print(" ")
        LEGEND = False
        markers = True
        z[0] = 0.
        initializeColors(7)

        plottaa(potTemp,
                z,
                tit=case + ' liq. pot. temp., pblh: ' + str(round(pblh, 2)) +
                ' [m] invThi.: ' + str(round(invThi, 2)) + ' [m]',
                xl='liquid potential temperature [K]',
                yl='height [m]',
                markers=markers,
                uusikuva=True,
                LEGEND=LEGEND)
        plt.axhline(y=pblh)
        #        plt.axhline( y = pblh + invThi )
        #        plt.plot([tpot_pbl,tpot_pbl+tpot_inv], [pblh,pblh+invThi], color='r', marker='o')
        #        plt.ylim( [pblh-1.*dz, pblh + invThi+1*dz])
        #    #    ax.set_yticks(z)
        #    #    ax.set_yticks([pblh, pblh+invThi], minor=True)
        plt.savefig(folder + case + '_0_' + 'liquid_potential_temperature' +
                    '.png',
                    bbox_inches='tight')
        plt.close()

        plottaa(wc,
                z,
                tit=case + ' ' + r'$H_{2}$' + ' mix. rat., pblh: ' +
                str(round(pblh, 2)) + ' [m] invThi.: ' +
                str(round(invThi, 2)) + ' [m]',
                xl='water mixing ratio [g/kg]',
                yl='height [m]',
                markers=markers,
                uusikuva=True,
                LEGEND=LEGEND)
        plt.axhline(y=pblh)
        #        plt.axhline( y = pblh + invThi )
        #        plt.plot([q_pbl,q_pbl-q_inv], [pblh,pblh+invThi], color='r', marker='o')
        #        plt.ylim( [pblh-1.*dz, pblh + invThi+1*dz])
        plt.savefig(folder + case + '_0_' + 'water_mixing_ratio' + '.png',
                    bbox_inches='tight')
        plt.close()

        plottaa(rh,
                z,
                tit=case + ' relative humidity',
                xl='relative humidity [%]',
                yl='height [m]',
                markers=markers,
                uusikuva=True,
                LEGEND=LEGEND)
        plt.savefig(folder + case + '_' + 'relative_humidity' + '.png',
                    bbox_inches='tight')
        plt.close()

        #        plottaa( drop, z, tit = case+' cloud droplet diameter', xl = r'diameter [$\mu$]', yl = 'height [m]', markers=markers, uusikuva = True, LEGEND = LEGEND )
        #        plt.savefig( folder + case + '_'+ 'cloud_droplet_diameter'  + '.png', bbox_inches='tight')
        #        plt.close()

        #        plottaa( cloudwater, z, tit = case+' cloud water mixing ratio', xl = 'cloud water mixing ratio [g/kg]', yl = 'height [m]', markers=markers, uusikuva = True, LEGEND = LEGEND )
        #        plt.savefig( folder + case + '_'+ 'cloud_water_mixing_ratio'  + '.png', bbox_inches='tight')
        #        plt.close()

        plottaa(wind,
                z,
                tit=case + ' wind ' + windprofile,
                xl='wind [m/s]',
                yl='height [m]',
                markers=markers,
                uusikuva=True,
                LEGEND=LEGEND)
        plt.savefig(folder + case + '_' + 'wind' + '.png', bbox_inches='tight')
        plt.close()

        plottaa(windshear,
                z[:-1],
                tit=case + ' wind shear ' + windprofile,
                xl='wind shear ' + r'[$s^{-1}$]',
                yl='height [m]',
                markers=markers,
                uusikuva=True,
                LEGEND=LEGEND)
        plt.savefig(folder + case + '_' + 'windshear' + '.png',
                    bbox_inches='tight')
        plt.close()

    else:
        print('Not plotting initial conditions')

    return True
qq_modaa = np.multiply(qq_modaa, 1.e-3)
rh_temp = 100000. * np.ones(size)
point = 0
for i in range(point + 1):  #size
    k = 1
    incr = 1.e-6  #1.e-6
    incr = incr * 1.e-3
    etumerkki = 1.
    print('z', i)
    vanha = np.abs(rh_temp[i] - rh_mod[i])

    while ((vanha > 0.01) or (k < 3)):

        qq_modaa[i] = np.max(qq_modaa[i] - etumerkki * k * incr, 0)

        rh_temp, b = calc_rh_profile(t, qq_modaa, z)
        uusi = np.abs(rh_temp[i] - rh_mod[i])

        #        if uusi-vanha > 0:
        #            #print 'switch'
        #            etumerkki = -1*etumerkki
        vanha = uusi
        k = k + 1
        print(uusi, rh_temp[i], rh_mod[i])

    #q_mod_part[i] = q[i]-k*incr

    print('q[i]', q[i], 'qq_modaa[i]', qq_modaa[i] * 1.e+3)

#q_mod = np.concatenate( ( q_mod_part,q[size:] ) )
q_mod = np.zeros(size)