# Intersection Points On QSS Solver¶

```model staticB_crossPlanesEfficient_intersectionVars
Real x, y, vx, vy;

parameter Real c  = 299.792458;
parameter Real m  = 0.510998910;
parameter Real v0 = 0.999*c;
parameter Real B = 0.001;
parameter Real q = 1.;
parameter Real gamma2 = 22.36627204213;

constant Integer N = 0;
parameter Real initialPosition = -40.0;

discrete Integer N1;

discrete Real distBetweenPlanes;

discrete Real crossedPlanes;
discrete Real rightPlane;
discrete Real leftPlane;

discrete Real xInt;
discrete Real yInt;

initial algorithm
x := 0;
y := 0;
vx := v0;
vy := 0;

crossedPlanes := 0;
distBetweenPlanes :=  -2.0 * initialPosition / (N + 1);

// Pesimo hack para testear paridad de N.
N1 := N;
for i in 1:N/2 loop
N1 := N1 - 2;
end for;

if (N1 == 0) then  // N par
rightPlane := distBetweenPlanes/2;
else              // N impar
rightPlane := distBetweenPlanes;
end if;

leftPlane := - rightPlane;

xInt := 0;
yInt := 0;

equation
der(vx) = q*B*c*c * vy / (m*gamma2);
der(vy) = -q*B*c*c * vx / (m*gamma2);
der(x) = vx;
der(y) = vy;

algorithm
when x > rightPlane then
crossedPlanes := crossedPlanes + 1;
rightPlane := rightPlane + distBetweenPlanes;
xInt := x;
yInt := y;
end when;
when x < leftPlane then
crossedPlanes := crossedPlanes + 1;
leftPlane := leftPlane - distBetweenPlanes;
xInt := x;
yInt := y;
end when;
when vx > 0 then
rightPlane := leftPlane + distBetweenPlanes;
end when;
when vx < 0 then
leftPlane := rightPlane - distBetweenPlanes;
end when;
annotation(

experiment(
MMO_Description="StaticB model with crossed planes counter",
MMO_Solver=QSS3,
MMO_Output={x,y,xInt,yInt},
StartTime= 0.0,
StopTime=3339,
Tolerance={ 1e-5},
AbsTolerance={ 1e-8}
));
end staticB_crossPlanesEfficient_intersectionVars;
```