anisotropy/samples/__init__.py

126 lines
3.7 KiB
Python
Raw Normal View History

from collections import namedtuple
import os, sys
import logging
2021-03-30 22:14:47 +05:00
from pyquaternion import Quaternion
2021-03-24 21:27:12 +05:00
ROOT = "/home/nafaryus/projects/anisotrope-cube"
sys.path.append(ROOT)
LOG = os.path.join(ROOT, "logs")
2021-03-24 21:27:12 +05:00
import salome
from simpleCubic import simpleCubic
from faceCenteredCubic import faceCenteredCubic
from bodyCenteredCubic import bodyCenteredCubic
from src import geometry_utils
from src import mesh_utils
2021-03-24 21:27:12 +05:00
def genMesh(stype, theta, flowdirection, saveto):
_G = globals()
structure = _G.get(stype)
if structure:
salome.salome_init()
2021-03-30 14:49:06 +05:00
#grains, cubic, rhombohedron = structure(theta)
#fd = namedtuple("fd", ["x", "y", "z"])
grains, geometry1, geometry2 = structure(theta)
geometry = geometry1
2021-03-24 21:27:12 +05:00
if flowdirection == [1, 1, 1]:
2021-03-30 14:49:06 +05:00
geometry = geometry2
norm = [-1, -1, 1]
bcount = 6
2021-03-30 22:14:47 +05:00
# initial angle
angle = math.pi / 6
2021-03-31 23:11:29 +05:00
#vec = Quaternion(0, norm[0], norm[1], norm[2])
#ax = Quaternion(
# math.cos(angle * 0.5),
# math.sin(angle * 0.5) * flowdirection[0],
# math.sin(angle * 0.5) * flowdirection[1],
# math.sin(angle * 0.5) * flowdirection[2])
#qvec = (ax * vec * ax.inverse).vector
#normvec = [qvec[0], qvec[1], qvec[2]]
normvec = Quaternion(axis = flowdirection, angle = angle).rotate(norm)
direction = [1, 1, 1]
2021-03-30 14:49:06 +05:00
#direction = fd([1, 1, 1], [1, -1, 1], [1, -1, -1])
2021-03-24 21:27:12 +05:00
2021-03-30 14:49:06 +05:00
#else:
# geometry = cubic
2021-03-24 21:27:12 +05:00
if flowdirection == [1, 0, 0]:
2021-03-31 23:11:29 +05:00
normvec = [0, 0, 1]
2021-03-30 14:49:06 +05:00
bcount = 4
2021-03-31 23:11:29 +05:00
direction = [1, 1, 0]
2021-03-30 14:49:06 +05:00
#direction = fd([1, 1, 0], [1, -1, 0], [0, 0, 1])
2021-03-24 21:27:12 +05:00
if flowdirection == [0, 0, 1]:
2021-03-31 23:11:29 +05:00
normvec = [1, 1, 0]
2021-03-30 14:49:06 +05:00
bcount = 4
2021-03-31 23:11:29 +05:00
direction = [0, 0, 1]
2021-03-30 14:49:06 +05:00
#direction = fd([0, 0, 1], [1, -1, 0], [1, 1, 0])
2021-03-24 21:27:12 +05:00
2021-03-30 14:49:06 +05:00
#boundary = geometry_utils.boundaryCreate(geometry, direction, grains)
2021-03-31 23:11:29 +05:00
boundary = geometry_utils.createBoundary(geometry, bcount, direction, normvec, grains)
2021-03-24 21:27:12 +05:00
fineness = 3
mesh = mesh_utils.meshCreate(geometry, boundary, fineness)
mesh_utils.meshCompute(mesh)
#path = os.path.join(saveto,
# stype,
# "theta-%s" % theta,
# "direction-{}{}{}".format(flowdirection[0], flowdirection[1], flowdirection[2]))
2021-03-24 21:27:12 +05:00
#if not os.path.exists(path):
# logging.info("Creating directory: {}".format(path))
# os.makedirs(path)
2021-03-24 21:27:12 +05:00
mesh_utils.meshExport(mesh, saveto) # os.path.join(path, "mesh.unv"))
2021-03-24 21:27:12 +05:00
salome.salome_close()
else:
raise Exception("Unknown sample function")
if __name__ == "__main__":
logging.basicConfig(
level=logging.INFO,
format="%(levelname)s: %(message)s",
handlers = [
logging.StreamHandler(),
logging.FileHandler("{}/cubic.log".format(LOG))
])
fancyline = "--------------------------------------------------------------------------------"
logging.info(fancyline)
stype = str(sys.argv[1])
theta = float(sys.argv[2])
#ignore = "[], "
flowdirection = [int(coord) for coord in sys.argv[3]]
#for sym in str(sys.argv[3]):
# if sym not in list(ignore):
# flowdirection.append(int(sym))
saveto = str(sys.argv[4])
logging.info("""Args:
structure type:\t{}
coefficient:\t{}
flow direction:\t{}
export path:\t{}\n""".format(stype, theta, flowdirection, saveto))
#print(flowdirection)
genMesh(stype, theta, flowdirection, saveto)
logging.info(fancyline)