Skip to content

Instantly share code, notes, and snippets.

@bbrelje
bbrelje / empty_rowcol.py
Last active May 6, 2020 20:32
Can't declare empty rows/cols in declare_partials
import openmdao.api as om
import numpy as np
from openmdao.utils.array_utils import evenly_distrib_idxs
import mpi4py.MPI as MPI
N = 3
class DistribComp(om.ExplicitComponent):
@bbrelje
bbrelje / pargroup_output_as_objective.py
Created May 8, 2020 02:36
Check_totals fails when objective is an output of a parallel component
import numpy as np
import openmdao.api as om
import time
class DelayComp(om.ExplicitComponent):
def initialize(self):
self.options.declare('time', default=3.0)
self.options.declare('size', default=1)
@bbrelje
bbrelje / parallel_coloring.py
Created May 8, 2020 13:26
Parallel coloring duplicate calls to matrix-free API
import openmdao.api as om
import numpy as np
import time
from mpi4py import MPI
class SumComp(om.ExplicitComponent):
def __init__(self, size):
super(SumComp, self).__init__()
self.size = size
@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
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
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
class SellarDis1(om.ExplicitComponent):
"""
Component containing Discipline 1 -- no derivatives version.
"""
def setup(self):
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 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,))}))
@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