1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
//
// GENERATED FILE
//
use super::*;
use crate::SpiceContext;
use f2rust_std::*;
struct SaveVars {
VALUE: f64,
}
impl SaveInit for SaveVars {
fn new() -> Self {
let mut VALUE: f64 = 0.0;
VALUE = 0.0;
Self { VALUE }
}
}
/// Half the value of pi
///
/// Return half the value of pi (the ratio of the circumference of
/// a circle to its diameter).
///
/// # Brief I/O
///
/// ```text
/// The function returns half the value of pi.
/// ```
///
/// # Detailed Output
///
/// ```text
/// The function returns half the value of pi (the ratio of
/// a circle's circumference to its diameter), determined by
/// the ACOS function. That is,
///
/// HALFPI = ACOS ( -1.D0 ) * 0.5D0
/// ```
///
/// # Exceptions
///
/// ```text
/// Error free.
/// ```
///
/// # Particulars
///
/// ```text
/// The first time the function is referenced, the value is computed
/// as shown above. The value is saved, and returned directly upon
/// subsequent reference.
/// ```
///
/// # Examples
///
/// ```text
/// The subroutine shown below illustrates the use of HALFPI.
///
/// SUBROUTINE BFTRAN ( RA, DEC, W, TIPM )
///
/// C
/// C Compute the transformation from inertial to body
/// C fixed coordinates, given the directions of the north
/// C pole and prime meridian of the body.
/// C
/// DOUBLE PRECISION RA
/// DOUBLE PRECISION DEC
/// DOUBLE PRECISION W
/// DOUBLE PRECISION TIPM ( 3,3 )
///
/// C
/// C SPICELIB functions
/// C
/// DOUBLE PRECISION HALFPI
///
/// C
/// C The transformation is defined by the compound
/// C rotation
/// C
/// C [W] [pi/2 - Dec] [RA + pi/2]
/// C 3 1 3
/// C
/// CALL ROTATE ( RA + HALFPI(), 3, TIPM)
/// CALL ROTMAT (TIPM, HALFPI() - DEC, 1, TIPM)
/// CALL ROTMAT (TIPM, W, 3, TIPM)
///
/// RETURN
/// END
/// ```
///
/// # Author and Institution
///
/// ```text
/// J. Diaz del Rio (ODC Space)
/// W.L. Taber (JPL)
/// I.M. Underwood (JPL)
/// ```
///
/// # Version
///
/// ```text
/// - SPICELIB Version 1.0.3, 09-JUL-2020 (JDR)
///
/// Edited the header to comply with NAIF standard.
///
/// - SPICELIB Version 1.0.2, 08-APR-2015 (JDR)
///
/// Minor edit to example comments eliminating typos.
///
/// - SPICELIB Version 1.0.1, 10-MAR-1992 (WLT)
///
/// Comment section for permuted index source lines was added
/// following the header.
///
/// - SPICELIB Version 1.0.0, 31-JAN-1990 (WLT) (IMU)
/// ```
pub fn halfpi(ctx: &mut SpiceContext) -> f64 {
let ret = HALFPI(ctx.raw_context());
ret
}
//$Procedure HALFPI ( Half the value of pi )
pub fn HALFPI(ctx: &mut Context) -> f64 {
let save = ctx.get_vars::<SaveVars>();
let save = &mut *save.borrow_mut();
let mut HALFPI: f64 = 0.0;
//
// Local variables
//
//
// Initial values
//
//
// What is there to say?
//
if (save.VALUE == 0.0) {
save.VALUE = (f64::acos(-1.0) * 0.5);
}
HALFPI = save.VALUE;
HALFPI
}