Skip to content

Commit

Permalink
0926
Browse files Browse the repository at this point in the history
  • Loading branch information
tian50 committed Sep 26, 2021
1 parent 5cc924a commit 1ae2605
Show file tree
Hide file tree
Showing 4 changed files with 170 additions and 51 deletions.
27 changes: 25 additions & 2 deletions msgpi/csda.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,16 @@
from msgpi.design_analysis import DesignAnalysis
import msgpi.sg.cross_section as mcs
import msgpi.sg.exec as sga
import msgpi.utils.container as utcnt
import dakota.interfacing as di


class CrossSectionDesignAnalysis(DesignAnalysis):

class_name = 'cs'

def __init__(self, name='', inputs={}, outputs={}, settings={}, prepros=[], postpros=[], analyses=[], logger=None):
DesignAnalysis.__init__(self, inputs, outputs, settings, prepros, postpros, analyses, logger)
def __init__(self, name='', inputs={}, outputs={}, settings={}, prepros=[], postpros=[], analyses=[], logger=None, parent=None):
DesignAnalysis.__init__(self, inputs, outputs, settings, prepros, postpros, analyses, logger, parent)
# self.cs = cs
# self.job_args = job_args

Expand All @@ -33,6 +34,16 @@ def __init__(self, name='', inputs={}, outputs={}, settings={}, prepros=[], post
def run(self):
self.logger.info(f'running design analysis for {self.name}...')

# Pull and update data
# --------------------
utcnt.updateDict(source=self.parent.settings, target=self.settings)
utcnt.updateDict(source=self.parent.inputs, target=self.inputs, ignore=self.parent.classes+self.parent.objects)
utcnt.updateDict(source=self.parent.inputs['cs'][self.name], target=self.inputs)
# self.updateDataAll(bld_all)
# self.updateDataAll(bld_data)
for data in self.extra_data:
self.updateDataAll(data)

# analysis = self.settings['analysis']

if platform.system() == 'Windows':
Expand Down Expand Up @@ -91,3 +102,15 @@ def run(self):
# -----------------
self.postprocess()


# Push data back to parent
# ------------------------
if not self.name in self.parent.inputs['cs'].keys():
self.parent.inputs['cs'][self.name] = {}
utcnt.updateDict(source=self.inputs, target=self.parent.inputs['cs'][self.name])
if not self.name in self.parent.outputs['cs'].keys():
self.parent.outputs['cs'][self.name] = {}
utcnt.updateDict(source=self.outputs, target=self.parent.outputs['cs'][self.name])


return
60 changes: 60 additions & 0 deletions msgpi/dakota/interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
from typing import KeysView

import msgpi.design_analysis as mda
import msgpi.ms.bda as mbda
import msgpi.csda as mcsda
import msgpi.utils.logger as mlog
import dakota.interfacing as di

Expand Down Expand Up @@ -104,6 +106,10 @@ def initialize(self, fn_json_args):
if not obj in self.objects:
self.objects.append(obj)

if cls == 'cs':
if not obj in self.sg_names:
self.sg_names.append(obj)


# Logger initialization
# ---------------------
Expand Down Expand Up @@ -166,6 +172,60 @@ def writeOutput(self, status):



def analysis(self):

for analysis in self.analyses:

if analysis['class'] == 'blade':
try:
bld_all = analysis['all']
except KeyError:
bld_all = {}

for bld_name, bld_data in analysis.items():
if bld_name in ['class', 'all']:
continue
else:
bda = mbda.BladeDesignAnalysis(bld_name, logger=self.logger, parent=self)
bda.addExtraData(bld_all)
bda.addExtraData(bld_data)

# bda.summary('BLADE')

bda.run()

# bda.summary('BLADE')

# dda.summary('DAKOTA')

elif analysis['class'] == 'cs':

try:
cs_all = analysis['all']
except KeyError:
cs_all = {}

for cs_name in self.sg_names:
try:
cs_data = analysis[cs_name]
except KeyError:
cs_data = {}

csda = mcsda.CrossSectionDesignAnalysis(cs_name, logger=self.logger, parent=self)
csda.addExtraData(cs_all)
csda.addExtraData(cs_data)

# csda.summary(f'CSDA {cs_name}')

csda.run()

return






# ==============
# LEGACY SCRIPTS
# ==============
Expand Down
112 changes: 64 additions & 48 deletions msgpi/design_analysis.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ def __init__(self, inputs={}, outputs={}, settings={}, prepros=[], postpros=[],

self.analyses = analyses

self.extra_data = []

self.parent: DesignAnalysis = parent
self.sg_names = []
self.sgs = {}
Expand Down Expand Up @@ -71,6 +73,10 @@ def summary(self, title=''):
print('\n----------')


def addExtraData(self, data):
self.extra_data.append(data)


def updateData(self, inputs={}, outputs={}, settings={}, prepros=[], postpros=[], analyses=[]):

self.inputs.update(inputs)
Expand All @@ -83,8 +89,58 @@ def updateData(self, inputs={}, outputs={}, settings={}, prepros=[], postpros=[]
return


# def updateData(self, to, data, ignore=[]):
def updateDataAll(self, data):
"""
data = {
'inputs': {},
'outputs': {},
'settings': {},
'prepros': [],
'postpros': []
}
"""
try:
# self.inputs.update(data['inputs'])
inputs = data['inputs']
except KeyError:
inputs = {}

try:
# self.outputs.update(data['outputs'])
outputs = data['outputs']
except KeyError:
outputs = {}

try:
# self.settings.update(data['settings'])
settings = data['settings']
except KeyError:
settings = {}

try:
# self.prepros += data['prepros']
prepros = data['prepros']
except KeyError:
prepros = []

try:
# self.postpros += data['postpros']
postpros = data['postpros']
except KeyError:
postpros = []

try:
# self.analyses += data['analyses']
analyses = data['analyses']
except KeyError:
analyses = []

self.updateData(inputs, outputs, settings, prepros, postpros, analyses)


def updateDataList(self, datalist=[]):
for data in datalist:
self.updateDataAll(data)


def pullInputs(self, other_da, ignore_keywords=[]):
Expand Down Expand Up @@ -113,9 +169,6 @@ def pullInputs(self, other_da, ignore_keywords=[]):
# def pushData(self, source, target, depth=-1, ignore=[]):
# assert (type(source).__name__ == type(target).__name__)




def pushInputs(self, other_da, structured=True):
assert isinstance(other_da, DesignAnalysis)

Expand All @@ -138,53 +191,16 @@ def pushOutputs(self, other_da, structured=True):
other_da.outputs[k] = v


def updateDataAll(self, data):
"""
data = {
'inputs': {},
'outputs': {},
'settings': {},
'prepros': [],
'postpros': []
}
"""
try:
# self.inputs.update(data['inputs'])
inputs = data['inputs']
except KeyError:
inputs = {}
def pullInputsFromParent(self, ignore_keywords=[]):
ignore_keywords += self.parent.classes
ignore_keywords += self.parent.objects

try:
# self.outputs.update(data['outputs'])
outputs = data['outputs']
except KeyError:
outputs = {}
utcnt.updateDict(self.parent.inputs, self.inputs, ignore_keywords)
utcnt.updateDict(self.parent.inputs[self.class_name], self.inputs, ignore_keywords)
utcnt.updateDict(self.parent.inputs[self.class_name][self.name], self.inputs, ignore_keywords)

try:
# self.settings.update(data['settings'])
settings = data['settings']
except KeyError:
settings = {}

try:
# self.prepros += data['prepros']
prepros = data['prepros']
except KeyError:
prepros = []

try:
# self.postpros += data['postpros']
postpros = data['postpros']
except KeyError:
postpros = []

try:
# self.analyses += data['analyses']
analyses = data['analyses']
except KeyError:
analyses = []

self.updateData(inputs, outputs, settings, prepros, postpros, analyses)
# def pushOutputsToParent(self, ignore_keywords=[]):


def initLogger(self):
Expand Down
22 changes: 21 additions & 1 deletion msgpi/ms/bda.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import msgpi.ms.blade as msb
from msgpi.design_analysis import DesignAnalysis
import msgpi.utils.container as utcnt
import dakota.interfacing as di


Expand All @@ -24,6 +25,15 @@ def generateDesign(self):
def run(self):
self.logger.info(f'running design analysis for {self.name}...')

# Pull and update data
# --------------------
self.updateData(settings=self.parent.settings)
self.pullInputs(self.parent, ignore_keywords=self.parent.classes+self.parent.objects)
# self.updateDataAll(bld_all)
# self.updateDataAll(bld_data)
for data in self.extra_data:
self.updateDataAll(data)

# Pre-process data
# ----------------
self.preprocess()
Expand Down Expand Up @@ -56,10 +66,20 @@ def run(self):
self.sg_names.append(cs_name)



# Post-process data
# -----------------
self.postprocess()


# Push data back to parent
# ------------------------
utcnt.updateDict(source=self.inputs, target=self.parent.inputs['blade'][self.name], ignore=['cs'])
utcnt.updateDict(source=self.inputs['cs'], target=self.parent.inputs['cs'])
# self.parent.sg_names = self.sg_names
for sg_name in self.sg_names:
if not sg_name in self.parent.sg_names:
self.parent.sg_names.append(sg_name)


return

0 comments on commit 1ae2605

Please sign in to comment.