├── README.md ├── tools.py ├── .gitignore ├── callAbq.py └── PeriodicModel.py /README.md: -------------------------------------------------------------------------------- 1 | # Abaqus-Periodic-Boundary 2 | Description: 3 | The file can be used in conjuction to provide Stress-Strain plots from uniaxial tension on an repetitive volume element (RVE) with periodic boundary conditions. 4 | 5 | File structure: 6 | 7 | 1) CallAbq.py: 8 | Generates Paramters in Paramters.p 9 | Calls PeriodicModel.py in abaqus 10 | Reads Results.p 11 | Plots model results (Stress-Time and Stress-Strain Plot) 12 | 13 | 2) PeriodicModel.py: 14 | Creates cubic volume element 15 | applies material properties 16 | generates load steps 17 | applies periodic boundary conditions 18 | applies uniaxial strain 19 | performs postprocessing 20 | writes results into Results_Export.p 21 | 22 | 3) Tools.py: 23 | contains the plot function 24 | -------------------------------------------------------------------------------- /tools.py: -------------------------------------------------------------------------------- 1 | import matplotlib 2 | import matplotlib.pyplot as plt 3 | import numpy as np 4 | 5 | def SimplePlot(x,y,plotControl,picName): 6 | #how many datasets 7 | iSet=len(x) 8 | # Note that using plt.subplots below is equivalent to using 9 | # fig = plt.figure() and then ax = fig.add_subplot(111) 10 | fig, ax = plt.subplots() 11 | for i in range(iSet): 12 | a=plotControl[i][1] 13 | ax.plot(x[i], y[i], plotControl[i][1],) 14 | ax.plot(x[i], y[i], plotControl[i][1]+'^',label=plotControl[i][0]) 15 | 16 | #ax.set_yscale('log') 17 | ax.set(xlabel=plotControl[i][2], ylabel=plotControl[i][3],title=plotControl[i][4]) 18 | ax.grid() 19 | ax.legend(loc='bottom right',shadow=False, fontsize='x-large') 20 | 21 | fig.savefig(picName+".png") 22 | plt.show() 23 | return 0 24 | 25 | 26 | def ComputeGradient(x,y): 27 | #Computes Gradient with forward difference method 28 | #initialize gradient list 29 | gradxy = [[] * 1 for i in range(5)] 30 | 31 | for iSolder in range(len(x)): 32 | for iTime in range(len(x[0])): 33 | try: 34 | gradxy[iSolder].append((y[iSolder][iTime+1]-y[iSolder][iTime-1])/(x[iSolder][iTime+1]-x[iSolder][iTime-1])) 35 | except: 36 | gradxy[iSolder].append(0.) 37 | 38 | return gradxy 39 | 40 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | MANIFEST 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *.cover 47 | .hypothesis/ 48 | .pytest_cache/ 49 | 50 | # Translations 51 | *.mo 52 | *.pot 53 | 54 | # Django stuff: 55 | *.log 56 | local_settings.py 57 | db.sqlite3 58 | 59 | # Flask stuff: 60 | instance/ 61 | .webassets-cache 62 | 63 | # Scrapy stuff: 64 | .scrapy 65 | 66 | # Sphinx documentation 67 | docs/_build/ 68 | 69 | # PyBuilder 70 | target/ 71 | 72 | # Jupyter Notebook 73 | .ipynb_checkpoints 74 | 75 | # pyenv 76 | .python-version 77 | 78 | # celery beat schedule file 79 | celerybeat-schedule 80 | 81 | # SageMath parsed files 82 | *.sage.py 83 | 84 | # Environments 85 | .env 86 | .venv 87 | env/ 88 | venv/ 89 | ENV/ 90 | env.bak/ 91 | venv.bak/ 92 | 93 | # Spyder project settings 94 | .spyderproject 95 | .spyproject 96 | 97 | # Rope project settings 98 | .ropeproject 99 | 100 | # mkdocs documentation 101 | /site 102 | 103 | # mypy 104 | .mypy_cache/ 105 | -------------------------------------------------------------------------------- /callAbq.py: -------------------------------------------------------------------------------- 1 | #XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 2 | #Author: Georg Siroky 3 | #Institution: Materials Center Leoben 4 | #Description: callAbq defines a Parameterset for PeriodicModel.py and calls PeriodicModel.py in abaqus. 5 | # The results are loaded after the jobs has finished and two plot are generated 6 | #XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7 | import os 8 | import pickle 9 | import numpy as np 10 | import sys 11 | 12 | ToolsDir="C:/Users/yourDir" 13 | InputDir="C:/Users/yourDir" 14 | WorkDir="C:/Users/yourDir" 15 | 16 | #import Abaqus Toolbox 17 | sys.path.append(ToolsDir) 18 | from tools import* 19 | 20 | #XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 21 | #Write Paramter File 22 | os.chdir(WorkDir) 23 | #Parameters for evaluation of model 24 | Parameters=[['CubeSize', 1.]] 25 | pickle.dump(Parameters, open("Parameters.p", "wb")) 26 | #XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 27 | 28 | #XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 29 | #Define abaqus executable 30 | executable= 'abq2017' 31 | #Directory of input file 32 | os.chdir(InputDir) 33 | inputfile='PeriodicModel.py' 34 | jobname='RVE' 35 | #Execute python script in abaqus 36 | call = executable + ' cae noGUI=' + inputfile + ' > ' + jobname + '.out 2>&1' 37 | os.system(call) 38 | #XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 39 | 40 | #XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 41 | #Open Data and Plot Results 42 | os.chdir(WorkDir) 43 | #Open Results file 44 | resultsName='Results.p' 45 | DataExport=pickle.load(open(resultsName, "rb")) 46 | #XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 47 | #XXXXXXXXXXXXXXXXXXXXXXXXx Plot Stress over Time XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 48 | #Define Plot Discription 49 | plotControl=[["Visco tdisp=1s",'g','Time [s]','Stress [MPa]', 'Creep Response']] 50 | 51 | nSets=len(DataExport) 52 | ii=0 53 | name=jobname+'Creep' 54 | x=[[] for i in xrange(nSets)] 55 | y=[[] for i in xrange(nSets)] 56 | #Open export data file of multiple evaluations 57 | for iData in DataExport: 58 | #read time steps 59 | for tstep in iData: 60 | x[ii].append(tstep[1]) 61 | y[ii].append(tstep[2]) 62 | ii+=1 63 | #create plot 64 | plot=SimplePlot(x,y,plotControl,name) 65 | #XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 66 | #XXXXXXXXXXXXXXXXXXXXXXXXx Plot Stress over Strain XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 67 | #Define Plot Discription 68 | plotControl=[["Visco tdisp=1s",'g','Strain [%]','Stress [MPa]', 'Creep Response']] 69 | 70 | nSets=len(DataExport) 71 | ii=0 72 | name=jobname+'StressStrain' 73 | x=[[] for i in xrange(nSets)] 74 | y=[[] for i in xrange(nSets)] 75 | #Open export data file of multiple evaluations 76 | for iData in DataExport: 77 | #read time steps 78 | for tstep in iData: 79 | x[ii].append(tstep[3]*100) 80 | y[ii].append(tstep[2]) 81 | ii+=1 82 | #create plot 83 | plot2=SimplePlot(x,y,plotControl,name) 84 | -------------------------------------------------------------------------------- /PeriodicModel.py: -------------------------------------------------------------------------------- 1 | #XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 2 | #Author: Georg Siroky 3 | #Institution: Materials Center Leoben 4 | #Description: Generates a cube with periodic boundary conditions. Applying uniaxial strain to it. 5 | # Postprocessing: Evaluates strain and stress over all elements. Exports to "Data Export" 6 | #XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7 | 8 | from part import * 9 | from material import * 10 | from section import * 11 | from assembly import * 12 | from step import * 13 | from interaction import * 14 | from load import * 15 | from mesh import * 16 | from job import * 17 | from sketch import * 18 | from visualization import * 19 | from connectorBehavior import * 20 | import mesh 21 | import os 22 | import numpy as np 23 | import time 24 | import platform 25 | import pickle 26 | 27 | #Identify System 28 | System=platform.system() 29 | #Initialize --------------------------------------------------------------------- 30 | startTime=time.time() 31 | if System == 'Linux': 32 | os.chdir(r"/home/yourDir") 33 | elif System == 'Windows': 34 | WorkDir="C:/Users/yourDir" 35 | os.chdir(WorkDir) 36 | 37 | #import Parameters 38 | Parameters=pickle.load(open("Parameters.p","rb")) 39 | DataExport=[] 40 | 41 | for iParameters in Parameters: 42 | 43 | file=open("Test_results.txt","w") 44 | file.write("\n") 45 | file.close() 46 | #################################################################################################################### 47 | ##Initialising 48 | #CubeSize 49 | a = iParameters[1] 50 | #Elements per Edge 51 | n =8 52 | #Selection Box Size 53 | dist = a*1.0e-003 54 | #Temperature 55 | T0=(20+273.) 56 | 57 | jobName='RVE' 58 | CreepType='None' 59 | Element=C3D8R 60 | 61 | timeApplyDisp=2 62 | timeRelaxation=2 63 | 64 | SubmitJob=True 65 | WriteInput=True 66 | Postprocessing=True 67 | #################################################################################################################### 68 | 69 | #Create Cube 70 | mdb.close() 71 | myModel = mdb.Model(name='one') 72 | del mdb.models['Model-1'] 73 | mdb.models['one'].ConstrainedSketch(name='__profile__', sheetSize= 74 | 200.0) 75 | mdb.models['one'].sketches['__profile__'].rectangle(point1=(0.0, 0.0) 76 | , point2=(a,a)) 77 | mdb.models['one'].Part(dimensionality=THREE_D, name='Mikromech_8mal8', type= 78 | DEFORMABLE_BODY) 79 | mdb.models['one'].parts['Mikromech_8mal8'].BaseSolidExtrude(depth=a, 80 | sketch=mdb.models['one'].sketches['__profile__']) 81 | del mdb.models['one'].sketches['__profile__'] 82 | 83 | 84 | #Materialdata 85 | mdb.models['one'].Material(name='Mat') 86 | mdb.models['one'].materials['Mat'].Elastic(table=((55000.0, 0.3), )) 87 | mdb.models['one'].materials['Mat'].Density(table=((7.8e-9, ), )) 88 | #mdb.models['one'].materials['Mat'].Plastic(table=((200.0, 0.0), (255.0, 0.0005),(260.,3))) 89 | if CreepType=='Power': 90 | mdb.models['one'].materials['Mat'].Plastic(table=((200.0, 0.0), (255.0, 0.0005),(260.,30))) #250.0, 0.0), (260.0, 0.0005),(265.,3) #hardening=MULTILINEAR_KINEMATIC 91 | mdb.models['one'].materials['Mat'].Creep(law=TIME, table=((7.e-24, 7.5, -0.9),)) #8.9e-33, 18 92 | elif CreepType=='Sinh': 93 | mdb.models['one'].materials['Mat'].Plastic(hardening=MULTILINEAR_KINEMATIC,table=((200.0, 0.0), (255.0, 0.0005), (260., 30))) 94 | mdb.models['one'].materials['Mat'].Creep(law=HYPERBOLIC_SINE, table=((1.23e-5, 0.05, 6.0,45000,8.314),)) #A,alpha,n,Q,R, 95 | mdb.models['one'].setValues(absoluteZero=0.) 96 | elif CreepType=='Visco': 97 | mdb.models['one'].materials['Mat'].Plastic(hardening=COMBINED,table=((200.0, 0.0), (255.0, 0.0005), (260., 0.001))) 98 | mdb.models['one'].materials['Mat'].plastic.CyclicHardening(parameters=ON, table=((200.0, 10.0, 0.10),)) 99 | mdb.models['one'].materials['Mat'].Viscous(law=TIME, table=((6.e-8,5.5,0 ,0.001), )) 100 | elif CreepType=='Visco1': 101 | mdb.models['one'].materials['Mat'].Plastic(hardening=MULTILINEAR_KINEMATIC,table=((200.0, 0.0), (255.0, 0.0005), (260., 30))) 102 | mdb.models['one'].materials['Mat'].Viscous(law=TIME, table=((6.e-8,5.5,0 ,0.001), )) 103 | else: 104 | print 'No Creep Law implemented' 105 | 106 | #Material 107 | mdb.models['one'].HomogeneousSolidSection(material='Mat', name='Section-Mat', thickness=None) 108 | 109 | #Sections 110 | allcells = mdb.models['one'].parts['Mikromech_8mal8'].cells 111 | regionCells=(mdb.models['one'].parts['Mikromech_8mal8'].cells,) 112 | 113 | mdb.models['one'].parts['Mikromech_8mal8'].SectionAssignment(offset=0.0, 114 | offsetField='', offsetType=MIDDLE_SURFACE, region=regionCells, sectionName='Section-Mat', thicknessAssignment=FROM_SECTION) 115 | 116 | ##Meshing 117 | mdb.models['one'].parts['Mikromech_8mal8'].Set(cells=mdb.models['one'].parts['Mikromech_8mal8'].cells.getByBoundingBox(0.0,0.0,0.0,a,a,a), name ='Alles') 118 | #Global Seeds 119 | mdb.models['one'].parts['Mikromech_8mal8'].seedPart(deviationFactor=0.1, minSizeFactor=0.1, size=a/n) 120 | 121 | #Elementtype 122 | #Linear 123 | RegionRVE=mdb.models['one'].parts['Mikromech_8mal8'].Set(cells=allcells, name='Set-RVE') 124 | 125 | elemType = mesh.ElemType(elemCode=Element, elemLibrary=STANDARD) 126 | mdb.models['one'].parts['Mikromech_8mal8'].setElementType(regions=RegionRVE, elemTypes=(elemType,)) 127 | 128 | #Mesh 129 | mdb.models['one'].parts['Mikromech_8mal8'].generateMesh() 130 | mdb.models['one'].rootAssembly.regenerate() 131 | 132 | #Assembly 133 | mdb.models['one'].rootAssembly.DatumCsysByDefault(CARTESIAN) 134 | mdb.models['one'].rootAssembly.Instance(dependent=ON,name='Mikromech_8mal8', part=mdb.models['one'].parts['Mikromech_8mal8']) 135 | 136 | mdb.models['one'].rootAssembly.allInstances['Mikromech_8mal8'] 137 | 138 | #Define Temperature field 139 | AllCells = mdb.models['one'].rootAssembly.allInstances['Mikromech_8mal8'].cells.getByBoundingBox(xMin=0., yMin=0., zMin=0., xMax=a, yMax=a, zMax=a) 140 | TempRegion = mdb.models['one'].rootAssembly.Set(cells=AllCells, name='Set-Temp') 141 | mdb.models['one'].Temperature(name='Predefined Field-1', createStepName='Initial', region=TempRegion,distributionType=UNIFORM, crossSectionDistribution=CONSTANT_THROUGH_THICKNESS,magnitudes=(T0,)) 142 | 143 | #Steps 144 | #Step Apply Tension 145 | mdb.models['one'].ViscoStep(name='ApplyTension', previous='Initial', timePeriod=timeApplyDisp, initialInc=0.00001,minInc=1e-20, maxInc=timeApplyDisp, cetol=0.1,amplitude=RAMP) 146 | mdb.models['one'].Temperature(name='Predefined Field-2', createStepName='ApplyTension', region=TempRegion, distributionType=UNIFORM, crossSectionDistribution=CONSTANT_THROUGH_THICKNESS,magnitudes=(T0,)) 147 | 148 | mdb.models['one'].FieldOutputRequest(name='F-Output-ApplyDisp1', 149 | createStepName='ApplyTension', variables=('S', 'MISES', 'MISESMAX', 'TSHR', 150 | 'CTSHR', 'ALPHA', 'TRIAX', 'VS', 'PS', 'CS11', 'ALPHAN', 'SSAVG', 151 | 'MISESONLY', 'PRESSONLY', 'E', 'VE', 'PE', 'VEEQ', 'PEEQ', 'PEEQT', 152 | 'PEEQMAX', 'PEMAG', 'PEQC', 'EE', 'IE', 'THE', 'NE', 'LE', 'ER', 'SE', 153 | 'SPE', 'SEPE', 'SEE', 'SEP', 'SALPHA', 'U', 'UT', 'UR', 'V', 'VT', 154 | 'VR', 'RBANG', 'RBROT', 'RF', 'RT', 'RM', 'CF', 'SF', 'TF', 'VF', 155 | 'ESF1', 'NFORC', 'NFORCSO', 'RBFOR', 'BF', 'CORIOMAG', 'ROTAMAG', 156 | 'CENTMAG', 'CENTRIFMAG', 'GRAV', 'P', 'HP', 'TRSHR', 'TRNOR')) 157 | 158 | #Referencepoints REFS, REFD 159 | mdb.models['one'].rootAssembly.ReferencePoint(point=(0.0, 0.0, 0.0)) 160 | mdb.models['one'].rootAssembly.features.changeKey(fromName='RP-1', 161 | toName='REFD') 162 | mdb.models['one'].rootAssembly.ReferencePoint(point=(0.0, 0.0, 0.0)) 163 | mdb.models['one'].rootAssembly.features.changeKey(fromName='RP-1', 164 | toName='REFS') 165 | mdb.models['one'].rootAssembly.features['REFS'].suppress() 166 | mdb.models['one'].rootAssembly.Set(name='REFD', referencePoints=( 167 | mdb.models['one'].rootAssembly.referencePoints[5], )) 168 | mdb.models['one'].rootAssembly.features['REFS'].resume() 169 | mdb.models['one'].rootAssembly.features['REFD'].suppress() 170 | mdb.models['one'].rootAssembly.Set(name='REFS', referencePoints=( 171 | mdb.models['one'].rootAssembly.referencePoints[6], )) 172 | mdb.models['one'].rootAssembly.features['REFD'].resume() 173 | 174 | 175 | ##################################################################################################################################################################################### 176 | ##Create PBCs 177 | ##################################################################################################################################################################################### 178 | #Faces 179 | #************************************************************************************************************************************************************************************* 180 | 181 | #Facesets, Equations: X X _ 182 | k = 0 183 | FXX0 = [] 184 | FXXL = [] 185 | for y in range(int(n)-1): 186 | for x in range(int(n)-1): 187 | FXX0.append(mdb.models['one'].rootAssembly.instances['Mikromech_8mal8'].nodes.getByBoundingBox((x+1.0)*a/n-dist, (y+1.0)*a/n-dist, -dist, (x+1.0)*a/n+dist, (y+1.0)*a/n+dist, dist)) 188 | FXXL.append(mdb.models['one'].rootAssembly.instances['Mikromech_8mal8'].nodes.getByBoundingBox((x+1.0)*a/n-dist, (y+1.0)*a/n-dist, a-dist, (x+1.0)*a/n+dist, (y+1.0)*a/n+dist, a+dist)) 189 | mdb.models['one'].rootAssembly.Set(name='FXX0_'+str(k+1), nodes=FXX0[k]) 190 | mdb.models['one'].rootAssembly.Set(name='FXXL_'+str(k+1), nodes=FXXL[k]) 191 | #Equations 192 | mdb.models['one'].Equation(name='FXXL_XX0_1_' +str(k+1), terms=((1.0, 'FXXL_'+str(k+1), 1), (-1.0, 'FXX0_'+str(k+1), 1), (-1.0, 'REFS', 3))) 193 | mdb.models['one'].Equation(name='FXXL_XX0_2_' +str(k+1), terms=((1.0, 'FXXL_'+str(k+1), 2), (-1.0, 'FXX0_'+str(k+1), 2), (-1.0, 'REFS', 2))) 194 | mdb.models['one'].Equation(name='FXXL_XX0_3_' +str(k+1), terms=((1.0, 'FXXL_'+str(k+1), 3), (-1.0, 'FXX0_'+str(k+1), 3), (-1.0, 'REFD', 3))) 195 | k = k+1 196 | 197 | #Facesets, Equations: X _ X 198 | k = 0 199 | FX0X = [] 200 | FXLX = [] 201 | for z in range(int(n)-1): 202 | for x in range(int(n)-1): 203 | FX0X.append(mdb.models['one'].rootAssembly.instances['Mikromech_8mal8'].nodes.getByBoundingBox((x+1.0)*a/n-dist, -dist, (z+1.0)*a/n-dist, (x+1.0)*a/n+dist, dist, (z+1.0)*a/n+dist)) 204 | FXLX.append(mdb.models['one'].rootAssembly.instances['Mikromech_8mal8'].nodes.getByBoundingBox((x+1.0)*a/n-dist, a-dist, (z+1.0)*a/n-dist, (x+1.0)*a/n+dist, a+dist, (z+1.0)*a/n+dist)) 205 | mdb.models['one'].rootAssembly.Set(name='FX0X_'+str(k+1), nodes=FX0X[k]) 206 | mdb.models['one'].rootAssembly.Set(name='FXLX_'+str(k+1), nodes=FXLX[k]) 207 | #Equations 208 | mdb.models['one'].Equation(name='FXLX_X0X_1_' +str(k+1), terms=((1.0, 'FXLX_'+str(k+1), 1), (-1.0, 'FX0X_'+str(k+1), 1), (-1.0, 'REFS', 1))) 209 | mdb.models['one'].Equation(name='FXLX_X0X_2_' +str(k+1), terms=((1.0, 'FXLX_'+str(k+1), 2), (-1.0, 'FX0X_'+str(k+1), 2), (-1.0, 'REFD', 2))) 210 | mdb.models['one'].Equation(name='FXLX_X0X_3_' +str(k+1), terms=((1.0, 'FXLX_'+str(k+1), 3), (-1.0, 'FX0X_'+str(k+1), 3), (-1.0, 'REFS', 2))) 211 | k = k+1 212 | 213 | #Facesets, Equations: _ X X 214 | k = 0 215 | F0XX = [] 216 | FLXX = [] 217 | for z in range(int(n)-1): 218 | for y in range(int(n)-1): 219 | F0XX.append(mdb.models['one'].rootAssembly.instances['Mikromech_8mal8'].nodes.getByBoundingBox(-dist, (y+1.0)*a/n-dist, (z+1.0)*a/n-dist, dist, (y+1.0)*a/n+dist, (z+1.0)*a/n+dist)) 220 | FLXX.append(mdb.models['one'].rootAssembly.instances['Mikromech_8mal8'].nodes.getByBoundingBox(a-dist, (y+1.0)*a/n-dist, (z+1.0)*a/n-dist, a+dist, (y+1.0)*a/n+dist, (z+1.0)*a/n+dist)) 221 | mdb.models['one'].rootAssembly.Set(name='F0XX_'+str(k+1), nodes=F0XX[k]) 222 | mdb.models['one'].rootAssembly.Set(name='FLXX_'+str(k+1), nodes=FLXX[k]) 223 | #Equations 224 | mdb.models['one'].Equation(name='FLXX_0XX_1_' +str(k+1), terms=((1.0, 'FLXX_'+str(k+1), 1), (-1.0, 'F0XX_'+str(k+1), 1), (-1.0, 'REFD', 1))) 225 | mdb.models['one'].Equation(name='FLXX_0XX_2_' +str(k+1), terms=((1.0, 'FLXX_'+str(k+1), 2), (-1.0, 'F0XX_'+str(k+1), 2), (-1.0, 'REFS', 1))) 226 | mdb.models['one'].Equation(name='FLXX_0XX_3_' +str(k+1), terms=((1.0, 'FLXX_'+str(k+1), 3), (-1.0, 'F0XX_'+str(k+1), 3), (-1.0, 'REFS', 3))) 227 | k = k+1 228 | 229 | ########################################################################################################################################################################################### 230 | #Lines 231 | #************************************************************************************************************************************************************************************** 232 | 233 | #Edgesets: _ _ X 234 | k = 0 235 | E00X = [] 236 | EL0X = [] 237 | E0LX = [] 238 | ELLX = [] 239 | for z in range(int(n)-1): 240 | E00X.append(mdb.models['one'].rootAssembly.instances['Mikromech_8mal8'].nodes.getByBoundingBox(-dist, -dist, (z+1.0)*a/n-dist, dist, dist, (z+1.0)*a/n+dist)) 241 | EL0X.append(mdb.models['one'].rootAssembly.instances['Mikromech_8mal8'].nodes.getByBoundingBox(a-dist, -dist, (z+1.0)*a/n-dist, a+dist, dist, (z+1.0)*a/n+dist)) 242 | E0LX.append(mdb.models['one'].rootAssembly.instances['Mikromech_8mal8'].nodes.getByBoundingBox(-dist, a-dist, (z+1.0)*a/n-dist, dist, a+dist, (z+1.0)*a/n+dist)) 243 | ELLX.append(mdb.models['one'].rootAssembly.instances['Mikromech_8mal8'].nodes.getByBoundingBox(a-dist, a-dist, (z+1.0)*a/n-dist, a+dist, a+dist, (z+1.0)*a/n+dist)) 244 | mdb.models['one'].rootAssembly.Set(name='E00X_'+str(k+1), nodes=E00X[k]) 245 | mdb.models['one'].rootAssembly.Set(name='EL0X_'+str(k+1), nodes=EL0X[k]) 246 | mdb.models['one'].rootAssembly.Set(name='E0LX_'+str(k+1), nodes=E0LX[k]) 247 | mdb.models['one'].rootAssembly.Set(name='ELLX_'+str(k+1), nodes=ELLX[k]) 248 | k = k+1 249 | 250 | #Edgesets: _ X _ 251 | k = 0 252 | E0X0 = [] 253 | ELX0 = [] 254 | E0XL = [] 255 | ELXL = [] 256 | for y in range(int(n)-1): 257 | E0X0.append(mdb.models['one'].rootAssembly.instances['Mikromech_8mal8'].nodes.getByBoundingBox(-dist, (y+1.0)*a/n-dist, -dist, dist, (y+1.0)*a/n+dist, dist)) 258 | ELX0.append(mdb.models['one'].rootAssembly.instances['Mikromech_8mal8'].nodes.getByBoundingBox(a-dist, (y+1.0)*a/n-dist, -dist, a+dist, (y+1.0)*a/n+dist, dist)) 259 | E0XL.append(mdb.models['one'].rootAssembly.instances['Mikromech_8mal8'].nodes.getByBoundingBox(-dist, (y+1.0)*a/n-dist, a-dist, dist, (y+1.0)*a/n+dist, a+dist)) 260 | ELXL.append(mdb.models['one'].rootAssembly.instances['Mikromech_8mal8'].nodes.getByBoundingBox(a-dist, (y+1.0)*a/n-dist, a-dist, a+dist, (y+1.0)*a/n+dist, a+dist)) 261 | mdb.models['one'].rootAssembly.Set(name='E0X0_'+str(k+1), nodes=E0X0[k]) 262 | mdb.models['one'].rootAssembly.Set(name='ELX0_'+str(k+1), nodes=ELX0[k]) 263 | mdb.models['one'].rootAssembly.Set(name='E0XL_'+str(k+1), nodes=E0XL[k]) 264 | mdb.models['one'].rootAssembly.Set(name='ELXL_'+str(k+1), nodes=ELXL[k]) 265 | k = k+1 266 | 267 | #Edgesets: _ X _ 268 | for k in range(len(E0X0)): 269 | mdb.models['one'].Equation(name='E0XL_0X0_1_'+str(k+1), terms=((1.0, 'E0XL_'+str(k+1), 1), (-1.0, 'E0X0_'+str(k+1), 1), (-1.0, 'REFS', 3))) 270 | mdb.models['one'].Equation(name='E0XL_0X0_2_'+str(k+1), terms=((1.0, 'E0XL_'+str(k+1), 2), (-1.0, 'E0X0_'+str(k+1), 2), (-1.0, 'REFS', 2))) 271 | mdb.models['one'].Equation(name='E0XL_0X0_3_'+str(k+1), terms=((1.0, 'E0XL_'+str(k+1), 3), (-1.0, 'E0X0_'+str(k+1), 3), (-1.0, 'REFD', 3))) 272 | 273 | mdb.models['one'].Equation(name='ELX0_0X0_1_'+str(k+1), terms=((1.0, 'ELX0_'+str(k+1), 1), (-1.0, 'E0X0_'+str(k+1), 1), (-1.0, 'REFD', 1))) 274 | mdb.models['one'].Equation(name='ELX0_0X0_2_'+str(k+1), terms=((1.0, 'ELX0_'+str(k+1), 2), (-1.0, 'E0X0_'+str(k+1), 2), (-1.0, 'REFS', 1))) 275 | mdb.models['one'].Equation(name='ELX0_0X0_3_'+str(k+1), terms=((1.0, 'ELX0_'+str(k+1), 3), (-1.0, 'E0X0_'+str(k+1), 3), (-1.0, 'REFS', 3))) 276 | 277 | mdb.models['one'].Equation(name='ELXL_0X0_1_'+str(k+1), terms=((1.0, 'ELXL_'+str(k+1), 1), (-1.0, 'E0X0_'+str(k+1), 1), (-1.0, 'REFD', 1), (-1.0, 'REFS', 3))) 278 | mdb.models['one'].Equation(name='ELXL_0X0_2_'+str(k+1), terms=((1.0, 'ELXL_'+str(k+1), 2), (-1.0, 'E0X0_'+str(k+1), 2), (-1.0, 'REFS', 1), (-1.0, 'REFS', 2))) 279 | mdb.models['one'].Equation(name='ELXL_0X0_3_'+str(k+1), terms=((1.0, 'ELXL_'+str(k+1), 3), (-1.0, 'E0X0_'+str(k+1), 3), (-1.0, 'REFD', 3), (-1.0, 'REFS', 3))) 280 | 281 | #Edgesets: _ _ X 282 | for k in range(len(E00X)): 283 | mdb.models['one'].Equation(name='EL0X_00X_1_'+str(k+1), terms=((1.0, 'EL0X_'+str(k+1), 1), (-1.0, 'E00X_'+str(k+1), 1), (-1.0, 'REFD', 1))) 284 | mdb.models['one'].Equation(name='EL0X_00X_2_'+str(k+1), terms=((1.0, 'EL0X_'+str(k+1), 2), (-1.0, 'E00X_'+str(k+1), 2), (-1.0, 'REFS', 1))) 285 | mdb.models['one'].Equation(name='EL0X_00X_3_'+str(k+1), terms=((1.0, 'EL0X_'+str(k+1), 3), (-1.0, 'E00X_'+str(k+1), 3), (-1.0, 'REFS', 3))) 286 | 287 | mdb.models['one'].Equation(name='E0LX_00X_1_'+str(k+1), terms=((1.0, 'E0LX_'+str(k+1), 1), (-1.0, 'E00X_'+str(k+1), 1), (-1.0, 'REFS', 1))) 288 | mdb.models['one'].Equation(name='E0LX_00X_2_'+str(k+1), terms=((1.0, 'E0LX_'+str(k+1), 2), (-1.0, 'E00X_'+str(k+1), 2), (-1.0, 'REFD', 2))) 289 | mdb.models['one'].Equation(name='E0LX_00X_3_'+str(k+1), terms=((1.0, 'E0LX_'+str(k+1), 3), (-1.0, 'E00X_'+str(k+1), 3), (-1.0, 'REFS', 2))) 290 | 291 | mdb.models['one'].Equation(name='ELLX_00X_1_'+str(k+1), terms=((1.0, 'ELLX_'+str(k+1), 1), (-1.0, 'E00X_'+str(k+1), 1), (-1.0, 'REFD', 1), (-1.0, 'REFS', 1))) 292 | mdb.models['one'].Equation(name='ELLX_00X_2_'+str(k+1), terms=((1.0, 'ELLX_'+str(k+1), 2), (-1.0, 'E00X_'+str(k+1), 2), (-1.0, 'REFS', 1), (-1.0, 'REFD', 2))) 293 | mdb.models['one'].Equation(name='ELLX_00X_3_'+str(k+1), terms=((1.0, 'ELLX_'+str(k+1), 3), (-1.0, 'E00X_'+str(k+1), 3), (-1.0, 'REFS', 3), (-1.0, 'REFS', 2))) 294 | 295 | #Edgesets + Equations: X _ _ 296 | k = 0 297 | EX00 = [] 298 | EXL0 = [] 299 | EX0L = [] 300 | EXLL = [] 301 | for x in range(int(n)-1): 302 | EX00.append(mdb.models['one'].rootAssembly.instances['Mikromech_8mal8'].nodes.getByBoundingBox((x+1.0)*a/n-dist, -dist, -dist, (x+1.0)*a/n+dist, dist, dist)) 303 | EXL0.append(mdb.models['one'].rootAssembly.instances['Mikromech_8mal8'].nodes.getByBoundingBox((x+1.0)*a/n-dist, a-dist, -dist, (x+1.0)*a/n+dist, a+dist, dist)) 304 | EX0L.append(mdb.models['one'].rootAssembly.instances['Mikromech_8mal8'].nodes.getByBoundingBox((x+1.0)*a/n-dist, -dist, a-dist, (x+1.0)*a/n+dist, dist, a+dist)) 305 | EXLL.append(mdb.models['one'].rootAssembly.instances['Mikromech_8mal8'].nodes.getByBoundingBox((x+1.0)*a/n-dist, a-dist, a-dist, (x+1.0)*a/n+dist, a+dist, a+dist)) 306 | mdb.models['one'].rootAssembly.Set(name='EX00_'+str(k+1), nodes=EX00[k]) 307 | mdb.models['one'].rootAssembly.Set(name='EXL0_'+str(k+1), nodes=EXL0[k]) 308 | mdb.models['one'].rootAssembly.Set(name='EX0L_'+str(k+1), nodes=EX0L[k]) 309 | mdb.models['one'].rootAssembly.Set(name='EXLL_'+str(k+1), nodes=EXLL[k]) 310 | #Equations 311 | mdb.models['one'].Equation(name='EXL0_X00_1_' +str(k+1), terms=((1.0, 'EXL0_'+str(k+1), 1), (-1.0, 'EX00_'+str(k+1), 1), (-1.0, 'REFS', 1))) 312 | mdb.models['one'].Equation(name='EXL0_X00_2_' +str(k+1), terms=((1.0, 'EXL0_'+str(k+1), 2), (-1.0, 'EX00_'+str(k+1), 2), (-1.0, 'REFD', 2))) 313 | mdb.models['one'].Equation(name='EXL0_X00_3_' +str(k+1), terms=((1.0, 'EXL0_'+str(k+1), 3), (-1.0, 'EX00_'+str(k+1), 3), (-1.0, 'REFS', 2))) 314 | 315 | mdb.models['one'].Equation(name='EX0L_X00_1_' +str(k+1), terms=((1.0, 'EX0L_'+str(k+1), 1), (-1.0, 'EX00_'+str(k+1), 1), (-1.0, 'REFS', 3))) 316 | mdb.models['one'].Equation(name='EX0L_X00_2_' +str(k+1), terms=((1.0, 'EX0L_'+str(k+1), 2), (-1.0, 'EX00_'+str(k+1), 2), (-1.0, 'REFS', 2))) 317 | mdb.models['one'].Equation(name='EX0L_X00_3_' +str(k+1), terms=((1.0, 'EX0L_'+str(k+1), 3), (-1.0, 'EX00_'+str(k+1), 3), (-1.0, 'REFD', 3))) 318 | 319 | mdb.models['one'].Equation(name='EXLL_X00_1_'+str(k+1), terms=((1.0, 'EXLL_'+str(k+1), 1), (-1.0, 'EX00_'+str(k+1), 1), (-1.0, 'REFS', 1), (-1.0, 'REFS', 3))) 320 | mdb.models['one'].Equation(name='EXLL_X00_2_'+str(k+1), terms=((1.0, 'EXLL_'+str(k+1), 2), (-1.0, 'EX00_'+str(k+1), 2), (-1.0, 'REFD', 2), (-1.0, 'REFS', 2))) 321 | mdb.models['one'].Equation(name='EXLL_X00_3_'+str(k+1), terms=((1.0, 'EXLL_'+str(k+1), 3), (-1.0, 'EX00_'+str(k+1), 3), (-1.0, 'REFS', 2), (-1.0, 'REFD', 3))) 322 | k =k+1 323 | 324 | ###################################################################################################################################################################################### 325 | #Corners 326 | #************************************************************************************************************************************************************************************** 327 | 328 | #Cornersets 329 | C000 = mdb.models['one'].rootAssembly.instances['Mikromech_8mal8'].nodes.getByBoundingBox(-dist, -dist, -dist, dist, dist, dist) 330 | CL00 = mdb.models['one'].rootAssembly.instances['Mikromech_8mal8'].nodes.getByBoundingBox(1.0-dist, -dist, -dist, 1.0+dist, dist, dist) 331 | C0L0 = mdb.models['one'].rootAssembly.instances['Mikromech_8mal8'].nodes.getByBoundingBox(-dist, 1.0-dist, -dist, dist, 1.0+dist, dist) 332 | C00L = mdb.models['one'].rootAssembly.instances['Mikromech_8mal8'].nodes.getByBoundingBox(-dist, -dist, 1.0-dist, dist, dist, 1.0+dist) 333 | CLL0 = mdb.models['one'].rootAssembly.instances['Mikromech_8mal8'].nodes.getByBoundingBox(1.0-dist, 1.0-dist, -dist, 1.0+dist, 1.0+dist, dist) 334 | CL0L = mdb.models['one'].rootAssembly.instances['Mikromech_8mal8'].nodes.getByBoundingBox(1.0-dist, -dist, 1.0-dist, 1.0+dist, dist, 1.0+dist) 335 | C0LL = mdb.models['one'].rootAssembly.instances['Mikromech_8mal8'].nodes.getByBoundingBox(-dist, 1.0-dist, 1.0-dist, dist, 1.0+dist, 1.0+dist) 336 | CLLL = mdb.models['one'].rootAssembly.instances['Mikromech_8mal8'].nodes.getByBoundingBox(1.0-dist, 1.0-dist, 1.0-dist, 1.0+dist, 1.0+dist, 1.0+dist) 337 | 338 | mdb.models['one'].rootAssembly.Set(name='C000', nodes=C000) 339 | mdb.models['one'].rootAssembly.Set(name='CL00', nodes=CL00) 340 | mdb.models['one'].rootAssembly.Set(name='C0L0', nodes=C0L0) 341 | mdb.models['one'].rootAssembly.Set(name='C00L', nodes=C00L) 342 | mdb.models['one'].rootAssembly.Set(name='CLL0', nodes=CLL0) 343 | mdb.models['one'].rootAssembly.Set(name='CL0L', nodes=CL0L) 344 | mdb.models['one'].rootAssembly.Set(name='C0LL', nodes=C0LL) 345 | mdb.models['one'].rootAssembly.Set(name='CLLL', nodes=CLLL) 346 | 347 | mdb.models['one'].Equation(name='CL00_1', terms=((1.0, 'CL00', 1), (-1.0, 'C000', 1), (-1.0, 'REFD', 1))) 348 | mdb.models['one'].Equation(name='CL00_2', terms=((1.0, 'CL00', 2), (-1.0, 'C000', 2), (-1.0, 'REFS', 1))) 349 | mdb.models['one'].Equation(name='CL00_3', terms=((1.0, 'CL00', 3), (-1.0, 'C000', 3), (-1.0, 'REFS', 3))) 350 | 351 | mdb.models['one'].Equation(name='C0L0_1', terms=((1.0, 'C0L0', 1), (-1.0, 'C000', 1), (-1.0, 'REFS', 1))) 352 | mdb.models['one'].Equation(name='C0L0_2', terms=((1.0, 'C0L0', 2), (-1.0, 'C000', 2), (-1.0, 'REFD', 2))) 353 | mdb.models['one'].Equation(name='C0L0_3', terms=((1.0, 'C0L0', 3), (-1.0, 'C000', 3), (-1.0, 'REFS', 2))) 354 | 355 | mdb.models['one'].Equation(name='C00L_1', terms=((1.0, 'C00L', 1), (-1.0, 'C000', 1), (-1.0, 'REFS', 3))) 356 | mdb.models['one'].Equation(name='C00L_2', terms=((1.0, 'C00L', 2), (-1.0, 'C000', 2), (-1.0, 'REFS', 2))) 357 | mdb.models['one'].Equation(name='C00L_3', terms=((1.0, 'C00L', 3), (-1.0, 'C000', 3), (-1.0, 'REFD', 3))) 358 | 359 | mdb.models['one'].Equation(name='CLL0_1', terms=((1.0, 'CLL0', 1), (-1.0, 'C000', 1), (-1.0, 'REFD', 1), (-1.0, 'REFS', 1))) 360 | mdb.models['one'].Equation(name='CLL0_2', terms=((1.0, 'CLL0', 2), (-1.0, 'C000', 2), (-1.0, 'REFS', 1), (-1.0, 'REFD', 2))) 361 | mdb.models['one'].Equation(name='CLL0_3', terms=((1.0, 'CLL0', 3), (-1.0, 'C000', 3), (-1.0, 'REFS', 3), (-1.0, 'REFS', 2))) 362 | 363 | mdb.models['one'].Equation(name='CL0L_1', terms=((1.0, 'CL0L', 1), (-1.0, 'C000', 1), (-1.0, 'REFD', 1), (-1.0, 'REFS', 3))) 364 | mdb.models['one'].Equation(name='CL0L_2', terms=((1.0, 'CL0L', 2), (-1.0, 'C000', 2), (-1.0, 'REFS', 1), (-1.0, 'REFS', 2))) 365 | mdb.models['one'].Equation(name='CL0L_3', terms=((1.0, 'CL0L', 3), (-1.0, 'C000', 3), (-1.0, 'REFS', 3), (-1.0, 'REFD', 3))) 366 | 367 | mdb.models['one'].Equation(name='C0LL_1', terms=((1.0, 'C0LL', 1), (-1.0, 'C000', 1), (-1.0, 'REFS', 1), (-1.0, 'REFS', 3))) 368 | mdb.models['one'].Equation(name='C0LL_2', terms=((1.0, 'C0LL', 2), (-1.0, 'C000', 2), (-1.0, 'REFD', 2), (-1.0, 'REFS', 2))) 369 | mdb.models['one'].Equation(name='C0LL_3', terms=((1.0, 'C0LL', 3), (-1.0, 'C000', 3), (-1.0, 'REFS', 2), (-1.0, 'REFD', 3))) 370 | 371 | mdb.models['one'].Equation(name='CLLL_1', terms=((1.0, 'CLLL', 1), (-1.0, 'C000', 1), (-1.0, 'REFD', 1), (-1.0, 'REFS', 1), (-1.0, 'REFS', 3))) 372 | mdb.models['one'].Equation(name='CLLL_2', terms=((1.0, 'CLLL', 2), (-1.0, 'C000', 2), (-1.0, 'REFS', 1), (-1.0, 'REFD', 2), (-1.0, 'REFS', 2))) 373 | mdb.models['one'].Equation(name='CLLL_3', terms=((1.0, 'CLLL', 3), (-1.0, 'C000', 3), (-1.0, 'REFS', 3), (-1.0, 'REFS', 2), (-1.0, 'REFD', 3))) 374 | 375 | #************************************************************************************************************************************************************************************* 376 | #Boundaries 377 | mdb.models['one'].DisplacementBC(amplitude=UNSET, createStepName= 378 | 'Initial', distributionType=UNIFORM, fieldName='', fixed=OFF, localCsys= 379 | None, name='Fest', region= 380 | mdb.models['one'].rootAssembly.sets['C000'], u1=0.0, u2=0.0, u3= 381 | 0.0, ur1=UNSET, ur2=UNSET, ur3=UNSET) 382 | 383 | mdb.models['one'].DisplacementBC(amplitude=UNSET, createStepName= 384 | 'ApplyTension', distributionType=UNIFORM, fieldName='', fixed=OFF, localCsys= 385 | None, name='InitialDisp', region= 386 | mdb.models['one'].rootAssembly.sets['REFD'], u1=0.10, u2=UNSET, 387 | u3=UNSET, ur1=UNSET, ur2=UNSET, ur3=UNSET) 388 | 389 | #************************************************************************************************************************************************************************************** 390 | #Create Job 391 | #************************************************************************************************************************************************************************************** 392 | if SubmitJob == True: 393 | myJob=mdb.Job(name=jobName, model='one', description='') 394 | #mdb.jobs['AnandPBCTest'].writeInput(consistencyChecking=OFF) 395 | mdb.jobs[jobName].submit(consistencyChecking=OFF) 396 | mdb.jobs[jobName].waitForCompletion() 397 | if WriteInput == True: 398 | myJob=mdb.Job(name=jobName, model='one', description='') 399 | mdb.jobs[jobName].writeInput(consistencyChecking=OFF) 400 | 401 | 402 | #************************************************************************************************************************************************************************************** 403 | #Postprocessing 404 | #************************************************************************************************************************************************************************************** 405 | 406 | if Postprocessing == True: 407 | #Compute Stress Strain: 408 | if System == 'Linux': 409 | MicroODB=session.openOdb(name='/home/yourDir' + jobName + '.odb') 410 | elif System == 'Windows': 411 | MicroODB=session.openOdb(name= jobName + '.odb') 412 | 413 | Micro_Assemb=MicroODB.rootAssembly 414 | Micro_Inst=Micro_Assemb.instances['MIKROMECH_8MAL8'] 415 | 416 | #Define Steps for PostProcessing 417 | Step=['ApplyTension'] 418 | #Initiate Data storage list 419 | Data=[] 420 | 421 | # get Max Load after Loadstep1 422 | elSet = Micro_Inst.elementSets['ALLES'] 423 | 424 | #Go through all Steps 425 | for ii in Step: 426 | 427 | Frames=MicroODB.steps[ii].frames 428 | #Go through all Frames 429 | for iFrame in Frames: 430 | 431 | #Define subsets to evaluate Stress and Strain 432 | elSet=Micro_Inst.elementSets['ALLES'] 433 | S_subset=iFrame.fieldOutputs['S'].getSubset(region=elSet,position=CENTROID) 434 | E_subset=iFrame.fieldOutputs['E'].getSubset(region=elSet,position=CENTROID) 435 | S_Val1=S_subset.values 436 | E_Val1=E_subset.values 437 | 438 | NumEl=len(S_Val1) 439 | 440 | #Get Stress 441 | S_Cum1=0. 442 | for v in S_Val1: 443 | S_Cum1+=v.data[0] 444 | 445 | #Get Strain 446 | E_Cum1=0. 447 | for v in E_Val1: 448 | E_Cum1+=v.data[0] 449 | #accumulate absolute time 450 | 451 | if ii == 'ApplyTension': 452 | Data.append([iFrame.frameId, iFrame.frameValue, S_Cum1/NumEl, E_Cum1 / NumEl]) 453 | elif ii == 'Relaxation1': 454 | Data.append([iFrame.frameId, iFrame.frameValue + timeApplyDisp ,S_Cum1/NumEl, E_Cum1/NumEl]) 455 | elif ii == 'ApplyCompression': 456 | Data.append([iFrame.frameId, iFrame.frameValue + timeApplyDisp + timeRelaxation ,S_Cum1/NumEl, E_Cum1/NumEl]) 457 | elif ii == 'Relaxation2': 458 | Data.append([iFrame.frameId, iFrame.frameValue + 2*timeApplyDisp + timeRelaxation ,S_Cum1/NumEl, E_Cum1/NumEl]) 459 | 460 | #Export Results textfile (additional) 461 | file=open("Test_results.txt","w") 462 | file.write("Step: %s" % ii) 463 | file.write("-------------------------------------------------\n") 464 | file.write("Creep Model: %s \n" % CreepType) 465 | file.write("-------------------------------------------------\n") 466 | file.write("%s %s %s %s" %('StepID', 'FrameValue', 'Average_Stress_S11', 'Average_Strain_E11')) 467 | file.write("\n") 468 | for ii in Data: 469 | file.write("%s %s %s %s" %(ii[0],ii[1],ii[2], ii[3])) 470 | file.write("\n") 471 | 472 | file.close() 473 | #Append Data to DataExport for all Parametersets 474 | DataExport.append(Data) 475 | 476 | #Export Data 477 | ResultPickle='Results.p' 478 | pickle.dump(DataExport, open(ResultPickle,'wb')) 479 | print "Analysis Finished" 480 | 481 | --------------------------------------------------------------------------------