Exemplo n.º 1
0
def main(*args):

    inputDir    = './data.1d'

    prjName     = 'Prcp_GPCC'
    xIdx,yIdx   = 100,140

    sDTime      = datetime.datetime(2000,1,1,0,0)
    eDTime      = datetime.datetime(2001,1,1,0,0)
    dT          = datetime.timedelta(seconds=3600*6)

#    totSec      = (eDTime-sDTime).days*86400+(eDTime-sDTime).seconds
#    dTsec       = dT.days*86400+dT.seconds
    totSec      = (eDTime-sDTime).total_seconds()   # in float (not int)
    dTsec       = dT.total_seconds()

    nTLoop      = int(totSec/dTsec)

    vegType     = 'crop'
    C           = Const(vegType)
    C.dT        = dT.seconds
    C.dT        = 600.

    varNAME     = [
                   'CCOV',
                   'LWdown',
                   'PSurf',
                   'Prcpf',
                   'Qair',      # 2m Specific Humidity  [kg/kg]
                   'Rainf',
                   'SWdown',
                   'Snowf',     
                   'Tair',      # 2m Air Temperature    [K]
                   'Wind'       # Wind Speed            [m/s]
                   ]

    # Open Input Files --------------------------------------------------------
    dInFile     = dict(
                    (var,file(os.path.join(
                                inputDir,
                                '%s.%s.%i@%ix%i.asc'%(prjName,var,sDTime.year,yIdx,xIdx)
                                           ))) 
                                for var in varNAME)
    # --------------------------------------------------------------------------
    # Declare State Variables
    dVarState   = {
                   'Ts':243.15, # Skin Temp.
                   'Td':244.15, # Soil Temp.
                    }


    tmpOUT  = {'Rnet':[],
               'ET0'  :[],
               'H'  :[],
               'Td' :[],
               'Ts' :[],}

    # Time integration loop ---------------------------------------------------
    for ii,nLoop   in enumerate(xrange(nTLoop)):
        dVarIn  = dict((var,float(dInFile[var].readline())) 
                                for var in varNAME)
        
#        Epot    = calc_Epot(C,dVarIn)
#        print '%5.2f'%(Epot*86400), 

        # Read State Variable -------------------------------------------------
        Ts      = dVarState['Ts']               # Skin Temp.            [K]
        Td      = dVarState['Td']               # Soil Temp.            [K]
        # ---------------------------------------------------------------------

        # Read Forcing Variable -----------------------------------------------
        U10     = dVarIn['Wind']                # 10m wind speed        [m/s]
        T2      = dVarIn['Tair']                # 2m  air temp.         [K]
        Q2      = dVarIn['Qair']                # 2m specific humidity  [??]
        P       = dVarIn['PSurf']               # surface pressure      [hPa]

        RSDN    = dVarIn['SWdown']              # downward solar rad.   [W/m**2]
        RLDN    = dVarIn['LWdown']              # downward solar rad.   [W/m**2]
        # ---------------------------------------------------------------------

        RSUP    = RSDN*C.Veg['albedo']          # upward   solar rad.   [W/m**2]
        RLUP    = C.sig*Ts**4                   # upward   solar rad.   [W/m**2]

        Rnet    = RSDN-RSUP+RLDN-RLUP

        U2      = calc_Whgt(U10,10.,2.,C.Veg['roughLenM'])    # calc. 2m wind speed

        slpVP   = calc_slopeVP(T2)
        gamma   = calc_psycho(P)

        R_a     = r_a(U2,C,obsHgtU=2.)
        R_s     = r_s(C)

#        print dVarIn['Wind'],U10,r_a(U2,C,obsHgtU=2.),207.66407000788683/U2,69.44444444
#        print T2,U10,R_a,R_s,RSDN,RSUP,RLDN,RLUP,Rnet,gamma

#        ET0     = calc_ET0(C,slpVP,Rnet,0.,gamma,T2,U2,Q2,P)
	ET0	= calc_Epot(C,dVarIn,dVarState,Esat_scheme='goff')
        H       = calc_H(C,dVarIn,dVarState)

#        print '#',ii,Rnet,RSDN,RSUP,RLDN,RLUP,T2,ET0,H,Ts,Td
#        if ii > 10: sys.exit()


        print '***Ts***:',dVarState['Ts']
        dVarState['Td'] = update_Td(C,dVarState,Rnet,ET0,H)
        dVarState['Ts'] = update_Ts(C,dVarState,Rnet,ET0,H)
        print '***Ts_nxt***:',dVarState['Ts']

        tmpOUT['Rnet'].append(Rnet)
        tmpOUT['ET0'].append(ET0)
        tmpOUT['H'  ].append(H)
        tmpOUT['Td' ].append(dVarState['Td'])
        tmpOUT['Ts' ].append(dVarState['Ts'])

    return  tmpOUT