# -*- coding: mbcs -*-
from math import *
from sys import *
from abaqus import *
from abaqusConstants import *
from caeModules import *
import re, platform
def buildFor(Q=3000.0,factor1=1.0,source_a1=1.9,source_b1=3.2,
source_c1=2.8,source_a2=1.9, weldingV=4.0,
source_x0=0.0,source_y0=4.0,source_z0=0.0):
tempName='dual_ellipse_plate.template'
forName='dual_ellipse_Welding.for'
f1=open(tempName,'r')
f2=open(forName,'w')
for line in f1.readlines():
ss=line.strip()
ss0=re.split('=',ss)
ss1=re.split('=',line)
if ss0[0]=='q':
sstemp=ss1[0]+'='+str(Q)+'\n'
f2.writelines(sstemp)
elif ss0[0]=='f1':
sstemp=ss1[0]+'='+str(factor1)+'\n'
f2.writelines(sstemp)
elif ss0[0]=='a':
sstemp=ss1[0]+'='+str(source_a1)+'\n'
f2.writelines(sstemp)
elif ss0[0]=='b':
sstemp=ss1[0]+'='+str(source_b1)+'\n'
f2.writelines(sstemp)
elif ss0[0]=='c':
sstemp=ss1[0]+'='+str(source_c1)+'\n'
f2.writelines(sstemp)
elif ss0[0]=='aa':
sstemp=ss1[0]+'='+str(source_a2)+'\n'
f2.writelines(sstemp)
elif ss0[0]=='x0':
sstemp=ss1[0]+'='+str(source_x0)+'\n'
f2.writelines(sstemp)
elif ss0[0]=='y0':
sstemp=ss1[0]+'='+str(source_y0)+'\n'
f2.writelines(sstemp)
elif ss0[0]=='z0':
sstemp=ss1[0]+'='+str(source_z0)+'\n'
f2.writelines(sstemp)
elif ss0[0]=='v':
sstemp=ss1[0]+'='+str(weldingV)+'\n'
f2.writelines(sstemp)
else:
f2.writelines(line)
f1.close()
f2.close()
return forName
##========================================================
Temp0 = [0.0, 200.0, 400.0, 600.0, 800.0, 1000.0, 1200.0, 1400.0]#[oC]
fa = lambda T: 450+0.28*T-2.91e-4*T**2+1.34e-7*T**3#[J/kg/K]
Cp = [fa(item)*1.0e6 for item in Temp0]#[mJ/ton/K]
lma = lambda T:14.6+1.27e-2*T#[W/m/K]
Cd = [lma(item) for item in Temp0]#[mW/mm/K]
dens=((7.86e-9, ), )
specificheat=(zip(Cp, Temp0))
conductivity=(zip(Cd, Temp0))
L_p=100.0#mm
d_p=8.0#mm
w_p=50.0#mm
a_f=2.0#mm
theta=75.0
R_f=d_p*4.0#mm
partNum=50
timeoutputRelease=60.0
numoutputRelease=10
absZero=-273.15
boltZmann=5.67E-09#mW/mm2/K4
globalSize=8
upNum=4
dnNum=4
tkNum=8
myfilmCoeff=0.5#mW/mm2/oC
mysinkTemperature=20.0
myambientTemperature=20.0
myemissivity=0.4
initialTemp=20.0
weldingV=1.5#mm/s
s_Q=2000000.0#mW
s_a1=7.0#mm
s_b1=8.0#mm
s_c1=4.0#mm
s_a2=12.0#mm
s_x0=0.0#mm
s_y0=d_p/2.0#mm
s_z0=-4.0#mm
moveTime=L_p/partNum/weldingV
b_f=a_f+2.0*d_p/tan(theta/180.0*pi)
fc_y=d_p/2.0-sqrt(R_f**2-(b_f/2.0)**2)
weldModel = Mdb().models['Model-1']
#**********************Part definition********************************
sLef = weldModel.ConstrainedSketch(name='leftPlate', sheetSize=200.0)
sLef.Line(point1=(-w_p, d_p/2.0), point2=(-b_f/2.0, d_p/2.0))
sLef.Line(point1=(-b_f/2.0, d_p/2.0), point2=(-a_f/2.0, -d_p/2.0))
sLef.Line(point1=(-a_f/2.0, -d_p/2.0), point2=(-w_p, -d_p/2.0))
sLef.Line(point1=(-w_p, -d_p/2.0), point2=(-w_p, d_p/2.0))
pLef = weldModel.Part(name='PartLeft', dimensionality=THREE_D,
type=DEFORMABLE_BODY)
pLef.BaseSolidExtrude(sketch=sLef, depth=L_p)
sRig = weldModel.ConstrainedSketch(name='RightPlate', sheetSize=200.0)
sRig.Line(point1=(b_f/2.0, d_p/2.0), point2=(w_p, d_p/2.0))
sRig.Line(point1=(w_p, d_p/2.0), point2=(w_p, -d_p/2.0))
sRig.Line(point1=(w_p, -d_p/2.0), point2=(a_f/2.0, -d_p/2.0))
sRig.Line(point1=(a_f/2.0, -d_p/2.0), point2=(b_f/2.0, d_p/2.0))
pRig = weldModel.Part(name='PartRight', dimensionality=THREE_D,
type=DEFORMABLE_BODY)
pRig.BaseSolidExtrude(sketch=sRig, depth=L_p)
sFil = weldModel.ConstrainedSketch(name='Filler', sheetSize=200.0)
sFil.Line(point1=(-b_f/2.0, d_p/2.0), point2=(-a_f/2.0, -d_p/2.0))
sFil.Line(point1=(-a_f/2.0, -d_p/2.0), point2=(a_f/2.0, -d_p/2.0))
sFil.Line(point1=(a_f/2.0, -d_p/2.0), point2=(b_f/2.0, d_p/2.0))
sFil.ArcByCenterEnds(center=(0.0, fc_y), point1=(-b_f/2.0, d_p/2.0),
point2=(b_f/2.0, d_p/2.0),direction=CLOCKWISE)
pFil = weldModel.Part(name='PartFiller', dimensionality=THREE_D,
type=DEFORMABLE_BODY)
pFil.BaseSolidExtrude(sketch=sFil, depth=L_p)
pFil = weldModel.parts['PartFiller']
#************************materials definition**************************
weldMat = weldModel.Material(name='mat')
weldMat.Density(table=dens)
weldMat.SpecificHeat(temperatureDependency=ON, table=specificheat)
weldMat.Conductivity(temperatureDependency=ON, table=conductivity)
weldModel.HomogeneousSolidSection(name='weld', material='mat')
set = pLef.Set(name = 'Lef', cells=pLef.cells)
pLef.SectionAssignment(region=set, sectionName='weld')
set = pRig.Set(name = 'Lef', cells=pRig.cells)
pRig.SectionAssignment(region=set, sectionName='weld')
set = pFil.Set(name = 'Lef', cells=pFil.cells)
pFil.SectionAssignment(region=set, sectionName='weld')
#************************Assembly ************************************
root = weldModel.rootAssembly
inst1 = root.Instance(name='PartFiller', part=pLef, dependent=ON)
inst2 = root.Instance(name='PartLeft', part=pRig, dependent=ON)
inst3 = root.Instance(name='PartRight', part=pFil, dependent=ON)
root.InstanceFromBooleanMerge(name='WeldingPart', instances=((inst1,
inst2, inst3)), keepIntersections=ON, originalInstances=SUPPRESS,
domain=GEOMETRY)
#******************heat transfer boundary****************************
pWeld = weldModel.parts['WeldingPart']
datumYZ=pWeld.DatumPlaneByPrincipalPlane(principalPlane=YZPLANE,
offset=0.0)
xpart1=(-w_p-b_f/2.0)/2.0
xpart2=0.0
xpart3=(w_p+b_f/2.0)/2.0
for ii in range(partNum-1):
zpart=L_p/partNum*(ii+1.0)
ypart=0.0
dp1=pWeld.DatumPointByCoordinate((0,-d_p,zpart))
dp2=pWeld.DatumPointByCoordinate((-w_p,d_p,zpart))
dp3=pWeld.DatumPointByCoordinate((w_p,d_p,zpart))
dats=pWeld.datums
dplane=pWeld.DatumPlaneByThreePoints(point1=dats[dp1.id],
point2=dats[dp2.id], point3=dats[dp3.id])
c4Part=pWeld.cells.findAt(((xpart1, ypart, zpart),),
((xpart2, ypart, zpart),), ((xpart3, ypart, zpart),),)
pWeld.PartitionCellByDatumPlane(cells=c4Part,
datumPlane=dats[dplane.id])
pkCells = pWeld.cells.getByBoundingBox(xMin=xpart1,xMax=xpart3,
yMin=-d_p,yMax=2.0*d_p,zMin=-L_p,zMax=2.0*L_p)
dats = pWeld.datums
pWeld.PartitionCellByDatumPlane(datumPlane=dats[datumYZ.id],
cells=pkCells)
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
face_p1_Yup=[]
face_p1_Ydn=[]
face_p2_Yup=[]
face_p2_Ydn=[]
face_p3_Yup=[]
face_p3_Ydn=[]
face_p4_Yup=[]
face_p4_Ydn=[]
face_p1_XY=[]
face_p2_XY=[]
face_p3_XY=[]
face_p4_XY=[]
face_bead_front_p2=[]
face_bead_front_p3=[]
face_bead_begin=[]
cell_p2=[]
cell_p3=[]
cell_bead=[]
faceZ=[]
edgeZ=[]
R_semi_filler=fc_y+R_f*cos(asin(b_f/2.0/R_f)/2.0)
xface_out_filler2=-R_f*sin(asin(b_f/2.0/R_f)/2.0)
xface_out_filler3=R_f*sin(asin(b_f/2.0/R_f)/2.0)
xcell_c1=(-w_p-b_f/2.0)/2.0
xcell_c2=-a_f/4.0
xcell_c3=a_f/4.0
xcell_c4=(w_p+b_f/2.0)/2.0
xface_c1=-w_p
xface_c2=-1.0*(a_f+b_f)/4.0
xface_c4=w_p
xface_c3=(a_f+b_f)/4.0
yface_up=d_p/2.0
yface_dn=-d_p/2.0
yface_fillerup=R_semi_filler
ycell=0.0
root = weldModel.rootAssembly
iWeld = root.instances['WeldingPart-1']
selectC=iWeld.cells
selectF=iWeld.faces
for jj in range(partNum):
zCell=L_p/partNum*(jj+0.5)
zFace=L_p/partNum*(jj+1.0)
#Determine coord for selecting corresponding entities.
face_p1_Yup.append(selectF.findAt(((xcell_c1,yface_up,zCell),)))
face_p1_Ydn.append(selectF.findAt(((xcell_c1,yface_dn,zCell),)))
face_p2_Yup.append(selectF.findAt(((xface_out_filler2,
yface_fillerup,zCell),)))
face_p2_Ydn.append(selectF.findAt(((xcell_c2,yface_dn,zCell)