Beispiel #1
0
def test_load_and_save_structure():
    structure = models.SDOFBuilding()
    structure.id = 1
    structure.name = "sample building"
    structure.h_eff = 10.0
    structure.t_fixed = 1.0
    structure.mass_eff = 80000.
    structure.mass_ratio = 1.0  # vertical and horizontal masses are equal
    ecp_output = files.Output()
    ecp_output.add_to_dict(structure)
    ecp_output.name = "test data"
    ecp_output.units = "N, kg, m, s"
    ecp_output.comments = ""

    p_str = json.dumps(ecp_output.to_dict(), skipkeys=["__repr__"], indent=4)
    objs = files.loads_json(p_str)
    assert np.isclose(structure.mass_eff, objs['building'][1].mass_eff)
Beispiel #2
0
def test_load_old_file_w_frame_w_hinges():
    # Define special class for section
    class CustomBeamSection(sfsimodels.models.sections.Section):
        diametertop = None
        fylong = None
        filongtop = None

        def __init__(self):
            super(CustomBeamSection, self).__init__()
            self._extra_class_variables = [
                "diametertop", "fylong", "filongtop", "myplus_section"
            ]
            self.inputs += self._extra_class_variables

    # Attach the section class as the default for the building
    class CustomBuildingFrame2D(sm.FrameBuilding2D):
        _custom_beam_section = CustomBeamSection
        _custom_column_section = None

    fp = test_dir + "/unit_test_data/building_1011_ecp_old.json"

    # Override the base_type-type for building-building_frame2D with the custom model
    objs = files.load_json(
        fp,
        verbose=0,
        custom={"building-building_frame2D": CustomBuildingFrame2D})
    bd = objs["building"][1]
    assert np.isclose(bd.floor_length, 13.05)
    assert np.isclose(bd.beams[0][0].s[0].myplus_section, 97.03)
    assert np.isclose(bd.beams[1][1].s[0].myplus_section,
                      127.85), bd.beams[1][1].s[0].myplus_section
    assert bd.beams[1][0].s[0].diametertop is None
    assert np.isclose(bd.columns[1][0].s[0].nbar_hplusx, 2)
    assert "diametertop" in bd.beams[0][0].s[0].inputs
    ecp_output = files.Output()
    ecp_output.add_to_dict(bd)
    p_str = json.dumps(ecp_output.to_dict(), skipkeys=["__repr__"], indent=4)
    assert '"filongtop"' in p_str
    objs = files.loads_json(p_str)
    bd = objs["building"][1]
    assert np.isclose(bd.beams[0][0].s[0].myplus_section, 97.03)
    assert np.isclose(bd.beams[1][1].s[0].myplus_section,
                      127.85), bd.beams[1][1].s[0].myplus_section
Beispiel #3
0
def test_can_load_then_save_and_load_custom_ecp_w_custom_obj():
    class Cantilever(sm.CustomObject):
        _id = None
        base_type = "cantilever"
        type = "cantilever"
        inputs = ["id", "length", "depth", "e_mod"]

        def to_dict(self, **kwargs):
            outputs = OrderedDict()
            for item in self.inputs:
                outputs[item] = getattr(self, item)
            return outputs

    fp = test_dir + "/unit_test_data/ecp_models_w_custom_obj.json"
    objs, meta_data = files.load_json_and_meta(
        fp, custom={"cantilever-cantilever": Cantilever}, verbose=0)
    assert np.isclose(objs["foundation"][1].length, 1.0)
    assert np.isclose(objs["cantilever"][1].length, 6.0)
    ecp_output = files.Output()
    for m_type in objs:
        for instance in objs[m_type]:
            ecp_output.add_to_dict(objs[m_type][instance])
    ecp_output.name = meta_data["name"]
    ecp_output.units = meta_data["units"]
    ecp_output.comments = meta_data["comments"]
    p_str = json.dumps(ecp_output.to_dict(), skipkeys=["__repr__"], indent=4)
    a = open("temp.json", "w")
    a.write(p_str)
    a.close()
    objs2, md2 = files.loads_json(p_str,
                                  custom={"cantilever-cantilever": Cantilever},
                                  meta=True,
                                  verbose=0)
    for m_type in objs:
        for instance in objs[m_type]:
            for parameter in objs[m_type][instance].inputs:
                p_org = getattr(objs[m_type][int(instance)], parameter)
                p_2nd = getattr(objs2[m_type][int(instance)], parameter)
                assert p_org == p_2nd, (m_type, parameter, p_org, p_2nd)
    for item in meta_data:
        if item == 'sfsimodels_version':
            continue
        assert meta_data[item] == md2[item], (item, meta_data[item], md2[item])
Beispiel #4
0
def test_full_save_and_load():
    system = models.SoilStructureSystem()
    ltd.load_test_data(system)
    assert system.fd.length == 18.0
    ecp_output = files.Output()
    ecp_output.add_to_dict(system.sp)
    ecp_output.add_to_dict(system.fd)
    ecp_output.add_to_dict(system.bd)
    ecp_output.add_to_dict(system)
    ecp_output.name = "all test data"
    ecp_output.units = "N, kg, m, s"
    ecp_output.comments = ""
    p_str = json.dumps(ecp_output.to_dict(), skipkeys=["__repr__"], indent=4)
    a = open("temp.json", "w")
    a.write(p_str)
    a.close()
    objs = files.loads_json(p_str, verbose=0)
    assert np.isclose(system.bd.mass_eff, objs['buildings'][1].mass_eff)

    soil = system.sp.layer(1)
    for item in soil.inputs:
        if getattr(soil, item) is not None:
            if not isinstance(getattr(soil, item), str):
                assert np.isclose(getattr(soil, item),
                                  getattr(objs['soils'][1], item)), item
    for item in system.fd.inputs:
        if getattr(system.fd, item) is not None:
            if isinstance(getattr(system.fd, item), str):
                assert getattr(system.fd,
                               item) == getattr(objs['foundations'][1],
                                                item), item
            else:
                assert np.isclose(getattr(system.fd, item),
                                  getattr(objs['foundations'][1], item)), item
    for item in system.bd.inputs:
        if getattr(system.bd, item) is not None:
            if isinstance(getattr(system.bd, item), str):
                assert getattr(system.bd,
                               item) == getattr(objs['buildings'][1],
                                                item), item
            else:
                assert np.isclose(getattr(system.bd, item),
                                  getattr(objs['buildings'][1], item)), item
Beispiel #5
0
def test_load_and_save_foundation_w_pads():
    fd = models.PadFoundation()
    fd.width = 12  # m
    fd.length = 14  # m
    fd.depth = 0.6  # m
    fd.height = 1.0  # m
    fd.mass = 0.0  # kg
    fd.pad.length = 1.1
    fd.pad.width = 1.1
    fd.n_pads_l = 3
    fd.n_pads_w = 3
    fd.set_pad_pos_in_length_dir_as_equally_spaced()
    fd.set_pad_pos_in_width_dir_as_equally_spaced()
    tie_beams_sect = sm.sections.RCBeamSection()
    tie_beams_sect.depth = fd.height
    tie_beams_sect.width = fd.height
    tie_beams_sect.rc_mat = sm.materials.ReinforcedConcreteMaterial()
    tie_beams_sect.cracked_ratio = 0.6
    fd.tie_beam_sect_in_width_dir = tie_beams_sect
    fd.tie_beam_sect_in_length_dir = tie_beams_sect

    ecp_output = files.Output()
    ecp_output.add_to_dict(fd)
    ecp_output.name = "test data"
    ecp_output.units = "N, kg, m, s"
    ecp_output.comments = ""
    p_str = json.dumps(ecp_output.to_dict(), skipkeys=["__repr__"], indent=4)
    objs = files.loads_json(p_str)
    fd_new = objs['foundation'][1]
    fd_pms = ['width', 'length', 'depth', 'height', 'n_pads_l', 'n_pads_w']
    for item in fd_pms:
        np.isclose(getattr(fd, item), getattr(fd_new, item))
    assert np.sum(
        abs(fd.pad_pos_in_length_dir - fd_new.pad_pos_in_length_dir)) < 1.0e-6
    assert np.sum(
        abs(fd.pad_pos_in_width_dir - fd_new.pad_pos_in_width_dir)) < 1.0e-6
    pad_pms = ['width', 'length', 'depth', 'height']
    for item in pad_pms:
        np.isclose(getattr(fd.pad, item), getattr(fd_new.pad, item))