Source code for argiope.models

import numpy as np
import pandas as pd
import os
import inspect
import argiope
import subprocess
import time
from string import Template

MODPATH = os.path.dirname(inspect.getfile(argiope))

################################################################################
# MODEL DEFINITION
################################################################################


[docs]class Model(argiope.utils.Container): """ Model meta class. """ def __init__(self, label, parts, steps, materials, amplitude=None, solver="abaqus", solver_path="", workdir="./workdir", verbose=False, cpus = 1): self.label = label self.parts = parts self.steps = steps self.amplitude = amplitude self.materials = materials self.solver = solver self.solver_path = solver_path self.workdir = workdir self.verbose = verbose self.cpus = cpus self.data = {}
[docs] def make_directories(self): """ Checks if required directories exist and creates them if needed. """ if os.path.isdir(self.workdir) == False: os.mkdir(self.workdir)
[docs] def run_simulation(self): """ Runs the simulation. """ self.make_directories() t0 = time.time() if self.verbose: print('#### RUNNING "{0}" USING SOLVER "{1}"'.format(self.label, self.solver.upper())) if self.solver == "abaqus": command = '{0} job={1} input={1}.inp cpus={2} interactive ask_delete=OFF'.format( self.solver_path, self.label, self.cpus) process = subprocess.Popen(command, cwd=self.workdir, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) for line in iter(process.stdout.readline, b''): line = line.rstrip().decode('utf8') print(" ", line) t1 = time.time() if self.verbose: print(' => RAN {0}: DURATION = {1:.2f}s'.format( self.label, t1 - t0))
[docs] def run_postproc(self): """ Runs the post-proc script. """ t0 = time.time() if self.verbose: print('#### POST-PROCESSING "{0}" USING POST-PROCESSOR "{1}"'.format(self.label, self.solver.upper())) if self.solver == "abaqus": command = '{0} viewer noGUI={1}_abqpp.py'.format( self.solver_path, self.label) process = subprocess.Popen( command, cwd=self.workdir, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) for line in iter(process.stdout.readline, b''): line = line.rstrip().decode('utf8') print(" ", line) t1 = time.time() if self.verbose: print(' => POST-PROCESSED {0}: DURATION = {1:.2f}s >'.format(self.label, t1 - t0))
################################################################################ ################################################################################ # PART DEFINITION ################################################################################
[docs]class Part(argiope.utils.Container): def __init__(self, gmsh_path="gmsh", file_name="dummy", workdir="./", gmsh_space=2, gmsh_options="", element_map=None, material_map=None): self.gmsh_path = gmsh_path self.file_name = file_name self.workdir = workdir self.gmsh_space = gmsh_space self.gmsh_options = gmsh_options self.mesh = None self.element_map = element_map self.material_map = material_map
[docs] def run_gmsh(self): """ Makes the mesh using gmsh. """ argiope.utils.run_gmsh(gmsh_path=self.gmsh_path, gmsh_space=self.gmsh_space, gmsh_options=self.gmsh_options, name=self.file_name + ".geo", workdir=self.workdir) self.mesh = argiope.mesh.read_msh( self.workdir + self.file_name + ".msh")
def make_mesh(self): self.preprocess_mesh() self.run_gmsh() self.postprocess_mesh()
################################################################################ ################################################################################