Skip to content

Commit

Permalink
0921
Browse files Browse the repository at this point in the history
  • Loading branch information
tian50 committed Sep 21, 2021
1 parent 481b9f6 commit ad2de51
Show file tree
Hide file tree
Showing 2 changed files with 112 additions and 50 deletions.
65 changes: 39 additions & 26 deletions msgpi/csda.py
Original file line number Diff line number Diff line change
@@ -1,48 +1,53 @@
import platform
from msgpi.design_analysis import DesignAnalysis
import msgpi.sg.cross_section as mcs
import msgpi.analysis as sga
import msgpi.sg.exec as sga
import dakota.interfacing as di


class CrossSectionDesignAnalysis(DesignAnalysis):

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

self.name = name

# if logger is None:
# self.logger = mlog.initLogger(__name__)
# else:
# self.logger = logger

# self.inputs = inputs
# self.outputs = {}
self.settings['integrated'] = False
self.settings['timeout'] = 30
self.settings['scrnout'] = False


self.cs = mcs.CrossSection(self.name)


def run(self):
self.logger.info(f'running design analysis for {self.cs.name}...')
self.logger.info(f'running design analysis for {self.name}...')

analysis = self.config['analysis']
# analysis = self.settings['analysis']

if platform.system() == 'Windows':
ppcmd = self.config['prevabs_cmd_win']
ppcmd = self.settings['prevabs_cmd_win']
elif platform.system() == 'Linux':
ppcmd = self.config['prevabs_cmd_linux']
ppcmd = self.settings['prevabs_cmd_linux']

solver = self.config['solver']
integrated = False
if 'integrated' in self.config.keys():
integrated = self.config['integrated']
timeout = 30
if 'timeout' in self.config.keys():
timeout = self.config['timeout']
scrnout = False
if 'scrnout' in self.config.keys():
scrnout = self.config['scrnout']
# solver = self.settings['solver']
# integrated = False
# if 'integrated' in self.settings.keys():
# integrated = self.settings['integrated']
# timeout = 30
# if 'timeout' in self.settings.keys():
# timeout = self.settings['timeout']
# scrnout = False
# if 'scrnout' in self.settings.keys():
# scrnout = self.settings['scrnout']


# Pre-process data
Expand All @@ -51,25 +56,33 @@ def run(self):

# Substitute parameters
# ---------------------
if self.sg.fn_design_xml == '':
self.sg.fn_design_xml = self.sg.name + '.xml'
try:
di.dprepro(
template=self.sg.fn_design_tmp, output=self.sg.fn_design_xml,
template=self.inputs['template'],
output=self.inputs['input_file'],
include=self.inputs
)
except KeyError:
pass

# Solve
# -----
self.sg.props = sga.solve(
self.sg.fn_design_xml, analysis, ppcmd, solver, integrated,
timeout=timeout, scrnout=scrnout, logger=self.logger
self.cs.props = sga.solve(
self.inputs['input_file'],
self.settings['analysis'],
ppcmd,
self.settings['solver'],
self.settings['integrated'],
timeout=self.settings['timeout'],
scrnout=self.settings['scrnout'],
logger=self.logger
)

# Extract beam properties
# -----------------------
self.logger.debug('extracting beam properties...')
for n in self.job_args['beam_properties']:
self.outputs[n] = self.sg.props.get(n)
for n in self.outputs['beam_properties']:
self.outputs[n] = self.cs.props.get(n)


# Post-process data
Expand Down
97 changes: 73 additions & 24 deletions msgpi/design_analysis.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
import abc
import pprint
import platform
import msgpi.cross_section as mcs
import msgpi.logger as mlog
import msgpi.sg.cross_section as mcs
import msgpi.utils.logger as mlog
import dakota.interfacing as di


class DesignAnalysis(metaclass=abc.ABCMeta):

def __init__(self, object=None, inputs={}, outputs={}, settings={}, prepros=[], postpros=[], analyses=[], logger=None):
self.object = object
def __init__(self, inputs={}, outputs={}, settings={}, prepros=[], postpros=[], analyses=[], logger=None):
# self.object = object
self.design = None
self.model = None

self.settings = settings

self.inputs = inputs
Expand Down Expand Up @@ -36,45 +40,86 @@ def __init__(self, object=None, inputs={}, outputs={}, settings={}, prepros=[],
self.analyses = analyses


def updateData(self, data):
def summary(self, title=''):
pp = pprint.PrettyPrinter()
print('\n', title)
print('----------')
print('settings')
pp.pprint(self.settings)
print('\ninputs')
pp.pprint(self.inputs)
print('\noutputs')
pp.pprint(self.outputs)
print('\nprepros')
pp.pprint(self.prepros)
print('\npostpros')
pp.pprint(self.postpros)
print('\nanalyses')
for da in self.analyses:
if isinstance(da, DesignAnalysis):
da.summary()
print('\n----------')


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

self.inputs.update(inputs)
self.outputs.update(outputs)
self.settings.update(settings)
self.prepros += prepros
self.postpros += postpros
self.analyses += analyses

return


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

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

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

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

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

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

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


def initLogger(self):
Expand Down Expand Up @@ -102,9 +147,9 @@ def initLogger(self):
)


@abc.abstractmethod
def analyze(self):
pass
# @abc.abstractmethod
# def analyze(self):
# pass


def preprocess(self):
Expand All @@ -122,7 +167,9 @@ def preprocess(self):
except KeyError:
kwargs = {}

func(self.object, self.inputs, self.outputs, self.settings, self.logger, *args, **kwargs)
module_name = self.settings['data_process_functions_file']
exec(f'from {module_name} import {func}')
eval(f'{func}')(self.inputs, self.outputs, self.logger, *args, **kwargs)


def postprocess(self):
Expand All @@ -140,7 +187,9 @@ def postprocess(self):
except KeyError:
kwargs = {}

func(self.object, self.inputs, self.outputs, self.settings, self.logger, *args, **kwargs)
module_name = self.settings['data_process_functions_file']
exec(f'from {module_name} import {func}')
eval(f'{func}')(self.inputs, self.outputs, self.logger, *args, **kwargs)


def run(self):
Expand Down

0 comments on commit ad2de51

Please sign in to comment.