def create_plot_data_exp_nth_cycle(name, nth_cycle, figure_path=None, figure_name=None): #============================================================================== # x,y label #============================================================================== xlabel = xylabels['axial_strain'] ylabel = xylabels['axial_stress'] #============================================================================== # plot lines #============================================================================== i = 0 marker_list = ['s', 'o', '^', 'D'] plot_data = PlotData() filename = ExperimentDirectory + name + '.csv' experiment = ExperimentData(filename) strain = experiment.obtainNthCycle('axial_strain', nth_cycle) stress = experiment.obtainNthCycle('axial_stress', nth_cycle) plot_data.addLine(strain * 100, stress, xlabel=xlabel, ylabel=ylabel, linelabel='', linewidth=2, linestyle='-', marker=None, markersize=12, color='auto') i += 1 plot_data.writeToFile(figure_path, figure_name)
def plot_exp_pv(names,item='axial_stress'): for name in names: experiment_log = ExperimentLog(ExperimentLogFile) experiment_log.output(name) regular = r'.*' load_type = experiment_log.obtainItem(name,'load_type',regular)[0] regular = r'\d+\.?\d*' temperature_mode = experiment_log.obtainItem(name,'temperature_mode',regular) if len(temperature_mode) == 1: temperature_list = [float(temperature_mode[0]), float(temperature_mode[0])] if len(temperature_mode) == 2: temperature_list = [float(temperature_mode[0]), float(temperature_mode[1])] d_out = float(experiment_log.obtainItem(name,'d_out',regular)[0]) gauge_length = float(experiment_log.obtainItem(name,'gauge_length',regular)[0]) axial_strain = float(experiment_log.obtainItem(name,'axial_strain',regular)[0]) angel_strain = float(experiment_log.obtainItem(name,'angel_strain',regular)[0]) equivalent_strain = float(experiment_log.obtainItem(name,'equivalent_strain',regular)[0]) period = float(experiment_log.obtainItem(name,'period',regular)[0]) axial_temperature_phase = float(experiment_log.obtainItem(name,'axial_temperature_phase',regular)[0]) exp_filename = ExperimentDirectory + name + '.csv' experiment = ExperimentData(exp_filename) cycle,peak,valley = experiment.obtainPeakValley(item) plt.plot(cycle,peak) plt.plot(cycle,valley) plt.xscale('log') # plt.yscale('log') plt.show() plt.close()
def create_plot_data_exp_half_life_cycle(figure_path=None,figure_name=None): #============================================================================== # x,y label #============================================================================== xlabel = xylabels['axial_strain'] ylabel = xylabels['axial_stress'] #============================================================================== # plot lines #============================================================================== i = 0 marker_list = ['s','o','^','D'] plot_data = PlotData() # for name in experiment_type_dict['TC-IF']: for name in ['08','16']: # print name filename = ExperimentDirectory + name + '.csv' experiment = ExperimentData(filename) # print experiment.half_life_cycle strain = experiment.obtainNthCycle('axial_strain',experiment.half_life_cycle) stress = experiment.obtainNthCycle('axial_stress',experiment.half_life_cycle) plot_data.addLine(strain*100, stress, xlabel=xlabel, ylabel=ylabel, linelabel='', linewidth=2, linestyle='-', marker=None, markersize=12, color='auto') i += 1 plot_data.writeToFile(figure_path,figure_name)
def plot_exp_vs_sim_pv(name,item='axial_stress',save_types=['.png','.pdf']): experiment_log = ExperimentLog(ExperimentLogFile) experiment_log.output(name) regular = r'.*' load_type = experiment_log.obtainItem(name,'load_type',regular)[0] regular = r'\d+\.?\d*' temperature_mode = experiment_log.obtainItem(name,'temperature_mode',regular) if len(temperature_mode) == 1: temperature_list = [float(temperature_mode[0]), float(temperature_mode[0])] if len(temperature_mode) == 2: temperature_list = [float(temperature_mode[0]), float(temperature_mode[1])] d_out = float(experiment_log.obtainItem(name,'d_out',regular)[0]) gauge_length = float(experiment_log.obtainItem(name,'gauge_length',regular)[0]) axial_strain = float(experiment_log.obtainItem(name,'axial_strain',regular)[0]) angel_strain = float(experiment_log.obtainItem(name,'angel_strain',regular)[0]) equivalent_strain = float(experiment_log.obtainItem(name,'equivalent_strain',regular)[0]) period = float(experiment_log.obtainItem(name,'period',regular)[0]) axial_temperature_phase = float(experiment_log.obtainItem(name,'axial_temperature_phase',regular)[0]) sim_filename = SimulationDirectory + name + '.csv' simulation = SimulationData(sim_filename,period) cycle,peak,valley = simulation.obtainPeakValley(item) plt.plot(cycle,peak,label='sim') plt.plot(cycle,valley,label='sim') exp_filename = ExperimentDirectory + name + '.csv' experiment = ExperimentData(exp_filename) cycle,peak,valley = experiment.obtainPeakValley(item) plt.plot(cycle,peak,label='exp') plt.plot(cycle,valley,label='exp') plt.xscale('log') # plt.yscale('log') plt.legend(loc=0) figure_path = ArticleFigureDirectory figure_name = name + '_' + item + '_pv' if not os.path.isdir(ArticleFigureDirectory): os.makedirs(ArticleFigureDirectory) print 'Create new directory:',ArticleFigureDirectory if figure_path <> None and figure_name<> None: for save_type in save_types: plt.savefig(figure_path + figure_name + save_type, dpi=150, transparent=True) print 'save as', figure_path + figure_name + save_type plt.show() plt.close()
def create_plot_data_exp_half_life_cycle(figure_path=None,figure_name=None): #============================================================================== # x,y label #============================================================================== xlabel = xylabels['axial_strain'] ylabel = xylabels['axial_stress'] #============================================================================== # plot lines #============================================================================== i = 0 marker_list = ['s','o','^','D'] plot_data = PlotData() for name in ['7116','7111','7115','7114']: filename = ExperimentDirectory + name + '.csv' experiment = ExperimentData(filename) strain = experiment.obtainNthCycle('axial_strain',experiment.half_life_cycle) stress = experiment.obtainNthCycle('axial_stress',experiment.half_life_cycle) plot_data.addLine(strain*100, stress, xlabel=xlabel, ylabel=ylabel, linelabel='', linewidth=2, linestyle='-', marker=None, markersize=12, color='auto') i += 1 material = material_in718() epsilon,sigma = material.plotCyclicStrengthCoefficient() plot_data.addLine(epsilon*100, sigma, xlabel=xlabel, ylabel=ylabel, linelabel='Ramberg-Osgood', linewidth=4, linestyle='--', marker=None, markersize=12, color='black') plot_data.writeToFile(figure_path,figure_name)
def create_plot_data_exp_temperature(figure_path=None,figure_name=None): #============================================================================== # x,y label #============================================================================== xlabel = xylabels['runing_time'] ylabel = xylabels['temperature'] #============================================================================== # plot lines #============================================================================== i = 0 marker_list = ['s','o','^','D'] plot_data = PlotData() # for name in ['30_0_','50_0_','70_0_','90_0_']: # for name in ['30_25_','50_25_','70_25_','90_25_']: # for name in ['30_50_','50_50_','70_50_','90_50_']: for name in ['30_67_','50_67_','70_67_','90_67_']: # for name in ['90_0_','90_25_','90_50_','90_67_']: # for name in ['70_0_','70_25_','70_50_','70_67_']: # for name in ['50_0_','50_25_','50_50_','50_67_']: # for name in ['30_0_','30_25_','30_50_','30_67_']: ExperimentDirectory = 'F:\\Cloud\\Database\\IN718\\Temperature2\\' filename = ExperimentDirectory + name + '.csv' experiment = ExperimentData(filename) time = experiment.runing_time temperature = experiment.temperature plot_data.addLine(time, temperature, xlabel=xlabel, ylabel=ylabel, linelabel='Exp.' + name.split('_')[0] + '%', linewidth=2, linestyle='--', marker='', markersize=6, color='auto') SimulationDirectory = 'F:\\Cloud\\Simulation\\Temperature\\' filename = SimulationDirectory + name + '.csv' simulation = SimulationData(filename,1) time = simulation.runing_time temperature = simulation.temperature plot_data.addLine(time, temperature, xlabel=xlabel, ylabel=ylabel, linelabel=name.split('_')[0] + '%', linewidth=2, linestyle='-', marker=None, markersize=12, color='auto') i += 1 plot_data.writeToFile(figure_path,figure_name)
def calc_material_in718(): material = Material() material.setName(name='IN718') name = '7101' #300C temperature = 300.0 material.setTemperature(temperature=temperature) youngs_modulus, poisson_ratio, shear_modulus = calculate_elastic_by_temperature_in718( temperature) material.setMonotonic(youngs_modulus=youngs_modulus, poisson_ratio=poisson_ratio, yield_stress=1121.9, K=1449.4, n=0.041214) name = '7103' #550C temperature = 550.0 material.setTemperature(temperature=temperature) youngs_modulus, poisson_ratio, shear_modulus = calculate_elastic_by_temperature_in718( temperature) material.setMonotonic(youngs_modulus=youngs_modulus, poisson_ratio=poisson_ratio, yield_stress=1081.6, K=1398.7, n=0.041366) name = '7102' #650C temperature = 650.0 material.setTemperature(temperature=temperature) youngs_modulus, poisson_ratio, shear_modulus = calculate_elastic_by_temperature_in718( temperature) material.setMonotonic(youngs_modulus=youngs_modulus, poisson_ratio=poisson_ratio, yield_stress=1056.7, K=1433.8, n=0.049103) exp_full_name = ExperimentDirectory + name + '.csv' exp = ExperimentData(exp_full_name) epsilon = exp.axial_strain sigma = exp.axial_stress plt.plot(epsilon, sigma) material.calculateStrengthCoefficient(epsilon, sigma) material.show() material.plotStrengthCoefficient() print material.K * 0.002**material.n return material
def create_plot_data(figure_path=None,figure_name=None): #============================================================================== # x,y label #============================================================================== xlabel = xylabels['axial_strain'] ylabel = xylabels['axial_stress'] #============================================================================== # plot lines #============================================================================== i = 0 marker_list = ['s','o','^','D'] plot_data = PlotData() experiment_log = ExperimentLog(ExperimentLogFile) for name in ['7101','7102','7103']: experiment_log.output(name) regular = r'.*' load_type = experiment_log.obtainItem(name,'load_type',regular)[0] regular = r'\d+\.?\d*' temperature_mode = experiment_log.obtainItem(name,'temperature_mode',regular) if len(temperature_mode) == 1: temperature_list = [float(temperature_mode[0]), float(temperature_mode[0])] if len(temperature_mode) == 2: temperature_list = [float(temperature_mode[0]), float(temperature_mode[1])] d_out = float(experiment_log.obtainItem(name,'d_out',regular)[0]) gauge_length = float(experiment_log.obtainItem(name,'gauge_length',regular)[0]) axial_strain = float(experiment_log.obtainItem(name,'axial_strain',regular)[0]) angel_strain = float(experiment_log.obtainItem(name,'angel_strain',regular)[0]) equivalent_strain = float(experiment_log.obtainItem(name,'equivalent_strain',regular)[0]) period = float(experiment_log.obtainItem(name,'period',regular)[0]) axial_temperature_phase = float(experiment_log.obtainItem(name,'axial_temperature_phase',regular)[0]) filename = ExperimentDirectory + name + '.csv' experiment = ExperimentData(filename) strain = experiment.axial_strain stress = experiment.axial_stress plot_data.addLine(strain*100, stress, xlabel=xlabel, ylabel=ylabel, linelabel='Exp.' + str(int(temperature_mode[0])+273)+'K', linewidth=2, linestyle='', marker=marker_list[i], markersize=12, color=color_list[i], skip=20) sim_filename = SimulationDirectory + name + '.csv' period = 200 simulation = SimulationData(sim_filename,period) strain = simulation.axial_strain stress = simulation.axial_stress plot_data.addLine(strain*100, stress, xlabel=xlabel, ylabel=ylabel, linelabel='Sim.' + str(int(temperature_mode[0])+273)+'K', linewidth=2, linestyle='-', marker=None, markersize=12, color=color_list[i]) i += 1 plot_data.writeToFile(figure_path,figure_name)
def workbench(name, loading_cycles=None, copy=True, film_coefficient=0.0, sink_temperature=0.0, temperature_list=[], thermal_strain_list=[0.0, -0.0], heat_flux=0.0, film_coefficient_outer=0.0, film_coefficient_inner=0.0, emissivity=0.95, sink_temperature_inner=293.15, sink_temperature_outer=293.15, outer_temperature=293.15): """ 某试件对应的边界条件下的数值模拟。 """ experiment_log = ExperimentLog(ExperimentLogFile) experiment_log.output(name) regular = r'.*' load_type = experiment_log.obtainItem(name, 'load_type', regular)[0] regular = r'\d+\.?\d*' temperature_mode = experiment_log.obtainItem(name, 'temperature_mode', regular) if temperature_list == []: if len(temperature_mode) == 1: temperature_list = [ float(temperature_mode[0]), float(temperature_mode[0]) ] if len(temperature_mode) == 2: temperature_list = [ float(temperature_mode[0]), float(temperature_mode[1]) ] d_out = float(experiment_log.obtainItem(name, 'd_out', regular)[0]) gauge_length = float( experiment_log.obtainItem(name, 'gauge_length', regular)[0]) axial_strain = float( experiment_log.obtainItem(name, 'axial_strain', regular)[0]) angel_strain = float( experiment_log.obtainItem(name, 'angel_strain', regular)[0]) equivalent_strain = float( experiment_log.obtainItem(name, 'equivalent_strain', regular)[0]) period = float(experiment_log.obtainItem(name, 'period', regular)[0]) axial_temperature_phase = float( experiment_log.obtainItem(name, 'axial_temperature_phase', regular)[0]) life = float(experiment_log.obtainItem(name, 'comments', regular)[0]) #============================================================================== # material #============================================================================== material = Material() material.setName(name='IN718') material.setTemperature(temperature=650.0) material.setMonotonic(youngs_modulus=167100.0, poisson_ratio=0.2886, yield_stress=1064.0) material.setCyclicAxial(sigma_f=1034.0, b=-0.04486, epsilon_f=0.11499, c=-0.52436) material.setCyclicTorsion(tau_f=1034.0 / np.sqrt(3), b0=-0.04486, gamma_f=0.11499 * np.sqrt(3), c0=-0.52436) predicted_life = material.calculateMansonCoffinLife(equivalent_strain / 100.0) #============================================================================== # experiment #============================================================================== exp_full_name = ExperimentDirectory + name + '.csv' if os.path.exists(exp_full_name): exp = ExperimentData(exp_full_name) experimental_life = exp.total_axial_count else: print('%s is not existed' % exp_full_name) #============================================================================== # load #============================================================================== temperature_mean = (temperature_list[0] + temperature_list[1]) / 2.0 temperature_min = min(temperature_list) temperature_max = max(temperature_list) load = Load(runing_time=[0], temperature=[temperature_mean], axial_strain=[0], shear_strain=[0], first_cycle_shift=1) axial_strain = axial_strain / 100.0 shear_strain = np.deg2rad(angel_strain) * d_out / 2.0 / gauge_length if loading_cycles == None: loading_cycles = min(int(predicted_life / 4.0), 5000) use_exp_data = True thermal_strain_min = min(thermal_strain_list) / 100.0 thermal_strain_max = max(thermal_strain_list) / 100.0 #============================================================================== # Diamond path TMF IP #============================================================================== if load_type == 'cyclic diamond path' and axial_temperature_phase == 0.0: use_exp_data = False load.setLoadBiaxial( int(loading_cycles), [0, period / 4.0, period / 2.0, period / 4.0 * 3.0, period], [ temperature_mean, temperature_max, temperature_mean, temperature_min, temperature_mean ], [0, axial_strain, 0, -1 * axial_strain, 0], [-1 * shear_strain, 0, shear_strain, 0, -1 * shear_strain]) #============================================================================== # Proportional path TMF IP #============================================================================== if load_type == 'cyclic proportional path' and axial_temperature_phase == 0.0: use_exp_data = False load.setLoadBiaxial( int(loading_cycles), [0, period / 4.0, period / 2.0, period / 4.0 * 3.0, period], [ temperature_mean, temperature_max, temperature_mean, temperature_min, temperature_mean ], [0, axial_strain, 0, -1 * axial_strain, 0], [0, shear_strain, 0, -1 * shear_strain, 0]) #============================================================================== # Uniaxial TMF IP #============================================================================== if load_type == 'cyclic tension compression' and axial_temperature_phase == 0.0: use_exp_data = False load.setLoadBiaxial( int(loading_cycles), [0, period / 4.0, period / 2.0, period / 4.0 * 3.0, period], [ temperature_mean, temperature_max, temperature_mean, temperature_min, temperature_mean ], [0, axial_strain * 1, 0, -1 * axial_strain * 1, 0], [0, shear_strain, 0, -1 * shear_strain, 0]) #============================================================================== # Uniaxial TMF OP #============================================================================== if load_type == 'cyclic tension compression' and axial_temperature_phase == 180.0: use_exp_data = False load.setLoadBiaxial( int(loading_cycles), [0, period / 4.0, period / 2.0, period / 4.0 * 3.0, period], [ temperature_mean, temperature_min, temperature_mean, temperature_max, temperature_mean ], [0, axial_strain, 0, -1 * axial_strain, 0], [0, shear_strain, 0, -1 * shear_strain, 0]) #============================================================================== # Uniaxial TMF 90 #============================================================================== if load_type == 'cyclic tension compression' and axial_temperature_phase == 90.0: use_exp_data = False load.setLoadBiaxial( int(loading_cycles), [0, period / 4.0, period / 2.0, period / 4.0 * 3.0, period], [ temperature_min, temperature_mean, temperature_max, temperature_mean, temperature_min ], [0, axial_strain, 0, -1 * axial_strain, 0], [0, shear_strain, 0, -1 * shear_strain, 0]) #============================================================================== # load from experiment data #============================================================================== if use_exp_data: if loading_cycles == None: load.setLoadFromExperiment(exp, runing_time=None) else: load.setLoadFromExperiment(exp, runing_time=period * loading_cycles) #============================================================================== # load of convection #============================================================================== load.setConvection(film_coefficient, sink_temperature) #============================================================================== # load of thermal #============================================================================== load.setThermal(heat_flux, film_coefficient_outer, film_coefficient_inner, emissivity, sink_temperature_inner, sink_temperature_outer, outer_temperature) #============================================================================== # Step #============================================================================== # step = Step(predefined_temperature = int(exp.initial_temperature), # time_period = int(load.total_runing_time), initial_inc = 0.005, # min_inc = 0.0001, max_inc = 5, nonlinear = 'ON') step = Step(predefined_temperature=temperature_mean, time_period=int(load.total_runing_time), initial_inc=0.00001, min_inc=0.00000001, max_inc=period / 40.0, nonlinear='OFF') #============================================================================== # UMAT #============================================================================== # umat = UMAT(UMATDirectory = 'F:\\GitHub\\umat\\', # UMATMainFile = 'MAIN_IN718.for', # ParameterFortranFile = 'PARAMETERS_IN718_TMF.for', # OutputFortranFile = 'OUTPUT.for', # OutputTextFile = name + '_output.txt') umat = UMAT(UMATDirectory='F:\\GitHub\\umat\\', UMATMainFile='MAIN_IN718.for', ParameterFortranFile='PARAMETERS_SS304.for', OutputFortranFile='OUTPUT.for', OutputTextFile=name + '_output.txt') # umat = UMAT(UMATDirectory = 'F:\\UMAT\\Fangjie\\', # UMATMainFile = 'AO304Tanakav6VariDamageMyisokin3.for', # ParameterFortranFile = 'PARAMETERS_SS304.for', # OutputFortranFile = 'OUTPUT.for', # OutputTextFile = name + '_output.txt') # umat = UMAT(UMATDirectory = 'F:\\UMAT\\SS304\\', # UMATMainFile = 'MAIN_SS304.for', # ParameterFortranFile = 'PARAMETERS_SS304.for', # OutputFortranFile = 'OUTPUT.for', # OutputTextFile = name + '_output.txt') #============================================================================== # Job #============================================================================== job = Job(JobName=name, UMAT=umat, Step=step, Load=load, copy=copy) # job.allProc() job.createDirectory() job.copyFiles() job.creatBatchFile() job.createAbaqusCAE() job.createAbaqusInput() job.run() job.autoPostProc()
def create_plot_data_exp_half_life_cycle(figure_path=None,figure_name=None): #============================================================================== # x,y label #============================================================================== xlabel = xylabels['shear_strain'] ylabel = xylabels['shear_stress'] #============================================================================== # plot lines #============================================================================== i = 0 marker_list = ['s','o','^','D'] plot_data = PlotData() experiment_log = ExperimentLog(ExperimentLogFile) for name in ['7006','7007','7009']: experiment_log.output(name) regular = r'.*' load_type = experiment_log.obtainItem(name,'load_type',regular)[0] regular = r'\d+\.?\d*' temperature_mode = experiment_log.obtainItem(name,'temperature_mode',regular) if len(temperature_mode) == 1: temperature_list = [float(temperature_mode[0]), float(temperature_mode[0])] if len(temperature_mode) == 2: temperature_list = [float(temperature_mode[0]), float(temperature_mode[1])] d_out = float(experiment_log.obtainItem(name,'d_out',regular)[0]) gauge_length = float(experiment_log.obtainItem(name,'gauge_length',regular)[0]) axial_strain = float(experiment_log.obtainItem(name,'axial_strain',regular)[0]) angel_strain = float(experiment_log.obtainItem(name,'angel_strain',regular)[0]) equivalent_strain = float(experiment_log.obtainItem(name,'equivalent_strain',regular)[0]) period = float(experiment_log.obtainItem(name,'period',regular)[0]) axial_temperature_phase = float(experiment_log.obtainItem(name,'axial_temperature_phase',regular)[0]) filename = ExperimentDirectory + name + '.csv' experiment = ExperimentData(filename) strain = experiment.obtainNthCycle('shear_strain',experiment.half_life_cycle) stress = experiment.obtainNthCycle('shear_stress',experiment.half_life_cycle) plot_data.addLine(strain*100, stress, xlabel=xlabel, ylabel=ylabel, linelabel=str(int(temperature_mode[0])+273)+'K', linewidth=2, linestyle='-', marker=None, markersize=12, color=color_list[i]) i += 1 # material = material_in718() # epsilon,sigma = material.plotCyclicStrengthCoefficient() # plot_data.addLine(epsilon*100, # sigma, # xlabel=xlabel, # ylabel=ylabel, # linelabel='Ramberg-Osgood', # linewidth=4, # linestyle='--', # marker=None, # markersize=12, # color='black') plot_data.writeToFile(figure_path,figure_name)
def create_plot_data_monotonic_cyclic_osgood(figure_path=None, figure_name=None): #============================================================================== # x,y label #============================================================================== xlabel = xylabels['axial_strain_amplitude'] ylabel = xylabels['axial_stress_amplitude'] #============================================================================== # plot lines #============================================================================== i = 0 marker_list = ['s', 'o', '^', 'D'] plot_data = PlotData() cyclic_strain = [] cyclic_stress = [] for name in experiment_type_dict['TC-IF']: # print name filename = ExperimentDirectory + name + '.csv' experiment = ExperimentData(filename) # print experiment.half_life_cycle stress = experiment.obtainNthCycle('axial_stress', experiment.half_life_cycle) strain = experiment.obtainNthCycle('axial_strain', experiment.half_life_cycle) stress_amplitude = (max(stress) - min(stress)) / 2.0 strain_amplitude = (max(strain) - min(strain)) / 2.0 * 100 cyclic_strain.append(strain_amplitude) cyclic_stress.append(stress_amplitude) name = '7102' # 650C monotonic tension filename = ExperimentDirectory + name + '.csv' experiment = ExperimentData(filename) monotonic_stress = list(experiment.axial_stress)[::20] monotonic_strain = list(experiment.axial_strain * 100.0)[::20] plot_data.addLine(monotonic_strain, monotonic_stress, xlabel=xlabel, ylabel=ylabel, linelabel='Monotonic Exp.', linewidth=2, linestyle='', marker=marker_list[i], markersize=12, color='blue') i += 1 plot_data.addLine(cyclic_strain, cyclic_stress, xlabel=xlabel, ylabel=ylabel, linelabel='Cyclic Exp.', linewidth=2, linestyle='', marker=marker_list[i], markersize=12, color='red') i += 1 material = material_in718() epsilon, sigma = material.plotStrengthCoefficient() plot_data.addLine(epsilon * 100, sigma, xlabel=xlabel, ylabel=ylabel, linelabel='Monotonic Fit.', linewidth=2, linestyle='-', marker=None, markersize=12, color='blue') epsilon, sigma = material.plotCyclicStrengthCoefficient() plot_data.addLine(epsilon * 100, sigma, xlabel=xlabel, ylabel=ylabel, linelabel='Cyclic Fit.', linewidth=2, linestyle='-', marker=None, markersize=12, color='red') plot_data.writeToFile(figure_path, figure_name)
def calculate_umat_parameters_in718(name='_output.txt'): parameters = [] yield_stress = 300.0 show = False # plastic_strain_list=[0.001,0.005,0.01,0.02] plastic_strain_list = [ 0.00005, 0.0001, 0.0002, 0.0005, 0.001, 0.002, 0.004, 0.01, 0.02 ] umat = UMAT(UMATDirectory='F:\\GitHub\\umat\\', UMATMainFile='MAIN_IN718.for', ParameterFortranFile='PARAMETERS_IN718_TMF.for', OutputFortranFile='OUTPUT.for', OutputTextFile=name + '_output.txt') outfile = open(umat.ParameterFortranFileFullName, 'w') print outfile.name #============================================================================== # 300C #============================================================================== temperature = 300.0 youngs_modulus, poisson_ratio, shear_modulus, yield_stress = calculate_elastic_by_temperature_in718( temperature) name = '7101' exp_full_name = ExperimentDirectory + name + '.csv' exp_monotonic = ExperimentData(exp_full_name) name = '7211' exp_full_name = ExperimentDirectory + name + '.csv' exp_cyclic = ExperimentData(exp_full_name) monotonic_curve = [ exp_monotonic.axial_log_strain, exp_monotonic.axial_true_stress ] cyclic_curve = [ exp_cyclic.obtainNthCycle('axial_strain', 190), exp_cyclic.obtainNthCycle('axial_stress', 190) ] seg, zeta, r0, ri = obtain_kinematic_hardening_parameters( monotonic_curve, cyclic_curve, position_x_list=plastic_strain_list, yield_stress=yield_stress, youngs_modulus=youngs_modulus, show=show) parameters.append([temperature, seg, zeta, r0, ri]) #============================================================================== # 550C #============================================================================== temperature = 550.0 youngs_modulus, poisson_ratio, shear_modulus, yield_stress = calculate_elastic_by_temperature_in718( temperature) name = '7103' exp_full_name = ExperimentDirectory + name + '.csv' exp_monotonic = ExperimentData(exp_full_name) name = '7212' exp_full_name = ExperimentDirectory + name + '.csv' exp_cyclic = ExperimentData(exp_full_name) monotonic_curve = [ exp_monotonic.axial_log_strain, exp_monotonic.axial_true_stress ] cyclic_curve = [ exp_cyclic.obtainNthCycle('axial_strain', 190), exp_cyclic.obtainNthCycle('axial_stress', 190) ] seg, zeta, r0, ri = obtain_kinematic_hardening_parameters( monotonic_curve, cyclic_curve, position_x_list=plastic_strain_list, yield_stress=yield_stress, youngs_modulus=youngs_modulus, show=show) parameters.append([temperature, seg, zeta, r0, ri]) #============================================================================== # 650C #============================================================================== temperature = 650.0 youngs_modulus, poisson_ratio, shear_modulus, yield_stress = calculate_elastic_by_temperature_in718( temperature) name = '7102' exp_full_name = ExperimentDirectory + name + '.csv' exp_monotonic = ExperimentData(exp_full_name) name = '7213' exp_full_name = ExperimentDirectory + name + '.csv' exp_cyclic = ExperimentData(exp_full_name) monotonic_curve = [ exp_monotonic.axial_log_strain, exp_monotonic.axial_true_stress ] cyclic_curve = [ exp_cyclic.obtainNthCycle('axial_strain', 190), exp_cyclic.obtainNthCycle('axial_stress', 190) ] seg, zeta, r0, ri = obtain_kinematic_hardening_parameters( monotonic_curve, cyclic_curve, position_x_list=plastic_strain_list, yield_stress=yield_stress, youngs_modulus=youngs_modulus, show=show) parameters.append([temperature, seg, zeta, r0, ri]) #============================================================================== # output elastic #============================================================================== print >> outfile, """C <ELASTKIC CONSTANTS> C <Young's modulus 3rd order fitting> EMOD=206308.7426+(-51.20306)*TEMP+0.01109*TEMP**2 1 +(-3.84391E-05)*TEMP**3 C <Poisson's Ratio 3rd order fitting> ENU=2.901300E-01+(1.457750E-05)*TEMP 1 +(-2.067420E-07)*TEMP**2+(2.780300E-10)*TEMP**3 EG=0.5D0*EMOD/(1.0D0+ENU) EBULK=EMOD/(3.0D0*(1.0D0-2.0D0*ENU)) ELAM=EBULK-EG*2.0D0/3.0D0 ELAMK0=0.0D0-EG*2.0D0/3.0D0 C <YIELD STRESS> SY=%sD0 C <KINEMATIC HARDENING PARAMETERS> MU=0.2D0 TQ=3.0D1""" % yield_stress #============================================================================== # output zeta #============================================================================== for i in range(seg): lines = ' ZKI(%u)=(%.2f)' % (i + 1, parameters[0][2][i]) print >> outfile, lines #============================================================================== # output r0 #============================================================================== for i in range(seg): x = np.array([parameters[0][0], parameters[2][0]]) y = np.array([parameters[0][3][i], parameters[2][3][i]]) z = np.polyfit(x, y, 1) p = np.poly1d(z) lines = ' R0KI(%u)=(%g)*TEMP+(%g)' % (i + 1, z[0], z[1]) print >> outfile, lines #============================================================================== # output r_delta #============================================================================== for i in range(seg): x = np.array([parameters[0][0], parameters[2][0]]) y = np.array([parameters[0][4][i], parameters[2][4][i]]) z = np.polyfit(x, y, 1) p = np.poly1d(z) lines = ' RDSSKI(%u)=(%g)*TEMP+(%g)' % (i + 1, z[0], z[1]) print >> outfile, lines #============================================================================== # others #============================================================================== print >> outfile, """ C <300C 200CYCLES> C CA1=0.4061D0 C CB1=1.2746D0 C CA2=1.0D0-CA1 C CB2=9.4506D0 C CB3=0.0D0 C <300C 800CYCLES> C CA1=0.3073D0 C CB1=0.42549D0 C CA2=1.0D0-CA1 C CB2=5.78033D0 C CB3=0.0D0 C <550C 200CYCLES> C CA1=0.4007D0 C CB1=0.8672D0 C CA2=1.0D0-CA1 C CB2=11.81D0 C CB3=0.0D0 C <650C 200CYCLES> CA1=0.4163D0 CB1=0.4952D0 CA2=1.0D0-CA1 CB2=9.108D0 CB3=0.0D0 C <ISOTROPIC PARAMETERS> YDNONPSS=000.0D0 GAMAP=5.0D1 GAMAQ=5.0D0 YDPTS=0.0D0 T1=20.0D0 M1=2.0D0 C <NONPROPORTIONAL PARAMETERS> CCOEF=50.0D0 C <DAMAGE PARAMETERS> PD=1000.0D0""" outfile.close()
def create_plot_data(figure_path=None, figure_name=None): #============================================================================== # x,y label #============================================================================== xlabel = xylabels['axial_strain'] ylabel = xylabels['axial_stress'] #============================================================================== # plot lines #============================================================================== i = 0 marker_list = ['s', 'o', '^', 'D'] plot_data = PlotData() experiment_log = ExperimentLog(ExperimentLogFile) # for name in ['7110','7111','7112','7113','7114','7115','7116']: # for name in ['7110','7111','7112','7113','7114']: # for name in experiment_type_dict['TC-IP'] + experiment_type_dict['TC-OP']: # for name in experiment_type_dict['TC-OP']: # for name in experiment_type_dict['PRO-IP']: # for name in experiment_type_dict['NPR-IP']+experiment_type_dict['PRO-IP']+['7110','7111','7112','7113','7114']: for name in ['7111']: experiment_log.output(name) regular = r'.*' load_type = experiment_log.obtainItem(name, 'load_type', regular)[0] regular = r'\d+\.?\d*' temperature_mode = experiment_log.obtainItem(name, 'temperature_mode', regular) if len(temperature_mode) == 1: temperature_list = [ float(temperature_mode[0]), float(temperature_mode[0]) ] if len(temperature_mode) == 2: temperature_list = [ float(temperature_mode[0]), float(temperature_mode[1]) ] d_out = float(experiment_log.obtainItem(name, 'd_out', regular)[0]) gauge_length = float( experiment_log.obtainItem(name, 'gauge_length', regular)[0]) axial_strain = float( experiment_log.obtainItem(name, 'axial_strain', regular)[0]) angel_strain = float( experiment_log.obtainItem(name, 'angel_strain', regular)[0]) equivalent_strain = float( experiment_log.obtainItem(name, 'equivalent_strain', regular)[0]) period = float(experiment_log.obtainItem(name, 'period', regular)[0]) axial_temperature_phase = float( experiment_log.obtainItem(name, 'axial_temperature_phase', regular)[0]) filename = ExperimentDirectory + name + '.csv' experiment = ExperimentData(filename) # print experiment.axial_count_index_list youngs_modulus, poisson_ratio, shear_modulus, yield_stress = calculate_elastic_by_temperature_in718( 650) e_list = [] count = [] for i in experiment.axial_count_index_list[1:-1:1]: strain = experiment.obtainNthCycle('axial_strain', i) stress = experiment.obtainNthCycle('axial_stress', i) p = (max(strain) - max(stress) / youngs_modulus) * 4 * i masing = obtain_masing_curve([strain, stress]) e = obtain_youngs_modulus(masing, 0.0025) count.append(i) e_list.append(e) # damage = 1.0 - np.array(e_list)/youngs_modulus damage = 1.0 - np.array(e_list) / max(e_list) if min(damage) <= 0: damage += abs(min(damage)) else: damage -= abs(min(damage)) # plot_data.addLine(masing[0]*100, # masing[1], # xlabel=xlabel, # ylabel=ylabel, # linelabel=str(int(temperature_mode[0])+273)+'K', # linewidth=2, # linestyle='-', # marker=None, # markersize=12, # color='auto') damage[0] = 0 # damage[1]=0 # damage[2]=0 # damage[3]=0 plot_data.addLine(count, damage, xlabel='Accumulated plastic strain $p$ [%]', ylabel='Damage $D$', linelabel=axial_strain, linewidth=2, linestyle='', marker='o', markersize=12, color='auto') plot_data.writeToFile(figure_path, figure_name)
def create_plot_data_exp_half_life_cycle(figure_path=None, figure_name=None): #============================================================================== # x,y label #============================================================================== xlabel = xylabels['axial_strain'] ylabel = xylabels['axial_stress'] #============================================================================== # plot lines #============================================================================== i = 0 marker_list = ['s', 'o', '^', 'D'] plot_data = PlotData() experiment_log = ExperimentLog(ExperimentLogFile) # for name in ['7110','7111','7112','7113','7114','7115','7116']: for name in ['7045']: experiment_log.output(name) regular = r'.*' load_type = experiment_log.obtainItem(name, 'load_type', regular)[0] regular = r'\d+\.?\d*' temperature_mode = experiment_log.obtainItem(name, 'temperature_mode', regular) if len(temperature_mode) == 1: temperature_list = [ float(temperature_mode[0]), float(temperature_mode[0]) ] if len(temperature_mode) == 2: temperature_list = [ float(temperature_mode[0]), float(temperature_mode[1]) ] d_out = float(experiment_log.obtainItem(name, 'd_out', regular)[0]) gauge_length = float( experiment_log.obtainItem(name, 'gauge_length', regular)[0]) axial_strain = float( experiment_log.obtainItem(name, 'axial_strain', regular)[0]) angel_strain = float( experiment_log.obtainItem(name, 'angel_strain', regular)[0]) equivalent_strain = float( experiment_log.obtainItem(name, 'equivalent_strain', regular)[0]) period = float(experiment_log.obtainItem(name, 'period', regular)[0]) axial_temperature_phase = float( experiment_log.obtainItem(name, 'axial_temperature_phase', regular)[0]) filename = ExperimentDirectory + name + '.csv' experiment = ExperimentData(filename) print experiment.axial_count_index_list e_list = [] count = [] for i in experiment.axial_count_index_list[2:200:50]: strain = experiment.obtainNthCycle('axial_strain', i) stress = experiment.obtainNthCycle('axial_stress', i) masing = obtain_masing_curve([strain, stress]) e = obtain_youngs_modulus(masing, 0.002) count.append(i) e_list.append(e) plot_data.addLine(masing[0] * 100, masing[1], xlabel=xlabel, ylabel=ylabel, linelabel=str(int(temperature_mode[0]) + 273) + 'K', linewidth=2, linestyle='-', marker=None, markersize=12, color='auto') # plot_data.addLine(count, # e_list, # xlabel=xlabel, # ylabel=ylabel, # linelabel='', # linewidth=2, # linestyle='', # marker='o', # markersize=12, # color='auto') plot_data.writeToFile(figure_path, figure_name)