Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F94177665
Integrateur_test.cpp
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Wed, Dec 4, 12:29
Size
2 KB
Mime Type
text/x-c
Expires
Fri, Dec 6, 12:29 (1 d, 14 h)
Engine
blob
Format
Raw Data
Handle
22752165
Attached To
rSYMKIT symkit
Integrateur_test.cpp
View Options
#include "pendules.h"
#include <iostream>
using
namespace
std
;
//Fonction pour simulation écrite utilisant l'integrateur d'Euler Cromer
// (methode implementée dans la classe Oscillateur)
int
symulate_euler
(
PenduleS
&
pend
,
const
float
&
dt
,
float
time
=
10
)
{
cout
<<
" Debut simulation "
<<
endl
;
if
(
time
>
10
)
{
cout
<<
"Temps de simulation trop eleve, change en 10s"
<<
endl
;
time
=
10
;
}
cout
<<
endl
;
double
t
(
0
);
//Boucle pour afficher les valeurs actuelles de position et vitesse
// et les mettre à jour à chaque pas de temps jusqu'à la fin du temps de simulation
do
{
cout
<<
" At time "
<<
t
<<
" :"
<<
endl
;
cout
<<
pend
<<
endl
;
// Appelle la methode d'integration EulerCromer pour mettre à jour position et vitesse
pend
.
update_EulerC
(
dt
);
t
+=
dt
;
}
while
(
t
<=
time
);
cout
<<
endl
;
cout
<<
" Fin simulation "
<<
endl
;
return
0
;
}
//Fonction pour simulation écrite utilisant l'integrateur NewMark
// (methode implementée dans la classe Oscillateur)
int
symulate_newmark
(
PenduleS
&
pend
,
const
float
&
dt
,
float
time
=
10
)
{
cout
<<
" Debut simulation "
<<
endl
;
if
(
time
>
10
)
{
cout
<<
"Temps de simulation trop eleve, change en 10s"
<<
endl
;
time
=
10
;
}
cout
<<
endl
;
double
t
(
0
);
//Boucle pour afficher les valeurs actuelles de position et vitesse
// et les mettre à jour à chaque pas de temps jusqu'à la fin du temps de simulation
do
{
cout
<<
" At time "
<<
t
<<
" :"
<<
endl
;
cout
<<
pend
<<
endl
;
// Appelle la methode d'integration NewMark pour mettre à jour position et vitesse
pend
.
update_NewMark
(
dt
);
t
+=
dt
;
}
while
(
t
<=
time
);
cout
<<
endl
;
cout
<<
" Fin simulation "
<<
endl
;
return
0
;
}
//Definitions de constantes globale pour notre test
#ifndef M_PI
#define M_PI 3.141592654
#endif
const
Vector
p
=
{
M_PI
/
2
};
const
Vector
p_prime
=
{
0
};
const
double
l
=
1.0
;
const
double
m
=
1.0
;
const
float
dt
=
0.02
;
const
float
total_time
=
20
;
int
main
(
int
argc
,
char
*
argv
[])
{
PenduleS
pendule
(
p
,
p_prime
,
l
,
m
);
//Simulation avec Euler Cromer
symulate_euler
(
pendule
,
dt
,
total_time
);
cout
<<
endl
;
//Simulation avec Newmark
symulate_newmark
(
pendule
,
dt
,
total_time
);
// On pourra maintenant appeler comparer les deux methodes
return
0
;
}
Event Timeline
Log In to Comment