Mod: clean up

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

View File

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

View File

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

View File

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

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

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

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

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

View File

@ -1,8 +1,17 @@
# -*- coding: utf-8 -*- # -*- 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 .parallel import ParallelRunner
from .runner import UltimateRunner from .runner import UltimateRunner
from .postProcess import PostProcess
__all__ = [
"utils",
"config",
"postprocess",
"ParallelRunner",
"UltimateRunner"
]

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,11 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# This file is part of anisotropy.
# License: GNU GPL version 3, see the file "LICENSE" for details.
import logging import logging
import copy
import time import time
from types import FunctionType
import contextlib import contextlib
@ -76,128 +72,6 @@ def setupLogger(level: int, filepath: str = None):
logging.root.addHandler(filehandler) 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): class Timer(object):
def __init__(self): def __init__(self):
self.update() self.update()
@ -216,7 +90,7 @@ class ErrorHandler(contextlib.AbstractContextManager):
self.traceback = None self.traceback = None
def __enter__(self): def __enter__(self):
return self, self.handler return self, self.handle
def __exit__(self, exc_type, exc_value, traceback): def __exit__(self, exc_type, exc_value, traceback):
if exc_type: if exc_type:

View File

@ -1,8 +1,7 @@
# -*- coding: utf-8 -*- # -*- 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__": if __name__ == "__main__":
app.run_server(debug = True) app.run_server(debug = True)

View File

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

View File

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

View File

@ -1,12 +1,7 @@
# -*- coding: utf-8 -*- # -*- 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 html
from dash import dcc
import dash_bootstrap_components as dbc
from .styles import *
import anisotropy import anisotropy

View File

@ -1,6 +1,4 @@
# -*- coding: utf-8 -*- # -*- 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.dash_table import DataTable
from dash import html from dash import html
@ -10,8 +8,8 @@ from dash.dependencies import Input, Output, State
import os import os
from .app import app from ..app import app
from .styles import * from ..styles import *
### ###

View File

@ -1,6 +1,4 @@
# -*- coding: utf-8 -*- # -*- 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 html
from dash import dcc from dash import dcc
@ -14,8 +12,8 @@ from . import (
visualization, visualization,
about about
) )
from .app import app from ..app import app
from .styles import * from ..styles import *
import anisotropy import anisotropy
### ###

View File

@ -1,6 +1,4 @@
# -*- coding: utf-8 -*- # -*- 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.dash_table import DataTable
from dash import html from dash import html
@ -10,9 +8,9 @@ from dash.dependencies import Input, Output, State
import os import os
from .app import app from ..app import app
from .styles import * from ..styles import *
from .utils import getSize from ..utils import getSize
### ###

View File

@ -1,6 +1,4 @@
# -*- coding: utf-8 -*- # -*- 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 html
from dash import dcc from dash import dcc
@ -8,8 +6,8 @@ import dash_bootstrap_components as dbc
from dash.dependencies import Input, Output, State from dash.dependencies import Input, Output, State
import os import os
from .app import app from ..app import app
from .styles import * from ..styles import *
### ###

View File

@ -1,6 +1,4 @@
# -*- coding: utf-8 -*- # -*- 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.dash_table import DataTable
from dash import html from dash import html
@ -12,8 +10,8 @@ import dash_vtk.utils
import vtk import vtk
import os import os
from .app import app from ..app import app
from . import styles from .. import styles
class MeshRepresentation(object): class MeshRepresentation(object):

View File

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

View File

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

View File

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

View File

@ -1,6 +1,4 @@
# -*- coding: utf-8 -*- # -*- 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.presets as F
import anisotropy.openfoam.runnerPresets as R import anisotropy.openfoam.runnerPresets as R

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

View File

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

Before

Width:  |  Height:  |  Size: 29 KiB

View File

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

Before

Width:  |  Height:  |  Size: 20 KiB

View File

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

View File

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

View File

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

View File

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

View File

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

Binary file not shown.

Binary file not shown.

View File

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

View File

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

Binary file not shown.

View File

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

View File

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

View File

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

View File

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

File diff suppressed because one or more lines are too long

View File

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

View File

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

View File

@ -1 +0,0 @@
18221

View File

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

View File

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

View File

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