Skip to content

Instantly share code, notes, and snippets.

@bbrelje
bbrelje / color_cs.py
Created March 5, 2021 00:41
Manual colored CS
class SimpleHose(om.ExplicitComponent):
"""
A coolant hose used to track pressure drop and weight in long hose runs.
Inputs
------
hose_diameter : float
Inner diameter of the hose (scalar, m)
hose_length
Length of the hose (scalar, m)
@bbrelje
bbrelje / weird.py
Created March 2, 2021 03:27
Weird promote order issue
import openmdao.api as om
class MyGroupAsteriskFirst(om.Group):
def setup(self):
self.add_subsystem('foo', om.IndepVarComp('thrust', val=2.0), promotes_outputs=['*'])
self.add_subsystem('blah', om.ExecComp('a=b+c',a={'units':'kg','value':1},b={'units':'kg','value':1},c={'units':'kg','value':1}), promotes_inputs=['*',('c','thrust')])
class MyGroupAsteriskLast(om.Group):
def setup(self):
@bbrelje
bbrelje / tank_weight_opt.py
Created December 8, 2020 22:34
Validate simple laminate model versus finite element model from Argonne (10.1016/j.ijhydene.2017.08.123)
import numpy as np
from matplotlib import pyplot as plt
import openmdao.api as om
def rotations(theta):
# define rotation matrices per http://web.mit.edu/course/3/3.11/www/modules/laminates.pdf
s = np.sin(theta)
c = np.cos(theta)
# stress in fiber axis = A * stress in xy axis
@bbrelje
bbrelje / tank_opt.py
Created December 2, 2020 23:24
Carbon fiber H2 tank optimization problem
import numpy as np
from matplotlib import pyplot as plt
import openmdao.api as om
def rotations(theta):
# define rotation matrices per http://web.mit.edu/course/3/3.11/www/modules/laminates.pdf
s = np.sin(theta)
c = np.cos(theta)
# stress in fiber axis = A * stress in xy axis
import openmdao.api as om
import numpy as np
class WorkingGroup(om.Group):
def setup(self):
iv = self.add_subsystem('iv', om.IndepVarComp('x2', val=3.0*np.ones((2,))))
iv.add_output('x', 2.0)
self.add_subsystem('ec1', om.ExecComp('y=x', x={'value':1.0}))
self.add_subsystem('ec2', om.ExecComp('y2=x2', y2={'value':np.ones((2,))}, x2={'value':np.ones((2,))}))
import openmdao.api as om
import numpy as np
from openconcept.utilities.math.integrals import NewIntegrator
import warnings
# OpenConcept PhaseGroup will be used to hold analysis phases with time integration
# =============== These will go in OpenConcept Core ===============#
def find_integrators_in_model(system, abs_namespace, timevars, states):
durationvar = system._problem_meta['oc_time_var']
import openmdao.api as om
import numpy as np
class SellarDis1(om.ExplicitComponent):
"""
Component containing Discipline 1 -- no derivatives version.
"""
def setup(self):
import openmdao.api as om
import numpy as np
# OpenConcept PhaseGroup will be used to hold analysis phases with time integration
# =============== These will go in OpenConcept Core ===============#
def find_duration_variables_in_phase(system, abs_namespace, listofvars):
durationvar = system._problem_meta['duration_var']
# check if we are a group or not
if isinstance(system, om.Group):
import openmdao.api as om
import numpy as np
import mpi4py.MPI as MPI
# RUN THIS WITH 2 or more PROCS UNDER MPI
SRC_INDICES = [1,2]
FORCE_PETSCTRANSFER = True
# this should raise an error when COMP_DISTRIBUTED is false
# this should work when COMP_DISTRIBUTED is true
COMP_DISTRIBUTED = True
@bbrelje
bbrelje / openmdao_load_balancing.py
Created May 9, 2020 21:18
OpenMDAO Parallel Load Balancing and Speedup
import numpy as np
import openmdao.api as om
import time
from mpi4py import MPI
import unittest
from openmdao.utils.assert_utils import assert_near_equal
from openmdao.core.total_jac import _TotalJacInfo
import random