Mod: clean up

Mod: cli is standalone submodule now
Mod: gui layouts collected together
Mod: pyproject cli entry
This commit is contained in:
L-Nafaryus 2022-01-29 17:41:36 +05:00
parent 12ee8ab0b0
commit 34313205d6
No known key found for this signature in database
GPG Key ID: C76D8DCD2727DBB7
53 changed files with 317 additions and 6566 deletions

View File

@ -1,16 +1,2 @@
List of known issues
====================
* ``Click`` // can't hide subcommand from help, ``hidden = True`` doesn't work.
* ``ideasUnvToFoam`` // can't import mesh with '-case' flag (temporary used ``os.chdir``).
* ``salome`` // removes commas from string list (example: "[1, 0, 0]") in the cli arguments.
* ``geompyBuilder`` // missing groups from father object in study tree.
* ``Anisotropy`` // writes ``Done`` status for failed operations (detected on mesh operations).
* ``Database`` // ``WHERE ..`` peewee operation error on update function with all control parameters (type, direction, theta) but fields are written to the database correctly.
* ``Database`` // awkward arguments and their order in the class init function.
* ``Mesh`` // outdated class.
* ``genmesh`` // awkward function, move precalculation parameters to Mesh class.
* ``Anisotropy`` // outdated functions for porosity and etc.
* ``Anisotropy`` // not sufficiently used variable ``env``.
* ``openfoam`` // outdated module, add functionality for FoamFile parsing, ``postProcess`` utility?.
* ``Database`` // add flexibility.

View File

@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
# This file is part of anisotropy.
# License: GNU GPL version 3, see the file "LICENSE" for details.
"""anisotropy

View File

@ -0,0 +1,15 @@
# -*- coding: utf-8 -*-
from . import utils
from .cli import anisotropy_cli
__all__ = [
"utils",
"anisotropy_cli"
]
if __name__ == "__main__":
anisotropy_cli()

173
anisotropy/cli/cli.py Normal file
View File

@ -0,0 +1,173 @@
# -*- coding: utf-8 -*-
import click
import os
import logging
from . import utils
@click.group()
@click.version_option()
def anisotropy_cli():
pass
@anisotropy_cli.command(
help = "Initialize new anisotropy project."
)
@click.option(
"-P", "--path", "path",
default = os.getcwd(),
help = "Specify directory to use (instead of cwd)"
)
@click.option(
"-v", "--verbose", "verbose",
count = True,
help = "Increase verbose level"
)
def init(path, verbose):
from anisotropy.core import config
from anisotropy.core import utils as core_utils
core_utils.setupLogger(utils.verbose_level(verbose))
logger = logging.getLogger(__name__)
conf = config.DefaultConfig()
filepath = os.path.abspath(os.path.join(path, "anisotropy.toml"))
logger.info(f"Saving file at { filepath }")
conf.dump(filepath)
@anisotropy_cli.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", "shape", "mesh", "flow", "postProcess"]),
# 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 = utils.KeyValueOption,
help = "Overwrite existing parameter (except control variables)"
)
@click.option(
"-v", "--verbose", "verbose",
count = True,
help = "Increase verbose level"
)
@click.option(
"--exec-id", "execution"
)
@click.option(
"--pid", "pid",
help = "Specify pid file path"
)
@click.option(
"--logfile", "logfile",
help = "Specify log file path"
)
def compute(path, configFile, nprocs, stage, overwrite, params, verbose, execution, pid, logfile):
import anisotropy
from anisotropy.core import UltimateRunner
from anisotropy.core import config
from anisotropy.core import utils as core_utils
anisotropy.loadEnv()
if path:
os.makedirs(os.path.abspath(path), exist_ok = True)
os.chdir(os.path.abspath(path))
os.environ["ANISOTROPY_CWD"] = path
core_utils.setupLogger(utils.verbose_level(verbose), logfile)
logger = logging.getLogger(__name__)
conf = config.DefaultConfig()
if configFile:
filepath = os.path.abspath(configFile)
logger.info(f"Loading file from { filepath }")
try:
conf.load(configFile)
except FileNotFoundError:
conf.dump(configFile)
else:
logger.info("Using default configuration")
args = {
"nprocs": nprocs,
"stage": stage,
"overwrite": overwrite
}
for k, v in args.items():
if v is not None:
conf.update(**{ k: v })
if pid:
pidpath = os.path.abspath(pid)
with open(pidpath, "w") as io:
io.write(str(os.getpid()))
runner = UltimateRunner(config = conf, exec_id = execution)
runner.fill()
runner.start()
os.remove(pidpath)
logger.info("Computation done. Exiting ...")
@anisotropy_cli.command()
@click.option(
"-P", "--path", "path",
default = os.getcwd(),
help = "Specify directory to use (instead of cwd)"
)
@click.option(
"-v", "--verbose", "verbose",
count = True,
help = "Increase verbose level"
)
def gui(path, verbose):
import anisotropy
from anisotropy.core import core_utils
from anisotropy.gui import app
anisotropy.loadEnv()
os.makedirs(os.path.abspath(path), exist_ok = True)
os.chdir(os.path.abspath(path))
os.environ["ANISOTROPY_CWD"] = path
core_utils.setupLogger(utils.verboseLevel(verbose))
# logger = logging.getLogger(__name__)
app.run_server(debug = True)

74
anisotropy/cli/utils.py Normal file
View File

@ -0,0 +1,74 @@
# -*- coding: utf-8 -*-
import click
import ast
import logging
class LiteralOption(click.Option):
def type_cast_value(self, ctx, value):
try:
return ast.literal_eval(value)
except Exception:
raise click.BadParameter(f"{ value } (Type error)")
class KeyValueOption(click.Option):
def _convert(self, ctx, value):
if not value:
return {}
if value.find("=") == -1:
raise click.BadParameter(f"{ value } (Missed '=')")
params = value.split("=")
if not len(params) == 2:
raise click.BadParameter(f"{ value } (Syntax error)")
key, val = params[0].strip(), params[1].strip()
if val[0].isalpha():
val = f"'{ val }'"
try:
return { key: ast.literal_eval(val) }
except Exception:
raise click.BadParameter(f"{ value } (Type error)")
def type_cast_value(self, ctx, value):
if isinstance(value, list):
return [ self._convert(ctx, val) for val in value ]
else:
return self._convert(ctx, value)
class CliListOption(click.Option):
def _convert(self, ctx, value):
if not value:
return []
output = [ val for val in value.split(",") ]
if "" in output:
raise click.BadParameter(f"{ value } (Trying to pass empty item)")
return output
def type_cast_value(self, ctx, value):
if isinstance(value, list):
return [ self._convert(ctx, val) for val in value ]
else:
return self._convert(ctx, value)
def verbose_level(level: int):
return {
0: logging.ERROR,
1: logging.INFO,
2: logging.DEBUG
}.get(level, logging.ERROR)

View File

@ -1,8 +1,17 @@
# -*- coding: utf-8 -*-
# This file is part of anisotropy.
# License: GNU GPL version 3, see the file "LICENSE" for details.
from .config import Config, DefaultConfig
from . import utils
from . import config
from . import postprocess
from .parallel import ParallelRunner
from .runner import UltimateRunner
from .postProcess import PostProcess
__all__ = [
"utils",
"config",
"postprocess",
"ParallelRunner",
"UltimateRunner"
]

View File

@ -1,400 +0,0 @@
# -*- coding: utf-8 -*-
# This file is part of anisotropy.
# License: GNU GPL version 3, see the file "LICENSE" for details.
import click
import ast
import os
import logging
class LiteralOption(click.Option):
def type_cast_value(self, ctx, value):
try:
return ast.literal_eval(value)
except:
raise click.BadParameter(f"{ value } (Type error)")
class KeyValueOption(click.Option):
def _convert(self, ctx, value):
if not value:
return {}
if value.find("=") == -1:
raise click.BadParameter(f"{ value } (Missed '=')")
params = value.split("=")
if not len(params) == 2:
raise click.BadParameter(f"{ value } (Syntax error)")
key, val = params[0].strip(), params[1].strip()
if val[0].isalpha():
val = f"'{ val }'"
try:
return { key: ast.literal_eval(val) }
except:
raise click.BadParameter(f"{ value } (Type error)")
def type_cast_value(self, ctx, value):
if isinstance(value, list):
return [ self._convert(ctx, val) for val in value ]
else:
return self._convert(ctx, value)
class CliListOption(click.Option):
def _convert(self, ctx, value):
if not value:
return []
output = [ val for val in value.split(",") ]
if "" in output:
raise click.BadParameter(f"{ value } (Trying to pass empty item)")
return output
def type_cast_value(self, ctx, value):
if isinstance(value, list):
return [ self._convert(ctx, val) for val in value ]
else:
return self._convert(ctx, value)
def verboseLevel(level: int):
return {
0: logging.ERROR,
1: logging.INFO,
2: logging.DEBUG
}.get(level, logging.ERROR)
@click.group()
@click.version_option()
def anisotropy():
pass
@anisotropy.command(
help = "Initialize new anisotropy project."
)
@click.option(
"-P", "--path", "path",
default = os.getcwd(),
help = "Specify directory to use (instead of cwd)"
)
@click.option(
"-v", "--verbose", "verbose",
count = True,
help = "Increase verbose level"
)
def init(path, verbose):
from anisotropy.core.config import DefaultConfig
from anisotropy.core.utils import setupLogger
setupLogger(verboseLevel(verbose))
logger = logging.getLogger(__name__)
config = DefaultConfig()
filepath = os.path.abspath(os.path.join(path, "anisotropy.toml"))
logger.info(f"Saving file at { filepath }")
config.dump(filepath)
@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", "shape", "mesh", "flow", "postProcess"]),
#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)"
)
@click.option(
"-v", "--verbose", "verbose",
count = True,
help = "Increase verbose level"
)
@click.option(
"--exec-id", "execution"
)
@click.option(
"--pid", "pid",
help = "Specify pid file path"
)
@click.option(
"--logfile", "logfile",
help = "Specify log file path"
)
def compute(path, configFile, nprocs, stage, overwrite, params, verbose, execution, pid, logfile):
import anisotropy
from anisotropy.core.runner import UltimateRunner
from anisotropy.core.config import DefaultConfig
from anisotropy.core.utils import setupLogger
anisotropy.loadEnv()
if path:
os.makedirs(os.path.abspath(path), exist_ok = True)
os.chdir(os.path.abspath(path))
os.environ["ANISOTROPY_CWD"] = path
setupLogger(verboseLevel(verbose), logfile)
logger = logging.getLogger(__name__)
config = DefaultConfig()
if configFile:
filepath = os.path.abspath(configFile)
logger.info(f"Loading file from { filepath }")
try:
config.load(configFile)
except FileNotFoundError:
config.dump(configFile)
else:
logger.info("Using default configuration")
args = {
"nprocs": nprocs,
"stage": stage,
"overwrite": overwrite
}
for k, v in args.items():
if v is not None:
config.update(**{ k: v })
if pid:
pidpath = os.path.abspath(pid)
with open(pidpath, "w") as io:
io.write(str(os.getpid()))
runner = UltimateRunner(config = config, exec_id = execution)
runner.fill()
runner.start()
os.remove(pidpath)
logger.info("Computation done. Exiting ...")
@anisotropy.command()
@click.option(
"-P", "--path", "path",
default = os.getcwd(),
help = "Specify directory to use (instead of cwd)"
)
@click.option(
"-v", "--verbose", "verbose",
count = True,
help = "Increase verbose level"
)
def gui(path, verbose):
import anisotropy
from anisotropy.core.utils import setupLogger
from anisotropy.gui import app
anisotropy.loadEnv()
os.makedirs(os.path.abspath(path), exist_ok = True)
os.chdir(os.path.abspath(path))
os.environ["ANISOTROPY_CWD"] = path
setupLogger(verboseLevel(verbose))
logger = logging.getLogger(__name__)
app.run_server(debug = True)
##############
"""
@click.group()
@click.version_option(version = "", message = version())
def anisotropy():
pass
@anisotropy.command()
@click.option(
"-p", "--params", "params",
metavar = "key=value",
multiple = True,
cls = KeyValueOption,
help = "Select by control parameters (type, direction, theta)"
)
@click.option(
"-P", "--path", "path",
metavar = "PATH",
default = os.getcwd(),
help = "Specify directory to use (instead of cwd)"
)
@click.option(
"--list", "printlist",
is_flag = True,
help = "Print a list of avaliable fields."
)
@click.option(
"--export",
metavar = "PATH",
help = "Export output."
)
@click.option(
"--fields", "fields",
metavar = "f1,f2,...",
multiple = True,
cls = CliListOption,
help = "Select fields to use."
)
@click.argument(
"output",
required = False,
type = click.Choice(["cli", "plot"]),
default = "cli"
)
def show(params, path, printlist, export, fields, output):
from anisotropy import env
from anisotropy.core.database import Database, Structure
from pandas import DataFrame, Series
import matplotlib.pyplot as plt
env.update(
LOG = os.path.join(path, "logs"),
BUILD = os.path.join(path, "build"),
CONFIG = os.path.join(path, "anisotropy.toml"),
db_path = path
)
args = dict()
for param in params:
args.update(param)
###
db = Database(env["db_name"], env["db_path"])
db.setup()
searchargs = []
if args.get("type"):
searchargs.append(Structure.type == args["type"])
if args.get("direction"):
searchargs.append(Structure.direction == str(args["direction"]))
if args.get("theta"):
searchargs.append(Structure.theta == args["theta"])
result = db.search(searchargs)
result.sort(key = lambda src: f"{ src['type'] }{ src['direction'] }{ src['theta'] }")
df = DataFrame(result)
df_keys = [ key for key in df.keys() ]
if printlist:
click.echo("Avaliable fields for query:")
click.echo("\t{}".format("\n\t".join(df_keys)))
return
if not result:
click.echo("Empty result.")
return
tables = []
if fields:
for fieldslist in fields:
for field in fieldslist:
if field not in df_keys:
click.echo(f"Unknown field '{ field }'. Try to use '--list' flag to see all avaliable fields.")
return
tables.append(df[fieldslist])
else:
tables.append(df)
if output == "plot":
fig, ax = plt.subplots(nrows = 1, ncols = 1)
for table in tables:
table.plot(table.keys()[0], table.keys()[1], ax = ax, style = "o")
plt.legend()
plt.grid()
if export:
supported = ["csv", "jpg"]
filepath, ext = os.path.splitext(export)
ext = ext.replace(".", "")
if ext not in supported:
click.echo(f"Unknown extension '{ ext }'.")
return
if ext == "csv":
if len(tables) == 1:
tables[0].to_csv(export, sep = ";")
else:
for n, table in enumerate(tables):
table.to_csv("{}.{}.{}".format(filepath, n, ext), sep = ";")
elif ext == "jpg":
plt.savefig(export)
else:
if output == "cli":
res = "\n\n".join([ table.to_string() for table in tables ])
click.echo(res)
elif output == "plot":
plt.show()
"""
###
# CLI entry
##
if __name__ == "__main__":
anisotropy()

View File

@ -4,8 +4,8 @@
import os
import toml
from copy import deepcopy
from numpy import arange, array, round
import copy
import numpy as np
class Config(object):
@ -41,7 +41,7 @@ class Config(object):
raise FileNotFoundError(path)
self.content = toml.load(path)
self.options = deepcopy(self.content["options"])
self.options = copy.deepcopy(self.content["options"])
self.content.pop("options")
def dump(self, filename: str):
@ -67,21 +67,20 @@ class Config(object):
self.params = None
def copy(self):
return deepcopy(self)
return copy.deepcopy(self)
def expand(self):
self.cases = []
# Expand structures for each direction and each alpha
for structure in self.content["structures"]:
# ISSUE: precision error 0.06999999999999999
structure = deepcopy(structure)
alphaA = round(arange(
structure = copy.deepcopy(structure)
alphaA = np.round(np.arange(
structure["alpha"][0],
structure["alpha"][1] + structure["alphaStep"],
structure["alphaStep"]
), 9)
directionA = array(structure["directions"], dtype = float)
directionA = np.array(structure["directions"], dtype = float)
structure.pop("alpha")
structure.pop("directions")
@ -100,6 +99,7 @@ class Config(object):
else:
raise IndexError("list index out of range in cause of zero length of 'cases'")
class DefaultConfig(Config):
def __init__(self):
Config.__init__(self)

View File

@ -1,9 +1,6 @@
# -*- coding: utf-8 -*-
# This file is part of anisotropy.
# License: GNU GPL version 3, see the file "LICENSE" for details.
from multiprocessing import Queue, Process
import multiprocessing as mlp
import dill
@ -13,8 +10,8 @@ class ParallelRunner(object):
self.daemon = daemon
self.processes = []
self.queueInput = Queue(maxsize = 1)
self.queueOutput = Queue()
self.queueInput = mlp.Queue(maxsize = 1)
self.queueOutput = mlp.Queue()
self.__pos = -1
self.output = []
@ -41,7 +38,7 @@ class ParallelRunner(object):
def start(self):
for n in range(self.nprocs):
self.processes.append(Process(
self.processes.append(mlp.Process(
target = self.queueRelease,
args = (self.queueInput, self.queueOutput),
name = f"worker-{ n + 1 }"
@ -65,8 +62,3 @@ class ParallelRunner(object):
proc.join()
self.__pos = -1

View File

@ -1,14 +1,12 @@
# -*- coding: utf-8 -*-
# This file is part of anisotropy.
# License: GNU GPL version 3, see the file "LICENSE" for details.
from os import path
import logging
logger = logging.getLogger(__name__)
from anisotropy.openfoam.runnerPresets import postProcess
from anisotropy.openfoam import datReader
from anisotropy.openfoam import commands
from anisotropy.openfoam import conversion
class PostProcess(object):
@ -18,8 +16,7 @@ class PostProcess(object):
def flowRate(self, patch: str):
func = "patchFlowRate(patch={})".format(patch)
filepath = path.join(self.path, "postProcessing", func, "0", "surfaceFieldValue.dat")
postProcess(func, cwd = self.path, logpath = path.join(self.path, "patchFlowRate.log"))
surfaceFieldValue = datReader(filepath)
commands.postProcess(func, cwd = self.path, logpath = path.join(self.path, "patchFlowRate.log"))
surfaceFieldValue = conversion.datReader(filepath)
return surfaceFieldValue["sum(phi)"][-1]

View File

@ -2,7 +2,7 @@
from datetime import datetime
import os
from os import path, PathLike
from os import PathLike
from pathlib import Path
from anisotropy.core.config import DefaultConfig
@ -48,7 +48,6 @@ class UltimateRunner(object):
# Parameters
self.queue = []
def createRow(self):
# create a row in each table for the current case
with self.database:
@ -72,7 +71,6 @@ class UltimateRunner(object):
flow = T.FlowOnephase(mesh_id = mesh.mesh_id, **self.config.params)
self.database.csave(mesh)
def fill(self):
self.config.expand()
logger.info(f"Preparing queue: { len(self.config.cases) }")
@ -88,7 +86,6 @@ class UltimateRunner(object):
}
self.queue.append(kwargs)
def start(self, queue: list = None, nprocs: int = None):
nprocs = nprocs or self.config["nprocs"]
@ -101,7 +98,6 @@ class UltimateRunner(object):
parallel.wait()
@property
def casepath(self) -> PathLike:
params = self.config.params
@ -115,7 +111,6 @@ class UltimateRunner(object):
return path.resolve()
def computeShape(self):
params = self.config.params
shapeParams = self.database.getShape(
@ -148,14 +143,14 @@ class UltimateRunner(object):
filletsEnabled = shapeParams.filletsEnabled
)
with ErrorHandler() as (eh, handler):
handler(shape.build)()
with ErrorHandler() as (eh, handle):
handle(shape.build)()
if not eh.returncode:
self.casepath.mkdir(exist_ok = True)
with ErrorHandler() as (eh, handler):
handler(shape.write)(shapeFile)
with ErrorHandler() as (eh, handle):
handle(shape.write)(shapeFile)
if not eh.returncode:
shapeParams.shapeStatus = "done"
@ -170,9 +165,8 @@ class UltimateRunner(object):
shapeParams.shapeExecutionTime = timer.elapsed()
self.database.csave(shapeParams)
def computeMesh(self):
out, err, returncode = "", "", 0
err, returncode = "", 0
params = self.config.params
meshParams = self.database.getMesh(
params["label"],
@ -238,7 +232,6 @@ class UltimateRunner(object):
meshParams.meshExecutionTime = timer.elapsed()
meshParams.save()
def computeFlow(self):
params = self.config.params
query = (
@ -286,21 +279,20 @@ class UltimateRunner(object):
out, err, returncode = flow.build()
except Exception as e:
out, err, returncode = "", e, 1
# out, err, returncode = "", e, 1
logger.error(e, exc_info = True)
if returncode == 0:
flowParams.flowStatus = "done"
else:
#logger.error(err)
# logger.error(err)
flowParams.flowStatus = "failed"
with self.database:
flowParams.flowExecutionTime = timer.elapsed()
flowParams.save()
def computePostProcess(self):
params = self.config.params
flowParams = self.database.getFlowOnephase(
@ -344,6 +336,3 @@ class UltimateRunner(object):
runner = UltimateRunner(config = kwargs["config"], exec_id = kwargs["exec_id"], typo = "worker")
runner.createRow()
runner.pipeline()

View File

@ -1,11 +1,7 @@
# -*- coding: utf-8 -*-
# This file is part of anisotropy.
# License: GNU GPL version 3, see the file "LICENSE" for details.
import logging
import copy
import time
from types import FunctionType
import contextlib
@ -76,128 +72,6 @@ def setupLogger(level: int, filepath: str = None):
logging.root.addHandler(filehandler)
class struct:
def __init__(self, *args, **kwargs):
if len(args) > 0:
if type(args[0]) == dict:
for (k, v) in args[0].items():
if type(v) == dict:
setattr(self, k, struct(v))
else:
setattr(self, k, v)
else:
self.__dict__.update(kwargs)
def __iter__(self):
for k in self.__dict__:
if type(getattr(self, k)) == struct:
yield k, dict(getattr(self, k))
else:
yield k, getattr(self, k)
def __str__(self):
members = []
for key in self.__dict__.keys():
members.append(f"{ key } = ")
if type(self.__dict__[key]) == str:
members[len(members) - 1] += f"\"{ self.__dict__[key] }\""
else:
members[len(members) - 1] += f"{ self.__dict__[key] }"
return f"struct({', '.join(members)})"
def __repr__(self):
return str(self)
def deepupdate(target, src):
for k, v in src.items():
if isinstance(v, dict):
if k not in target:
target[k] = copy.deepcopy(v)
else:
deepupdate(target[k], v)
else:
target[k] = copy.copy(v)
def collapse(source, key = None, level = 0, sep = "_"):
if isinstance(source, dict) and source:
level = level + 1
res = {}
for k, v in source.items():
ret, lvl = collapse(v, k, level)
for kk, vv in ret.items():
if level == lvl:
newkey = k
else:
newkey = "{}{}{}".format(k, sep, kk)
res.update({ newkey: vv })
if level == 1:
return res
else:
return res, level
else:
return { key: source }, level
def expand(source, sep = "_"):
res = {}
for k, v in source.items():
if k.find(sep) == -1:
res.update({ k: v })
else:
keys = k.split(sep)
cur = res
for n, kk in enumerate(keys):
if not len(keys) == n + 1:
if not cur.get(kk):
cur.update({ kk: {} })
cur = cur[kk]
else:
cur[kk] = v
return res
def timer(func: FunctionType) -> (tuple, float):
"""(Decorator) Returns output of inner function and execution time
:param func: inner function
:type func: FunctionType
:return: output, elapsed time
:rtype: tuple(tuple, float)
"""
def inner(*args, **kwargs):
start = time.monotonic()
ret = func(*args, **kwargs)
elapsed = time.monotonic() - start
return ret, elapsed
return inner
class Timer(object):
def __init__(self):
self.update()
@ -216,7 +90,7 @@ class ErrorHandler(contextlib.AbstractContextManager):
self.traceback = None
def __enter__(self):
return self, self.handler
return self, self.handle
def __exit__(self, exc_type, exc_value, traceback):
if exc_type:

View File

@ -1,8 +1,7 @@
# -*- coding: utf-8 -*-
# This file is part of anisotropy.
# License: GNU GPL version 3, see the file "LICENSE" for details.
from .main import app
from .layouts.main import app
if __name__ == "__main__":
app.run_server(debug = True)
app.run_server(debug = True)

View File

@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
# This file is part of anisotropy.
# License: GNU GPL version 3, see the file "LICENSE" for details.
import dash
import dash_bootstrap_components as dbc
@ -9,4 +7,4 @@ app = dash.Dash(__name__, external_stylesheets = [ dbc.themes.LUX ])
app.title = "anisotropy"
app.config.update(
update_title = None
)
)

View File

@ -0,0 +1 @@
# -*- coding: utf-8 -*-

View File

@ -1,12 +1,7 @@
# -*- coding: utf-8 -*-
# This file is part of anisotropy.
# License: GNU GPL version 3, see the file "LICENSE" for details.
from dash import html
from dash import dcc
import dash_bootstrap_components as dbc
from .styles import *
import anisotropy

View File

@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
# This file is part of anisotropy.
# License: GNU GPL version 3, see the file "LICENSE" for details.
from dash.dash_table import DataTable
from dash import html
@ -10,8 +8,8 @@ from dash.dependencies import Input, Output, State
import os
from .app import app
from .styles import *
from ..app import app
from ..styles import *
###

View File

@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
# This file is part of anisotropy.
# License: GNU GPL version 3, see the file "LICENSE" for details.
from dash import html
from dash import dcc
@ -14,8 +12,8 @@ from . import (
visualization,
about
)
from .app import app
from .styles import *
from ..app import app
from ..styles import *
import anisotropy
###

View File

@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
# This file is part of anisotropy.
# License: GNU GPL version 3, see the file "LICENSE" for details.
from dash.dash_table import DataTable
from dash import html
@ -10,9 +8,9 @@ from dash.dependencies import Input, Output, State
import os
from .app import app
from .styles import *
from .utils import getSize
from ..app import app
from ..styles import *
from ..utils import getSize
###

View File

@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
# This file is part of anisotropy.
# License: GNU GPL version 3, see the file "LICENSE" for details.
from dash import html
from dash import dcc
@ -8,8 +6,8 @@ import dash_bootstrap_components as dbc
from dash.dependencies import Input, Output, State
import os
from .app import app
from .styles import *
from ..app import app
from ..styles import *
###

View File

@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
# This file is part of anisotropy.
# License: GNU GPL version 3, see the file "LICENSE" for details.
from dash.dash_table import DataTable
from dash import html
@ -12,8 +10,8 @@ import dash_vtk.utils
import vtk
import os
from .app import app
from . import styles
from ..app import app
from .. import styles
class MeshRepresentation(object):

View File

@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
# This file is part of anisotropy.
# License: GNU GPL version 3, see the file "LICENSE" for details.
minWidth = {
"min-width": "200px",

View File

@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
# This file is part of anisotropy.
# License: GNU GPL version 3, see the file "LICENSE" for details.
def getSize(bytes):
for unit in ["", "K", "M", "G", "T", "P"]:

View File

@ -1,5 +1,3 @@
# -*- coding: utf-8 -*-
# This file is part of anisotropy.
# License: GNU GPL version 3, see the file "LICENSE" for details.
from .onephase import OnePhaseFlow

View File

@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
# This file is part of anisotropy.
# License: GNU GPL version 3, see the file "LICENSE" for details.
import anisotropy.openfoam.presets as F
import anisotropy.openfoam.runnerPresets as R

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

View File

@ -1,614 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="314.44263mm"
height="158.94112mm"
viewBox="0 0 314.44263 158.94112"
version="1.1"
id="svg56183"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
sodipodi:docname="bc-section.svg"
inkscape:export-filename="/home/nafaryus/pictures/bc-section.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview56185"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="1"
inkscape:pagecheckerboard="true"
inkscape:document-units="mm"
showgrid="false"
inkscape:snap-smooth-nodes="false"
inkscape:object-nodes="false"
inkscape:snap-others="true"
inkscape:snap-midpoints="false"
inkscape:snap-grids="true"
inkscape:snap-intersection-paths="true"
inkscape:object-paths="true"
inkscape:zoom="0.77771465"
inkscape:cx="470.60962"
inkscape:cy="418.53397"
inkscape:window-width="2560"
inkscape:window-height="1440"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1">
<inkscape:grid
type="xygrid"
id="grid56286"
originx="179.97277"
originy="60.614118" />
</sodipodi:namedview>
<defs
id="defs56180">
<marker
style="overflow:visible"
id="Arrow2Lend"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow2Lend"
inkscape:isstock="true">
<path
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
style="fill:context-stroke;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
id="path3583" />
</marker>
<marker
style="overflow:visible"
id="marker85306"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="SquareL"
inkscape:isstock="true">
<path
transform="scale(0.8)"
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
d="M -5,-5 V 5 H 5 V -5 Z"
id="path85304" />
</marker>
<marker
style="overflow:visible"
id="SquareL"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="SquareL"
inkscape:isstock="true">
<path
transform="scale(0.8)"
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
d="M -5,-5 V 5 H 5 V -5 Z"
id="path3632" />
</marker>
<marker
style="overflow:visible"
id="Arrow2Lstart"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow2Lstart"
inkscape:isstock="true">
<path
transform="matrix(1.1,0,0,1.1,1.1,0)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
style="fill:context-stroke;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
id="path3580" />
</marker>
<inkscape:path-effect
effect="powerstroke"
id="path-effect57426"
is_visible="true"
lpeversion="1"
offset_points="0,4.99214"
not_jump="false"
sort_points="true"
interpolator_type="CubicBezierJohan"
interpolator_beta="0.2"
start_linecap_type="zerowidth"
linejoin_type="extrp_arc"
miter_limit="4"
scale_width="1"
end_linecap_type="zerowidth" />
<inkscape:path-effect
effect="powerstroke"
id="path-effect56913"
is_visible="true"
lpeversion="1"
offset_points="0,4.99214"
not_jump="false"
sort_points="true"
interpolator_type="CubicBezierJohan"
interpolator_beta="0.2"
start_linecap_type="zerowidth"
linejoin_type="extrp_arc"
miter_limit="4"
scale_width="1"
end_linecap_type="zerowidth" />
<inkscape:path-effect
effect="powerstroke"
id="path-effect56854"
is_visible="true"
lpeversion="1"
offset_points="0,4.99214"
not_jump="false"
sort_points="true"
interpolator_type="CubicBezierJohan"
interpolator_beta="0.2"
start_linecap_type="zerowidth"
linejoin_type="extrp_arc"
miter_limit="4"
scale_width="1"
end_linecap_type="zerowidth" />
<inkscape:path-effect
effect="skeletal"
id="path-effect56850"
is_visible="true"
lpeversion="1"
pattern="M 0,4.9921382 C 0,2.2364779 2.2364779,0 4.9921382,0 c 2.7556604,0 4.9921383,2.2364779 4.9921383,4.9921382 0,2.7556604 -2.2364779,4.9921383 -4.9921383,4.9921383 C 2.2364779,9.9842765 0,7.7477986 0,4.9921382 Z"
copytype="single_stretched"
prop_scale="1"
scale_y_rel="false"
spacing="0"
normal_offset="0"
tang_offset="0"
prop_units="false"
vertical_pattern="false"
hide_knot="false"
fuse_tolerance="0" />
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath84941">
<ellipse
style="opacity:0.557058;fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="ellipse84943"
cx="115.8729"
cy="101.85342"
rx="12.746092"
ry="12.737163" />
</clipPath>
<marker
style="overflow:visible"
id="Arrow2Lstart-9"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow2Lstart"
inkscape:isstock="true">
<path
transform="matrix(1.1,0,0,1.1,1.1,0)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
style="fill:context-stroke;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
id="path3580-7" />
</marker>
<marker
style="overflow:visible"
id="marker84957"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow2Lstart"
inkscape:isstock="true">
<path
transform="matrix(1.1,0,0,1.1,1.1,0)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
style="fill:context-stroke;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
id="path84955" />
</marker>
<marker
style="overflow:visible"
id="Arrow2Lstart-0"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow2Lstart"
inkscape:isstock="true">
<path
transform="matrix(1.1,0,0,1.1,1.1,0)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
style="fill:context-stroke;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
id="path3580-78" />
</marker>
<marker
style="overflow:visible"
id="marker99413"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow2Lstart"
inkscape:isstock="true">
<path
transform="matrix(1.1,0,0,1.1,1.1,0)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
style="fill:context-stroke;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
id="path99411" />
</marker>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath128015">
<g
id="g128019">
<ellipse
style="opacity:0.539293;fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.132292;stroke-miterlimit:3.87143;stroke-dasharray:none;stroke-opacity:1"
id="ellipse128017"
cx="88.840813"
cy="82.936989"
rx="5.8241587"
ry="5.8200784" />
</g>
</clipPath>
<marker
style="overflow:visible"
id="Arrow2Lstart-8"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow2Lstart"
inkscape:isstock="true">
<path
transform="matrix(1.1,0,0,1.1,1.1,0)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
style="fill:context-stroke;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
id="path3580-1" />
</marker>
<marker
style="overflow:visible"
id="marker128034"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow2Lstart"
inkscape:isstock="true">
<path
transform="matrix(1.1,0,0,1.1,1.1,0)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
style="fill:context-stroke;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
id="path128032" />
</marker>
<marker
style="overflow:visible"
id="marker128038"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow2Lstart"
inkscape:isstock="true">
<path
transform="matrix(1.1,0,0,1.1,1.1,0)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
style="fill:context-stroke;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
id="path128036" />
</marker>
</defs>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(179.97277,60.614116)">
<path
style="fill:none;stroke:#000000;stroke-width:0.454655;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#SquareL);marker-end:url(#marker85306)"
d="M -50.333951,42.061084 35.015,25.270394"
id="path85300"
inkscape:export-filename="/home/nafaryus/pictures/bc-section.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96" />
<g
id="g128744"
transform="matrix(4.5465561,0,0,4.5465561,-476.90484,-348.72219)"
inkscape:export-filename="/home/nafaryus/pictures/bc-section.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<g
id="g128013">
<circle
style="fill:none;stroke:#000000;stroke-width:0.132292;stroke-miterlimit:3.87143;stroke-dasharray:none;stroke-opacity:1"
id="path56310"
cx="73.372551"
cy="82.337601"
r="7.2538719" />
<circle
style="fill:none;stroke:#000000;stroke-width:0.132292;stroke-miterlimit:3.87143;stroke-dasharray:none;stroke-opacity:1"
id="path56310-8"
cx="85.602058"
cy="90.189445"
r="7.2538719" />
<circle
style="fill:none;stroke:#000000;stroke-width:0.132292;stroke-miterlimit:3.87143;stroke-dasharray:none;stroke-opacity:1"
id="path56310-1"
cx="85.427803"
cy="74.297302"
r="7.2538719" />
<circle
style="fill:none;stroke:#000000;stroke-width:0.132292;stroke-miterlimit:3.87143;stroke-dasharray:none;stroke-opacity:1"
id="path56310-8-7"
cx="97.657318"
cy="82.149155"
r="7.2538719" />
<circle
style="fill:none;stroke:#000000;stroke-width:0.132292;stroke-miterlimit:3.87143;stroke-dasharray:none;stroke-opacity:1"
id="path56499"
cx="88.984848"
cy="82.203957"
r="1.3962114" />
<path
style="fill:none;stroke:#000000;stroke-width:0.132292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.87143;stroke-dasharray:none;stroke-opacity:1;marker-mid:url(#Arrow2Lstart)"
d="m 85.462341,74.479241 6.044895,3.929181 6.04489,3.929182"
id="path57428"
sodipodi:nodetypes="ccc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.132292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.87143;stroke-dasharray:none;stroke-opacity:1"
d="M 85.462341,90.800453 97.552126,82.337604"
id="path57430" />
<path
style="fill:none;stroke:#000000;stroke-width:0.132292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.87143;stroke-dasharray:none;stroke-opacity:1;marker-mid:url(#Arrow2Lstart)"
d="m 85.462341,74.479241 2.917272,6.438474 0.639355,1.229333"
id="path57432"
sodipodi:nodetypes="ccc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.132292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.87143;stroke-dasharray:none;stroke-opacity:1"
d="m 85.462341,90.800453 3.556627,-8.653405"
id="path57434" />
<path
style="fill:none;stroke:#000000;stroke-width:0.132292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.87143;stroke-dasharray:none;stroke-opacity:1"
d="M 97.552126,82.337604 89.018968,82.147048"
id="path57436" />
<text
xml:space="preserve"
style="font-size:1.93436px;line-height:1.25;font-family:sans-serif;stroke-width:0.132292;stroke-miterlimit:3.87143;stroke-dasharray:none"
x="94.348389"
y="80.255173"
id="text66411"><tspan
sodipodi:role="line"
id="tspan66409"
style="stroke-width:0.132292;stroke-miterlimit:3.87143;stroke-dasharray:none"
x="94.348389"
y="80.255173">r0</tspan></text>
<path
style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.132292;stroke-miterlimit:3.87143;stroke-dasharray:none;stroke-opacity:1"
d="m 79.926199,85.556546 c 0,-0.0114 0.03758,-0.09436 0.0835,-0.184357 0.263121,-0.515601 0.537035,-1.533623 0.619148,-2.301095 0.05586,-0.522057 0.02577,-1.45223 -0.06348,-1.96259 -0.08419,-0.481401 -0.28619,-1.179064 -0.461016,-1.592211 -0.07661,-0.181036 -0.139286,-0.336701 -0.139286,-0.345922 0,-0.0092 0.170512,0.148108 0.378916,0.349621 1.050128,1.015404 2.24675,1.643618 3.701718,1.943364 0.395919,0.08157 0.551159,0.09207 1.360211,0.09207 0.729024,0 0.991694,-0.01471 1.301917,-0.07289 0.334615,-0.06276 0.974861,-0.232874 1.196273,-0.317858 0.04792,-0.01839 0.0212,0.04366 -0.08676,0.201516 -0.380492,0.556316 -0.347487,1.293663 0.07975,1.781563 0.126375,0.14432 0.127887,0.149566 0.03493,0.121219 -0.768825,-0.234462 -1.312619,-0.329468 -2.059748,-0.35986 -2.090932,-0.08505 -4.038469,0.698631 -5.508856,2.216757 -0.240466,0.248272 -0.437211,0.442073 -0.437211,0.430667 z"
id="path84293" />
<path
style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.132292;stroke-miterlimit:3.87143;stroke-dasharray:none;stroke-opacity:1"
d="m 90.309505,81.637429 c -0.07429,-0.205432 -0.321107,-0.498043 -0.536925,-0.636533 -0.203752,-0.130747 -0.56682,-0.242115 -0.789709,-0.242236 -0.13291,-7.1e-5 -0.126678,-0.0066 0.18394,-0.193444 0.537118,-0.323045 0.898708,-0.610455 1.417616,-1.126797 0.272528,-0.27118 0.495505,-0.485741 0.495505,-0.476803 0,0.0089 -0.06037,0.153562 -0.134158,0.321384 -0.261916,0.595703 -0.460209,1.358994 -0.53993,2.078354 -0.04509,0.406883 -0.04703,0.412436 -0.09634,0.276075 z"
id="path84332" />
<path
style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.132292;stroke-miterlimit:3.87143;stroke-dasharray:none;stroke-opacity:1"
d="m 90.818594,85.093956 c -0.481363,-0.49995 -1.019324,-0.914284 -1.664582,-1.282051 l -0.292014,-0.166434 0.247746,-0.01989 c 0.501308,-0.04024 0.961655,-0.357545 1.169463,-0.806076 l 0.0891,-0.192313 0.04609,0.375066 c 0.08823,0.717933 0.297292,1.498041 0.553862,2.066704 0.0618,0.136966 0.107048,0.254337 0.100559,0.260827 -0.0065,0.0065 -0.119092,-0.09964 -0.250227,-0.235837 z"
id="path84371" />
<text
xml:space="preserve"
style="font-size:2.11667px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583"
x="90.44931"
y="64.974525"
id="text105372"><tspan
sodipodi:role="line"
id="tspan105370"
style="font-size:2.11667px;stroke-width:0.264583"
x="90.44931"
y="64.974525">r0/(1-s)</tspan></text>
<circle
style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:0.6, 0.1;stroke-dashoffset:0;stroke-opacity:1"
id="path110472"
cx="85.478516"
cy="74.264915"
r="7.9558229" />
<circle
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:0.6, 0.1;stroke-dashoffset:0;stroke-opacity:1"
id="path110472-3"
cx="97.727737"
cy="82.227509"
r="7.9558229" />
<circle
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:0.6, 0.1;stroke-dashoffset:0;stroke-opacity:1"
id="path110576-0"
cx="88.931404"
cy="82.12664"
r="0.76913798" />
<path
style="fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lstart)"
d="m 85.462341,74.479241 2.487853,-7.776463"
id="path127339" />
<path
style="fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 87.950194,66.702778 0.618959,-2.309987 1.565703,0.009"
id="path127462"
sodipodi:nodetypes="ccc" />
<circle
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:0.6, 0.1;stroke-dashoffset:0;stroke-opacity:1"
id="path110472-0"
cx="85.726807"
cy="90.321167"
r="7.9558229" />
<circle
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:0.6, 0.1;stroke-dashoffset:0;stroke-opacity:1"
id="path110472-06"
cx="73.315056"
cy="82.339272"
r="7.9558229" />
</g>
<g
id="g105914"
style="opacity:1;fill:none;stroke:#000000">
<ellipse
style="opacity:0.539293;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.132292;stroke-miterlimit:3.87143;stroke-dasharray:none;stroke-opacity:1"
id="path84573"
cx="88.840813"
cy="82.936989"
rx="5.8241587"
ry="5.8200784" />
</g>
</g>
<g
id="g138021"
transform="matrix(4.5465561,0,0,4.5465561,-476.90484,-348.72219)"
inkscape:export-filename="/home/nafaryus/pictures/bc-section.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<g
id="g128013-1"
clip-path="url(#clipPath128015)"
transform="matrix(2.0618003,0,0,2.0618003,-60.921935,-95.333573)"
style="stroke-width:0.0485013;stroke-miterlimit:4;stroke-dasharray:none">
<circle
style="fill:none;stroke:#000000;stroke-width:0.0485013;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path56310-9"
cx="73.372551"
cy="82.337601"
r="7.2538719" />
<circle
style="fill:none;stroke:#000000;stroke-width:0.0485013;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path56310-8-72"
cx="85.602058"
cy="90.189445"
r="7.2538719" />
<circle
style="fill:none;stroke:#000000;stroke-width:0.0485013;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path56310-1-5"
cx="85.427803"
cy="74.297302"
r="7.2538719" />
<circle
style="fill:none;stroke:#000000;stroke-width:0.0485013;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path56310-8-7-7"
cx="97.657318"
cy="82.149155"
r="7.2538719" />
<circle
style="fill:none;stroke:#000000;stroke-width:0.0485013;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path56499-37"
cx="88.984848"
cy="82.203957"
r="1.3962114" />
<path
style="fill:none;stroke:#000000;stroke-width:0.0485013;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-mid:url(#Arrow2Lstart-8)"
d="m 85.462341,74.479241 6.044895,3.929181 6.04489,3.929182"
id="path57428-3"
sodipodi:nodetypes="ccc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.0485013;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 85.462341,90.800453 97.552126,82.337604"
id="path57430-9" />
<path
style="fill:none;stroke:#000000;stroke-width:0.0485013;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-mid:url(#Arrow2Lstart-8)"
d="m 85.462341,74.479241 2.917272,6.438474 0.639355,1.229333"
id="path57432-9"
sodipodi:nodetypes="ccc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.0485013;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 85.462341,90.800453 3.556627,-8.653405"
id="path57434-0" />
<path
style="fill:none;stroke:#000000;stroke-width:0.0485013;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 97.552126,82.337604 89.018968,82.147048"
id="path57436-5" />
<text
xml:space="preserve"
style="font-size:1.93436px;line-height:1.25;font-family:sans-serif;stroke-width:0.0485013;stroke-miterlimit:4;stroke-dasharray:none"
x="94.348389"
y="80.255173"
id="text66411-2"><tspan
sodipodi:role="line"
id="tspan66409-6"
style="stroke-width:0.0485013;stroke-miterlimit:4;stroke-dasharray:none"
x="94.348389"
y="80.255173">r0</tspan></text>
<path
style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.0485013;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 79.926199,85.556546 c 0,-0.0114 0.03758,-0.09436 0.0835,-0.184357 0.263121,-0.515601 0.537035,-1.533623 0.619148,-2.301095 0.05586,-0.522057 0.02577,-1.45223 -0.06348,-1.96259 -0.08419,-0.481401 -0.28619,-1.179064 -0.461016,-1.592211 -0.07661,-0.181036 -0.139286,-0.336701 -0.139286,-0.345922 0,-0.0092 0.170512,0.148108 0.378916,0.349621 1.050128,1.015404 2.24675,1.643618 3.701718,1.943364 0.395919,0.08157 0.551159,0.09207 1.360211,0.09207 0.729024,0 0.991694,-0.01471 1.301917,-0.07289 0.334615,-0.06276 0.974861,-0.232874 1.196273,-0.317858 0.04792,-0.01839 0.0212,0.04366 -0.08676,0.201516 -0.380492,0.556316 -0.347487,1.293663 0.07975,1.781563 0.126375,0.14432 0.127887,0.149566 0.03493,0.121219 -0.768825,-0.234462 -1.312619,-0.329468 -2.059748,-0.35986 -2.090932,-0.08505 -4.038469,0.698631 -5.508856,2.216757 -0.240466,0.248272 -0.437211,0.442073 -0.437211,0.430667 z"
id="path84293-2" />
<path
style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.0485013;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 90.309505,81.637429 c -0.07429,-0.205432 -0.321107,-0.498043 -0.536925,-0.636533 -0.203752,-0.130747 -0.56682,-0.242115 -0.789709,-0.242236 -0.13291,-7.1e-5 -0.126678,-0.0066 0.18394,-0.193444 0.537118,-0.323045 0.898708,-0.610455 1.417616,-1.126797 0.272528,-0.27118 0.495505,-0.485741 0.495505,-0.476803 0,0.0089 -0.06037,0.153562 -0.134158,0.321384 -0.261916,0.595703 -0.460209,1.358994 -0.53993,2.078354 -0.04509,0.406883 -0.04703,0.412436 -0.09634,0.276075 z"
id="path84332-1" />
<path
style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.0485013;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 90.818594,85.093956 c -0.481363,-0.49995 -1.019324,-0.914284 -1.664582,-1.282051 l -0.292014,-0.166434 0.247746,-0.01989 c 0.501308,-0.04024 0.961655,-0.357545 1.169463,-0.806076 l 0.0891,-0.192313 0.04609,0.375066 c 0.08823,0.717933 0.297292,1.498041 0.553862,2.066704 0.0618,0.136966 0.107048,0.254337 0.100559,0.260827 -0.0065,0.0065 -0.119092,-0.09964 -0.250227,-0.235837 z"
id="path84371-6" />
<text
xml:space="preserve"
style="font-size:2.11667px;line-height:1.25;font-family:sans-serif;stroke-width:0.0485013;stroke-miterlimit:4;stroke-dasharray:none"
x="90.44931"
y="64.974525"
id="text105372-2"><tspan
sodipodi:role="line"
id="tspan105370-0"
style="font-size:2.11667px;stroke-width:0.0485013;stroke-miterlimit:4;stroke-dasharray:none"
x="90.44931"
y="64.974525">r0/(1-s)</tspan></text>
<circle
style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.0485013;stroke-miterlimit:4;stroke-dasharray:0.38801, 0.0485013;stroke-dashoffset:0;stroke-opacity:1"
id="path110472-8"
cx="85.478516"
cy="74.264915"
r="7.9558229" />
<circle
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.0485013;stroke-miterlimit:4;stroke-dasharray:0.38801, 0.0485013;stroke-dashoffset:0;stroke-opacity:1"
id="path110472-3-3"
cx="97.727737"
cy="82.227509"
r="7.9558229" />
<circle
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.0485013;stroke-miterlimit:4;stroke-dasharray:0.38801, 0.0485013;stroke-dashoffset:0;stroke-opacity:1"
id="path110576-0-6"
cx="88.931404"
cy="82.12664"
r="0.76913798" />
<path
style="fill:none;stroke:#000000;stroke-width:0.0485013;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lstart-8)"
d="m 85.462341,74.479241 2.487853,-7.776463"
id="path127339-4" />
<path
style="fill:none;stroke:#000000;stroke-width:0.0485013;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 87.950194,66.702778 0.618959,-2.309987 1.565703,0.009"
id="path127462-3"
sodipodi:nodetypes="ccc" />
<circle
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.0485013;stroke-miterlimit:4;stroke-dasharray:0.38801, 0.0485013;stroke-dashoffset:0;stroke-opacity:1"
id="path110472-0-4"
cx="85.726807"
cy="90.321167"
r="7.9558229" />
<circle
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.0485013;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path110472-06-6"
cx="73.315056"
cy="82.339272"
r="7.9558229" />
<text
xml:space="preserve"
style="font-size:1.02661px;line-height:1.25;font-family:sans-serif;stroke-width:0.006224"
x="87.772675"
y="82.507118"
id="text133338"><tspan
sodipodi:role="line"
id="tspan133336"
style="font-size:1.02661px;stroke-width:0.006224"
x="87.772675"
y="82.507118">r1</tspan></text>
</g>
<g
id="g105914-4"
style="fill:none;stroke:#000000;stroke-width:0.0485013;stroke-miterlimit:4;stroke-dasharray:none"
transform="matrix(2.0618003,0,0,2.0618003,-60.760422,-95.464691)">
<ellipse
style="opacity:0.539293;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.0485013;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path84573-6"
cx="88.840813"
cy="82.936989"
rx="5.8241587"
ry="5.8200784" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 29 KiB

View File

@ -1,433 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="108.85057mm"
height="52.334656mm"
viewBox="0 0 108.85057 52.334656"
version="1.1"
id="svg5"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
sodipodi:docname="fc_section.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="true"
inkscape:zoom="0.77771465"
inkscape:cx="142.72587"
inkscape:cy="-147.22624"
inkscape:window-width="1272"
inkscape:window-height="1414"
inkscape:window-x="4"
inkscape:window-y="20"
inkscape:window-maximized="1"
inkscape:current-layer="layer1">
<inkscape:grid
type="xygrid"
id="grid824"
originx="-58.158336"
originy="-32.382008" />
</sodipodi:namedview>
<defs
id="defs2">
<marker
style="overflow:visible"
id="SquareL"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="SquareL"
inkscape:isstock="true">
<path
transform="scale(0.8)"
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
d="M -5,-5 V 5 H 5 V -5 Z"
id="path3632" />
</marker>
<marker
style="overflow:visible"
id="marker3964"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow2Lstart"
inkscape:isstock="true">
<path
transform="matrix(1.1,0,0,1.1,1.1,0)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
style="fill:context-stroke;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
id="path3962" />
</marker>
<marker
style="overflow:visible"
id="marker3954"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow2Lstart"
inkscape:isstock="true">
<path
transform="matrix(1.1,0,0,1.1,1.1,0)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
style="fill:context-stroke;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
id="path3952" />
</marker>
<marker
style="overflow:visible"
id="Arrow2Lend"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow2Lend"
inkscape:isstock="true">
<path
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
style="fill:context-stroke;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
id="path3583" />
</marker>
<marker
style="overflow:visible"
id="Arrow2Lstart"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow2Lstart"
inkscape:isstock="true">
<path
transform="matrix(1.1,0,0,1.1,1.1,0)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
style="fill:context-stroke;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
id="path3580" />
</marker>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath39060">
<circle
style="opacity:0.537815;fill:#0000bf;fill-opacity:1;stroke:#000000;stroke-width:0.0804677;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="circle39062"
cx="84.469406"
cy="64.074112"
r="8.5161552" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath39056">
<circle
style="opacity:0.537815;fill:#0000bf;fill-opacity:1;stroke:#000000;stroke-width:0.0804677;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="circle39058"
cx="84.469406"
cy="64.074112"
r="8.5161552" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath39052">
<circle
style="opacity:0.537815;fill:#0000bf;fill-opacity:1;stroke:#000000;stroke-width:0.0804677;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="circle39054"
cx="84.469406"
cy="64.074112"
r="8.5161552" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath39048">
<circle
style="opacity:0.537815;fill:#0000bf;fill-opacity:1;stroke:#000000;stroke-width:0.0804677;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="circle39050"
cx="84.469406"
cy="64.074112"
r="8.5161552" />
</clipPath>
<marker
style="overflow:visible"
id="Arrow2Lend-1"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow2Lend"
inkscape:isstock="true">
<path
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
style="fill:context-stroke;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
id="path3583-2" />
</marker>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath39044">
<circle
style="opacity:0.537815;fill:#0000bf;fill-opacity:1;stroke:#000000;stroke-width:0.0804677;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="circle39046"
cx="84.469406"
cy="64.074112"
r="8.5161552" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath39040">
<circle
style="opacity:0.537815;fill:#0000bf;fill-opacity:1;stroke:#000000;stroke-width:0.0804677;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="circle39042"
cx="84.469406"
cy="64.074112"
r="8.5161552" />
</clipPath>
<marker
style="overflow:visible"
id="marker39086"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow2Lend"
inkscape:isstock="true">
<path
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
style="fill:context-stroke;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
id="path39084" />
</marker>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath39036">
<circle
style="opacity:0.537815;fill:#0000bf;fill-opacity:1;stroke:#000000;stroke-width:0.0804677;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="circle39038"
cx="84.469406"
cy="64.074112"
r="8.5161552" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath39032">
<circle
style="opacity:0.537815;fill:#0000bf;fill-opacity:1;stroke:#000000;stroke-width:0.0804677;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="circle39034"
cx="84.469406"
cy="64.074112"
r="8.5161552" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath39028">
<circle
style="opacity:0.537815;fill:#0000bf;fill-opacity:1;stroke:#000000;stroke-width:0.0804677;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="circle39030"
cx="84.469406"
cy="64.074112"
r="8.5161552" />
</clipPath>
</defs>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-58.158334,-32.382008)">
<path
style="fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#SquareL);marker-end:url(#SquareL)"
d="M 92.604166,67.468749 129.64583,58.208333"
id="path39935" />
<g
id="g56000">
<g
id="g55305">
<circle
style="fill:none;stroke:#000000;stroke-width:0.117466;stroke-miterlimit:3.64;stroke-dasharray:none"
id="path848-8"
cx="71.4375"
cy="71.4375"
r="13.229166"
clip-path="url(#clipPath39060)"
transform="matrix(2.252421,0,0,2.252421,-42.538312,-92.7579)" />
<circle
style="fill:none;stroke:#000000;stroke-width:0.117466;stroke-miterlimit:3.64;stroke-dasharray:none"
id="path850-1"
cx="84.703644"
cy="48.372261"
r="13.229166"
clip-path="url(#clipPath39056)"
transform="matrix(2.252421,0,0,2.252421,-42.538312,-92.7579)" />
<circle
style="fill:none;stroke:#000000;stroke-width:0.117466;stroke-miterlimit:3.64;stroke-dasharray:none"
id="path954-5"
cx="97.895836"
cy="71.4375"
r="13.229166"
clip-path="url(#clipPath39052)"
transform="matrix(2.252421,0,0,2.252421,-42.538312,-92.7579)" />
<circle
style="fill:none;stroke:#000000;stroke-width:0.117466;stroke-miterlimit:3.64;stroke-dasharray:none"
id="path1058-4"
cx="84.553284"
cy="63.735641"
r="1.9282231"
clip-path="url(#clipPath39048)"
transform="matrix(2.252421,0,0,2.252421,-42.538312,-92.7579)" />
<path
style="fill:none;stroke:#000000;stroke-width:0.117466;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.64;stroke-dasharray:none;stroke-opacity:1;marker-mid:url(#Arrow2Lend-1)"
d="M 84.666667,63.5 V 61.64638 47.625"
id="path1175-4"
sodipodi:nodetypes="ccc"
clip-path="url(#clipPath39044)"
transform="matrix(2.252421,0,0,2.252421,-42.538312,-92.7579)" />
<path
style="fill:none;stroke:#000000;stroke-width:0.117466;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.64;stroke-dasharray:none;stroke-opacity:1"
d="m 84.666666,47.624999 13.229166,23.8125"
id="path5727-9"
clip-path="url(#clipPath39040)"
transform="matrix(2.252421,0,0,2.252421,-42.538312,-92.7579)" />
<path
style="fill:none;stroke:#000000;stroke-width:0.117466;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.64;stroke-dasharray:none;stroke-opacity:1;marker-mid:url(#Arrow2Lend-1)"
d="m 84.666666,47.624999 -6.614583,11.90625 -6.614584,11.90625"
id="path5842-3"
sodipodi:nodetypes="ccc"
clip-path="url(#clipPath39036)"
transform="matrix(2.252421,0,0,2.252421,-42.538312,-92.7579)" />
<path
style="fill:none;stroke:#000000;stroke-width:0.117466;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.64;stroke-dasharray:none;stroke-opacity:1"
d="M 97.895832,71.437499 H 71.437499"
id="path5844-4"
clip-path="url(#clipPath39032)"
transform="matrix(2.252421,0,0,2.252421,-42.538312,-92.7579)" />
<path
style="fill:none;stroke:#000000;stroke-width:0.117466;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.64;stroke-dasharray:none;stroke-opacity:1"
d="m 84.666666,63.499999 -13.229167,7.9375"
id="path5846-5"
clip-path="url(#clipPath39028)"
transform="matrix(2.252421,0,0,2.252421,-42.538312,-92.7579)" />
<circle
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.264583;stroke-miterlimit:3.64;stroke-dasharray:none;stroke-dashoffset:0"
id="path37196-5"
cx="147.69464"
cy="51.789608"
r="19.181969" />
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583;stroke-miterlimit:3.64;stroke-dasharray:none"
x="148.22005"
y="52.338802"
id="text50371"><tspan
sodipodi:role="line"
id="tspan50369"
style="stroke-width:0.264583;stroke-miterlimit:3.64;stroke-dasharray:none"
x="148.22005"
y="52.338802">$r_1$</tspan></text>
</g>
<path
style="opacity:1;fill:#666666;fill-opacity:1;stroke:none;stroke-width:0.160727;stroke-miterlimit:3.64;stroke-dasharray:none;stroke-dashoffset:0"
d="m 559.92171,245.18954 c -0.0532,-0.3094 -0.2146,-1.5028 -0.35861,-2.652 -1.46487,-11.69025 -5.48253,-24.75373 -10.99495,-35.75032 -0.53357,-1.06441 -0.97013,-1.97429 -0.97013,-2.02195 0,-0.0477 0.52437,0.30322 1.16527,0.77975 5.88031,4.37215 13.77465,4.60419 19.74838,0.58047 1.41668,-0.95422 3.51461,-3.02948 4.49227,-4.44372 2.03432,-2.94276 3.18802,-6.8704 3.0164,-10.269 -0.0331,-0.65559 -0.009,-1.19197 0.053,-1.19197 0.0623,0 0.29874,0.0705 0.52549,0.15675 0.41144,0.15643 0.41228,0.15496 0.41228,-0.72328 v -0.88002 h -0.61656 -0.61655 l -0.27503,-0.98921 c -0.88378,-3.1788 -2.20252,-5.47117 -4.42979,-7.70038 -2.65982,-2.66212 -5.57764,-4.21164 -9.07888,-4.82135 -0.71162,-0.12392 -1.11269,-0.27808 -1.21348,-0.46642 -0.13538,-0.25296 -0.0272,-0.29175 1.07247,-0.38471 0.67268,-0.0569 1.845,-0.10368 2.60516,-0.10404 3.33202,-0.002 9.81678,-0.66873 14.96357,-1.53945 9.67314,-1.63649 19.42696,-4.65871 28.43733,-8.81133 1.45233,-0.66933 2.66283,-1.19473 2.69,-1.16756 0.0272,0.0272 -0.68882,0.55066 -1.5911,1.16329 -10.26262,6.96813 -19.50836,15.81797 -27.01156,25.85495 -11.62089,15.54516 -19.08074,33.92502 -21.56447,53.13132 -0.26342,2.03699 -0.39043,2.65758 -0.46052,2.25018 z"
id="path55613"
transform="scale(0.26458333)" />
<path
style="opacity:1;fill:#666666;fill-opacity:1;stroke:none;stroke-width:0.160727;stroke-miterlimit:3.64;stroke-dasharray:none;stroke-dashoffset:0"
d="m 541.73147,195.00179 c -2.13272,-3.32518 -6.77581,-9.35149 -9.81938,-12.74465 -7.00489,-7.80951 -15.4454,-14.98201 -23.81642,-20.2385 -0.81969,-0.51472 -1.46518,-0.961 -1.43443,-0.99175 0.0307,-0.0308 1.497,0.66071 3.25834,1.53659 14.31653,7.11931 29.86696,11.10437 45.76082,11.72695 1.9259,0.0755 3.53125,0.16678 3.56744,0.20297 0.25257,0.25257 -0.38842,0.47606 -1.77326,0.61827 -2.21148,0.22711 -3.89199,0.68985 -5.77801,1.59103 -7.01285,3.3509 -10.78807,10.92638 -9.31986,18.70155 0.0626,0.3315 0.0877,0.6021 0.0557,0.60133 -0.0319,-8.1e-4 -0.34738,-0.45248 -0.70098,-1.00379 z"
id="path55652"
transform="scale(0.26458333)" />
<path
style="opacity:1;fill:#666666;fill-opacity:1;stroke:none;stroke-width:0.160727;stroke-miterlimit:3.64;stroke-dasharray:none;stroke-dashoffset:0"
d="m 499.46018,157.08415 c -1.51625,-0.77081 -1.47085,-0.73644 -1.2564,-0.95088 0.11779,-0.11779 0.52687,0.0598 1.35546,0.58832 1.97128,1.25747 1.93348,1.39582 -0.0991,0.36256 z"
id="path55691"
transform="scale(0.26458333)" />
</g>
<path
style="opacity:1;fill:#666666;fill-opacity:1;stroke:none;stroke-width:0.160727;stroke-miterlimit:3.64;stroke-dasharray:none;stroke-dashoffset:0"
d=""
id="path55730"
transform="scale(0.26458333)" />
<g
id="g55982">
<g
id="g40049">
<circle
style="fill:none;stroke:#000000;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none"
id="path848"
cx="71.4375"
cy="71.4375"
r="13.229166" />
<circle
style="fill:none;stroke:#000000;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none"
id="path850"
cx="84.703644"
cy="48.372261"
r="13.229166" />
<circle
style="fill:none;stroke:#000000;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none"
id="path954"
cx="97.895836"
cy="71.4375"
r="13.229166" />
<circle
style="fill:none;stroke:#000000;stroke-width:0.192822"
id="path1058"
cx="84.553284"
cy="63.735641"
r="1.9282231" />
<path
style="fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:0.4;stroke-dasharray:none;stroke-opacity:1;marker-mid:url(#Arrow2Lend)"
d="M 84.666667,63.5 V 61.64638 47.625"
id="path1175"
sodipodi:nodetypes="ccc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 84.666666,47.624999 13.229166,23.8125"
id="path5727" />
<path
style="fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-mid:url(#Arrow2Lend)"
d="m 84.666666,47.624999 -6.614583,11.90625 -6.614584,11.90625"
id="path5842"
sodipodi:nodetypes="ccc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 97.895832,71.437499 H 71.437499"
id="path5844" />
<path
style="fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 84.666666,63.499999 -13.229167,7.9375"
id="path5846" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none"
x="77.600502"
y="53.555672"
id="text25461"><tspan
sodipodi:role="line"
id="tspan25459"
style="font-size:4.23333px;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none"
x="77.600502"
y="53.555672">$r_0$</tspan></text>
<circle
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.0804676;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path37196"
cx="84.469406"
cy="64.074112"
r="8.5161552" />
</g>
<path
style="opacity:1;fill:#666666;fill-opacity:1;stroke:none;stroke-width:0.321455;stroke-miterlimit:3.64;stroke-dasharray:none;stroke-dashoffset:0"
d="m 327.24085,241.11446 c 0,-1.19938 -0.21826,-2.65686 -0.49848,-3.3287 -0.65687,-1.57489 -2.25383,-3.22511 -3.81036,-3.93742 l -1.25502,-0.57433 1.89793,-0.20879 c 6.20746,-0.68286 10.9919,-1.73579 14.66008,-3.22631 1.08474,-0.44077 2.01016,-0.76349 2.0565,-0.71715 0.0463,0.0463 -1.12955,1.06683 -2.61308,2.26778 -3.0644,2.4807 -5.99736,5.65235 -8.63101,9.33342 l -1.80656,2.52506 z"
id="path55769"
transform="scale(0.26458333)" />
<path
style="opacity:1;fill:#666666;fill-opacity:1;stroke:none;stroke-width:0.321455;stroke-miterlimit:3.64;stroke-dasharray:none;stroke-dashoffset:0"
d="m 310.05091,239.44731 c -1.8405,-2.50935 -6.33816,-7.09444 -8.77407,-8.94461 -0.91681,-0.69636 -1.6076,-1.32544 -1.53509,-1.39795 0.0725,-0.0725 1.26273,0.30365 2.64492,0.83593 4.09416,1.57665 10.2335,2.95182 13.18247,2.95278 1.49435,4.9e-4 2.10408,0.47213 0.98112,0.75891 -1.15009,0.29371 -3.09194,2.08179 -3.82827,3.52512 -0.37271,0.73057 -0.76632,2.03079 -0.87468,2.88938 l -0.19701,1.56106 z"
id="path55808"
transform="scale(0.26458333)" />
<path
style="opacity:1;fill:#666666;fill-opacity:1;stroke:none;stroke-width:0.321455;stroke-miterlimit:3.64;stroke-dasharray:none;stroke-dashoffset:0"
d="m 319.61652,261.62926 c -0.46117,-3.11934 -1.69823,-7.44014 -3.1588,-11.03307 -0.60593,-1.49054 -1.0536,-2.75817 -0.99482,-2.81694 0.0588,-0.0588 0.63072,0.11201 1.27099,0.37953 2.32418,0.9711 6.16,0.32504 8.0099,-1.34909 0.73511,-0.66527 0.71788,-0.36076 -0.0666,1.17697 -1.88936,3.70344 -3.60306,9.18156 -4.31804,13.80333 l -0.36758,2.37607 z"
id="path55847"
transform="scale(0.26458333)" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 20 KiB

View File

@ -1,767 +0,0 @@
%LaTeX with PSTricks extensions
%%Creator: Inkscape 1.1 (c68e22c387, 2021-05-23)
%%Please note this file requires PSTricks extensions
\psset{xunit=.5pt,yunit=.5pt,runit=.5pt}
\begin{pspicture}(411.4037317,197.80027375)
{
\newrgbcolor{curcolor}{0 0 0}
\pscustom[linewidth=0.37795276,linecolor=curcolor]
{
\newpath
\moveto(130.18897134,65.18896918)
\lineto(270.18896126,100.18896666)
}
}
{
\newrgbcolor{curcolor}{0 0 0}
\pscustom[linewidth=0.99999833,linecolor=curcolor]
{
\newpath
\moveto(340.18896593,62.61633477)
\curveto(340.18896593,108.16724613)(312.74957732,149.23323957)(270.66677706,166.66383207)
\curveto(228.58406263,184.09438902)(180.14608194,174.45661335)(147.93686235,142.24739375)
\curveto(115.72764276,110.03817416)(106.08986709,61.60019348)(123.52042404,19.51747905)
\curveto(140.95101654,-22.56532121)(182.01700997,-50.00470982)(227.56792134,-50.00470982)
\curveto(273.1188327,-50.00470982)(314.18482614,-22.56532121)(331.61541864,19.51747905)
\curveto(349.04597559,61.60019348)(339.40819992,110.03817416)(307.19898032,142.24739375)
\curveto(274.98976073,174.45661335)(226.55178005,184.09438902)(184.46906562,166.66383207)
\curveto(142.38626536,149.23323957)(114.94687675,108.16724613)(114.94687675,62.61633477)
\curveto(114.94687675,17.0654234)(142.38626536,-24.00057003)(184.46906562,-41.43116253)
\curveto(226.55178005,-58.86171948)(274.98976073,-49.22394381)(307.19898032,-17.01472422)
\curveto(339.40819992,15.19449537)(349.04597559,63.63247606)(331.61541864,105.71519049)
\curveto(314.18482614,147.79799075)(273.1188327,175.23737936)(227.56792134,175.23737936)
\curveto(182.01700997,175.23737936)(140.95101654,147.79799075)(123.52042404,105.71519049)
\curveto(106.08986709,63.63247606)(115.72764276,15.19449537)(147.93686235,-17.01472422)
\curveto(180.14608194,-49.22394381)(228.58406263,-58.86171948)(270.66677706,-41.43116253)
\curveto(312.74957732,-24.00057003)(340.18896593,17.0654234)(340.18896593,62.61633477)
\closepath
}
}
{
\newrgbcolor{curcolor}{0 0 0}
\pscustom[linewidth=0.99999833,linecolor=curcolor]
{
\newpath
\moveto(453.12480548,258.97272628)
\curveto(453.12480548,304.52363764)(425.68541687,345.58963108)(383.60261661,363.02022358)
\curveto(341.51990218,380.45078053)(293.0819215,370.81300486)(260.8727019,338.60378526)
\curveto(228.66348231,306.39456567)(219.02570664,257.95658499)(236.45626359,215.87387056)
\curveto(253.88685609,173.7910703)(294.95284952,146.35168169)(340.50376089,146.35168169)
\curveto(386.05467226,146.35168169)(427.12066569,173.7910703)(444.55125819,215.87387056)
\curveto(461.98181514,257.95658499)(452.34403947,306.39456567)(420.13481988,338.60378526)
\curveto(387.92560028,370.81300486)(339.4876196,380.45078053)(297.40490517,363.02022358)
\curveto(255.32210491,345.58963108)(227.8827163,304.52363764)(227.8827163,258.97272628)
\curveto(227.8827163,213.42181491)(255.32210491,172.35582148)(297.40490517,154.92522898)
\curveto(339.4876196,137.49467203)(387.92560028,147.1324477)(420.13481988,179.34166729)
\curveto(452.34403947,211.55088688)(461.98181514,259.98886757)(444.55125819,302.071582)
\curveto(427.12066569,344.15438226)(386.05467226,371.59377087)(340.50376089,371.59377087)
\curveto(294.95284952,371.59377087)(253.88685609,344.15438226)(236.45626359,302.071582)
\curveto(219.02570664,259.98886757)(228.66348231,211.55088688)(260.8727019,179.34166729)
\curveto(293.0819215,147.1324477)(341.51990218,137.49467203)(383.60261661,154.92522898)
\curveto(425.68541687,172.35582148)(453.12480548,213.42181491)(453.12480548,258.97272628)
\closepath
}
}
{
\newrgbcolor{curcolor}{0 0 0}
\pscustom[linewidth=0.99999833,linecolor=curcolor]
{
\newpath
\moveto(565.43108758,62.61633477)
\curveto(565.43108758,108.16724613)(537.99169897,149.23323957)(495.90889871,166.66383207)
\curveto(453.82618428,184.09438902)(405.38820359,174.45661335)(373.178984,142.24739375)
\curveto(340.96976441,110.03817416)(331.33198874,61.60019348)(348.76254569,19.51747905)
\curveto(366.19313819,-22.56532121)(407.25913162,-50.00470982)(452.81004299,-50.00470982)
\curveto(498.36095435,-50.00470982)(539.42694779,-22.56532121)(556.85754029,19.51747905)
\curveto(574.28809724,61.60019348)(564.65032157,110.03817416)(532.44110197,142.24739375)
\curveto(500.23188238,174.45661335)(451.7939017,184.09438902)(409.71118727,166.66383207)
\curveto(367.62838701,149.23323957)(340.1889984,108.16724613)(340.1889984,62.61633477)
\curveto(340.1889984,17.0654234)(367.62838701,-24.00057003)(409.71118727,-41.43116253)
\curveto(451.7939017,-58.86171948)(500.23188238,-49.22394381)(532.44110197,-17.01472422)
\curveto(564.65032157,15.19449537)(574.28809724,63.63247606)(556.85754029,105.71519049)
\curveto(539.42694779,147.79799075)(498.36095435,175.23737936)(452.81004299,175.23737936)
\curveto(407.25913162,175.23737936)(366.19313819,147.79799075)(348.76254569,105.71519049)
\curveto(331.33198874,63.63247606)(340.96976441,15.19449537)(373.178984,-17.01472422)
\curveto(405.38820359,-49.22394381)(453.82618428,-58.86171948)(495.90889871,-41.43116253)
\curveto(537.99169897,-24.00057003)(565.43108758,17.0654234)(565.43108758,62.61633477)
\closepath
}
}
{
\newrgbcolor{curcolor}{0 0 0}
\pscustom[linewidth=0.99999833,linecolor=curcolor]
{
\newpath
\moveto(355.63886394,128.1829283)
\curveto(355.63886394,142.8082659)(337.95749265,150.13001147)(327.61707083,139.78958964)
\curveto(317.27664901,129.44916782)(324.59839457,111.76779654)(339.22373218,111.76779654)
\curveto(353.84906978,111.76779654)(361.17081535,129.44916782)(350.83039353,139.78958964)
\curveto(340.48997171,150.13001147)(322.80860042,142.8082659)(322.80860042,128.1829283)
\curveto(322.80860042,113.55759069)(340.48997171,106.23584512)(350.83039353,116.57626695)
\curveto(361.17081535,126.91668877)(353.84906978,144.59806005)(339.22373218,144.59806005)
\curveto(324.59839457,144.59806005)(317.27664901,126.91668877)(327.61707083,116.57626695)
\curveto(337.95749265,106.23584512)(355.63886394,113.55759069)(355.63886394,128.1829283)
\closepath
}
}
{
\newrgbcolor{curcolor}{0 0 0}
\pscustom[linewidth=0.99999833,linecolor=curcolor]
{
\newpath
\moveto(340.18897418,130.18896477)
\lineto(340.18897418,145.96899355)
\lineto(340.18897418,265.33422477)
}
}
{
\newrgbcolor{curcolor}{0 0 0}
\pscustom[linewidth=0.99999833,linecolor=curcolor]
{
\newpath
\moveto(340.18896566,265.33423328)
\lineto(452.81000999,62.61634328)
}
}
{
\newrgbcolor{curcolor}{0 0 0}
\pscustom[linewidth=0.99999833,linecolor=curcolor]
{
\newpath
\moveto(340.18896566,265.33423328)
\lineto(283.8784435,163.97528828)
\lineto(227.56791283,62.61634328)
}
}
{
\newrgbcolor{curcolor}{0 0 0}
\pscustom[linewidth=0.99999833,linecolor=curcolor]
{
\newpath
\moveto(452.81000999,62.61634328)
\lineto(227.56791283,62.61634328)
}
}
{
\newrgbcolor{curcolor}{0 0 0}
\pscustom[linewidth=0.99999833,linecolor=curcolor]
{
\newpath
\moveto(340.18896566,130.18897328)
\lineto(227.56791283,62.61634328)
}
}
{
\newrgbcolor{curcolor}{0 0 0}
\pscustom[linewidth=0.99999871,linecolor=curcolor]
{
\newpath
\moveto(410.90371957,124.44871468)
\curveto(410.90371957,153.77170207)(393.23986122,180.20756408)(366.149439,191.42835042)
\curveto(339.05907204,202.64911388)(307.87755988,196.44488292)(287.14316596,175.710489)
\curveto(266.40877203,154.97609507)(260.20454107,123.79458291)(271.42530453,96.70421595)
\curveto(282.64609087,69.61379374)(309.08195288,51.94993539)(338.40494027,51.94993539)
\curveto(367.72792766,51.94993539)(394.16378967,69.61379374)(405.38457601,96.70421595)
\curveto(416.60533947,123.79458291)(410.40110851,154.97609507)(389.66671458,175.710489)
\curveto(368.93232066,196.44488292)(337.7508085,202.64911388)(310.66044154,191.42835042)
\curveto(283.57001932,180.20756408)(265.90616097,153.77170207)(265.90616097,124.44871468)
\curveto(265.90616097,95.1257273)(283.57001932,68.68986528)(310.66044154,57.46907894)
\curveto(337.7508085,46.24831549)(368.93232066,52.45254645)(389.66671458,73.18694037)
\curveto(410.40110851,93.92133429)(416.60533947,125.10284645)(405.38457601,152.19321342)
\curveto(394.16378967,179.28363563)(367.72792766,196.94749398)(338.40494027,196.94749398)
\curveto(309.08195288,196.94749398)(282.64609087,179.28363563)(271.42530453,152.19321342)
\curveto(260.20454107,125.10284645)(266.40877203,93.92133429)(287.14316596,73.18694037)
\curveto(307.87755988,52.45254645)(339.05907204,46.24831549)(366.149439,57.46907894)
\curveto(393.23986122,68.68986528)(410.90371957,95.1257273)(410.90371957,124.44871468)
\closepath
}
}
{
\newrgbcolor{curcolor}{0 0 0}
\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
{
\newpath
\moveto(345.79697174,120.02145903)
\lineto(345.0157224,120.02145903)
\lineto(345.0079099,122.37301956)
\curveto(344.46103536,122.38343621)(343.91416082,122.44593616)(343.36728628,122.5605194)
\curveto(342.82041174,122.68031096)(342.27093304,122.85739415)(341.71885017,123.09176895)
\lineto(341.71885017,124.49801777)
\curveto(342.25009972,124.16468472)(342.78655761,123.91208076)(343.32822382,123.74020591)
\curveto(343.87509836,123.57353938)(344.43759788,123.48760195)(345.0157224,123.48239362)
\lineto(345.0157224,127.04489063)
\curveto(343.8646817,127.23239047)(343.02614074,127.55009853)(342.50009951,127.99801482)
\curveto(341.97926662,128.44593111)(341.71885017,129.06051393)(341.71885017,129.84176327)
\curveto(341.71885017,130.69072089)(342.0027041,131.35999116)(342.57041195,131.84957409)
\curveto(343.13811981,132.33915701)(343.95322329,132.62040677)(345.0157224,132.69332338)
\lineto(345.0157224,134.52925933)
\lineto(345.79697174,134.52925933)
\lineto(345.79697174,132.71676086)
\curveto(346.28134633,132.69592754)(346.75009594,132.64384425)(347.20322056,132.56051099)
\curveto(347.65634518,132.48238605)(348.09905314,132.37301115)(348.53134444,132.23238626)
\lineto(348.53134444,130.86519991)
\curveto(348.09905314,131.08394973)(347.65374101,131.25322042)(347.19540807,131.37301199)
\curveto(346.74228345,131.49280355)(346.276138,131.56311599)(345.79697174,131.58394931)
\lineto(345.79697174,128.24801461)
\curveto(346.97926241,128.0657231)(347.84905335,127.74020254)(348.40634455,127.27145294)
\curveto(348.96363574,126.80270333)(349.24228134,126.16207887)(349.24228134,125.34957955)
\curveto(349.24228134,124.46937196)(348.94540659,123.77406004)(348.35165709,123.26364381)
\curveto(347.76311592,122.7584359)(346.91155414,122.46676948)(345.79697174,122.38864454)
\closepath
\moveto(345.0157224,128.3886395)
\lineto(345.0157224,131.5917618)
\curveto(344.41155624,131.52405353)(343.95061913,131.35217867)(343.63291106,131.07613724)
\curveto(343.315203,130.8000958)(343.15634896,130.43290861)(343.15634896,129.97457566)
\curveto(343.15634896,129.52665937)(343.30218217,129.17770133)(343.59384859,128.92770154)
\curveto(343.89072334,128.67770175)(344.36468128,128.4980144)(345.0157224,128.3886395)
\closepath
\moveto(345.79697174,126.88864076)
\lineto(345.79697174,123.5058311)
\curveto(346.45842952,123.5943727)(346.95582493,123.78187254)(347.28915799,124.06833063)
\curveto(347.62769937,124.35478872)(347.79697006,124.73239257)(347.79697006,125.20114218)
\curveto(347.79697006,125.65947512)(347.63551186,126.02405815)(347.31259547,126.29489126)
\curveto(346.9948874,126.56572436)(346.48967949,126.76364086)(345.79697174,126.88864076)
\closepath
}
}
{
\newrgbcolor{curcolor}{0 0 0}
\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
{
\newpath
\moveto(357.14852491,129.77926333)
\curveto(356.98706671,129.87301325)(356.80998352,129.94072152)(356.61727535,129.98238816)
\curveto(356.42977551,130.02926312)(356.22144235,130.0527006)(355.99227588,130.0527006)
\curveto(355.17977656,130.0527006)(354.55477709,129.78707582)(354.11727745,129.25582627)
\curveto(353.68498615,128.72978504)(353.4688405,127.97197318)(353.4688405,126.98239068)
\lineto(353.4688405,122.37301956)
\lineto(352.02352922,122.37301956)
\lineto(352.02352922,131.1230122)
\lineto(353.4688405,131.1230122)
\lineto(353.4688405,129.76363834)
\curveto(353.77092358,130.29488789)(354.16415242,130.68811673)(354.64852701,130.94332485)
\curveto(355.1329016,131.2037413)(355.72144277,131.33394952)(356.41415052,131.33394952)
\curveto(356.51310877,131.33394952)(356.62248368,131.32613703)(356.74227525,131.31051204)
\curveto(356.86206681,131.30009538)(356.9948792,131.28186623)(357.14071241,131.25582458)
\closepath
}
}
{
\newrgbcolor{curcolor}{0 0 0}
\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
{
\newpath
\moveto(365.30476751,119.71677179)
\lineto(365.30476751,118.59958523)
\lineto(356.9922745,118.59958523)
\lineto(356.9922745,119.71677179)
\closepath
}
}
{
\newrgbcolor{curcolor}{0 0 0}
\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
{
\newpath
\moveto(367.13289097,123.70114344)
\lineto(369.7110138,123.70114344)
\lineto(369.7110138,132.59957345)
\lineto(366.90632866,132.03707393)
\lineto(366.90632866,133.47457272)
\lineto(369.69538882,134.03707225)
\lineto(371.27351249,134.03707225)
\lineto(371.27351249,123.70114344)
\lineto(373.85163532,123.70114344)
\lineto(373.85163532,122.37301956)
\lineto(367.13289097,122.37301956)
\closepath
}
}
{
\newrgbcolor{curcolor}{0 0 0}
\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
{
\newpath
\moveto(380.73444315,120.02145903)
\lineto(379.9531938,120.02145903)
\lineto(379.94538131,122.37301956)
\curveto(379.39850677,122.38343621)(378.85163223,122.44593616)(378.30475769,122.5605194)
\curveto(377.75788315,122.68031096)(377.20840444,122.85739415)(376.65632158,123.09176895)
\lineto(376.65632158,124.49801777)
\curveto(377.18757113,124.16468472)(377.72402901,123.91208076)(378.26569522,123.74020591)
\curveto(378.81256976,123.57353938)(379.37506929,123.48760195)(379.9531938,123.48239362)
\lineto(379.9531938,127.04489063)
\curveto(378.8021531,127.23239047)(377.96361214,127.55009853)(377.43757092,127.99801482)
\curveto(376.91673802,128.44593111)(376.65632158,129.06051393)(376.65632158,129.84176327)
\curveto(376.65632158,130.69072089)(376.9401755,131.35999116)(377.50788336,131.84957409)
\curveto(378.07559122,132.33915701)(378.8906947,132.62040677)(379.9531938,132.69332338)
\lineto(379.9531938,134.52925933)
\lineto(380.73444315,134.52925933)
\lineto(380.73444315,132.71676086)
\curveto(381.21881774,132.69592754)(381.68756734,132.64384425)(382.14069196,132.56051099)
\curveto(382.59381658,132.48238605)(383.03652454,132.37301115)(383.46881585,132.23238626)
\lineto(383.46881585,130.86519991)
\curveto(383.03652454,131.08394973)(382.59121242,131.25322042)(382.13287947,131.37301199)
\curveto(381.67975485,131.49280355)(381.21360941,131.56311599)(380.73444315,131.58394931)
\lineto(380.73444315,128.24801461)
\curveto(381.91673382,128.0657231)(382.78652475,127.74020254)(383.34381595,127.27145294)
\curveto(383.90110715,126.80270333)(384.17975275,126.16207887)(384.17975275,125.34957955)
\curveto(384.17975275,124.46937196)(383.882878,123.77406004)(383.2891285,123.26364381)
\curveto(382.70058733,122.7584359)(381.84902554,122.46676948)(380.73444315,122.38864454)
\closepath
\moveto(379.9531938,128.3886395)
\lineto(379.9531938,131.5917618)
\curveto(379.34902764,131.52405353)(378.88809053,131.35217867)(378.57038247,131.07613724)
\curveto(378.2526744,130.8000958)(378.09382037,130.43290861)(378.09382037,129.97457566)
\curveto(378.09382037,129.52665937)(378.23965358,129.17770133)(378.53132,128.92770154)
\curveto(378.82819475,128.67770175)(379.30215268,128.4980144)(379.9531938,128.3886395)
\closepath
\moveto(380.73444315,126.88864076)
\lineto(380.73444315,123.5058311)
\curveto(381.39590092,123.5943727)(381.89329634,123.78187254)(382.22662939,124.06833063)
\curveto(382.56517077,124.35478872)(382.73444146,124.73239257)(382.73444146,125.20114218)
\curveto(382.73444146,125.65947512)(382.57298327,126.02405815)(382.25006687,126.29489126)
\curveto(381.93235881,126.56572436)(381.4271509,126.76364086)(380.73444315,126.88864076)
\closepath
}
}
{
\newrgbcolor{curcolor}{0.40000001 0.40000001 0.40000001}
\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
{
\newpath
\moveto(340.1106768,74.99942849)
\curveto(340.0574768,75.30882848)(339.89607681,76.50222847)(339.75206681,77.65142845)
\curveto(338.28719683,89.34167831)(334.26953688,102.40515814)(328.75711695,113.401748)
\curveto(328.22354695,114.46615799)(327.78698696,115.37603798)(327.78698696,115.42369798)
\curveto(327.78698696,115.47139798)(328.31135695,115.12047798)(328.95225694,114.64394799)
\curveto(334.83256687,110.27179804)(342.72690677,110.03975805)(348.7006367,114.063478)
\curveto(350.11731668,115.01769798)(352.21524665,117.09295796)(353.19290664,118.50719794)
\curveto(355.22722661,121.4499579)(356.3809266,125.37759785)(356.2093066,128.77619781)
\curveto(356.1762066,129.4317878)(356.2003066,129.9681678)(356.2623066,129.9681678)
\curveto(356.3246066,129.9681678)(356.5610466,129.8976678)(356.78779659,129.8114178)
\curveto(357.19923659,129.6549878)(357.20007659,129.6564578)(357.20007659,130.53469779)
\lineto(357.20007659,131.41471778)
\lineto(356.5835166,131.41471778)
\lineto(355.9669666,131.41471778)
\lineto(355.69193661,132.40392776)
\curveto(354.80815662,135.58272772)(353.48941664,137.8750977)(351.26214666,140.10430767)
\curveto(348.6023267,142.76642763)(345.68450673,144.31594761)(342.18326678,144.92565761)
\curveto(341.47164679,145.04957761)(341.07057679,145.2037376)(340.96978679,145.3920776)
\curveto(340.8344068,145.6450376)(340.94258679,145.6838276)(342.04225678,145.7767876)
\curveto(342.71493677,145.8336876)(343.88725676,145.88046759)(344.64741675,145.88082759)
\curveto(347.97943671,145.88282759)(354.46419662,146.54955759)(359.61098656,147.42027758)
\curveto(369.28412644,149.05676755)(379.03794631,152.07898752)(388.0483162,156.23160746)
\curveto(389.50064618,156.90093746)(390.71114617,157.42633745)(390.73831617,157.39916745)
\curveto(390.76551617,157.37196745)(390.04949617,156.84850746)(389.14721619,156.23587746)
\curveto(378.88459632,149.26774755)(369.63885643,140.41790766)(362.13565653,130.38092779)
\curveto(350.51476667,114.83576799)(343.05491677,96.45590822)(340.5711868,77.24960846)
\curveto(340.3077668,75.21261848)(340.1807568,74.59202849)(340.1106668,74.99942849)
\closepath
}
}
{
\newrgbcolor{curcolor}{0.40000001 0.40000001 0.40000001}
\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
{
\newpath
\moveto(321.92043703,125.18717786)
\curveto(319.78771706,128.51235781)(315.14462712,134.53866774)(312.10105716,137.93182769)
\curveto(305.09616725,145.7413376)(296.65565735,152.91383751)(288.28463746,158.17032744)
\curveto(287.46494747,158.68504743)(286.81945748,159.13132743)(286.85020748,159.16207743)
\curveto(286.88090747,159.19287743)(288.34720746,158.50136744)(290.10854743,157.62548745)
\curveto(304.42507725,150.50617754)(319.97550706,146.52111759)(335.86936686,145.89853759)
\curveto(337.79526683,145.8230376)(339.40061681,145.7317576)(339.43680681,145.6955676)
\curveto(339.68937681,145.4429976)(339.04838682,145.2195076)(337.66354683,145.0772976)
\curveto(335.45206686,144.85018761)(333.77155688,144.38744761)(331.88553691,143.48626762)
\curveto(324.872687,140.13536767)(321.09746704,132.55988776)(322.56567703,124.78471786)
\curveto(322.62827702,124.45321786)(322.65337702,124.18261787)(322.62137702,124.18338787)
\curveto(322.58947702,124.18419787)(322.27399703,124.63586786)(321.92039703,125.18717786)
\closepath
}
}
{
\newrgbcolor{curcolor}{0.40000001 0.40000001 0.40000001}
\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
{
\newpath
\moveto(279.64914757,163.10481738)
\curveto(278.13289758,163.87562737)(278.17829758,163.84125737)(278.39274758,164.05569737)
\curveto(278.51053758,164.17348736)(278.91961758,163.99589737)(279.74820756,163.46737737)
\curveto(281.71948754,162.20990739)(281.68168754,162.07155739)(279.64910757,163.10481738)
\closepath
}
}
{
\newrgbcolor{curcolor}{0 0 0}
\pscustom[linewidth=0.37795276,linecolor=curcolor]
{
\newpath
\moveto(100.18897146,50.1889654)
\curveto(100.18897146,70.41205485)(88.00679565,88.64398993)(69.32343217,96.38259319)
\curveto(50.64010679,104.12118067)(29.1352546,99.84232886)(14.8354325,85.54250676)
\curveto(0.5356104,71.24268466)(-3.74324141,49.73783247)(3.99534607,31.05450709)
\curveto(11.73394933,12.37114361)(29.96588441,0.1889678)(50.18897386,0.1889678)
\curveto(70.41206331,0.1889678)(88.64399839,12.37114361)(96.38260165,31.05450709)
\curveto(104.12118913,49.73783247)(99.84233732,71.24268466)(85.54251522,85.54250676)
\curveto(71.24269312,99.84232886)(49.73784093,104.12118067)(31.05451555,96.38259319)
\curveto(12.37115207,88.64398993)(0.18897626,70.41205485)(0.18897626,50.1889654)
\curveto(0.18897626,29.96587595)(12.37115207,11.73394087)(31.05451555,3.99533761)
\curveto(49.73784093,-3.74324987)(71.24269312,0.53560194)(85.54251522,14.83542404)
\curveto(99.84233732,29.13524614)(104.12118913,50.64009833)(96.38260165,69.32342371)
\curveto(88.64399839,88.00678719)(70.41206331,100.188963)(50.18897386,100.188963)
\curveto(29.96588441,100.188963)(11.73394933,88.00678719)(3.99534607,69.32342371)
\curveto(-3.74324141,50.64009833)(0.5356104,29.13524614)(14.8354325,14.83542404)
\curveto(29.1352546,0.53560194)(50.64010679,-3.74324987)(69.32343217,3.99533761)
\curveto(88.00679565,11.73394087)(100.18897146,29.96587595)(100.18897146,50.1889654)
\closepath
}
}
{
\newrgbcolor{curcolor}{0 0 0}
\pscustom[linewidth=0.37795276,linecolor=curcolor]
{
\newpath
\moveto(150.32872755,137.36467168)
\curveto(150.32872755,157.58776113)(138.14655174,175.8196962)(119.46318826,183.55829947)
\curveto(100.77986288,191.29688695)(79.27501069,187.01803514)(64.97518859,172.71821304)
\curveto(50.67536649,158.41839094)(46.39651468,136.91353874)(54.13510216,118.23021337)
\curveto(61.87370542,99.54684988)(80.1056405,87.36467408)(100.32872995,87.36467408)
\curveto(120.5518194,87.36467408)(138.78375448,99.54684988)(146.52235774,118.23021337)
\curveto(154.26094522,136.91353874)(149.98209341,158.41839094)(135.68227131,172.71821304)
\curveto(121.38244921,187.01803514)(99.87759702,191.29688695)(81.19427164,183.55829947)
\curveto(62.51090816,175.8196962)(50.32873235,157.58776113)(50.32873235,137.36467168)
\curveto(50.32873235,117.14158222)(62.51090816,98.90964715)(81.19427164,91.17104389)
\curveto(99.87759702,83.43245641)(121.38244921,87.71130822)(135.68227131,102.01113032)
\curveto(149.98209341,116.31095241)(154.26094522,137.81580461)(146.52235774,156.49912999)
\curveto(138.78375448,175.18249347)(120.5518194,187.36466927)(100.32872995,187.36466927)
\curveto(80.1056405,187.36466927)(61.87370542,175.18249347)(54.13510216,156.49912999)
\curveto(46.39651468,137.81580461)(50.67536649,116.31095241)(64.97518859,102.01113032)
\curveto(79.27501069,87.71130822)(100.77986288,83.43245641)(119.46318826,91.17104389)
\curveto(138.14655174,98.90964715)(150.32872755,117.14158222)(150.32872755,137.36467168)
\closepath
}
}
{
\newrgbcolor{curcolor}{0 0 0}
\pscustom[linewidth=0.37795276,linecolor=curcolor]
{
\newpath
\moveto(200.18898107,50.1889654)
\curveto(200.18898107,70.41205485)(188.00680526,88.64398993)(169.32344178,96.38259319)
\curveto(150.6401164,104.12118067)(129.13526421,99.84232886)(114.83544211,85.54250676)
\curveto(100.53562001,71.24268466)(96.2567682,49.73783247)(103.99535568,31.05450709)
\curveto(111.73395894,12.37114361)(129.96589402,0.1889678)(150.18898347,0.1889678)
\curveto(170.41207292,0.1889678)(188.644008,12.37114361)(196.38261126,31.05450709)
\curveto(204.12119874,49.73783247)(199.84234693,71.24268466)(185.54252483,85.54250676)
\curveto(171.24270273,99.84232886)(149.73785054,104.12118067)(131.05452516,96.38259319)
\curveto(112.37116168,88.64398993)(100.18898587,70.41205485)(100.18898587,50.1889654)
\curveto(100.18898587,29.96587595)(112.37116168,11.73394087)(131.05452516,3.99533761)
\curveto(149.73785054,-3.74324987)(171.24270273,0.53560194)(185.54252483,14.83542404)
\curveto(199.84234693,29.13524614)(204.12119874,50.64009833)(196.38261126,69.32342371)
\curveto(188.644008,88.00678719)(170.41207292,100.188963)(150.18898347,100.188963)
\curveto(129.96589402,100.188963)(111.73395894,88.00678719)(103.99535568,69.32342371)
\curveto(96.2567682,50.64009833)(100.53562001,29.13524614)(114.83544211,14.83542404)
\curveto(129.13526421,0.53560194)(150.6401164,-3.74324987)(169.32344178,3.99533761)
\curveto(188.00680526,11.73394087)(200.18898107,29.96587595)(200.18898107,50.1889654)
\closepath
}
}
{
\newrgbcolor{curcolor}{0 0 0}
\pscustom[linewidth=0.72877604,linecolor=curcolor]
{
\newpath
\moveto(107.04821225,79.29835193)
\curveto(107.04821225,85.79151534)(99.19827155,89.04212682)(94.60746822,84.45132349)
\curveto(90.01666489,79.86052016)(93.26727637,72.01057946)(99.76043978,72.01057946)
\curveto(106.25360318,72.01057946)(109.50421466,79.86052016)(104.91341134,84.45132349)
\curveto(100.32260801,89.04212682)(92.47266731,85.79151534)(92.47266731,79.29835193)
\curveto(92.47266731,72.80518853)(100.32260801,69.55457705)(104.91341134,74.14538038)
\curveto(109.50421466,78.7361837)(106.25360318,86.5861244)(99.76043978,86.5861244)
\curveto(93.26727637,86.5861244)(90.01666489,78.7361837)(94.60746822,74.14538038)
\curveto(99.19827155,69.55457705)(107.04821225,72.80518853)(107.04821225,79.29835193)
\closepath
}
}
{
\newrgbcolor{curcolor}{0 0 0}
\pscustom[linewidth=0.37795276,linecolor=curcolor]
{
\newpath
\moveto(100.18897512,80.1889654)
\lineto(100.18897512,87.19477327)
\lineto(100.18897512,140.1889654)
}
}
{
\newrgbcolor{curcolor}{0 0 0}
\pscustom[linewidth=0.37795276,linecolor=curcolor]
{
\newpath
\moveto(100.18897134,140.18896918)
\lineto(150.18896882,50.18896918)
}
}
{
\newrgbcolor{curcolor}{0 0 0}
\pscustom[linewidth=0.37795276,linecolor=curcolor]
{
\newpath
\moveto(100.18897134,140.18896918)
\lineto(75.1889726,95.18896918)
\lineto(50.18897008,50.18896918)
}
}
{
\newrgbcolor{curcolor}{0 0 0}
\pscustom[linewidth=0.37795276,linecolor=curcolor]
{
\newpath
\moveto(150.18896882,50.18896918)
\lineto(50.18897008,50.18896918)
}
}
{
\newrgbcolor{curcolor}{0 0 0}
\pscustom[linewidth=0.37795276,linecolor=curcolor]
{
\newpath
\moveto(100.18897134,80.18896918)
\lineto(50.18897008,50.18896918)
}
}
{
\newrgbcolor{curcolor}{0 0 0}
\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
{
\newpath
\moveto(78.88845527,115.42226777)
\lineto(78.10720593,115.42226777)
\lineto(78.09939343,117.7738283)
\curveto(77.55251889,117.78424495)(77.00564435,117.8467449)(76.45876981,117.96132814)
\curveto(75.91189527,118.0811197)(75.36241657,118.25820289)(74.8103337,118.49257769)
\lineto(74.8103337,119.89882651)
\curveto(75.34158325,119.56549346)(75.87804114,119.3128895)(76.41970735,119.14101465)
\curveto(76.96658189,118.97434812)(77.52908141,118.88841069)(78.10720593,118.88320236)
\lineto(78.10720593,122.44569937)
\curveto(76.95616523,122.63319921)(76.11762427,122.95090727)(75.59158304,123.39882356)
\curveto(75.07075015,123.84673985)(74.8103337,124.46132267)(74.8103337,125.24257201)
\curveto(74.8103337,126.09152963)(75.09418763,126.7607999)(75.66189548,127.25038283)
\curveto(76.22960334,127.73996575)(77.04470682,128.02121551)(78.10720593,128.09413212)
\lineto(78.10720593,129.93006807)
\lineto(78.88845527,129.93006807)
\lineto(78.88845527,128.1175696)
\curveto(79.37282986,128.09673628)(79.84157947,128.04465299)(80.29470409,127.96131973)
\curveto(80.74782871,127.88319479)(81.19053667,127.77381989)(81.62282797,127.633195)
\lineto(81.62282797,126.26600865)
\curveto(81.19053667,126.48475847)(80.74522454,126.65402916)(80.28689159,126.77382073)
\curveto(79.83376698,126.89361229)(79.36762153,126.96392473)(78.88845527,126.98475805)
\lineto(78.88845527,123.64882335)
\curveto(80.07074594,123.46653184)(80.94053688,123.14101128)(81.49782808,122.67226168)
\curveto(82.05511927,122.20351207)(82.33376487,121.56288761)(82.33376487,120.75038829)
\curveto(82.33376487,119.8701807)(82.03689012,119.17486878)(81.44314062,118.66445255)
\curveto(80.85459945,118.15924464)(80.00303767,117.86757822)(78.88845527,117.78945328)
\closepath
\moveto(78.10720593,123.78944824)
\lineto(78.10720593,126.99257054)
\curveto(77.50303977,126.92486227)(77.04210266,126.75298741)(76.72439459,126.47694598)
\curveto(76.40668652,126.20090454)(76.24783249,125.83371735)(76.24783249,125.3753844)
\curveto(76.24783249,124.92746811)(76.3936657,124.57851007)(76.68533212,124.32851028)
\curveto(76.98220687,124.07851049)(77.45616481,123.89882314)(78.10720593,123.78944824)
\closepath
\moveto(78.88845527,122.2894495)
\lineto(78.88845527,118.90663984)
\curveto(79.54991305,118.99518143)(80.04730846,119.18268128)(80.38064152,119.46913937)
\curveto(80.7191829,119.75559746)(80.88845359,120.13320131)(80.88845359,120.60195092)
\curveto(80.88845359,121.06028386)(80.72699539,121.42486689)(80.404079,121.6957)
\curveto(80.08637093,121.9665331)(79.58116302,122.1644496)(78.88845527,122.2894495)
\closepath
}
}
{
\newrgbcolor{curcolor}{0 0 0}
\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
{
\newpath
\moveto(90.24000843,125.18007207)
\curveto(90.07855024,125.27382199)(89.90146705,125.34153026)(89.70875888,125.3831969)
\curveto(89.52125904,125.43007186)(89.31292588,125.45350934)(89.08375941,125.45350934)
\curveto(88.27126009,125.45350934)(87.64626062,125.18788456)(87.20876098,124.65663501)
\curveto(86.77646968,124.13059378)(86.56032403,123.37278192)(86.56032403,122.38319942)
\lineto(86.56032403,117.7738283)
\lineto(85.11501274,117.7738283)
\lineto(85.11501274,126.52382094)
\lineto(86.56032403,126.52382094)
\lineto(86.56032403,125.16444708)
\curveto(86.86240711,125.69569663)(87.25563594,126.08892547)(87.74001054,126.34413359)
\curveto(88.22438513,126.60455004)(88.8129263,126.73475826)(89.50563405,126.73475826)
\curveto(89.6045923,126.73475826)(89.71396721,126.72694577)(89.83375878,126.71132078)
\curveto(89.95355034,126.70090412)(90.08636273,126.68267497)(90.23219594,126.65663332)
\closepath
}
}
{
\newrgbcolor{curcolor}{0 0 0}
\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
{
\newpath
\moveto(98.39625104,115.11758053)
\lineto(98.39625104,114.00039397)
\lineto(90.08375803,114.00039397)
\lineto(90.08375803,115.11758053)
\closepath
}
}
{
\newrgbcolor{curcolor}{0 0 0}
\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
{
\newpath
\moveto(103.32593439,128.39881936)
\curveto(102.51343508,128.39881936)(101.90145643,127.99777803)(101.48999844,127.19569537)
\curveto(101.08374878,126.39882104)(100.88062395,125.19830122)(100.88062395,123.5941359)
\curveto(100.88062395,121.99517891)(101.08374878,120.79465909)(101.48999844,119.99257643)
\curveto(101.90145643,119.1957021)(102.51343508,118.79726493)(103.32593439,118.79726493)
\curveto(104.14364204,118.79726493)(104.75562069,119.1957021)(105.16187035,119.99257643)
\curveto(105.57332834,120.79465909)(105.77905733,121.99517891)(105.77905733,123.5941359)
\curveto(105.77905733,125.19830122)(105.57332834,126.39882104)(105.16187035,127.19569537)
\curveto(104.75562069,127.99777803)(104.14364204,128.39881936)(103.32593439,128.39881936)
\closepath
\moveto(103.32593439,129.64881831)
\curveto(104.63322496,129.64881831)(105.63061996,129.13058958)(106.31811938,128.09413212)
\curveto(107.01082713,127.06288298)(107.357181,125.56288424)(107.357181,123.5941359)
\curveto(107.357181,121.63059589)(107.01082713,120.13059715)(106.31811938,119.09413968)
\curveto(105.63061996,118.06289055)(104.63322496,117.54726599)(103.32593439,117.54726599)
\curveto(102.01864383,117.54726599)(101.01864467,118.06289055)(100.32593692,119.09413968)
\curveto(99.6384375,120.13059715)(99.29468778,121.63059589)(99.29468778,123.5941359)
\curveto(99.29468778,125.56288424)(99.6384375,127.06288298)(100.32593692,128.09413212)
\curveto(101.01864467,129.13058958)(102.01864383,129.64881831)(103.32593439,129.64881831)
\closepath
}
}
{
\newrgbcolor{curcolor}{0 0 0}
\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
{
\newpath
\moveto(113.82592668,115.42226777)
\lineto(113.04467733,115.42226777)
\lineto(113.03686484,117.7738283)
\curveto(112.4899903,117.78424495)(111.94311576,117.8467449)(111.39624122,117.96132814)
\curveto(110.84936668,118.0811197)(110.29988797,118.25820289)(109.74780511,118.49257769)
\lineto(109.74780511,119.89882651)
\curveto(110.27905466,119.56549346)(110.81551254,119.3128895)(111.35717875,119.14101465)
\curveto(111.90405329,118.97434812)(112.46655282,118.88841069)(113.04467733,118.88320236)
\lineto(113.04467733,122.44569937)
\curveto(111.89363663,122.63319921)(111.05509567,122.95090727)(110.52905445,123.39882356)
\curveto(110.00822155,123.84673985)(109.74780511,124.46132267)(109.74780511,125.24257201)
\curveto(109.74780511,126.09152963)(110.03165903,126.7607999)(110.59936689,127.25038283)
\curveto(111.16707474,127.73996575)(111.98217823,128.02121551)(113.04467733,128.09413212)
\lineto(113.04467733,129.93006807)
\lineto(113.82592668,129.93006807)
\lineto(113.82592668,128.1175696)
\curveto(114.31030127,128.09673628)(114.77905087,128.04465299)(115.23217549,127.96131973)
\curveto(115.68530011,127.88319479)(116.12800807,127.77381989)(116.56029938,127.633195)
\lineto(116.56029938,126.26600865)
\curveto(116.12800807,126.48475847)(115.68269595,126.65402916)(115.224363,126.77382073)
\curveto(114.77123838,126.89361229)(114.30509294,126.96392473)(113.82592668,126.98475805)
\lineto(113.82592668,123.64882335)
\curveto(115.00821735,123.46653184)(115.87800828,123.14101128)(116.43529948,122.67226168)
\curveto(116.99259068,122.20351207)(117.27123628,121.56288761)(117.27123628,120.75038829)
\curveto(117.27123628,119.8701807)(116.97436153,119.17486878)(116.38061203,118.66445255)
\curveto(115.79207085,118.15924464)(114.94050907,117.86757822)(113.82592668,117.78945328)
\closepath
\moveto(113.04467733,123.78944824)
\lineto(113.04467733,126.99257054)
\curveto(112.44051117,126.92486227)(111.97957406,126.75298741)(111.661866,126.47694598)
\curveto(111.34415793,126.20090454)(111.1853039,125.83371735)(111.1853039,125.3753844)
\curveto(111.1853039,124.92746811)(111.33113711,124.57851007)(111.62280353,124.32851028)
\curveto(111.91967828,124.07851049)(112.39363621,123.89882314)(113.04467733,123.78944824)
\closepath
\moveto(113.82592668,122.2894495)
\lineto(113.82592668,118.90663984)
\curveto(114.48738445,118.99518143)(114.98477987,119.18268128)(115.31811292,119.46913937)
\curveto(115.6566543,119.75559746)(115.82592499,120.13320131)(115.82592499,120.60195092)
\curveto(115.82592499,121.06028386)(115.6644668,121.42486689)(115.3415504,121.6957)
\curveto(115.02384233,121.9665331)(114.51863443,122.1644496)(113.82592668,122.2894495)
\closepath
}
}
{
\newrgbcolor{curcolor}{0 0 0}
\pscustom[linewidth=0.3041295,linecolor=curcolor]
{
\newpath
\moveto(131.63046565,78.01909351)
\curveto(131.63046565,91.0375233)(123.78830084,102.77416559)(111.76105562,107.75582102)
\curveto(99.73383494,112.73746629)(85.89028204,109.98299437)(76.68490169,100.77761403)
\curveto(67.47952135,91.57223368)(64.72504943,77.72868079)(69.7066947,65.7014601)
\curveto(74.68835013,53.67421488)(86.42499242,45.83205007)(99.44342222,45.83205007)
\curveto(112.46185201,45.83205007)(124.1984943,53.67421488)(129.18014973,65.7014601)
\curveto(134.161795,77.72868079)(131.40732308,91.57223368)(122.20194274,100.77761403)
\curveto(112.9965624,109.98299437)(99.1530095,112.73746629)(87.12578881,107.75582102)
\curveto(75.09854359,102.77416559)(67.25637878,91.0375233)(67.25637878,78.01909351)
\curveto(67.25637878,65.00066371)(75.09854359,53.26402142)(87.12578881,48.28236599)
\curveto(99.1530095,43.30072072)(112.9965624,46.05519264)(122.20194274,55.26057298)
\curveto(131.40732308,64.46595333)(134.161795,78.30950622)(129.18014973,90.33672691)
\curveto(124.1984943,102.36397213)(112.46185201,110.20613694)(99.44342222,110.20613694)
\curveto(86.42499242,110.20613694)(74.68835013,102.36397213)(69.7066947,90.33672691)
\curveto(64.72504943,78.30950622)(67.47952135,64.46595333)(76.68490169,55.26057298)
\curveto(85.89028204,46.05519264)(99.73383494,43.30072072)(111.76105562,48.28236599)
\curveto(123.78830084,53.26402142)(131.63046565,65.00066371)(131.63046565,78.01909351)
\closepath
}
}
{
\newrgbcolor{curcolor}{0.40000001 0.40000001 0.40000001}
\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
{
\newpath
\moveto(107.42981974,79.07450844)
\curveto(107.42981974,80.27388842)(107.21155974,81.7313684)(106.93133974,82.40320839)
\curveto(106.27446975,83.97809837)(104.67750977,85.62831835)(103.12097979,86.34062834)
\lineto(101.86595981,86.91495834)
\lineto(103.76388978,87.12374833)
\curveto(109.9713497,87.80660833)(114.75578964,88.85953831)(118.4239696,90.35005829)
\curveto(119.50870958,90.79082829)(120.43412957,91.11354828)(120.48046957,91.06720829)
\curveto(120.52676957,91.02090829)(119.35091959,90.0003783)(117.8673896,88.79942831)
\curveto(114.80298964,86.31872835)(111.87002968,83.14707838)(109.23637971,79.46600843)
\lineto(107.42981974,76.94094846)
\closepath
}
}
{
\newrgbcolor{curcolor}{0.40000001 0.40000001 0.40000001}
\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
{
\newpath
\moveto(90.23987995,80.74165842)
\curveto(88.39937998,83.25100838)(83.90172003,87.83609833)(81.46581006,89.6862683)
\curveto(80.54900007,90.38262829)(79.85821008,91.01170829)(79.93072008,91.08421828)
\curveto(80.00322008,91.15671828)(81.19345007,90.78056829)(82.57564005,90.2482883)
\curveto(86.6698,88.67163832)(92.80913992,87.29646833)(95.75810988,87.29550833)
\curveto(97.25245986,87.29501833)(97.86218986,86.82337834)(96.73922987,86.53659834)
\curveto(95.58913988,86.24288835)(93.64728991,84.45480837)(92.91095992,83.01147839)
\curveto(92.53824992,82.2809084)(92.14463993,80.98068841)(92.03627993,80.12209842)
\lineto(91.83926993,78.56103844)
\closepath
}
}
{
\newrgbcolor{curcolor}{0.40000001 0.40000001 0.40000001}
\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
{
\newpath
\moveto(99.80548983,58.55970869)
\curveto(99.34431984,61.67904866)(98.10725985,65.9998486)(96.64668987,69.59277856)
\curveto(96.04075988,71.08331854)(95.59308988,72.35094852)(95.65186988,72.40971852)
\curveto(95.71066988,72.46851852)(96.28258988,72.29770852)(96.92285987,72.03018853)
\curveto(99.24703984,71.05908854)(103.08285979,71.70514853)(104.93275977,73.37927851)
\curveto(105.66786976,74.0445485)(105.65063976,73.7400385)(104.86615977,72.20230852)
\curveto(102.97679979,68.49886857)(101.26309981,63.02074864)(100.54811982,58.3989787)
\lineto(100.18053983,56.02290873)
\closepath
}
}
\end{pspicture}

View File

@ -1,60 +0,0 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "c94a76d4-15cb-4628-980e-644c24119b55",
"metadata": {
"tags": []
},
"source": [
"# Geometry parameters\n",
"\n",
"## Simple structure\n",
"\n",
"$$ \\theta \\in \\left[ 0.01, 0.28 \\right] $$\n",
"$$ r_0 = 1 $$\n",
"$$ L = 2 r_0 $$\n",
"$$ r = \\frac{r_0}{1 - \\theta} $$\n",
"$$ r_{fillet} = r_0 \\left (\\sqrt{2} - \\frac{1}{1 - \\theta} \\right) $$\n",
"\n",
"## Face centered structure\n",
"\n",
"$$ \\theta \\in \\left[ 0.01, 0.13 \\right] $$\n",
"$$ r_0 = 1 $$\n",
"$$ L = \\frac{4 r_0}{\\sqrt{2}} $$\n",
"$$ r = \\frac{r_0}{1 - \\theta} $$\n",
"$$ r_{fillet} = r_0 \\left( \\frac{2 \\sqrt{3}}{3} - \\frac{1}{1 - \\theta} \\right) $$\n",
"\n",
"## Body centered structure\n",
"\n",
"$$ \\theta \\in \\left[ 0.01, 0.18 \\right] $$\n",
"$$ r_0 = 1 $$\n",
"$$ L = \\frac{4 r_0}{\\sqrt{3}} $$\n",
"$$ r = \\frac{r_0}{1 - \\theta} $$\n",
"$$ r_{fillet} = r_0 \\left( \\frac{\\sqrt{2}}{\\sqrt{1 - \\cos \\left(\\pi - 2 \\arccos \\left(\\sqrt{\\frac{2}{3}} \\right) \\right)}} - \n",
" \\frac{1}{1 - \\theta} \\right) $$\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.0"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

View File

@ -1,97 +0,0 @@
digraph G {
rankdir = LR;
edge[arrowhead = vee; arrowtail = vee; arrowsize = 0.8];
#compound = true;
subgraph anisotropy {
subgraph cluster_cae {
label = <<b>Pipeline</b>>;
#graph [ranksep=1];
node [shape = box; style = rounded];
geometry [
label=<<table border="0" cellborder="0" cellspacing="1">
<tr><td align="center"><b>CAD geometry</b></td></tr>
<tr><td align="left">- <font color="darkred">Salome</font></td></tr>
<tr><td align="left">- <font color="darkgreen">OpenCascade</font></td></tr>
</table>>
];
mesh [
label=<<table border="0" cellborder="0" cellspacing="1">
<tr><td align="center"><b>Meshing</b></td></tr>
<tr><td align="left">- <font color="darkred">Salome</font></td></tr>
<tr><td align="left">- <font color="darkgreen">Netgen</font></td></tr>
</table>>
];
solving [
label=<<table border="0" cellborder="0" cellspacing="1">
<tr><td align="center"><b>Solving</b></td></tr>
<tr><td align="left">- <font color="darkgreen">OpenFoam</font></td></tr>
</table>>
];
database [
label=<<table border="0" cellborder="0" cellspacing="1">
<tr><td align="center"><b>Database</b></td></tr>
<tr><td align="left">- <font color="darkgreen">Sqlite</font></td></tr>
</table>>;
width = 1;
shape = cylinder;
];
postprocess [
label=<<table border="0" cellborder="0" cellspacing="1">
<tr><td align="center"><b>Post-processing</b></td></tr>
<!-- <tr><td align="left">- <font color="darkgreen">Sqlite</font></td></tr> -->
</table>>;
];
ml [
label=<<table border="0" cellborder="0" cellspacing="1">
<tr><td align="center"><b>Machine learning</b></td></tr>
<!-- <tr><td align="left">- <font color="darkgreen">Sqlite</font></td></tr> -->
</table>>;
color = goldenrod;
];
geometry -> mesh -> solving -> postprocess -> ml [weight = 10];
{
edge[dir = both; arrowhead = box; arrowtail = box];
database -> geometry;
database -> mesh;
database -> solving;
database -> postprocess;
{ rank = same; mesh; database }
}
{
edge[dir = normal; color = goldenrod]
ml -> geometry;
ml -> mesh;
ml -> solving;
{ rank = same; mesh; ml }
}
}
subgraph cluster_caeN {
label = <<b>Pipeline</b>>;
empty1 [label = "..."; shape = plaintext; width = 1];
}
subgraph cluster_caeN2 {
label = <<b>Pipeline2</b>>;
empty2 [label = "..."; shape = plaintext; width = 1];
}
}
}

View File

@ -1,304 +0,0 @@
# -*- coding: utf-8 -*-
# This file is part of anisotropy.
# License: GNU GPL version 3, see the file "LICENSE" for details.
import logging
SMESH_IMPORTED = False
try:
import SMESH
from salome.smesh import smeshBuilder
SMESH_IMPORTED = True
except:
pass
class Mesh(object):
def __init__(self, geom):
# Mesh module
if not SMESH_IMPORTED:
raise ImportError("Cannot find the salome mesh modules.")
else:
self.smesh = smeshBuilder.New()
self.smeshBuilder = smeshBuilder
# General attributes
self.geom = geom
self.mesh = self.smesh.Mesh(self.geom.shape, self.geom.name)
def algo3d(self, algo, type = "tetrahedron"):
smeshAlgo = self.mesh.__dict__.get(type.capitalize())
self.meshAlgorithm3d = algo()
self.meshAlgorithm3d.initialize(smeshAlgo(algo = self.meshAlgorithm3d.key))
self.mesh.AddHypothesis(self.meshAlgorithm3d.hypo)
return self.meshAlgorithm3d
def algo2d(self, algo, type = "triangle"):
smeshAlgo = self.mesh.__dict__.get(type.capitalize())
self.meshAlgorithm2d = algo()
self.meshAlgorithm2d.initialize(smeshAlgo(algo = self.meshAlgorithm2d.key))
self.mesh.AddHypothesis(self.meshAlgorithm2d.hypo)
return self.meshAlgorithm2d
def algo1d(self, algo, type = "segment"):
smeshAlgo = self.mesh.__dict__.get(type.capitalize())
self.meshAlgorithm1d = algo()
self.meshAlgorithm1d.initialize(smeshAlgo(algo = self.meshAlgorithm1d.key))
self.mesh.AddHypothesis(self.meshAlgorithm1d.hypo)
return self.meshAlgorithm1d
def createGroups(self, prefix = None):
prefix = prefix or ""
for group in self.shape.groups:
name = group.GetName()
if name:
name = prefix + name
self.mesh.GroupOnGeom(group, name, SMESH.FACE)
def compute(self):
"""Compute mesh.
"""
isDone = self.mesh.Compute()
out = ""
err = self.mesh.GetComputeErrors()
returncode = int(not isDone)
return out, err, returncode
def stats(self):
return {
"elements": self.mesh.NbElements(),
"edges": self.mesh.NbEdges(),
"faces": self.mesh.NbFaces(),
"volumes": self.mesh.NbVolumes(),
"tetrahedrons": self.mesh.NbTetras(),
"prisms": self.mesh.NbPrisms(),
"pyramids": self.mesh.NbPyramids()
}
def removePyramids(self):
if self.mesh.NbPyramids() > 0:
pyramidCriterion = smesh.GetCriterion(
SMESH.VOLUME,
SMESH.FT_ElemGeomType,
SMESH.FT_Undefined,
SMESH.Geom_PYRAMID
)
pyramidGroup = self.mesh.MakeGroupByCriterion("pyramids", pyramidCriterion)
pyramidVolumes = self.mesh.GetIDSource(pyramidGroup.GetIDs(), SMESH.VOLUME)
self.mesh.SplitVolumesIntoTetra(pyramidVolumes, smesh.Hex_5Tet)
self.mesh.RemoveGroup(pyramidGroup)
self.mesh.RenumberElements()
def export(
filename: str
):
"""Export a mesh.
Supported formats: unv.
:param filename:
Name of the file to store the given mesh in.
:return:
Output, error messages and returncode
"""
out, err, returncode = "", "", 0
ext = os.path.splitext(filename)[1][1: ]
try:
if ext == "unv":
self.mesh.ExportUNV(self.mesh, filename)
else:
raise NotImplementedError(f"{ ext } is not supported")
except NotImplementedError as e:
err = e
returncode = 1
except Exception as e:
err = e.details.text
returncode = 1
return out, err, returncode
class MeshAlgorithm(object):
pass
class AlgorithmHypothesis(object):
pass
class Netgen3D(MeshAlgorithm):
"""
MaxElementVolume
Parameters
ViscousLayers
"""
def __init__(self, **kwargs):
self.key = smeshBuilder.NETGEN_3D
def initialize(self, algo, hypo): #thesises: list):
self.algo = algo
#self.hypo = self.algo.Parameters()
#for hypo in hypothesises:
self.hypo = self.__dict__[hypo.__name__]()
class ViscousLayers(AlgorithmHypothesis):
def __init__(self,
algo,
thickness = 1,
numberOfLayers = 1,
stretchFactor = 0,
faces = [],
isFacesToIgnore = True,
extrMethod = "SURF_OFFSET_SMOOTH",
**kwargs
):
extrusionMethod = dict(
SURF_OFFSET_SMOOTH = smeshBuilder.SURF_OFFSET_SMOOTH,
FACE_OFFSET = smeshBuilder.FACE_OFFSET,
NODE_OFFSET = smeshBuilder.NODE_OFFSET,
).get(extrMethod, smeshBuilder.SURF_OFFSET_SMOOTH)
self.hypo = self.algo.ViscousLayers(
thickness,
numberOfLayers,
stretchFactor,
faces,
isFacesToIgnore,
extrusionMethod
)
class Parameters(AlgorithmHypothesis):
def __init__(self, algo):
self.hypo = self.algo.Parameters()
@property
def minSize(self):
return self.hypo.GetMinSize()
@minSize.setter
def minSize(self, value):
self.hypo.SetMinSize(value)
@property
def maxSize(self):
return self.hypo.GetMaxSize()
@maxSize.setter
def maxSize(self, value):
self.hypo.SetMaxSize(value)
@property
def fineness(self):
return self.hypo.GetFineness()
@fineness.setter
def fineness(self, value):
self.hypo.SetFineness(value)
@property
def growthRate(self):
return self.hypo.GetGrowthRate()
@growthRate.setter
def growthRate(self, value):
self.hypo.SetGrowthRate(value)
@property
def nbSegPerEdge(self):
return self.hypo.GetNbSegPerEdge()
@nbSegPerEdge.setter
def nbSegPerEdge(self, value):
self.hypo.SetNbSegPerEdge(value)
@property
def nbSegPerRadius(self):
return self.hypo.GetNbSegPerRadius()
@nbSegPerRadius.setter
def nbSegPerRadius(self, value):
self.hypo.SetNbSegPerRadius(value)
@property
def chordalErrorEnabled(self):
return self.hypo.GetChordalErrorEnabled()
@chordalErrorEnabled.setter
def chordalErrorEnabled(self, value):
self.hypo.SetChordalErrorEnabled(value)
@property
def chordalError(self):
return self.hypo.GetChordalError()
@chordalError.setter
def chordalError(self, value):
self.hypo.SetChordalError(value)
@property
def secondOrder(self):
return self.hypo.GetSecondOrder()
@secondOrder.setter
def secondOrder(self, value):
self.hypo.SetSecondOrder(value)
@property
def optimize(self):
return self.hypo.GetOptimize()
@optimize.setter
def optimize(self, value):
self.hypo.SetOptimize(value)
@property
def quadAllowed(self):
return self.hypo.GetQuadAllowed()
@quadAllowed.setter
def quadAllowed(self, value):
self.hypo.SetQuadAllowed(value)
@property
def useSurfaceCurvature(self):
return self.hypo.GetUseSurfaceCurvature()
@useSurfaceCurvature.setter
def useSurfaceCurvature(self, value):
self.hypo.SetUseSurfaceCurvature(value)
@property
def fuseEdges(self):
return self.hypo.GetFuseEdges()
@fuseEdges.setter
def fuseEdges(self, value):
self.hypo.SetFuseEdges(value)
@property
def checkChartBoundary(self):
return self.hypo.GetCheckChartBoundary()
@checkChartBoundary.setter
def GetCheckChartBoundary(self, value):
self.hypo.SetCheckChartBoundary(value)
class MEFISTO(MeshAlgorithm):
pass

View File

@ -1,47 +0,0 @@
from netgen.meshing import Mesh as netgenMesh
from meshio import Mesh as meshioMesh
from meshio._mesh import topological_dimension
from meshio._common import num_nodes_per_cell
from numpy import array
meshfile = "mesh.mesh"
mesh = netgenMesh()
mesh.Load(meshfile)
def detectTopology(dimension: dict, num_nodes: dict):
for dim in topological_dimension.keys():
for num in num_nodes_per_cell.keys():
if topological_dimension[dim] == dimension and num_nodes_per_cell[num] == num_nodes and dim == num:
return dim
def extractCells(dimension: int, elements):
cellsNew = {}
for cell in elements:
cellTopo = detectTopology(dimension, len(cell.points))
# shift indicies, they should starts from zero
cellNew = array([ pointId.nr for pointId in cell.points ], dtype = int) - 1
if cellsNew.get(cellTopo):
cellsNew[cellTopo].append(cellNew)
else:
cellsNew[cellTopo] = [ cellNew ]
return cellsNew
def extractPoints(points):
return array([ point.p for point in mesh.Points() ], dtype = float)
points = extractPoints(mesh.Points())
cells1d = extractCells(1, mesh.Elements1D())
cells2d = extractCells(2, mesh.Elements2D())
cells3d = extractCells(3, mesh.Elements3D())
cells = [
*[ e for e in cells1d.items() ],
*[ e for e in cells2d.items() ],
*[ e for e in cells3d.items() ]
]
meshNew = meshioMesh(points, cells)

Binary file not shown.

Binary file not shown.

View File

@ -1,8 +0,0 @@
# -*- coding: utf-8 -*-
import sys; path = "/home/nafaryus/projects/anisotropy"; sys.path.extend([path, path + "/env/lib/python3.10/site-packages"])
from anisotropy.samples.faceCentered import FaceCentered, FaceCenteredMesh
fc = FaceCentered([1, 0, 0], 0.12, filletsEnabled = True)
fc.build()
fcm = FaceCenteredMesh(fc)
fcm.build()

View File

@ -1,281 +0,0 @@
# -*- coding: utf-8 -*-
# This file is part of anisotropy.
# License: GNU GPL version 3, see the file "LICENSE" for details.
[logger]
name = "anisotropy"
format = "[ %(levelname)s ] %(message)s"
[base]
simple = true
bodyCentered = true
faceCentered = true
[[structures]]
[structures.structure]
type = "simple"
# auto # from theta: list # theta: float
theta = [0.01, 0.28, 0.01] # [min, max, step]
# auto # from directions:list # direction: list
directions = [
[1, 0, 0],
[0, 0, 1],
[1, 1, 1]
]
# r0 =
# L =
# radius =
filletsEnabled = true
# auto # fillets: float
[structures.mesh]
maxSize = 0.5
minSize = 0.05
fineness = 5
growthRate = 0.5
nbSegPerEdge = 2
nbSegPerRadius = 1
chordalErrorEnabled = true
chordalError = 0.25
secondOrder = false
optimize = true
quadAllowed = false
useSurfaceCurvature = true
fuseEdges = true
checkChartBoundary = false
viscousLayers = false
thickness = [0.01, 0.005] # [min, max] # step is controlled by theta count
numberOfLayers = 1
stretchFactor = 1
isFacesToIgnore = true
facesToIgnore = ["inlet", "outlet"]
# auto # faces: list
extrusionMethod = "SURF_OFFSET_SMOOTH"
[[structures.submesh]]
name = "strips"
maxSize = 0.5
minSize = 0.05
fineness = 5
growthRate = 0.2
nbSegPerEdge = 2
nbSegPerRadius = 3
chordalErrorEnabled = true
chordalError = 0.25
secondOrder = false
optimize = true
quadAllowed = false
useSurfaceCurvature = true
fuseEdges = true
checkChartBoundary = false
[structures.flowapproximation]
transportProperties.nu = 1e-6
pressure.boundaryField.inlet = { type = "fixedValue", value = 1e-3 }
pressure.boundaryField.outlet = { type = "fixedValue", value = 0.0 }
# multiplication velocity value with flow direction vector
velocity.boundaryField.inlet = { type = "fixedValue", value = 6e-5 }
velocity.boundaryField.outlet = { type = "zeroGradient", value = "None" }
[structures.flow]
scale = [ 1e-5, 1e-5, 1e-5 ]
transportProperties.nu = 1e-6
pressure.boundaryField.inlet = { type = "fixedValue", value = 1e-3 }
pressure.boundaryField.outlet = { type = "fixedValue", value = 0.0 }
velocity.boundaryField.inlet = { type = "pressureInletVelocity", value = 0.0 }
velocity.boundaryField.outlet = { type = "zeroGradient", value = "None" }
[[structures]]
[structures.structure]
type = "bodyCentered"
# auto # from theta: list # theta: float
theta = [0.01, 0.17, 0.01] # [min, max, step]
# auto # from directions:list # direction: list
directions = [
[1, 0, 0],
[0, 0, 1],
[1, 1, 1]
]
# r0 =
# L =
# radius =
filletsEnabled = true
# auto # fillets: float
[structures.mesh]
maxSize = 0.5
minSize = 0.05
fineness = 5
growthRate = 0.5
nbSegPerEdge = 2
nbSegPerRadius = 1
chordalErrorEnabled = true
chordalError = 0.25
secondOrder = false
optimize = true
quadAllowed = false
useSurfaceCurvature = true
fuseEdges = true
checkChartBoundary = false
viscousLayers = false
thickness = [0.005, 0.0005] # [min, max] # step is controlled by theta count
numberOfLayers = 1
stretchFactor = 1
isFacesToIgnore = true
facesToIgnore = ["inlet", "outlet"]
# auto # faces: list
extrusionMethod = "SURF_OFFSET_SMOOTH"
[[structures.submesh]]
name = "strips"
maxSize = 0.5
minSize = 0.05
fineness = 5
growthRate = 0.2
nbSegPerEdge = 2
nbSegPerRadius = 3
chordalErrorEnabled = true
chordalError = 0.25
secondOrder = false
optimize = true
quadAllowed = false
useSurfaceCurvature = true
fuseEdges = true
checkChartBoundary = false
[structures.flowapproximation]
transportProperties.nu = 1e-6
pressure.boundaryField.inlet = { type = "fixedValue", value = 1e-3 }
pressure.boundaryField.outlet = { type = "fixedValue", value = 0.0 }
# multiplication velocity value with direction vector
velocity.boundaryField.inlet = { type = "fixedValue", value = 6e-5 }
velocity.boundaryField.outlet = { type = "zeroGradient", value = "None" }
[structures.flow]
scale = [ 1e-5, 1e-5, 1e-5 ]
transportProperties.nu = 1e-6
pressure.boundaryField.inlet = { type = "fixedValue", value = 1e-3 }
pressure.boundaryField.outlet = { type = "fixedValue", value = 0.0 }
velocity.boundaryField.inlet = { type = "pressureInletVelocity", value = 0.0 }
velocity.boundaryField.outlet = { type = "zeroGradient", value = "None" }
[[structures]]
[structures.structure]
type = "faceCentered"
# auto # from theta: list # theta: float
theta = [0.01, 0.12, 0.01] # [min, max, step]
# auto # from directions:list # direction: list
directions = [
[1, 0, 0],
[0, 0, 1],
[1, 1, 1]
]
# r0 =
# L =
# radius =
filletsEnabled = true
# auto # fillets: float
[structures.mesh]
maxSize = 0.5
minSize = 0.05
fineness = 5
growthRate = 0.5
nbSegPerEdge = 2
nbSegPerRadius = 1
chordalErrorEnabled = true
chordalError = 0.25
secondOrder = false
optimize = true
quadAllowed = false
useSurfaceCurvature = true
fuseEdges = true
checkChartBoundary = false
viscousLayers = false
thickness = [0.001, 0.0005] # [min, max] # step is controlled by theta count
numberOfLayers = 1
stretchFactor = 1
isFacesToIgnore = true
facesToIgnore = ["inlet", "outlet"]
# auto # faces: list
extrusionMethod = "SURF_OFFSET_SMOOTH"
[[structures.submesh]]
name = "strips"
maxSize = 0.5
minSize = 0.05
fineness = 5
growthRate = 0.2
nbSegPerEdge = 2
nbSegPerRadius = 3
chordalErrorEnabled = true
chordalError = 0.25
secondOrder = false
optimize = true
quadAllowed = false
useSurfaceCurvature = true
fuseEdges = true
checkChartBoundary = false
[structures.flowapproximation]
transportProperties.nu = 1e-6
pressure.boundaryField.inlet = { type = "fixedValue", value = 1e-3 }
pressure.boundaryField.outlet = { type = "fixedValue", value = 0.0 }
# multiplication velocity value with direction vector
velocity.boundaryField.inlet = { type = "fixedValue", value = 6e-5 }
velocity.boundaryField.outlet = { type = "zeroGradient", value = "None" }
[structures.flow]
scale = [ 1e-5, 1e-5, 1e-5 ]
transportProperties.nu = 1e-6
pressure.boundaryField.inlet = { type = "fixedValue", value = 1e-3 }
pressure.boundaryField.outlet = { type = "fixedValue", value = 0.0 }
velocity.boundaryField.inlet = { type = "pressureInletVelocity", value = 0.0 }
velocity.boundaryField.outlet = { type = "zeroGradient", value = "None" }

Binary file not shown.

View File

@ -1,311 +0,0 @@
#!/usr/bin/env python
###
### This file is generated automatically by SALOME v9.7.0 with dump python functionality
###
import sys
import salome
salome.salome_init()
import salome_notebook
notebook = salome_notebook.NoteBook()
sys.path.insert(0, r'/home/nafaryus/projects/anisotropy/playground')
###
### GEOM component
###
import GEOM
from salome.geom import geomBuilder
import math
import SALOMEDS
geompy = geomBuilder.New()
O = geompy.MakeVertex(0, 0, 0)
OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
Box_1 = geompy.MakeBoxDXDYDZ(1, 1, 1)
Fillet_1 = geompy.MakeFilletR1R2(Box_1, 0.2, 0.5, geompy.ShapeType["EDGE"], [18])
Group_1 = geompy.CreateGroup(Fillet_1, geompy.ShapeType["FACE"])
geompy.UnionIDs(Group_1, [13])
Group_2 = geompy.CreateGroup(Fillet_1, geompy.ShapeType["FACE"])
geompy.UnionIDs(Group_2, [37])
Group_3 = geompy.CreateGroup(Fillet_1, geompy.ShapeType["FACE"])
geompy.UnionIDs(Group_3, [3])
Group_4 = geompy.CreateGroup(Fillet_1, geompy.ShapeType["FACE"])
geompy.UnionIDs(Group_4, [27])
Group_5 = geompy.CreateGroup(Fillet_1, geompy.ShapeType["FACE"])
geompy.UnionIDs(Group_5, [32])
Group_6 = geompy.CreateGroup(Fillet_1, geompy.ShapeType["FACE"])
geompy.UnionIDs(Group_6, [40])
Group_7 = geompy.CreateGroup(Fillet_1, geompy.ShapeType["FACE"])
geompy.UnionIDs(Group_7, [22])
[Group_1, Group_2, Group_3, Group_4, Group_5, Group_6, Group_7] = geompy.GetExistingSubObjects(Fillet_1, False)
geompy.addToStudy( O, 'O' )
geompy.addToStudy( OX, 'OX' )
geompy.addToStudy( OY, 'OY' )
geompy.addToStudy( OZ, 'OZ' )
geompy.addToStudy( Box_1, 'Box_1' )
geompy.addToStudy( Fillet_1, 'Fillet_1' )
geompy.addToStudyInFather( Fillet_1, Group_1, 'Group_1' )
geompy.addToStudyInFather( Fillet_1, Group_2, 'Group_2' )
geompy.addToStudyInFather( Fillet_1, Group_3, 'Group_3' )
geompy.addToStudyInFather( Fillet_1, Group_4, 'Group_4' )
geompy.addToStudyInFather( Fillet_1, Group_5, 'Group_5' )
geompy.addToStudyInFather( Fillet_1, Group_6, 'Group_6' )
geompy.addToStudyInFather( Fillet_1, Group_7, 'Group_7' )
###
### SMESH component
###
import SMESH, SALOMEDS
from salome.smesh import smeshBuilder
smesh = smeshBuilder.New()
#smesh.SetEnablePublish( False ) # Set to False to avoid publish in study if not needed or in some particular situations:
# multiples meshes built in parallel, complex and numerous mesh edition (performance)
Mesh_1 = smesh.Mesh(Fillet_1)
GMSH = Mesh_1.Tetrahedron(algo=smeshBuilder.GMSH)
Gmsh_Parameters = GMSH.Parameters()
Gmsh_Parameters.Set2DAlgo( 0 )
Gmsh_Parameters.SetMinSize( 0 )
Gmsh_Parameters.SetMaxSize( 0.5 )
Gmsh_Parameters.SetIs2d( 0 )
Group_1_1 = Mesh_1.GroupOnGeom(Group_1,'Group_1',SMESH.FACE)
Group_2_1 = Mesh_1.GroupOnGeom(Group_2,'Group_2',SMESH.FACE)
Group_3_1 = Mesh_1.GroupOnGeom(Group_3,'Group_3',SMESH.FACE)
Group_4_1 = Mesh_1.GroupOnGeom(Group_4,'Group_4',SMESH.FACE)
Group_5_1 = Mesh_1.GroupOnGeom(Group_5,'Group_5',SMESH.FACE)
Group_6_1 = Mesh_1.GroupOnGeom(Group_6,'Group_6',SMESH.FACE)
Group_7_1 = Mesh_1.GroupOnGeom(Group_7,'Group_7',SMESH.FACE)
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
Gmsh_Parameters.SetMinSize( 0.15307 )
Gmsh_Parameters.SetMaxSize( 0.17443 )
Gmsh_Parameters.SetIs2d( 0 )
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
status = Mesh_1.RemoveHypothesis(GMSH)
PolyhedronPerSolid_3D = Mesh_1.Polyhedron()
status = Mesh_1.RemoveHypothesis(Gmsh_Parameters)
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
NETGEN_1D_2D = Mesh_1.Triangle(algo=smeshBuilder.NETGEN_1D2D)
NETGEN_2D_Parameters_1 = NETGEN_1D_2D.Parameters()
NETGEN_2D_Parameters_1.SetMaxSize( 0.173205 )
NETGEN_2D_Parameters_1.SetMinSize( 0.0147777 )
NETGEN_2D_Parameters_1.SetSecondOrder( 0 )
NETGEN_2D_Parameters_1.SetOptimize( 1 )
NETGEN_2D_Parameters_1.SetFineness( 2 )
NETGEN_2D_Parameters_1.SetChordalError( -1 )
NETGEN_2D_Parameters_1.SetChordalErrorEnabled( 0 )
NETGEN_2D_Parameters_1.SetUseSurfaceCurvature( 1 )
NETGEN_2D_Parameters_1.SetFuseEdges( 1 )
NETGEN_2D_Parameters_1.SetWorstElemMeasure( 0 )
NETGEN_2D_Parameters_1.SetUseDelauney( 0 )
NETGEN_2D_Parameters_1.SetQuadAllowed( 0 )
NETGEN_2D_Parameters_1.SetCheckChartBoundary( 16 )
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
status = Mesh_1.RemoveHypothesis(NETGEN_1D_2D)
status = Mesh_1.RemoveHypothesis(PolyhedronPerSolid_3D)
status = Mesh_1.RemoveHypothesis(NETGEN_2D_Parameters_1)
Prism_3D = Mesh_1.Prism()
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
UseExisting_1D = Mesh_1.UseExistingSegments()
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
status = Mesh_1.RemoveHypothesis(UseExisting_1D)
Regular_1D = Mesh_1.Segment()
Number_of_Segments_1 = Regular_1D.NumberOfSegments(15)
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
status = Mesh_1.RemoveHypothesis(Regular_1D)
status = Mesh_1.RemoveHypothesis(Prism_3D)
status = Mesh_1.RemoveHypothesis(Number_of_Segments_1)
Hexa_3D = Mesh_1.Hexahedron(algo=smeshBuilder.Hexa)
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
Quadrangle_2D = Mesh_1.Quadrangle(algo=smeshBuilder.QUADRANGLE)
Quadrangle_Parameters_1 = Quadrangle_2D.QuadrangleParameters(smeshBuilder.QUAD_QUADRANGLE_PREF,-1,[],[])
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
Renumber_1 = Hexa_3D.Renumber()
Renumber_1.SetBlocksOrientation([ ])
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
Regular_1D_1 = Mesh_1.Segment()
Number_of_Segments_2 = Regular_1D.NumberOfSegments(15)
status = Mesh_1.RemoveHypothesis(Renumber_1)
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
SegmentAroundVertex_0D = smesh.CreateHypothesis('SegmentAroundVertex_0D')
Length_Near_Vertex_1 = Regular_1D.LengthNearVertex(0.1,Fillet_1)
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
status = Mesh_1.RemoveHypothesis(Quadrangle_2D)
status = Mesh_1.RemoveHypothesis(Hexa_3D)
MEFISTO_2D = Mesh_1.Triangle(algo=smeshBuilder.MEFISTO)
status = Mesh_1.RemoveHypothesis(Quadrangle_Parameters_1)
Max_Element_Area_1 = MEFISTO_2D.MaxElementArea(0.03)
MG_Tetra = Mesh_1.Tetrahedron(algo=smeshBuilder.MG_Tetra)
MG_Tetra_Parameters_1 = MG_Tetra.Parameters()
MG_Tetra_Parameters_1.SetOptimizationLevel( 2 )
MG_Tetra_Parameters_1.SetToMeshHoles( 0 )
MG_Tetra_Parameters_1.SetToMakeGroupsOfDomains( 0 )
MG_Tetra_Parameters_1.SetMaximumMemory( -1 )
MG_Tetra_Parameters_1.SetInitialMemory( -1 )
MG_Tetra_Parameters_1.SetKeepFiles( 0 )
MG_Tetra_Parameters_1.SetWorkingDirectory( '/tmp/' )
MG_Tetra_Parameters_1.SetVerboseLevel( 10 )
MG_Tetra_Parameters_1.SetStandardOutputLog( 0 )
MG_Tetra_Parameters_1.SetRemoveLogOnSuccess( 0 )
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
status = Mesh_1.RemoveHypothesis(MG_Tetra)
NETGEN_3D = Mesh_1.Tetrahedron()
status = Mesh_1.RemoveHypothesis(MG_Tetra_Parameters_1)
NETGEN_3D_Parameters_1 = NETGEN_3D.Parameters()
NETGEN_3D_Parameters_1.SetMaxSize( 0.173205 )
NETGEN_3D_Parameters_1.SetMinSize( 0.0147777 )
NETGEN_3D_Parameters_1.SetOptimize( 1 )
NETGEN_3D_Parameters_1.SetFineness( 2 )
NETGEN_3D_Parameters_1.SetElemSizeWeight( -5.29735e+296 )
NETGEN_3D_Parameters_1.SetCheckOverlapping( 0 )
NETGEN_3D_Parameters_1.SetCheckChartBoundary( 16 )
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
NETGEN_1D_2D_1 = Mesh_1.Triangle(algo=smeshBuilder.NETGEN_1D2D,geom=Group_7)
NETGEN_2D_Parameters_2 = NETGEN_1D_2D_1.Parameters()
NETGEN_2D_Parameters_2.SetMaxSize( 0.173205 )
NETGEN_2D_Parameters_2.SetMinSize( 0.015262 )
NETGEN_2D_Parameters_2.SetSecondOrder( 0 )
NETGEN_2D_Parameters_2.SetOptimize( 1 )
NETGEN_2D_Parameters_2.SetFineness( 2 )
NETGEN_2D_Parameters_2.SetChordalError( -1 )
NETGEN_2D_Parameters_2.SetChordalErrorEnabled( 0 )
NETGEN_2D_Parameters_2.SetUseSurfaceCurvature( 1 )
NETGEN_2D_Parameters_2.SetFuseEdges( 1 )
NETGEN_2D_Parameters_2.SetWorstElemMeasure( 0 )
NETGEN_2D_Parameters_2.SetUseDelauney( 0 )
NETGEN_2D_Parameters_2.SetQuadAllowed( 0 )
NETGEN_2D_Parameters_2.SetCheckChartBoundary( 112 )
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
status = Mesh_1.RemoveHypothesis(NETGEN_1D_2D,Group_7)
Regular_1D_2 = Mesh_1.Segment(geom=Group_7)
Max_Size_1 = Regular_1D_2.MaxSize(0.01)
NETGEN_2D = Mesh_1.Triangle(algo=smeshBuilder.NETGEN_2D,geom=Group_7)
status = Mesh_1.RemoveHypothesis(NETGEN_2D_Parameters_2,Group_7)
Length_From_Edges_1 = NETGEN_2D.LengthFromEdges()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
status = Mesh_1.RemoveHypothesis(MEFISTO_2D)
status = Mesh_1.RemoveHypothesis(Number_of_Segments_2)
Deflection_1 = Regular_1D.Deflection1D(0.001)
NETGEN_2D_1 = Mesh_1.Triangle(algo=smeshBuilder.NETGEN_2D)
status = Mesh_1.RemoveHypothesis(Max_Element_Area_1)
Max_Element_Area_2 = MEFISTO_2D.MaxElementArea(0.05)
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
status = Mesh_1.RemoveHypothesis(Length_From_Edges_1,Group_7)
Max_Element_Area_3 = NETGEN_2D.MaxElementArea(0.01)
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
status = Mesh_1.RemoveHypothesis(Max_Element_Area_3,Group_7)
NETGEN_2D_Parameters_1_1 = NETGEN_2D.Parameters()
NETGEN_2D_Parameters_1_1.SetMaxSize( 0.173205 )
NETGEN_2D_Parameters_1_1.SetMinSize( 0.015262 )
NETGEN_2D_Parameters_1_1.SetOptimize( 1 )
NETGEN_2D_Parameters_1_1.SetFineness( 2 )
NETGEN_2D_Parameters_1_1.SetChordalError( -1 )
NETGEN_2D_Parameters_1_1.SetChordalErrorEnabled( 0 )
NETGEN_2D_Parameters_1_1.SetUseSurfaceCurvature( 1 )
NETGEN_2D_Parameters_1_1.SetWorstElemMeasure( 0 )
NETGEN_2D_Parameters_1_1.SetUseDelauney( 0 )
NETGEN_2D_Parameters_1_1.SetCheckChartBoundary( 0 )
NETGEN_2D_Parameters_1_1.SetQuadAllowed( 0 )
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
#Mesh_1.GetMesh().RemoveSubMesh( smeshObj_1 ) ### smeshObj_1 has not been yet created
status = Mesh_1.RemoveHypothesis(Length_Near_Vertex_1)
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
Max_Element_Area_2.SetMaxElementArea( 0.01 )
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
status = Mesh_1.RemoveHypothesis(NETGEN_3D_Parameters_1)
NETGEN_3D_Parameters_2 = NETGEN_3D.Parameters()
NETGEN_3D_Parameters_2.SetMaxSize( 0.173205 )
NETGEN_3D_Parameters_2.SetMinSize( 0.015262 )
NETGEN_3D_Parameters_2.SetOptimize( 1 )
NETGEN_3D_Parameters_2.SetFineness( 4 )
NETGEN_3D_Parameters_2.SetElemSizeWeight( -5.29735e+296 )
NETGEN_3D_Parameters_2.SetCheckOverlapping( 0 )
NETGEN_3D_Parameters_2.SetCheckChartBoundary( 16 )
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
status = Mesh_1.RemoveHypothesis(Deflection_1)
Automatic_Length_1 = Regular_1D.AutomaticLength(1)
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
Automatic_Length_1.SetFineness( 0.5 )
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
status = Mesh_1.RemoveHypothesis(Max_Element_Area_2)
Length_From_Edges_2 = MEFISTO_2D.LengthFromEdges()
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
Automatic_Length_1.SetFineness( 0.25 )
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
## Set names of Mesh objects
smesh.SetName(GMSH.GetAlgorithm(), 'GMSH')
smesh.SetName(Automatic_Length_1, 'Automatic Length_1')
smesh.SetName(NETGEN_1D_2D.GetAlgorithm(), 'NETGEN 1D-2D')
smesh.SetName(Length_From_Edges_2, 'Length From Edges_2')
smesh.SetName(PolyhedronPerSolid_3D.GetAlgorithm(), 'PolyhedronPerSolid_3D')
smesh.SetName(UseExisting_1D.GetAlgorithm(), 'UseExisting_1D')
smesh.SetName(NETGEN_2D_Parameters_1, 'NETGEN 2D Parameters_1')
smesh.SetName(Number_of_Segments_1, 'Number of Segments_1')
smesh.SetName(Prism_3D.GetAlgorithm(), 'Prism_3D')
smesh.SetName(Hexa_3D.GetAlgorithm(), 'Hexa_3D')
smesh.SetName(Regular_1D.GetAlgorithm(), 'Regular_1D')
smesh.SetName(Gmsh_Parameters, 'Gmsh Parameters')
smesh.SetName(SegmentAroundVertex_0D, 'SegmentAroundVertex_0D')
smesh.SetName(Renumber_1, 'Renumber_1')
smesh.SetName(Number_of_Segments_2, 'Number of Segments_2')
smesh.SetName(Quadrangle_2D.GetAlgorithm(), 'Quadrangle_2D')
smesh.SetName(Group_1_1, 'Group_1')
smesh.SetName(Quadrangle_Parameters_1, 'Quadrangle Parameters_1')
smesh.SetName(Group_2_1, 'Group_2')
smesh.SetName(Group_3_1, 'Group_3')
smesh.SetName(Group_4_1, 'Group_4')
smesh.SetName(Length_Near_Vertex_1, 'Length Near Vertex_1')
smesh.SetName(Group_5_1, 'Group_5')
smesh.SetName(MG_Tetra_Parameters_1, 'MG-Tetra Parameters_1')
smesh.SetName(Group_6_1, 'Group_6')
smesh.SetName(Group_7_1, 'Group_7')
smesh.SetName(Mesh_1.GetMesh(), 'Mesh_1')
smesh.SetName(Length_From_Edges_1, 'Length From Edges_1')
smesh.SetName(NETGEN_2D_Parameters_2, 'NETGEN 2D Parameters_2')
smesh.SetName(NETGEN_3D_Parameters_1, 'NETGEN 3D Parameters_1')
smesh.SetName(Max_Element_Area_1, 'Max. Element Area_1')
smesh.SetName(Max_Element_Area_3, 'Max. Element Area_3')
smesh.SetName(Deflection_1, 'Deflection_1')
smesh.SetName(Max_Element_Area_2, 'Max. Element Area_2')
smesh.SetName(Max_Size_1, 'Max Size_1')
smesh.SetName(NETGEN_3D_Parameters_2, 'NETGEN 3D Parameters_2')
smesh.SetName(NETGEN_2D_Parameters_1_1, 'NETGEN 2D Parameters_1')
smesh.SetName(MEFISTO_2D.GetAlgorithm(), 'MEFISTO_2D')
smesh.SetName(MG_Tetra.GetAlgorithm(), 'MG-Tetra')
smesh.SetName(NETGEN_3D.GetAlgorithm(), 'NETGEN 3D')
smesh.SetName(NETGEN_2D.GetAlgorithm(), 'NETGEN 2D')
if salome.sg.hasDesktop():
salome.sg.updateObjBrowser()

View File

@ -1,686 +0,0 @@
#!/usr/bin/env python
###
### This file is generated automatically by SALOME v9.7.0 with dump python functionality
###
import sys
import salome
salome.salome_init()
import salome_notebook
notebook = salome_notebook.NoteBook()
sys.path.insert(0, r'/home/nafaryus/projects/anisotropy/playground')
###
### GEOM component
###
import GEOM
from salome.geom import geomBuilder
import math
import SALOMEDS
geompy = geomBuilder.New()
O = geompy.MakeVertex(0, 0, 0)
OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
Box_1 = geompy.MakeBoxDXDYDZ(1, 1, 1)
Fillet_1 = geompy.MakeFilletR1R2(Box_1, 0.2, 0.5, geompy.ShapeType["EDGE"], [18])
Group_1 = geompy.CreateGroup(Fillet_1, geompy.ShapeType["FACE"])
geompy.UnionIDs(Group_1, [13])
Group_2 = geompy.CreateGroup(Fillet_1, geompy.ShapeType["FACE"])
geompy.UnionIDs(Group_2, [37])
Group_3 = geompy.CreateGroup(Fillet_1, geompy.ShapeType["FACE"])
geompy.UnionIDs(Group_3, [3])
Group_4 = geompy.CreateGroup(Fillet_1, geompy.ShapeType["FACE"])
geompy.UnionIDs(Group_4, [27])
Group_5 = geompy.CreateGroup(Fillet_1, geompy.ShapeType["FACE"])
geompy.UnionIDs(Group_5, [32])
Group_6 = geompy.CreateGroup(Fillet_1, geompy.ShapeType["FACE"])
geompy.UnionIDs(Group_6, [40])
Group_7 = geompy.CreateGroup(Fillet_1, geompy.ShapeType["FACE"])
geompy.UnionIDs(Group_7, [22])
[Group_1, Group_2, Group_3, Group_4, Group_5, Group_6, Group_7] = geompy.GetExistingSubObjects(Fillet_1, False)
geomObj_1 = geompy.MakeVertex(0, 0, 0)
sk = geompy.Sketcher3D()
sk.addPointsAbsolute(2.0000000, 0.0000000, 0.0000000)
sk.addPointsAbsolute(0.0000000, 2.0000000, 0.0000000)
sk.addPointsAbsolute(0.0000000, 2.0000000, 2.0000000)
sk.addPointsAbsolute(2.0000000, 0.0000000, 2.0000000)
sk.addPointsAbsolute(2.0000000, 0.0000000, 0.0000000)
geomObj_2 = sk.wire()
geomObj_3 = geompy.MakeFaceWires([geomObj_2], 1)
geomObj_4 = geompy.GetNormal(geomObj_3)
geomObj_5 = geompy.MakePrismVecH(geomObj_3, geomObj_4, 2.82842712474619)
geomObj_6 = geompy.MakeScaleTransform(geomObj_3, geomObj_1, 100)
geomObj_7 = geompy.MakeScaleTransform(geomObj_5, geomObj_1, 100)
[geomObj_8,geomObj_9,geomObj_10,geomObj_11,geomObj_12,geomObj_13] = geompy.ExtractShapes(geomObj_7, geompy.ShapeType["FACE"], False)
geomObj_14 = geompy.GetNormal(geomObj_8)
geomObj_15 = geompy.GetNormal(geomObj_9)
geomObj_16 = geompy.GetNormal(geomObj_10)
geomObj_17 = geompy.GetNormal(geomObj_11)
geomObj_18 = geompy.GetNormal(geomObj_12)
geomObj_19 = geompy.GetNormal(geomObj_13)
geomObj_20 = geompy.MakeVectorDXDYDZ(1, 0, 0)
geomObj_21 = geompy.MakeVectorDXDYDZ(0, 1, 0)
geomObj_22 = geompy.MakeVectorDXDYDZ(0, 0, 1)
geomObj_23 = geompy.MakeSphereR(1.298701298701299)
geomObj_24 = geompy.MakeMultiTranslation2D(geomObj_23, geomObj_20, 2, 3, geomObj_21, 2, 3)
geomObj_25 = geompy.MakeMultiTranslation1D(geomObj_24, geomObj_22, 2, 3)
[geomObj_26,geomObj_27,geomObj_28,geomObj_29,geomObj_30,geomObj_31,geomObj_32,geomObj_33,geomObj_34,geomObj_35,geomObj_36,geomObj_37,geomObj_38,geomObj_39,geomObj_40,geomObj_41,geomObj_42,geomObj_43,geomObj_44,geomObj_45,geomObj_46,geomObj_47,geomObj_48,geomObj_49,geomObj_50,geomObj_51,geomObj_52] = geompy.ExtractShapes(geomObj_25, geompy.ShapeType["SOLID"], True)
geomObj_53 = geompy.MakeFuseList([geomObj_26, geomObj_27, geomObj_28, geomObj_29, geomObj_30, geomObj_31, geomObj_32, geomObj_33, geomObj_34, geomObj_35, geomObj_36, geomObj_37, geomObj_38, geomObj_39, geomObj_40, geomObj_41, geomObj_42, geomObj_43, geomObj_44, geomObj_45, geomObj_46, geomObj_47, geomObj_48, geomObj_49, geomObj_50, geomObj_51, geomObj_52], False, False)
geomObj_54 = geompy.MakeScaleTransform(geomObj_53, geomObj_1, 100)
geomObj_55 = geompy.MakeScaleTransform(geomObj_54, geomObj_1, 0.01)
geomObj_56 = geompy.MakeFilletAll(geomObj_54, 3)
geomObj_57 = geompy.MakeScaleTransform(geomObj_56, geomObj_1, 0.01)
geomObj_58 = geompy.MakeCutList(geomObj_7, [geomObj_56])
simple = geompy.MakeScaleTransform(geomObj_58, geomObj_1, 0.01)
[geomObj_59] = geompy.ExtractShapes(simple, geompy.ShapeType["SHELL"], True)
geomObj_60 = geompy.CreateGroup(simple, geompy.ShapeType["FACE"])
geompy.UnionIDs(geomObj_60, [3, 17, 32, 39, 44, 68, 73, 82, 87, 96, 105, 112, 115, 124, 127, 134, 139, 144, 150, 152, 159, 164, 169, 176, 185, 194, 197, 213, 216, 225, 228, 237, 242, 247, 258, 261, 268, 271, 274, 279, 284, 288, 290, 293])
inlet = geompy.CreateGroup(simple, geompy.ShapeType["FACE"])
geomObj_61 = geompy.MakeCutList(geomObj_6, [geomObj_56])
geomObj_62 = geompy.MakeVertex(0, 0, 0)
geomObj_63 = geompy.MakeScaleTransform(geomObj_61, geomObj_62, 0.01)
geomObj_64 = geompy.GetInPlace(simple, geomObj_63, True)
[geomObj_65] = geompy.SubShapeAll(geomObj_64, geompy.ShapeType["FACE"])
geompy.UnionList(inlet, [geomObj_65])
outlet = geompy.CreateGroup(simple, geompy.ShapeType["FACE"])
geomObj_66 = geompy.MakeCutList(geomObj_13, [geomObj_56])
geomObj_67 = geompy.MakeVertex(0, 0, 0)
geomObj_68 = geompy.MakeScaleTransform(geomObj_66, geomObj_67, 0.01)
geomObj_69 = geompy.GetInPlace(simple, geomObj_68, True)
[geomObj_70] = geompy.SubShapeAll(geomObj_69, geompy.ShapeType["FACE"])
geompy.UnionList(outlet, [geomObj_70])
symetry0 = geompy.CreateGroup(simple, geompy.ShapeType["FACE"])
geomObj_71 = geompy.MakeCutList(geomObj_8, [geomObj_56])
geomObj_72 = geompy.MakeVertex(0, 0, 0)
geomObj_73 = geompy.MakeScaleTransform(geomObj_71, geomObj_72, 0.01)
geomObj_74 = geompy.GetInPlace(simple, geomObj_73, True)
[geomObj_75,geomObj_76,geomObj_77,geomObj_78] = geompy.SubShapeAll(geomObj_74, geompy.ShapeType["FACE"])
geompy.UnionList(symetry0, [geomObj_75, geomObj_76, geomObj_77, geomObj_78])
symetry1 = geompy.CreateGroup(simple, geompy.ShapeType["FACE"])
geomObj_79 = geompy.MakeCutList(geomObj_9, [geomObj_56])
geomObj_80 = geompy.MakeVertex(0, 0, 0)
geomObj_81 = geompy.MakeScaleTransform(geomObj_79, geomObj_80, 0.01)
geomObj_82 = geompy.GetInPlace(simple, geomObj_81, True)
[geomObj_83] = geompy.SubShapeAll(geomObj_82, geompy.ShapeType["FACE"])
geompy.UnionList(symetry1, [geomObj_83])
symetry2 = geompy.CreateGroup(simple, geompy.ShapeType["FACE"])
geomObj_84 = geompy.MakeCutList(geomObj_10, [geomObj_56])
geomObj_85 = geompy.MakeVertex(0, 0, 0)
geomObj_86 = geompy.MakeScaleTransform(geomObj_84, geomObj_85, 0.01)
geomObj_87 = geompy.GetInPlace(simple, geomObj_86, True)
[geomObj_88,geomObj_89,geomObj_90,geomObj_91] = geompy.SubShapeAll(geomObj_87, geompy.ShapeType["FACE"])
geompy.UnionList(symetry2, [geomObj_88, geomObj_89, geomObj_90, geomObj_91])
symetry3 = geompy.CreateGroup(simple, geompy.ShapeType["FACE"])
geomObj_92 = geompy.MakeCutList(geomObj_11, [geomObj_56])
geomObj_93 = geompy.MakeVertex(0, 0, 0)
geomObj_94 = geompy.MakeScaleTransform(geomObj_92, geomObj_93, 0.01)
geomObj_95 = geompy.GetInPlace(simple, geomObj_94, True)
[geomObj_96] = geompy.SubShapeAll(geomObj_95, geompy.ShapeType["FACE"])
geompy.UnionList(symetry3, [geomObj_96])
strips = geompy.CreateGroup(simple, geompy.ShapeType["FACE"])
geomObj_97 = geompy.MakeCutList(geomObj_59, [inlet, outlet, symetry0, symetry1, symetry2, symetry3, geomObj_55])
geomObj_98 = geompy.GetInPlace(simple, geomObj_97, True)
[geomObj_99,geomObj_100,geomObj_101,geomObj_102,geomObj_103,geomObj_104,geomObj_105,geomObj_106,geomObj_107,geomObj_108,geomObj_109,geomObj_110,geomObj_111,geomObj_112,geomObj_113,geomObj_114,geomObj_115,geomObj_116,geomObj_117,geomObj_118] = geompy.SubShapeAll(geomObj_98, geompy.ShapeType["FACE"])
geompy.UnionList(strips, [geomObj_99, geomObj_100, geomObj_101, geomObj_102, geomObj_103, geomObj_104, geomObj_105, geomObj_106, geomObj_107, geomObj_108, geomObj_109, geomObj_110, geomObj_111, geomObj_112, geomObj_113, geomObj_114, geomObj_115, geomObj_116, geomObj_117, geomObj_118])
wall = geompy.CutListOfGroups([geomObj_60], [inlet, outlet, symetry0, symetry1, symetry2, symetry3, strips])
[geomObj_60, inlet, geomObj_64, outlet, geomObj_69, symetry0, geomObj_74, symetry1, geomObj_82, symetry2, geomObj_87, symetry3, geomObj_95, geomObj_59, strips, geomObj_98, wall] = geompy.GetExistingSubObjects(simple, False)
geomObj_119 = geompy.MakeVertex(0, 0, 0)
sk = geompy.Sketcher3D()
sk.addPointsAbsolute(2.0000000, 0.0000000, 0.0000000)
sk.addPointsAbsolute(0.0000000, 2.0000000, 0.0000000)
sk.addPointsAbsolute(0.0000000, 2.0000000, 2.0000000)
sk.addPointsAbsolute(2.0000000, 0.0000000, 2.0000000)
sk.addPointsAbsolute(2.0000000, 0.0000000, 0.0000000)
geomObj_120 = sk.wire()
geomObj_121 = geompy.MakeFaceWires([geomObj_120], 1)
geomObj_122 = geompy.GetNormal(geomObj_121)
geomObj_123 = geompy.MakePrismVecH(geomObj_121, geomObj_122, 2.82842712474619)
geomObj_124 = geompy.MakeScaleTransform(geomObj_121, geomObj_119, 100)
geomObj_125 = geompy.MakeScaleTransform(geomObj_123, geomObj_119, 100)
[geomObj_126,geomObj_127,geomObj_128,geomObj_129,geomObj_130,geomObj_131] = geompy.ExtractShapes(geomObj_125, geompy.ShapeType["FACE"], False)
geomObj_132 = geompy.GetNormal(geomObj_126)
geomObj_133 = geompy.GetNormal(geomObj_127)
geomObj_134 = geompy.GetNormal(geomObj_128)
geomObj_135 = geompy.GetNormal(geomObj_129)
geomObj_136 = geompy.GetNormal(geomObj_130)
geomObj_137 = geompy.GetNormal(geomObj_131)
geomObj_138 = geompy.MakeVectorDXDYDZ(1, 0, 0)
geomObj_139 = geompy.MakeVectorDXDYDZ(0, 1, 0)
geomObj_140 = geompy.MakeVectorDXDYDZ(0, 0, 1)
geomObj_141 = geompy.MakeSphereR(1.388888888888889)
geomObj_142 = geompy.MakeMultiTranslation2D(geomObj_141, geomObj_138, 2, 3, geomObj_139, 2, 3)
geomObj_143 = geompy.MakeMultiTranslation1D(geomObj_142, geomObj_140, 2, 3)
[geomObj_144,geomObj_145,geomObj_146,geomObj_147,geomObj_148,geomObj_149,geomObj_150,geomObj_151,geomObj_152,geomObj_153,geomObj_154,geomObj_155,geomObj_156,geomObj_157,geomObj_158,geomObj_159,geomObj_160,geomObj_161,geomObj_162,geomObj_163,geomObj_164,geomObj_165,geomObj_166,geomObj_167,geomObj_168,geomObj_169,geomObj_170] = geompy.ExtractShapes(geomObj_143, geompy.ShapeType["SOLID"], True)
geomObj_171 = geompy.MakeFuseList([geomObj_144, geomObj_145, geomObj_146, geomObj_147, geomObj_148, geomObj_149, geomObj_150, geomObj_151, geomObj_152, geomObj_153, geomObj_154, geomObj_155, geomObj_156, geomObj_157, geomObj_158, geomObj_159, geomObj_160, geomObj_161, geomObj_162, geomObj_163, geomObj_164, geomObj_165, geomObj_166, geomObj_167, geomObj_168, geomObj_169, geomObj_170], False, False)
geomObj_172 = geompy.MakeScaleTransform(geomObj_171, geomObj_119, 100)
geomObj_173 = geompy.MakeScaleTransform(geomObj_172, geomObj_119, 0.01)
geomObj_174 = geompy.MakeFilletAll(geomObj_172, 1)
geomObj_175 = geompy.MakeScaleTransform(geomObj_174, geomObj_119, 0.01)
geomObj_176 = geompy.MakeCutList(geomObj_125, [geomObj_174])
simple_1 = geompy.MakeScaleTransform(geomObj_176, geomObj_119, 0.01)
[geomObj_177] = geompy.ExtractShapes(simple_1, geompy.ShapeType["SHELL"], True)
geomObj_178 = geompy.CreateGroup(simple_1, geompy.ShapeType["FACE"])
geompy.UnionIDs(geomObj_178, [3, 17, 32, 39, 44, 68, 73, 82, 87, 96, 105, 112, 115, 124, 127, 134, 139, 144, 150, 152, 159, 164, 169, 176, 185, 194, 197, 213, 216, 225, 228, 237, 242, 247, 258, 261, 268, 271, 274, 279, 284, 288, 290, 293])
inlet_1 = geompy.CreateGroup(simple_1, geompy.ShapeType["FACE"])
geomObj_179 = geompy.MakeCutList(geomObj_124, [geomObj_174])
geomObj_180 = geompy.MakeVertex(0, 0, 0)
geomObj_181 = geompy.MakeScaleTransform(geomObj_179, geomObj_180, 0.01)
geomObj_182 = geompy.GetInPlace(simple_1, geomObj_181, True)
[geomObj_183] = geompy.SubShapeAll(geomObj_182, geompy.ShapeType["FACE"])
geompy.UnionList(inlet_1, [geomObj_183])
outlet_1 = geompy.CreateGroup(simple_1, geompy.ShapeType["FACE"])
geomObj_184 = geompy.MakeCutList(geomObj_131, [geomObj_174])
geomObj_185 = geompy.MakeVertex(0, 0, 0)
geomObj_186 = geompy.MakeScaleTransform(geomObj_184, geomObj_185, 0.01)
geomObj_187 = geompy.GetInPlace(simple_1, geomObj_186, True)
[geomObj_188] = geompy.SubShapeAll(geomObj_187, geompy.ShapeType["FACE"])
geompy.UnionList(outlet_1, [geomObj_188])
symetry0_1 = geompy.CreateGroup(simple_1, geompy.ShapeType["FACE"])
geomObj_189 = geompy.MakeCutList(geomObj_126, [geomObj_174])
geomObj_190 = geompy.MakeVertex(0, 0, 0)
geomObj_191 = geompy.MakeScaleTransform(geomObj_189, geomObj_190, 0.01)
geomObj_192 = geompy.GetInPlace(simple_1, geomObj_191, True)
[geomObj_193,geomObj_194,geomObj_195,geomObj_196] = geompy.SubShapeAll(geomObj_192, geompy.ShapeType["FACE"])
geompy.UnionList(symetry0_1, [geomObj_193, geomObj_194, geomObj_195, geomObj_196])
symetry1_1 = geompy.CreateGroup(simple_1, geompy.ShapeType["FACE"])
geomObj_197 = geompy.MakeCutList(geomObj_127, [geomObj_174])
geomObj_198 = geompy.MakeVertex(0, 0, 0)
geomObj_199 = geompy.MakeScaleTransform(geomObj_197, geomObj_198, 0.01)
geomObj_200 = geompy.GetInPlace(simple_1, geomObj_199, True)
[geomObj_201] = geompy.SubShapeAll(geomObj_200, geompy.ShapeType["FACE"])
geompy.UnionList(symetry1_1, [geomObj_201])
symetry2_1 = geompy.CreateGroup(simple_1, geompy.ShapeType["FACE"])
geomObj_202 = geompy.MakeCutList(geomObj_128, [geomObj_174])
geomObj_203 = geompy.MakeVertex(0, 0, 0)
geomObj_204 = geompy.MakeScaleTransform(geomObj_202, geomObj_203, 0.01)
geomObj_205 = geompy.GetInPlace(simple_1, geomObj_204, True)
[geomObj_206,geomObj_207,geomObj_208,geomObj_209] = geompy.SubShapeAll(geomObj_205, geompy.ShapeType["FACE"])
geompy.UnionList(symetry2_1, [geomObj_206, geomObj_207, geomObj_208, geomObj_209])
symetry3_1 = geompy.CreateGroup(simple_1, geompy.ShapeType["FACE"])
geomObj_210 = geompy.MakeCutList(geomObj_129, [geomObj_174])
geomObj_211 = geompy.MakeVertex(0, 0, 0)
geomObj_212 = geompy.MakeScaleTransform(geomObj_210, geomObj_211, 0.01)
geomObj_213 = geompy.GetInPlace(simple_1, geomObj_212, True)
[geomObj_214] = geompy.SubShapeAll(geomObj_213, geompy.ShapeType["FACE"])
geompy.UnionList(symetry3_1, [geomObj_214])
strips_1 = geompy.CreateGroup(simple_1, geompy.ShapeType["FACE"])
geomObj_215 = geompy.MakeCutList(geomObj_177, [inlet_1, outlet_1, symetry0_1, symetry1_1, symetry2_1, symetry3_1, geomObj_173])
geomObj_216 = geompy.GetInPlace(simple_1, geomObj_215, True)
[geomObj_217,geomObj_218,geomObj_219,geomObj_220,geomObj_221,geomObj_222,geomObj_223,geomObj_224,geomObj_225,geomObj_226,geomObj_227,geomObj_228,geomObj_229,geomObj_230,geomObj_231,geomObj_232,geomObj_233,geomObj_234,geomObj_235,geomObj_236] = geompy.SubShapeAll(geomObj_216, geompy.ShapeType["FACE"])
geompy.UnionList(strips_1, [geomObj_217, geomObj_218, geomObj_219, geomObj_220, geomObj_221, geomObj_222, geomObj_223, geomObj_224, geomObj_225, geomObj_226, geomObj_227, geomObj_228, geomObj_229, geomObj_230, geomObj_231, geomObj_232, geomObj_233, geomObj_234, geomObj_235, geomObj_236])
wall_1 = geompy.CutListOfGroups([geomObj_178], [inlet_1, outlet_1, symetry0_1, symetry1_1, symetry2_1, symetry3_1, strips_1])
[geomObj_178, inlet_1, geomObj_182, outlet_1, geomObj_187, symetry0_1, geomObj_192, symetry1_1, geomObj_200, symetry2_1, geomObj_205, symetry3_1, geomObj_213, geomObj_177, strips_1, geomObj_216, wall_1] = geompy.GetExistingSubObjects(simple_1, False)
geompy.addToStudy( O, 'O' )
geompy.addToStudy( OX, 'OX' )
geompy.addToStudy( OY, 'OY' )
geompy.addToStudy( OZ, 'OZ' )
geompy.addToStudy( Box_1, 'Box_1' )
geompy.addToStudy( Fillet_1, 'Fillet_1' )
geompy.addToStudyInFather( Fillet_1, Group_1, 'Group_1' )
geompy.addToStudyInFather( Fillet_1, Group_2, 'Group_2' )
geompy.addToStudyInFather( Fillet_1, Group_3, 'Group_3' )
geompy.addToStudyInFather( Fillet_1, Group_4, 'Group_4' )
geompy.addToStudyInFather( Fillet_1, Group_5, 'Group_5' )
geompy.addToStudyInFather( Fillet_1, Group_6, 'Group_6' )
geompy.addToStudyInFather( Fillet_1, Group_7, 'Group_7' )
geompy.addToStudy( simple, 'simple' )
geompy.addToStudyInFather( simple, inlet, 'inlet' )
geompy.addToStudyInFather( simple, outlet, 'outlet' )
geompy.addToStudyInFather( simple, symetry0, 'symetry0' )
geompy.addToStudyInFather( simple, symetry1, 'symetry1' )
geompy.addToStudyInFather( simple, symetry2, 'symetry2' )
geompy.addToStudyInFather( simple, symetry3, 'symetry3' )
geompy.addToStudyInFather( simple, strips, 'strips' )
geompy.addToStudyInFather( simple, wall, 'wall' )
geompy.addToStudy( simple_1, 'simple' )
geompy.addToStudyInFather( simple_1, inlet_1, 'inlet' )
geompy.addToStudyInFather( simple_1, outlet_1, 'outlet' )
geompy.addToStudyInFather( simple_1, symetry0_1, 'symetry0' )
geompy.addToStudyInFather( simple_1, symetry1_1, 'symetry1' )
geompy.addToStudyInFather( simple_1, symetry2_1, 'symetry2' )
geompy.addToStudyInFather( simple_1, symetry3_1, 'symetry3' )
geompy.addToStudyInFather( simple_1, strips_1, 'strips' )
geompy.addToStudyInFather( simple_1, wall_1, 'wall' )
###
### SMESH component
###
import SMESH, SALOMEDS
from salome.smesh import smeshBuilder
smesh = smeshBuilder.New()
#smesh.SetEnablePublish( False ) # Set to False to avoid publish in study if not needed or in some particular situations:
# multiples meshes built in parallel, complex and numerous mesh edition (performance)
Mesh_1 = smesh.Mesh(Fillet_1)
GMSH = Mesh_1.Tetrahedron(algo=smeshBuilder.GMSH)
Gmsh_Parameters = GMSH.Parameters()
Gmsh_Parameters.Set2DAlgo( 0 )
Gmsh_Parameters.SetMinSize( 0 )
Gmsh_Parameters.SetMaxSize( 0.5 )
Gmsh_Parameters.SetIs2d( 0 )
Group_1_1 = Mesh_1.GroupOnGeom(Group_1,'Group_1',SMESH.FACE)
Group_2_1 = Mesh_1.GroupOnGeom(Group_2,'Group_2',SMESH.FACE)
Group_3_1 = Mesh_1.GroupOnGeom(Group_3,'Group_3',SMESH.FACE)
Group_4_1 = Mesh_1.GroupOnGeom(Group_4,'Group_4',SMESH.FACE)
Group_5_1 = Mesh_1.GroupOnGeom(Group_5,'Group_5',SMESH.FACE)
Group_6_1 = Mesh_1.GroupOnGeom(Group_6,'Group_6',SMESH.FACE)
Group_7_1 = Mesh_1.GroupOnGeom(Group_7,'Group_7',SMESH.FACE)
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
Gmsh_Parameters.SetMinSize( 0.15307 )
Gmsh_Parameters.SetMaxSize( 0.17443 )
Gmsh_Parameters.SetIs2d( 0 )
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
status = Mesh_1.RemoveHypothesis(GMSH)
PolyhedronPerSolid_3D = Mesh_1.Polyhedron()
status = Mesh_1.RemoveHypothesis(Gmsh_Parameters)
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
NETGEN_1D_2D = Mesh_1.Triangle(algo=smeshBuilder.NETGEN_1D2D)
NETGEN_2D_Parameters_1 = NETGEN_1D_2D.Parameters()
NETGEN_2D_Parameters_1.SetMaxSize( 0.173205 )
NETGEN_2D_Parameters_1.SetMinSize( 0.0147777 )
NETGEN_2D_Parameters_1.SetSecondOrder( 0 )
NETGEN_2D_Parameters_1.SetOptimize( 1 )
NETGEN_2D_Parameters_1.SetFineness( 2 )
NETGEN_2D_Parameters_1.SetChordalError( -1 )
NETGEN_2D_Parameters_1.SetChordalErrorEnabled( 0 )
NETGEN_2D_Parameters_1.SetUseSurfaceCurvature( 1 )
NETGEN_2D_Parameters_1.SetFuseEdges( 1 )
NETGEN_2D_Parameters_1.SetWorstElemMeasure( 0 )
NETGEN_2D_Parameters_1.SetUseDelauney( 0 )
NETGEN_2D_Parameters_1.SetQuadAllowed( 0 )
NETGEN_2D_Parameters_1.SetCheckChartBoundary( 16 )
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
status = Mesh_1.RemoveHypothesis(NETGEN_1D_2D)
status = Mesh_1.RemoveHypothesis(PolyhedronPerSolid_3D)
status = Mesh_1.RemoveHypothesis(NETGEN_2D_Parameters_1)
Prism_3D = Mesh_1.Prism()
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
UseExisting_1D = Mesh_1.UseExistingSegments()
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
status = Mesh_1.RemoveHypothesis(UseExisting_1D)
Regular_1D = Mesh_1.Segment()
Number_of_Segments_1 = Regular_1D.NumberOfSegments(15)
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
status = Mesh_1.RemoveHypothesis(Regular_1D)
status = Mesh_1.RemoveHypothesis(Prism_3D)
status = Mesh_1.RemoveHypothesis(Number_of_Segments_1)
Hexa_3D = Mesh_1.Hexahedron(algo=smeshBuilder.Hexa)
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
Quadrangle_2D = Mesh_1.Quadrangle(algo=smeshBuilder.QUADRANGLE)
Quadrangle_Parameters_1 = Quadrangle_2D.QuadrangleParameters(smeshBuilder.QUAD_QUADRANGLE_PREF,-1,[],[])
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
Renumber_1 = Hexa_3D.Renumber()
Renumber_1.SetBlocksOrientation([ ])
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
Regular_1D_1 = Mesh_1.Segment()
Number_of_Segments_2 = Regular_1D.NumberOfSegments(15)
status = Mesh_1.RemoveHypothesis(Renumber_1)
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
SegmentAroundVertex_0D = smesh.CreateHypothesis('SegmentAroundVertex_0D')
Length_Near_Vertex_1 = Regular_1D.LengthNearVertex(0.1,Fillet_1)
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
status = Mesh_1.RemoveHypothesis(Quadrangle_2D)
status = Mesh_1.RemoveHypothesis(Hexa_3D)
MEFISTO_2D = Mesh_1.Triangle(algo=smeshBuilder.MEFISTO)
status = Mesh_1.RemoveHypothesis(Quadrangle_Parameters_1)
Max_Element_Area_1 = MEFISTO_2D.MaxElementArea(0.03)
MG_Tetra = Mesh_1.Tetrahedron(algo=smeshBuilder.MG_Tetra)
MG_Tetra_Parameters_1 = MG_Tetra.Parameters()
MG_Tetra_Parameters_1.SetOptimizationLevel( 2 )
MG_Tetra_Parameters_1.SetToMeshHoles( 0 )
MG_Tetra_Parameters_1.SetToMakeGroupsOfDomains( 0 )
MG_Tetra_Parameters_1.SetMaximumMemory( -1 )
MG_Tetra_Parameters_1.SetInitialMemory( -1 )
MG_Tetra_Parameters_1.SetKeepFiles( 0 )
MG_Tetra_Parameters_1.SetWorkingDirectory( '/tmp/' )
MG_Tetra_Parameters_1.SetVerboseLevel( 10 )
MG_Tetra_Parameters_1.SetStandardOutputLog( 0 )
MG_Tetra_Parameters_1.SetRemoveLogOnSuccess( 0 )
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
status = Mesh_1.RemoveHypothesis(MG_Tetra)
NETGEN_3D = Mesh_1.Tetrahedron()
status = Mesh_1.RemoveHypothesis(MG_Tetra_Parameters_1)
NETGEN_3D_Parameters_1 = NETGEN_3D.Parameters()
NETGEN_3D_Parameters_1.SetMaxSize( 0.173205 )
NETGEN_3D_Parameters_1.SetMinSize( 0.0147777 )
NETGEN_3D_Parameters_1.SetOptimize( 1 )
NETGEN_3D_Parameters_1.SetFineness( 2 )
NETGEN_3D_Parameters_1.SetElemSizeWeight( -5.29735e+296 )
NETGEN_3D_Parameters_1.SetCheckOverlapping( 0 )
NETGEN_3D_Parameters_1.SetCheckChartBoundary( 16 )
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
NETGEN_1D_2D_1 = Mesh_1.Triangle(algo=smeshBuilder.NETGEN_1D2D,geom=Group_7)
NETGEN_2D_Parameters_2 = NETGEN_1D_2D_1.Parameters()
NETGEN_2D_Parameters_2.SetMaxSize( 0.173205 )
NETGEN_2D_Parameters_2.SetMinSize( 0.015262 )
NETGEN_2D_Parameters_2.SetSecondOrder( 0 )
NETGEN_2D_Parameters_2.SetOptimize( 1 )
NETGEN_2D_Parameters_2.SetFineness( 2 )
NETGEN_2D_Parameters_2.SetChordalError( -1 )
NETGEN_2D_Parameters_2.SetChordalErrorEnabled( 0 )
NETGEN_2D_Parameters_2.SetUseSurfaceCurvature( 1 )
NETGEN_2D_Parameters_2.SetFuseEdges( 1 )
NETGEN_2D_Parameters_2.SetWorstElemMeasure( 0 )
NETGEN_2D_Parameters_2.SetUseDelauney( 0 )
NETGEN_2D_Parameters_2.SetQuadAllowed( 0 )
NETGEN_2D_Parameters_2.SetCheckChartBoundary( 112 )
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
status = Mesh_1.RemoveHypothesis(NETGEN_1D_2D,Group_7)
Regular_1D_2 = Mesh_1.Segment(geom=Group_7)
Max_Size_1 = Regular_1D_2.MaxSize(0.01)
NETGEN_2D = Mesh_1.Triangle(algo=smeshBuilder.NETGEN_2D,geom=Group_7)
status = Mesh_1.RemoveHypothesis(NETGEN_2D_Parameters_2,Group_7)
Length_From_Edges_1 = NETGEN_2D.LengthFromEdges()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
status = Mesh_1.RemoveHypothesis(MEFISTO_2D)
status = Mesh_1.RemoveHypothesis(Number_of_Segments_2)
Deflection_1 = Regular_1D.Deflection1D(0.001)
NETGEN_2D_1 = Mesh_1.Triangle(algo=smeshBuilder.NETGEN_2D)
status = Mesh_1.RemoveHypothesis(Max_Element_Area_1)
Max_Element_Area_2 = MEFISTO_2D.MaxElementArea(0.05)
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
status = Mesh_1.RemoveHypothesis(Length_From_Edges_1,Group_7)
Max_Element_Area_3 = NETGEN_2D.MaxElementArea(0.01)
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
status = Mesh_1.RemoveHypothesis(Max_Element_Area_3,Group_7)
NETGEN_2D_Parameters_1_1 = NETGEN_2D.Parameters()
NETGEN_2D_Parameters_1_1.SetMaxSize( 0.173205 )
NETGEN_2D_Parameters_1_1.SetMinSize( 0.015262 )
NETGEN_2D_Parameters_1_1.SetOptimize( 1 )
NETGEN_2D_Parameters_1_1.SetFineness( 2 )
NETGEN_2D_Parameters_1_1.SetChordalError( -1 )
NETGEN_2D_Parameters_1_1.SetChordalErrorEnabled( 0 )
NETGEN_2D_Parameters_1_1.SetUseSurfaceCurvature( 1 )
NETGEN_2D_Parameters_1_1.SetWorstElemMeasure( 0 )
NETGEN_2D_Parameters_1_1.SetUseDelauney( 0 )
NETGEN_2D_Parameters_1_1.SetCheckChartBoundary( 0 )
NETGEN_2D_Parameters_1_1.SetQuadAllowed( 0 )
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
#Mesh_1.GetMesh().RemoveSubMesh( smeshObj_1 ) ### smeshObj_1 has not been yet created
status = Mesh_1.RemoveHypothesis(Length_Near_Vertex_1)
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
Max_Element_Area_2.SetMaxElementArea( 0.01 )
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
status = Mesh_1.RemoveHypothesis(NETGEN_3D_Parameters_1)
NETGEN_3D_Parameters_2 = NETGEN_3D.Parameters()
NETGEN_3D_Parameters_2.SetMaxSize( 0.173205 )
NETGEN_3D_Parameters_2.SetMinSize( 0.015262 )
NETGEN_3D_Parameters_2.SetOptimize( 1 )
NETGEN_3D_Parameters_2.SetFineness( 4 )
NETGEN_3D_Parameters_2.SetElemSizeWeight( -5.29735e+296 )
NETGEN_3D_Parameters_2.SetCheckOverlapping( 0 )
NETGEN_3D_Parameters_2.SetCheckChartBoundary( 16 )
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
status = Mesh_1.RemoveHypothesis(Deflection_1)
Automatic_Length_1 = Regular_1D.AutomaticLength(1)
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
Automatic_Length_1.SetFineness( 0.5 )
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
status = Mesh_1.RemoveHypothesis(Max_Element_Area_2)
Length_From_Edges_2 = MEFISTO_2D.LengthFromEdges()
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
Automatic_Length_1.SetFineness( 0.25 )
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
status = Mesh_1.RemoveHypothesis(Regular_1D)
status = Mesh_1.RemoveHypothesis(NETGEN_2D)
status = Mesh_1.RemoveHypothesis(NETGEN_3D)
status = Mesh_1.RemoveHypothesis(Automatic_Length_1)
status = Mesh_1.RemoveHypothesis(Length_From_Edges_2)
NETGEN_1D_2D_3D = Mesh_1.Tetrahedron(algo=smeshBuilder.NETGEN_1D2D3D)
status = Mesh_1.RemoveHypothesis(NETGEN_3D_Parameters_2)
NETGEN_3D_Simple_Parameters_1 = NETGEN_1D_2D_3D.Parameters(smeshBuilder.SIMPLE)
NETGEN_3D_Simple_Parameters_1.SetNumberOfSegments( 15 )
NETGEN_3D_Simple_Parameters_1.LengthFromEdges()
NETGEN_3D_Simple_Parameters_1.LengthFromFaces()
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
NETGEN_3D_Simple_Parameters_1.SetNumberOfSegments( 3 )
NETGEN_3D_Simple_Parameters_1.LengthFromEdges()
NETGEN_3D_Simple_Parameters_1.LengthFromFaces()
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
NETGEN_3D_Simple_Parameters_1.SetLocalLength( 0.173205 )
NETGEN_3D_Simple_Parameters_1.LengthFromEdges()
NETGEN_3D_Simple_Parameters_1.LengthFromFaces()
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
NETGEN_3D_Simple_Parameters_1.SetNumberOfSegments( 10 )
NETGEN_3D_Simple_Parameters_1.LengthFromEdges()
NETGEN_3D_Simple_Parameters_1.LengthFromFaces()
isDone = Mesh_1.Compute()
[ Group_1_1, Group_2_1, Group_3_1, Group_4_1, Group_5_1, Group_6_1, Group_7_1 ] = Mesh_1.GetGroups()
Mesh_2 = smesh.Mesh(simple)
NETGEN_1D_2D_3D_1 = Mesh_2.Tetrahedron(algo=smeshBuilder.NETGEN_1D2D3D)
NETGEN_3D_Simple_Parameters_2 = NETGEN_1D_2D_3D_1.Parameters(smeshBuilder.SIMPLE)
NETGEN_3D_Simple_Parameters_2.SetNumberOfSegments( 15 )
NETGEN_3D_Simple_Parameters_2.LengthFromEdges()
NETGEN_3D_Simple_Parameters_2.LengthFromFaces()
#Group_1_2 = Mesh_2.GroupOnGeom(__NOT__Published__Object__,'',SMESH.FACE)
inlet_2 = Mesh_2.GroupOnGeom(inlet,'inlet',SMESH.FACE)
#Group_3_2 = Mesh_2.GroupOnGeom(__NOT__Published__Object__,'',SMESH.FACE)
outlet_2 = Mesh_2.GroupOnGeom(outlet,'outlet',SMESH.FACE)
#Group_5_2 = Mesh_2.GroupOnGeom(__NOT__Published__Object__,'',SMESH.FACE)
symetry0_2 = Mesh_2.GroupOnGeom(symetry0,'symetry0',SMESH.FACE)
#Group_7_2 = Mesh_2.GroupOnGeom(__NOT__Published__Object__,'',SMESH.FACE)
symetry1_2 = Mesh_2.GroupOnGeom(symetry1,'symetry1',SMESH.FACE)
#Group_9 = Mesh_2.GroupOnGeom(__NOT__Published__Object__,'',SMESH.FACE)
symetry2_2 = Mesh_2.GroupOnGeom(symetry2,'symetry2',SMESH.FACE)
#Group_11 = Mesh_2.GroupOnGeom(__NOT__Published__Object__,'',SMESH.FACE)
symetry3_2 = Mesh_2.GroupOnGeom(symetry3,'symetry3',SMESH.FACE)
#Group_13 = Mesh_2.GroupOnGeom(__NOT__Published__Object__,'',SMESH.FACE)
#Group_14 = Mesh_2.GroupOnGeom(__NOT__Published__Object__,'',SMESH.FACE)
strips_2 = Mesh_2.GroupOnGeom(strips,'strips',SMESH.FACE)
#Group_16 = Mesh_2.GroupOnGeom(__NOT__Published__Object__,'',SMESH.FACE)
wall_2 = Mesh_2.GroupOnGeom(wall,'wall',SMESH.FACE)
isDone = Mesh_2.Compute()
[ Group_1_2, inlet_2, Group_3_2, outlet_2, Group_5_2, symetry0_2, Group_7_2, symetry1_2, Group_9, symetry2_2, Group_11, symetry3_2, Group_13, Group_14, strips_2, Group_16, wall_2 ] = Mesh_2.GetGroups()
Mesh_1.Clear()
CompositeSegment_1D = Mesh_2.Segment(algo=smeshBuilder.COMPOSITE,geom=strips)
Number_of_Segments_3 = CompositeSegment_1D.NumberOfSegments(17)
NETGEN_2D_2 = Mesh_2.Triangle(algo=smeshBuilder.NETGEN_2D,geom=strips)
Length_From_Edges_3 = NETGEN_2D_2.LengthFromEdges()
[ Group_1_2, inlet_2, Group_3_2, outlet_2, Group_5_2, symetry0_2, Group_7_2, symetry1_2, Group_9, symetry2_2, Group_11, symetry3_2, Group_13, Group_14, strips_2, Group_16, wall_2 ] = Mesh_2.GetGroups()
Length_Near_Vertex_2 = CompositeSegment_1D.LengthNearVertex(0.01,strips)
[ Group_1_2, inlet_2, Group_3_2, outlet_2, Group_5_2, symetry0_2, Group_7_2, symetry1_2, Group_9, symetry2_2, Group_11, symetry3_2, Group_13, Group_14, strips_2, Group_16, wall_2 ] = Mesh_2.GetGroups()
status = Mesh_2.RemoveHypothesis(Length_Near_Vertex_2,strips)
status = Mesh_2.RemoveHypothesis(Number_of_Segments_3,strips)
Automatic_Length_2 = CompositeSegment_1D.AutomaticLength(0.633882)
status = Mesh_2.RemoveHypothesis(Length_From_Edges_3,strips)
Length_From_Edges_4 = NETGEN_2D_2.LengthFromEdges()
[ Group_1_2, inlet_2, Group_3_2, outlet_2, Group_5_2, symetry0_2, Group_7_2, symetry1_2, Group_9, symetry2_2, Group_11, symetry3_2, Group_13, Group_14, strips_2, Group_16, wall_2 ] = Mesh_2.GetGroups()
Automatic_Length_2.SetFineness( 1 )
[ Group_1_2, inlet_2, Group_3_2, outlet_2, Group_5_2, symetry0_2, Group_7_2, symetry1_2, Group_9, symetry2_2, Group_11, symetry3_2, Group_13, Group_14, strips_2, Group_16, wall_2 ] = Mesh_2.GetGroups()
status = Mesh_2.RemoveHypothesis(NETGEN_3D_Simple_Parameters_2)
NETGEN_3D_Parameters_1_1 = NETGEN_1D_2D_3D_1.Parameters()
NETGEN_3D_Parameters_1_1.SetMinSize( 0.00326849 )
NETGEN_3D_Parameters_1_1.SetSecondOrder( 0 )
NETGEN_3D_Parameters_1_1.SetOptimize( 1 )
NETGEN_3D_Parameters_1_1.SetUseSurfaceCurvature( 1 )
NETGEN_3D_Parameters_1_1.SetFuseEdges( 1 )
NETGEN_3D_Parameters_1_1.SetQuadAllowed( 0 )
[ Group_1_2, inlet_2, Group_3_2, outlet_2, Group_5_2, symetry0_2, Group_7_2, symetry1_2, Group_9, symetry2_2, Group_11, symetry3_2, Group_13, Group_14, strips_2, Group_16, wall_2 ] = Mesh_2.GetGroups()
NETGEN_3D_Parameters_1_1.SetFineness( 5 )
NETGEN_3D_Parameters_1_1.SetGrowthRate( 0.3 )
NETGEN_3D_Parameters_1_1.SetNbSegPerEdge( 1 )
NETGEN_3D_Parameters_1_1.SetNbSegPerRadius( 2 )
NETGEN_3D_Parameters_1_1.SetChordalErrorEnabled( 1 )
[ Group_1_2, inlet_2, Group_3_2, outlet_2, Group_5_2, symetry0_2, Group_7_2, symetry1_2, Group_9, symetry2_2, Group_11, symetry3_2, Group_13, Group_14, strips_2, Group_16, wall_2 ] = Mesh_2.GetGroups()
NETGEN_3D_Parameters_1_1.SetMaxSize( 0.2 )
NETGEN_3D_Parameters_1_1.SetChordalError( 0.1 )
NETGEN_3D_Parameters_1_1.SetCheckChartBoundary( 0 )
[ Group_1_2, inlet_2, Group_3_2, outlet_2, Group_5_2, symetry0_2, Group_7_2, symetry1_2, Group_9, symetry2_2, Group_11, symetry3_2, Group_13, Group_14, strips_2, Group_16, wall_2 ] = Mesh_2.GetGroups()
status = Mesh_2.RemoveHypothesis(NETGEN_1D_2D_3D)
Regular_1D_3 = Mesh_2.Segment()
Automatic_Length_3 = Regular_1D_3.AutomaticLength(1)
NETGEN_2D_3 = Mesh_2.Triangle(algo=smeshBuilder.NETGEN_2D)
Max_Element_Area_4 = NETGEN_2D_3.MaxElementArea(0.197375)
NETGEN_3D_1 = Mesh_2.Tetrahedron()
status = Mesh_2.RemoveHypothesis(NETGEN_3D_Parameters_1_1)
isDone = Mesh_2.Compute()
[ Group_1_2, inlet_2, Group_3_2, outlet_2, Group_5_2, symetry0_2, Group_7_2, symetry1_2, Group_9, symetry2_2, Group_11, symetry3_2, Group_13, Group_14, strips_2, Group_16, wall_2 ] = Mesh_2.GetGroups()
Mesh_3 = smesh.Mesh(simple_1)
status = Mesh_3.AddHypothesis(Automatic_Length_3)
Regular_1D_4 = Mesh_3.Segment()
status = Mesh_3.AddHypothesis(Max_Element_Area_4)
NETGEN_2D_4 = Mesh_3.Triangle(algo=smeshBuilder.NETGEN_2D)
NETGEN_3D_2 = Mesh_3.Tetrahedron()
#Group_1_3 = Mesh_3.GroupOnGeom(__NOT__Published__Object__,'',SMESH.FACE)
inlet_3 = Mesh_3.GroupOnGeom(inlet_1,'inlet',SMESH.FACE)
#Group_3_3 = Mesh_3.GroupOnGeom(__NOT__Published__Object__,'',SMESH.FACE)
outlet_3 = Mesh_3.GroupOnGeom(outlet_1,'outlet',SMESH.FACE)
#Group_5_3 = Mesh_3.GroupOnGeom(__NOT__Published__Object__,'',SMESH.FACE)
symetry0_3 = Mesh_3.GroupOnGeom(symetry0_1,'symetry0',SMESH.FACE)
#Group_7_3 = Mesh_3.GroupOnGeom(__NOT__Published__Object__,'',SMESH.FACE)
symetry1_3 = Mesh_3.GroupOnGeom(symetry1_1,'symetry1',SMESH.FACE)
#Group_9_1 = Mesh_3.GroupOnGeom(__NOT__Published__Object__,'',SMESH.FACE)
symetry2_3 = Mesh_3.GroupOnGeom(symetry2_1,'symetry2',SMESH.FACE)
#Group_11_1 = Mesh_3.GroupOnGeom(__NOT__Published__Object__,'',SMESH.FACE)
symetry3_3 = Mesh_3.GroupOnGeom(symetry3_1,'symetry3',SMESH.FACE)
#Group_13_1 = Mesh_3.GroupOnGeom(__NOT__Published__Object__,'',SMESH.FACE)
#Group_14_1 = Mesh_3.GroupOnGeom(__NOT__Published__Object__,'',SMESH.FACE)
strips_3 = Mesh_3.GroupOnGeom(strips_1,'strips',SMESH.FACE)
#Group_16_1 = Mesh_3.GroupOnGeom(__NOT__Published__Object__,'',SMESH.FACE)
wall_3 = Mesh_3.GroupOnGeom(wall_1,'wall',SMESH.FACE)
Regular_1D_5 = Mesh_3.Segment(geom=strips_1)
status = Mesh_3.AddHypothesis(Automatic_Length_2,strips_1)
NETGEN_2D_5 = Mesh_3.Triangle(algo=smeshBuilder.NETGEN_2D,geom=strips_1)
status = Mesh_3.AddHypothesis(Length_From_Edges_4,strips_1)
[ Group_1_3, inlet_3, Group_3_3, outlet_3, Group_5_3, symetry0_3, Group_7_3, symetry1_3, Group_9_1, symetry2_3, Group_11_1, symetry3_3, Group_13_1, Group_14_1, strips_3, Group_16_1, wall_3 ] = Mesh_3.GetGroups()
isDone = Mesh_3.Compute()
[ Group_1_3, inlet_3, Group_3_3, outlet_3, Group_5_3, symetry0_3, Group_7_3, symetry1_3, Group_9_1, symetry2_3, Group_11_1, symetry3_3, Group_13_1, Group_14_1, strips_3, Group_16_1, wall_3 ] = Mesh_3.GetGroups()
Sub_mesh_1 = CompositeSegment_1D.GetSubMesh()
Sub_mesh_2 = Regular_1D_5.GetSubMesh()
## Set names of Mesh objects
smesh.SetName(Automatic_Length_1, 'Automatic Length_1')
smesh.SetName(Length_From_Edges_2, 'Length From Edges_2')
smesh.SetName(Group_16, 'Group_16')
smesh.SetName(wall_2, 'wall')
smesh.SetName(NETGEN_3D_Simple_Parameters_1, 'NETGEN 3D Simple Parameters_1')
smesh.SetName(Group_14, 'Group_14')
smesh.SetName(NETGEN_3D_Simple_Parameters_2, 'NETGEN 3D Simple Parameters_2')
smesh.SetName(strips_2, 'strips')
smesh.SetName(Length_From_Edges_3, 'Length From Edges_3')
smesh.SetName(symetry3_2, 'symetry3')
smesh.SetName(Number_of_Segments_3, 'Number of Segments_3')
smesh.SetName(Group_13, 'Group_13')
smesh.SetName(symetry2_2, 'symetry2')
smesh.SetName(Length_Near_Vertex_2, 'Length Near Vertex_2')
smesh.SetName(Group_11, 'Group_11')
smesh.SetName(Length_From_Edges_4, 'Length From Edges_4')
smesh.SetName(NETGEN_3D_Parameters_1_1, 'NETGEN 3D Parameters_1')
smesh.SetName(Automatic_Length_2, 'Automatic Length_2')
smesh.SetName(Automatic_Length_3, 'Automatic Length_3')
smesh.SetName(Max_Element_Area_4, 'Max. Element Area_4')
smesh.SetName(Length_From_Edges_1, 'Length From Edges_1')
smesh.SetName(NETGEN_2D_Parameters_2, 'NETGEN 2D Parameters_2')
smesh.SetName(NETGEN_3D_Parameters_1, 'NETGEN 3D Parameters_1')
smesh.SetName(Max_Element_Area_1, 'Max. Element Area_1')
smesh.SetName(Max_Element_Area_3, 'Max. Element Area_3')
smesh.SetName(Deflection_1, 'Deflection_1')
smesh.SetName(Max_Element_Area_2, 'Max. Element Area_2')
smesh.SetName(Max_Size_1, 'Max Size_1')
smesh.SetName(NETGEN_3D_Parameters_2, 'NETGEN 3D Parameters_2')
smesh.SetName(NETGEN_2D_Parameters_1_1, 'NETGEN 2D Parameters_1')
smesh.SetName(NETGEN_2D_Parameters_1, 'NETGEN 2D Parameters_1')
smesh.SetName(Number_of_Segments_1, 'Number of Segments_1')
smesh.SetName(Gmsh_Parameters, 'Gmsh Parameters')
smesh.SetName(Renumber_1, 'Renumber_1')
smesh.SetName(Number_of_Segments_2, 'Number of Segments_2')
smesh.SetName(Quadrangle_Parameters_1, 'Quadrangle Parameters_1')
smesh.SetName(Length_Near_Vertex_1, 'Length Near Vertex_1')
smesh.SetName(MG_Tetra_Parameters_1, 'MG-Tetra Parameters_1')
smesh.SetName(Mesh_1.GetMesh(), 'Mesh_1')
smesh.SetName(Mesh_3.GetMesh(), 'Mesh_3')
smesh.SetName(Mesh_2.GetMesh(), 'Mesh_2')
smesh.SetName(symetry1_3, 'symetry1')
smesh.SetName(Group_9_1, 'Group_9')
smesh.SetName(symetry0_3, 'symetry0')
smesh.SetName(Group_7_3, 'Group_7')
smesh.SetName(outlet_3, 'outlet')
smesh.SetName(Group_5_3, 'Group_5')
smesh.SetName(inlet_3, 'inlet')
smesh.SetName(Group_3_3, 'Group_3')
smesh.SetName(Group_1_3, 'Group_1')
smesh.SetName(MEFISTO_2D.GetAlgorithm(), 'MEFISTO_2D')
smesh.SetName(MG_Tetra.GetAlgorithm(), 'MG-Tetra')
smesh.SetName(Group_9, 'Group_9')
smesh.SetName(NETGEN_3D.GetAlgorithm(), 'NETGEN 3D')
smesh.SetName(symetry1_2, 'symetry1')
smesh.SetName(NETGEN_2D.GetAlgorithm(), 'NETGEN 2D')
smesh.SetName(Group_7_2, 'Group_7')
smesh.SetName(NETGEN_1D_2D_3D.GetAlgorithm(), 'NETGEN 1D-2D-3D')
smesh.SetName(symetry0_2, 'symetry0')
smesh.SetName(CompositeSegment_1D.GetAlgorithm(), 'CompositeSegment_1D')
smesh.SetName(Group_5_2, 'Group_5')
smesh.SetName(outlet_2, 'outlet')
smesh.SetName(Group_3_2, 'Group_3')
smesh.SetName(inlet_2, 'inlet')
smesh.SetName(GMSH.GetAlgorithm(), 'GMSH')
smesh.SetName(Group_1_2, 'Group_1')
smesh.SetName(NETGEN_1D_2D.GetAlgorithm(), 'NETGEN 1D-2D')
smesh.SetName(PolyhedronPerSolid_3D.GetAlgorithm(), 'PolyhedronPerSolid_3D')
smesh.SetName(UseExisting_1D.GetAlgorithm(), 'UseExisting_1D')
smesh.SetName(Prism_3D.GetAlgorithm(), 'Prism_3D')
smesh.SetName(Hexa_3D.GetAlgorithm(), 'Hexa_3D')
smesh.SetName(Regular_1D.GetAlgorithm(), 'Regular_1D')
smesh.SetName(SegmentAroundVertex_0D, 'SegmentAroundVertex_0D')
smesh.SetName(Quadrangle_2D.GetAlgorithm(), 'Quadrangle_2D')
smesh.SetName(Sub_mesh_1, 'Sub-mesh_1')
smesh.SetName(wall_3, 'wall')
smesh.SetName(Group_16_1, 'Group_16')
smesh.SetName(strips_3, 'strips')
smesh.SetName(Group_14_1, 'Group_14')
smesh.SetName(Group_13_1, 'Group_13')
smesh.SetName(Group_1_1, 'Group_1')
smesh.SetName(symetry3_3, 'symetry3')
smesh.SetName(Group_2_1, 'Group_2')
smesh.SetName(Group_11_1, 'Group_11')
smesh.SetName(Group_3_1, 'Group_3')
smesh.SetName(symetry2_3, 'symetry2')
smesh.SetName(Group_4_1, 'Group_4')
smesh.SetName(Group_5_1, 'Group_5')
smesh.SetName(Group_6_1, 'Group_6')
smesh.SetName(Group_7_1, 'Group_7')
smesh.SetName(Sub_mesh_2, 'Sub-mesh_2')
if salome.sg.hasDesktop():
salome.sg.updateObjBrowser()

View File

@ -1,87 +0,0 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from peewee import (
SqliteDatabase, JOIN,
Model, Field,
AutoField, ForeignKeyField,
TextField, FloatField,
IntegerField, BooleanField,
TimeField
)
db = SqliteDatabase("test_db.db", pragmas = { "foreign_keys" : 1, "journal_mode": "wal" })
class ListField(Field):
field_type = "list"
def db_value(self, value):
return str(value)
def python_value(self, value):
pval = []
for entry in value[1 : -1].split(","):
try:
pval.append(float(entry))
except:
pval.append(entry.strip().replace("'", ""))
return pval
class Structure(Model):
structure_id = AutoField()
type = TextField()
direction = ListField()
theta = FloatField()
r0 = FloatField(null = True)
L = FloatField(null = True)
radius = FloatField(null = True)
filletsEnabled = BooleanField(null = True)
fillets = FloatField(null = True)
#path = TextField()
class Meta:
database = db
db_table = "structures"
class Mesh(Model):
mesh_id = AutoField()
structure_id = ForeignKeyField(Structure, backref = "meshes")
maxSize = FloatField(null = True)
minSize = FloatField(null = True)
fineness = IntegerField(null = True)
growthRate = FloatField(null = True)
nbSegPerEdge = FloatField(null = True)
nbSegPerRadius = FloatField(null = True)
chordalErrorEnabled = BooleanField(null = True)
chordalError = FloatField(null = True)
secondOrder = BooleanField(null = True)
optimize = BooleanField(null = True)
quadAllowed = BooleanField(null = True)
useSurfaceCurvature = BooleanField(null = True)
fuseEdges = BooleanField(null = True)
checkChartBoundary = BooleanField(null = True)
viscousLayers = BooleanField(null = True)
thickness = FloatField(null = True)
numberOfLayers = IntegerField(null = True)
stretchFactor = FloatField(null = True)
isFacesToIgnore = BooleanField(null = True)
facesToIgnore = ListField(null = True)
#faces = []
extrusionMethod = TextField(null = True)
class Meta:
database = db
db_table = "meshes"
depends_on = Structure

View File

@ -1,31 +0,0 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from salome.smesh import smeshBuilder
smesh = smeshBuilder.New()
ALGOS = [
smeshBuilder.NETGEN_1D2D3D,
smeshBuilder.NETGEN_3D, smeshBuilder.NETGEN_1D2D,
smeshBuilder.NETGEN_2D,
smeshBuilder.MEFISTO, # only 2d
smeshBuilder.REGULAR, smeshBuilder.COMPOSITE
]
mesh = smesh.Mesh(SHAPE)
algo = mesh.Tetrahedron(algo = ALGO)
###
# fc 111 0.12 N3D N2D(0.1, 0.0001, Mod)
# 3min 321k
###
# fc 100
# theta max min fineness gr.rate perEdge perRadius choralErr
# 0.01 0.1 0.001 custom 0.3 3 5 0.05
# 0.12 0.1 0.001 moderate 0.3 1 2 0.05
#
# fc 111
# 0.12 0.1 0.001 moderate 0.3 1 2 0.05

File diff suppressed because one or more lines are too long

View File

@ -1,23 +0,0 @@
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{amssymb}
\begin{document}
\begin{tikzpicture}
\draw[semithick] (0, 0) circle (1);
\draw[semithick] (2, 0) circle (1);
\draw[semithick] (1, 1.73205) circle (1);
\draw[dashed,color=gray] (0,0) arc (-90:90:0.5 and 1.5);% right half of the left ellipse
\draw[semithick] (0,0) -- (4,1);% bottom line
\draw[semithick] (0,3) -- (4,2);% top line
\draw[semithick] (0,0) arc (270:90:0.5 and 1.5);% left half of the left ellipse
\draw[semithick] (4,1.5) ellipse (0.166 and 0.5);% right ellipse
\draw (-1,1.5) node {$\varnothing d_1$};
\draw (3.3,1.5) node {$\varnothing d_2$};
\draw[|-,semithick] (0,-0.5) -- (4,-0.5);
\draw[|->,semithick] (4,-0.5) -- (4.5,-0.5);
\draw (0,-1) node {$x=0$};
\draw (4,-1) node {$x=l$};
\end{tikzpicture}
\end{document}

View File

@ -1,281 +0,0 @@
# -*- coding: utf-8 -*-
# This file is part of anisotropy.
# License: GNU GPL version 3, see the file "LICENSE" for details.
[logger]
name = "anisotropy"
format = "[ %(levelname)s ] %(message)s"
[base]
simple = true
bodyCentered = true
faceCentered = true
[[structures]]
[structures.structure]
type = "simple"
# auto # from theta: list # theta: float
theta = [0.01, 0.28, 0.01] # [min, max, step]
# auto # from directions:list # direction: list
directions = [
[1, 0, 0],
[0, 0, 1],
[1, 1, 1]
]
# r0 =
# L =
# radius =
filletsEnabled = true
# auto # fillets: float
[structures.mesh]
maxSize = 0.5
minSize = 0.05
fineness = 5
growthRate = 0.5
nbSegPerEdge = 2
nbSegPerRadius = 1
chordalErrorEnabled = true
chordalError = 0.25
secondOrder = false
optimize = true
quadAllowed = false
useSurfaceCurvature = true
fuseEdges = true
checkChartBoundary = false
viscousLayers = true
thickness = [0.01, 0.005] # [min, max] # step is controlled by theta count
numberOfLayers = 1
stretchFactor = 1
isFacesToIgnore = true
facesToIgnore = ["inlet", "outlet"]
# auto # faces: list
extrusionMethod = "SURF_OFFSET_SMOOTH"
[[structures.submesh]]
name = "strips"
maxSize = 0.5
minSize = 0.05
fineness = 5
growthRate = 0.2
nbSegPerEdge = 2
nbSegPerRadius = 3
chordalErrorEnabled = true
chordalError = 0.25
secondOrder = false
optimize = true
quadAllowed = false
useSurfaceCurvature = true
fuseEdges = true
checkChartBoundary = false
[structures.flowapproximation]
transportProperties.nu = 1e-6
pressure.boundaryField.inlet = { type = "fixedValue", value = 1e-3 }
pressure.boundaryField.outlet = { type = "fixedValue", value = 0.0 }
# multiplication velocity value with flow direction vector
velocity.boundaryField.inlet = { type = "fixedValue", value = 6e-5 }
velocity.boundaryField.outlet = { type = "zeroGradient", value = "None" }
[structures.flow]
scale = [ 1e-5, 1e-5, 1e-5 ]
transportProperties.nu = 1e-6
pressure.boundaryField.inlet = { type = "fixedValue", value = 1e-3 }
pressure.boundaryField.outlet = { type = "fixedValue", value = 0.0 }
velocity.boundaryField.inlet = { type = "pressureInletVelocity", value = 0.0 }
velocity.boundaryField.outlet = { type = "zeroGradient", value = "None" }
[[structures]]
[structures.structure]
type = "bodyCentered"
# auto # from theta: list # theta: float
theta = [0.01, 0.17, 0.01] # [min, max, step]
# auto # from directions:list # direction: list
directions = [
[1, 0, 0],
[0, 0, 1],
[1, 1, 1]
]
# r0 =
# L =
# radius =
filletsEnabled = true
# auto # fillets: float
[structures.mesh]
maxSize = 0.5
minSize = 0.05
fineness = 5
growthRate = 0.5
nbSegPerEdge = 2
nbSegPerRadius = 1
chordalErrorEnabled = true
chordalError = 0.25
secondOrder = false
optimize = true
quadAllowed = false
useSurfaceCurvature = true
fuseEdges = true
checkChartBoundary = false
viscousLayers = true
thickness = [0.005, 0.0005] # [min, max] # step is controlled by theta count
numberOfLayers = 1
stretchFactor = 1
isFacesToIgnore = true
facesToIgnore = ["inlet", "outlet"]
# auto # faces: list
extrusionMethod = "SURF_OFFSET_SMOOTH"
[[structures.submesh]]
name = "strips"
maxSize = 0.5
minSize = 0.05
fineness = 5
growthRate = 0.2
nbSegPerEdge = 2
nbSegPerRadius = 3
chordalErrorEnabled = true
chordalError = 0.25
secondOrder = false
optimize = true
quadAllowed = false
useSurfaceCurvature = true
fuseEdges = true
checkChartBoundary = false
[structures.flowapproximation]
transportProperties.nu = 1e-6
pressure.boundaryField.inlet = { type = "fixedValue", value = 1e-3 }
pressure.boundaryField.outlet = { type = "fixedValue", value = 0.0 }
# multiplication velocity value with direction vector
velocity.boundaryField.inlet = { type = "fixedValue", value = 6e-5 }
velocity.boundaryField.outlet = { type = "zeroGradient", value = "None" }
[structures.flow]
scale = [ 1e-5, 1e-5, 1e-5 ]
transportProperties.nu = 1e-6
pressure.boundaryField.inlet = { type = "fixedValue", value = 1e-3 }
pressure.boundaryField.outlet = { type = "fixedValue", value = 0.0 }
velocity.boundaryField.inlet = { type = "pressureInletVelocity", value = 0.0 }
velocity.boundaryField.outlet = { type = "zeroGradient", value = "None" }
[[structures]]
[structures.structure]
type = "faceCentered"
# auto # from theta: list # theta: float
theta = [0.01, 0.12, 0.01] # [min, max, step]
# auto # from directions:list # direction: list
directions = [
[1, 0, 0],
[0, 0, 1],
[1, 1, 1]
]
# r0 =
# L =
# radius =
filletsEnabled = true
# auto # fillets: float
[structures.mesh]
maxSize = 0.5
minSize = 0.05
fineness = 5
growthRate = 0.5
nbSegPerEdge = 2
nbSegPerRadius = 1
chordalErrorEnabled = true
chordalError = 0.25
secondOrder = false
optimize = true
quadAllowed = false
useSurfaceCurvature = true
fuseEdges = true
checkChartBoundary = false
viscousLayers = true
thickness = [0.001, 0.0005] # [min, max] # step is controlled by theta count
numberOfLayers = 1
stretchFactor = 1
isFacesToIgnore = true
facesToIgnore = ["inlet", "outlet"]
# auto # faces: list
extrusionMethod = "SURF_OFFSET_SMOOTH"
[[structures.submesh]]
name = "strips"
maxSize = 0.5
minSize = 0.05
fineness = 5
growthRate = 0.2
nbSegPerEdge = 2
nbSegPerRadius = 3
chordalErrorEnabled = true
chordalError = 0.25
secondOrder = false
optimize = true
quadAllowed = false
useSurfaceCurvature = true
fuseEdges = true
checkChartBoundary = false
[structures.flowapproximation]
transportProperties.nu = 1e-6
pressure.boundaryField.inlet = { type = "fixedValue", value = 1e-3 }
pressure.boundaryField.outlet = { type = "fixedValue", value = 0.0 }
# multiplication velocity value with direction vector
velocity.boundaryField.inlet = { type = "fixedValue", value = 6e-5 }
velocity.boundaryField.outlet = { type = "zeroGradient", value = "None" }
[structures.flow]
scale = [ 1e-5, 1e-5, 1e-5 ]
transportProperties.nu = 1e-6
pressure.boundaryField.inlet = { type = "fixedValue", value = 1e-3 }
pressure.boundaryField.outlet = { type = "fixedValue", value = 0.0 }
velocity.boundaryField.inlet = { type = "pressureInletVelocity", value = 0.0 }
velocity.boundaryField.outlet = { type = "zeroGradient", value = "None" }

View File

@ -1 +0,0 @@
18221

View File

@ -1,281 +0,0 @@
# -*- coding: utf-8 -*-
# This file is part of anisotropy.
# License: GNU GPL version 3, see the file "LICENSE" for details.
[logger]
name = "anisotropy"
format = "[ %(levelname)s ] %(message)s"
[base]
simple = true
bodyCentered = true
faceCentered = true
[[structures]]
[structures.structure]
type = "simple"
# auto # from theta: list # theta: float
theta = [0.01, 0.28, 0.01] # [min, max, step]
# auto # from directions:list # direction: list
directions = [
[1, 0, 0],
[0, 0, 1],
[1, 1, 1]
]
# r0 =
# L =
# radius =
filletsEnabled = true
# auto # fillets: float
[structures.mesh]
maxSize = 0.5
minSize = 0.05
fineness = 5
growthRate = 0.5
nbSegPerEdge = 2
nbSegPerRadius = 1
chordalErrorEnabled = true
chordalError = 0.25
secondOrder = false
optimize = true
quadAllowed = false
useSurfaceCurvature = true
fuseEdges = true
checkChartBoundary = false
viscousLayers = false
thickness = [0.01, 0.005] # [min, max] # step is controlled by theta count
numberOfLayers = 1
stretchFactor = 1
isFacesToIgnore = true
facesToIgnore = ["inlet", "outlet"]
# auto # faces: list
extrusionMethod = "SURF_OFFSET_SMOOTH"
[[structures.submesh]]
name = "strips"
maxSize = 0.5
minSize = 0.05
fineness = 5
growthRate = 0.2
nbSegPerEdge = 2
nbSegPerRadius = 3
chordalErrorEnabled = true
chordalError = 0.25
secondOrder = false
optimize = true
quadAllowed = false
useSurfaceCurvature = true
fuseEdges = true
checkChartBoundary = false
[structures.flowapproximation]
transportProperties.nu = 1e-6
pressure.boundaryField.inlet = { type = "fixedValue", value = 1e-3 }
pressure.boundaryField.outlet = { type = "fixedValue", value = 0.0 }
# multiplication velocity value with flow direction vector
velocity.boundaryField.inlet = { type = "fixedValue", value = 6e-5 }
velocity.boundaryField.outlet = { type = "zeroGradient", value = "None" }
[structures.flow]
scale = [ 1e-5, 1e-5, 1e-5 ]
transportProperties.nu = 1e-6
pressure.boundaryField.inlet = { type = "fixedValue", value = 1e-3 }
pressure.boundaryField.outlet = { type = "fixedValue", value = 0.0 }
velocity.boundaryField.inlet = { type = "pressureInletVelocity", value = 0.0 }
velocity.boundaryField.outlet = { type = "zeroGradient", value = "None" }
[[structures]]
[structures.structure]
type = "bodyCentered"
# auto # from theta: list # theta: float
theta = [0.01, 0.17, 0.01] # [min, max, step]
# auto # from directions:list # direction: list
directions = [
[1, 0, 0],
[0, 0, 1],
[1, 1, 1]
]
# r0 =
# L =
# radius =
filletsEnabled = true
# auto # fillets: float
[structures.mesh]
maxSize = 0.5
minSize = 0.05
fineness = 5
growthRate = 0.5
nbSegPerEdge = 2
nbSegPerRadius = 1
chordalErrorEnabled = true
chordalError = 0.25
secondOrder = false
optimize = true
quadAllowed = false
useSurfaceCurvature = true
fuseEdges = true
checkChartBoundary = false
viscousLayers = false
thickness = [0.005, 0.0005] # [min, max] # step is controlled by theta count
numberOfLayers = 1
stretchFactor = 1
isFacesToIgnore = true
facesToIgnore = ["inlet", "outlet"]
# auto # faces: list
extrusionMethod = "SURF_OFFSET_SMOOTH"
[[structures.submesh]]
name = "strips"
maxSize = 0.5
minSize = 0.05
fineness = 5
growthRate = 0.2
nbSegPerEdge = 2
nbSegPerRadius = 3
chordalErrorEnabled = true
chordalError = 0.25
secondOrder = false
optimize = true
quadAllowed = false
useSurfaceCurvature = true
fuseEdges = true
checkChartBoundary = false
[structures.flowapproximation]
transportProperties.nu = 1e-6
pressure.boundaryField.inlet = { type = "fixedValue", value = 1e-3 }
pressure.boundaryField.outlet = { type = "fixedValue", value = 0.0 }
# multiplication velocity value with direction vector
velocity.boundaryField.inlet = { type = "fixedValue", value = 6e-5 }
velocity.boundaryField.outlet = { type = "zeroGradient", value = "None" }
[structures.flow]
scale = [ 1e-5, 1e-5, 1e-5 ]
transportProperties.nu = 1e-6
pressure.boundaryField.inlet = { type = "fixedValue", value = 1e-3 }
pressure.boundaryField.outlet = { type = "fixedValue", value = 0.0 }
velocity.boundaryField.inlet = { type = "pressureInletVelocity", value = 0.0 }
velocity.boundaryField.outlet = { type = "zeroGradient", value = "None" }
[[structures]]
[structures.structure]
type = "faceCentered"
# auto # from theta: list # theta: float
theta = [0.01, 0.12, 0.01] # [min, max, step]
# auto # from directions:list # direction: list
directions = [
[1, 0, 0],
[0, 0, 1],
[1, 1, 1]
]
# r0 =
# L =
# radius =
filletsEnabled = true
# auto # fillets: float
[structures.mesh]
maxSize = 0.5
minSize = 0.05
fineness = 5
growthRate = 0.5
nbSegPerEdge = 2
nbSegPerRadius = 1
chordalErrorEnabled = true
chordalError = 0.25
secondOrder = false
optimize = true
quadAllowed = false
useSurfaceCurvature = true
fuseEdges = true
checkChartBoundary = false
viscousLayers = false
thickness = [0.001, 0.0005] # [min, max] # step is controlled by theta count
numberOfLayers = 1
stretchFactor = 1
isFacesToIgnore = true
facesToIgnore = ["inlet", "outlet"]
# auto # faces: list
extrusionMethod = "SURF_OFFSET_SMOOTH"
[[structures.submesh]]
name = "strips"
maxSize = 0.5
minSize = 0.05
fineness = 5
growthRate = 0.2
nbSegPerEdge = 2
nbSegPerRadius = 3
chordalErrorEnabled = true
chordalError = 0.25
secondOrder = false
optimize = true
quadAllowed = false
useSurfaceCurvature = true
fuseEdges = true
checkChartBoundary = false
[structures.flowapproximation]
transportProperties.nu = 1e-6
pressure.boundaryField.inlet = { type = "fixedValue", value = 1e-3 }
pressure.boundaryField.outlet = { type = "fixedValue", value = 0.0 }
# multiplication velocity value with direction vector
velocity.boundaryField.inlet = { type = "fixedValue", value = 6e-5 }
velocity.boundaryField.outlet = { type = "zeroGradient", value = "None" }
[structures.flow]
scale = [ 1e-5, 1e-5, 1e-5 ]
transportProperties.nu = 1e-6
pressure.boundaryField.inlet = { type = "fixedValue", value = 1e-3 }
pressure.boundaryField.outlet = { type = "fixedValue", value = 0.0 }
velocity.boundaryField.inlet = { type = "pressureInletVelocity", value = 0.0 }
velocity.boundaryField.outlet = { type = "zeroGradient", value = "None" }

View File

@ -1,281 +0,0 @@
# -*- coding: utf-8 -*-
# This file is part of anisotropy.
# License: GNU GPL version 3, see the file "LICENSE" for details.
[logger]
name = "anisotropy"
format = "[ %(levelname)s ] %(message)s"
[base]
simple = true
bodyCentered = true
faceCentered = true
[[structures]]
[structures.structure]
type = "simple"
# auto # from theta: list # theta: float
theta = [0.01, 0.28, 0.01] # [min, max, step]
# auto # from directions:list # direction: list
directions = [
[1, 0, 0],
[0, 0, 1],
[1, 1, 1]
]
# r0 =
# L =
# radius =
filletsEnabled = true
# auto # fillets: float
[structures.mesh]
maxSize = 0.5
minSize = 0.05
fineness = 5
growthRate = 0.5
nbSegPerEdge = 2
nbSegPerRadius = 1
chordalErrorEnabled = true
chordalError = 0.25
secondOrder = false
optimize = true
quadAllowed = false
useSurfaceCurvature = true
fuseEdges = true
checkChartBoundary = false
viscousLayers = false
thickness = [0.01, 0.005] # [min, max] # step is controlled by theta count
numberOfLayers = 1
stretchFactor = 1
isFacesToIgnore = true
facesToIgnore = ["inlet", "outlet"]
# auto # faces: list
extrusionMethod = "SURF_OFFSET_SMOOTH"
[[structures.submesh]]
name = "strips"
maxSize = 0.5
minSize = 0.05
fineness = 5
growthRate = 0.2
nbSegPerEdge = 2
nbSegPerRadius = 3
chordalErrorEnabled = true
chordalError = 0.25
secondOrder = false
optimize = true
quadAllowed = false
useSurfaceCurvature = true
fuseEdges = true
checkChartBoundary = false
[structures.flowapproximation]
transportProperties.nu = 1e-6
pressure.boundaryField.inlet = { type = "fixedValue", value = 1e-3 }
pressure.boundaryField.outlet = { type = "fixedValue", value = 0.0 }
# multiplication velocity value with flow direction vector
velocity.boundaryField.inlet = { type = "fixedValue", value = 6e-5 }
velocity.boundaryField.outlet = { type = "zeroGradient", value = "None" }
[structures.flow]
scale = [ 1e-5, 1e-5, 1e-5 ]
transportProperties.nu = 1e-6
pressure.boundaryField.inlet = { type = "fixedValue", value = 1e-3 }
pressure.boundaryField.outlet = { type = "fixedValue", value = 0.0 }
velocity.boundaryField.inlet = { type = "pressureInletVelocity", value = 0.0 }
velocity.boundaryField.outlet = { type = "zeroGradient", value = "None" }
[[structures]]
[structures.structure]
type = "bodyCentered"
# auto # from theta: list # theta: float
theta = [0.01, 0.17, 0.01] # [min, max, step]
# auto # from directions:list # direction: list
directions = [
[1, 0, 0],
[0, 0, 1],
[1, 1, 1]
]
# r0 =
# L =
# radius =
filletsEnabled = true
# auto # fillets: float
[structures.mesh]
maxSize = 0.5
minSize = 0.05
fineness = 5
growthRate = 0.5
nbSegPerEdge = 2
nbSegPerRadius = 1
chordalErrorEnabled = true
chordalError = 0.25
secondOrder = false
optimize = true
quadAllowed = false
useSurfaceCurvature = true
fuseEdges = true
checkChartBoundary = false
viscousLayers = false
thickness = [0.005, 0.0005] # [min, max] # step is controlled by theta count
numberOfLayers = 1
stretchFactor = 1
isFacesToIgnore = true
facesToIgnore = ["inlet", "outlet"]
# auto # faces: list
extrusionMethod = "SURF_OFFSET_SMOOTH"
[[structures.submesh]]
name = "strips"
maxSize = 0.5
minSize = 0.05
fineness = 5
growthRate = 0.2
nbSegPerEdge = 2
nbSegPerRadius = 3
chordalErrorEnabled = true
chordalError = 0.25
secondOrder = false
optimize = true
quadAllowed = false
useSurfaceCurvature = true
fuseEdges = true
checkChartBoundary = false
[structures.flowapproximation]
transportProperties.nu = 1e-6
pressure.boundaryField.inlet = { type = "fixedValue", value = 1e-3 }
pressure.boundaryField.outlet = { type = "fixedValue", value = 0.0 }
# multiplication velocity value with direction vector
velocity.boundaryField.inlet = { type = "fixedValue", value = 6e-5 }
velocity.boundaryField.outlet = { type = "zeroGradient", value = "None" }
[structures.flow]
scale = [ 1e-5, 1e-5, 1e-5 ]
transportProperties.nu = 1e-6
pressure.boundaryField.inlet = { type = "fixedValue", value = 1e-3 }
pressure.boundaryField.outlet = { type = "fixedValue", value = 0.0 }
velocity.boundaryField.inlet = { type = "pressureInletVelocity", value = 0.0 }
velocity.boundaryField.outlet = { type = "zeroGradient", value = "None" }
[[structures]]
[structures.structure]
type = "faceCentered"
# auto # from theta: list # theta: float
theta = [0.01, 0.12, 0.01] # [min, max, step]
# auto # from directions:list # direction: list
directions = [
[1, 0, 0],
[0, 0, 1],
[1, 1, 1]
]
# r0 =
# L =
# radius =
filletsEnabled = true
# auto # fillets: float
[structures.mesh]
maxSize = 0.5
minSize = 0.05
fineness = 5
growthRate = 0.5
nbSegPerEdge = 2
nbSegPerRadius = 1
chordalErrorEnabled = true
chordalError = 0.25
secondOrder = false
optimize = true
quadAllowed = false
useSurfaceCurvature = true
fuseEdges = true
checkChartBoundary = false
viscousLayers = false
thickness = [0.001, 0.0005] # [min, max] # step is controlled by theta count
numberOfLayers = 1
stretchFactor = 1
isFacesToIgnore = true
facesToIgnore = ["inlet", "outlet"]
# auto # faces: list
extrusionMethod = "SURF_OFFSET_SMOOTH"
[[structures.submesh]]
name = "strips"
maxSize = 0.5
minSize = 0.05
fineness = 5
growthRate = 0.2
nbSegPerEdge = 2
nbSegPerRadius = 3
chordalErrorEnabled = true
chordalError = 0.25
secondOrder = false
optimize = true
quadAllowed = false
useSurfaceCurvature = true
fuseEdges = true
checkChartBoundary = false
[structures.flowapproximation]
transportProperties.nu = 1e-6
pressure.boundaryField.inlet = { type = "fixedValue", value = 1e-3 }
pressure.boundaryField.outlet = { type = "fixedValue", value = 0.0 }
# multiplication velocity value with direction vector
velocity.boundaryField.inlet = { type = "fixedValue", value = 6e-5 }
velocity.boundaryField.outlet = { type = "zeroGradient", value = "None" }
[structures.flow]
scale = [ 1e-5, 1e-5, 1e-5 ]
transportProperties.nu = 1e-6
pressure.boundaryField.inlet = { type = "fixedValue", value = 1e-3 }
pressure.boundaryField.outlet = { type = "fixedValue", value = 0.0 }
velocity.boundaryField.inlet = { type = "pressureInletVelocity", value = 0.0 }
velocity.boundaryField.outlet = { type = "zeroGradient", value = "None" }

View File

@ -23,7 +23,7 @@ include = ["doc"]
exclude = ["doc/source", "doc/Makefile"]
[tool.poetry.scripts]
anisotropy = "anisotropy.core.cli:anisotropy"
anisotropy = "anisotropy.cli:anisotropy_cli"
[tool.poetry.dependencies]
python = ">=3.9,<3.11"