예제 #1
0
from parameters import *
import numpy as np
from sympy import Symbol, solve, nsolve, re
import scipy.optimize
import multiprocessing

from CN_layers_depth import ini_z_dz, z_dz_update, C_interpolate, C_interpolate_simple
import timeit
import matplotlib.pyplot as plt
import F_BD_multipros_process_fn
#

nrows = 10
ncols = 10
z_matrix, dz_matrix = ini_z_dz(nrows, ncols)
#z_matrix[:,1]=z_matrix[:,1]*2.0
#Cl         = 40000.0*np.exp(-1.0*z_matrix) # 18000
#ClayPerct = 70.0 #
#SiltPerct = 17.8#
#Cv = Cl*1e-6

#def set_globvar_to_one():
#global z_matrix    # Needed to modify global copy of globvar

#set_globvar_to_one()

start = timeit.default_timer()

Cm = F_BD_multipros_process_fn.output(z_matrix, nrows * ncols)
예제 #2
0
def creating_ini_values(CCW, sin, litter_input, inputDatabase):
    #------------------------------------------------------------------------
    # INITIAL elevation, soil layer thickness
    #------------------------------------------------------------------------
    if CCW:
        X, Y, eta, mask_grid = loadDEM()  # loadDEM() or ini_landscape()
        mask_vector = mask_grid.flatten()
        mask_ID = np.where(mask_vector == 0)
    if sin:
        X, Y, eta = ini_landscape()

    eta_vector_ini = np.array(eta).flatten()  # Convert into 1D array
    eta_vector = eta_vector_ini * 1.0
    nrows, ncols = eta.shape
    z_matrix_ini, dz_matrix_ini = ini_z_dz(nrows, ncols)
    Ch_all_ini = 43000.0 * np.exp(-2.5 * z_matrix_ini)  # 45000
    Cb_all_ini = 180.0 * np.exp(-2.5 * z_matrix_ini)  #320
    Cl_all_ini = 6900.0 * np.exp(-2.5 * z_matrix_ini)  #2800

    if inputDatabase:
        nc_f = "wd373.nc"  #test_wd500_noT
        nc_fid = Dataset(nc_f, 'r')

        soil_depth_change = np.array(nc_fid.variables['d_LE'])
        eta_vector = eta_vector + soil_depth_change_d.flatten(
        ) + soil_depth_change_s.flatten()
        Cl_all = np.array(nc_fid.variables['Cl'])
        Cb_all = np.array(nc_fid.variables['Cb'])
        Ch_all = np.array(nc_fid.variables['Ch'])
        z_matrix = np.array(nc_fid.variables['soil_depth'])
        dz_matrix = np.zeros((z_matrix.shape))
        dz_matrix[0, :] = z_matrix[0, :] * 1.0
        for i in xrange(6):
            dz_matrix[i +
                      1, :] = z_matrix[i + 1, :] * 1.0 - z_matrix[i, :] * 1.0
        theta = np.array(nc_fid.variables['theta'])
    else:
        z_matrix = z_matrix_ini * 1.0
        dz_matrix = dz_matrix_ini * 1.0
        # np.save('z_matrix_ini',z_matrix_ini)
        # np.save('dz_matrix_ini',dz_matrix_ini)
        #------------------------------------------------------------------------
        # INITIAL CARBON CONCENTRATION, CL, CB, CH, NL, HB, NH, N+, N-
        #------------------------------------------------------------------------

        Ch_all = Ch_all_ini * 1.0
        Cb_all = Cb_all_ini * 1.0
        Cl_all = Cl_all_ini * 1.0

        # np.save('Ch_all_ini',Ch_all_ini)
        # np.save('Cb_all_ini',Cb_all_ini)
        # np.save('Cl_all_ini',Cl_all_ini)

        #C_matrix_ini   = Ch_all_ini+Cb_all_ini+Cl_all_ini
        #C_matrix       = C_matrix_ini*1.0

    C1_vector = np.array([Cl_all[0, :], Ch_all[0, :], Cb_all[0, :]
                          ]) * 1.0  #+Cb_all[0,:]+Ch_all[0,:]

    #CN_l_all    = CN_l_ini*np.ones((soil_layer_num,nrows*ncols)) #same as np.ones(z_matrix.shape)
    #N_plus_all  = 0.002*np.ones((soil_layer_num,nrows*ncols)) #0.002*np.exp(-1.0*z_matrix)
    #N_minus_all = 0.6*np.ones((soil_layer_num,nrows*ncols))  #0.6*np.exp(-1.0*z_matrix)

    #------------------------------------------------------------------------
    # INITIAL water deoth (wd) and water surface elevation (we)
    #------------------------------------------------------------------------
    wd_vector, we_vector = overland_setup(
        eta_vector)  # vector means reorganize 2D to 1D
    mann_bs = manning_bs * np.ones(nrows * ncols)  # load the Manning's coeff
    mann_vg = manning_vg * np.ones(nrows * ncols)
    #------------------------------------------------------------------------
    # INITIAL soil mositure and soil pressure head
    #------------------------------------------------------------------------
    Psi_ini_all = -2.0 * z_matrix - 2.0  #-1.0*np.ones((soil_layer_num,nrows*ncols)) #np.linspace(2.0,2.0,nz)
    Psi_n_all = Psi_ini_all * 1.0

    C_ini_all, K_ini_all, theta_ini_all = vanGenuchten(Psi_ini_all, alpha,
                                                       theta_S, theta_R, n, m,
                                                       Ksat)

    theta_n_all = theta_ini_all * 1.0

    #    theta_mean_1col = np.array([ 0.30887538, 0.31472939, 0.31682785, 0.31680671, 0.31508827, 0.31146861, 0.30576922])
    theta_mean_1col = np.array([
        0.35480344, 0.36059945, 0.36269936, 0.36273304, 0.3611157, 0.3574786,
        0.35072803
    ])
    #theta_mean_1col = np.array([0.255932  ,  0.26280422,  0.26647157,  0.26852458,  0.26961957, \
    #                            0.2700011 ,  0.26972128,  0.26868466,  0.26671475,  0.2637314]) # 10 layers

    #------------------------------------------------------------------------
    # INITIAL water deoth (wd) and water surface elevation (we)
    #------------------------------------------------------------------------
    wd_vector, we_vector = overland_setup(
        eta_vector)  # vector means reorganize 2D to 1D

    #------------------------------------------------------------------------
    # Kl, Kh, Kd, and ADD
    #------------------------------------------------------------------------

    Kl = np.zeros((soil_layer_num))
    Kh = np.zeros((soil_layer_num))
    Kd = np.zeros((soil_layer_num))

    Zr = z_matrix[:, 1]
    dZr = dz_matrix[:, 1]
    Frooti = root_fr(Zr, dZr)

    litter_mean = np.mean(litter_input, 1)
    Addb = Frooti * (Add_b + litter_mean[1])  #+litter_mean[1]
    ADD = Addb * 1.0
    ADD[0] = Addb[0] + ADD_s + litter_mean[0]  #+litter_mean[0]

    rh_2col = np.column_stack((rh_ini * np.ones(soil_layer_num),
                               np.ones(soil_layer_num) * CN_h_ini / CN_l_ini))
    rh = np.min(rh_2col, axis=1)

    for ll in xrange(0, soil_layer_num):
        Kl[ll], Kh[ll], Kd[ll] = aveg_k(theta_mean_1col[ll] / poros,
                                        np.mean(Cl_all[ll, :]),
                                        np.mean(Ch_all[ll, :]),
                                        np.mean(Cb_all[ll, :]), ADD[ll],
                                        rh[ll])

    Kl = np.ones((soil_layer_num, nrows * ncols)) * Kl[:, None]
    Kh = np.ones((soil_layer_num, nrows * ncols)) * Kh[:, None]
    Kd = np.ones((soil_layer_num, nrows * ncols)) * Kd[:, None]

    #------------------------------------------------------------------------
    #     SAVE VARIABLES
    #------------------------------------------------------------------------
    water_depth_saved = np.zeros(nrows * ncols)
    #    dh_STs               = np.zeros(nrows*ncols)
    #    dh_STd               = np.zeros(nrows*ncols)
    #    dh_STr               = np.zeros(nrows*ncols)
    dh_STsave = np.zeros(nrows * ncols)
    #    qC_save_d            = np.zeros((3, nrows*ncols))
    #    qC_save_s            = np.zeros((3, nrows*ncols))
    #    qC_save_r            = np.zeros((3, nrows*ncols))
    dC_BG = np.zeros((soil_layer_num, nrows * ncols))
    qC_LE = np.zeros((nrows * ncols))
    #------------------------------------------------------------------------
    #     SAVE DATA
    #------------------------------------------------------------------------
    folder = 'Output_data'  #os.getcwd() #

    if not os.path.exists(folder):
        os.makedirs(folder)

    save2D_results(dh_STsave.reshape(
        (nrows, ncols)), qC_LE.reshape(
            (nrows, ncols)), Cl_all + Ch_all + Cb_all, dC_BG, theta_n_all,
                   z_matrix, 'd_LE', 'qC_LE', 'Clhb', 'dC_BG', 'theta',
                   'z_matrix', folder, "wd", 0)  #"d_soildepth_s" 'qC_s'

    return eta_vector, eta_vector_ini, nrows, ncols, z_matrix, z_matrix_ini, dz_matrix, dz_matrix_ini, theta_n_all, Psi_n_all, wd_vector, we_vector, Cl_all, Ch_all, Cb_all, Cl_all_ini, Ch_all_ini, Cb_all_ini, C1_vector, Kl, Kh, Kd, Frooti, mann_bs, mann_vg, mask_ID
예제 #3
0
    return dCl_all, dCh_all, dCb_all, Cl1d, Ch1d, Cb1d


if __name__ == '__main__':

    #...................Rainfall
    rain = np.load('rainfall_100yr3_daily.npy')  # mm/(day)
    rain = rain / 1000.0

    litter_input = (np.load('litter_input.npy')) / dt

    time_steps = 1
    rp = 0
    #........initial values, Soil moisture
    theta_save = np.zeros((soil_layer_num, time_steps))
    z_matrix, dz_matrix = ini_z_dz(1, 1)

    Psi_ini_all = -2.0 * z_matrix - 2.0  #-1.0*np.ones((soil_layer_num,nrows*ncols)) #np.linspace(2.0,2.0,nz)
    Psi_n_all = Psi_ini_all * 1.0
    C_ini_all, K_ini_all, theta_ini_all = vanGenuchten(Psi_ini_all, alpha,
                                                       theta_S, theta_R, n, m,
                                                       Ksat)

    #    theta_mean_1col = np.array([0.30887538, 0.31472939, 0.31682785, 0.31680671, 0.31508827, 0.31146861, 0.30576922])
    #dry
    theta_mean_1col = np.array([
        0.35480344, 0.36059945, 0.36269936, 0.36273304, 0.3611157, 0.3574786,
        0.35072803
    ])
    #    wet
    #    theta_mean_1col = np.array([0.39126216, 0.39281667, 0.3923617,  0.39047139, 0.38715473, 0.38192914, 0.37363064])
예제 #4
0
def creating_ini_values(CLP, sin, litter_input, litter_inputC, inputDatabase,
                        tre, unt):
    #------------------------------------------------------------------------
    # INITIAL elevation, soil layer thickness, manning's coeff
    #------------------------------------------------------------------------
    if CLP:
        X, Y, eta, mann_vg = loadDEM(tre, unt)  # loadDEM() or ini_landscape()
        mann_vg = mann_vg.flatten()
    if sin:
        X, Y, eta = ini_landscape()
        mann_vg = manning_vg * np.ones(
            nrows * ncols)  # load the Manning's coeff

    ind_veg = np.where((mann_vg.flatten()) < 15)[0]
    eta_vector_ini = np.array(eta).flatten()  # Convert into 1D array
    eta_vector = eta_vector_ini * 1.0
    ind_dem = np.where(
        eta_vector > 0.0
    )[0]  # the ind_in is the index inside of the watershed boundary but within the big rectangula
    eta_vector[eta_vector < 0.0] = np.max(eta_vector)
    #    eta_vector[eta_vector<0.0] = np.nan
    nrows, ncols = eta.shape
    z_matrix_ini, dz_matrix_ini = ini_z_dz(nrows, ncols)
    mann_bs = manning_bs * np.ones(nrows * ncols)

    if sin:
        Ch_all_ini = 43000.0 * np.exp(-2.5 * z_matrix_ini)  # 45000
        Cl_all_ini = 7000.0 * np.exp(-2.5 * z_matrix_ini)  #2800
        Cb_all_ini = 3260.0 * np.exp(-2.5 * z_matrix_ini)  #320
        ind_out = np.where(eta_vector < 0.0)[0]
    if CLP:
        current_dir = os.getcwd()
        os.chdir(current_dir + "/" + '/Topo_SOCini_Landcover/')
        if tre:
            Manndata = gdal.Open("landuse_tre_2m_clip.tif")
            Mann_vg = Manndata.ReadAsArray()
            ind_crop = np.where(Mann_vg.flatten() == 7)[0]
            Clhb_ini = np.load('a_surface_GLC.npy')
            Clhb_ini = np.array(Clhb_ini).flatten() * 1.0
            Clhb_profiles = (Clhb_ini * np.exp(-b_f_soc * z_matrix_ini) +
                             c_f_soc) * 1000.0
            Clhb_profiles[:, ind_crop] = (Clhb_ini[ind_crop] * np.exp(
                -b_c_soc * z_matrix_ini[:, ind_crop]) + c_c_soc) * 1000.0
        if unt:
            ind_crop = np.array([0, 1])
            Clhb_ini = np.load('a_surface_Reference.npy')
            Clhb_ini = np.array(Clhb_ini).flatten() * 1.0
            Clhb_profiles = (Clhb_ini * np.exp(-b_f_soc * z_matrix_ini) +
                             c_f_soc) * 1000.0

        ind_aSOC = np.where(Clhb_ini > 0.0)[0]
        os.chdir(current_dir)

        Cl_all_ini = 0.1235 * Clhb_profiles
        Ch_all_ini = 0.8752 * Clhb_profiles
        Cb_all_ini = 0.0104 * Clhb_profiles

        ind_in = reduce(np.intersect1d, (ind_dem, ind_veg, ind_aSOC))

    if inputDatabase:
        nc_f = "test_wd500_noT.nc"
        nc_fid = Dataset(nc_f, 'r')

        soil_depth_change_d = np.array(nc_fid.variables['d_soildepth_d'])
        soil_depth_change_s = np.array(nc_fid.variables['d_soildepth_s'])
        eta_vector = eta_vector + soil_depth_change_d.flatten(
        ) + soil_depth_change_s.flatten()
        Cl_all = np.array(nc_fid.variables['Cl'])
        Cb_all = np.array(nc_fid.variables['Cb'])
        Ch_all = np.array(nc_fid.variables['Ch'])
        z_matrix = np.array(nc_fid.variables['soil_depth'])
        dz_matrix = np.zeros((z_matrix.shape))
        dz_matrix[0, :] = z_matrix[0, :] * 1.0
        for i in xrange(6):
            dz_matrix[i +
                      1, :] = z_matrix[i + 1, :] * 1.0 - z_matrix[i, :] * 1.0
        theta = np.array(nc_fid.variables['theta'])
    else:
        z_matrix = z_matrix_ini * 1.0
        dz_matrix = dz_matrix_ini * 1.0
        np.save('z_matrix_ini', z_matrix_ini)
        np.save('dz_matrix_ini', dz_matrix_ini)
        #------------------------------------------------------------------------
        # INITIAL CARBON CONCENTRATION, CL, CB, CH, NL, HB, NH, N+, N-
        #------------------------------------------------------------------------

        Ch_all = Ch_all_ini * 1.0
        Cb_all = Cb_all_ini * 1.0
        Cl_all = Cl_all_ini * 1.0

#        np.save('Ch_all_ini',Ch_all_ini)
#        np.save('Cb_all_ini',Cb_all_ini)
#        np.save('Cl_all_ini',Cl_all_ini)

    C1_vector = np.array([Cl_all[0, :], Ch_all[0, :], Cb_all[0, :]
                          ]) * 1.0  #+Cb_all[0,:]+Ch_all[0,:]

    #CN_l_all    = CN_l_ini*np.ones((soil_layer_num,nrows*ncols)) #same as np.ones(z_matrix.shape)
    #N_plus_all  = 0.002*np.ones((soil_layer_num,nrows*ncols)) #0.002*np.exp(-1.0*z_matrix)
    #N_minus_all = 0.6*np.ones((soil_layer_num,nrows*ncols))  #0.6*np.exp(-1.0*z_matrix)

    #------------------------------------------------------------------------
    # INITIAL water deoth (wd) and water surface elevation (we)
    #------------------------------------------------------------------------
    wd_vector, we_vector = overland_setup(
        eta_vector)  # vector means reorganize 2D to 1D

    #------------------------------------------------------------------------
    # INITIAL soil mositure and soil pressure head
    #------------------------------------------------------------------------
    Psi_ini_all = -2.0 * z_matrix - 2.0  #-1.0*np.ones((soil_layer_num,nrows*ncols)) #np.linspace(2.0,2.0,nz)
    Psi_n_all = Psi_ini_all * 1.0

    C_ini_all, K_ini_all, theta_ini_all = vanGenuchten(Psi_ini_all, alpha,
                                                       theta_S, theta_R, n, m,
                                                       Ksat)

    theta_n_all = theta_ini_all * 1.0

    theta_mean_1col = np.array([
        0.2819225, 0.28597336, 0.28728486, 0.28643568, 0.28358753, 0.27879374,
        0.27252435
    ])

    #    theta_mean_1col = np.array([0.27988195, 0.28893737, 0.29351663, 0.29522106, 0.29452995, 0.29169496, 0.28769183])
    #    theta_mean_1col = np.array([ 0.30887538, 0.31472939, 0.31682785, 0.31680671, 0.31508827,
    #       0.31146861, 0.30576922])

    #------------------------------------------------------------------------
    # INITIAL water deoth (wd) and water surface elevation (we)
    #------------------------------------------------------------------------
    wd_vector, we_vector = overland_setup(
        eta_vector)  # vector means reorganize 2D to 1D

    #------------------------------------------------------------------------
    # Kl, Kh, Kd, and ADD
    #------------------------------------------------------------------------

    Kl = np.zeros((soil_layer_num, nrows * ncols))
    Kh = np.zeros((soil_layer_num, nrows * ncols))
    Kd = np.zeros((soil_layer_num, nrows * ncols))

    Zr = z_matrix[:, 1]
    dZr = dz_matrix[:, 1]
    Frooti = root_fr(Zr, dZr)

    rh_2col = np.column_stack((rh_ini * np.ones(soil_layer_num),
                               np.ones(soil_layer_num) * CN_h_ini / CN_l_ini))
    rh = np.min(rh_2col, axis=1)

    litter = np.mean(litter_input, 1)[:, None] * np.ones((2, nrows * ncols))
    litterC = np.mean(litter_inputC, 1)[:, None] * np.ones((2, len(ind_crop)))
    litter[:, ind_crop] = litterC

    Addb = Frooti[:, None] * (Add_b + litter[1, :])
    ADD = Addb * 1.0
    ADD[0, :] = Addb[0] + ADD_s + litter[0, :]

    Cl_stable = Cl_all_ini * 0.865
    Ch_stable = Ch_all_ini * 0.865
    Cb_stable = Cb_all_ini * 0.865

    #    Cl_stable[:,ind_crop]  = Cl_all_ini[:,ind_crop]*0.86 #0.1235*(4800.0*np.exp(-2.0*z_matrix_ini[:,ind_crop] )+ 1.5)
    #    Ch_stable[:,ind_crop]  = Ch_all_ini[:,ind_crop]*0.86 #0.8752*(4800.0*np.exp(-2.0*z_matrix_ini[:,ind_crop] )+ 1.5)
    #    Cb_stable[:,ind_crop]  = Cb_all_ini[:,ind_crop]*0.86 #0.0104*(4800.0*np.exp(-2.0*z_matrix_ini[:,ind_crop] )+ 1.5)

    for i in ind_in:
        for ll in xrange(0, soil_layer_num):
            Kl[ll, i], Kh[ll, i], Kd[ll, i] = aveg_k(
                theta_mean_1col[ll] / poros, (Cl_stable[ll, i]),
                (Ch_stable[ll, i]), (Cb_stable[ll, i]), ADD[ll, i], rh[ll])

#        ind_crop
#    Kl = np.ones((soil_layer_num,nrows*ncols))*Kl[:,None]
#    Kh = np.ones((soil_layer_num,nrows*ncols))*Kh[:,None]
#    Kd = np.ones((soil_layer_num,nrows*ncols))*Kd[:,None]

#------------------------------------------------------------------------
#     SAVE VARIABLES
#------------------------------------------------------------------------
    water_depth_saved = np.zeros(nrows * ncols)
    #    dh_STs               = np.zeros(nrows*ncols)
    #    dh_STd               = np.zeros(nrows*ncols)
    #    dh_STr               = np.zeros(nrows*ncols)
    #    qC_save_d            = np.zeros((3, nrows*ncols))
    #    qC_save_s            = np.zeros((3, nrows*ncols))
    #    qC_save_r            = np.zeros((3, nrows*ncols))
    dh_STsave = np.zeros(nrows * ncols)
    qC_LE = np.zeros((nrows * ncols))
    dC_BG = np.zeros((soil_layer_num, nrows * ncols))
    #------------------------------------------------------------------------
    #     SAVE DATA
    #------------------------------------------------------------------------
    folder = 'Output_data'

    if not os.path.exists(folder):
        os.makedirs(folder)

    save2D_results(dh_STsave.reshape(
        (nrows, ncols)), qC_LE.reshape(
            (nrows, ncols)), Cl_all + Ch_all + Cb_all, dC_BG, theta_n_all,
                   z_matrix, 'd_LE', 'qC_LE', 'Clhb', 'dC_BG', 'theta',
                   'z_matrix', folder, "wd", 0)  #"d_soildepth_s" 'qC_s' ,

    eta_vector_ini_in = -1.0 * np.ones(nrows * ncols)
    eta_vector_ini_in[ind_in] = eta_vector_ini[ind_in] * 1.0
    eta_2d_ini = eta_vector_ini_in.reshape(nrows, ncols)
    eta_2d_ini[eta_2d_ini < 0.0] = np.nan
    np.save('eta_ini', eta_2d_ini)

    return eta_vector, eta_vector_ini, nrows, ncols, z_matrix, z_matrix_ini, dz_matrix, dz_matrix_ini, theta_n_all, Psi_n_all, wd_vector, we_vector, Cl_all, Ch_all, Cb_all, Cl_all_ini, Ch_all_ini, Cb_all_ini, C1_vector, Kl, Kh, Kd, Frooti, mann_bs, mann_vg, ind_in, ind_crop