from abaqus import *
import os
os.chdir('D:\\SeekSook\\Data\\bridge-data\\output\\runs\\job_no_submit\\0377feb0b6e1')

from abaqusConstants import *

import regionToolset

import mesh



modelName = 'DoubleCantileverBeam'

jobName = 'DoubleCantileverBeamJob'



if modelName in mdb.models.keys():

    del mdb.models[modelName]



model = mdb.Model(name=modelName)



L = 120.0

W = 20.0

H = 6.0

gap = 2.0

meshSize = 4.0

tipDisp = 5.0



E = 210000.0

nu = 0.30



sketch = model.ConstrainedSketch(name='BeamProfile', sheetSize=300.0)

sketch.rectangle(point1=(0.0, 0.0), point2=(L, H))



beamPart = model.Part(

    name='Beam',

    dimensionality=THREE_D,

    type=DEFORMABLE_BODY

)

beamPart.BaseSolidExtrude(sketch=sketch, depth=W)

del model.sketches['BeamProfile']



material = model.Material(name='Steel')

material.Elastic(table=((E, nu),))



section = model.HomogeneousSolidSection(

    name='BeamSection',

    material='Steel',

    thickness=None

)



allCells = beamPart.cells.getByBoundingBox(

    xMin=-1.0,

    yMin=-1.0,

    zMin=-1.0,

    xMax=L + 1.0,

    yMax=H + 1.0,

    zMax=W + 1.0

)



beamPart.Set(name='AllCells', cells=allCells)



beamPart.SectionAssignment(

    region=beamPart.sets['AllCells'],

    sectionName='BeamSection'

)



beamPart.seedPart(

    size=meshSize,

    deviationFactor=0.1,

    minSizeFactor=0.1

)



elemType1 = mesh.ElemType(

    elemCode=C3D8R,

    elemLibrary=STANDARD,

    kinematicSplit=AVERAGE_STRAIN,

    secondOrderAccuracy=OFF,

    hourglassControl=DEFAULT,

    distortionControl=DEFAULT

)



elemType2 = mesh.ElemType(

    elemCode=C3D6,

    elemLibrary=STANDARD

)



elemType3 = mesh.ElemType(

    elemCode=C3D4,

    elemLibrary=STANDARD

)



beamPart.setElementType(

    regions=(beamPart.cells,),

    elemTypes=(elemType1, elemType2, elemType3)

)



beamPart.generateMesh()



assembly = model.rootAssembly

assembly.DatumCsysByDefault(CARTESIAN)



upperInst = assembly.Instance(

    name='UpperBeam',

    part=beamPart,

    dependent=ON

)



lowerInst = assembly.Instance(

    name='LowerBeam',

    part=beamPart,

    dependent=ON

)



assembly.translate(

    instanceList=('UpperBeam',),

    vector=(0.0, gap / 2.0, 0.0)

)



assembly.translate(

    instanceList=('LowerBeam',),

    vector=(0.0, -H - gap / 2.0, 0.0)

)



upperFixedFaces = upperInst.faces.getByBoundingBox(

    xMin=-0.01,

    yMin=gap / 2.0 - 0.01,

    zMin=-0.01,

    xMax=0.01,

    yMax=gap / 2.0 + H + 0.01,

    zMax=W + 0.01

)



lowerFixedFaces = lowerInst.faces.getByBoundingBox(

    xMin=-0.01,

    yMin=-H - gap / 2.0 - 0.01,

    zMin=-0.01,

    xMax=0.01,

    yMax=-gap / 2.0 + 0.01,

    zMax=W + 0.01

)



upperTipFaces = upperInst.faces.getByBoundingBox(

    xMin=L - 0.01,

    yMin=gap / 2.0 - 0.01,

    zMin=-0.01,

    xMax=L + 0.01,

    yMax=gap / 2.0 + H + 0.01,

    zMax=W + 0.01

)



lowerTipFaces = lowerInst.faces.getByBoundingBox(

    xMin=L - 0.01,

    yMin=-H - gap / 2.0 - 0.01,

    zMin=-0.01,

    xMax=L + 0.01,

    yMax=-gap / 2.0 + 0.01,

    zMax=W + 0.01

)



assembly.Set(

    name='UpperFixed',

    faces=upperFixedFaces

)



assembly.Set(

    name='LowerFixed',

    faces=lowerFixedFaces

)



assembly.Set(

    name='UpperTip',

    faces=upperTipFaces

)



assembly.Set(

    name='LowerTip',

    faces=lowerTipFaces

)



model.StaticStep(

    name='BendingStep',

    previous='Initial',

    nlgeom=ON,

    initialInc=0.02,

    minInc=1.0e-06,

    maxInc=0.05,

    maxNumInc=1000

)



model.EncastreBC(

    name='BC-UpperFixed',

    createStepName='Initial',

    region=assembly.sets['UpperFixed']

)



model.EncastreBC(

    name='BC-LowerFixed',

    createStepName='Initial',

    region=assembly.sets['LowerFixed']

)



model.DisplacementBC(

    name='BC-UpperTip',

    createStepName='BendingStep',

    region=assembly.sets['UpperTip'],

    u1=UNSET,

    u2=tipDisp,

    u3=UNSET,

    ur1=UNSET,

    ur2=UNSET,

    ur3=UNSET,

    amplitude=UNSET,

    fixed=OFF,

    distributionType=UNIFORM

)



model.DisplacementBC(

    name='BC-LowerTip',

    createStepName='BendingStep',

    region=assembly.sets['LowerTip'],

    u1=UNSET,

    u2=-tipDisp,

    u3=UNSET,

    ur1=UNSET,

    ur2=UNSET,

    ur3=UNSET,

    amplitude=UNSET,

    fixed=OFF,

    distributionType=UNIFORM

)



model.fieldOutputRequests['F-Output-1'].setValues(

    variables=('S', 'E', 'LE', 'U', 'RF')

)



model.HistoryOutputRequest(

    name='H-UpperTip',

    createStepName='BendingStep',

    variables=('U2', 'RF2'),

    region=assembly.sets['UpperTip'],

    sectionPoints=DEFAULT,

    rebar=EXCLUDE

)



model.HistoryOutputRequest(

    name='H-LowerTip',

    createStepName='BendingStep',

    variables=('U2', 'RF2'),

    region=assembly.sets['LowerTip'],

    sectionPoints=DEFAULT,

    rebar=EXCLUDE

)



assembly.regenerate()



job = mdb.Job(

    name=jobName,

    model=modelName,

    description='Double cantilever beam bending analysis',

    type=ANALYSIS,

    memory=90,

    memoryUnits=PERCENTAGE,

    explicitPrecision=SINGLE,

    nodalOutputPrecision=SINGLE,

    echoPrint=OFF,

    modelPrint=OFF,

    contactPrint=OFF,

    historyPrint=OFF,

    numCpus=4,

    numDomains=4

)



job.writeInput()

# SEEKOOK_CAE_SAVE
mdb.saveAs(pathName='D:\\SeekSook\\Data\\bridge-data\\output\\runs\\job_no_submit\\0377feb0b6e1\\abaqus_model.cae')
