Skip to content
Snippets Groups Projects
Commit 86e998c9 authored by imcovangent's avatar imcovangent
Browse files

Deleted development script.

Former-commit-id: b57c7634644ecb3b572d4d0d44b1c017dbbc58d3
parent 7707ed4f
No related branches found
No related tags found
No related merge requests found
# Imports
import logging
from collections import OrderedDict
import networkx as nx
from kadmos.graph import RepositoryConnectivityGraph, FundamentalProblemGraph, load
from kadmos.utilities.general import get_mdao_setup
# Settings for logging
logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.DEBUG)
# Settings for scripting
mdao_definitions_loop_all = True # Option for looping through all MDAO definitions
mdao_definition_id = 13 # Option for selecting a MDAO definition (in case mdao_definitions_loop_all=False)
# Settings for saving
pdf_dir = 'sellar_problem/(X)DSM'
cmdows_dir = 'sellar_problem/CMDOWS'
kdms_dir = 'sellar_problem/KDMS'
vistoms_dir = 'sellar_problem/VISTOMS'
print 'Scripting RCG...'
# A new repository connectivity graph is defined to describe the general problem
rcg = RepositoryConnectivityGraph(name='Sellar problem graph')
# A description is added to the graph
rcg.graph['description'] = 'Repository graph of tools where a subset can be used to solve the Sellar problem'
# All function nodes are defined
rcg.add_node('A', category='function', instance=1)
rcg.add_node('D1', category='function', instance=1)
rcg.add_node('D2', category='function', instance=1)
rcg.add_node('D3', category='function', instance=1)
rcg.add_node('F1', category='function', instance=1)
rcg.add_node('F2', category='function', instance=1)
rcg.add_node('G1', category='function', instance=1)
rcg.add_node('G2', category='function', instance=1)
# All variable nodes are defined
rcg.add_node('/data_schema/settings/a', category='variable', label='a', instance=1)
rcg.add_node('/data_schema/settings/c', category='variable', label='c', instance=1)
rcg.add_node('/data_schema/analyses/f', category='variable', label='f', instance=1)
rcg.add_node('/data_schema/analyses/g1', category='variable', label='g1', instance=1)
rcg.add_node('/data_schema/analyses/g2', category='variable', label='g2', instance=1)
rcg.add_node('/data_schema/geometry/x1', category='variable', label='x1', instance=1)
rcg.add_node('/data_schema/analyses/y1', category='variable', label='y1', instance=1)
rcg.add_node('/data_schema/analyses/y2', category='variable', label='y2', instance=1)
rcg.add_node('/data_schema/geometry/z1', category='variable', label='z1', instance=1)
rcg.add_node('/data_schema/geometry/z2', category='variable', label='z2', instance=1)
# The edges between the nodes are defined
rcg.add_edge('A', '/data_schema/settings/c')
rcg.add_edge('D1', '/data_schema/analyses/y1')
rcg.add_edge('D2', '/data_schema/analyses/y2')
rcg.add_edge('D3', '/data_schema/geometry/x1')
rcg.add_edge('D3', '/data_schema/geometry/z1')
rcg.add_edge('D3', '/data_schema/geometry/z2')
rcg.add_edge('F1', '/data_schema/analyses/f')
rcg.add_edge('F2', '/data_schema/analyses/f')
rcg.add_edge('G1', '/data_schema/analyses/g1')
rcg.add_edge('G2', '/data_schema/analyses/g2')
rcg.add_edge('/data_schema/settings/a', 'A')
rcg.add_edge('/data_schema/settings/c', 'D1')
rcg.add_edge('/data_schema/settings/c', 'D2')
rcg.add_edge('/data_schema/geometry/x1', 'D1')
rcg.add_edge('/data_schema/geometry/x1', 'F1')
rcg.add_edge('/data_schema/geometry/x1', 'F2')
rcg.add_edge('/data_schema/analyses/y1', 'D2')
rcg.add_edge('/data_schema/analyses/y1', 'D3')
rcg.add_edge('/data_schema/analyses/y1', 'F1')
rcg.add_edge('/data_schema/analyses/y1', 'G1')
rcg.add_edge('/data_schema/analyses/y2', 'D1')
rcg.add_edge('/data_schema/analyses/y2', 'D3')
rcg.add_edge('/data_schema/analyses/y2', 'F1')
rcg.add_edge('/data_schema/analyses/y2', 'G2')
rcg.add_edge('/data_schema/geometry/z1', 'D1')
rcg.add_edge('/data_schema/geometry/z1', 'D2')
rcg.add_edge('/data_schema/geometry/z1', 'F2')
rcg.add_edge('/data_schema/geometry/z2', 'D1')
rcg.add_edge('/data_schema/geometry/z2', 'D2')
rcg.add_edge('/data_schema/geometry/z2', 'F1')
rcg.add_edge('/data_schema/geometry/z2', 'F2')
# Add some (optional) equations
rcg.add_equation_labels(rcg.get_function_nodes())
rcg.add_equation('A', 'a', 'Python')
rcg.add_equation('A', 'a', 'LaTeX')
rcg.add_equation('A', '<math xmlns="http://www.w3.org/1998/Math/MathML"><mi>a</mi></math>', 'MathML')
rcg.add_equation('G1', 'y1/3.16-1', 'Python')
rcg.add_equation('G1', 'y1/3.16-1', 'LaTeX')
rcg.add_equation('G1', '<math xmlns="http://www.w3.org/1998/Math/MathML"><mi>y</mi><mn>1</mn><mo>/</mo><mn>3</mn><mo>.</mo><mn>16</mn><mo>-</mo><mn>1</mn></math>', 'MathML')
rcg.add_equation('G2', '1-y2/24.0', 'Python')
rcg.add_equation('G2', '1-y2/24.0', 'LaTeX')
rcg.add_equation('G2', '<math xmlns="http://www.w3.org/1998/Math/MathML"><mn>1</mn><mo>-</mo><mi>y</mi><mn>2</mn><mo>/</mo><mn>24</mn><mo>.</mo><mn>0</mn></math>', 'MathML')
rcg.add_equation('F1', 'x1**2+z2+y1+exp(-y2)', 'Python')
rcg.add_equation('F1', 'x1^2+z2+y1+e^{-y2}', 'LaTeX')
rcg.add_equation('F1', '<math xmlns="http://www.w3.org/1998/Math/MathML"><mi>x</mi><msup><mn>1</mn><mn>2</mn></msup><mo>+</mo><mi>z</mi><mn>2</mn><mo>+</mo><mi>y</mi><mn>1</mn><mo>+</mo><msup><mi>e</mi><mrow><mo>-</mo><mi>y</mi><mn>2</mn></mrow></msup></math>', 'MathML')
# Add some (optional) organization information
contacts = [{'attrib': {'uID': 'ivangent'}, 'name': 'Imco van Gent', 'email': 'i.vangent@tudelft.nl', 'company': 'TU Delft'},
{'attrib': {'uID': 'lmuller'}, 'name': 'Lukas Muller', 'email': 'l.muller@student.tudelft.nl', 'company': 'TU Delft'}]
architects = [{'contactUID': 'ivangent'}, {'contactUID': 'lmuller'}]
integrators = [{'contactUID': 'lmuller'}]
rcg.graph['organization'] = OrderedDict([('contacts', contacts),
('organigram', {'architects': architects,
'integrators': integrators})])
# Add some (optional) ranges
rcg.adj['/data_schema/geometry/z1']['D1']['valid_ranges'] = {'limit_range': {'minimum': -5, 'maximum': 5.},
'list_range': [('list_range_item', 7.5), ('list_range_item', 8)]}
# Add some (optional) metadata
rcg.node['F2']['general_info'] = {'description': 'dummy function that is not part of the original Sellar problem'}
rcg.node['F2']['performance_info'] = {'precision': 20,
'fidelity_level': 2,
'run_time': 1.5}
function_order = ['A', 'D1', 'D2', 'D3', 'F1', 'F2', 'G1', 'G2']
# Create a DSM visualization of the RCG
#rcg.create_dsm(file_name='RCG', function_order=function_order, include_system_vars=True, destination_folder=pdf_dir)
# Create a VISTOMS visualization of the RCG
#rcg.vistoms_create(vistoms_dir, function_order=function_order, compress=False)
# Save the RCG as kdms
#rcg.save('RCG', destination_folder=kdms_dir)
# Save the RCG as cmdows (and do an integrity check)
#rcg.save('RCG', file_type='cmdows', destination_folder=cmdows_dir,
# description='RCG CMDOWS file of the well-known Sellar problem',
# creator='Imco van Gent',
# version='0.1',
# pretty_print=True,
# integrity=True)
print 'Scripting initial FPG...'
# A initial fundamental problem graph is created based on the rcg
fpg_initial = rcg.deepcopy_as(FundamentalProblemGraph)
# The dummy function nodes are removed
fpg_initial.remove_function_nodes('D3', 'F2')
# A new function order is defined
function_order = fpg_initial.get_possible_function_order('single-swap')
# On to the wrapping of the MDAO architectures
# Get iterator (all or single one)
mdao_definition = 'CO'
print 'Scripting ' + str(mdao_definition) + '...'
# Determine the three main settings: architecture, convergence type and unconverged coupling setting
mdao_architecture, convergence_type, allow_unconverged_couplings = get_mdao_setup(mdao_definition)
# Reset FPG
fpg = fpg_initial.deepcopy()
fpg.graph['name'] = 'FPG - ' + mdao_definition
fpg.graph['description'] = 'Fundamental problem graph for solving the Sellar problem using the strategy: ' \
+ mdao_definition + '.'
# Define settings of the problem formulation
fpg.graph['problem_formulation'] = dict()
fpg.graph['problem_formulation']['function_order'] = function_order
fpg.graph['problem_formulation']['mdao_architecture'] = mdao_architecture
fpg.graph['problem_formulation']['convergence_type'] = convergence_type
fpg.graph['problem_formulation']['allow_unconverged_couplings'] = allow_unconverged_couplings
fpg.graph['problem_formulation']['coupled_functions_groups'] = [['D1'],['D2']]
if mdao_architecture in ['unconverged-DOE', 'converged-DOE']:
fpg.graph['problem_formulation']['doe_settings'] = dict()
fpg.graph['problem_formulation']['doe_settings']['doe_method'] = 'Custom design table'
if fpg.graph['problem_formulation']['doe_settings']['doe_method'] in ['Latin hypercube design',
'Monte Carlo design']:
fpg.graph['problem_formulation']['doe_settings']['doe_seed'] = 6
fpg.graph['problem_formulation']['doe_settings']['doe_runs'] = 5
elif fpg.graph['problem_formulation']['doe_settings']['doe_method'] in ['Full factorial design']:
fpg.graph['problem_formulation']['doe_settings']['doe_runs'] = 5
# Depending on the architecture, different additional node attributes have to be specified. This is automated here
# to allow direct execution of all different options.
fpg.mark_as_objective('/data_schema/analyses/f')
fpg.mark_as_constraints(['/data_schema/analyses/g1','/data_schema/analyses/g2'], '>=', 0.0)
fpg.mark_as_design_variables(['/data_schema/geometry/z1','/data_schema/geometry/z2','/data_schema/geometry/x1'],
lower_bounds=[-10,0.0,0.0], upper_bounds=10, nominal_values=0.0)
# Search for problem roles
fpg.add_function_problem_roles()
# Create a DSM visualization of the FPG
#fpg.create_dsm(file_name='FPG_'+mdao_definition, function_order=function_order, include_system_vars=True,
# destination_folder=pdf_dir)
# Create a VISTOMS visualization of the FPG (and add it to the existing directory)
#fpg.vistoms_add(vistoms_dir, function_order=function_order)
# Save the FPG as kdms
#fpg.save('FPG_'+mdao_definition, destination_folder=kdms_dir, graph_check_critical=False) # TODO: add graph check for CO
# Save the FPG as cmdows (and do an integrity check)
#fpg.save('FPG_'+mdao_definition, file_type='cmdows', destination_folder=cmdows_dir,
# description='FPG CMDOWS file of the well-known Sellar problem',
# creator='Imco van Gent',
# version='0.1',
# pretty_print=True,
# integrity=True,
# graph_check_critical=False) # TODO: add graph check for CO
# Get Mdao graphs
mdg = fpg.get_mdg(name='mdg Sellar problem')
mpg = mdg.get_mpg(name='mpg Sellar problem')
mdg.graph['name'] = 'XDSM - ' + mdao_definition
mdg.graph['description'] = 'Solution strategy to solve the Sellar problem using the strategy: ' \
+ str(mdao_architecture) + ('_' + str(convergence_type) if convergence_type else '') + '.'
# Create a DSM visualization of the Mdao
mdg.create_dsm(file_name='Mdao_'+mdao_definition, include_system_vars=True, destination_folder=pdf_dir, mpg=mpg)
# Create a VISTOMS visualization of the Mdao (and add it to the existing directory)
#mdg.vistoms_add(vistoms_dir, mpg=mpg)
# Save the Mdao as kdms
mdg.save('Mdao_'+mdao_definition, destination_folder=kdms_dir, mpg=mpg)
# Save the Mdao as cmdows (and do an integrity check)
# mdg.save('Mdao_'+mdao_definition, file_type='cmdows', destination_folder=cmdows_dir,
# mpg=mpg,
# description='Mdao CMDOWS file of the well-known Sellar problem',
# creator='Imco van Gent',
# version='0.1',
# pretty_print=True,
# integrity=True,
# convention=True)
print 'Done!'
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment