Edullista kotimaista pelikauppaa vuodesta 2000
# Assign mesh size part = mdb.models[modelName].parts['Beam'] part.seedPart(size=size, deviationFactor=0.1) part.generateMesh()
# parameter_sweep.py from abaqus import * from abaqusConstants import * from caeModules import * import os modulus_values = [1e5, 2e5, 3e5, 4e5] output_file = open('sweep_results.txt', 'w') output_file.write('YoungsModulus, MaxDisplacement\n')
# Extract max displacement from .odb odb = openOdb(path=jobName + '.odb') lastFrame = odb.steps['ApplyLoad'].frames[-1] displacement = lastFrame.fieldOutputs['U'] max_disp = max([value.dataDouble for value in displacement.values]) output_file.write(f'E, max_disp\n') odb.close()
print("Batch post-processing done.") Goal: Build a simple dialog to input beam length and force. python scripts for abaqus learn by example pdf
# Get last step, last frame step = odb.steps.values()[-1] frame = step.frames[-1] # Reaction force (RF) rf_field = frame.fieldOutputs['RF'] total_RF = sum([value.data[1] for value in rf_field.values]) # Y-direction sum output_lines.append(f"filename, Total RF = total_RF:.2f") odb.close() with open('reaction_forces.csv', 'w') as f: f.write("ODB_File, Total_RF_Y\n") f.write("\n".join(output_lines))
# Extract von Mises stress at fixed coordinates odb = openOdb(jobName + '.odb') frame = odb.steps['ApplyLoad'].frames[-1] stress = frame.fieldOutputs['S'] # Find stress at (length, 0) – tip tip_value = None for val in stress.values: if abs(val.nodeLabel - some_node_label) < 1e-3: # simplified tip_value = val.mises break results.append((size, tip_value)) odb.close() print("Mesh convergence data:", results)
# mesh_convergence.py mesh_sizes = [10.0, 5.0, 2.0, 1.0, 0.5] results = [] for size in mesh_sizes: # Create model (same as Example 1) modelName = f'MeshStudy_size' # ... build model ... # Assign mesh size part = mdb
def getFirstDialog(self): return BeamPlugin(self) toolset = getAFXApp().getAFXMainWindow().getPluginToolset() toolset.registerGuiMenuButton( buttonText='Parametric Beam', object=BeamForm(None), messageId=AFXMode.ID_ACTIVATE, icon=None, kernelInitString='execfile("beam_script.py")' )
# Run job jobName = f'Job_E_int(E)' myJob = mdb.Job(name=jobName, model=modelName) myJob.submit() myJob.waitForCompletion()
# Clean up del mdb.models[modelName] output_file.close() print("Parameter sweep complete. Check sweep_results.txt") owner): AFXForm. init (self
class BeamForm(AFXForm): def (self, owner): AFXForm. init (self, owner) self.lengthKw = AFXFloatKeyword(self, 'length', True, 100.0) self.forceKw = AFXFloatKeyword(self, 'force', True, 1000.0)
Node label detection requires careful handling – in practice, use getClosest() on a set. 6. Example 4: Batch Post-Processing Multiple ODB Files Goal: Extract reaction force from many simulation results in a folder.