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