New: config class
This commit is contained in:
parent
0859b6bdf5
commit
120c2f260c
@ -7,6 +7,59 @@ import ast
|
|||||||
import os, sys, shutil
|
import os, sys, shutil
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
@anisotropy.command()
|
||||||
|
@click.option(
|
||||||
|
"-P", "--path", "path",
|
||||||
|
default = os.getcwd(),
|
||||||
|
help = "Specify directory to use (instead of cwd)"
|
||||||
|
)
|
||||||
|
@click.option(
|
||||||
|
"-C", "--conf", "configFile"
|
||||||
|
)
|
||||||
|
@click.option(
|
||||||
|
"-N", "--nprocs", "nprocs",
|
||||||
|
type = click.INT,
|
||||||
|
default = 1,
|
||||||
|
help = "Count of parallel processes"
|
||||||
|
)
|
||||||
|
@click.option(
|
||||||
|
"-s", "--stage", "stage",
|
||||||
|
type = click.Choice(["all", "mesh", "flow", "postProcessing"]),
|
||||||
|
default = "all",
|
||||||
|
help = "Current computation stage"
|
||||||
|
)
|
||||||
|
@click.option(
|
||||||
|
"-f", "--force", "overwrite",
|
||||||
|
is_flag = True,
|
||||||
|
default = False,
|
||||||
|
help = "Overwrite existing entries"
|
||||||
|
)
|
||||||
|
@click.option(
|
||||||
|
"-p", "--params", "params",
|
||||||
|
metavar = "key=value",
|
||||||
|
multiple = True,
|
||||||
|
cls = KeyValueOption,
|
||||||
|
help = "Overwrite existing parameter (except control variables)"
|
||||||
|
)
|
||||||
|
def compute(path, configFile, nprocs, stage, overwrite):
|
||||||
|
from anisotropy.core.runner import UltimateRunner
|
||||||
|
from anisotropy.core.config import Config, DefaultConfig
|
||||||
|
|
||||||
|
config = DefaultConfig()
|
||||||
|
|
||||||
|
if configFile:
|
||||||
|
config.load(configFile)
|
||||||
|
|
||||||
|
config.update(
|
||||||
|
nprocs = nprocs,
|
||||||
|
stage = stage,
|
||||||
|
overwrite = overwrite
|
||||||
|
)
|
||||||
|
config.expand()
|
||||||
|
|
||||||
|
runner = UltimateRunner()
|
||||||
|
|
||||||
|
|
||||||
class LiteralOption(click.Option):
|
class LiteralOption(click.Option):
|
||||||
def type_cast_value(self, ctx, value):
|
def type_cast_value(self, ctx, value):
|
||||||
try:
|
try:
|
||||||
|
@ -2,4 +2,106 @@
|
|||||||
# This file is part of anisotropy.
|
# This file is part of anisotropy.
|
||||||
# License: GNU GPL version 3, see the file "LICENSE" for details.
|
# License: GNU GPL version 3, see the file "LICENSE" for details.
|
||||||
|
|
||||||
|
import os
|
||||||
|
import toml
|
||||||
|
from copy import deepcopy
|
||||||
|
from numpy import arange, array
|
||||||
|
|
||||||
|
|
||||||
|
class Config(object):
|
||||||
|
def __init__(self):
|
||||||
|
self.content = {}
|
||||||
|
self.options = {},
|
||||||
|
self.cases = None
|
||||||
|
|
||||||
|
def __getitem__(self, key):
|
||||||
|
return self.options[key]
|
||||||
|
|
||||||
|
def __setitem__(self, key, value):
|
||||||
|
self.options[key] = value
|
||||||
|
|
||||||
|
def __delitem__(self, key):
|
||||||
|
del self.options[key]
|
||||||
|
|
||||||
|
def update(self, **kwargs):
|
||||||
|
self.options.update(**kwargs)
|
||||||
|
|
||||||
|
def __len__(self):
|
||||||
|
return len(self.options)
|
||||||
|
|
||||||
|
def __iter__(self):
|
||||||
|
for key in self.options:
|
||||||
|
yield key
|
||||||
|
|
||||||
|
def load(self, filename: str):
|
||||||
|
path = os.path.abspath(filename)
|
||||||
|
|
||||||
|
if not os.path.exists(path):
|
||||||
|
raise FileNotFoundError(path)
|
||||||
|
|
||||||
|
self.content = toml.load(path)
|
||||||
|
self.options = deepcopy(self.content["options"])
|
||||||
|
|
||||||
|
def dump(self, filename: str):
|
||||||
|
path = os.path.abspath(filename)
|
||||||
|
ext = os.path.splitext(path)[1]
|
||||||
|
|
||||||
|
if not ext == ".toml":
|
||||||
|
path += ".toml"
|
||||||
|
|
||||||
|
os.makedirs(os.path.split(path)[0], exist_ok = True)
|
||||||
|
|
||||||
|
with open(path, "w") as io:
|
||||||
|
toml.dump(self.content, io, encoder = toml.TomlNumpyEncoder())
|
||||||
|
|
||||||
|
def expand(self):
|
||||||
|
self.cases = []
|
||||||
|
|
||||||
|
# Expand structures for each direction and each theta
|
||||||
|
for structure in self.content["structures"]:
|
||||||
|
thetaA = arange(
|
||||||
|
structure["theta"][0],
|
||||||
|
structure["theta"][1] + structure["thetaStep"],
|
||||||
|
structure["thetaStep"]
|
||||||
|
)
|
||||||
|
directionA = array(structure["directions"], dtype = float)
|
||||||
|
|
||||||
|
for direction in directionA:
|
||||||
|
for theta in thetaA:
|
||||||
|
self.cases.append({
|
||||||
|
"label": structure["label"],
|
||||||
|
"theta": theta,
|
||||||
|
"thetaStep": structure["thetaStep"],
|
||||||
|
"direction": direction,
|
||||||
|
"r0": structure["r0"],
|
||||||
|
"filletsEnabled": structure["filletsEnabled"]
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
class DefaultConfig(Config):
|
||||||
|
def __init__(self):
|
||||||
|
Config.__init__(self)
|
||||||
|
|
||||||
|
self.content = {
|
||||||
|
"options": {
|
||||||
|
"nprocs": 1,
|
||||||
|
"stage": "all",
|
||||||
|
"overwrite": False,
|
||||||
|
|
||||||
|
},
|
||||||
|
"structures": []
|
||||||
|
}
|
||||||
|
self.options = deepcopy(self.content["options"])
|
||||||
|
|
||||||
|
labels = ["simple", "bodyCentered", "faceCentered"]
|
||||||
|
thetas = array([[0.01, 0.28], [0.01, 0.17], [0.01, 0.13]], dtype = float)
|
||||||
|
|
||||||
|
for label, theta in zip(labels, thetas):
|
||||||
|
self.content["structures"].append({
|
||||||
|
"label": label,
|
||||||
|
"theta": theta,
|
||||||
|
"thetaStep": 0.01,
|
||||||
|
"directions": array([[1, 0, 0], [0, 0, 1], [1, 1, 1]], dtype = float),
|
||||||
|
"r0": 1,
|
||||||
|
"filletsEnabled": True
|
||||||
|
})
|
||||||
|
5
anisotropy/core/postProcess.py
Normal file
5
anisotropy/core/postProcess.py
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# This file is part of anisotropy.
|
||||||
|
# License: GNU GPL version 3, see the file "LICENSE" for details.
|
||||||
|
|
||||||
|
|
@ -19,8 +19,12 @@ class UltimateRunner(object):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
def _computeMesh(self):
|
def _computeMesh(self):
|
||||||
"""Function for Salome"""
|
"""Function for Salome
|
||||||
|
|
||||||
|
Resolution pipeline:
|
||||||
|
cli(UR -> computeMesh) -> salomeRunner(salome -> cli) -> computemesh(UR -> _computeMesh)
|
||||||
|
"""
|
||||||
|
# TODO: add logger configuration here
|
||||||
sample = samples.__dict__[..]
|
sample = samples.__dict__[..]
|
||||||
|
|
||||||
# Build a shape
|
# Build a shape
|
||||||
|
Loading…
Reference in New Issue
Block a user