fmm_solver module

Python wrapper for the native fedem dynamics solver which operates directly on fedem mechanism model files (*.fmm).

This module relies on the following environment variables:

FEDEM_REDUCER = Full path to the Fedem reducer shared object library
FEDEM_SOLVER = Full path to the Fedem solver shared object library
FEDEM_MDB = Full path to the Fedem model database shared object library

The first variable needs to be set only if FE model reduction is to be performed. The other two variables are mandatory.

This module can also be launched directly, to run a specified model, using the syntax

python -m fedempy.fmm_solver -f mymodel.fmm [--reduce-fem] [--save-model]

This will then invoke the method fmm_solver.FmmSolver.solve_all() on the specified model-file (mymodel.fmm). If you already have a directory populated with Fedem solver input files, you can run the solver directly on those files by launching this module without arguments, i.e.:

python -m fedempy.fmm_solver
class fmm_solver.FmmInverse(model_file, config, use_internal_state=False, keep_res=False)[source]

Bases: FmmSolver, InverseSolver

This class augments FmmSolver with inverse solution capabilities.

Parameters:
model_filestr

Absolute path to the fedem model file to start the simulation on

configdictionary

Inverse solver configuration

use_internal_statebool, default=False

If True, internal state arrays are allocated (for microbatching)

keep_resbool, default=False

Option to not overwrite any existing res-file in the RDB directory

Methods

add_rhs_vector(r_vec)

Utility updating the content of the system right-hand-side vector.

check_times(xtimes[, use_times])

Utility checking that a given time series starts with the current solver time.

close_model([save, remove_singletons])

Closes the currently open model.

compute_int_forces_from_displ(disp, ids)

This method computes beam section forces in triads for the given displacement field.

compute_rel_dist_from_displ(disp, ids)

This method computes the relative distance at sensors for the given displacement field.

compute_spring_var_from_displ(disp, ids)

This method computes one of the spring variables (length, deflection, force) at sensors for the given displacement field.

compute_strains_from_displ(disp, gauge_ids)

This method computes the strain tensor at gauges for the given displacement field, or from current state if no displacements provided.

convert_rev_joint_force(data)

Modify the data set for spring force input for revolute joints with defined spring forces Conversation from force to lenght x=F/k (const.

finish_step()

This method completes current time (or load) step, by iterating the linearized equation system until convergence is achieved.

get_current_strains(gauge_ids)

This method computes the strain tensor at gauges from current state.

get_current_time()

Utility returning the current physical time of the simulation.

get_damping_matrix()

Utility returning current content of the system damping matrix.

get_element_stiffness_matrix(bid)

Utility returning the initial content of an element stiffness matrix.

get_equations(bid)

Utility returning the equation numbers for the DOFs of the object with the specified base Id (bid).

get_external_force_vector()

Utility returning current content of the external force vector.

get_function([uid, tag, arg])

Utility evaluating a general function in the model, identified by the specified user Id uid or tag, and with the function argument arg.

get_function_ids(tags)

Utility returning a list of user Ids of tagged general functions.

get_functions(uids)

Utility evaluating a list of general functions for current state.

get_gauge_size()

Utility returning the required size of the initial strain gauge array which is used when restarting a simulation from an in-core array.

get_joint_spring_stiffness(bid)

Get joint spring stiffness coefficient(s).

get_mass_matrix()

Utility returning current content of the system mass matrix.

get_newton_matrix()

Utility returning current content of the system Newton matrix.

get_next_time()

Utility returning the physical time of the next step of the simulation.

get_part_deformation_state_size(base_id)

Utility returning the required length of the state vector which stores deformation data for the FE Part with the given base Id.

get_part_stress_state_size(base_id)

Utility returning the required length of the state vector which stores von Mises stresses for the FE Part with the given base Id.

get_rhs_vector()

Utility returning current content of the system right-hand-side vector.

get_state_size()

Utility returning the required length of the state vector which is used when restarting a simulation from an in-core array.

get_stiffness_matrix()

Utility returning current content of the system stiffness matrix.

get_system_dofs()

Utiloty returning the total number of DOFs of the system.

get_system_size()

Utility returning the dimension (number of equations) of the system.

get_transformation_state_size()

Utility returning the required length of the vector which stores the transformation matrices (rotation and translation) for Triads, Parts and Beams.

restart_from_state(state_data[, write_to_rdb])

This method re-initializes the mechanism objects with data from the provided state array, such that the simulation can continue from there.

run_all(options)

This method runs the dynamics solver with given command-line options, without any user intervention.

run_inverse(inp_data, out_def)

Collector for different inverse methods.

run_inverse_dyn(inp_data, out_def)

Inverse solution driver (dynamic case).

run_inverse_fedem(inp_data, out_def)

This method uses fedem's inverse solution in fortran

save_gauges()

This method stores initial gauge strains in the self.gauge_data array.

save_part_state(base_id, def_state, str_state)

This method stores current deformation- and stress states for the specified FE Part in the provided core arrays.

save_state()

This method stores current solver state in the self.state_data array.

save_transformation_state(state_data)

This method stores current transformation state for Triads, Parts and Beams in the provided core array.

set_ext_func(func_id[, value])

This method may be used prior to the solve_next call, to assign a sensor value from a physical twin to the specified actuator or load in the model, identified by the argument func_id (external function Id).

set_input(func_tag[, value])

This method may be used prior to the solve_next call, to assign a sensor value from a physical twin to the specified actuator or load in the model, identified by the argument func_tag.

set_rhs_vector(r_vec)

Utility replacing current content of the system right-hand-side vector.

solve_all(model_file[, save_model, reduce_fem])

Starts and runs through a simulation on the specified model file.

solve_inverse(x_val, x_def, g_def[, out_def])

This method solves the inverse problem at current time/load step, assuming small deformations only (linear response).

solve_iteration()

This method solves the current linearized equation system and updates all state variables.

solve_modes(n_modes[, dof_order, use_lapack])

This method solves the eigenvalue problem at current time step, and returns the computed eigenvalues and associated eigenvectors.

solve_next([inp, inp_def, out_def, time_next])

This method advances the solution one time/load step forward.

solve_window(n_step[, inputs, f_out, xtimes])

This method solves the problem for a time/load step window, with given values for the external functions, and extraction of results from another set of general functions in the model.

solver_close()

This method needs to be used if solver_done() was invoked with its remove_singletons argument set to False.

solver_done([remove_singletons])

This method should be used when the time/load step loop is finished.

solver_init(options[, fsi, state_data, ...])

This method processes the input and sets up necessary data structures prior to the time integration loop.

start(model_file[, keep_old_res, ...])

Starts a simulation on the specified model file.

start_step([time_next])

This method starts a new time (or load) step, by calculating the predicted response, the coefficient matrix and right-hand-side vector of the first nonlinear iteration.

class fmm_solver.FmmSolver(model_file=None, use_internal_state=False, keep_old_res=False)[source]

Bases: FedemSolver

This subclass of FedemSolver adds the possibility to start a simulation on a specified fedem model file.

Parameters:
model_filestr, default=None

Absolute path to the fedem model file to start the simulation on

use_internal_statebool, default=False

If True, internal state arrays are allocated (for microbatching)

keep_old_resbool, default=False

Option to not overwrite any existing res-file in the RDB directory

Methods

start:

Starts a simulation on the specified model file

close_model:

Closes the currently open model

solve_all:

Starts and runs through a simulation on the specified model file

set_input:

Assigns sensor value to a tagged external function

close_model(save=False, remove_singletons=False)[source]

Closes the currently open model.

Parameters:
savebool, default=False

If True, the model file is updated based on current result files

remove_singletonsbool, default=False

If True, heap-allocated singelton objects are also released

Returns:
bool

True on success, otherwise False

set_input(func_tag, value=None)[source]

This method may be used prior to the solve_next call, to assign a sensor value from a physical twin to the specified actuator or load in the model, identified by the argument func_tag.

Parameters:
func_tagstr

Tag of the external function to be assigned new value

valuefloat, default=None

The value to be assigned

Returns:
bool

Always True, unless the specified function is not found

solve_all(model_file, save_model=True, reduce_fem=False)[source]

Starts and runs through a simulation on the specified model file.

Parameters:
model_filestr

Absolute path of the Fedem model file to run the solver on

save_modelbool, default=True

If True, save the model file with new results when solver finished

reduce_fembool, default=False

If True, and the model contains FE parts, they will be reduced before the solver is started, unless the reduced matrix files already exist

Returns:
int

Zero on success, otherwise negative

start(model_file, keep_old_res=False, close_model=False, reduce_fem=False, state_data=None, gauge_data=None, extf_input=None, time_start=None)[source]

Starts a simulation on the specified model file.

Parameters:
model_filestr

Absolute path of the Fedem model file to run the solver on

keep_old_resbool, default=False

Option to not overwrite any existing res-file in the RDB directory

close_modelbool, default=False

If True, release the model from memory before solver start

reduce_fembool, default=False

If True, and the model contains FE parts, they will be reduced before the solver is started, unless the reduced matrix files already exist

state_datalist of float, default=None

Complete state vector to restart simulation from

gauge_datalist of float, default=None

Initial strain gauge values for restart

extf_inputlist of float, default=None

Initial external function values, for initial equilibrium iterations

time_startfloat, default=None

Optional start time of simulation, override setting in model file

Returns:
int

Zero on success, otherwise negative