""" Abaqus Example Manual script to create the model and the optimization attributes for the sizing optimization of a door. The script is run using File -> Run Script in Abaqus/CAE. In order to successfully run door_sizing_optimization.py the user must have door.inp in the working directory. """ from abaqus import * from abaqusConstants import * import regionToolset #Define the current viewport # curViewportName=session.currentViewportName curViewport=session.viewports[curViewportName] #Import of the model input file # try: mdb.ModelFromInputFile(name='door', inputFileName='door.inp') except: msg = "The input file (door.inp) was not found in the working directory." raise ValueError, msg model=mdb.models['door'] #create a new sizing optimization task a = mdb.models['door'].rootAssembly ##a.SetByBoolean(name='E_DESIGN_AREA', sets=(a.allInstances['PART-1-1'].sets['P30001'], ## a.allInstances['PART-1-1'].sets['P30002'], ## a.allInstances['PART-1-1'].sets['P30003'], ## a.allInstances['PART-1-1'].sets['P30004'], ## a.allInstances['PART-1-1'].sets['P30006'], ## a.allInstances['PART-1-1'].sets['P30011'], ## a.allInstances['PART-1-1'].sets['P30012'], ## a.allInstances['PART-1-1'].sets['P30013'], ## a.allInstances['PART-1-1'].sets['P30019'], ## a.allInstances['PART-1-1'].sets['P30020'], ## a.allInstances['PART-1-1'].sets['P30021'], ## a.allInstances['PART-1-1'].sets['P30022'], ## a.allInstances['PART-1-1'].sets['P30023'], ## a.allInstances['PART-1-1'].sets['P30024'], ## a.allInstances['PART-1-1'].sets['P30025'], ## a.allInstances['PART-1-1'].sets['P30026'], ## a.allInstances['PART-1-1'].sets['P30027'], ## a.allInstances['PART-1-1'].sets['P30028'], ## a.allInstances['PART-1-1'].sets['P30029'], ## a.allInstances['PART-1-1'].sets['P30030'], ## a.allInstances['PART-1-1'].sets['P30031'], ## a.allInstances['PART-1-1'].sets['P30032'], ## a.allInstances['PART-1-1'].sets['P30034'], ## a.allInstances['PART-1-1'].sets['P30035'], ## a.allInstances['PART-1-1'].sets['P30036'], ## a.allInstances['PART-1-1'].sets['P30037'], ## a.allInstances['PART-1-1'].sets['P30038'], )) ##a.SetByBoolean(name='E_FROZEN_HINGE', sets=(a.allInstances['PART-1-1'].sets['P30001'], ## a.allInstances['PART-1-1'].sets['P30002'], ## a.allInstances['PART-1-1'].sets['P30003'], ## a.allInstances['PART-1-1'].sets['P30004'], )) ## ##a.SetByBoolean(name='E_FROZEN_OUTSIDE', sets=(a.allInstances['PART-1-1'].sets['P30011'], ## a.allInstances['PART-1-1'].sets['P30012'], ## a.allInstances['PART-1-1'].sets['P30019'], )) #E_FROZEN_WINDOW ['PART-1-1'].sets['P30037'] ## )) region=a.sets['E_DESIGN_AREA'] mdb.models['door'].SizingTask(name='door-sizing-optimization', region=region, freezeLoadRegions=OFF) region=a.sets['E_DESIGN_AREA'] #weight design response mdb.models['door'].optimizationTasks['door-sizing-optimization'].SingleTermDesignResponse( name='weight', region=region, identifier='WEIGHT', drivingRegion=None, operation=SUM, stepOptions=()) #frequency design response mdb.models['door'].optimizationTasks['door-sizing-optimization'].SingleTermDesignResponse( name='eigenfrequency-1', region=MODEL, identifier='DYN_FREQ', drivingRegion=None, operation=NONE, stepOptions=(( 'eigenfrequency', '', 1, 1, 'door'), )) #node set for displacement design response region1=a.sets['DOOR_LOCK'] #z displacement of the node set mdb.models['door'].optimizationTasks['door-sizing-optimization'].SingleTermDesignResponse( name='z-displacement-step-2', region=region1, identifier='DISP_Z_ABS', drivingRegion=None, operation=MAXIMUM, stepOptions=(( 'sag', '', ALL, ALL, 'door'), )) #objective function minmax mdb.models['door'].optimizationTasks['door-sizing-optimization'].ObjectiveFunction( name='min-weight', objectives=((OFF, 'weight', 1.0, 0.0, ''), )) #constraint eigen frequency mdb.models['door'].optimizationTasks['door-sizing-optimization'].OptimizationConstraint( name='eigenfrequency-constraint', designResponse='eigenfrequency-1', restrictionMethod=ABSOLUTE_GREATER_THAN_EQUAL, restrictionValue=35.0) #constraint z displacement mdb.models['door'].optimizationTasks['door-sizing-optimization'].OptimizationConstraint( name='displacement-constraint', designResponse='z-displacement-step-2', restrictionMethod=ABSOLUTE_LESS_THAN_EQUAL, restrictionValue=1.42) #frozen hinge region=a.sets['E_FROZEN_HINGE'] mdb.models['door'].optimizationTasks['door-sizing-optimization'].SizingFrozenArea( name='frozen-hinge', region=region) #frozen outside region=a.sets['E_FROZEN_OUTSIDE'] mdb.models['door'].optimizationTasks['door-sizing-optimization'].SizingFrozenArea( name='frozen-outside', region=region) #frozen window #region=a.allInstances['PART-1-1'].sets['P30037'] region=a.allInstances['PART-1-1'].sets['PART-1-1_P30037'] mdb.models['door'].optimizationTasks['door-sizing-optimization'].SizingFrozenArea( name='frozen-window', region=region) #thickness bounds region=a.sets['E_DESIGN_AREA'] mdb.models['door'].optimizationTasks['door-sizing-optimization'].SizingThickControl( name='thickness-restriction', region=region, thicknessRestrictionBy=VALUE, minThickness=0.5, maxThickness=2.5) #geometric restriction clustering r0=a.allInstances['PART-1-1'].sets['PART-1-1_P30001'] r1=a.allInstances['PART-1-1'].sets['PART-1-1_P30002'] r2=a.allInstances['PART-1-1'].sets['PART-1-1_P30003'] r3=a.allInstances['PART-1-1'].sets['PART-1-1_P30004'] r4=a.allInstances['PART-1-1'].sets['PART-1-1_P30006'] r5=a.allInstances['PART-1-1'].sets['PART-1-1_P30008'] r6=a.allInstances['PART-1-1'].sets['PART-1-1_P30009'] r7=a.allInstances['PART-1-1'].sets['PART-1-1_P30010'] r8=a.allInstances['PART-1-1'].sets['PART-1-1_P30011'] r9=a.allInstances['PART-1-1'].sets['PART-1-1_P30012'] r10=a.allInstances['PART-1-1'].sets['PART-1-1_P30013'] r11=a.allInstances['PART-1-1'].sets['PART-1-1_P30014'] r12=a.allInstances['PART-1-1'].sets['PART-1-1_P30015'] r13=a.allInstances['PART-1-1'].sets['PART-1-1_P30018'] r14=a.allInstances['PART-1-1'].sets['PART-1-1_P30019'] r15=a.allInstances['PART-1-1'].sets['PART-1-1_P30020'] r16=a.allInstances['PART-1-1'].sets['PART-1-1_P30021'] r17=a.allInstances['PART-1-1'].sets['PART-1-1_P30022'] r18=a.allInstances['PART-1-1'].sets['PART-1-1_P30023'] r19=a.allInstances['PART-1-1'].sets['PART-1-1_P30024'] r20=a.allInstances['PART-1-1'].sets['PART-1-1_P30025'] r21=a.allInstances['PART-1-1'].sets['PART-1-1_P30026'] r22=a.allInstances['PART-1-1'].sets['PART-1-1_P30027'] r23=a.allInstances['PART-1-1'].sets['PART-1-1_P30028'] r24=a.allInstances['PART-1-1'].sets['PART-1-1_P30029'] r25=a.allInstances['PART-1-1'].sets['PART-1-1_P30030'] r26=a.allInstances['PART-1-1'].sets['PART-1-1_P30031'] r27=a.allInstances['PART-1-1'].sets['PART-1-1_P30032'] r28=a.allInstances['PART-1-1'].sets['PART-1-1_P30034'] r29=a.allInstances['PART-1-1'].sets['PART-1-1_P30035'] r30=a.allInstances['PART-1-1'].sets['PART-1-1_P30036'] r31=a.allInstances['PART-1-1'].sets['PART-1-1_P30037'] r32=a.allInstances['PART-1-1'].sets['PART-1-1_P30038'] mdb.models['door'].optimizationTasks['door-sizing-optimization'].SizingClusterAreas( name='clustering-restriction', regions=(r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, r20, r21, r22, r23, r24, r25, r26, r27, r28, r29, r30, r31, r32)) ###create optimization process mdb.OptimizationProcess(name='door-sizing-optimization-w-clustering', model='door', task='door-sizing-optimization', description='', prototypeJob='door-sizing-optimization-w-clustering-Job', maxDesignCycle=15, odbMergeFrequency=2, dataSaveFrequency=OPT_DATASAVE_SPECIFY_CYCLE) mdb.optimizationProcesses['door-sizing-optimization-w-clustering'].Job(name='door-sizing-optimization-w-clustering-Job', model='door', atTime=None, waitMinutes=0, waitHours=0, queue=None, memory=90, memoryUnits=PERCENTAGE, getMemoryFromAnalysis=True, multiprocessingMode=DEFAULT, numCpus=1, numGPUs=0) mdb.optimizationProcesses['door-sizing-optimization-w-clustering'].writeParAndInputFiles()