Source code for genericROM.IO.ZsetInputReader

# -*- coding: utf-8 -*-
#
# This file is subject to the terms and conditions defined in
# file 'LICENSE', which is part of this source code package.
#
#


import os, sys
try:
    from mpi4py import MPI
except ImportError:# pragma: no cover
    print("MPI capabilities not available")
import numpy as np
from pathlib import Path

from Mordicus.IO.InputReaderBase import InputReaderBase
from Muscat.IO import ZebulonIO as ZIO


knownLoadingTags = ["pressure", "centrifugal", "temperature", "radiation", "convection_heat_flux"]
knownZmatLaws = ["gen_evp", "visco_aniso_damage", "linear_viscoelastic", "odpointm_cmo"]
knownProblemTypes = ["mechanical", "thermal_transient"]
solutionNames = {"mechanical":"U", "thermal_transient":"T"}


[docs] def ReadInputTimeSequence(inputFileName): """ Functional API Reads the time sequence from the Z-set input file "inputFileName" (.inp) (may be different from the ones defined in the solution file if the solver chose to solve at additional time steps) Parameters ---------- inputFileName : str Z-set input file Returns ------- np.ndarray of size (numberOfSnapshots,) """ reader = ZsetInputReader(inputFileName=inputFileName) return reader.ReadInputTimeSequence()
[docs] def ConstructInitialCondition(inputFileName): """ Functional API Constructs the initial condition defined in the Z-set input file "inputFileName" (.inp) Parameters ---------- inputFileName : str Z-set input file Returns ------- InitialCondition object defining an initial condition """ reader = ZsetInputReader(inputFileName=inputFileName) return reader.ConstructInitialCondition()
[docs] def ConstructLoadingsList(inputFileName, loadingTags = None): """ Constructs the loadings defined in the Z-set input file "inputFileName" (.inp) Parameters ---------- inputFileName : str Z-set input file Returns ------- list list of loadings, each one having one of the formats defined in Containers.Loadings """ reader = ZsetInputReader(inputFileName=inputFileName) return reader.ConstructLoadingsList(loadingTags)
[docs] def ConstructConstitutiveLawsList(inputFileName): """ Constructs the constitutive laws defined in the Z-set input file "inputFileName" (.inp) Parameters ---------- inputFileName : str Z-set input file Returns ------- list list of constitutive laws, each one having one of the formats defined in Containers.ConstitutiveLaws """ reader = ZsetInputReader(inputFileName=inputFileName) return reader.ConstructConstitutiveLawsList()
[docs] class ZsetInputReader(InputReaderBase): """ Class containing a reader for Z-set input file Attributes ---------- inputFileName : str, must be defined if string is None name of the Z-set input file (.inp) string : str, must be defined if inputFileName is None content of a Z-set input file inputFile : list list containing the input file as parsed by Muscat.IO.ZebulonIO rootpath : str, must be defined if string is not None list containing the input file as parsed by Muscat.IO.ZebulonIO problemType : str Z-set type of problem : "mechanical" or "thermal_transient" """ def __init__(self, inputFileName = None, string = None, rootpath = None): super(ZsetInputReader, self).__init__() self.inputFileName = inputFileName self.string = string if inputFileName is None and string is None:# pragma: no cover raise("inputFileName and string cannot be both None") if inputFileName is not None and string is not None:# pragma: no cover raise("inputFileName and string cannot be both specified") if string is not None and rootpath is None:# pragma: no cover raise("when string is not None, rootpath must be defined") if inputFileName is not None: assert isinstance(inputFileName, str) self.inputFile = ZIO.ReadInp2(fileName = inputFileName) self.rootpath = os.path.dirname(self.inputFileName) else: self.inputFile = ZIO.ReadInp2(string = string, rootpath = rootpath) self.rootpath = rootpath if self.rootpath == "":# pragma: no cover self.rootpath = "." self.problemType = ZIO.GetProblemType(self.inputFile) assert self.problemType in knownProblemTypes, "problemType "+self.problemType+" must refer be among "+str(knownProblemTypes)
[docs] def ReadInputTimeSequence(self): """ Reads the time sequence (may be different from the ones defined in the solution file if the solver chose to solve at additional time steps) Returns ------- np.ndarray of size (numberOfSnapshots,) """ return ZIO.GetInputTimeSequence(self.inputFile)
[docs] def ConstructInitialCondition(self): """ Constructs the initial condition Returns ------- InitialCondition object defining an initial condition """ zSetInitialCondition = ZIO.GetInitDofValues(self.inputFile) solutionName = solutionNames[self.problemType] from genericROM.Containers.InitialConditions import InitialCondition initialCondition = InitialCondition.InitialCondition() if zSetInitialCondition[0] == 'uniform': dataType = "scalar" data = float(zSetInitialCondition[1]) elif zSetInitialCondition[0] == 'file': # pragma: no cover dataType = "vector" data = ZIO.ReadBinaryFile(self.rootpath + os.sep + zSetInitialCondition[1]) initialCondition.SetDataType(solutionName, dataType) initialCondition.SetInitialSnapshot(solutionName, data) return initialCondition
[docs] def ConstructLoadingsList(self, loadingTags = None): """ Constructs the loadings, possibily a subset of loading using the parameter loadingTags Parameters ---------- loadingTags : list, optional list of str, among knownLoadingTags Returns ------- list list of loadings, each one having one of the formats defined in Containers.Loadings """ if not loadingTags: loadingTags = knownLoadingTags inputTimeSequence = self.ReadInputTimeSequence() tables = ZIO.GetTables(self.inputFile) zSetLoadings = ZIO.GetLoadings(self.inputFile) loadings = [] for key, value in zSetLoadings.items(): if key in loadingTags: for loadList in zSetLoadings[key]: for load in loadList: loadings.append(self.ConstructOneLoading(key, load, tables, inputTimeSequence)) else: print("Loading '" + key + "' in inputFile but not among : " + str([key for key in loadingTags]) + ", not constructed") return loadings
[docs] def ConstructOneLoading(self, key, load, tables, inputTimeSequence): """ Constructs one loading Parameters ---------- key : str Zset keyword for the loading load : list list containing the boundary condition data as defined in Muscat.IO.ZebulonIO tables : dict list containing the tables data as defined in Muscat.IO.ZebulonIO inputTimeSequence : list or 1D np.ndarray time sequence defined in the Z-set input file Returns ------- LoadingBase the constructed loading in one of the formats defined in Containers.Loadings """ set = load[0] if key == "pressure": from genericROM.Containers.Loadings import PressureBC loading = PressureBC.PressureBC("U", set) if 'file' in load: sequence = tables[load[3]] name = load[2] else: sequence = tables[load[2]] name = "scalar" coefficients = {} fieldsMap = {} coefficients[float(sequence["time"][0])] = sequence["value"][0] fieldsMap[sequence["time"][0]] = name lastTimeCycleLoading = float(sequence["time"][-1]) # to deal with possible rounding when converting str to float if inputTimeSequence[-1]/lastTimeCycleLoading >= (1.-1.e-5)*(int(inputTimeSequence[-1]/lastTimeCycleLoading)+1): nbeLoadingCycles = int(inputTimeSequence[-1]/lastTimeCycleLoading)+1 else: nbeLoadingCycles = max(int(inputTimeSequence[-1]/lastTimeCycleLoading),1) for j in range(nbeLoadingCycles): for i, time in enumerate(sequence["time"][1:]): coefficients[float(time) + j*lastTimeCycleLoading] = sequence["value"][i+1] fieldsMap[float(time) + j*lastTimeCycleLoading] = name loading.SetCoefficients(coefficients) loading.SetFieldsMap(fieldsMap) folder = self.rootpath + os.sep fileName = UpdateFileName(name) if name == "scalar": fields = {name: float(load[1])} else: fields = {name: ZIO.ReadBinaryFile(folder + fileName)} loading.SetFields(fields) return loading if key == "centrifugal": from genericROM.Containers.Loadings import Centrifugal loading = Centrifugal.Centrifugal("U", set) loadCleaned = [] for s in load: strippedS = s.strip("()") if len(strippedS) > 0: loadCleaned.append(strippedS) assert len(loadCleaned) == 7 and loadCleaned[0] != "square", "centrifugal only compatible with 3D cases and without 'square' option" center = [float(loadCleaned[1]), float(loadCleaned[2]), float(loadCleaned[3])] indexRotationAxis = int(loadCleaned[4][1:]) centrifugalCoefficient = float(loadCleaned[5]) sequence = tables[loadCleaned[6]] rotationVelocity = {} rotationVelocity[float(sequence["time"][0])] = sequence["value"][0] lastTimeCycleLoading = float(sequence["time"][-1]) # to deal with possible rounding when converting str to float if inputTimeSequence[-1]/lastTimeCycleLoading >= (1.-1.e-5)*(int(inputTimeSequence[-1]/lastTimeCycleLoading)+1): nbeLoadingCycles = int(inputTimeSequence[-1]/lastTimeCycleLoading)+1 else: nbeLoadingCycles = max(int(inputTimeSequence[-1]/lastTimeCycleLoading),1) for j in range(nbeLoadingCycles): for i, time in enumerate(sequence["time"][1:]): rotationVelocity[float(time) + j*lastTimeCycleLoading] = sequence["value"][i+1] centrifugalDirection = np.array([1.,0.,0.]*(indexRotationAxis==1)+\ [0.,1.,0.]*(indexRotationAxis==2)+\ [0.,0.,1.]*(indexRotationAxis==3)) loading.SetCenter(center) loading.SetDirection(centrifugalDirection) loading.SetCoefficient(centrifugalCoefficient) loading.SetRotationVelocity(rotationVelocity) return loading if key == "radiation": #cycles not taken into account yet from genericROM.Containers.Loadings import Radiation loading = Radiation.Radiation("T", set) stefanBoltzmannConstant = float(load[1]) coefficient = float(load[2]) sequence = tables[load[3]] Text = {} for i, time in enumerate(sequence["time"]): Text[float(time)] = coefficient*sequence["value"][i] loading.SetStefanBoltzmannConstant(stefanBoltzmannConstant) loading.SetText(Text) return loading if key == "convection_heat_flux": #cycles not taken into account yet from genericROM.Containers.Loadings import ConvectionHeatFlux loading = ConvectionHeatFlux.ConvectionHeatFlux("T", set) coefH = float(load[2]) coefficient = float(load[4]) sequence = tables[load[5]] h = {} h[sequence["time"][0]] = coefH h[sequence["time"][-1]] = coefH Text = {} for i, time in enumerate(sequence["time"]): Text[float(time)] = coefficient*sequence["value"][i] loading.SetH(h) loading.SetText(Text) return loading if key == "temperature": from genericROM.Containers.Loadings import Temperature loading = Temperature.Temperature("U", set) fieldsMap = {} fields = {} folder = self.rootpath + os.sep if 'base_temperature' in load[1] and 'max_temperature' in load[1]: taleName = load[1]['table'][0] timeTable = tables[taleName]['time'] fileTable = np.array(tables[taleName]['value'], dtype = str) for i in range(len(fileTable)): fileTable[i] += "|1" else: for info in load[1].values(): if isinstance(info, dict): timeTable = info['timeTable'] fileTable = info['fileTable'] lastTimeCycleLoading = float(timeTable[-1]) # to deal with possible rounding when converting str to float if inputTimeSequence[-1]/lastTimeCycleLoading >= (1.-1.e-5)*(int(inputTimeSequence[-1]/lastTimeCycleLoading)+1): nbeLoadingCycles = int(inputTimeSequence[-1]/lastTimeCycleLoading)+1 else: nbeLoadingCycles = max(int(inputTimeSequence[-1]/lastTimeCycleLoading),1) numberOfNodes = int(load[1]['rec_size'][0]) fieldsMap[float(timeTable[0])] = fileTable[0] for j in range(nbeLoadingCycles): for i, time in enumerate(timeTable[1:]): fieldsMap[time + j*lastTimeCycleLoading] = fileTable[i+1] fieldsMapTimes = np.array(list(fieldsMap.keys()), dtype = float) fieldsMapValues = np.array(list(fieldsMap.values()), dtype = str) loading.SetFieldsMap(fieldsMapTimes, fieldsMapValues) if 'base_temperature' in load[1] and 'max_temperature' in load[1]: temperatures0 = [load[1]['base_temperature'], load[1]['max_temperature']] temperatures = [0. for i in range(len(temperatures0))] for i, temperature in enumerate(temperatures0): if temperature[0] == 'file': fileName = UpdateFileName(temperature[1]) temperatures[i] = ZIO.ReadBinaryFile(folder+fileName) localnNodes = len(temperatures[i]) elif temperature[0] != 'constant':# pragma: no cover raise("temperature bc not valid") for i, temperature in enumerate(temperatures0): if temperature[0] == 'constant': temperatures[i] = float(temperature[1])*np.ones(localnNodes) #here, keys of fields are the coefficient, not the fileName for coef in fileTable: if coef not in fields: coefFloat = float(coef.split("|")[0]) fields[coef] = coefFloat*temperatures[1] + (1-coefFloat)*temperatures[0] else: readFiles = {} for file in fileTable: if isinstance(file, str): fileToRead = file.split("|")[0] if fileToRead not in readFiles: fileName = UpdateFileName(fileToRead) readFiles[fileToRead] = ZIO.ReadBinaryFile(folder+fileName) for file in fileTable: if file not in fields: if isinstance(file, str): fileToRead = file.split("|")[0] fields[file] = readFiles[fileToRead] else: fields[str(file)] = file loading.SetFields(fields) return loading
[docs] def ConstructConstitutiveLawsList(self): """ Constructs the constitutive laws Returns ------- list list of constitutive laws, each one having one of the formats defined in Containers.ConstitutiveLaws """ materialFiles = ZIO.GetMaterialFiles(self.inputFile) if list(materialFiles.keys()) == ['ALLELEMENT']: rotationData = [ZIO.GetFromInp(self.inputFile, {'3':['material'], '1':['rotation']})] else: rotationData = [ZIO.GetFromInp(self.inputFile, {'3':['material'], '2':['elset', matFile], '1':['rotation']}) for matFile in materialFiles.keys()] constitutiveLawsList = [] for i, (set, matFile) in enumerate(materialFiles.items()): rotMat = np.eye(3) if len(rotationData[i])>0: iterator = iter(rotationData[i][0]) next(iterator) for axis in iterator: if axis[0] == "x1": rotMat[0,:] = np.array([axis[1], axis[2], axis[3]], dtype = float) elif axis[0] == "x2": rotMat[1,:] = np.array([axis[1], axis[2], axis[3]], dtype = float) else: raise Exception(axis[0]+" not recognized as axis") rotMat[2,:] = np.cross(rotMat[0,:], rotMat[1,:]) constitutiveLawsList.append(self.ConstructOneConstitutiveLaw(matFile, set, rotMat)) return constitutiveLawsList
[docs] def ConstructOneConstitutiveLaw(self, materialFileName, set, rotMat): """ Constructs one constitutive law Parameters ---------- materialFileName : str, max 8 characters name of the file containing the definition on the constitutive law in Z-set set : str element set on which the constitutive law is defined Returns ------- ConstitutiveLawBase the constructed loading in one of the formats defined in Containers.ConstitutiveLaws """ folder = self.rootpath + os.sep behavior = ZIO.GetBehavior(folder + materialFileName) if self.problemType == "thermal_transient": from genericROM.Containers.ConstitutiveLaws import ThermalConstitutiveLaw as TCL constitutiveLaw = TCL.ThermalConstitutiveLaw(set) constitutiveLaw.SetBehavior(behavior) data = ZIO.ReadInp2(folder + materialFileName, startingNstar=3) conductivityTemp = [] conductivityVal = [] for step in ZIO.GetFromInp(data,{'3':['behavior', 'thermal'], '2':['conductivity', 'isotropic']})[0][2:]: conductivityTemp.append(float(step[1])) conductivityVal.append(float(step[0])) constitutiveLaw.SetThermalConductivity(np.array(conductivityTemp), np.array(conductivityVal)) capacityTemp = [] capacityVal = [] for step in ZIO.GetFromInp(data,{'3':['behavior', 'thermal'], '2':['coefficient']})[0][2:]: capacityTemp.append(float(step[1])) capacityVal.append(float(step[0])) constitutiveLaw.SetThermalCapacity(np.array(capacityTemp), np.array(capacityVal)) return constitutiveLaw if self.problemType == "mechanical": behavior = ZIO.GetBehavior(folder + materialFileName) density = ZIO.GetDensity(folder + materialFileName) return ConstructOneMechanicalConstitutiveLaw(folder, materialFileName, behavior, rotMat, density, set)
[docs] def ConstructOneMechanicalConstitutiveLaw(folder, materialFileName, behavior, rotMat = np.eye(3), density = None, set = "ALLELEMENT"): """ Constructs one Z-mat constitutive law Parameters ---------- folder : str folder containing the Z-mat file materialFileName : str, max 8 characters name of the file containing the definition on the constitutive law in Z-set behavior : str name of the Z-mat behavior, "gen_evp" or "linear_elastic" density : float, optional density of the material (must be specified if the problem features centrifugal effect, for instance) set : str, optional element set on which the constitutive law is defined Returns ------- ZmatConstitutiveLaw or MecaUniformLinearElasticity """ if behavior in knownZmatLaws: from genericROM.Containers.ConstitutiveLaws import ZmatConstitutiveLaw as ZCL constitutiveLaw = ZCL.ZmatConstitutiveLaw(set) constitutiveLaw.SetDensity(density) constitutiveLaw.SetRotation(rotMat) constitutiveLaw.SetBehavior(behavior) constitutiveLawVariables = {} curFolder = os.getcwd() os.chdir(folder) suffix = UpdateFileName("") pythonExecutable = sys.executable pyumatFolder = "pyumat" code=""" import sys from genericROM.External."""+pyumatFolder+""" import py3umat as pyumat import numpy as np cmname = '"""+materialFileName+"""' nstatv = 100 ndi = 3 nshr = 3 ntens = ndi+nshr stress = np.zeros(6) statev = np.zeros(nstatv) ddsdde = np.zeros((6,6),dtype=float) sse = 0. spd = 0. scd = 0. rpl = 0. ddsddt = np.zeros(ntens) drplde = np.zeros(ntens) drpldt = 0. stran = np.zeros(6) dstran = np.zeros(6) r2 = 2 timesim = np.array([0.,0.1]) dtime = 0.1 temperature = 20. dtemp = 0. predef = np.zeros(1) dpred = np.zeros(1) nprops = 1 props = np.zeros(nprops) coords = np.zeros(3, dtype= float) drot = np.zeros((3,3), dtype= float) pnewdt = 1. celent = 1. dfgrd0 = np.zeros((3,3), dtype = float) dfgrd1 = np.zeros((3,3), dtype = float) noel = -1 npt = -1 kslay = 1 kspt = 1 kstep = np.array([1,1,0,0], dtype=int) kinc = 1 ddsddeNew = pyumat.umat(stress=stress,statev=statev,ddsdde=ddsdde,sse=sse,spd=spd,scd=scd,rpl=rpl,ddsddt=ddsddt,drplde=drplde,drpldt=drpldt,stran=stran,dstran=dstran,time=timesim,dtime=dtime, temp=temperature,dtemp=dtemp,predef=predef,dpred=dpred,cmname=cmname,ndi=ndi,nshr=nshr,ntens=ntens,nstatv=nstatv,props=props,nprops=nprops,coords=coords,drot=drot,pnewdt=pnewdt,celent=celent,dfgrd0=dfgrd0, dfgrd1=dfgrd1,noel=noel,npt=npt,kslay=kslay,kspt=kspt,kstep=kstep,kinc=kinc)""" import tempfile tmpDir = tempfile.mkdtemp()+os.sep f = open(tmpDir+"materialtest"+suffix+".py","w") f.write(code) f.close() import subprocess import signal def handler(signum, frame):# pragma: no cover raise Exception("end of time") signal.signal(signal.SIGALRM, handler) out = None while out == None: try: signal.alarm(10) out = subprocess.run([pythonExecutable, tmpDir+"materialtest"+suffix+".py"], stdout=subprocess.PIPE).stdout.decode("utf-8") except:# pragma: no cover True signal.alarm(0) outlines = out.split(u"\n") seplines = [] for i in range(len(outlines)): if "============================================" in outlines[i]: seplines.append(i) if "done with material file reading" in outlines[i]: lastline = i outlines = outlines[seplines[-2]:] names = ['Flux', 'Grad','var_int','var_aux','Extra Zmat'] def parser(fname, obj): cont = 1 line = 0 while line < len(outlines): if fname in outlines[line]: line +=1 while any(word in outlines[line].strip() for word in names) == False and len(outlines[line].strip())>0 and outlines[line][0] != "=": if outlines[line][0] != " ": break# pragma: no cover fnames = outlines[line].strip().split() for i in range(len(fnames)): if '--' in fnames[i]: cont = 0 if cont == 1: obj.append(fnames[i].split("(")[0]) line +=1 else: line +=1 constitutiveLawVariables['flux'] = [] constitutiveLawVariables['grad'] = [] constitutiveLawVariables['var_int'] = [] constitutiveLawVariables['var_aux'] = [] constitutiveLawVariables['var_extra'] = [] parser("Flux", constitutiveLawVariables['flux']) parser("Grad", constitutiveLawVariables['grad']) parser("var_int", constitutiveLawVariables['var_int']) parser("var_aux", constitutiveLawVariables['var_aux']) parser("Extra Zmat", constitutiveLawVariables['var_extra']) #print("constitutiveLawVariables['var_int'] =", constitutiveLawVariables['var_int']) #print("constitutiveLawVariables['var_aux'] =", constitutiveLawVariables['var_aux']) #print("constitutiveLawVariables['var_extra'] =", constitutiveLawVariables['var_extra']) os.system("rm -rf "+tmpDir+"materialtest"+suffix+".py") constitutiveLawVariables['var'] = constitutiveLawVariables['grad'] + constitutiveLawVariables['flux'] + constitutiveLawVariables['var_int'] + constitutiveLawVariables['var_aux'] + constitutiveLawVariables['var_extra'] #Initialize Zmat quantities constitutiveLawVariables['cmname'] = materialFileName constitutiveLawVariables['nstatv'] = len(constitutiveLawVariables['var_int']) + len(constitutiveLawVariables['var_aux']) + len(constitutiveLawVariables['var_extra']) constitutiveLawVariables['ndi'] = 3 constitutiveLawVariables['nshr'] = 3 constitutiveLawVariables['ntens'] = constitutiveLawVariables['ndi'] + constitutiveLawVariables['nshr'] constitutiveLawVariables['statev'] = np.zeros(constitutiveLawVariables['nstatv']) constitutiveLawVariables['ddsddt'] = np.zeros(constitutiveLawVariables['ntens']) constitutiveLawVariables['drplde'] = np.zeros(constitutiveLawVariables['ntens']) constitutiveLawVariables['stress'] = np.zeros(6) constitutiveLawVariables['ddsdde'] = np.zeros((6,6),dtype=float) constitutiveLawVariables['sse'] = 0. constitutiveLawVariables['spd'] = 0. constitutiveLawVariables['scd'] = 0. constitutiveLawVariables['rpl'] = 0. constitutiveLawVariables['drpldt'] = 0. constitutiveLawVariables['stran'] = np.zeros(6) constitutiveLawVariables['dstran'] = np.zeros(6) constitutiveLawVariables['timesim'] = np.array([0.,0.1]) constitutiveLawVariables['dtime'] = 1. constitutiveLawVariables['temperature'] = 0. constitutiveLawVariables['dtemp'] = 0. constitutiveLawVariables['predef'] = np.zeros(1) constitutiveLawVariables['dpred'] = np.zeros(1) constitutiveLawVariables['nprops'] = 1 constitutiveLawVariables['props'] = np.zeros(constitutiveLawVariables['nprops']) constitutiveLawVariables['coords'] = np.zeros(3, dtype= float) constitutiveLawVariables['drot'] = np.zeros((3,3), dtype= float) constitutiveLawVariables['pnewdt'] = 1. constitutiveLawVariables['celent'] = 1. constitutiveLawVariables['dfgrd0'] = np.zeros((3,3), dtype = float) constitutiveLawVariables['dfgrd1'] = np.zeros((3,3), dtype = float) constitutiveLawVariables['noel'] = 0 constitutiveLawVariables['npt'] = 0 constitutiveLawVariables['kslay'] = 1 constitutiveLawVariables['kspt'] = 1 constitutiveLawVariables['kstep'] = np.array([1,1,0,0], dtype=int) constitutiveLawVariables['kinc'] = 1 constitutiveLaw.SetConstitutiveLawVariables(constitutiveLawVariables) os.chdir(curFolder) return constitutiveLaw if behavior == "linear_elastic": from genericROM.Containers.ConstitutiveLaws import MecaUniformLinearElasticity as MULE data = ZIO.ReadInp2(folder + materialFileName, startingNstar=3) elasticity = ZIO.GetFromInp(data,{'3':['behavior'], '2':['elasticity']})[0] ranks = {} for i in range(3): ranks[elasticity[i][0]] = i if elasticity[ranks['elasticity']][1] != "isotropic": raise ValueError("only isotropic elasticity available for linear-elastic laws")#pragma: no cover young = float(elasticity[ranks['young']][1]) if young =="temperature": raise ValueError("only uniform young available for linear-elastic laws")#pragma: no cover poisson = float(elasticity[ranks['poisson']][1]) return MULE.TestMecaConstitutiveLaw(set, young, poisson, density) else: raise ValueError("behavior law of type "+behavior+" not known")#pragma: no cover
[docs] def UpdateFileName(fileName): """ Modifies the filename in parallel with distributed memory settings Parameters ---------- fileName : str filename to be updated Returns ------- str updated filename """ if MPI.COMM_WORLD.Get_size() > 1: # pragma: no cover stem = str(Path(fileName).stem) suffix = str(Path(fileName).suffix) fileName = stem + "-" + str(MPI.COMM_WORLD.Get_rank()+1).zfill(3) + suffix return fileName
if __name__ == "__main__":# pragma: no cover from genericROM import RunTestFile RunTestFile(__file__)