def test_meyerhof_and_hanna_capacity_strong_clay_over_weak_sand(): # STRONG CLAY OVER WEAK SAND length = 1000000000.0 # actually a strip in width = 1.0 depth = 0.0 fd = geofound.create_foundation(length=length, width=width, depth=depth) phi_0 = 0.0 cohesion_0 = 85.0 unit_dry_weight_0 = 16.5 sl_0 = geofound.create_soil(phi=phi_0, cohesion=cohesion_0, unit_dry_weight=unit_dry_weight_0) phi_1 = 17.0 cohesion_1 = 0.0 unit_dry_weight_1 = 17.0 sl_1 = geofound.create_soil(phi=phi_1, cohesion=cohesion_1, unit_dry_weight=unit_dry_weight_1) h0 = 1 # m, height of the crust layer geofound.capacity_meyerhof_and_hanna_1978(sl_0, sl_1, h0, fd, verbose=0) assert np.isclose(fd.q_ult, 187.87, rtol=0.001), fd.q_ult # no independent validation
def test_meyerhof_and_hanna_capacity_strong_sand_over_weak_clay(): # STRONG SAND OVER WEAK CLAY length = 1000000.0 # actually a strip in width = 1.0 depth = 0.0 fd = geofound.create_foundation(length=length, width=width, depth=depth) phi_0 = 34.0 cohesion_0 = 0.0 unit_dry_weight_0 = 17.0 sl_0 = geofound.create_soil(phi=phi_0, cohesion=cohesion_0, unit_dry_weight=unit_dry_weight_0) phi_1 = 0.0 cohesion_1 = 30.0 unit_dry_weight_1 = 17.0 sl_1 = geofound.create_soil(phi=phi_1, cohesion=cohesion_1, unit_dry_weight=unit_dry_weight_1) h0 = 1.5 # m, height of the crust layer geofound.capacity_meyerhof_and_hanna_1978(sl_0, sl_1, h0, fd, verbose=0) assert np.isclose(fd.q_ult, 264.74, rtol=0.001), fd.q_ult
def test_meyerhof_and_hanna_capacity_sand_over_sand_gwl(): # STRONG SAND OVER WEAK SAND length = 1000000.0 # actually a strip in width = 4.0 depth = 1.5 fd = geofound.create_foundation(length=length, width=width, depth=depth) phi_0 = 34.0 cohesion_0 = 0.0 unit_dry_weight_0 = 18000 sl_0 = geofound.create_soil(phi=phi_0, cohesion=cohesion_0, unit_dry_weight=unit_dry_weight_0) sl_0.unit_sat_weight = 20000 phi_1 = 34.0 cohesion_1 = 0.0 unit_dry_weight_1 = 18000 sl_1 = geofound.create_soil(phi=phi_1, cohesion=cohesion_1, unit_dry_weight=unit_dry_weight_1) sl_1.unit_sat_weight = 20000 h0 = 3.0 # m, height of the crust layer # Case 1: GWL at surface gwl = 0.0 q_ult_meyerhof = geofound.capacity_meyerhof_1963(sl_0, fd, gwl=gwl) geofound.capacity_meyerhof_and_hanna_1978(sl_0, sl_1, h0, fd, gwl=gwl, verbose=0) correction = 1.07 corrected_2layer = fd.q_ult * correction assert np.isclose(corrected_2layer, q_ult_meyerhof, rtol=0.01), (corrected_2layer, q_ult_meyerhof / 1000) # Case 2: GWL at between foundation depth and surface gwl = 0.5 q_ult_meyerhof = geofound.capacity_meyerhof_1963(sl_0, fd, gwl=gwl) geofound.capacity_meyerhof_and_hanna_1978(sl_0, sl_1, h0, fd, gwl=gwl, verbose=0) correction = 1.07 corrected_2layer = fd.q_ult * correction assert np.isclose(corrected_2layer, q_ult_meyerhof, rtol=0.01), (corrected_2layer, q_ult_meyerhof / 1000) # Case 3: GWL at between foundation depth and foundation depth plus width, and GWL < layer 1 depth gwl = 1.8 q_ult_meyerhof = geofound.capacity_meyerhof_1963(sl_0, fd, gwl=gwl) geofound.capacity_meyerhof_and_hanna_1978(sl_0, sl_1, h0, fd, gwl=gwl, verbose=0) correction = 1.07 corrected_2layer = fd.q_ult * correction assert np.isclose(corrected_2layer, q_ult_meyerhof, rtol=0.01), (corrected_2layer, q_ult_meyerhof / 1000) # Case 4: GWL at between foundation depth and foundation depth plus width, and GWL > layer 1 depth gwl = 4.8 q_ult_meyerhof = geofound.capacity_meyerhof_1963(sl_0, fd, gwl=gwl) geofound.capacity_meyerhof_and_hanna_1978(sl_0, sl_1, h0, fd, gwl=gwl, verbose=0) correction = 1.03 corrected_2layer = fd.q_ult * correction assert np.isclose(corrected_2layer, q_ult_meyerhof, rtol=0.01), (corrected_2layer, q_ult_meyerhof / 1000) # Case 5: GWL beyond foundation depth plus width gwl = 20. q_ult_meyerhof = geofound.capacity_meyerhof_1963(sl_0, fd, gwl=gwl) geofound.capacity_meyerhof_and_hanna_1978(sl_0, sl_1, h0, fd, gwl=gwl, verbose=0) correction = 1.07 corrected_2layer = fd.q_ult * correction assert np.isclose(corrected_2layer, q_ult_meyerhof, rtol=0.01), (corrected_2layer, q_ult_meyerhof/1000)
def test_karamitros(): # Load ground motion fpath = TEST_DATA_DIR + "input_acc.his" acc_file = np.loadtxt(fpath, skiprows=4) acc = acc_file[:, 1] # define the soils and soil profile sl_0 = sm.Soil() sl_0.phi = 0 sl_0.cohesion = 50000 sl_0.unit_dry_weight = 19600 sl_0.unit_sat_weight = 21000 sl_1 = sm.Soil() sl_1.phi = 33. sl_1.cohesion = 0 sl_1.unit_dry_weight = 19700 sl_1.unit_sat_weight = 21000 soil_profile = sm.SoilProfile() soil_profile.add_layer(0, sl_0) soil_profile.add_layer(4.0, sl_1) soil_profile.gwl = 2. # Define a foundation length = 1000000. fd = sm.Foundation() fd.length = length fd.width = 10.0 fd.depth = 0.0 q = 80000 # applied load z_c = lqs.cal_z_c(fd, z_liq=4, h0=2) vertical_effective_stress = soil_profile.get_v_eff_stress_at_depth(z_c) phi_deg = lqs.calc_degraded_phi(sl_1.phi, vertical_effective_stress, q=q) assert np.isclose(phi_deg, 9.9275389), phi_deg # Not validated sl_1.phi = phi_deg q_ult = gf.capacity_meyerhof_and_hanna_1978(sl_0, sl_1, h0=2, fd=fd, verbose=0) assert np.isclose(q_ult, 107350.07398), q_ult # Not validated dt = 0.005 sett_dyn = lqs.karamitros_settlement(fd, z_liq=4, q=80000, q_ult=q_ult, acc=acc, dt=dt) assert np.isclose( sett_dyn, 0.03242937, rtol=0.001), sett_dyn # 0.03242937 Not validated, liquepy 0.1.11