# -*- codeing = utf-8 -*-
# @Time : 2023/3/4 8:37
# @Author : Seachy
# @File : randomfiber.py
# @Software : PyCharm
# -*- codeing = utf-8 -*-
# @Time : 2023/3/1 13:40
# @Author : Seachy
# @File : xianwei.py
# @Software : PyCharm
from abaqus import *
from abaqusConstants import *
import random
import math
def duanxian(Vf, L, W, H, r, lmin, lmax):
def interact_judgement(points, line, diameter, long):
c = line[0]
d = line[1]
num = 10
sign = True
for point in points:
a = point[0]
b = point[1]
distance1 = math.sqrt((c[0] - a[0]) ** 2 + (c[1] - a[1]) ** 2 + (c[2] - a[2]) ** 2)
if distance1 < 2 * long:
for i in range(num + 1):
mx = c[0] + (d[0] - c[0]) * i * (1. / num)
my = c[1] + (d[1] - c[1]) * i * (1. / num)
mz = c[2] + (d[2] - c[2]) * i * (1. / num)
for j in range(num + 1):
nx = a[0] + (b[0] - a[0]) * j * (1. / num)
ny = a[1] + (b[1] - a[1]) * j * (1. / num)
nz = a[2] + (b[2] - a[2]) * j * (1. / num)
distance2 = math.sqrt((mx - nx) ** 2 + (my - ny) ** 2 + (mz - nz) ** 2)
if distance2 <= diameter:
sign = False
break
if not sign:
break
if not sign:
break
return sign
points = []
Normal_vectors = []
sketche_points = []
angle_zs = []
beginpoints = []
point_num = 0
vf = 0
V = L*W*H
while vf < Vf:
x = random.uniform(0, L)
y = random.uniform(0, W)
z = random.uniform(0, H)
length = random.uniform(lmin, lmax)
angle_x = random.uniform(0, 360)
angle_z = random.uniform(0, 90)
u = length * math.cos( math.radians(angle_x))
v = length * math.sin(math.radians(angle_x))
x1 = x + u * math.cos(math.radians(angle_z))
y1 = y + v * math.cos(math.radians(angle_z))
z1 = z + length * math.sin(math.radians(angle_z))
if 0 < x1 < L and 0 < x < L:
if 0 < y1 < W and 0 < y < W:
if 0 < z1 < H and 0 < z < H:
beginpoint = (x, y, z)
endpoint = (x1, y1, z1)
sketche_point = (u, v)
normal = (v, -u, 0)
point = (beginpoint, endpoint)
vdf = math.pi*(r**2)*length
if len(points) == 0:
points.append(point)
sketche_points.append(sketche_point)
Normal_vectors.append(normal)
angle_zs.append(angle_z)
beginpoints.append(beginpoint)
point_num = point_num + 1
vf = vdf / V
elif interact_judgement(points, point, 2 * r, lmax):
points.append(point)
sketche_points.append(sketche_point)
Normal_vectors.append(normal)
angle_zs.append(angle_z)
beginpoints.append(beginpoint)
point_num = point_num + 1
vf = vdf / V + vf
else:
pass
point2s = sketche_points
vectors = beginpoints
axisdirections = Normal_vectors
angles = angle_zs
mdb.models['Model-1'].ConstrainedSketch(name='__profile__', sheetSize=200.0)
mdb.models['Model-1'].sketches['__profile__'].rectangle(point1=(0.0, 0.0), point2=(L, W))
mdb.models['Model-1'].Part(dimensionality=THREE_D, name='matrix', type=DEFORMABLE_BODY)
mdb.models['Model-1'].parts['matrix'].BaseSolidExtrude(depth=H,
sketch=mdb.models['Model-1'].sketches['__profile__'])
del mdb.models['Model-1'].sketches['__profile__']
for i in range(point_num):
part = 'part-{0}'.format(i)
part1 = 'part-{0}-1'.format(i+1)
mdb.models['Model-1'].ConstrainedSketch(name='__profile__', sheetSize=200.0)
mdb.models['Model-1'].sketches['__profile__'].Line(point1=(0.0, 0.0), point2=point2s[i])
mdb.models['Model-1'].Part(dimensionality=THREE_D, name=part, type=DEFORMABLE_BODY)
mdb.models['Model-1'].parts[part].BaseWire(sketch=mdb.models['Model-1'].sketches['__profile__'])
del mdb.models['Model-1'].sketches['__profile__']
mdb.models['Model-1'].rootAssembly.DatumCsysByDefault(CARTESIAN)
mdb.models['Model-1'].rootAssembly.Instance(dependent=ON, name=part1,
part=mdb.models['Model-1'].parts[part])
mdb.models['Model-1'].rootAssembly.rotate(angle=angles[i], axisDirection=axisdirections[i],
axisPoint=(0.0, 0.0, 0.0),
instanceList=(part1,))
mdb.models['Model-1'].rootAssembly.translate(instanceList=(part1,), vector=vectors[i])
mdb.models['Model-1'].rootAssembly.DatumCsysByDefault(CARTESIAN)
mdb.models['Model-1'].rootAssembly.Instance(dependent=ON, name='part-0-1',
part=mdb.models['Model-1'].parts['matrix'])