NTNUJAVA Virtual Physics LaboratoryEnjoy the fun of physics with simulations! Backup site http://enjoy.phy.ntnu.edu.tw/ntnujava/
April 11, 2021, 11:25:01 pm

Use resources around us effectively. ...Wisdom

 Pages: [1]   Go Down
 Author Topic: Event for ODE Evolution Page in EJS  (Read 8756 times) 0 Members and 1 Guest are viewing this topic. Click to toggle author information(expand message area).
lookang
Hero Member

Offline

Posts: 1796

http://weelookang.blogspot.com

 « Embed this message on: November 26, 2008, 09:42:01 am »

Can explain what this do? I can't make sense of it

Zero condition

if(vy>0) return 1;  // particle is not falling  {what does return 1 mean?} which i found out later means do nothing

return y;  // displacement of particle above floor {why return y?} which i found out later means check for y = 0 to action

Action  Check box End step at event

// action if particle is falling and below the floor
vy = Math.abs(vy)*coef_of_restitution;  {to return the value of Math.abs(vy)*coef_of_restitution to variable vy to simulate hitting n bouncing up like collision}

ODE {Ordinary Differential Equations} page is

dy/dt = vy

and

dvy/dt = - g

 « Last Edit: November 26, 2008, 10:32:45 am by lookang » Logged
lookang
Hero Member

Offline

Posts: 1796

http://weelookang.blogspot.com

 « Embed this message Reply #1 on: November 26, 2008, 10:29:49 am »

2.5.4 Events of a differential equation
Sometimes, when we are implementing the evolution of our simulation through the
solution of a system of differential equations, we want the computer to detect that
a given condition which depends on the variables of the system has taken place,
allowing us then to make some corrections to adjust the simulation.
For instance, suppose that the falling body that we are simulating using equations
(2.4) is an elastic ball that we have thrown against the floor. The numerical
solution of these equations doesn’t take into account, by itself, the fact that the
computed solution will eventually take the ball to a position below ground, that
is, y(t) < 0. As the method for numerical solution advances at constants step of
time, it is very likely that the exact moment of the collision of the ball with the
floor doesn’t coincide with any of the solution steps of the algorithm, taking the ball
to a, let’s put it this way, ‘illegal state’. Instead of this, we would have preferred
that the computer had detected the problem and had momentaneously stopped at
the precise instant of the collision, applying then the code necessary to simulate the
rebounding of the ball against the floor, and continuing the simulation from these
new initial conditions. This is the archetypical example of what we call an event.
More precisely, we define an event as the change of sign of a real-valued function
of the state variables (the variables that we differentiate) and of the independent
variable of an ODE. (Events caused only by the independent variable are traditionally
called time events, while those caused by the other variables are called state
events). To simplify the discussion that follows and, since actually all variables depend
on the independent variable, we will denote by h(t) the function that changes

an event is specified by providing: (a) the function h
which depends on the state, (b) the desired tolerance, and (c) the action to invoke
at the event instant.

Creating events for an ODE
Notice that the editor for differential equations includes a button labeled “Events”
and a field that indicates that, by default, there are no events defined for this
equation. Clicking the button “Events” will bring in an independent window with
an editor with a behavior similar to that found in other parts of the model, and
which we can use to create as many pages of events for our differential equation as
we want.
There exist, however, some differences. Observe in Figure 2.16 that a page for
the edition of events appears divided into two sections (besides the text field for

In the upper section of this page we need to indicate how to detect the event. For
this, we need to write the code that computes the function h(t) from the values of

the state and the independent variable of our ODE. This code must end, necessarily,
returning a value of type double. To help us remember this, the editor writes by
default the next code (which, by the way, causes no event at all):
return 1.0;

In the “Tolerance” field on the upper right corner of this section we need to indicate
the value for the tolerance that we want for this event (this is the  in the discussion
above).
The lower section is used to tell the computer what to do when it detects (and
then precisely locates) an event. Recall that this action must solve, or at least
simplify, the situation that triggered the event. In the upper-right corner of this
second section we find a checkbox labeled “Stop at event”, currently activated, that
tells the computer whether it should return from the solution of the ODE at the
instant of the event or not. Notice that, if checked, this causes the real increment
of the independent variable to be smaller that the one originally desired. But still,
checking this option may be useful if you want to appreciate the exact moment of
the event.

We can use our example of the falling ball to construct a sample event. For this,
edit the code of the upper section of the page so that it reads:
return y;
This indicates that the event will take place when the ball reaches the level of the
ground, y = 0. The default value for the tolerance is adequate. As action for the
event, write the code:
vy = -vy;

which simulates a totally elastic rebounding at the instant the event takes place.
Leave the box “Stop at event” checked, so that the system visualizes the instant of
the rebounding.
 « Last Edit: November 26, 2008, 10:35:33 am by lookang » Logged
lookang
Hero Member

Offline

Posts: 1796

http://weelookang.blogspot.com

 « Embed this message Reply #2 on: November 26, 2008, 11:01:35 am »

i messed around the code to come up with this easy to understand codes

if (y<-0.5) return y; // change the value to check where to rebounce example y<1.0
else
return 1;

i finally understand my own codes

no worries! the original codes was confusing/misleading i think deeper meaning than i thought
 « Last Edit: November 26, 2008, 02:40:05 pm by lookang » Logged
Fu-Kwun Hwang
Hero Member

Offline

Posts: 3086

 « Embed this message Reply #3 on: November 26, 2008, 01:46:41 pm »

The original code
Quote
if(vy>0) return 1;
return y;

The above code is the same as
if(vy>0) return 1;
else return y;

if(vy>0) it means that particle is moving upward, so there is no bouncing need to be take care of.
otherwise, it will check if y is less than bouncing point y=0;

You change the code to
if(y<-0.5)return y; it mean that particle will bounced at y=-0.5 (not y=0).

 Logged
lookang
Hero Member

Offline

Posts: 1796

http://weelookang.blogspot.com

 « Embed this message Reply #4 on: November 26, 2008, 02:27:52 pm »

The original code
The above code is the same as
if(vy>0) return 1;
else return y;

if(vy>0) it means that particle is moving upward, so there is no bouncing need to be take care of.
otherwise, it will check if y is less than bouncing point y=0;

Hi prof,
In the examination of the original code,
1. what must be done to include a position of y to rebounce that is to be determine by user instead of the default of y = zero?

Thx!

my codes doesn't work when y = 0.5 for example
Code:
if (y<0.5) return y; // change the value to check where to rebounce example y<1.0

else
return 1; // do nothing

it still bounce at y = 0 strange
 « Last Edit: November 26, 2008, 02:34:14 pm by lookang » Logged
Fu-Kwun Hwang
Hero Member

Offline

Posts: 3086

 « Embed this message Reply #5 on: November 26, 2008, 05:27:49 pm »

If you want to have particle bounced at y=y0; (You can add a slider for user to change y0,too. )
you should change the code to

if(vy>0)return 1;
return y-y0;

How it works in ejs:
If the return value is less than zero, EJS will know it is an event need to be processed.
And EJS will reduce time step to find the most precise point so that return value is almost equal to zero.
process the event, and move forward the time to it should be.

if(y<0.5)return y;

you did not notice the error. Because the relative error is too small for your eye to notice it.
However, the error will accumulate.
If you change the range to y(maximum)=1 you will notice the error easily.
 Logged
lookang
Hero Member

Offline

Posts: 1796

http://weelookang.blogspot.com

 « Embed this message Reply #6 on: November 27, 2008, 07:42:23 am »

if(vy>0)return 1;
return y-y0;

Thanks! i go try it! so the syntax is "return y-y0".

cool!
 Logged
 Pages: [1]   Go Up
Use resources around us effectively. ...Wisdom

 Related Topics Subject Started by Replies Views Last post A bouncing ball (learn how to create event to habdle bouncing condition in EJS) Examples for beginner who want to learn EJS Fu-Kwun Hwang 5 17033 February 05, 2009, 05:51:46 am by walkerouks Free Fall modelling to understand the Event for ODE Evolution Page Collaborative Community of EJS lookang 2 9481 August 03, 2009, 11:24:15 am by lookang how to view the valuesofvariables declared inside for ODE Evolution Page in EJS? Questions related to EJS lookang 1 5832 November 28, 2008, 11:03:57 am by Fu-Kwun Hwang Elastic Collision (1D) Dynamics Fu-Kwun Hwang 3 14857 April 13, 2013, 04:54:31 pm by Fu-Kwun Hwang Doubt in Easy Java Simulation/board:11-100- Questions related to EJS dhasthagheer 1 4101 August 20, 2011, 07:01:50 pm by Fu-Kwun Hwang
Page created in 0.068 seconds with 22 queries.since 2011/06/15