def initialise_frame_building_test_data(): """ Sample data for the FrameBuilding object :param fb: :return: """ number_of_storeys = 6 number_of_bays = 3 fb = em.FrameBuilding(n_storeys=number_of_storeys, n_bays=number_of_bays) fb.material = em.ReinforcedConcrete() interstorey_height = 3.4 # m masses = 40.0e3 # kg fb.interstorey_heights = interstorey_height * np.ones(number_of_storeys) fb.floor_length = 18.0 # m fb.floor_width = 16.0 # m fb.storey_masses = masses * np.ones(number_of_storeys) # kg fb.bay_lengths = [6., 6.0, 6.0] fb.set_beam_prop("depth", [.5, .5, .5]) fb.n_seismic_frames = 3 fb.n_gravity_frames = 0 fb.horz2vert_mass = 1 return fb
def test_ddbd_frame_fixed_large(): n_storeys = 5 n_bays = 1 fb = dm.FrameBuilding(n_storeys, n_bays) fb.material = dm.ReinforcedConcrete() hz = dm.Hazard() fb.interstorey_heights = 3.6 * np.ones(n_storeys) fb.bay_lengths = 6.0 * np.ones(n_bays) fb.set_beam_prop("depth", .6 * np.ones(n_bays)) # m #varies vertically hz.z_factor = 0.3 hz.r_factor = 1.0 hz.n_factor = 1.0 design_drift = 0.02 fb.n_seismic_frames = 1 fb.n_gravity_frames = 0 fb.floor_length = sum(fb.bay_lengths) fb.floor_width = 14.0 # m fb.storey_masses = np.array([488.0, 488.0, 488.0, 488.0, 411.0]) * 1e3 frame_ddbd = dbd.design_rc_frame(fb, hz, design_drift=design_drift)
def test_model_inputs(): p_models = [ dm.Hazard(), dm.FrameBuilding(1, 1), dm.WallBuilding(1), dm.Soil(), dm.ReinforcedConcrete() ] for model in p_models: for parameter in model.required_inputs: assert hasattr(model, parameter), parameter
def initialise_wall_building_test_data(): """ Sample data for the WallBuilding object :return: WallBuilding """ number_of_storeys = 6 wb = em.WallBuilding(number_of_storeys) wb.material = em.ReinforcedConcrete() interstorey_height = 3.4 # m masses = 40.0e3 # kg wb.interstorey_heights = interstorey_height * np.ones(number_of_storeys) wb.floor_length = 18.0 # m wb.floor_width = 16.0 # m wb.storey_masses = masses * np.ones(number_of_storeys) # kg wb.n_walls = 4 wb.wall_depth = 2.0 return wb
def create(): hz = em.Hazard() hz.z_factor = 0.3 # Hazard factor hz.r_factor = 1.0 # Return period factor hz.n_factor = 1.0 # Near-fault factor hz.magnitude = 7.5 # Magnitude of earthquake hz.corner_period = 4.0 # s hz.corner_acc_factor = 0.55 number_of_storeys = 6 number_of_bays = 3 fb = em.FrameBuilding(n_storeys=number_of_storeys, n_bays=number_of_bays) fb.material = em.ReinforcedConcrete() interstorey_height = 3.4 # m masses = 40.0e3 # kg fb.interstorey_heights = interstorey_height * np.ones(number_of_storeys) fb.floor_length = 18.0 # m fb.floor_width = 16.0 # m fb.storey_masses = masses * np.ones(number_of_storeys) # kg fb.bay_lengths = [6., 6.0, 6.0] fb.set_beam_prop("depth", [.5, .5, .5]) fb.n_seismic_frames = 3 fb.n_gravity_frames = 0 fb.horz2vert_mass = 1 df = dbd.design_rc_frame(fb, hz, 0.02) ps = eqdes.moment_equilibrium.assess(df, df.storey_forces) moment_beams_cl = ps[0] moment_column_bases = ps[1] axial_seismic = ps[2] print(moment_beams_cl) eqdes.moment_equilibrium.set_beam_face_moments_from_centreline_demands( df, moment_beams_cl) eqdes.moment_equilibrium.set_column_base_moments_from_demands( df, moment_column_bases) otm_max = eqdes.moment_equilibrium.calc_otm_capacity(df) approx_otm = np.sum(df.storey_forces * df.heights) print(otm_max, approx_otm)
def test_dbd_sfsi_frame_via_millen_et_al_2018(): n_storeys = 5 n_bays = 1 fb = dm.FrameBuilding(n_storeys, n_bays) fb.n_seismic_frames = 2 fb.n_gravity_frames = 0 fb.material = dm.ReinforcedConcrete() fb.bay_lengths = [5.] fb.floor_width = 5. fb.floor_length = 5. fb.storey_masses = 700 * fb.floor_area * np.ones(n_storeys) fb.interstorey_heights = 3.4 * np.ones(n_storeys) fb.tie_depth = 0.8 * np.ones(fb.n_bays) # m fb.tie_width = 0.8 * np.ones(fb.n_bays) # m fb.foundation_rotation = 1e-3 fb.discrete_rotation_ratio = 1.0 fb.AxialLoadRatio = 26 # Should calculate this fb.Base_moment_contribution = 0.6 fb.beam_group_size = 1 fb.set_beam_prop('depth', 0.4, repeat='all') # Foundation fd = dm.PadFoundation() fd.height = 0 # m fd.length = 5 fd.width = 5. fd.depth = 0.8 fd.n_pads_l = 2 fd.n_pads_w = 2 fd.pad.width = 1.4 # m fd.pad.length = 1.4 # m fd.pad.depth = 0.5 # m fd.pad.height = 0 fd.set_pad_pos_in_length_dir_as_equally_spaced() fd.set_pad_pos_in_width_dir_as_equally_spaced() fd.mass = 0 fd2 = fd.deepcopy() # Soil properties hz = dm.Hazard() hz.z_factor = 0.3 hz.r_factor = 1.0 hz.n_factor = 1.0 hz.corner_acc_factor = 2. hz.corner_period = 1 sl = dm.Soil() sl.g_mod = 120e6 # Pa sl.poissons_ratio = 0.3 # Poisson's ratio of the soil sl.e_curr = 0.6 # % sl.phi = 35. sl.cohesion = 0 sl.specific_gravity = 2.65 design_drift = 0.02 frame_ddbd = dbd.design_rc_frame_w_sfsi_via_millen_et_al_2018( fb, hz, sl, fd, design_drift=design_drift, verbose=2) assert np.isclose(frame_ddbd.delta_d, 0.08488596), frame_ddbd.delta_d assert np.isclose(frame_ddbd.theta_f, 0.0050136357), frame_ddbd.theta_f