def shanetal2014_3_layers_instant(): """Test speccon1d_unsat against 3laye eg from Shan et al. (2014) Shan et al (2014) 'Analytical solution for the 1D consolidation of unsaturated multi-layered soil' test data is digitized from article dsig=?kPa instantly other data: h = [3,4,3] (m) n = [0.45, 0.5, 0.4] (Porosity) S = [0.8, 0.6, 0.7] (Saturation) kw = [1e-10, 1e-9, 1e-10] (m/s) ka = [1e-9, 1e-8, 1e-9] (m/s) m1s = -2.5e-4 (1/kPa) m2s / m1s = 0.4 m1w / m1s = 0.2 m2w/m1w = 4 #m1s = m1a + m1w #m2s = m2a + m2w gamw = 10,000 N/m3 uatm = ua_ = 101kPa T = 293.16 K R = 8.31432J/molK wa = 29x10**3 kg/mol """ t_for_z_vs_uw = np.array([1e1, 1e3, 1e4, 1e6, 1e8, 1e9]) #uw is uw/q0 uw_for_z_vs_uw = [ [ 0.001, 0.288, 0.386, 0.401, 0.401, 0.401, 0.401, 0.38, 0.354, 0.341, 0.331, 0.327, 0.326, 0.327, 0.328, 0.327, 0.335, 0.356, 0.368, 0.368, 0.369, 0.37 ], [ 0.001, 0.191, 0.249, 0.279, 0.33, 0.38, 0.395, 0.401, 0.401, 0.401, 0.396, 0.381, 0.364, 0.35, 0.339, 0.333, 0.328, 0.328, 0.328, 0.331, 0.334, 0.336, 0.351, 0.363, 0.37, 0.37, 0.37, 0.369 ], [ 0.001, 0.234, 0.251, 0.285, 0.319, 0.339, 0.357, 0.361, 0.354, 0.345, 0.341, 0.34, 0.339, 0.337, 0.336, 0.337, 0.338, 0.339, 0.347, 0.357, 0.361, 0.368, 0.37 ], [ 0., 0.06, 0.118, 0.168, 0.214, 0.246, 0.255, 0.258, 0.264, 0.265, 0.266, 0.267, 0.267, 0.267, 0.268, 0.269, 0.269 ], [ 0., 0.046, 0.087, 0.121, 0.159, 0.201, 0.208, 0.213, 0.216, 0.229, 0.236, 0.24, 0.242 ], [ 0.003, 0.01, 0.018, 0.028, 0.036, 0.038, 0.039, 0.039, 0.04, 0.045, 0.046, 0.047 ], ] #z is z/H z_for_z_vs_uw = [ [ 0., 0.002, 0.004, 0.013, 0.125, 0.205, 0.29, 0.297, 0.299, 0.299, 0.31, 0.319, 0.407, 0.523, 0.655, 0.69, 0.7, 0.702, 0.71, 0.755, 0.877, 0.976 ], [ 0.002, 0.002, 0.006, 0.007, 0.028, 0.058, 0.078, 0.105, 0.147, 0.202, 0.237, 0.26, 0.279, 0.29, 0.3, 0.37, 0.429, 0.478, 0.576, 0.625, 0.677, 0.707, 0.725, 0.745, 0.779, 0.832, 0.919, 0.986 ], [ 0.002, 0.006, 0.007, 0.038, 0.078, 0.11, 0.158, 0.202, 0.25, 0.289, 0.305, 0.36, 0.437, 0.508, 0.563, 0.625, 0.682, 0.703, 0.743, 0.79, 0.832, 0.882, 0.944 ], [ 0.002, 0.009, 0.017, 0.029, 0.046, 0.064, 0.086, 0.148, 0.257, 0.303, 0.466, 0.566, 0.67, 0.703, 0.81, 0.894, 0.999 ], [ 0.003, 0.067, 0.121, 0.174, 0.235, 0.298, 0.435, 0.564, 0.7, 0.792, 0.855, 0.947, 1.001 ], [ 0.002, 0.072, 0.149, 0.219, 0.299, 0.437, 0.572, 0.667, 0.704, 0.815, 0.893, 0.997 ], ] t_for_z_vs_ua = np.array([1e1, 1e3, 1e4, 1e5, 1e6]) ua_for_z_vs_ua = [ [ 0., 0.119, 0.183, 0.2, 0.201, 0.201, 0.202, 0.189, 0.153, 0.119, 0.108, 0.102, 0.102, 0.102, 0.105, 0.113, 0.129, 0.143, 0.154, 0.159, 0.159, 0.159, 0.159, 0.159 ], [ 0., 0.027, 0.065, 0.094, 0.128, 0.157, 0.179, 0.191, 0.197, 0.201, 0.201, 0.201, 0.202, 0.201, 0.198, 0.189, 0.179, 0.166, 0.15, 0.135, 0.123, 0.117, 0.11, 0.107, 0.104, 0.103, 0.102, 0.103, 0.104, 0.106, 0.108, 0.11, 0.114, 0.122, 0.13, 0.138, 0.147, 0.154, 0.158, 0.16, 0.16, 0.16 ], [ 0., 0.016, 0.04, 0.057, 0.086, 0.114, 0.132, 0.142, 0.147, 0.148, 0.146, 0.139, 0.127, 0.122, 0.119, 0.118, 0.116, 0.116, 0.116, 0.117, 0.117, 0.125, 0.137, 0.144, 0.152, 0.156, 0.158, 0.159, 0.159 ], [ 0., 0.021, 0.048, 0.063, 0.075, 0.089, 0.103, 0.105, 0.108, 0.11, 0.111, 0.113, 0.114, 0.118, 0.122, 0.125, 0.129, 0.129 ], [ 0., 0.006, 0.012, 0.02, 0.021, 0.022, 0.022, 0.022, 0.024, 0.025, 0.025 ], ] z_for_z_vs_ua = [ [ 0., 0.003, 0.008, 0.012, 0.023, 0.161, 0.283, 0.295, 0.298, 0.303, 0.31, 0.318, 0.396, 0.676, 0.693, 0.699, 0.702, 0.702, 0.707, 0.716, 0.772, 0.853, 0.914, 0.969 ], [ 0., 0.005, 0.016, 0.024, 0.035, 0.047, 0.061, 0.078, 0.086, 0.107, 0.12, 0.154, 0.178, 0.198, 0.225, 0.246, 0.261, 0.269, 0.283, 0.295, 0.3, 0.323, 0.367, 0.4, 0.446, 0.491, 0.515, 0.546, 0.583, 0.617, 0.648, 0.67, 0.7, 0.709, 0.716, 0.728, 0.74, 0.757, 0.779, 0.816, 0.887, 0.976 ], [ 0.003, 0.01, 0.031, 0.048, 0.074, 0.103, 0.135, 0.155, 0.181, 0.201, 0.228, 0.251, 0.284, 0.3, 0.369, 0.42, 0.48, 0.542, 0.605, 0.665, 0.704, 0.731, 0.772, 0.802, 0.853, 0.899, 0.938, 0.971, 0.998 ], [ 0., 0.061, 0.136, 0.175, 0.214, 0.26, 0.298, 0.357, 0.464, 0.542, 0.626, 0.702, 0.727, 0.761, 0.806, 0.858, 0.933, 1.001 ], [ 0.002, 0.082, 0.177, 0.297, 0.418, 0.554, 0.661, 0.701, 0.812, 0.914, 0.995 ], ] z_for_uw_vs_t = np.array([1.5, 4.5, 8.5]) t_for_uw_vs_t = [ [ 1.42100000e+00, 4.12800000e+00, 1.23410000e+01, 5.68400000e+01, 7.17913000e+02, 1.43367000e+03, 2.27363000e+03, 3.30788000e+03, 4.81306000e+03, 6.06455000e+03, 7.00754000e+03, 9.08780000e+03, 1.11271000e+04, 1.66725000e+04, 2.35847000e+04, 3.14819000e+04, 4.32394000e+04, 6.85894000e+04, 1.08791000e+05, 1.88155000e+05, 3.25448000e+05, 5.16347000e+05, 8.19144000e+05, 1.83676000e+06, 3.46322000e+06, 4.89594000e+06, 6.72573000e+06, 8.72317000e+06, 1.26974000e+07, 1.55475000e+07, 1.90345000e+07, 2.33071000e+07, 2.93759000e+07, 3.70178000e+07, 4.66387000e+07, 6.22643000e+07, 8.55306000e+07, 1.14164000e+08, 1.91904000e+08, 2.71400000e+08, 3.41985000e+08, 4.56585000e+08, 5.58882000e+08, 7.46091000e+08, 9.96106000e+08, 1.40839000e+09, 2.04896000e+09, 2.89590000e+09 ], [ 1.23600000e+00, 3.50792000e+02, 7.20940000e+02, 1.66261000e+03, 3.22543000e+03, 6.43960000e+03, 1.24921000e+04, 2.42368000e+04, 3.52516000e+04, 6.09651000e+04, 9.95393000e+04, 1.53433000e+05, 2.04749000e+05, 2.81271000e+05, 3.54390000e+05, 5.01146000e+05, 6.68853000e+05, 9.45692000e+05, 1.37634000e+06, 1.94554000e+06, 3.66834000e+06, 1.30371000e+07, 1.89620000e+07, 2.67987000e+07, 3.78852000e+07, 5.05610000e+07, 7.35855000e+07, 9.82439000e+07, 1.27409000e+08, 1.56007000e+08, 2.08305000e+08, 2.55124000e+08, 3.21570000e+08, 3.93884000e+08, 4.82343000e+08, 5.90696000e+08, 6.82810000e+08, 8.12285000e+08, 9.66359000e+08, 1.21822000e+09, 1.58001000e+09, 2.10846000e+09, 2.89576000e+09 ], [ 1.23300000e+00, 1.39543000e+03, 2.95200000e+03, 5.56549000e+03, 1.24764000e+04, 2.87852000e+04, 6.83609000e+04, 1.36602000e+05, 2.29677000e+05, 4.59284000e+05, 7.08468000e+05, 1.26217000e+06, 2.00252000e+06, 3.46288000e+06, 1.16165000e+07, 3.00701000e+07, 5.35142000e+07, 8.24844000e+07, 1.16636000e+08, 1.51268000e+08, 1.90647000e+08, 2.47362000e+08, 3.02988000e+08, 3.71159000e+08, 4.54668000e+08, 6.25380000e+08, 8.11854000e+08, 1.05378000e+09, 1.29031000e+09, 1.77332000e+09, 2.65580000e+09, 3.64678000e+09 ], ] #uw is uw/q0 uw_for_uw_vs_t = [ [ 0.401, 0.402, 0.401, 0.402, 0.4, 0.4, 0.399, 0.394, 0.387, 0.377, 0.37, 0.36, 0.347, 0.331, 0.313, 0.302, 0.297, 0.292, 0.288, 0.283, 0.276, 0.268, 0.261, 0.251, 0.248, 0.241, 0.232, 0.22, 0.207, 0.193, 0.182, 0.169, 0.154, 0.142, 0.134, 0.12, 0.112, 0.102, 0.091, 0.077, 0.066, 0.052, 0.045, 0.032, 0.018, 0.008, 0.004, 0.002 ], [ 0.325, 0.325, 0.327, 0.329, 0.332, 0.336, 0.339, 0.34, 0.34, 0.336, 0.33, 0.323, 0.317, 0.307, 0.298, 0.286, 0.278, 0.269, 0.258, 0.253, 0.249, 0.249, 0.249, 0.247, 0.24, 0.233, 0.222, 0.207, 0.197, 0.184, 0.168, 0.15, 0.134, 0.115, 0.1, 0.084, 0.07, 0.057, 0.044, 0.025, 0.013, 0.008, 0.003 ], [ 0.369, 0.369, 0.369, 0.367, 0.361, 0.356, 0.349, 0.338, 0.323, 0.3, 0.28, 0.26, 0.252, 0.249, 0.25, 0.249, 0.248, 0.241, 0.23, 0.219, 0.205, 0.186, 0.167, 0.146, 0.125, 0.094, 0.066, 0.041, 0.028, 0.011, 0.003, 0.002 ], ] z_for_ua_vs_t = z_for_uw_vs_t t_for_ua_vs_t = [ [ 1.12200000e+00, 2.66400000e+00, 1.09350000e+01, 3.08580000e+01, 1.59497000e+02, 6.93508000e+02, 1.55414000e+03, 2.53662000e+03, 3.48279000e+03, 4.51407000e+03, 5.68451000e+03, 6.95509000e+03, 8.50966000e+03, 9.82858000e+03, 1.16838000e+04, 1.34947000e+04, 1.69937000e+04, 2.07921000e+04, 2.40146000e+04, 3.20355000e+04, 4.39850000e+04, 7.17910000e+04, 1.04418000e+05, 1.47557000e+05, 2.02597000e+05, 2.62588000e+05, 3.30673000e+05, 4.54016000e+05, 5.39716000e+05, 6.41592000e+05, 8.31572000e+05, 1.17513000e+06, 1.56763000e+06, 2.21530000e+06, 3.04161000e+06 ], [ 1.22400000e+00, 4.87900000e+00, 2.74980000e+01, 2.18991000e+02, 5.35070000e+02, 9.80029000e+02, 1.79501000e+03, 3.19434000e+03, 5.36614000e+03, 8.50966000e+03, 1.31113000e+04, 2.02014000e+04, 3.29722000e+04, 5.38163000e+04, 8.29179000e+04, 1.20601000e+05, 1.56312000e+05, 2.14617000e+05, 2.78167000e+05, 3.71075000e+05, 4.67291000e+05, 5.55496000e+05, 7.19982000e+05, 9.88539000e+05, 1.17513000e+06, 1.52310000e+06, 2.09122000e+06, 2.78970000e+06 ], [ 1.18900000e+00, 3.76500000e+00, 1.41720000e+01, 7.11730000e+01, 3.47277000e+02, 1.50999000e+03, 2.92977000e+03, 5.52303000e+03, 9.01454000e+03, 1.51435000e+04, 2.69487000e+04, 5.38163000e+04, 9.30488000e+04, 1.47557000e+05, 1.91250000e+05, 2.47881000e+05, 3.21280000e+05, 4.04584000e+05, 4.80953000e+05, 6.05658000e+05, 7.62699000e+05, 9.06665000e+05, 1.14175000e+06, 1.39695000e+06, 1.81060000e+06, 2.55864000e+06, 3.51303000e+06 ] ] #ua is ua/q0 ua_for_ua_vs_t = [ [ 0.201, 0.201, 0.202, 0.201, 0.201, 0.201, 0.201, 0.197, 0.191, 0.184, 0.173, 0.163, 0.152, 0.142, 0.131, 0.12, 0.108, 0.096, 0.085, 0.073, 0.063, 0.056, 0.053, 0.048, 0.044, 0.04, 0.035, 0.029, 0.025, 0.02, 0.014, 0.009, 0.004, 0.002, 0. ], [ 0.102, 0.102, 0.102, 0.102, 0.101, 0.103, 0.105, 0.109, 0.112, 0.116, 0.119, 0.121, 0.12, 0.117, 0.111, 0.104, 0.097, 0.088, 0.077, 0.066, 0.058, 0.049, 0.036, 0.024, 0.016, 0.009, 0.003, 0.001 ], [ 0.159, 0.159, 0.158, 0.159, 0.159, 0.159, 0.158, 0.156, 0.153, 0.148, 0.142, 0.137, 0.127, 0.116, 0.107, 0.097, 0.085, 0.074, 0.064, 0.052, 0.039, 0.031, 0.021, 0.013, 0.007, 0.002, 0.001 ], ] z = np.linspace(0, 1, 101) t = np.logspace(0, 10, 101) #these should include the t for z vs u values. dq = 1.0 reader = textwrap.dedent("""\ #from geotecha.piecewise.piecewise_linear_1d import PolyLine #import numpy as np # shan et al, H = 10 #m drn = 1 neig = 200 mvref = 1e-4 #1/kPa kwref = 1.0e-9 #m/s karef = 1e-8 #m/s Daref = karef / 10 # from equation ka=Da*g wa = 29.0e-3 #kg / mol R = 8.31432 #J/(mol.K) ua_= 101 #kPa T = 273.16 + 20 dTa = Daref /(mvref) / (wa*ua_/(R*T))/ H ** 2 dTw = kwref / mvref/ 10 / H**2 dT = max(dTw,dTa) kw = PolyLine([0,0.3,0.7], [0.3,0.7,1.0], [0.1,1,0.1], [0.1,1,0.1]) Da = PolyLine([0,0.3,0.7], [0.3,0.7,1.0], [0.1,1,0.1], [0.1,1,0.1]) S = PolyLine([0,0.3,0.7], [0.3,0.7,1.0], [0.8,0.6,0.7], [0.8,0.6,0.7]) n = PolyLine([0,0.3,0.7], [0.3,0.7,1.0], [0.45,0.5,0.4], [0.45,0.5,0.4]) m1s = -2.5 m2s = 0.4*m1s m1w = 0.2*m1s m2w = 4*m1w m1a = m1s-m1w m2a = m2s-m2w #print(m1w,m2w,m1a,m2a) m1kw = PolyLine([0,1], [m1w]*2) m2w = PolyLine([0,1], [m2w]*2) m1ka = PolyLine([0,1], [m1a]*2) m2a = PolyLine([0,1], [m2a]*2) surcharge_vs_depth = PolyLine([0,1], [1,1]) surcharge_vs_time = PolyLine([0,0,10000], [0, {dq}, {dq}]) ppress_z = np.{z} #avg_ppress_z_pairs = [[0,1]] #settlement_z_pairs = [[0,1]] tvals = np.{t} #ppress_z_tval_indexes = slice(None, len(tua)+len(tuw)) #avg_ppress_z_pairs_tval_indexes = slice(None, None)#[0,4,6] #settlement_z_pairs_tval_indexes = slice(len(tua)+len(tuw),len(tua)+len(tuw)+len(tset)) save_data_to_file= False save_figures_to_file= False show_figures= False """.format(t=repr(t), z=repr(z), dq=dq)) i_for_uw_vs_t = np.searchsorted(z, z_for_uw_vs_t / 10.0) i_for_ua_vs_t = np.searchsorted(z, z_for_ua_vs_t / 10.0) i_for_z_vs_uw = np.searchsorted(t, t_for_z_vs_uw) i_for_z_vs_ua = np.searchsorted(t, t_for_z_vs_ua) a = Speccon1dUnsat(reader) a.make_all() #calculated values to plot calc_uw_vs_t = [a.porw[v, :] / dq for v in i_for_uw_vs_t] calc_ua_vs_t = [a.pora[v, :] / dq for v in i_for_ua_vs_t] calc_z_vs_uw = [a.porw[:, v] / dq for v in i_for_z_vs_uw] calc_z_vs_ua = [a.pora[:, v] / dq for v in i_for_z_vs_ua] #The remainder of this sub is for plotting with matplotlib matplotlib.rcParams['font.size'] = 10 fig = plt.figure(figsize=(3.54, 3.54)) ax = fig.add_subplot(1, 1, 1) ax.set_xlabel('Time (s)') ax.set_ylabel('Water pressure $u_w/q_0$') ax.set_xscale('log') styles = [ dict(dashes=[4, 1], color='black'), dict(dashes=[8, 2], color='black'), dict(dashes=[5, 2, 2, 2], color='black') ] for jj, zz in enumerate(z_for_uw_vs_t): label_calc = "$z={}m$".format(zz) if jj == len(z_for_uw_vs_t) - 1: label_expect = "Shan et al.\n2014" else: label_expect = None ax.plot(t, calc_uw_vs_t[jj], label=label_calc, **styles[jj]) ax.plot(t_for_uw_vs_t[jj], uw_for_uw_vs_t[jj], marker='o', markersize=3, color='black', markerfacecolor='none', ls="None", label=label_expect) leg = ax.legend(loc=3, labelspacing=0.0) plt.setp(leg.get_title(), fontsize=8) leg.get_frame().set_edgecolor('white') leg.draggable() fig.subplots_adjust(top=0.97, bottom=0.15, left=0.2, right=0.94) fig2 = plt.figure(figsize=(3.54, 3.54)) ax = fig2.add_subplot(1, 1, 1) ax.set_xlabel('Time (s)') ax.set_ylabel('Air pressure $u_a/q_0$') ax.set_xscale('log') ax.set_ylim([0, 0.25]) for jj, zz in enumerate(z_for_ua_vs_t): label_calc = "$z={}m$".format(zz) if jj == len(z_for_ua_vs_t) - 1: label_expect = "Shan et \nal.(2014)" else: label_expect = None ax.plot(t, calc_ua_vs_t[jj], label=label_calc, **styles[jj]) ax.plot(t_for_ua_vs_t[jj], ua_for_ua_vs_t[jj], marker='o', markersize=3, color='black', markerfacecolor='none', ls='None', label=label_expect) leg = ax.legend(loc=1, labelspacing=0.0) plt.setp(leg.get_title(), fontsize=8) leg.get_frame().set_edgecolor('white') leg.draggable() fig2.subplots_adjust(top=0.97, bottom=0.15, left=0.2, right=0.94) return fig, fig2
#settlement_z_pairs = [[0,1]] tvals = np.{t} #ppress_z_tval_indexes = slice(None, len(tua)+len(tuw)) #avg_ppress_z_pairs_tval_indexes = slice(None, None)#[0,4,6] #settlement_z_pairs_tval_indexes = slice(len(tua)+len(tuw),len(tua)+len(tuw)+len(tset)) save_data_to_file= False save_figures_to_file= False show_figures= False """.format(t=repr(t), z = repr(z))) a = Speccon1dUnsat(reader) a.make_all() # custom plots title = ("Shan et al. (2012) Unsaturated soil. instant surcharge + \nsinusoidal top water pressure boundary consdition.") fig = plt.figure(figsize=(9,6)) fig.suptitle(title) #z vs ua ax1 = fig.add_subplot("121") ax1.set_xlabel('Excess pore pressure in air, kPa') ax1.set_ylabel('Depth') ax1.invert_yaxis() ax1.plot(pora, z, ls="None", color='Blue', marker="+", ms=5, label='expected')
directory= r"C:\\Users\\Rohan Walker\\Documents\\temp" #may always need the r save_data_to_file= False save_figures_to_file= False show_figures= False overwrite=True #prefix="silly" #create_directory=True #data_ext = '.csv' #input_ext='.py' figure_ext='.png' """) a = Speccon1dUnsat(my_code) a.make_all() # a.print_eigs() if 1: #only use this if there is one z interval fig = plt.figure() ax = fig.add_subplot('111') ax.plot(a.tvals, a.set[0], 'ro', ls='-', label='combined') ax.plot(a.tvals, a.setw[0], 'bs', ls='-', label='water') ax.plot(a.tvals, a.seta[0], 'g*', ls='-', label='air') ax.set_xlabel('Time') ax.set_ylabel('Settlement') ax.set_xscale('log')