Mod: clean up
Mod: cli is standalone submodule now Mod: gui layouts collected together Mod: pyproject cli entry
This commit is contained in:
parent
12ee8ab0b0
commit
34313205d6
14
ISSUES.rst
14
ISSUES.rst
@ -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.
|
@ -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
|
||||
|
||||
|
15
anisotropy/cli/__init__.py
Normal file
15
anisotropy/cli/__init__.py
Normal 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
173
anisotropy/cli/cli.py
Normal 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
74
anisotropy/cli/utils.py
Normal 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)
|
@ -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"
|
||||
]
|
||||
|
@ -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()
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -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]
|
||||
|
@ -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()
|
||||
|
||||
|
||||
|
||||
|
@ -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:
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
)
|
||||
)
|
||||
|
1
anisotropy/gui/layouts/__init__.py
Normal file
1
anisotropy/gui/layouts/__init__.py
Normal file
@ -0,0 +1 @@
|
||||
# -*- coding: utf-8 -*-
|
@ -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
|
||||
|
||||
|
@ -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 *
|
||||
|
||||
|
||||
###
|
@ -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
|
||||
|
||||
###
|
@ -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
|
||||
|
||||
|
||||
###
|
@ -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 *
|
||||
|
||||
|
||||
###
|
@ -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):
|
@ -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",
|
||||
|
@ -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"]:
|
||||
|
@ -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
|
||||
|
@ -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 |
@ -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 |
@ -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 |
@ -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}
|
@ -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
|
||||
}
|
@ -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];
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -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
|
@ -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.
@ -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()
|
@ -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.
@ -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()
|
@ -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()
|
@ -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
|
@ -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
@ -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}
|
Binary file not shown.
@ -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" }
|
||||
|
||||
|
||||
|
Binary file not shown.
@ -1 +0,0 @@
|
||||
18221
|
@ -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.
@ -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" }
|
||||
|
||||
|
||||
|
@ -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"
|
||||
|
Loading…
Reference in New Issue
Block a user