How can I simulate nonlinear vibration of sdof system?
13 views (last 30 days)
Show older comments
Hello everyone, I´m trying to simulate a nonlinear sdof system (see picture).
For this, my program should solve the ODE
% SOLVE d2x/dt2*m + c*dx/dt + k*x + Fr(x) - Fl(x) = F(t)
% initial conditions: x(0) = 0, x'(0)=0
Fr(x) and Fl(x) are the forces of the samples right and left. The mass of the system is clamped between these two. They can be described by a hysteresis, which is calculated by the class "MaterialModel" (attached file).
The approach of my simulation:
At the beginning the function "MaterialModel.fnSetPrestress" is executed. This calculates the prestress and prestrain of the samples at time t = 0. Subsequently, the displacement x of the mass at time t = 0 is calculated. In my case, this is 0, since no external forces are applied and the initial condition is x (0) = 0. In the next time step (t1), the excitation force F (t1) acts on the system, whereby it is deflected. The deflection of the mass results in the right sample being further compressed and the left sample being relaxed. This results in the force Fr (t1) > Fl (t1). For the calculation of Fr (t1) and Fl (t1) the strain eps_r (t1) and eps_l (t1) is first calculated.
The function "MaterialModel.fnCurrentState (eps_r_n, eps_l_n, t_n)" then calculates a delta_eps and delta_t from the difference between the respective values at the current time t1 and the previous time t0. These values are then inserted into the functios "MaterialModel.fnRunPredictorStep; MaterialModel.fnEvaluateFlowCondition; MaterialModel.fnUpdateTemperature;" to calculate the tension of the samples sig_r and sig_l at time t1. The sample forces Fr and Fl can now be calculated using F = sig * A and the Runge-Kutta method (ode45) can solve the ODE up to the time t1 and output the displacement of the mass x (t1). In the last step, the function "MaterialModel.UpdateStateVariables" is called to save the state variables.
After the previously described functions have been executed, the entire sequence for the next time step (t2) is performed until t_end is reached.
The tension of the samples is calculated by a time-incremental predictor-corrector method.
The challenge now is to implement this approach in Matlab. How do I link the solution method of the ODE (ode45) in the program "solver" with the predictor-corrector method in the program "MaterialModell"?
I am happy about any help and feedback. Thanks.
Answers (0)
See Also
Categories
Find more on Assembly in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!