• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

OpenMDAO / dymos / 16078171969

04 Jul 2025 04:57PM UTC coverage: 93.299% (-0.4%) from 93.679%
16078171969

Pull #1196

github

web-flow
Merge 7360e04cc into ebcb0fa7d
Pull Request #1196: New Radau: Part 2

949 of 1048 new or added lines in 33 files covered. (90.55%)

136 existing lines in 13 files now uncovered.

34485 of 36962 relevant lines covered (93.3%)

6.82 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

14.29
/dymos/examples/low_thrust_spiral/low_thrust_ode.py
1
import openmdao.api as om
8✔
2
import numpy as np
8✔
3

4

5
class LowThrustODE(om.ExplicitComponent):
8✔
6
    def initialize(self):
8✔
UNCOV
7
        self.options.declare('num_nodes', types=int)
×
8

9
    def setup(self):
8✔
UNCOV
10
        nn = self.options['num_nodes']
×
11

UNCOV
12
        self.add_input('r', val=np.zeros(nn), units=None)
×
UNCOV
13
        self.add_input('theta', val=np.zeros(nn), units='rad')
×
UNCOV
14
        self.add_input('vr', val=np.zeros(nn), units='1/s')
×
UNCOV
15
        self.add_input('vt', val=np.zeros(nn), units='1/s')
×
UNCOV
16
        self.add_input('alpha', val=np.zeros(nn), units='rad')
×
17

UNCOV
18
        self.add_output('theta_dot', val=np.zeros(nn), units='rad/s')
×
UNCOV
19
        self.add_output('vr_dot', val=np.zeros(nn), units='1/s**2')
×
UNCOV
20
        self.add_output('vt_dot', val=np.zeros(nn), units='1/s**2')
×
21

UNCOV
22
        ar = np.arange(nn)
×
23

UNCOV
24
        self.declare_partials(of='theta_dot', wrt='r', rows=ar, cols=ar)
×
UNCOV
25
        self.declare_partials(of='theta_dot', wrt='vt', rows=ar, cols=ar)
×
26

UNCOV
27
        self.declare_partials(of='vr_dot', wrt='r', rows=ar, cols=ar)
×
UNCOV
28
        self.declare_partials(of='vr_dot', wrt='vt', rows=ar, cols=ar)
×
UNCOV
29
        self.declare_partials(of='vr_dot', wrt='alpha', rows=ar, cols=ar)
×
30

UNCOV
31
        self.declare_partials(of='vt_dot', wrt='r', rows=ar, cols=ar)
×
UNCOV
32
        self.declare_partials(of='vt_dot', wrt='vr', rows=ar, cols=ar)
×
UNCOV
33
        self.declare_partials(of='vt_dot', wrt='vt', rows=ar, cols=ar)
×
UNCOV
34
        self.declare_partials(of='vt_dot', wrt='alpha', rows=ar, cols=ar)
×
35

36
    def compute(self, inputs, outputs, discrete_inputs=None, discrete_outputs=None):
8✔
UNCOV
37
        r = inputs['r']
×
UNCOV
38
        vr = inputs['vr']
×
UNCOV
39
        vt = inputs['vt']
×
UNCOV
40
        alpha = inputs['alpha']
×
41

UNCOV
42
        T = 1e-3
×
43

UNCOV
44
        outputs['theta_dot'] = vt/r
×
UNCOV
45
        outputs['vr_dot'] = vt**2/r - 1/r**2 + T*np.sin(alpha)
×
UNCOV
46
        outputs['vt_dot'] = -vr*vt/r + T*np.cos(alpha)
×
47

48
    def compute_partials(self, inputs, partials, discrete_inputs=None):
8✔
UNCOV
49
        r = inputs['r']
×
UNCOV
50
        vr = inputs['vr']
×
UNCOV
51
        vt = inputs['vt']
×
UNCOV
52
        alpha = inputs['alpha']
×
53

UNCOV
54
        T = 1e-3
×
55

UNCOV
56
        partials['theta_dot', 'r'] = -vt/r**2
×
UNCOV
57
        partials['theta_dot', 'vt'] = 1/r
×
58

UNCOV
59
        partials['vr_dot', 'r'] = -(vt/r)**2 + 2/r**3
×
UNCOV
60
        partials['vr_dot', 'vt'] = 2*vt/r
×
UNCOV
61
        partials['vr_dot', 'alpha'] = T * np.cos(alpha)
×
62

UNCOV
63
        partials['vt_dot', 'r'] = vt*vr/r**2
×
UNCOV
64
        partials['vt_dot', 'vr'] = -vt/r
×
UNCOV
65
        partials['vt_dot', 'vt'] = -vr/r
×
UNCOV
66
        partials['vt_dot', 'alpha'] = -T * np.sin(alpha)
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc