コード例 #1
0
    def __init__(self, cosim_solver_settings, level):
        super(MDoFSolver, self).__init__(cosim_solver_settings, level)

        input_file_name = self.cosim_solver_settings["input_file"]
        if not input_file_name.endswith(".json"):
            input_file_name += ".json"

        with open(input_file_name, 'r') as ProjectParameters:
            parameters = json.load(ProjectParameters)

        # creating model using a certain module
        model_type = parameters["model_parameters"]["type"]
        model_module = __import__("mdof_" + model_type + "_model")
        self.model = model_module.CreateModel(parameters["model_parameters"])

        # creating model using a certain module
        scheme_type = parameters["time_integration_scheme_parameters"]["type"]
        scheme_module = __import__("time_integration_" + scheme_type +
                                   "_scheme")
        # adding the number of dofs for the constructor of the scheme
        nr_of_dofs = len(self.model.u0)
        if "settings" in parameters["time_integration_scheme_parameters"]:
            parameters["time_integration_scheme_parameters"][
                "settings"].update({"nr_of_dofs": len(self.model.u0)})
        else:
            parameters["time_integration_scheme_parameters"].update(
                {"settings": {
                    "nr_of_dofs": len(self.model.u0)
                }})
        self.scheme = scheme_module.CreateScheme(
            parameters["time_integration_scheme_parameters"])

        default_solver_settings = {"buffer_size": 3}
        default_output_settings = {"file_name": "results_mdof.dat"}

        # solver settings
        RecursivelyValidateAndAssignDefaults(default_solver_settings,
                                             parameters["solver_parameters"])
        # output settings
        RecursivelyValidateAndAssignDefaults(default_output_settings,
                                             parameters["output_parameters"])

        self.buffer_size = parameters["solver_parameters"]["buffer_size"]
        self.output_file_name = parameters["output_parameters"]["file_name"]

        # PMT this might not be needed
        self.load_vector = None

        # 1st dimension: variables: disp, acc, vel
        # 2nd dimension: buffer size -> specified by user
        # see distinction to the buffer size for the scheme which is scheme-specific
        # 3rd dimension: number of dofs
        self.buffer = np.zeros((3, self.buffer_size, nr_of_dofs))
コード例 #2
0
    def __init__(self, model_settings):

        default_settings = {
            "type": "bridge_2dof",
            "system_parameters": {
                "length_of_section": 0.75,
                "help":
                "1st value - translational dof, 2nd value - rotational dof",
                "mass_per_length": [5.0, 0.025],
                "target_frequency": [2.75, 2],
                "damping_log_decr": [0.05, 0.10]
            },
            "initial_conditions": {
                "displacement": [0.05, 0.35],
                "velocity": [0.0, 0.0],
                "acceleration": [0.0, 0.0],
                "external_force": [0.0, 0.0]
            }
        }

        RecursivelyValidateAndAssignDefaults(default_settings, model_settings)

        l = model_settings["system_parameters"]["length_of_section"]

        # heave (translation)
        # mass over unit length as input

        m = model_settings["system_parameters"]["mass_per_length"][0]
        m_h = m * l
        f_h = model_settings["system_parameters"]["target_frequency"][0]
        k_h = m_h * ((2 * np.pi * f_h)**2)
        logd_h = model_settings["system_parameters"]["damping_log_decr"][0]

        # pitch (rotation)
        # inertia over unit length as input
        I = model_settings["system_parameters"]["mass_per_length"][1]
        m_r = I * l
        f_r = model_settings["system_parameters"]["target_frequency"][1]
        k_r = m_r * ((2 * np.pi * f_r)**2)
        logd_r = model_settings["system_parameters"]["damping_log_decr"][1]

        self.m = self._CalculateMass(m_h, m_r)
        self.k = self._CalculateStiffness(k_h, k_r)
        self.b = self._CalculateDamping(m_h, m_r, k_h, k_r, logd_h, logd_r)

        # needed as placeholder
        self.nodal_coordinates = {"x0": None, "y0": None, "x": None, "y": None}

        initial_values = self._SetupInitialValues(
            model_settings['initial_conditions'])
        self.u0 = initial_values["displacement"]
        self.v0 = initial_values["velocity"]
        self.a0 = initial_values["acceleration"]
        self.f0 = initial_values["external_force"]
コード例 #3
0
    def __init__(self, model_settings):

        default_settings = {
                "type": "cantilever_eb_beam_2d",
                "system_parameters":{
                    "density"           : 5.0,
                    "area"              : 10.0,
                    "target_frequency"  : 1.0,
                    "target_mode"       : 1,
                    "damping_ratio"     : 0.05,
                    "level_height"      : 3.5,
                    "number_of_levels"  : 3
                },
                "initial_conditions":{
                    "displacement"  : "none",
                    "velocity"      : "none",
                    "acceleration"  : "none",
                    "external_force": "none"
                }
            }

        RecursivelyValidateAndAssignDefaults(default_settings, model_settings)

        rho = model_settings["system_parameters"]["density"]
        area = model_settings["system_parameters"]["area"]
        target_freq = model_settings["system_parameters"]["target_frequency"]
        # adjust index
        target_mode = model_settings["system_parameters"]["target_mode"] - 1
        zeta = model_settings["system_parameters"]["damping_ratio"]
        level_height = model_settings["system_parameters"]["level_height"]
        num_of_levels = model_settings["system_parameters"]["number_of_levels"]

        self.m = self._CalculateMass(rho, area, level_height, num_of_levels)
        self.k = self._CalculateStiffness(self.m, level_height, num_of_levels, target_freq, target_mode)
        self.b = self._CalculateDamping(self.m, self.k, zeta)

        height_coordinates = self._GetNodalCoordinates(level_height, num_of_levels)

        self.nodal_coordinates = {'x0': np.zeros(len(height_coordinates)),
                             'y0': height_coordinates,
                             'x': None,
                             'y': None}

        initial_values = self._SetupInitialValues(model_settings['initial_conditions'],
                                                  self.nodal_coordinates['y0'])
        self.u0 = initial_values["displacement"]
        self.v0 = initial_values["velocity"]
        self.a0 = initial_values["acceleration"]
        self.f0 = initial_values["external_force"]
コード例 #4
0
    def __init__(self, model_settings):

        default_settings = {
            "type": "sdof",
            "system_parameters": {
                "mass": 1.0,
                "target_frequency": 2.0,
                "damping_ratio": 0.0
            },
            "initial_conditions": {
                "displacement": 0.5,
                "velocity": 0.0,
                "acceleration": 0.0,
                "external_force": 0.0
            }
        }

        RecursivelyValidateAndAssignDefaults(default_settings, model_settings)

        m = model_settings["system_parameters"]["mass"]
        target_freq = model_settings["system_parameters"]["target_frequency"]
        zeta = model_settings["system_parameters"]["damping_ratio"]

        k = self._CalculateStiffness(m, target_freq)
        b = self._CalculateDamping(m, k, zeta)

        # needed as placeholder
        self.nodal_coordinates = {"x0": None, "y0": None, "x": None, "y": None}

        # mass, stiffness and damping matrices
        self.m = np.array([[m]])
        self.k = np.array([[k]])
        self.b = np.array([[b]])

        # initial conditions - displacement, velocity, acceleration, external force
        self.u0 = np.array(
            [model_settings["initial_conditions"]["displacement"]])
        self.v0 = np.array([model_settings["initial_conditions"]["velocity"]])
        self.a0 = np.array(
            [model_settings["initial_conditions"]["acceleration"]])
        self.f0 = np.array(
            [model_settings["initial_conditions"]["external_force"]])
コード例 #5
0
    def __init__(self, cosim_solver_settings, level):

        super(SDoFStaticSolver, self).__init__(cosim_solver_settings, level)
        input_file_name = self.cosim_solver_settings["input_file"]
        if not input_file_name.endswith(".json"):
            input_file_name += ".json"

        with open(input_file_name, 'r') as ProjectParameters:
            parameters = json.load(ProjectParameters)

        default_settings = {
            "system_parameters": {
                "stiffness": 4000.0
            },
            "initial_values": {
                "displacement": 0.0,
            },
            "boundary_conditions": {
                "external_load": 5000.0
            },
            "solver_parameters": {
                "buffer_size": 1
            },
            "output_parameters": {
                "file_name": "sdof_static_solver/results_sdof.dat"
            }
        }

        RecursivelyValidateAndAssignDefaults(default_settings, parameters)

        self.stiffness = parameters["system_parameters"]["stiffness"]

        self.initial_displacement = parameters["initial_values"][
            "displacement"]

        self.force = parameters["boundary_conditions"]["external_load"]

        self.buffer_size = parameters["solver_parameters"]["buffer_size"]

        self.output_file_name = parameters["output_parameters"]["file_name"]
コード例 #6
0
    def __init__(self, cosim_solver_settings, level):
        super(SDoFSolver, self).__init__(cosim_solver_settings, level)

        input_file_name = self.cosim_solver_settings["input_file"]
        if not input_file_name.endswith(".json"):
            input_file_name += ".json"

        with open(input_file_name, 'r') as ProjectParameters:
            parameters = json.load(ProjectParameters)

        default_settings = {
            "system_parameters": {
                "mass": 100.0,
                "stiffness": 4000.0,
                "damping": 6000.0
            },
            "time_integration_parameters": {
                "alpha_m": -0.5,
                "alpha_f": -0.5,
                "time_step": 0.05
            },
            "initial_values": {
                "displacement": 0.0,
                "velocity": 0.0,
                "acceleration": 0.0
            },
            "boundary_conditions": {
                "external_load": 5000.0
            },
            "solver_parameters": {
                "buffer_size": 3
            },
            "output_parameters": {
                "file_name": "sdof_solver/results_sdof.dat"
            }
        }

        RecursivelyValidateAndAssignDefaults(default_settings, parameters)

        self.mass = parameters["system_parameters"]["mass"]
        self.stiffness = parameters["system_parameters"]["stiffness"]
        self.damping = parameters["system_parameters"]["damping"]

        self.alpha_m = parameters["time_integration_parameters"]["alpha_m"]
        self.alpha_f = parameters["time_integration_parameters"]["alpha_f"]
        self.delta_t = parameters["time_integration_parameters"]["time_step"]

        self.initial_displacement = parameters["initial_values"][
            "displacement"]
        self.initial_velocity = parameters["initial_values"]["velocity"]

        self.force = parameters["boundary_conditions"]["external_load"]

        #calculate initial acceleration
        factor = self.force - self.stiffness * self.initial_displacement
        self.initial_acceleration = (1 / self.mass) * factor

        beta = 0.25 * (1 - self.alpha_m + self.alpha_f)**2
        gamma = 0.50 - self.alpha_m + self.alpha_f

        self.LHS = np.array([[1.0, 0.0, -self.delta_t**2 * beta],
                             [0.0, 1.0, -self.delta_t * gamma],
                             [(1 - self.alpha_f) * self.stiffness,
                              (1 - self.alpha_f) * self.damping,
                              (1 - self.alpha_m) * self.mass]])

        self.RHS_matrix = np.array(
            [[1.0, self.delta_t, self.delta_t**2 * (0.5 - beta)],
             [0.0, 1.0, self.delta_t * (1 - gamma)],
             [
                 -self.alpha_f * self.stiffness, -self.alpha_f * self.damping,
                 -self.alpha_m * self.mass
             ]])

        self.buffer_size = parameters["solver_parameters"]["buffer_size"]

        self.output_file_name = parameters["output_parameters"]["file_name"]