10
10
import fr .sncf .osrd .envelope .part .constraints .EnvelopeConstraint ;
11
11
import fr .sncf .osrd .envelope .part .constraints .SpeedConstraint ;
12
12
import fr .sncf .osrd .envelope_sim .*;
13
- import fr .sncf .osrd .envelope_sim .overlays .EnvelopeCoasting ;
14
- import fr .sncf .osrd .reporting .exceptions .OSRDError ;
15
- import fr .sncf .osrd .reporting .exceptions .ErrorType ;
16
13
17
14
public final class CoastingGenerator {
18
- /** Generate a coasting envelope part which starts at startPos */
19
- public static EnvelopePart coastFromBeginning (
20
- Envelope envelope ,
21
- EnvelopeSimContext context ,
22
- double startPos
23
- ) {
24
- var partBuilder = new EnvelopePartBuilder ();
25
- partBuilder .setAttr (EnvelopeProfile .COASTING );
26
- var constrainedBuilder = new ConstrainedEnvelopePartBuilder (
27
- partBuilder ,
28
- new SpeedConstraint (0 , FLOOR ),
29
- new EnvelopeConstraint (envelope , CEILING )
30
- );
31
- var speed = envelope .interpolateSpeed (startPos );
32
- EnvelopeCoasting .coast (context , startPos , speed , constrainedBuilder , 1 );
33
- if (constrainedBuilder .lastIntersection == 0 )
34
- throw new OSRDError (ErrorType .ImpossibleSimulationError ); // We reached a stop while coasting
35
- if (partBuilder .isEmpty ())
36
- return null ;
37
- return partBuilder .build ();
38
- }
39
15
40
16
/** Generate a coasting envelope part which ends at endPos and never goes below lowSpeedLimit */
41
17
public static EnvelopePart coastFromEnd (
@@ -59,14 +35,12 @@ public static EnvelopePart coastFromEnd(
59
35
double speed = envelope .interpolateSpeed (position );
60
36
var initInter = constrainedBuilder .initEnvelopePart (position , speed , -1 );
61
37
assert initInter ;
62
- boolean reachedLowLimit = false ;
63
38
while (true ) {
64
39
var step = TrainPhysicsIntegrator .step (context , position , speed , Action .COAST , -1 );
65
40
position += step .positionDelta ;
66
41
speed = step .endSpeed ;
67
42
if (speed < lowSpeedLimit ) {
68
43
speed = lowSpeedLimit ;
69
- reachedLowLimit = true ;
70
44
}
71
45
72
46
if (!constrainedBuilder .addStep (position , speed , step .timeDelta ))
@@ -78,11 +52,6 @@ public static EnvelopePart coastFromEnd(
78
52
79
53
assert constrainedBuilder .getLastPos () < endPos ;
80
54
81
- if (!reachedLowLimit && constrainedBuilder .getLastPos () != envelope .getBeginPos ())
82
- return backwardPartBuilder .build ();
83
-
84
- var resultCoast = coastFromBeginning (envelope , context , constrainedBuilder .getLastPos ());
85
- assert resultCoast == null || resultCoast .getEndPos () <= endPos + context .timeStep * speed ;
86
- return resultCoast ;
55
+ return backwardPartBuilder .build ();
87
56
}
88
57
}
0 commit comments