DESERT 4.0.0
woss-groupmobility-3d.h
Go to the documentation of this file.
1//
2// Copyright (c) 2012 Regents of the SIGNET lab, University of Padova.
3// All rights reserved.
4//
5// Redistribution and use in source and binary forms, with or without
6// modification, are permitted provided that the following conditions
7// are met:
8// 1. Redistributions of source code must retain the above copyright
9// notice, this list of conditions and the following disclaimer.
10// 2. Redistributions in binary form must reproduce the above copyright
11// notice, this list of conditions and the following disclaimer in the
12// documentation and/or other materials provided with the distribution.
13// 3. Neither the name of the University of Padova (SIGNET lab) nor the
14// names of its contributors may be used to endorse or promote products
15// derived from this software without specific prior written permission.
16//
17// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
21// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
24// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
26// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
27// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
41#ifndef _WOSS_GROUPMOBMODEL_3D_
42#define _WOSS_GROUPMOBMODEL_3D_
43
44#include "uw-woss-position.h"
45#include <cmath>
46#include <iostream>
47#include <plugin.h>
48
49#include "uwrandomlib.h"
50
51#define sgn(x) (((x) == 0.0) ? 0.0 : ((x) / fabs(x)))
52#define pi (4 * atan(1.0))
53#define earth_radius 6371000.0
54
60class WossGroupMob3D : public WossPosition
61{
62
63public:
72 virtual ~WossGroupMob3D();
73
80
86 virtual double getStartX();
87
93 virtual double getStartY();
94
100 virtual void setLat(double x_coord, double y_coord);
101
107 virtual void setLong(double x_coord, double y_coord);
108
113 virtual double
115 {
116 return charge_;
117 }
118
119 double newx, newy, newz;
121 double vx, vy, vz;
133 virtual int command(int argc, const char *const *argv);
134
135protected:
140 class UpdatePositionTimer : public TimerHandler
141 {
142 public:
147 : TimerHandler()
148 {
149 mod = mo;
150 }
151
156 {
157 }
158
162 virtual void
163 schedule(double val)
164 {
165 resched(val);
166 }
167
168 protected:
169 virtual void expire(Event *e);
173 };
178 virtual void update();
179
185 double Gaussian();
186
193 double distance(WossPosition *pos1, WossPosition *pos2);
194
201 double mirror_posx(double x_coord_node, double x_coord_leader);
202
209 double mirror_posy(double y_coord_node, double y_coord_leader);
210
217 double mirror_posz(double z_coord_node, double z_coord_leader);
218
228 double alpha_;
231 double speedMean_;
236 double pitchMean_;
238 double sigmaPitch_;
249 double updateTime_;
251 double speed_;
253 double direction_;
257 int maddr;
264 double start_x;
266 double start_y;
273 double pitch_;
275 double zmin_;
277 double speedM_;
280 double speedS_;
283 double eta_;
286 double beta_;
289 double charge_;
293 double galpha_;
295 int count;
299 WossPosition *leader_;
305};
306
307#endif // _WOSS_GROUPMBMODEL_3D_
Definition uwrandomlib.h:59
Definition woss-groupmobility-3d.h:141
virtual ~UpdatePositionTimer()
Definition woss-groupmobility-3d.h:155
UpdatePositionTimer(WossGroupMob3D *mo)
Definition woss-groupmobility-3d.h:146
virtual void schedule(double val)
Definition woss-groupmobility-3d.h:163
WossGroupMob3D * mod
Definition woss-groupmobility-3d.h:172
virtual void expire(Event *e)
Definition woss-groupmobility-3d.cpp:66
Definition woss-groupmobility-3d.h:61
double vz
Definition woss-groupmobility-3d.h:121
double alpha_
Definition woss-groupmobility-3d.h:228
double eta_
Definition woss-groupmobility-3d.h:283
double mirror_posz(double z_coord_node, double z_coord_leader)
Definition woss-groupmobility-3d.cpp:290
virtual void setLong(double x_coord, double y_coord)
Definition woss-groupmobility-3d.cpp:378
double vx
Definition woss-groupmobility-3d.h:121
double galpha_
Definition woss-groupmobility-3d.h:293
double start_x
Definition woss-groupmobility-3d.h:264
string gm3dGroupTraceFile
Definition woss-groupmobility-3d.h:297
int maddr
Definition woss-groupmobility-3d.h:257
double speedM_
Definition woss-groupmobility-3d.h:277
virtual void setLat(double x_coord, double y_coord)
Definition woss-groupmobility-3d.cpp:362
UpdatePositionTimer update_position_timer
Definition woss-groupmobility-3d.h:301
int wossgroup_debug_
Definition woss-groupmobility-3d.h:255
double updateTime_
Definition woss-groupmobility-3d.h:249
virtual double getStartX()
Definition woss-groupmobility-3d.cpp:338
WossGroupMob3D()
Definition woss-groupmobility-3d.cpp:78
double pitchMean_
Definition woss-groupmobility-3d.h:236
virtual double getStartY()
Definition woss-groupmobility-3d.cpp:350
double zmin_
Definition woss-groupmobility-3d.h:275
double speedMean_
Definition woss-groupmobility-3d.h:231
double newz
Definition woss-groupmobility-3d.h:119
double pitch_
Definition woss-groupmobility-3d.h:273
virtual ~WossGroupMob3D()
Definition woss-groupmobility-3d.cpp:141
double leaderCharge_
Definition woss-groupmobility-3d.h:291
double zFieldWidth_
Definition woss-groupmobility-3d.h:225
double start_longitude
Definition woss-groupmobility-3d.h:262
int count
Definition woss-groupmobility-3d.h:295
double Gaussian()
Definition woss-groupmobility-3d.cpp:308
double start_latitude
Definition woss-groupmobility-3d.h:260
virtual double getCharge()
Definition woss-groupmobility-3d.h:114
WossPosition * leader_
Definition woss-groupmobility-3d.h:299
BoundType
Defines the behaviour of the node when it reaches an edge of the simulation field.
Definition woss-groupmobility-3d.h:79
@ HARDWALL
Definition woss-groupmobility-3d.h:79
@ REBOUNCE
Definition woss-groupmobility-3d.h:79
@ SPHERIC
Definition woss-groupmobility-3d.h:79
@ THOROIDAL
Definition woss-groupmobility-3d.h:79
double newx
Definition woss-groupmobility-3d.h:119
double y_coord
Definition woss-groupmobility-3d.h:123
double x_coord
Definition woss-groupmobility-3d.h:123
double mirror_posy(double y_coord_node, double y_coord_leader)
Definition woss-groupmobility-3d.cpp:272
virtual void update()
Definition woss-groupmobility-3d.cpp:389
double direction_
Definition woss-groupmobility-3d.h:253
double speedS_
Definition woss-groupmobility-3d.h:280
double mirror_posx(double x_coord_node, double x_coord_leader)
Definition woss-groupmobility-3d.cpp:254
BoundType bound_
Definition woss-groupmobility-3d.h:240
int mtrace_
Definition woss-groupmobility-3d.h:268
virtual int command(int argc, const char *const *argv)
Definition woss-groupmobility-3d.cpp:146
double directionMean_
Definition woss-groupmobility-3d.h:234
double yFieldWidth_
Definition woss-groupmobility-3d.h:222
double z_coord
Definition woss-groupmobility-3d.h:123
double start_y
Definition woss-groupmobility-3d.h:266
Uwrandomlib randlib
Definition woss-groupmobility-3d.h:304
double beta_
Definition woss-groupmobility-3d.h:286
double xFieldWidth_
Definition woss-groupmobility-3d.h:219
double sigmaPitch_
Definition woss-groupmobility-3d.h:238
double distance(WossPosition *pos1, WossPosition *pos2)
Definition woss-groupmobility-3d.cpp:222
double newy
Definition woss-groupmobility-3d.h:119
double vy
Definition woss-groupmobility-3d.h:121
double charge_
Definition woss-groupmobility-3d.h:289
int mtrace_of_node_
Definition woss-groupmobility-3d.h:270
double speed_
Definition woss-groupmobility-3d.h:251
Random function header.