From 675f6802c6e672b3b6b1d692a712ce27693dc548 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Fri, 17 Feb 2023 14:39:37 -0600 Subject: [PATCH 01/71] Cyclic code and verification 6 --- srlife/damage_time_dep_cyclic.py | 1047 ++++++++++++++++++++++ test/test_ceramic_damage_CARES_cyclic.py | 826 +++++++++++++++++ 2 files changed, 1873 insertions(+) create mode 100644 srlife/damage_time_dep_cyclic.py create mode 100644 test/test_ceramic_damage_CARES_cyclic.py diff --git a/srlife/damage_time_dep_cyclic.py b/srlife/damage_time_dep_cyclic.py new file mode 100644 index 0000000..b0bc7eb --- /dev/null +++ b/srlife/damage_time_dep_cyclic.py @@ -0,0 +1,1047 @@ +# pylint: disable=no-member +""" + This module contains methods for calculating the reliability and + creep-fatigue damage given completely-solved tube results and + damage material properties +""" +from scipy import integrate +from scipy.integrate import fixed_quad, quadrature +from srlife import receiver + +import numpy as np +import numpy.linalg as la +import scipy.optimize as opt +import multiprocess + + +class WeibullFailureModel: + """Parent class for time independent Weibull failure models + + Determines principal stresses from mandel stress + + Determines tube reliability and overall reliability by taking input of + element log reliabilities from respective Weibull failure model + """ + + def __init__(self, pset, *args, cares_cutoff=True): + """Initialize the Weibull Failure Model + + Boolean: + cares_cutoff: condition for forcing reliability as unity in case of + high compressive stresses + """ + self.cares_cutoff = cares_cutoff + + def calculate_principal_stress(self, stress): + """ + Calculate the principal stresses from Mandel vector and converts + to conventional notation + """ + if stress.ndim == 2: + tensor = np.zeros( + stress.shape[:1] + (3, 3) + ) # [:1] when no time steps involved + elif stress.ndim == 3: + tensor = np.zeros( + stress.shape[:2] + (3, 3) + ) # [:2] when time steps involved + # indices where (0,0) => (1,1) + inds = [ + [(0, 0)], + [(1, 1)], + [(2, 2)], + [(1, 2), (2, 1)], + [(0, 2), (2, 0)], + [(0, 1), (1, 0)], + ] + # multiplicative factors + mults = [1.0, 1.0, 1.0, np.sqrt(2), np.sqrt(2), np.sqrt(2)] + + # Converting mandel notation to conventional notation + for i, (grp, m) in enumerate(zip(inds, mults)): + for a, b in grp: + tensor[..., a, b] = stress[..., i] / m + + return la.eigvalsh(tensor) + + def determine_reliability( + self, receiver, material, nthreads=1, decorator=lambda x, n: x + ): + """ + Determine the reliability of the tubes in the receiver by calculating individual + material point reliabilities and finding the minimum of all points. + + Parameters: + receiver fully-solved receiver object + material material model to use + + Additional Parameters: + nthreads number of threads + decorator progress bar + """ + with multiprocess.Pool(nthreads) as p: + results = list( + decorator( + p.imap( + lambda x: self.tube_log_reliability( + x, material, receiver), + receiver.tubes, + ), + receiver.ntubes, + ) + ) + + p_tube = np.array([res[0] for res in results]) + tube_fields = [res[1] for res in results] + + # Tube reliability is the minimum of all the time steps + tube = np.min(p_tube, axis=1) + + # Overall reliability is the minimum of the sum + overall = np.min(np.sum(p_tube, axis=0)) + + # Add the field to the tubes + for tubei, field in zip(receiver.tubes, tube_fields): + tubei.add_quadrature_results("log_reliability", field) + + # Convert back from log-prob as we go + return { + "tube_reliability": np.exp(tube), + "overall_reliability": np.exp(overall), + } + + def tube_log_reliability(self, tube, material, receiver): + """ + Calculate the log reliability of a single tube + """ + volumes = tube.element_volumes() + + stresses = np.transpose( + np.mean( + np.stack( + ( + tube.quadrature_results["stress_xx"], + tube.quadrature_results["stress_yy"], + tube.quadrature_results["stress_zz"], + tube.quadrature_results["stress_yz"], + tube.quadrature_results["stress_xz"], + tube.quadrature_results["stress_xy"], + ) + ), + axis=-1, + ), + axes=(1, 2, 0), + ) + + temperatures = np.mean(tube.quadrature_results["temperature"], axis=-1) + + # Do it this way so we can vectorize + inc_prob = self.calculate_element_log_reliability( + stresses, temperatures, volumes, material + ) + + # CARES/LIFE cutoff + if self.cares_cutoff: + pstress = self.calculate_principal_stress(stresses).reshape(-1, 3) + pmax = np.max(pstress, axis=1) + pmin = np.min(pstress, axis=1) + remove = np.abs(pmin / (pmax + 1.0e-16)) > 3.0 + mod_prob = inc_prob.flatten() + mod_prob[remove] = 0.0 + inc_prob = mod_prob.reshape(inc_prob.shape) + + # Return the sums as a function of time along with the field itself + return np.sum(inc_prob, axis=1), np.transpose( + np.stack((inc_prob, inc_prob)), axes=(1, 2, 0) + ) + + +class CrackShapeIndependent(WeibullFailureModel): + """ + Parent class for crack shape independent models + which include only PIA and WNTSA models + + Determines normal stress acting on crack + """ + + def __init__(self, pset, *args, **kwargs): + """ + Create a mesh grid of angles that can represent crack orientations + Evaluate direction cosines using the angles + + Default values given to nalpha and nbeta which are the number of + segments in the mesh grid + """ + super().__init__(pset, *args, **kwargs) + + # limits and number of segments for angles + self.nalpha = pset.get_default("nalpha", 21) + self.nbeta = pset.get_default("nbeta", 31) + self.Nv = pset.get_default("Nv", 30) + self.Bv = pset.get_default("Bv", 320) + + # Mesh grid of the vectorized angle values + self.A, self.B = np.meshgrid( + np.linspace(0, np.pi, self.nalpha), + np.linspace(0, 2 * np.pi, self.nbeta, endpoint=False), + indexing="ij", + ) + + # Increment of angles to be used in evaluating integral + self.dalpha = (self.A[-1, -1] - self.A[0, 0]) / (self.nalpha - 1) + self.dbeta = (self.B[-1, -1] - self.B[0, 0]) / (self.nbeta - 1) + + # Direction cosines + self.l = np.cos(self.A) + self.m = np.sin(self.A) * np.cos(self.B) + self.n = np.sin(self.A) * np.sin(self.B) + + def calculate_normal_stress(self, mandel_stress): + """ + Use direction cosines to calculate the normal stress to + a crack given the Mandel vector + """ + # Principal stresses + pstress = self.calculate_principal_stress(mandel_stress) + + # Normal stress + return ( + pstress[..., 0, None, None] * (self.l**2) + + pstress[..., 1, None, None] * (self.m**2) + + pstress[..., 2, None, None] * (self.n**2) + ) + + +class CrackShapeDependent(WeibullFailureModel): + """ + Parent class for crack shape dependent models + + Determines normal, shear, total and equivanlent stresses acting on cracks + + Calculates the element reliability using the equivalent stress from the + crack shape dependent models + """ + + def __init__(self, pset, *args, **kwargs): + """ + Create a mesh grid of angles that can represent crack orientations + Evaluate direction cosines using the angles + + Default values given to nalpha and nbeta which are the number of + segments in the mesh grid + """ + super().__init__(pset, *args, **kwargs) + + # limits and number of segments for angles + self.nalpha = pset.get_default("nalpha", 121) + self.nbeta = pset.get_default("nbeta", 121) + self.Nv = pset.get_default("Nv", 30) + self.Bv = pset.get_default("Bv", 320) + + # Mesh grid of the vectorized angle values + self.A, self.B = np.meshgrid( + np.linspace(0, np.pi / 2, self.nalpha), + np.linspace(0, np.pi / 2, self.nbeta), + indexing="ij", + ) + + # Increment of angles to be used in evaluating integral + self.dalpha = (self.A[-1, -1] - self.A[0, 0]) / (self.nalpha - 1) + self.dbeta = (self.B[-1, -1] - self.B[0, 0]) / (self.nbeta - 1) + + # Direction cosines + self.l = np.cos(self.A) + self.m = np.sin(self.A) * np.cos(self.B) + self.n = np.sin(self.A) * np.sin(self.B) + + def calculate_normal_stress(self, mandel_stress): + """ + Use direction cosines to calculate the normal stress to + a crack given the Mandel vector + """ + # Principal stresses + pstress = self.calculate_principal_stress(mandel_stress) + + # Normal stress + return ( + pstress[..., 0, None, None] * (self.l**2) + + pstress[..., 1, None, None] * (self.m**2) + + pstress[..., 2, None, None] * (self.n**2) + ) + + def calculate_total_stress(self, mandel_stress): + """ + Calculate the total stress given the Mandel vector + """ + # Principal stresses + pstress = self.calculate_principal_stress(mandel_stress) + + # Total stress + return np.sqrt( + ((pstress[..., 0, None, None] * self.l) ** 2) + + ((pstress[..., 1, None, None] * self.m) ** 2) + + ((pstress[..., 2, None, None] * self.n) ** 2) + ) + + def calculate_shear_stress(self, mandel_stress): + """ + Calculate the shear stress given the normal and total stress + """ + # Normal stress + sigma_n = self.calculate_normal_stress(mandel_stress) + + # Total stress + sigma = self.calculate_total_stress(mandel_stress) + + # Shear stress + with np.errstate(invalid="ignore"): + return np.sqrt(sigma**2 - sigma_n**2) + + def calculate_flattened_eq_stress( + self, mandel_stress, nf, temperatures, material, A, dalpha, dbeta + ): + """ + Calculate the integral of equivalent stresses given the material + properties and integration limits + + Parameters: + mandel_stress: element stresses in Mandel convention + temperatures: element temperatures + material material model to use + + Additional Parameters: + A: mesh grid of vectorized angle values + dalpha: increment of angle alpha to be used in evaluating integral + dbeta: increment of angle beta to be used in evaluating integral + """ + + # Principal stresses + pstress = self.calculate_principal_stress(mandel_stress) + + # Material parameters + self.temperatures = temperatures + self.material = material + self.mandel_stress = mandel_stress + self.mvals = self.material.modulus(temperatures) + + # Projected equivalent stresses + sigma_e = self.calculate_eq_stress( + mandel_stress, self.temperatures, self.material + ) + + # Max equivalent stress over each element in time + # sigma_e_elem_max = np.max(sigma_e,axis =(2,3)) + + # Max principal stresss over all time steps for each element + sigma_e_max = np.max(sigma_e, axis=0) + + # g integral for calculating total time and g + # Suppressing warning given when negative numbers are raised to rational numbers + with np.errstate(invalid="ignore"): + g_integral = (sigma_e / sigma_e_max) ** self.Nv + + # Defining total time + self.period = 0.01 # in hours replace with period from receiver + print("number of cycles to failure =", nf) + self.period_array = np.linspace(0, self.period, pstress.shape[0]) + + # Calculate g using an integration method + g = (np.trapz(g_integral, self.period_array, axis=0)) / (self.period) + + # Calculating time integral + time_integral = (sigma_e_max**self.Nv) * g + + # Defining tf + self.tot_time = nf * self.period # replace with period from receiver + print("total time =", self.tot_time) + + # Time dependent equivalent stress + sigma_e_0 = ( + ((time_integral * self.tot_time) / self.Bv) + + (sigma_e_max ** (self.Nv - 2)) + ) ** (1 / (self.Nv - 2)) + + # Suppressing warning given when negative numbers are raised to rational numbers + with np.errstate(invalid="ignore"): + # Defining area integral element wise + integral = ( + (sigma_e_0 ** self.mvals[..., None, None]) + * np.sin(self.A) + * self.dalpha + * self.dbeta + ) + + # Flatten the last axis and calculate the mean of the positive values along that axis + # slicing the shape of integral and reshaping it with a new size (to flatten) based on the last size element of integral + if pstress.ndim == 2: + flat = integral.reshape(integral.shape[:1] + (-1,)) + elif pstress.ndim == 3: + flat = integral.reshape(integral.shape[:2] + (-1,)) + + # Suppressing warning to ignoring initial NaN values + with np.errstate(invalid="ignore"): + # Summing over area integral elements ignoring NaN values + flat = np.nansum(flat, axis=-1) + return flat + + def calculate_element_log_reliability( + self, mandel_stress, temperatures, volumes, nf, material + ): + """ + Calculate the element log reliability given the equivalent stress + + Parameters: + mandel_stress: element stresses in Mandel convention + temperatures: element temperatures + volumes: element volumes + material: material model object with required data + """ + self.temperatures = temperatures + self.material = material + self.mandel_stress = mandel_stress + + # Principal stresses + pstress = self.calculate_principal_stress(mandel_stress) + + # Material parameters + svals = self.material.strength(temperatures) + mvals = self.material.modulus(temperatures) + kvals = svals ** (-mvals) + + # Shear-insensitive case + # kpvals = (2 * mvals + 1) * kvals + # CSE model + kpvals = (mvals + 1) * kvals + + # Shear sensitive case + # kpvals = (2.99) * kvals + + # Equivalent stress raied to exponent mv + flat = ( + self.calculate_flattened_eq_stress( + mandel_stress, + nf, + self.temperatures, + self.material, + self.A, + self.dalpha, + self.dbeta, + ) + ) ** (1 / mvals) + + return -(2 * kpvals / np.pi) * (flat**mvals) * volumes + + +class PIAModel(CrackShapeIndependent): + """ + Principal of independent action failure model + + Calculates reliability using only tensile stresses + that are assumed to act independently on cracks + """ + + def calculate_element_log_reliability( + self, mandel_stress, temperatures, volumes, nf, material + ): + """ + Calculate the element log reliability + + Parameters: + mandel_stress: element stresses in Mandel convention + temperatures: element temperatures + volumes: element volumes + material: material model object with required data that includes + Weibull scale parameter (svals) and Weibull modulus (mvals) + """ + + # Principal stresses + pstress = self.calculate_principal_stress(mandel_stress) + + # Material parameters + svals = material.strength(temperatures) + mvals = material.modulus(temperatures) + kvals = svals ** (-mvals) + + # Only tension + pstress[pstress < 0] = 0 + + # Max principal stress over each element in time + # pstress_elem_max = np.max(pstress, axis=2) + + # Max principal stresss over all time steps for each element + pstress_max = np.max(pstress, axis=0) + + # g integral for calculating total time and g + with np.errstate(invalid="ignore"): + g_integral = (pstress / pstress_max) ** self.Nv + + # Defining dt for integration in g + self.period = 0.01 # in hours replace with period from receiver + print("number of cycles to failure =", nf) + self.period_array = np.linspace(0, self.period, pstress.shape[0]) + # self.period_array = self.period_array.reshape(1,-1) + + # Calculate g using an integration method + g = (np.trapz(g_integral, self.period_array, axis=0)) / self.period + + # Calculating time integral + time_integral = (pstress_max**self.Nv) * g + + # Defining tf + self.tot_time = nf * self.period # replace with period from receiver + print("service time =", self.tot_time) + + # Time dependent principal stress + pstress_0 = ( + (time_integral * self.tot_time) / + self.Bv + (pstress_max ** (self.Nv - 2)) + ) ** (1 / (self.Nv - 2)) + + return -kvals * np.nansum(pstress_0 ** mvals[..., None], axis=-1) * volumes + + +class WNTSAModel(CrackShapeIndependent): + """ + Weibull normal tensile average failure model + + Evaluates an average normal tensile stress (acting on the cracks) integrated over the + area of a sphere, and uses it to calculate the element reliability + """ + + def calculate_avg_normal_stress(self, mandel_stress, temperatures, nf, material): + """ + Calculate the average normal tensile stresses from the pricipal stresses + + Parameters: + mandel_stress: element stresses in Mandel convention + temperatures: element temperatures + material: material model object with required data + """ + # Principal stresses + pstress = self.calculate_principal_stress(mandel_stress) + + # Material parameters + mvals = material.modulus(temperatures)[: pstress.shape[1]] + + # Time dependent Normal stress + sigma_n = self.calculate_normal_stress(mandel_stress) + + # Considering only tensile stresses + sigma_n[sigma_n < 0] = 0 + + with np.errstate(invalid="ignore"): + integral = ( + (sigma_n ** mvals[..., None, None, None]) + * np.sin(self.A)[..., None] + * self.dalpha[..., None] + * self.dbeta[..., None] + ) / (4 * np.pi) + + # Flatten the last axis and calculate the mean of the positive values along that axis + if pstress.ndim == 2: + flat = integral.reshape( + integral.shape[:3] + (-1,) + ) # when no time steps involved + elif pstress.ndim == 3: + flat = integral.reshape( + integral.shape[:4] + (-1,) + ) # when time steps involved + + # Suppressing warning to ignoring initial NaN values + with np.errstate(invalid="ignore"): + # Average stress + return np.nansum(np.where(flat >= 0.0, flat, np.nan), axis=-2) + + def calculate_element_log_reliability( + self, mandel_stress, temperatures, volumes, nf, material + ): + """ + Calculate the element log reliability + + Parameters: + mandel_stress: element stresses in Mandel convention + temperatures: element temperatures + volumes: element volumes + material: material model object with required data + """ + + # Material parameters + svals = material.strength(temperatures) + mvals = material.modulus(temperatures) + kvals = svals ** (-mvals) + kpvals = (2 * mvals + 1) * kvals + + # Average normal tensile stress raied to exponent mv + avg_nstress = ( + self.calculate_avg_normal_stress( + mandel_stress, temperatures, nf, material) + ) ** (1 / mvals[..., None, None]) + + return ( + -kpvals[..., None] * + (avg_nstress ** mvals[..., None]) * volumes[..., None] + ) + + +class MTSModelGriffithFlaw(CrackShapeDependent): + """ + Maximum tensile stess failure model with a Griffith flaw + + Evaluates an equivalent stress (acting on the cracks) using the normal and + shear stresses in the maximum tensile stress fracture criterion for a Griffith flaw + """ + + def calculate_eq_stress(self, mandel_stress, temperatures, material): + """ + Calculate the equivalent stresses from the normal and shear stresses + """ + # Normal stress + sigma_n = self.calculate_normal_stress(mandel_stress) + + # Shear stress + tau = self.calculate_shear_stress(mandel_stress) + + # Projected equivalent stress + return 0.5 * (sigma_n + np.sqrt((sigma_n**2) + (tau**2))) + + +class MTSModelPennyShapedFlaw(CrackShapeDependent): + """ + Maximum tensile stess failure model with a penny shaped flaw + + Evaluates an equivalent stress (acting on the cracks) using the normal and + shear stresses in the maximum tensile stress fracture criterion for a penny shaped flaw + """ + + def calculate_eq_stress(self, mandel_stress, temperatures, material): + """ + Calculate the average normal tensile stresses from the normal and shear stresses + + Additional parameter: + nu: Poisson ratio + """ + + # Material parameters + nu = material.nu(temperatures)[0] + + # Normal stress + sigma_n = self.calculate_normal_stress(mandel_stress) + + # Shear stress + tau = self.calculate_shear_stress(mandel_stress) + + # Projected equivalent stress + return 0.5 * ( + sigma_n + np.sqrt((sigma_n**2) + ((tau / (1 - (0.5 * nu))) ** 2)) + ) + + +class CSEModelGriffithFlaw(CrackShapeDependent): + """ + Coplanar strain energy failure model with a Griffith flaw + + Evaluates an equivalent stress (acting on the cracks) using the normal and + shear stresses in the coplanar strain energy fracture criterion + for a Griffith flaw + """ + + def calculate_eq_stress(self, mandel_stress, temperatures, material): + """ + Calculate the equivalent stresses from the normal and shear stresses + """ + # Normal stress + sigma_n = self.calculate_normal_stress(mandel_stress) + + # Shear stress + tau = self.calculate_shear_stress(mandel_stress) + + # Projected equivalent stress + return np.sqrt((sigma_n**2) + (tau**2)) + + +class CSEModelPennyShapedFlaw(CrackShapeDependent): + """ + Coplanar strain energy failure model with a penny shaped flaw + + Evaluates an equivalent stress (acting on the cracks) using the normal and + shear stresses in the coplanar strain energy fracture criterion + for a penny shaped flaw + """ + + def calculate_eq_stress(self, mandel_stress, temperatures, material): + """ + Calculate the equivalent stresses from the normal and shear stresses + + Additional parameter: + nu: Poisson ratio + """ + + # Material parameters + nu = material.nu(temperatures).flat[0] + + # Normal stress + sigma_n = self.calculate_normal_stress(mandel_stress) + + # Shear stress + tau = self.calculate_shear_stress(mandel_stress) + + # Projected equivalent stress + return np.sqrt((sigma_n**2) + (tau / (1 - (0.5 * nu))) ** 2) + + +class SMMModelGriffithFlaw(CrackShapeDependent): + """ + Shetty mixed-mod failure model with a Griffith flaw + + Evaluates an equivalent stress (acting on the cracks) using the normal and + shear stresses in the Shetty mixed-mode fracture criterion + for a Griffith flaw + """ + + def calculate_eq_stress(self, mandel_stress, temperatures, material): + """ + Calculate the equivalent stresses from the normal and shear stresses + + Additional parameters: + cbar: Emperical constant + """ + + # Material parameters + cbar = material.c_bar(temperatures).flat[0] + + # Normal stress + sigma_n = self.calculate_normal_stress(mandel_stress) + + # Shear stress + tau = self.calculate_shear_stress(mandel_stress) + + # Projected equivalent stress + return 0.5 * (sigma_n + np.sqrt((sigma_n**2) + ((2 * tau / cbar) ** 2))) + + +class SMMModelPennyShapedFlaw(CrackShapeDependent): + """ + Shetty mixed mode failure model with a penny shaped flaw + + Evaluates an equivalent stress (acting on the cracks) using the normal and + shear stresses in the Shetty mixed-mode fracture criterion + for a Griffith flaw + """ + + def calculate_eq_stress(self, mandel_stress, temperatures, material): + """ + Calculate the equivalent stresses from the normal and shear stresses + + Additional parameters: + nu: Poisson ratio + cbar: Emperical constant + """ + + # Material parameters + nu = material.nu(temperatures).flat[0] + cbar = material.c_bar(temperatures).flat[0] + + # Normal stress + sigma_n = self.calculate_normal_stress(mandel_stress) + + # Shear stress + tau = self.calculate_shear_stress(mandel_stress) + + # Projected equivalent stress + return 0.5 * ( + sigma_n + np.sqrt((sigma_n**2) + + ((4 * tau / (cbar * (2 - nu))) ** 2)) + ) + + +class DamageCalculator: + """ + Parent class for all damage calculators, handling common iteration + and scaling options + """ + + def __init__(self, pset): + """ + Parameters: + pset: damage parameters + """ + self.extrapolate = pset.get_default("extrapolate", "lump") + self.order = pset.get_default("order", 1) + + def single_cycles(self, tube, material, receiver): + """ + Calculate damage for a single tube + + Parameters: + tube: fully-populated tube object + material: damage material + receiver: receiver object (for metadata) + """ + raise NotImplementedError("Superclass not implemented") + + def determine_life(self, receiver, material, nthreads=1, decorator=lambda x, n: x): + """ + Determine the life of the receiver by calculating individual + material point damage and finding the minimum of all points. + + Parameters: + receiver fully-solved receiver object + material material model ot use + + Additional Parameters: + nthreads number of threads + decorator progress bar + """ + # pylint: disable=no-member + with multiprocess.Pool(nthreads) as p: + Ns = list( + decorator( + p.imap( + lambda x: self.single_cycles(x, material, receiver), + receiver.tubes, + ), + receiver.ntubes, + ) + ) + N = min(Ns) + + # Results come out as days + return N + + def make_extrapolate(self, D): + """ + Return a damage extrapolation function based on self.extrapolate + giving the damage for the nth cycle + + Parameters: + D: raw, per cycle damage + """ + if self.extrapolate == "lump": + return lambda N, D=D: N * np.sum(D) / len(D) + elif self.extrapolate == "last": + + def Dfn(N, D=D): + N = int(N) + if N < len(D) - 1: + return np.sum(D[:N]) + else: + return np.sum(D[:-1]) + D[-1] * N + + return Dfn + elif self.extrapolate == "poly": + p = np.polyfit(np.array(list(range(len(D)))) + 1, D, self.order) + return lambda N, p=p: np.polyval(p, N) + else: + raise ValueError( + "Unknown damage extrapolation approach %s!" % self.extrapolate + ) + + +class TimeFractionInteractionDamage(DamageCalculator): + """ + Calculate life using the ASME time-fraction type approach + """ + + def single_cycles(self, tube, material, receiver): + """ + Calculate the single-tube number of repetitions to failure + + Parameters: + tube single tube with full results + material damage material model + receiver receiver, for metadata + """ + # Material point cycle creep damage + Dc = self.creep_damage(tube, material, receiver) + + # Material point cycle fatigue damage + Df = self.fatigue_damage(tube, material, receiver) + + nc = receiver.days + + # This is going to be expensive, but I don't see much way around it + return min( + self.calculate_max_cycles( + self.make_extrapolate(c), self.make_extrapolate(f), material + ) + for c, f in zip(Dc.reshape(nc, -1).T, Df.reshape(nc, -1).T) + ) + + def calculate_max_cycles(self, Dc, Df, material, rep_min=1, rep_max=1e6): + """ + Actually calculate the maximum number of repetitions for a single point + + Parameters: + Dc creep damage per simulated cycle + Df fatigue damage per simulated cycle + material damaged material properties + """ + if not material.inside_envelope("cfinteraction", Df(rep_min), Dc(rep_min)): + return 0 + + if material.inside_envelope("cfinteraction", Df(rep_max), Dc(rep_max)): + return np.inf + + return opt.brentq( + lambda N: material.inside_envelope( + "cfinteraction", Df(N), Dc(N)) - 0.5, + rep_min, + rep_max, + ) + + def creep_damage(self, tube, material, receiver): + """ + Calculate creep damage at each material point + + Parameters: + tube single tube with full results + material damage material model + receiver receiver, for metadata + """ + # For now just use the von Mises effective stress + vm = np.sqrt( + ( + ( + tube.quadrature_results["stress_xx"] + - tube.quadrature_results["stress_yy"] + ) + ** 2.0 + + ( + tube.quadrature_results["stress_yy"] + - tube.quadrature_results["stress_zz"] + ) + ** 2.0 + + ( + tube.quadrature_results["stress_zz"] + - tube.quadrature_results["stress_xx"] + ) + ** 2.0 + + 6.0 + * ( + tube.quadrature_results["stress_xy"] ** 2.0 + + tube.quadrature_results["stress_yz"] ** 2.0 + + tube.quadrature_results["stress_xz"] ** 2.0 + ) + ) + / 2.0 + ) + + tR = material.time_to_rupture( + "averageRupture", tube.quadrature_results["temperature"], vm + ) + dts = np.diff(tube.times) + time_dmg = dts[:, np.newaxis, np.newaxis] / tR[1:] + + # Break out to cycle damage + inds = self.id_cycles(tube, receiver) + + cycle_dmg = np.array( + [ + np.sum(time_dmg[inds[i]: inds[i + 1]], axis=0) + for i in range(receiver.days) + ] + ) + + return cycle_dmg + + def fatigue_damage(self, tube, material, receiver): + """ + Calculate fatigue damage at each material point + + Parameters: + tube single tube with full results + material damage material model + receiver receiver, for metadata + """ + # Identify cycle boundaries + inds = self.id_cycles(tube, receiver) + + # Run through each cycle and ID max strain range and fatigue damage + strain_names = [ + "mechanical_strain_xx", + "mechanical_strain_yy", + "mechanical_strain_zz", + "mechanical_strain_yz", + "mechanical_strain_xz", + "mechanical_strain_xy", + ] + strain_factors = [1.0, 1.0, 1.0, 2.0, 2.0, 2.0] + + cycle_dmg = np.array( + [ + self.cycle_fatigue( + np.array( + [ + ef * + tube.quadrature_results[en][inds[i]: inds[i + 1]] + for en, ef in zip(strain_names, strain_factors) + ] + ), + tube.quadrature_results["temperature"][inds[i] : inds[i + 1]], + material, + ) + for i in range(receiver.days) + ] + ) + + return cycle_dmg + + def id_cycles(self, tube, receiver): + """ + Helper to separate out individual cycles by index + + Parameters: + tube single tube with results + receiver receiver, for metadata + """ + tm = np.mod(tube.times, receiver.period) + inds = list(np.where(tm == 0)[0]) + if len(inds) != (receiver.days + 1): + raise ValueError( + "Tube times not compatible with the receiver" + " number of days and cycle period!" + ) + + return inds + + def cycle_fatigue(self, strains, temperatures, material, nu=0.5): + """ + Calculate fatigue damage for a single cycle + + Parameters: + strains single cycle strains + temperatures single cycle temperatures + material damage model + + Additional parameters: + nu effective Poisson's ratio to use + """ + pt_temps = np.max(temperatures, axis=0) + + pt_eranges = np.zeros(pt_temps.shape) + + nt = strains.shape[1] + for i in range(nt): + for j in range(nt): + de = strains[:, j] - strains[:, i] + eq = ( + np.sqrt(2) + / (2 * (1 + nu)) + * np.sqrt( + (de[0] - de[1]) ** 2 + + (de[1] - de[2]) ** 2 + + (de[2] - de[0]) ** 2.0 + + 3.0 / 2.0 * (de[3] ** 2.0 + de[4] + ** 2.0 + de[5] ** 2.0) + ) + ) + pt_eranges = np.maximum(pt_eranges, eq) + + dmg = np.zeros(pt_eranges.shape) + # pylint: disable=not-an-iterable + for ind in np.ndindex(*dmg.shape): + dmg[ind] = 1.0 / material.cycles_to_fail( + "nominalFatigue", pt_temps[ind], pt_eranges[ind] + ) + + return dmg diff --git a/test/test_ceramic_damage_CARES_cyclic.py b/test/test_ceramic_damage_CARES_cyclic.py new file mode 100644 index 0000000..4ca4bc2 --- /dev/null +++ b/test/test_ceramic_damage_CARES_cyclic.py @@ -0,0 +1,826 @@ +import unittest + +import numpy as np +import csv +import matplotlib.pyplot as plt +import os.path + +from srlife import ( + materials, + damage, + damage_time_dep_cyclic, + solverparams, +) + + +class TestPIAModel(unittest.TestCase): + def setUp(self): + # 60,000 to 70,000 rpm + # self.stress = np.array( + # [ + # [ + # [44.08801004196201, 160.56004134571623, 0, 0, 0, 0], + # [70.56728995109746, 125.49389020226235, 0, 0, 0, 0], + # [73.64178822023885, 110.33416575148763, 0, 0, 0, 0], + # [68.42220922221401, 99.97016362056426, 0, 0, 0, 0], + # [58.56207074702157, 90.74836601949357, 0, 0, 0, 0], + # [45.29913637906247, 81.43100936387464, 0, 0, 0, 0], + # [29.14665988998162, 71.50483988206251, 0, 0, 0, 0], + # [10.348573211586011, 60.72592564225028, 0, 0, 0, 0], + # ], + # [ + # [51.13165661671334, 186.21164558438093, 0, 0, 0, 0], + # [81.84135402612488, 145.5432099387185, 0, 0, 0, 0], + # [85.40704432643088, 127.96151767628152, 0, 0, 0, 0], + # [79.35356809203516, 115.94172822266626, 0, 0, 0, 0], + # [67.9181412213978, 105.24662567941266, 0, 0, 0, 0], + # [52.53627651062867, 94.44069725041082, 0, 0, 0, 0], + # [33.80322685465324, 82.92869004073522, 0, 0, 0, 0], + # [12.001895558999173, 70.42770074485833, 0, 0, 0, 0], + # ], + # [ + # [44.08801004196201, 160.56004134571623, 0, 0, 0, 0], + # [70.56728995109746, 125.49389020226235, 0, 0, 0, 0], + # [73.64178822023885, 110.33416575148763, 0, 0, 0, 0], + # [68.42220922221401, 99.97016362056426, 0, 0, 0, 0], + # [58.56207074702157, 90.74836601949357, 0, 0, 0, 0], + # [45.29913637906247, 81.43100936387464, 0, 0, 0, 0], + # [29.14665988998162, 71.50483988206251, 0, 0, 0, 0], + # [10.348573211586011, 60.72592564225028, 0, 0, 0, 0], + # ], + # [ + # [37.5661150653404, 136.80855593954516, 0, 0, 0, 0], + # [60.12834173347949, 106.92970526109927, 0, 0, 0, 0], + # [62.74803256635736, 94.01254359890069, 0, 0, 0, 0], + # [58.30058063904624, 85.18167787787723, 0, 0, 0, 0], + # [49.89904253000652, 77.32405151956847, 0, 0, 0, 0], + # [38.59808070168636, 69.3850020615263, 0, 0, 0, 0], + # [24.835023811581966, 60.92720084625443, 0, 0, 0, 0], + # [8.81771918620344, 51.742800547242815, 0, 0, 0, 0], + # ], + # [ + # [44.08801004196201, 160.56004134571623, 0, 0, 0, 0], + # [70.56728995109746, 125.49389020226235, 0, 0, 0, 0], + # [73.64178822023885, 110.33416575148763, 0, 0, 0, 0], + # [68.42220922221401, 99.97016362056426, 0, 0, 0, 0], + # [58.56207074702157, 90.74836601949357, 0, 0, 0, 0], + # [45.29913637906247, 81.43100936387464, 0, 0, 0, 0], + # [29.14665988998162, 71.50483988206251, 0, 0, 0, 0], + # [10.348573211586011, 60.72592564225028, 0, 0, 0, 0], + # ], + # ] + # ) + + # 60,000 to 80,000 rpm + # self.stress = np.array( + # [ + # [ + # [51.131656616713364, 186.21164558438102, 0, 0, 0, 0], + # [81.8413540261249, 145.54320993871852, 0, 0, 0, 0], + # [85.40704432643089, 127.96151767628156, 0, 0, 0, 0], + # [79.3535680920352, 115.9417282226663, 0, 0, 0, 0], + # [67.91814122139785, 105.2466256794127, 0, 0, 0, 0], + # [52.53627651062872, 94.44069725041086, 0, 0, 0, 0], + # [33.803226854653296, 82.92869004073528, 0, 0, 0, 0], + # [12.001895558999221, 70.42770074485836, 0, 0, 0, 0], + # ], + # [ + # [66.78420456060523, 243.21521055919152, 0, 0, 0, 0], + # [106.89482974840807, 190.09725379750992, 0, 0, 0, 0], + # [111.55205789574653, 167.1334108424902, 0, 0, 0, 0], + # [103.64547669163787, 151.43409400511518, 0, 0, 0, 0], + # [88.70940894223394, 137.46498047923293, 0, 0, 0, 0], + # [68.61881013633139, 123.35111477604686, 0, 0, 0, 0], + # [44.15115344281247, 108.31502372667464, 0, 0, 0, 0], + # [15.67594521991733, 91.98720097287624, 0, 0, 0, 0], + # ], + # [ + # [51.131656616713364, 186.21164558438102, 0, 0, 0, 0], + # [81.8413540261249, 145.54320993871852, 0, 0, 0, 0], + # [85.40704432643089, 127.96151767628156, 0, 0, 0, 0], + # [79.3535680920352, 115.9417282226663, 0, 0, 0, 0], + # [67.91814122139785, 105.2466256794127, 0, 0, 0, 0], + # [52.53627651062872, 94.44069725041086, 0, 0, 0, 0], + # [33.803226854653296, 82.92869004073528, 0, 0, 0, 0], + # [12.001895558999221, 70.42770074485836, 0, 0, 0, 0], + # ], + # [ + # [37.56611506534044, 136.80855593954522, 0, 0, 0, 0], + # [60.128341733479516, 106.92970526109931, 0, 0, 0, 0], + # [62.74803256635741, 94.01254359890075, 0, 0, 0, 0], + # [58.30058063904628, 85.18167787787728, 0, 0, 0, 0], + # [49.899042530006575, 77.32405151956851, 0, 0, 0, 0], + # [38.5980807016864, 69.38500206152634, 0, 0, 0, 0], + # [24.835023811582005, 60.92720084625447, 0, 0, 0, 0], + # [8.817719186203488, 51.74280054724287, 0, 0, 0, 0], + # ], + # [ + # [51.13165661671336, 186.211645584381, 0, 0, 0, 0], + # [81.8413540261249, 145.54320993871852, 0, 0, 0, 0], + # [85.40704432643089, 127.96151767628156, 0, 0, 0, 0], + # [79.3535680920352, 115.94172822266628, 0, 0, 0, 0], + # [67.91814122139785, 105.24662567941269, 0, 0, 0, 0], + # [52.536276510628696, 94.44069725041085, 0, 0, 0, 0], + # [33.80322685465327, 82.92869004073526, 0, 0, 0, 0], + # [12.001895558999221, 70.42770074485836, 0, 0, 0, 0], + # ], + # ] + # ) + + # data = np.loadtxt("Spinning_disk_cyclic_60000_70000.txt") + data = np.loadtxt("Spinning_disk_cyclic_60000_80000.txt") + + self.stress = data.reshape(data.shape[0], 8, -1) + + vol_factor = 1 + self.volumes = np.loadtxt("Spinning_disk_volumes.txt") + self.volumes = vol_factor * (np.tile(self.volumes, data.shape[0])).reshape( + data.shape[0], 8 + ) + + # Number of cycles to failure + self.nf = 1 + + # Material properties + self.m = 7.65 + self.s0 = 74.79 * ((1000) ** (3 / self.m)) # in mm 74.79 in m + self.c_bar = 0.82 + self.nu = 0.219 + + self.material = materials.StandardCeramicMaterial( + np.array([0, 1000.0]), + np.array([self.s0, self.s0]), + np.array([0, 1000.0]), + np.array([self.m, self.m]), + self.c_bar, + self.nu, + ) + + self.model_time_dep = damage_time_dep_cyclic.PIAModel( + solverparams.ParameterSet() + ) + + def test_definition(self): + k = self.s0 ** (-self.m) + # kp = (2 * self.m + 1) * k + + actual = self.model_time_dep.calculate_element_log_reliability( + self.stress, self.temperatures, self.volumes, self.nf, self.material + ) + + # Summing up log probabilities over nelem and taking the value of one + R_PIA = np.exp(np.sum(actual, axis=1))[0] + print("Time dep Reliability PIA = ", R_PIA) + + # Evaluating Probability of Failure + Pf_PIA = 1 - R_PIA + print("Time dep Probability of failure PIA = ", Pf_PIA) + + +class TestCSEModelGriffithFlaw(unittest.TestCase): + def setUp(self): + # # 60,000 to 70,000 rpm + # self.stress = np.array( + # [ + # [ + # [44.08801004196201, 160.56004134571623, 0, 0, 0, 0], + # [70.56728995109746, 125.49389020226235, 0, 0, 0, 0], + # [73.64178822023885, 110.33416575148763, 0, 0, 0, 0], + # [68.42220922221401, 99.97016362056426, 0, 0, 0, 0], + # [58.56207074702157, 90.74836601949357, 0, 0, 0, 0], + # [45.29913637906247, 81.43100936387464, 0, 0, 0, 0], + # [29.14665988998162, 71.50483988206251, 0, 0, 0, 0], + # [10.348573211586011, 60.72592564225028, 0, 0, 0, 0], + # ], + # [ + # [51.13165661671334, 186.21164558438093, 0, 0, 0, 0], + # [81.84135402612488, 145.5432099387185, 0, 0, 0, 0], + # [85.40704432643088, 127.96151767628152, 0, 0, 0, 0], + # [79.35356809203516, 115.94172822266626, 0, 0, 0, 0], + # [67.9181412213978, 105.24662567941266, 0, 0, 0, 0], + # [52.53627651062867, 94.44069725041082, 0, 0, 0, 0], + # [33.80322685465324, 82.92869004073522, 0, 0, 0, 0], + # [12.001895558999173, 70.42770074485833, 0, 0, 0, 0], + # ], + # [ + # [44.08801004196201, 160.56004134571623, 0, 0, 0, 0], + # [70.56728995109746, 125.49389020226235, 0, 0, 0, 0], + # [73.64178822023885, 110.33416575148763, 0, 0, 0, 0], + # [68.42220922221401, 99.97016362056426, 0, 0, 0, 0], + # [58.56207074702157, 90.74836601949357, 0, 0, 0, 0], + # [45.29913637906247, 81.43100936387464, 0, 0, 0, 0], + # [29.14665988998162, 71.50483988206251, 0, 0, 0, 0], + # [10.348573211586011, 60.72592564225028, 0, 0, 0, 0], + # ], + # [ + # [37.5661150653404, 136.80855593954516, 0, 0, 0, 0], + # [60.12834173347949, 106.92970526109927, 0, 0, 0, 0], + # [62.74803256635736, 94.01254359890069, 0, 0, 0, 0], + # [58.30058063904624, 85.18167787787723, 0, 0, 0, 0], + # [49.89904253000652, 77.32405151956847, 0, 0, 0, 0], + # [38.59808070168636, 69.3850020615263, 0, 0, 0, 0], + # [24.835023811581966, 60.92720084625443, 0, 0, 0, 0], + # [8.81771918620344, 51.742800547242815, 0, 0, 0, 0], + # ], + # [ + # [44.08801004196201, 160.56004134571623, 0, 0, 0, 0], + # [70.56728995109746, 125.49389020226235, 0, 0, 0, 0], + # [73.64178822023885, 110.33416575148763, 0, 0, 0, 0], + # [68.42220922221401, 99.97016362056426, 0, 0, 0, 0], + # [58.56207074702157, 90.74836601949357, 0, 0, 0, 0], + # [45.29913637906247, 81.43100936387464, 0, 0, 0, 0], + # [29.14665988998162, 71.50483988206251, 0, 0, 0, 0], + # [10.348573211586011, 60.72592564225028, 0, 0, 0, 0], + # ], + # ] + # ) + # 60,000 to 80,000 rpm + self.stress = np.array( + [ + [ + [51.131656616713364, 186.21164558438102, 0, 0, 0, 0], + [81.8413540261249, 145.54320993871852, 0, 0, 0, 0], + [85.40704432643089, 127.96151767628156, 0, 0, 0, 0], + [79.3535680920352, 115.9417282226663, 0, 0, 0, 0], + [67.91814122139785, 105.2466256794127, 0, 0, 0, 0], + [52.53627651062872, 94.44069725041086, 0, 0, 0, 0], + [33.803226854653296, 82.92869004073528, 0, 0, 0, 0], + [12.001895558999221, 70.42770074485836, 0, 0, 0, 0], + ], + [ + [66.78420456060523, 243.21521055919152, 0, 0, 0, 0], + [106.89482974840807, 190.09725379750992, 0, 0, 0, 0], + [111.55205789574653, 167.1334108424902, 0, 0, 0, 0], + [103.64547669163787, 151.43409400511518, 0, 0, 0, 0], + [88.70940894223394, 137.46498047923293, 0, 0, 0, 0], + [68.61881013633139, 123.35111477604686, 0, 0, 0, 0], + [44.15115344281247, 108.31502372667464, 0, 0, 0, 0], + [15.67594521991733, 91.98720097287624, 0, 0, 0, 0], + ], + [ + [51.131656616713364, 186.21164558438102, 0, 0, 0, 0], + [81.8413540261249, 145.54320993871852, 0, 0, 0, 0], + [85.40704432643089, 127.96151767628156, 0, 0, 0, 0], + [79.3535680920352, 115.9417282226663, 0, 0, 0, 0], + [67.91814122139785, 105.2466256794127, 0, 0, 0, 0], + [52.53627651062872, 94.44069725041086, 0, 0, 0, 0], + [33.803226854653296, 82.92869004073528, 0, 0, 0, 0], + [12.001895558999221, 70.42770074485836, 0, 0, 0, 0], + ], + [ + [37.56611506534044, 136.80855593954522, 0, 0, 0, 0], + [60.128341733479516, 106.92970526109931, 0, 0, 0, 0], + [62.74803256635741, 94.01254359890075, 0, 0, 0, 0], + [58.30058063904628, 85.18167787787728, 0, 0, 0, 0], + [49.899042530006575, 77.32405151956851, 0, 0, 0, 0], + [38.5980807016864, 69.38500206152634, 0, 0, 0, 0], + [24.835023811582005, 60.92720084625447, 0, 0, 0, 0], + [8.817719186203488, 51.74280054724287, 0, 0, 0, 0], + ], + [ + [51.13165661671336, 186.211645584381, 0, 0, 0, 0], + [81.8413540261249, 145.54320993871852, 0, 0, 0, 0], + [85.40704432643089, 127.96151767628156, 0, 0, 0, 0], + [79.3535680920352, 115.94172822266628, 0, 0, 0, 0], + [67.91814122139785, 105.24662567941269, 0, 0, 0, 0], + [52.536276510628696, 94.44069725041085, 0, 0, 0, 0], + [33.80322685465327, 82.92869004073526, 0, 0, 0, 0], + [12.001895558999221, 70.42770074485836, 0, 0, 0, 0], + ], + ] + ) + + self.temperatures = np.array( + [ + [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], + [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], + [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], + [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], + [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], + ] + ) + self.volumes = np.array( + [ + [ + 889.4101786, + 1344.457247, + 1799.504315, + 2254.551383, + 2709.598451, + 3164.645519, + 3619.692587, + 4074.739656, + ], + [ + 889.4101786, + 1344.457247, + 1799.504315, + 2254.551383, + 2709.598451, + 3164.645519, + 3619.692587, + 4074.739656, + ], + [ + 889.4101786, + 1344.457247, + 1799.504315, + 2254.551383, + 2709.598451, + 3164.645519, + 3619.692587, + 4074.739656, + ], + [ + 889.4101786, + 1344.457247, + 1799.504315, + 2254.551383, + 2709.598451, + 3164.645519, + 3619.692587, + 4074.739656, + ], + [ + 889.4101786, + 1344.457247, + 1799.504315, + 2254.551383, + 2709.598451, + 3164.645519, + 3619.692587, + 4074.739656, + ], + ] + ) + + # Number of cycles to failure + self.nf = 100000 + + # Material properties + self.m = 7.65 + self.s0 = 74.79 * ((1000) ** (3 / self.m)) # in mm 74.79 in m + self.c_bar = 0.82 + self.nu = 0.219 + + self.material = materials.StandardCeramicMaterial( + np.array([0, 1000.0]), + np.array([self.s0, self.s0]), + np.array([0, 1000.0]), + np.array([self.m, self.m]), + self.c_bar, + self.nu, + ) + + # self.model_time_indep = damage.CSEModelGriffithFlaw(solverparams.ParameterSet()) + self.model_time_dep = damage_time_dep_cyclic.CSEModelGriffithFlaw( + solverparams.ParameterSet() + ) + # self.model = damage.CSEModelGriffithFlaw(solverparams.ParameterSet()) + + def test_definition(self): + k = self.s0 ** (-self.m) + kp = (self.m + 1) * k + + actual = self.model_time_dep.calculate_element_log_reliability( + self.stress, self.temperatures, self.volumes, self.nf, self.material + ) + + # Summing up log probabilities over nelem and taking the value of one + R_CSE_GF = np.exp(np.sum(actual, axis=1))[0] + # R_CSE_GF = np.exp(np.sum(actual,axis=tuple(range(actual.ndim))[1:]))[-1] + print("Time dep Reliability CSE GF = ", R_CSE_GF) + + # Evaluating Probability of Failure + Pf_CSE_GF = 1 - R_CSE_GF + print("Time dep Probability of failure CSE GF = ", Pf_CSE_GF) + + +class TestCSEModelPennyShapedFlaw(unittest.TestCase): + def setUp(self): + # # 60,000 to 70,000 rpm + # self.stress = np.array( + # [ + # [ + # [44.08801004196201, 160.56004134571623, 0, 0, 0, 0], + # [70.56728995109746, 125.49389020226235, 0, 0, 0, 0], + # [73.64178822023885, 110.33416575148763, 0, 0, 0, 0], + # [68.42220922221401, 99.97016362056426, 0, 0, 0, 0], + # [58.56207074702157, 90.74836601949357, 0, 0, 0, 0], + # [45.29913637906247, 81.43100936387464, 0, 0, 0, 0], + # [29.14665988998162, 71.50483988206251, 0, 0, 0, 0], + # [10.348573211586011, 60.72592564225028, 0, 0, 0, 0], + # ], + # [ + # [51.13165661671334, 186.21164558438093, 0, 0, 0, 0], + # [81.84135402612488, 145.5432099387185, 0, 0, 0, 0], + # [85.40704432643088, 127.96151767628152, 0, 0, 0, 0], + # [79.35356809203516, 115.94172822266626, 0, 0, 0, 0], + # [67.9181412213978, 105.24662567941266, 0, 0, 0, 0], + # [52.53627651062867, 94.44069725041082, 0, 0, 0, 0], + # [33.80322685465324, 82.92869004073522, 0, 0, 0, 0], + # [12.001895558999173, 70.42770074485833, 0, 0, 0, 0], + # ], + # [ + # [44.08801004196201, 160.56004134571623, 0, 0, 0, 0], + # [70.56728995109746, 125.49389020226235, 0, 0, 0, 0], + # [73.64178822023885, 110.33416575148763, 0, 0, 0, 0], + # [68.42220922221401, 99.97016362056426, 0, 0, 0, 0], + # [58.56207074702157, 90.74836601949357, 0, 0, 0, 0], + # [45.29913637906247, 81.43100936387464, 0, 0, 0, 0], + # [29.14665988998162, 71.50483988206251, 0, 0, 0, 0], + # [10.348573211586011, 60.72592564225028, 0, 0, 0, 0], + # ], + # [ + # [37.5661150653404, 136.80855593954516, 0, 0, 0, 0], + # [60.12834173347949, 106.92970526109927, 0, 0, 0, 0], + # [62.74803256635736, 94.01254359890069, 0, 0, 0, 0], + # [58.30058063904624, 85.18167787787723, 0, 0, 0, 0], + # [49.89904253000652, 77.32405151956847, 0, 0, 0, 0], + # [38.59808070168636, 69.3850020615263, 0, 0, 0, 0], + # [24.835023811581966, 60.92720084625443, 0, 0, 0, 0], + # [8.81771918620344, 51.742800547242815, 0, 0, 0, 0], + # ], + # [ + # [44.08801004196201, 160.56004134571623, 0, 0, 0, 0], + # [70.56728995109746, 125.49389020226235, 0, 0, 0, 0], + # [73.64178822023885, 110.33416575148763, 0, 0, 0, 0], + # [68.42220922221401, 99.97016362056426, 0, 0, 0, 0], + # [58.56207074702157, 90.74836601949357, 0, 0, 0, 0], + # [45.29913637906247, 81.43100936387464, 0, 0, 0, 0], + # [29.14665988998162, 71.50483988206251, 0, 0, 0, 0], + # [10.348573211586011, 60.72592564225028, 0, 0, 0, 0], + # ], + # ] + # ) + # 60,000 to 80,000 rpm + self.stress = np.array( + [ + [ + [51.131656616713364, 186.21164558438102, 0, 0, 0, 0], + [81.8413540261249, 145.54320993871852, 0, 0, 0, 0], + [85.40704432643089, 127.96151767628156, 0, 0, 0, 0], + [79.3535680920352, 115.9417282226663, 0, 0, 0, 0], + [67.91814122139785, 105.2466256794127, 0, 0, 0, 0], + [52.53627651062872, 94.44069725041086, 0, 0, 0, 0], + [33.803226854653296, 82.92869004073528, 0, 0, 0, 0], + [12.001895558999221, 70.42770074485836, 0, 0, 0, 0], + ], + [ + [66.78420456060523, 243.21521055919152, 0, 0, 0, 0], + [106.89482974840807, 190.09725379750992, 0, 0, 0, 0], + [111.55205789574653, 167.1334108424902, 0, 0, 0, 0], + [103.64547669163787, 151.43409400511518, 0, 0, 0, 0], + [88.70940894223394, 137.46498047923293, 0, 0, 0, 0], + [68.61881013633139, 123.35111477604686, 0, 0, 0, 0], + [44.15115344281247, 108.31502372667464, 0, 0, 0, 0], + [15.67594521991733, 91.98720097287624, 0, 0, 0, 0], + ], + [ + [51.131656616713364, 186.21164558438102, 0, 0, 0, 0], + [81.8413540261249, 145.54320993871852, 0, 0, 0, 0], + [85.40704432643089, 127.96151767628156, 0, 0, 0, 0], + [79.3535680920352, 115.9417282226663, 0, 0, 0, 0], + [67.91814122139785, 105.2466256794127, 0, 0, 0, 0], + [52.53627651062872, 94.44069725041086, 0, 0, 0, 0], + [33.803226854653296, 82.92869004073528, 0, 0, 0, 0], + [12.001895558999221, 70.42770074485836, 0, 0, 0, 0], + ], + [ + [37.56611506534044, 136.80855593954522, 0, 0, 0, 0], + [60.128341733479516, 106.92970526109931, 0, 0, 0, 0], + [62.74803256635741, 94.01254359890075, 0, 0, 0, 0], + [58.30058063904628, 85.18167787787728, 0, 0, 0, 0], + [49.899042530006575, 77.32405151956851, 0, 0, 0, 0], + [38.5980807016864, 69.38500206152634, 0, 0, 0, 0], + [24.835023811582005, 60.92720084625447, 0, 0, 0, 0], + [8.817719186203488, 51.74280054724287, 0, 0, 0, 0], + ], + [ + [51.13165661671336, 186.211645584381, 0, 0, 0, 0], + [81.8413540261249, 145.54320993871852, 0, 0, 0, 0], + [85.40704432643089, 127.96151767628156, 0, 0, 0, 0], + [79.3535680920352, 115.94172822266628, 0, 0, 0, 0], + [67.91814122139785, 105.24662567941269, 0, 0, 0, 0], + [52.536276510628696, 94.44069725041085, 0, 0, 0, 0], + [33.80322685465327, 82.92869004073526, 0, 0, 0, 0], + [12.001895558999221, 70.42770074485836, 0, 0, 0, 0], + ], + ] + ) + + self.temperatures = np.array( + [ + [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], + [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], + [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], + [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], + [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], + ] + ) + self.volumes = np.array( + [ + [ + 889.4101786, + 1344.457247, + 1799.504315, + 2254.551383, + 2709.598451, + 3164.645519, + 3619.692587, + 4074.739656, + ], + [ + 889.4101786, + 1344.457247, + 1799.504315, + 2254.551383, + 2709.598451, + 3164.645519, + 3619.692587, + 4074.739656, + ], + [ + 889.4101786, + 1344.457247, + 1799.504315, + 2254.551383, + 2709.598451, + 3164.645519, + 3619.692587, + 4074.739656, + ], + [ + 889.4101786, + 1344.457247, + 1799.504315, + 2254.551383, + 2709.598451, + 3164.645519, + 3619.692587, + 4074.739656, + ], + [ + 889.4101786, + 1344.457247, + 1799.504315, + 2254.551383, + 2709.598451, + 3164.645519, + 3619.692587, + 4074.739656, + ], + ] + ) + + # Number of cycles to failure + self.nf = 100000 + + # Material properties + self.m = 7.65 + self.s0 = 74.79 * ((1000) ** (3 / self.m)) # in mm 74.79 in m + self.c_bar = 0.82 + self.nu = 0.219 + + self.material = materials.StandardCeramicMaterial( + np.array([0, 1000.0]), + np.array([self.s0, self.s0]), + np.array([0, 1000.0]), + np.array([self.m, self.m]), + self.c_bar, + self.nu, + ) + + self.model_time_dep = damage_time_dep_cyclic.CSEModelPennyShapedFlaw( + solverparams.ParameterSet() + ) + + def test_definition(self): + k = self.s0 ** (-self.m) + kp = (self.m + 1) * k + + actual = self.model_time_dep.calculate_element_log_reliability( + self.stress, self.temperatures, self.volumes, self.nf, self.material + ) + + # Summing up log probabilities over nelem and taking the value of one + R_CSE_PSF = np.exp(np.sum(actual, axis=1))[0] + # R_CSE_PSF = np.exp(np.sum(actual,axis=tuple(range(actual.ndim))[1:]))[-1] + print("Time dep Reliability CSE_PSF = ", R_CSE_PSF) + + # Evaluating Probability of Failure + Pf_CSE_PSF = 1 - R_CSE_PSF + print("Time dep Probability of failure CSE_PSF = ", Pf_CSE_PSF) + + +class TestSMMModelGriffithFlaw(unittest.TestCase): + def setUp(self): + # # 60,000 to 70,000 rpm + # self.stress = np.array( + # [ + # [ + # [44.08801004196201, 160.56004134571623, 0, 0, 0, 0], + # [70.56728995109746, 125.49389020226235, 0, 0, 0, 0], + # [73.64178822023885, 110.33416575148763, 0, 0, 0, 0], + # [68.42220922221401, 99.97016362056426, 0, 0, 0, 0], + # [58.56207074702157, 90.74836601949357, 0, 0, 0, 0], + # [45.29913637906247, 81.43100936387464, 0, 0, 0, 0], + # [29.14665988998162, 71.50483988206251, 0, 0, 0, 0], + # [10.348573211586011, 60.72592564225028, 0, 0, 0, 0], + # ], + # [ + # [51.13165661671334, 186.21164558438093, 0, 0, 0, 0], + # [81.84135402612488, 145.5432099387185, 0, 0, 0, 0], + # [85.40704432643088, 127.96151767628152, 0, 0, 0, 0], + # [79.35356809203516, 115.94172822266626, 0, 0, 0, 0], + # [67.9181412213978, 105.24662567941266, 0, 0, 0, 0], + # [52.53627651062867, 94.44069725041082, 0, 0, 0, 0], + # [33.80322685465324, 82.92869004073522, 0, 0, 0, 0], + # [12.001895558999173, 70.42770074485833, 0, 0, 0, 0], + # ], + # [ + # [44.08801004196201, 160.56004134571623, 0, 0, 0, 0], + # [70.56728995109746, 125.49389020226235, 0, 0, 0, 0], + # [73.64178822023885, 110.33416575148763, 0, 0, 0, 0], + # [68.42220922221401, 99.97016362056426, 0, 0, 0, 0], + # [58.56207074702157, 90.74836601949357, 0, 0, 0, 0], + # [45.29913637906247, 81.43100936387464, 0, 0, 0, 0], + # [29.14665988998162, 71.50483988206251, 0, 0, 0, 0], + # [10.348573211586011, 60.72592564225028, 0, 0, 0, 0], + # ], + # [ + # [37.5661150653404, 136.80855593954516, 0, 0, 0, 0], + # [60.12834173347949, 106.92970526109927, 0, 0, 0, 0], + # [62.74803256635736, 94.01254359890069, 0, 0, 0, 0], + # [58.30058063904624, 85.18167787787723, 0, 0, 0, 0], + # [49.89904253000652, 77.32405151956847, 0, 0, 0, 0], + # [38.59808070168636, 69.3850020615263, 0, 0, 0, 0], + # [24.835023811581966, 60.92720084625443, 0, 0, 0, 0], + # [8.81771918620344, 51.742800547242815, 0, 0, 0, 0], + # ], + # [ + # [44.08801004196201, 160.56004134571623, 0, 0, 0, 0], + # [70.56728995109746, 125.49389020226235, 0, 0, 0, 0], + # [73.64178822023885, 110.33416575148763, 0, 0, 0, 0], + # [68.42220922221401, 99.97016362056426, 0, 0, 0, 0], + # [58.56207074702157, 90.74836601949357, 0, 0, 0, 0], + # [45.29913637906247, 81.43100936387464, 0, 0, 0, 0], + # [29.14665988998162, 71.50483988206251, 0, 0, 0, 0], + # [10.348573211586011, 60.72592564225028, 0, 0, 0, 0], + # ], + # ] + # ) + # 60,000 to 80,000 rpm + self.stress = np.array( + [ + [ + [51.131656616713364, 186.21164558438102, 0, 0, 0, 0], + [81.8413540261249, 145.54320993871852, 0, 0, 0, 0], + [85.40704432643089, 127.96151767628156, 0, 0, 0, 0], + [79.3535680920352, 115.9417282226663, 0, 0, 0, 0], + [67.91814122139785, 105.2466256794127, 0, 0, 0, 0], + [52.53627651062872, 94.44069725041086, 0, 0, 0, 0], + [33.803226854653296, 82.92869004073528, 0, 0, 0, 0], + [12.001895558999221, 70.42770074485836, 0, 0, 0, 0], + ], + [ + [66.78420456060523, 243.21521055919152, 0, 0, 0, 0], + [106.89482974840807, 190.09725379750992, 0, 0, 0, 0], + [111.55205789574653, 167.1334108424902, 0, 0, 0, 0], + [103.64547669163787, 151.43409400511518, 0, 0, 0, 0], + [88.70940894223394, 137.46498047923293, 0, 0, 0, 0], + [68.61881013633139, 123.35111477604686, 0, 0, 0, 0], + [44.15115344281247, 108.31502372667464, 0, 0, 0, 0], + [15.67594521991733, 91.98720097287624, 0, 0, 0, 0], + ], + [ + [51.131656616713364, 186.21164558438102, 0, 0, 0, 0], + [81.8413540261249, 145.54320993871852, 0, 0, 0, 0], + [85.40704432643089, 127.96151767628156, 0, 0, 0, 0], + [79.3535680920352, 115.9417282226663, 0, 0, 0, 0], + [67.91814122139785, 105.2466256794127, 0, 0, 0, 0], + [52.53627651062872, 94.44069725041086, 0, 0, 0, 0], + [33.803226854653296, 82.92869004073528, 0, 0, 0, 0], + [12.001895558999221, 70.42770074485836, 0, 0, 0, 0], + ], + [ + [37.56611506534044, 136.80855593954522, 0, 0, 0, 0], + [60.128341733479516, 106.92970526109931, 0, 0, 0, 0], + [62.74803256635741, 94.01254359890075, 0, 0, 0, 0], + [58.30058063904628, 85.18167787787728, 0, 0, 0, 0], + [49.899042530006575, 77.32405151956851, 0, 0, 0, 0], + [38.5980807016864, 69.38500206152634, 0, 0, 0, 0], + [24.835023811582005, 60.92720084625447, 0, 0, 0, 0], + [8.817719186203488, 51.74280054724287, 0, 0, 0, 0], + ], + [ + [51.13165661671336, 186.211645584381, 0, 0, 0, 0], + [81.8413540261249, 145.54320993871852, 0, 0, 0, 0], + [85.40704432643089, 127.96151767628156, 0, 0, 0, 0], + [79.3535680920352, 115.94172822266628, 0, 0, 0, 0], + [67.91814122139785, 105.24662567941269, 0, 0, 0, 0], + [52.536276510628696, 94.44069725041085, 0, 0, 0, 0], + [33.80322685465327, 82.92869004073526, 0, 0, 0, 0], + [12.001895558999221, 70.42770074485836, 0, 0, 0, 0], + ], + ] + ) + + vol_factor = 1 + self.volumes = np.loadtxt("Spinning_disk_volumes.txt") + self.volumes = vol_factor * (np.tile(self.volumes, data.shape[0])).reshape( + data.shape[0], 8 + ) + + # Number of cycles to failure + self.nf = 1 + + # Material properties + self.m = 7.65 + self.s0 = 74.79 * ((1000) ** (3 / self.m)) # in mm 74.79 in m + self.c_bar = 0.82 + self.nu = 0.219 + + self.material = materials.StandardCeramicMaterial( + np.array([0, 1000.0]), + np.array([self.s0, self.s0]), + np.array([0, 1000.0]), + np.array([self.m, self.m]), + self.c_bar, + self.nu, + ) + + self.model_time_dep = damage_time_dep_cyclic.SMMModelGriffithFlaw( + solverparams.ParameterSet() + ) + + def test_definition(self): + k = self.s0 ** (-self.m) + kp = (2.99) * k + + actual = self.model_time_dep.calculate_element_log_reliability( + self.stress, self.temperatures, self.volumes, self.nf, self.material + ) + + # Summing up log probabilities over nelem and taking the value of one + R_SMM_GF = np.exp(np.sum(actual, axis=1))[0] + + # Evaluating Probability of Failure + Pf_SMM_GF = 1 - R_SMM_GF + print("Time dep Probability of failure SMM_GF = ", Pf_SMM_GF) + + +class TestSMMModelPennyShapedFlaw(unittest.TestCase): + def setUp(self): + # # 60,000 to 70,000 rpm + # data = np.loadtxt("Spinning_disk_cyclic_60000_70000.txt") + + # # 60,000 to 80,000 rpm + data = np.loadtxt("Spinning_disk_cyclic_60000_80000.txt") + + self.stress = data.reshape(data.shape[0], 8, -1) + + vol_factor = 1 + self.volumes = np.loadtxt("Spinning_disk_volumes.txt") + self.volumes = vol_factor * (np.tile(self.volumes, data.shape[0])).reshape( + data.shape[0], 8 + ) + + # Number of cycles to failure + self.nf = 1 + + # Material properties + self.m = 7.65 + self.s0 = 74.79 * ((1000) ** (3 / self.m)) # in mm 74.79 in m + self.c_bar = 0.82 + self.nu = 0.219 + + self.material = materials.StandardCeramicMaterial( + np.array([0, 1000.0]), + np.array([self.s0, self.s0]), + np.array([0, 1000.0]), + np.array([self.m, self.m]), + self.c_bar, + self.nu, + ) + + self.model_time_dep = damage_time_dep_cyclic.SMMModelPennyShapedFlaw( + solverparams.ParameterSet() + ) + + def test_definition(self): + k = self.s0 ** (-self.m) + kp = (2.99) * k + + actual = self.model_time_dep.calculate_element_log_reliability( + self.stress, self.temperatures, self.volumes, self.nf, self.material + ) + print("actual shape =", actual.shape) + + # Summing up log probabilities over nelem and taking the value of one + R_SMM_PSF = np.exp(np.sum(actual, axis=1))[0] + print("Time dep Reliability SMM_PSF = ", R_SMM_PSF) + + # Evaluating Probability of Failure + Pf_SMM_PSF = 1 - R_SMM_PSF + print("Time dep Probability of failure SMM_PSF = ", Pf_SMM_PSF) From 96626d2bd27dbe99797a8c1a9d4ed59aee472b71 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Fri, 17 Feb 2023 14:48:32 -0600 Subject: [PATCH 02/71] Use black to format a file --- .github/workflows/test.yml | 2 +- srlife/damage_time_dep_cyclic.py | 31 +++++++++++-------------------- 2 files changed, 12 insertions(+), 21 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f8bbe0c..ea2f37b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -5,7 +5,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - run: sudo apt-get install cmake libblas-dev liblapack-dev python3-setuptools python3-pip python3-dev python3-nose pylint3 + - run: sudo apt-get install cmake libblas-dev liblapack-dev python3-setuptools python3-pip python3-dev python3-nose - run: pip3 install --user wheel - run: pip3 install --user -r requirements.txt - run: nosetests3 diff --git a/srlife/damage_time_dep_cyclic.py b/srlife/damage_time_dep_cyclic.py index b0bc7eb..0d21128 100644 --- a/srlife/damage_time_dep_cyclic.py +++ b/srlife/damage_time_dep_cyclic.py @@ -83,8 +83,7 @@ def determine_reliability( results = list( decorator( p.imap( - lambda x: self.tube_log_reliability( - x, material, receiver), + lambda x: self.tube_log_reliability(x, material, receiver), receiver.tubes, ), receiver.ntubes, @@ -357,8 +356,7 @@ def calculate_flattened_eq_stress( # Time dependent equivalent stress sigma_e_0 = ( - ((time_integral * self.tot_time) / self.Bv) + - (sigma_e_max ** (self.Nv - 2)) + ((time_integral * self.tot_time) / self.Bv) + (sigma_e_max ** (self.Nv - 2)) ) ** (1 / (self.Nv - 2)) # Suppressing warning given when negative numbers are raised to rational numbers @@ -493,8 +491,7 @@ def calculate_element_log_reliability( # Time dependent principal stress pstress_0 = ( - (time_integral * self.tot_time) / - self.Bv + (pstress_max ** (self.Nv - 2)) + (time_integral * self.tot_time) / self.Bv + (pstress_max ** (self.Nv - 2)) ) ** (1 / (self.Nv - 2)) return -kvals * np.nansum(pstress_0 ** mvals[..., None], axis=-1) * volumes @@ -573,13 +570,11 @@ def calculate_element_log_reliability( # Average normal tensile stress raied to exponent mv avg_nstress = ( - self.calculate_avg_normal_stress( - mandel_stress, temperatures, nf, material) + self.calculate_avg_normal_stress(mandel_stress, temperatures, nf, material) ) ** (1 / mvals[..., None, None]) return ( - -kpvals[..., None] * - (avg_nstress ** mvals[..., None]) * volumes[..., None] + -kpvals[..., None] * (avg_nstress ** mvals[..., None]) * volumes[..., None] ) @@ -749,8 +744,7 @@ def calculate_eq_stress(self, mandel_stress, temperatures, material): # Projected equivalent stress return 0.5 * ( - sigma_n + np.sqrt((sigma_n**2) + - ((4 * tau / (cbar * (2 - nu))) ** 2)) + sigma_n + np.sqrt((sigma_n**2) + ((4 * tau / (cbar * (2 - nu))) ** 2)) ) @@ -883,8 +877,7 @@ def calculate_max_cycles(self, Dc, Df, material, rep_min=1, rep_max=1e6): return np.inf return opt.brentq( - lambda N: material.inside_envelope( - "cfinteraction", Df(N), Dc(N)) - 0.5, + lambda N: material.inside_envelope("cfinteraction", Df(N), Dc(N)) - 0.5, rep_min, rep_max, ) @@ -937,7 +930,7 @@ def creep_damage(self, tube, material, receiver): cycle_dmg = np.array( [ - np.sum(time_dmg[inds[i]: inds[i + 1]], axis=0) + np.sum(time_dmg[inds[i] : inds[i + 1]], axis=0) for i in range(receiver.days) ] ) @@ -972,12 +965,11 @@ def fatigue_damage(self, tube, material, receiver): self.cycle_fatigue( np.array( [ - ef * - tube.quadrature_results[en][inds[i]: inds[i + 1]] + ef * tube.quadrature_results[en][inds[i] : inds[i + 1]] for en, ef in zip(strain_names, strain_factors) ] ), - tube.quadrature_results["temperature"][inds[i] : inds[i + 1]], + tube.quadrature_results["temperature"][inds[i] : inds[i + 1]], material, ) for i in range(receiver.days) @@ -1031,8 +1023,7 @@ def cycle_fatigue(self, strains, temperatures, material, nu=0.5): (de[0] - de[1]) ** 2 + (de[1] - de[2]) ** 2 + (de[2] - de[0]) ** 2.0 - + 3.0 / 2.0 * (de[3] ** 2.0 + de[4] - ** 2.0 + de[5] ** 2.0) + + 3.0 / 2.0 * (de[3] ** 2.0 + de[4] ** 2.0 + de[5] ** 2.0) ) ) pt_eranges = np.maximum(pt_eranges, eq) From a69c2e992b36efb2355f7752b4a19923b9649dc8 Mon Sep 17 00:00:00 2001 From: pschaugule <98907569+pschaugule@users.noreply.github.com> Date: Fri, 17 Feb 2023 15:03:58 -0600 Subject: [PATCH 03/71] Update test_ceramic_damage_CARES_cyclic.py --- test/test_ceramic_damage_CARES_cyclic.py | 1 + 1 file changed, 1 insertion(+) diff --git a/test/test_ceramic_damage_CARES_cyclic.py b/test/test_ceramic_damage_CARES_cyclic.py index 4ca4bc2..05ac0cf 100644 --- a/test/test_ceramic_damage_CARES_cyclic.py +++ b/test/test_ceramic_damage_CARES_cyclic.py @@ -13,6 +13,7 @@ ) + class TestPIAModel(unittest.TestCase): def setUp(self): # 60,000 to 70,000 rpm From 53af6ce13190c5c9d742c16158697770a6c09572 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Mon, 20 Feb 2023 13:11:54 -0600 Subject: [PATCH 04/71] Update test file for cyclic verification --- test/test_ceramic_damage_CARES_cyclic.py | 497 ++--------------------- 1 file changed, 37 insertions(+), 460 deletions(-) diff --git a/test/test_ceramic_damage_CARES_cyclic.py b/test/test_ceramic_damage_CARES_cyclic.py index 05ac0cf..245e6f3 100644 --- a/test/test_ceramic_damage_CARES_cyclic.py +++ b/test/test_ceramic_damage_CARES_cyclic.py @@ -8,12 +8,12 @@ from srlife import ( materials, damage, + damage_time_dep, damage_time_dep_cyclic, solverparams, ) - class TestPIAModel(unittest.TestCase): def setUp(self): # 60,000 to 70,000 rpm @@ -130,6 +130,7 @@ def setUp(self): # data = np.loadtxt("Spinning_disk_cyclic_60000_70000.txt") data = np.loadtxt("Spinning_disk_cyclic_60000_80000.txt") + # data = np.loadtxt("Spinning_disk_static_60000.txt") self.stress = data.reshape(data.shape[0], 8, -1) @@ -139,6 +140,8 @@ def setUp(self): data.shape[0], 8 ) + self.temperatures = np.ones((data.shape[0], 8)) + # Number of cycles to failure self.nf = 1 @@ -180,183 +183,22 @@ def test_definition(self): class TestCSEModelGriffithFlaw(unittest.TestCase): def setUp(self): - # # 60,000 to 70,000 rpm - # self.stress = np.array( - # [ - # [ - # [44.08801004196201, 160.56004134571623, 0, 0, 0, 0], - # [70.56728995109746, 125.49389020226235, 0, 0, 0, 0], - # [73.64178822023885, 110.33416575148763, 0, 0, 0, 0], - # [68.42220922221401, 99.97016362056426, 0, 0, 0, 0], - # [58.56207074702157, 90.74836601949357, 0, 0, 0, 0], - # [45.29913637906247, 81.43100936387464, 0, 0, 0, 0], - # [29.14665988998162, 71.50483988206251, 0, 0, 0, 0], - # [10.348573211586011, 60.72592564225028, 0, 0, 0, 0], - # ], - # [ - # [51.13165661671334, 186.21164558438093, 0, 0, 0, 0], - # [81.84135402612488, 145.5432099387185, 0, 0, 0, 0], - # [85.40704432643088, 127.96151767628152, 0, 0, 0, 0], - # [79.35356809203516, 115.94172822266626, 0, 0, 0, 0], - # [67.9181412213978, 105.24662567941266, 0, 0, 0, 0], - # [52.53627651062867, 94.44069725041082, 0, 0, 0, 0], - # [33.80322685465324, 82.92869004073522, 0, 0, 0, 0], - # [12.001895558999173, 70.42770074485833, 0, 0, 0, 0], - # ], - # [ - # [44.08801004196201, 160.56004134571623, 0, 0, 0, 0], - # [70.56728995109746, 125.49389020226235, 0, 0, 0, 0], - # [73.64178822023885, 110.33416575148763, 0, 0, 0, 0], - # [68.42220922221401, 99.97016362056426, 0, 0, 0, 0], - # [58.56207074702157, 90.74836601949357, 0, 0, 0, 0], - # [45.29913637906247, 81.43100936387464, 0, 0, 0, 0], - # [29.14665988998162, 71.50483988206251, 0, 0, 0, 0], - # [10.348573211586011, 60.72592564225028, 0, 0, 0, 0], - # ], - # [ - # [37.5661150653404, 136.80855593954516, 0, 0, 0, 0], - # [60.12834173347949, 106.92970526109927, 0, 0, 0, 0], - # [62.74803256635736, 94.01254359890069, 0, 0, 0, 0], - # [58.30058063904624, 85.18167787787723, 0, 0, 0, 0], - # [49.89904253000652, 77.32405151956847, 0, 0, 0, 0], - # [38.59808070168636, 69.3850020615263, 0, 0, 0, 0], - # [24.835023811581966, 60.92720084625443, 0, 0, 0, 0], - # [8.81771918620344, 51.742800547242815, 0, 0, 0, 0], - # ], - # [ - # [44.08801004196201, 160.56004134571623, 0, 0, 0, 0], - # [70.56728995109746, 125.49389020226235, 0, 0, 0, 0], - # [73.64178822023885, 110.33416575148763, 0, 0, 0, 0], - # [68.42220922221401, 99.97016362056426, 0, 0, 0, 0], - # [58.56207074702157, 90.74836601949357, 0, 0, 0, 0], - # [45.29913637906247, 81.43100936387464, 0, 0, 0, 0], - # [29.14665988998162, 71.50483988206251, 0, 0, 0, 0], - # [10.348573211586011, 60.72592564225028, 0, 0, 0, 0], - # ], - # ] - # ) - # 60,000 to 80,000 rpm - self.stress = np.array( - [ - [ - [51.131656616713364, 186.21164558438102, 0, 0, 0, 0], - [81.8413540261249, 145.54320993871852, 0, 0, 0, 0], - [85.40704432643089, 127.96151767628156, 0, 0, 0, 0], - [79.3535680920352, 115.9417282226663, 0, 0, 0, 0], - [67.91814122139785, 105.2466256794127, 0, 0, 0, 0], - [52.53627651062872, 94.44069725041086, 0, 0, 0, 0], - [33.803226854653296, 82.92869004073528, 0, 0, 0, 0], - [12.001895558999221, 70.42770074485836, 0, 0, 0, 0], - ], - [ - [66.78420456060523, 243.21521055919152, 0, 0, 0, 0], - [106.89482974840807, 190.09725379750992, 0, 0, 0, 0], - [111.55205789574653, 167.1334108424902, 0, 0, 0, 0], - [103.64547669163787, 151.43409400511518, 0, 0, 0, 0], - [88.70940894223394, 137.46498047923293, 0, 0, 0, 0], - [68.61881013633139, 123.35111477604686, 0, 0, 0, 0], - [44.15115344281247, 108.31502372667464, 0, 0, 0, 0], - [15.67594521991733, 91.98720097287624, 0, 0, 0, 0], - ], - [ - [51.131656616713364, 186.21164558438102, 0, 0, 0, 0], - [81.8413540261249, 145.54320993871852, 0, 0, 0, 0], - [85.40704432643089, 127.96151767628156, 0, 0, 0, 0], - [79.3535680920352, 115.9417282226663, 0, 0, 0, 0], - [67.91814122139785, 105.2466256794127, 0, 0, 0, 0], - [52.53627651062872, 94.44069725041086, 0, 0, 0, 0], - [33.803226854653296, 82.92869004073528, 0, 0, 0, 0], - [12.001895558999221, 70.42770074485836, 0, 0, 0, 0], - ], - [ - [37.56611506534044, 136.80855593954522, 0, 0, 0, 0], - [60.128341733479516, 106.92970526109931, 0, 0, 0, 0], - [62.74803256635741, 94.01254359890075, 0, 0, 0, 0], - [58.30058063904628, 85.18167787787728, 0, 0, 0, 0], - [49.899042530006575, 77.32405151956851, 0, 0, 0, 0], - [38.5980807016864, 69.38500206152634, 0, 0, 0, 0], - [24.835023811582005, 60.92720084625447, 0, 0, 0, 0], - [8.817719186203488, 51.74280054724287, 0, 0, 0, 0], - ], - [ - [51.13165661671336, 186.211645584381, 0, 0, 0, 0], - [81.8413540261249, 145.54320993871852, 0, 0, 0, 0], - [85.40704432643089, 127.96151767628156, 0, 0, 0, 0], - [79.3535680920352, 115.94172822266628, 0, 0, 0, 0], - [67.91814122139785, 105.24662567941269, 0, 0, 0, 0], - [52.536276510628696, 94.44069725041085, 0, 0, 0, 0], - [33.80322685465327, 82.92869004073526, 0, 0, 0, 0], - [12.001895558999221, 70.42770074485836, 0, 0, 0, 0], - ], - ] - ) + # data = np.loadtxt("Spinning_disk_cyclic_60000_70000.txt") + data = np.loadtxt("Spinning_disk_cyclic_60000_80000.txt") + # data = np.loadtxt("Spinning_disk_static_60000.txt") - self.temperatures = np.array( - [ - [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], - [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], - [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], - [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], - [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], - ] - ) - self.volumes = np.array( - [ - [ - 889.4101786, - 1344.457247, - 1799.504315, - 2254.551383, - 2709.598451, - 3164.645519, - 3619.692587, - 4074.739656, - ], - [ - 889.4101786, - 1344.457247, - 1799.504315, - 2254.551383, - 2709.598451, - 3164.645519, - 3619.692587, - 4074.739656, - ], - [ - 889.4101786, - 1344.457247, - 1799.504315, - 2254.551383, - 2709.598451, - 3164.645519, - 3619.692587, - 4074.739656, - ], - [ - 889.4101786, - 1344.457247, - 1799.504315, - 2254.551383, - 2709.598451, - 3164.645519, - 3619.692587, - 4074.739656, - ], - [ - 889.4101786, - 1344.457247, - 1799.504315, - 2254.551383, - 2709.598451, - 3164.645519, - 3619.692587, - 4074.739656, - ], - ] + self.stress = data.reshape(data.shape[0], 8, -1) + + vol_factor = 1 + self.volumes = np.loadtxt("Spinning_disk_volumes.txt") + self.volumes = vol_factor * (np.tile(self.volumes, data.shape[0])).reshape( + data.shape[0], 8 ) + self.temperatures = np.ones((data.shape[0], 8)) + # Number of cycles to failure - self.nf = 100000 + self.nf = 1 # Material properties self.m = 7.65 @@ -399,183 +241,22 @@ def test_definition(self): class TestCSEModelPennyShapedFlaw(unittest.TestCase): def setUp(self): - # # 60,000 to 70,000 rpm - # self.stress = np.array( - # [ - # [ - # [44.08801004196201, 160.56004134571623, 0, 0, 0, 0], - # [70.56728995109746, 125.49389020226235, 0, 0, 0, 0], - # [73.64178822023885, 110.33416575148763, 0, 0, 0, 0], - # [68.42220922221401, 99.97016362056426, 0, 0, 0, 0], - # [58.56207074702157, 90.74836601949357, 0, 0, 0, 0], - # [45.29913637906247, 81.43100936387464, 0, 0, 0, 0], - # [29.14665988998162, 71.50483988206251, 0, 0, 0, 0], - # [10.348573211586011, 60.72592564225028, 0, 0, 0, 0], - # ], - # [ - # [51.13165661671334, 186.21164558438093, 0, 0, 0, 0], - # [81.84135402612488, 145.5432099387185, 0, 0, 0, 0], - # [85.40704432643088, 127.96151767628152, 0, 0, 0, 0], - # [79.35356809203516, 115.94172822266626, 0, 0, 0, 0], - # [67.9181412213978, 105.24662567941266, 0, 0, 0, 0], - # [52.53627651062867, 94.44069725041082, 0, 0, 0, 0], - # [33.80322685465324, 82.92869004073522, 0, 0, 0, 0], - # [12.001895558999173, 70.42770074485833, 0, 0, 0, 0], - # ], - # [ - # [44.08801004196201, 160.56004134571623, 0, 0, 0, 0], - # [70.56728995109746, 125.49389020226235, 0, 0, 0, 0], - # [73.64178822023885, 110.33416575148763, 0, 0, 0, 0], - # [68.42220922221401, 99.97016362056426, 0, 0, 0, 0], - # [58.56207074702157, 90.74836601949357, 0, 0, 0, 0], - # [45.29913637906247, 81.43100936387464, 0, 0, 0, 0], - # [29.14665988998162, 71.50483988206251, 0, 0, 0, 0], - # [10.348573211586011, 60.72592564225028, 0, 0, 0, 0], - # ], - # [ - # [37.5661150653404, 136.80855593954516, 0, 0, 0, 0], - # [60.12834173347949, 106.92970526109927, 0, 0, 0, 0], - # [62.74803256635736, 94.01254359890069, 0, 0, 0, 0], - # [58.30058063904624, 85.18167787787723, 0, 0, 0, 0], - # [49.89904253000652, 77.32405151956847, 0, 0, 0, 0], - # [38.59808070168636, 69.3850020615263, 0, 0, 0, 0], - # [24.835023811581966, 60.92720084625443, 0, 0, 0, 0], - # [8.81771918620344, 51.742800547242815, 0, 0, 0, 0], - # ], - # [ - # [44.08801004196201, 160.56004134571623, 0, 0, 0, 0], - # [70.56728995109746, 125.49389020226235, 0, 0, 0, 0], - # [73.64178822023885, 110.33416575148763, 0, 0, 0, 0], - # [68.42220922221401, 99.97016362056426, 0, 0, 0, 0], - # [58.56207074702157, 90.74836601949357, 0, 0, 0, 0], - # [45.29913637906247, 81.43100936387464, 0, 0, 0, 0], - # [29.14665988998162, 71.50483988206251, 0, 0, 0, 0], - # [10.348573211586011, 60.72592564225028, 0, 0, 0, 0], - # ], - # ] - # ) - # 60,000 to 80,000 rpm - self.stress = np.array( - [ - [ - [51.131656616713364, 186.21164558438102, 0, 0, 0, 0], - [81.8413540261249, 145.54320993871852, 0, 0, 0, 0], - [85.40704432643089, 127.96151767628156, 0, 0, 0, 0], - [79.3535680920352, 115.9417282226663, 0, 0, 0, 0], - [67.91814122139785, 105.2466256794127, 0, 0, 0, 0], - [52.53627651062872, 94.44069725041086, 0, 0, 0, 0], - [33.803226854653296, 82.92869004073528, 0, 0, 0, 0], - [12.001895558999221, 70.42770074485836, 0, 0, 0, 0], - ], - [ - [66.78420456060523, 243.21521055919152, 0, 0, 0, 0], - [106.89482974840807, 190.09725379750992, 0, 0, 0, 0], - [111.55205789574653, 167.1334108424902, 0, 0, 0, 0], - [103.64547669163787, 151.43409400511518, 0, 0, 0, 0], - [88.70940894223394, 137.46498047923293, 0, 0, 0, 0], - [68.61881013633139, 123.35111477604686, 0, 0, 0, 0], - [44.15115344281247, 108.31502372667464, 0, 0, 0, 0], - [15.67594521991733, 91.98720097287624, 0, 0, 0, 0], - ], - [ - [51.131656616713364, 186.21164558438102, 0, 0, 0, 0], - [81.8413540261249, 145.54320993871852, 0, 0, 0, 0], - [85.40704432643089, 127.96151767628156, 0, 0, 0, 0], - [79.3535680920352, 115.9417282226663, 0, 0, 0, 0], - [67.91814122139785, 105.2466256794127, 0, 0, 0, 0], - [52.53627651062872, 94.44069725041086, 0, 0, 0, 0], - [33.803226854653296, 82.92869004073528, 0, 0, 0, 0], - [12.001895558999221, 70.42770074485836, 0, 0, 0, 0], - ], - [ - [37.56611506534044, 136.80855593954522, 0, 0, 0, 0], - [60.128341733479516, 106.92970526109931, 0, 0, 0, 0], - [62.74803256635741, 94.01254359890075, 0, 0, 0, 0], - [58.30058063904628, 85.18167787787728, 0, 0, 0, 0], - [49.899042530006575, 77.32405151956851, 0, 0, 0, 0], - [38.5980807016864, 69.38500206152634, 0, 0, 0, 0], - [24.835023811582005, 60.92720084625447, 0, 0, 0, 0], - [8.817719186203488, 51.74280054724287, 0, 0, 0, 0], - ], - [ - [51.13165661671336, 186.211645584381, 0, 0, 0, 0], - [81.8413540261249, 145.54320993871852, 0, 0, 0, 0], - [85.40704432643089, 127.96151767628156, 0, 0, 0, 0], - [79.3535680920352, 115.94172822266628, 0, 0, 0, 0], - [67.91814122139785, 105.24662567941269, 0, 0, 0, 0], - [52.536276510628696, 94.44069725041085, 0, 0, 0, 0], - [33.80322685465327, 82.92869004073526, 0, 0, 0, 0], - [12.001895558999221, 70.42770074485836, 0, 0, 0, 0], - ], - ] - ) + # data = np.loadtxt("Spinning_disk_cyclic_60000_70000.txt") + data = np.loadtxt("Spinning_disk_cyclic_60000_80000.txt") + # data = np.loadtxt("Spinning_disk_static_60000.txt") - self.temperatures = np.array( - [ - [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], - [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], - [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], - [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], - [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], - ] - ) - self.volumes = np.array( - [ - [ - 889.4101786, - 1344.457247, - 1799.504315, - 2254.551383, - 2709.598451, - 3164.645519, - 3619.692587, - 4074.739656, - ], - [ - 889.4101786, - 1344.457247, - 1799.504315, - 2254.551383, - 2709.598451, - 3164.645519, - 3619.692587, - 4074.739656, - ], - [ - 889.4101786, - 1344.457247, - 1799.504315, - 2254.551383, - 2709.598451, - 3164.645519, - 3619.692587, - 4074.739656, - ], - [ - 889.4101786, - 1344.457247, - 1799.504315, - 2254.551383, - 2709.598451, - 3164.645519, - 3619.692587, - 4074.739656, - ], - [ - 889.4101786, - 1344.457247, - 1799.504315, - 2254.551383, - 2709.598451, - 3164.645519, - 3619.692587, - 4074.739656, - ], - ] + self.stress = data.reshape(data.shape[0], 8, -1) + + vol_factor = 1 + self.volumes = np.loadtxt("Spinning_disk_volumes.txt") + self.volumes = vol_factor * (np.tile(self.volumes, data.shape[0])).reshape( + data.shape[0], 8 ) + self.temperatures = np.ones((data.shape[0], 8)) + # Number of cycles to failure - self.nf = 100000 + self.nf = 1 # Material properties self.m = 7.65 @@ -616,116 +297,11 @@ def test_definition(self): class TestSMMModelGriffithFlaw(unittest.TestCase): def setUp(self): - # # 60,000 to 70,000 rpm - # self.stress = np.array( - # [ - # [ - # [44.08801004196201, 160.56004134571623, 0, 0, 0, 0], - # [70.56728995109746, 125.49389020226235, 0, 0, 0, 0], - # [73.64178822023885, 110.33416575148763, 0, 0, 0, 0], - # [68.42220922221401, 99.97016362056426, 0, 0, 0, 0], - # [58.56207074702157, 90.74836601949357, 0, 0, 0, 0], - # [45.29913637906247, 81.43100936387464, 0, 0, 0, 0], - # [29.14665988998162, 71.50483988206251, 0, 0, 0, 0], - # [10.348573211586011, 60.72592564225028, 0, 0, 0, 0], - # ], - # [ - # [51.13165661671334, 186.21164558438093, 0, 0, 0, 0], - # [81.84135402612488, 145.5432099387185, 0, 0, 0, 0], - # [85.40704432643088, 127.96151767628152, 0, 0, 0, 0], - # [79.35356809203516, 115.94172822266626, 0, 0, 0, 0], - # [67.9181412213978, 105.24662567941266, 0, 0, 0, 0], - # [52.53627651062867, 94.44069725041082, 0, 0, 0, 0], - # [33.80322685465324, 82.92869004073522, 0, 0, 0, 0], - # [12.001895558999173, 70.42770074485833, 0, 0, 0, 0], - # ], - # [ - # [44.08801004196201, 160.56004134571623, 0, 0, 0, 0], - # [70.56728995109746, 125.49389020226235, 0, 0, 0, 0], - # [73.64178822023885, 110.33416575148763, 0, 0, 0, 0], - # [68.42220922221401, 99.97016362056426, 0, 0, 0, 0], - # [58.56207074702157, 90.74836601949357, 0, 0, 0, 0], - # [45.29913637906247, 81.43100936387464, 0, 0, 0, 0], - # [29.14665988998162, 71.50483988206251, 0, 0, 0, 0], - # [10.348573211586011, 60.72592564225028, 0, 0, 0, 0], - # ], - # [ - # [37.5661150653404, 136.80855593954516, 0, 0, 0, 0], - # [60.12834173347949, 106.92970526109927, 0, 0, 0, 0], - # [62.74803256635736, 94.01254359890069, 0, 0, 0, 0], - # [58.30058063904624, 85.18167787787723, 0, 0, 0, 0], - # [49.89904253000652, 77.32405151956847, 0, 0, 0, 0], - # [38.59808070168636, 69.3850020615263, 0, 0, 0, 0], - # [24.835023811581966, 60.92720084625443, 0, 0, 0, 0], - # [8.81771918620344, 51.742800547242815, 0, 0, 0, 0], - # ], - # [ - # [44.08801004196201, 160.56004134571623, 0, 0, 0, 0], - # [70.56728995109746, 125.49389020226235, 0, 0, 0, 0], - # [73.64178822023885, 110.33416575148763, 0, 0, 0, 0], - # [68.42220922221401, 99.97016362056426, 0, 0, 0, 0], - # [58.56207074702157, 90.74836601949357, 0, 0, 0, 0], - # [45.29913637906247, 81.43100936387464, 0, 0, 0, 0], - # [29.14665988998162, 71.50483988206251, 0, 0, 0, 0], - # [10.348573211586011, 60.72592564225028, 0, 0, 0, 0], - # ], - # ] - # ) - # 60,000 to 80,000 rpm - self.stress = np.array( - [ - [ - [51.131656616713364, 186.21164558438102, 0, 0, 0, 0], - [81.8413540261249, 145.54320993871852, 0, 0, 0, 0], - [85.40704432643089, 127.96151767628156, 0, 0, 0, 0], - [79.3535680920352, 115.9417282226663, 0, 0, 0, 0], - [67.91814122139785, 105.2466256794127, 0, 0, 0, 0], - [52.53627651062872, 94.44069725041086, 0, 0, 0, 0], - [33.803226854653296, 82.92869004073528, 0, 0, 0, 0], - [12.001895558999221, 70.42770074485836, 0, 0, 0, 0], - ], - [ - [66.78420456060523, 243.21521055919152, 0, 0, 0, 0], - [106.89482974840807, 190.09725379750992, 0, 0, 0, 0], - [111.55205789574653, 167.1334108424902, 0, 0, 0, 0], - [103.64547669163787, 151.43409400511518, 0, 0, 0, 0], - [88.70940894223394, 137.46498047923293, 0, 0, 0, 0], - [68.61881013633139, 123.35111477604686, 0, 0, 0, 0], - [44.15115344281247, 108.31502372667464, 0, 0, 0, 0], - [15.67594521991733, 91.98720097287624, 0, 0, 0, 0], - ], - [ - [51.131656616713364, 186.21164558438102, 0, 0, 0, 0], - [81.8413540261249, 145.54320993871852, 0, 0, 0, 0], - [85.40704432643089, 127.96151767628156, 0, 0, 0, 0], - [79.3535680920352, 115.9417282226663, 0, 0, 0, 0], - [67.91814122139785, 105.2466256794127, 0, 0, 0, 0], - [52.53627651062872, 94.44069725041086, 0, 0, 0, 0], - [33.803226854653296, 82.92869004073528, 0, 0, 0, 0], - [12.001895558999221, 70.42770074485836, 0, 0, 0, 0], - ], - [ - [37.56611506534044, 136.80855593954522, 0, 0, 0, 0], - [60.128341733479516, 106.92970526109931, 0, 0, 0, 0], - [62.74803256635741, 94.01254359890075, 0, 0, 0, 0], - [58.30058063904628, 85.18167787787728, 0, 0, 0, 0], - [49.899042530006575, 77.32405151956851, 0, 0, 0, 0], - [38.5980807016864, 69.38500206152634, 0, 0, 0, 0], - [24.835023811582005, 60.92720084625447, 0, 0, 0, 0], - [8.817719186203488, 51.74280054724287, 0, 0, 0, 0], - ], - [ - [51.13165661671336, 186.211645584381, 0, 0, 0, 0], - [81.8413540261249, 145.54320993871852, 0, 0, 0, 0], - [85.40704432643089, 127.96151767628156, 0, 0, 0, 0], - [79.3535680920352, 115.94172822266628, 0, 0, 0, 0], - [67.91814122139785, 105.24662567941269, 0, 0, 0, 0], - [52.536276510628696, 94.44069725041085, 0, 0, 0, 0], - [33.80322685465327, 82.92869004073526, 0, 0, 0, 0], - [12.001895558999221, 70.42770074485836, 0, 0, 0, 0], - ], - ] - ) + # data = np.loadtxt("Spinning_disk_cyclic_60000_70000.txt") + data = np.loadtxt("Spinning_disk_cyclic_60000_80000.txt") + # data = np.loadtxt("Spinning_disk_static_60000.txt") + + self.stress = data.reshape(data.shape[0], 8, -1) vol_factor = 1 self.volumes = np.loadtxt("Spinning_disk_volumes.txt") @@ -733,6 +309,7 @@ def setUp(self): data.shape[0], 8 ) + self.temperatures = np.ones((data.shape[0], 8)) # Number of cycles to failure self.nf = 1 @@ -773,11 +350,9 @@ def test_definition(self): class TestSMMModelPennyShapedFlaw(unittest.TestCase): def setUp(self): - # # 60,000 to 70,000 rpm # data = np.loadtxt("Spinning_disk_cyclic_60000_70000.txt") - - # # 60,000 to 80,000 rpm data = np.loadtxt("Spinning_disk_cyclic_60000_80000.txt") + # data = np.loadtxt("Spinning_disk_static_60000.txt") self.stress = data.reshape(data.shape[0], 8, -1) @@ -787,6 +362,8 @@ def setUp(self): data.shape[0], 8 ) + self.temperatures = np.ones((data.shape[0], 8)) + # Number of cycles to failure self.nf = 1 From 21aa343fd58f1924c0599c2cb634d6846ac2497a Mon Sep 17 00:00:00 2001 From: pschaugule Date: Mon, 20 Feb 2023 13:21:14 -0600 Subject: [PATCH 05/71] Update test file for cyclic verification 2 --- test/test_ceramic_damage_CARES_cyclic.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/test/test_ceramic_damage_CARES_cyclic.py b/test/test_ceramic_damage_CARES_cyclic.py index 245e6f3..bd0b9cb 100644 --- a/test/test_ceramic_damage_CARES_cyclic.py +++ b/test/test_ceramic_damage_CARES_cyclic.py @@ -1,14 +1,15 @@ import unittest import numpy as np -import csv + +# import csv import matplotlib.pyplot as plt -import os.path + +# import os.path from srlife import ( materials, damage, - damage_time_dep, damage_time_dep_cyclic, solverparams, ) @@ -165,7 +166,7 @@ def setUp(self): ) def test_definition(self): - k = self.s0 ** (-self.m) + # k = self.s0 ** (-self.m) # kp = (2 * self.m + 1) * k actual = self.model_time_dep.calculate_element_log_reliability( From f648baa7c1f07aa1ee8efafadd16332810da2101 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Mon, 20 Feb 2023 13:28:08 -0600 Subject: [PATCH 06/71] Update test file for cyclic verification 3 --- srlife/damage_time_dep_cyclic.py | 5 +++-- test/test_ceramic_damage_CARES_cyclic.py | 16 ++++++++-------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/srlife/damage_time_dep_cyclic.py b/srlife/damage_time_dep_cyclic.py index 0d21128..3ee00e2 100644 --- a/srlife/damage_time_dep_cyclic.py +++ b/srlife/damage_time_dep_cyclic.py @@ -5,7 +5,8 @@ damage material properties """ from scipy import integrate -from scipy.integrate import fixed_quad, quadrature + +# from scipy.integrate import fixed_quad, quadrature from srlife import receiver import numpy as np @@ -399,7 +400,7 @@ def calculate_element_log_reliability( self.mandel_stress = mandel_stress # Principal stresses - pstress = self.calculate_principal_stress(mandel_stress) + # pstress = self.calculate_principal_stress(mandel_stress) # Material parameters svals = self.material.strength(temperatures) diff --git a/test/test_ceramic_damage_CARES_cyclic.py b/test/test_ceramic_damage_CARES_cyclic.py index bd0b9cb..285c241 100644 --- a/test/test_ceramic_damage_CARES_cyclic.py +++ b/test/test_ceramic_damage_CARES_cyclic.py @@ -223,8 +223,8 @@ def setUp(self): # self.model = damage.CSEModelGriffithFlaw(solverparams.ParameterSet()) def test_definition(self): - k = self.s0 ** (-self.m) - kp = (self.m + 1) * k + # k = self.s0 ** (-self.m) + # kp = (self.m + 1) * k actual = self.model_time_dep.calculate_element_log_reliability( self.stress, self.temperatures, self.volumes, self.nf, self.material @@ -279,8 +279,8 @@ def setUp(self): ) def test_definition(self): - k = self.s0 ** (-self.m) - kp = (self.m + 1) * k + # k = self.s0 ** (-self.m) + # kp = (self.m + 1) * k actual = self.model_time_dep.calculate_element_log_reliability( self.stress, self.temperatures, self.volumes, self.nf, self.material @@ -334,8 +334,8 @@ def setUp(self): ) def test_definition(self): - k = self.s0 ** (-self.m) - kp = (2.99) * k + # k = self.s0 ** (-self.m) + # kp = (2.99) * k actual = self.model_time_dep.calculate_element_log_reliability( self.stress, self.temperatures, self.volumes, self.nf, self.material @@ -388,8 +388,8 @@ def setUp(self): ) def test_definition(self): - k = self.s0 ** (-self.m) - kp = (2.99) * k + # k = self.s0 ** (-self.m) + # kp = (2.99) * k actual = self.model_time_dep.calculate_element_log_reliability( self.stress, self.temperatures, self.volumes, self.nf, self.material From 23fc451ef8aeefe6f3030cdde52108f54d00b182 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Mon, 20 Feb 2023 13:31:21 -0600 Subject: [PATCH 07/71] Update test file for cyclic verification 4 --- test/Spinning_disk_cyclic_60000_80000.txt | 361 ++++++++++++++++++++++ 1 file changed, 361 insertions(+) create mode 100644 test/Spinning_disk_cyclic_60000_80000.txt diff --git a/test/Spinning_disk_cyclic_60000_80000.txt b/test/Spinning_disk_cyclic_60000_80000.txt new file mode 100644 index 0000000..cca3434 --- /dev/null +++ b/test/Spinning_disk_cyclic_60000_80000.txt @@ -0,0 +1,361 @@ + 51.131657 186.21165 0 0 0 0 81.841354 145.54321 0 0 0 0 85.407044 127.96152 0 0 0 0 79.353568 115.94173 0 0 0 0 67.918141 105.24663 0 0 0 0 52.536277 94.440697 0 0 0 0 33.803227 82.92869 0 0 0 0 12.001896 70.427701 0 0 0 0 + + 51.642776 188.07304 0 0 0 0 82.659452 146.99808 0 0 0 0 86.260785 129.24064 0 0 0 0 80.146798 117.1007 0 0 0 0 68.597061 106.29869 0 0 0 0 53.061437 95.38474 0 0 0 0 34.141129 83.757657 0 0 0 0 12.121868 71.131706 0 0 0 0 + + 52.15581 189.94141 0 0 0 0 83.480614 148.4584 0 0 0 0 87.117724 130.52455 0 0 0 0 80.942998 118.26401 0 0 0 0 69.278523 107.35469 0 0 0 0 53.588564 96.332319 0 0 0 0 34.480296 84.589729 0 0 0 0 12.24229 71.838348 0 0 0 0 + + 52.670119 191.81443 0 0 0 0 84.303818 149.92235 0 0 0 0 87.976794 131.81166 0 0 0 0 81.741179 119.43021 0 0 0 0 69.96168 108.41331 0 0 0 0 54.117002 97.282253 0 0 0 0 34.820307 85.42387 0 0 0 0 12.363012 72.546748 0 0 0 0 + + 53.185054 193.68973 0 0 0 0 85.128024 151.38808 0 0 0 0 88.836909 133.10033 0 0 0 0 82.540331 120.59784 0 0 0 0 70.645668 109.47323 0 0 0 0 54.646083 98.233344 0 0 0 0 35.160732 86.259026 0 0 0 0 12.48388 73.256009 0 0 0 0 + + 53.699956 195.5649 0 0 0 0 85.952175 152.85372 0 0 0 0 89.696967 134.38892 0 0 0 0 83.33943 121.76538 0 0 0 0 71.329611 110.53307 0 0 0 0 55.175129 99.184373 0 0 0 0 35.501134 87.094127 0 0 0 0 12.604741 73.965224 0 0 0 0 + + 54.214156 197.43751 0 0 0 0 86.775203 154.31736 0 0 0 0 90.555853 135.67575 0 0 0 0 84.13744 122.93134 0 0 0 0 72.012622 111.59147 0 0 0 0 55.703454 100.1341 0 0 0 0 35.841072 87.92809 0 0 0 0 12.725436 74.673472 0 0 0 0 + + 54.726977 199.30511 0 0 0 0 87.596025 155.77707 0 0 0 0 91.412437 136.95913 0 0 0 0 84.933311 124.09417 0 0 0 0 72.693802 112.64704 0 0 0 0 56.230362 101.08129 0 0 0 0 36.180099 88.759817 0 0 0 0 12.845808 75.379821 0 0 0 0 + + 55.237736 201.1652 0 0 0 0 88.413547 157.23092 0 0 0 0 92.265577 138.23735 0 0 0 0 85.725982 125.25232 0 0 0 0 73.372244 113.69836 0 0 0 0 56.755153 102.02467 0 0 0 0 36.517763 89.588201 0 0 0 0 12.965696 76.083331 0 0 0 0 + + 55.745745 203.01527 0 0 0 0 89.226667 158.67694 0 0 0 0 93.114123 139.50869 0 0 0 0 86.514385 126.40424 0 0 0 0 74.047032 114.74402 0 0 0 0 57.277117 102.96297 0 0 0 0 36.853609 90.412123 0 0 0 0 13.084939 76.783053 0 0 0 0 + + 56.250311 204.8528 0 0 0 0 90.034274 160.11315 0 0 0 0 93.956917 140.77141 0 0 0 0 87.297443 127.54835 0 0 0 0 74.717246 115.78259 0 0 0 0 57.795544 103.8949 0 0 0 0 37.187178 91.230461 0 0 0 0 13.203373 77.478031 0 0 0 0 + + 56.750736 206.67525 0 0 0 0 90.835255 161.53758 0 0 0 0 94.792795 142.02376 0 0 0 0 88.074076 128.68307 0 0 0 0 75.38196 116.81263 0 0 0 0 58.309716 104.81919 0 0 0 0 37.51801 92.042083 0 0 0 0 13.320836 78.167306 0 0 0 0 + + 57.246322 208.48008 0 0 0 0 91.62849 162.94824 0 0 0 0 95.62059 143.26401 0 0 0 0 88.843198 129.80682 0 0 0 0 76.040247 117.83272 0 0 0 0 58.818916 105.73455 0 0 0 0 37.845643 92.845857 0 0 0 0 13.437162 78.849916 0 0 0 0 + + 57.73637 210.26474 0 0 0 0 92.412861 164.34313 0 0 0 0 96.439134 144.4904 0 0 0 0 89.603726 130.918 0 0 0 0 76.691176 118.84141 0 0 0 0 59.322425 106.63967 0 0 0 0 38.169614 93.640649 0 0 0 0 13.552189 79.524898 0 0 0 0 + + 58.220179 212.02668 0 0 0 0 93.187247 165.72027 0 0 0 0 97.247259 145.70118 0 0 0 0 90.354573 132.01505 0 0 0 0 77.333821 119.83726 0 0 0 0 59.819526 107.53327 0 0 0 0 38.489462 94.425324 0 0 0 0 13.665752 80.191288 0 0 0 0 + + 58.697055 213.76337 0 0 0 0 93.950534 167.07766 0 0 0 0 98.043801 146.8946 0 0 0 0 91.094657 133.09637 0 0 0 0 77.967254 120.81883 0 0 0 0 60.309501 108.41407 0 0 0 0 38.804725 95.198751 0 0 0 0 13.777686 80.848126 0 0 0 0 + + 59.166302 215.47228 0 0 0 0 94.701611 168.41335 0 0 0 0 98.827601 148.06893 0 0 0 0 91.822903 134.1604 0 0 0 0 78.590554 121.7847 0 0 0 0 60.791638 109.28077 0 0 0 0 39.114945 95.959807 0 0 0 0 13.88783 81.494457 0 0 0 0 + + 59.627231 217.15089 0 0 0 0 95.439374 169.72535 0 0 0 0 99.597507 149.22245 0 0 0 0 92.53824 135.20556 0 0 0 0 79.202806 122.73345 0 0 0 0 61.26523 110.13211 0 0 0 0 39.419666 96.707372 0 0 0 0 13.996022 82.129331 0 0 0 0 + + 60.079159 218.79673 0 0 0 0 96.162731 171.01174 0 0 0 0 100.35238 150.35344 0 0 0 0 93.239609 136.23031 0 0 0 0 79.803102 123.66368 0 0 0 0 61.729573 110.96683 0 0 0 0 39.718436 97.440339 0 0 0 0 14.102101 82.751808 0 0 0 0 + + 60.521411 220.40732 0 0 0 0 96.8706 172.27059 0 0 0 0 101.09109 151.46021 0 0 0 0 93.92596 137.23312 0 0 0 0 80.390545 124.57399 0 0 0 0 62.183974 111.78367 0 0 0 0 40.01081 98.157613 0 0 0 0 14.205909 83.360957 0 0 0 0 + + 60.95332 221.98025 0 0 0 0 97.561913 173.49999 0 0 0 0 101.81252 152.5411 0 0 0 0 94.596259 138.21248 0 0 0 0 80.964249 125.463 0 0 0 0 62.627747 112.58141 0 0 0 0 40.296346 98.858111 0 0 0 0 14.307289 83.955859 0 0 0 0 + + 61.374229 223.51312 0 0 0 0 98.235621 174.69808 0 0 0 0 102.51558 153.59447 0 0 0 0 95.249487 139.1669 0 0 0 0 81.523343 126.32938 0 0 0 0 63.060219 113.35883 0 0 0 0 40.574609 99.540769 0 0 0 0 14.406087 84.535611 0 0 0 0 + + 61.783495 225.00359 0 0 0 0 98.890691 175.86303 0 0 0 0 103.19919 154.61869 0 0 0 0 95.884645 140.09492 0 0 0 0 82.06697 127.17179 0 0 0 0 63.480727 114.11475 0 0 0 0 40.845175 100.20454 0 0 0 0 14.502152 85.099325 0 0 0 0 + + 62.180484 226.44935 0 0 0 0 99.526113 176.99304 0 0 0 0 103.8623 155.61219 0 0 0 0 96.500752 140.9951 0 0 0 0 82.594291 127.98893 0 0 0 0 63.888623 114.848 0 0 0 0 41.107626 100.84841 0 0 0 0 14.595335 85.646131 0 0 0 0 + + 62.564582 227.84816 0 0 0 0 100.1409 178.08635 0 0 0 0 104.50387 156.57343 0 0 0 0 97.096851 141.86604 0 0 0 0 83.104488 128.77954 0 0 0 0 64.283272 115.55743 0 0 0 0 41.361554 101.47136 0 0 0 0 14.685493 86.175179 0 0 0 0 + + 62.935187 229.19783 0 0 0 0 100.73409 179.14125 0 0 0 0 105.12291 157.5009 0 0 0 0 97.672009 142.70639 0 0 0 0 83.596762 129.54237 0 0 0 0 64.664058 116.24194 0 0 0 0 41.606561 102.07243 0 0 0 0 14.772483 86.685643 0 0 0 0 + + 63.291716 230.49624 0 0 0 0 101.30475 180.15609 0 0 0 0 105.71843 158.39315 0 0 0 0 98.225323 143.51483 0 0 0 0 84.070339 130.27623 0 0 0 0 65.03038 116.90045 0 0 0 0 41.842263 102.65068 0 0 0 0 14.85617 87.176718 0 0 0 0 + + 63.633604 231.74133 0 0 0 0 101.85198 181.12926 0 0 0 0 106.2895 159.24875 0 0 0 0 98.755915 144.29006 0 0 0 0 84.524468 130.97995 0 0 0 0 65.38166 117.53192 0 0 0 0 42.068286 103.20517 0 0 0 0 14.936419 87.647628 0 0 0 0 + + 63.960307 232.93112 0 0 0 0 102.3749 182.0592 0 0 0 0 106.8352 160.06636 0 0 0 0 99.26294 145.03087 0 0 0 0 84.958428 131.65242 0 0 0 0 65.717338 118.13535 0 0 0 0 42.28427 103.73504 0 0 0 0 15.013105 88.097622 0 0 0 0 + + 64.271302 234.0637 0 0 0 0 102.87268 182.94443 0 0 0 0 107.35467 160.84465 0 0 0 0 99.745587 145.73605 0 0 0 0 85.371522 132.29256 0 0 0 0 66.036876 118.70976 0 0 0 0 42.489869 104.23943 0 0 0 0 15.086103 88.52598 0 0 0 0 + + 64.566088 235.13726 0 0 0 0 103.34451 183.78352 0 0 0 0 107.84706 161.58238 0 0 0 0 100.20308 146.40448 0 0 0 0 85.763086 132.89933 0 0 0 0 66.33976 119.25423 0 0 0 0 42.684753 104.71754 0 0 0 0 15.155297 88.932012 0 0 0 0 + + 64.844189 236.15005 0 0 0 0 103.78964 184.57511 0 0 0 0 108.31158 162.27835 0 0 0 0 100.63468 147.03508 0 0 0 0 86.132488 133.47176 0 0 0 0 66.625501 119.76789 0 0 0 0 42.868606 105.16858 0 0 0 0 15.220574 89.315063 0 0 0 0 + + 65.105153 237.10043 0 0 0 0 104.20734 185.31793 0 0 0 0 108.74748 162.93144 0 0 0 0 101.03968 147.62682 0 0 0 0 86.479126 134.00891 0 0 0 0 66.893634 120.24989 0 0 0 0 43.04113 105.59183 0 0 0 0 15.281829 89.67451 0 0 0 0 + + 65.348555 237.98685 0 0 0 0 104.59693 186.01076 0 0 0 0 109.15404 163.54057 0 0 0 0 101.41743 148.17874 0 0 0 0 86.802436 134.50992 0 0 0 0 67.143722 120.69945 0 0 0 0 43.202043 105.98659 0 0 0 0 15.338962 90.009766 0 0 0 0 + + 65.573995 238.80786 0 0 0 0 104.95777 186.65247 0 0 0 0 109.5306 164.10475 0 0 0 0 101.7673 148.68993 0 0 0 0 87.101889 134.97395 0 0 0 0 67.375356 121.11585 0 0 0 0 43.351082 106.35223 0 0 0 0 15.391878 90.320283 0 0 0 0 + + 65.781105 239.56211 0 0 0 0 105.28927 187.24199 0 0 0 0 109.87654 164.62306 0 0 0 0 102.08872 149.15955 0 0 0 0 87.376992 135.40025 0 0 0 0 67.588154 121.49838 0 0 0 0 43.488002 106.68813 0 0 0 0 15.440492 90.605552 0 0 0 0 + + 65.969541 240.24836 0 0 0 0 105.59088 187.77836 0 0 0 0 110.1913 165.09464 0 0 0 0 102.38116 149.58683 0 0 0 0 87.627292 135.78812 0 0 0 0 67.781768 121.84642 0 0 0 0 43.612578 106.99375 0 0 0 0 15.484723 90.8651 0 0 0 0 + + 66.138994 240.86548 0 0 0 0 105.86211 188.2607 0 0 0 0 110.47434 165.51871 0 0 0 0 102.64414 149.97107 0 0 0 0 87.852376 136.13691 0 0 0 0 67.955875 122.1594 0 0 0 0 43.724603 107.26858 0 0 0 0 15.524498 91.098501 0 0 0 0 + + 66.289181 241.41243 0 0 0 0 106.1025 188.6882 0 0 0 0 110.7252 165.89457 0 0 0 0 102.87723 150.31162 0 0 0 0 88.05187 136.44605 0 0 0 0 68.110188 122.4368 0 0 0 0 43.823893 107.51216 0 0 0 0 15.559751 91.305366 0 0 0 0 + + 66.419854 241.88832 0 0 0 0 106.31165 189.06015 0 0 0 0 110.94347 166.22159 0 0 0 0 103.08002 150.60792 0 0 0 0 88.225442 136.71502 0 0 0 0 68.244451 122.67816 0 0 0 0 43.910281 107.7241 0 0 0 0 15.590423 91.485352 0 0 0 0 + + 66.530795 242.29234 0 0 0 0 106.48922 189.37594 0 0 0 0 111.12878 166.49923 0 0 0 0 103.2522 150.85948 0 0 0 0 88.372805 136.94338 0 0 0 0 68.358439 122.88306 0 0 0 0 43.983624 107.90403 0 0 0 0 15.616464 91.63816 0 0 0 0 + + 66.621819 242.62383 0 0 0 0 106.63491 189.63503 0 0 0 0 111.28082 166.72703 0 0 0 0 103.39346 151.06588 0 0 0 0 88.493712 137.13073 0 0 0 0 68.451963 123.05119 0 0 0 0 44.0438 108.05166 0 0 0 0 15.637829 91.763534 0 0 0 0 + + 66.692773 242.88224 0 0 0 0 106.74848 189.837 0 0 0 0 111.39934 166.9046 0 0 0 0 103.50358 151.22677 0 0 0 0 88.587961 137.27678 0 0 0 0 68.524867 123.18224 0 0 0 0 44.090708 108.16673 0 0 0 0 15.654484 91.861265 0 0 0 0 + + 66.74354 243.06712 0 0 0 0 106.82974 189.9815 0 0 0 0 111.48413 167.03164 0 0 0 0 103.58237 151.34189 0 0 0 0 88.655394 137.38128 0 0 0 0 68.577029 123.27601 0 0 0 0 44.12427 108.24907 0 0 0 0 15.6664 91.93119 0 0 0 0 + + 66.774034 243.17817 0 0 0 0 106.87855 190.0683 0 0 0 0 111.53507 167.10796 0 0 0 0 103.62969 151.41103 0 0 0 0 88.6959 137.44405 0 0 0 0 68.60836 123.33233 0 0 0 0 44.14443 108.29853 0 0 0 0 15.673558 91.973192 0 0 0 0 + + 66.784205 243.21521 0 0 0 0 106.89483 190.09725 0 0 0 0 111.55206 167.13341 0 0 0 0 103.64548 151.43409 0 0 0 0 88.709409 137.46498 0 0 0 0 68.61881 123.35111 0 0 0 0 44.151153 108.31502 0 0 0 0 15.675945 91.987201 0 0 0 0 + + 66.774034 243.17817 0 0 0 0 106.87855 190.0683 0 0 0 0 111.53507 167.10796 0 0 0 0 103.62969 151.41103 0 0 0 0 88.6959 137.44405 0 0 0 0 68.60836 123.33233 0 0 0 0 44.14443 108.29853 0 0 0 0 15.673558 91.973192 0 0 0 0 + + 66.74354 243.06712 0 0 0 0 106.82974 189.9815 0 0 0 0 111.48413 167.03164 0 0 0 0 103.58237 151.34189 0 0 0 0 88.655394 137.38128 0 0 0 0 68.577029 123.27601 0 0 0 0 44.12427 108.24907 0 0 0 0 15.6664 91.93119 0 0 0 0 + + 66.692773 242.88224 0 0 0 0 106.74848 189.837 0 0 0 0 111.39934 166.9046 0 0 0 0 103.50358 151.22677 0 0 0 0 88.587961 137.27678 0 0 0 0 68.524867 123.18224 0 0 0 0 44.090708 108.16673 0 0 0 0 15.654484 91.861265 0 0 0 0 + + 66.621819 242.62383 0 0 0 0 106.63491 189.63503 0 0 0 0 111.28082 166.72703 0 0 0 0 103.39346 151.06588 0 0 0 0 88.493712 137.13073 0 0 0 0 68.451963 123.05119 0 0 0 0 44.0438 108.05166 0 0 0 0 15.637829 91.763534 0 0 0 0 + + 66.530795 242.29234 0 0 0 0 106.48922 189.37594 0 0 0 0 111.12878 166.49923 0 0 0 0 103.2522 150.85948 0 0 0 0 88.372805 136.94338 0 0 0 0 68.358439 122.88306 0 0 0 0 43.983624 107.90403 0 0 0 0 15.616464 91.63816 0 0 0 0 + + 66.419854 241.88832 0 0 0 0 106.31165 189.06015 0 0 0 0 110.94347 166.22159 0 0 0 0 103.08002 150.60792 0 0 0 0 88.225442 136.71502 0 0 0 0 68.244451 122.67816 0 0 0 0 43.910281 107.7241 0 0 0 0 15.590423 91.485352 0 0 0 0 + + 66.289181 241.41243 0 0 0 0 106.1025 188.6882 0 0 0 0 110.7252 165.89457 0 0 0 0 102.87723 150.31162 0 0 0 0 88.05187 136.44605 0 0 0 0 68.110188 122.4368 0 0 0 0 43.823893 107.51216 0 0 0 0 15.559751 91.305366 0 0 0 0 + + 66.138994 240.86548 0 0 0 0 105.86211 188.2607 0 0 0 0 110.47434 165.51871 0 0 0 0 102.64414 149.97107 0 0 0 0 87.852376 136.13691 0 0 0 0 67.955875 122.1594 0 0 0 0 43.724603 107.26858 0 0 0 0 15.524498 91.098501 0 0 0 0 + + 65.969541 240.24836 0 0 0 0 105.59088 187.77836 0 0 0 0 110.1913 165.09464 0 0 0 0 102.38116 149.58683 0 0 0 0 87.627292 135.78812 0 0 0 0 67.781768 121.84642 0 0 0 0 43.612578 106.99375 0 0 0 0 15.484723 90.8651 0 0 0 0 + + 65.781105 239.56211 0 0 0 0 105.28927 187.24199 0 0 0 0 109.87654 164.62306 0 0 0 0 102.08872 149.15955 0 0 0 0 87.376992 135.40025 0 0 0 0 67.588154 121.49838 0 0 0 0 43.488002 106.68813 0 0 0 0 15.440492 90.605552 0 0 0 0 + + 65.573995 238.80786 0 0 0 0 104.95777 186.65247 0 0 0 0 109.5306 164.10475 0 0 0 0 101.7673 148.68993 0 0 0 0 87.101889 134.97395 0 0 0 0 67.375356 121.11585 0 0 0 0 43.351082 106.35223 0 0 0 0 15.391878 90.320283 0 0 0 0 + + 65.348555 237.98685 0 0 0 0 104.59693 186.01076 0 0 0 0 109.15404 163.54057 0 0 0 0 101.41743 148.17874 0 0 0 0 86.802436 134.50992 0 0 0 0 67.143722 120.69945 0 0 0 0 43.202043 105.98659 0 0 0 0 15.338962 90.009766 0 0 0 0 + + 65.105153 237.10043 0 0 0 0 104.20734 185.31793 0 0 0 0 108.74748 162.93144 0 0 0 0 101.03968 147.62682 0 0 0 0 86.479126 134.00891 0 0 0 0 66.893634 120.24989 0 0 0 0 43.04113 105.59183 0 0 0 0 15.281829 89.67451 0 0 0 0 + + 64.844189 236.15005 0 0 0 0 103.78964 184.57511 0 0 0 0 108.31158 162.27835 0 0 0 0 100.63468 147.03508 0 0 0 0 86.132488 133.47176 0 0 0 0 66.625501 119.76789 0 0 0 0 42.868606 105.16858 0 0 0 0 15.220574 89.315063 0 0 0 0 + + 64.566088 235.13726 0 0 0 0 103.34451 183.78352 0 0 0 0 107.84706 161.58238 0 0 0 0 100.20308 146.40448 0 0 0 0 85.763086 132.89933 0 0 0 0 66.33976 119.25423 0 0 0 0 42.684753 104.71754 0 0 0 0 15.155297 88.932012 0 0 0 0 + + 64.271302 234.0637 0 0 0 0 102.87268 182.94443 0 0 0 0 107.35467 160.84465 0 0 0 0 99.745587 145.73605 0 0 0 0 85.371522 132.29256 0 0 0 0 66.036876 118.70976 0 0 0 0 42.489869 104.23943 0 0 0 0 15.086103 88.52598 0 0 0 0 + + 63.960307 232.93112 0 0 0 0 102.3749 182.0592 0 0 0 0 106.8352 160.06636 0 0 0 0 99.26294 145.03087 0 0 0 0 84.958428 131.65242 0 0 0 0 65.717338 118.13535 0 0 0 0 42.28427 103.73504 0 0 0 0 15.013105 88.097622 0 0 0 0 + + 63.633604 231.74133 0 0 0 0 101.85198 181.12926 0 0 0 0 106.2895 159.24875 0 0 0 0 98.755915 144.29006 0 0 0 0 84.524468 130.97995 0 0 0 0 65.38166 117.53192 0 0 0 0 42.068286 103.20517 0 0 0 0 14.936419 87.647628 0 0 0 0 + + 63.291716 230.49624 0 0 0 0 101.30475 180.15609 0 0 0 0 105.71843 158.39315 0 0 0 0 98.225323 143.51483 0 0 0 0 84.070339 130.27623 0 0 0 0 65.03038 116.90045 0 0 0 0 41.842263 102.65068 0 0 0 0 14.85617 87.176718 0 0 0 0 + + 62.935187 229.19783 0 0 0 0 100.73409 179.14125 0 0 0 0 105.12291 157.5009 0 0 0 0 97.672009 142.70639 0 0 0 0 83.596762 129.54237 0 0 0 0 64.664058 116.24194 0 0 0 0 41.606561 102.07243 0 0 0 0 14.772483 86.685643 0 0 0 0 + + 62.564582 227.84816 0 0 0 0 100.1409 178.08635 0 0 0 0 104.50387 156.57343 0 0 0 0 97.096851 141.86604 0 0 0 0 83.104488 128.77954 0 0 0 0 64.283272 115.55743 0 0 0 0 41.361554 101.47136 0 0 0 0 14.685493 86.175179 0 0 0 0 + + 62.180484 226.44935 0 0 0 0 99.526113 176.99304 0 0 0 0 103.8623 155.61219 0 0 0 0 96.500752 140.9951 0 0 0 0 82.594291 127.98893 0 0 0 0 63.888623 114.848 0 0 0 0 41.107626 100.84841 0 0 0 0 14.595335 85.646131 0 0 0 0 + + 61.783495 225.00359 0 0 0 0 98.890691 175.86303 0 0 0 0 103.19919 154.61869 0 0 0 0 95.884645 140.09492 0 0 0 0 82.06697 127.17179 0 0 0 0 63.480727 114.11475 0 0 0 0 40.845175 100.20454 0 0 0 0 14.502152 85.099325 0 0 0 0 + + 61.374229 223.51312 0 0 0 0 98.235621 174.69808 0 0 0 0 102.51558 153.59447 0 0 0 0 95.249487 139.1669 0 0 0 0 81.523343 126.32938 0 0 0 0 63.060219 113.35883 0 0 0 0 40.574609 99.540769 0 0 0 0 14.406087 84.535611 0 0 0 0 + + 60.95332 221.98025 0 0 0 0 97.561913 173.49999 0 0 0 0 101.81252 152.5411 0 0 0 0 94.596259 138.21248 0 0 0 0 80.964249 125.463 0 0 0 0 62.627747 112.58141 0 0 0 0 40.296346 98.858111 0 0 0 0 14.307289 83.955859 0 0 0 0 + + 60.521411 220.40732 0 0 0 0 96.8706 172.27059 0 0 0 0 101.09109 151.46021 0 0 0 0 93.92596 137.23312 0 0 0 0 80.390545 124.57399 0 0 0 0 62.183974 111.78367 0 0 0 0 40.01081 98.157613 0 0 0 0 14.205909 83.360957 0 0 0 0 + + 60.079159 218.79673 0 0 0 0 96.162731 171.01174 0 0 0 0 100.35238 150.35344 0 0 0 0 93.239609 136.23031 0 0 0 0 79.803102 123.66368 0 0 0 0 61.729573 110.96683 0 0 0 0 39.718436 97.440339 0 0 0 0 14.102101 82.751808 0 0 0 0 + + 59.627231 217.15089 0 0 0 0 95.439374 169.72535 0 0 0 0 99.597507 149.22245 0 0 0 0 92.53824 135.20556 0 0 0 0 79.202806 122.73345 0 0 0 0 61.26523 110.13211 0 0 0 0 39.419666 96.707372 0 0 0 0 13.996022 82.129331 0 0 0 0 + + 59.166302 215.47228 0 0 0 0 94.701611 168.41335 0 0 0 0 98.827601 148.06893 0 0 0 0 91.822903 134.1604 0 0 0 0 78.590554 121.7847 0 0 0 0 60.791638 109.28077 0 0 0 0 39.114945 95.959807 0 0 0 0 13.88783 81.494457 0 0 0 0 + + 58.697055 213.76337 0 0 0 0 93.950534 167.07766 0 0 0 0 98.043801 146.8946 0 0 0 0 91.094657 133.09637 0 0 0 0 77.967254 120.81883 0 0 0 0 60.309501 108.41407 0 0 0 0 38.804725 95.198751 0 0 0 0 13.777686 80.848126 0 0 0 0 + + 58.220179 212.02668 0 0 0 0 93.187247 165.72027 0 0 0 0 97.247259 145.70118 0 0 0 0 90.354573 132.01505 0 0 0 0 77.333821 119.83726 0 0 0 0 59.819526 107.53327 0 0 0 0 38.489462 94.425324 0 0 0 0 13.665752 80.191288 0 0 0 0 + + 57.73637 210.26474 0 0 0 0 92.412861 164.34313 0 0 0 0 96.439134 144.4904 0 0 0 0 89.603726 130.918 0 0 0 0 76.691176 118.84141 0 0 0 0 59.322425 106.63967 0 0 0 0 38.169614 93.640649 0 0 0 0 13.552189 79.524898 0 0 0 0 + + 57.246322 208.48008 0 0 0 0 91.62849 162.94824 0 0 0 0 95.62059 143.26401 0 0 0 0 88.843198 129.80682 0 0 0 0 76.040247 117.83272 0 0 0 0 58.818916 105.73455 0 0 0 0 37.845643 92.845857 0 0 0 0 13.437162 78.849916 0 0 0 0 + + 56.750736 206.67525 0 0 0 0 90.835255 161.53758 0 0 0 0 94.792795 142.02376 0 0 0 0 88.074076 128.68307 0 0 0 0 75.38196 116.81263 0 0 0 0 58.309716 104.81919 0 0 0 0 37.51801 92.042083 0 0 0 0 13.320836 78.167306 0 0 0 0 + + 56.250311 204.8528 0 0 0 0 90.034274 160.11315 0 0 0 0 93.956917 140.77141 0 0 0 0 87.297443 127.54835 0 0 0 0 74.717246 115.78259 0 0 0 0 57.795544 103.8949 0 0 0 0 37.187178 91.230461 0 0 0 0 13.203373 77.478031 0 0 0 0 + + 55.745745 203.01527 0 0 0 0 89.226667 158.67694 0 0 0 0 93.114123 139.50869 0 0 0 0 86.514385 126.40424 0 0 0 0 74.047032 114.74402 0 0 0 0 57.277117 102.96297 0 0 0 0 36.853609 90.412123 0 0 0 0 13.084939 76.783053 0 0 0 0 + + 55.237736 201.1652 0 0 0 0 88.413547 157.23092 0 0 0 0 92.265577 138.23735 0 0 0 0 85.725982 125.25232 0 0 0 0 73.372244 113.69836 0 0 0 0 56.755153 102.02467 0 0 0 0 36.517763 89.588201 0 0 0 0 12.965696 76.083331 0 0 0 0 + + 54.726977 199.30511 0 0 0 0 87.596025 155.77707 0 0 0 0 91.412437 136.95913 0 0 0 0 84.933311 124.09417 0 0 0 0 72.693802 112.64704 0 0 0 0 56.230362 101.08129 0 0 0 0 36.180099 88.759817 0 0 0 0 12.845808 75.379821 0 0 0 0 + + 54.214156 197.43751 0 0 0 0 86.775203 154.31736 0 0 0 0 90.555853 135.67575 0 0 0 0 84.13744 122.93134 0 0 0 0 72.012622 111.59147 0 0 0 0 55.703454 100.1341 0 0 0 0 35.841072 87.92809 0 0 0 0 12.725436 74.673472 0 0 0 0 + + 53.699956 195.5649 0 0 0 0 85.952175 152.85372 0 0 0 0 89.696967 134.38892 0 0 0 0 83.33943 121.76538 0 0 0 0 71.329611 110.53307 0 0 0 0 55.175129 99.184373 0 0 0 0 35.501134 87.094127 0 0 0 0 12.604741 73.965224 0 0 0 0 + + 53.185054 193.68973 0 0 0 0 85.128024 151.38808 0 0 0 0 88.836909 133.10033 0 0 0 0 82.540331 120.59784 0 0 0 0 70.645668 109.47323 0 0 0 0 54.646083 98.233344 0 0 0 0 35.160732 86.259026 0 0 0 0 12.48388 73.256009 0 0 0 0 + + 52.670119 191.81443 0 0 0 0 84.303818 149.92235 0 0 0 0 87.976794 131.81166 0 0 0 0 81.741179 119.43021 0 0 0 0 69.96168 108.41331 0 0 0 0 54.117002 97.282253 0 0 0 0 34.820307 85.42387 0 0 0 0 12.363012 72.546748 0 0 0 0 + + 52.15581 189.94141 0 0 0 0 83.480614 148.4584 0 0 0 0 87.117724 130.52455 0 0 0 0 80.942998 118.26401 0 0 0 0 69.278523 107.35469 0 0 0 0 53.588564 96.332319 0 0 0 0 34.480296 84.589729 0 0 0 0 12.24229 71.838348 0 0 0 0 + + 51.642776 188.07304 0 0 0 0 82.659452 146.99808 0 0 0 0 86.260785 129.24064 0 0 0 0 80.146798 117.1007 0 0 0 0 68.597061 106.29869 0 0 0 0 53.061437 95.38474 0 0 0 0 34.141129 83.757657 0 0 0 0 12.121868 71.131706 0 0 0 0 + + 51.131657 186.21165 0 0 0 0 81.841354 145.54321 0 0 0 0 85.407044 127.96152 0 0 0 0 79.353568 115.94173 0 0 0 0 67.918141 105.24663 0 0 0 0 52.536277 94.440697 0 0 0 0 33.803227 82.92869 0 0 0 0 12.001896 70.427701 0 0 0 0 + + 50.623079 184.3595 0 0 0 0 81.027325 144.09557 0 0 0 0 84.557549 126.68876 0 0 0 0 78.564284 114.78852 0 0 0 0 67.242598 104.1998 0 0 0 0 52.013728 93.50135 0 0 0 0 33.467005 82.103846 0 0 0 0 11.88252 69.727197 0 0 0 0 + + 50.117659 182.51886 0 0 0 0 80.218349 142.65693 0 0 0 0 83.713327 125.4239 0 0 0 0 77.779898 113.64247 0 0 0 0 66.571249 103.15947 0 0 0 0 51.494424 92.567833 0 0 0 0 33.132871 81.284122 0 0 0 0 11.763885 69.031041 0 0 0 0 + + 49.615997 180.69191 0 0 0 0 79.415389 141.22898 0 0 0 0 82.875384 124.16845 0 0 0 0 77.001346 112.50495 0 0 0 0 65.904892 102.12687 0 0 0 0 50.978981 91.641259 0 0 0 0 32.801222 80.470494 0 0 0 0 11.646132 68.340062 0 0 0 0 + + 49.118682 178.88078 0 0 0 0 78.619386 139.8134 0 0 0 0 82.044701 122.92387 0 0 0 0 76.229541 111.37728 0 0 0 0 65.244309 101.10323 0 0 0 0 50.468005 90.722713 0 0 0 0 32.472446 79.663916 0 0 0 0 11.529399 67.655071 0 0 0 0 + + 48.626288 177.08758 0 0 0 0 77.83126 138.41183 0 0 0 0 81.222237 121.69161 0 0 0 0 75.465372 110.26077 0 0 0 0 64.590262 100.08971 0 0 0 0 49.962084 89.813256 0 0 0 0 32.146923 78.865318 0 0 0 0 11.413822 66.976857 0 0 0 0 + + 48.139373 175.31433 0 0 0 0 77.051904 137.02585 0 0 0 0 80.408926 120.47306 0 0 0 0 74.709706 109.15668 0 0 0 0 63.943493 99.087472 0 0 0 0 49.461793 88.913919 0 0 0 0 31.825023 78.075608 0 0 0 0 11.299531 66.306191 0 0 0 0 + + 47.658481 173.56301 0 0 0 0 76.282188 135.65702 0 0 0 0 79.605674 119.26959 0 0 0 0 73.963387 108.06626 0 0 0 0 63.304725 98.09763 0 0 0 0 48.967691 88.025706 0 0 0 0 31.507104 77.295665 0 0 0 0 11.186653 65.64382 0 0 0 0 + + 47.184139 171.83555 0 0 0 0 75.522956 134.30684 0 0 0 0 78.813364 118.0825 0 0 0 0 73.227235 106.99068 0 0 0 0 62.674657 97.12127 0 0 0 0 48.480318 87.149592 0 0 0 0 31.193516 76.526346 0 0 0 0 11.075313 64.990471 0 0 0 0 + + 46.716859 170.1338 0 0 0 0 74.775027 132.97675 0 0 0 0 78.032849 116.91309 0 0 0 0 72.502041 105.93111 0 0 0 0 62.053969 96.159446 0 0 0 0 48.000202 86.286521 0 0 0 0 30.884597 75.768481 0 0 0 0 10.965631 64.346849 0 0 0 0 + + 46.257136 168.45958 0 0 0 0 74.039194 131.66818 0 0 0 0 77.264957 115.7626 0 0 0 0 71.788575 104.88869 0 0 0 0 61.443319 95.213177 0 0 0 0 47.527849 85.437407 0 0 0 0 30.580673 75.022871 0 0 0 0 10.857722 63.713635 0 0 0 0 + + 45.805447 166.81462 0 0 0 0 73.31622 130.38247 0 0 0 0 76.510485 114.6322 0 0 0 0 71.087579 103.86448 0 0 0 0 60.843341 94.283445 0 0 0 0 47.063752 84.603133 0 0 0 0 30.28206 74.290292 0 0 0 0 10.751699 63.091488 0 0 0 0 + + 45.362254 165.20059 0 0 0 0 72.606846 129.12095 0 0 0 0 75.770204 113.52308 0 0 0 0 70.399768 102.85953 0 0 0 0 60.254649 93.371201 0 0 0 0 46.608385 83.784552 0 0 0 0 29.989065 73.571493 0 0 0 0 10.647671 62.481044 0 0 0 0 + + 44.928002 163.61913 0 0 0 0 71.911782 127.88488 0 0 0 0 75.044857 112.43632 0 0 0 0 69.725832 101.87486 0 0 0 0 59.677832 92.47736 0 0 0 0 46.162204 82.982483 0 0 0 0 29.70198 72.867194 0 0 0 0 10.545741 61.882914 0 0 0 0 + + 44.503117 162.07178 0 0 0 0 71.231711 126.67547 0 0 0 0 74.335157 111.37301 0 0 0 0 69.066433 100.91143 0 0 0 0 59.113457 91.6028 0 0 0 0 45.725647 82.197717 0 0 0 0 29.421088 72.178088 0 0 0 0 10.446009 61.297686 0 0 0 0 + + 44.08801 160.56004 0 0 0 0 70.56729 125.49389 0 0 0 0 73.641788 110.33417 0 0 0 0 68.422209 99.970164 0 0 0 0 58.562071 90.748366 0 0 0 0 45.299136 81.431009 0 0 0 0 29.14666 71.50484 0 0 0 0 10.348573 60.725926 0 0 0 0 + + 43.683073 159.08534 0 0 0 0 69.919148 124.34126 0 0 0 0 72.965408 109.32078 0 0 0 0 67.793769 99.051964 0 0 0 0 58.024193 89.914866 0 0 0 0 44.883076 80.683087 0 0 0 0 28.878955 70.848087 0 0 0 0 10.253524 60.168174 0 0 0 0 + + 43.288682 157.64904 0 0 0 0 69.287886 123.21865 0 0 0 0 72.306643 108.33378 0 0 0 0 67.181696 98.157677 0 0 0 0 57.500325 89.103074 0 0 0 0 44.477851 79.954643 0 0 0 0 28.618223 70.208438 0 0 0 0 10.160951 59.624948 0 0 0 0 + + 42.905197 156.25246 0 0 0 0 68.674079 122.12708 0 0 0 0 71.666093 107.37407 0 0 0 0 66.586547 97.288119 0 0 0 0 56.990941 88.313728 0 0 0 0 44.083831 79.246342 0 0 0 0 28.3647 69.586476 0 0 0 0 10.070937 59.096743 0 0 0 0 + + 42.532959 154.89685 0 0 0 0 68.078275 121.06753 0 0 0 0 71.044331 106.44251 0 0 0 0 66.008854 96.444064 0 0 0 0 56.496498 87.547533 0 0 0 0 43.701367 78.558814 0 0 0 0 28.118613 68.982756 0 0 0 0 9.9835633 58.58403 0 0 0 0 + + 42.172294 153.58337 0 0 0 0 67.500994 120.04092 0 0 0 0 70.441899 105.53992 0 0 0 0 65.449122 95.626251 0 0 0 0 56.017427 86.80516 0 0 0 0 43.330794 77.892662 0 0 0 0 27.880177 68.397805 0 0 0 0 9.8989061 58.087258 0 0 0 0 + + 41.823511 152.31317 0 0 0 0 66.942732 119.04813 0 0 0 0 69.859315 104.66706 0 0 0 0 64.90783 94.835382 0 0 0 0 55.554139 86.087245 0 0 0 0 42.97243 77.248457 0 0 0 0 27.649596 67.832127 0 0 0 0 9.817038 57.606851 0 0 0 0 + + 41.486904 151.08731 0 0 0 0 66.403959 118.09 0 0 0 0 69.297067 103.82467 0 0 0 0 64.385433 94.072121 0 0 0 0 55.107024 85.394391 0 0 0 0 42.626576 76.62674 0 0 0 0 27.427064 67.286195 0 0 0 0 9.7380277 57.143215 0 0 0 0 + + 41.16275 149.90681 0 0 0 0 65.885117 117.16731 0 0 0 0 68.755621 103.01344 0 0 0 0 63.882363 93.337096 0 0 0 0 54.67645 84.727169 0 0 0 0 42.293517 76.028023 0 0 0 0 27.212765 66.76046 0 0 0 0 9.6619405 56.696732 0 0 0 0 + + 40.85131 148.7726 0 0 0 0 65.386626 116.28082 0 0 0 0 68.235412 102.23404 0 0 0 0 63.399026 92.630902 0 0 0 0 54.262765 84.086119 0 0 0 0 41.973522 75.452791 0 0 0 0 27.006872 66.255347 0 0 0 0 9.5888377 56.267761 0 0 0 0 + + 40.552832 147.6856 0 0 0 0 64.908882 115.43122 0 0 0 0 67.736853 101.48707 0 0 0 0 62.935804 91.954099 0 0 0 0 53.866296 83.471747 0 0 0 0 41.666845 74.901499 0 0 0 0 26.809547 65.771255 0 0 0 0 9.5187773 55.856643 0 0 0 0 + + 40.267547 146.64665 0 0 0 0 64.452255 114.61917 0 0 0 0 67.260331 100.77312 0 0 0 0 62.493057 91.307212 0 0 0 0 53.487353 82.884532 0 0 0 0 41.373723 74.374575 0 0 0 0 26.620945 65.308561 0 0 0 0 9.4518137 55.463698 0 0 0 0 + + 39.995673 145.65654 0 0 0 0 64.017093 113.8453 0 0 0 0 66.80621 100.09273 0 0 0 0 62.071123 90.690733 0 0 0 0 53.126222 82.324921 0 0 0 0 41.09438 73.87242 0 0 0 0 26.441209 64.867618 0 0 0 0 9.387998 55.089224 0 0 0 0 + + 39.737413 144.716 0 0 0 0 63.603722 113.11017 0 0 0 0 66.374829 99.446409 0 0 0 0 61.670317 90.105125 0 0 0 0 52.783176 81.793333 0 0 0 0 40.829025 73.395411 0 0 0 0 26.270473 64.448755 0 0 0 0 9.3273778 54.733502 0 0 0 0 + + 39.492956 143.82574 0 0 0 0 63.212445 112.41434 0 0 0 0 65.966505 98.834636 0 0 0 0 61.290934 89.550817 0 0 0 0 52.458465 81.290157 0 0 0 0 40.577854 72.943898 0 0 0 0 26.108862 64.052279 0 0 0 0 9.2699977 54.396793 0 0 0 0 + + 39.26248 142.98639 0 0 0 0 62.843544 111.75831 0 0 0 0 65.581532 98.257848 0 0 0 0 60.933248 89.028209 0 0 0 0 52.152323 80.815757 0 0 0 0 40.341046 72.518206 0 0 0 0 25.956494 63.678478 0 0 0 0 9.2158991 54.079339 0 0 0 0 + + 39.046147 142.19855 0 0 0 0 62.497282 111.14253 0 0 0 0 65.220183 97.716455 0 0 0 0 60.59751 88.537671 0 0 0 0 51.864968 80.370469 0 0 0 0 40.11877 72.118637 0 0 0 0 25.813476 63.327614 0 0 0 0 9.1651202 53.781366 0 0 0 0 + + 38.844108 141.46276 0 0 0 0 62.173898 110.56744 0 0 0 0 64.88271 97.210835 0 0 0 0 60.283957 88.079545 0 0 0 0 51.5966 79.954603 0 0 0 0 39.911181 71.745468 0 0 0 0 25.679907 62.999934 0 0 0 0 9.1176965 53.503082 0 0 0 0 + + 38.656502 140.77953 0 0 0 0 61.873615 110.03343 0 0 0 0 64.569345 96.741333 0 0 0 0 59.992802 87.654144 0 0 0 0 51.347402 79.568444 0 0 0 0 39.718421 71.398957 0 0 0 0 25.55588 62.695662 0 0 0 0 9.0736606 53.244677 0 0 0 0 + + 38.483454 140.14933 0 0 0 0 61.596636 109.54086 0 0 0 0 64.280298 96.308267 0 0 0 0 59.724242 87.261758 0 0 0 0 51.117544 79.212253 0 0 0 0 39.54062 71.079337 0 0 0 0 25.441478 62.415002 0 0 0 0 9.033042 53.006325 0 0 0 0 + + 38.325082 139.57257 0 0 0 0 61.343144 109.09006 0 0 0 0 64.015762 95.911925 0 0 0 0 59.478456 86.902645 0 0 0 0 50.907177 78.886267 0 0 0 0 39.377897 70.786821 0 0 0 0 25.336778 62.158143 0 0 0 0 8.9958679 52.788186 0 0 0 0 + + 38.181487 139.04962 0 0 0 0 61.113306 108.68132 0 0 0 0 63.77591 95.552566 0 0 0 0 59.255605 86.577042 0 0 0 0 50.716441 78.5907 0 0 0 0 39.230357 70.5216 0 0 0 0 25.241847 61.925251 0 0 0 0 8.9621626 52.590401 0 0 0 0 + + 38.052764 138.58084 0 0 0 0 60.907272 108.31492 0 0 0 0 63.560899 95.230425 0 0 0 0 59.055833 86.28516 0 0 0 0 50.545457 78.325742 0 0 0 0 39.098098 70.283847 0 0 0 0 25.156748 61.716479 0 0 0 0 8.9319479 52.4131 0 0 0 0 + + 37.938994 138.16651 0 0 0 0 60.725172 107.99108 0 0 0 0 63.370865 94.945706 0 0 0 0 58.879268 86.027186 0 0 0 0 50.394337 78.091565 0 0 0 0 38.981203 70.073713 0 0 0 0 25.081535 61.53196 0 0 0 0 8.9052433 52.256396 0 0 0 0 + + 37.84025 137.8069 0 0 0 0 60.567122 107.71001 0 0 0 0 63.20593 94.698591 0 0 0 0 58.726023 85.803282 0 0 0 0 50.263176 77.888316 0 0 0 0 38.879746 69.891332 0 0 0 0 25.016255 61.371811 0 0 0 0 8.8820656 52.120388 0 0 0 0 + + 37.756594 137.50224 0 0 0 0 60.433222 107.47189 0 0 0 0 63.066196 94.489234 0 0 0 0 58.596193 85.613591 0 0 0 0 50.152055 77.716123 0 0 0 0 38.793792 69.736818 0 0 0 0 24.96095 61.236132 0 0 0 0 8.8624294 52.005162 0 0 0 0 + + 37.688078 137.25272 0 0 0 0 60.323555 107.27686 0 0 0 0 62.951751 94.317765 0 0 0 0 58.48986 85.458229 0 0 0 0 50.061045 77.575092 0 0 0 0 38.723394 69.610268 0 0 0 0 24.915653 61.125008 0 0 0 0 8.8463469 51.910789 0 0 0 0 + + 37.634743 137.05849 0 0 0 0 60.238188 107.12505 0 0 0 0 62.862665 94.184292 0 0 0 0 58.407088 85.337294 0 0 0 0 49.990202 77.465312 0 0 0 0 38.668594 69.511759 0 0 0 0 24.880394 61.038507 0 0 0 0 8.833828 51.837328 0 0 0 0 + + 37.596624 136.91966 0 0 0 0 60.177175 107.01655 0 0 0 0 62.798993 94.088896 0 0 0 0 58.347929 85.250858 0 0 0 0 49.939568 77.38685 0 0 0 0 38.629428 69.441353 0 0 0 0 24.855194 60.976683 0 0 0 0 8.8248805 51.784823 0 0 0 0 + + 37.573744 136.83634 0 0 0 0 60.140552 106.95142 0 0 0 0 62.760775 94.031635 0 0 0 0 58.31242 85.198976 0 0 0 0 49.909175 77.339754 0 0 0 0 38.605919 69.399092 0 0 0 0 24.840067 60.939573 0 0 0 0 8.8195098 51.753308 0 0 0 0 + + 37.566115 136.80856 0 0 0 0 60.128342 106.92971 0 0 0 0 62.748033 94.012544 0 0 0 0 58.300581 85.181678 0 0 0 0 49.899043 77.324052 0 0 0 0 38.598081 69.385002 0 0 0 0 24.835024 60.927201 0 0 0 0 8.8177192 51.742801 0 0 0 0 + + 37.573744 136.83634 0 0 0 0 60.140552 106.95142 0 0 0 0 62.760775 94.031635 0 0 0 0 58.31242 85.198976 0 0 0 0 49.909175 77.339754 0 0 0 0 38.605919 69.399092 0 0 0 0 24.840067 60.939573 0 0 0 0 8.8195098 51.753308 0 0 0 0 + + 37.596624 136.91966 0 0 0 0 60.177175 107.01655 0 0 0 0 62.798993 94.088896 0 0 0 0 58.347929 85.250858 0 0 0 0 49.939568 77.38685 0 0 0 0 38.629428 69.441353 0 0 0 0 24.855194 60.976683 0 0 0 0 8.8248805 51.784823 0 0 0 0 + + 37.634743 137.05849 0 0 0 0 60.238188 107.12505 0 0 0 0 62.862665 94.184292 0 0 0 0 58.407088 85.337294 0 0 0 0 49.990202 77.465312 0 0 0 0 38.668594 69.511759 0 0 0 0 24.880394 61.038507 0 0 0 0 8.833828 51.837328 0 0 0 0 + + 37.688078 137.25272 0 0 0 0 60.323555 107.27686 0 0 0 0 62.951751 94.317765 0 0 0 0 58.48986 85.458229 0 0 0 0 50.061045 77.575092 0 0 0 0 38.723394 69.610268 0 0 0 0 24.915653 61.125008 0 0 0 0 8.8463469 51.910789 0 0 0 0 + + 37.756594 137.50224 0 0 0 0 60.433222 107.47189 0 0 0 0 63.066196 94.489234 0 0 0 0 58.596193 85.613591 0 0 0 0 50.152055 77.716123 0 0 0 0 38.793792 69.736818 0 0 0 0 24.96095 61.236132 0 0 0 0 8.8624294 52.005162 0 0 0 0 + + 37.84025 137.8069 0 0 0 0 60.567122 107.71001 0 0 0 0 63.20593 94.698591 0 0 0 0 58.726023 85.803282 0 0 0 0 50.263176 77.888316 0 0 0 0 38.879746 69.891332 0 0 0 0 25.016255 61.371811 0 0 0 0 8.8820656 52.120388 0 0 0 0 + + 37.938994 138.16651 0 0 0 0 60.725172 107.99108 0 0 0 0 63.370865 94.945706 0 0 0 0 58.879268 86.027186 0 0 0 0 50.394337 78.091565 0 0 0 0 38.981203 70.073713 0 0 0 0 25.081535 61.53196 0 0 0 0 8.9052433 52.256396 0 0 0 0 + + 38.052764 138.58084 0 0 0 0 60.907272 108.31492 0 0 0 0 63.560899 95.230425 0 0 0 0 59.055833 86.28516 0 0 0 0 50.545457 78.325742 0 0 0 0 39.098098 70.283847 0 0 0 0 25.156748 61.716479 0 0 0 0 8.9319479 52.4131 0 0 0 0 + + 38.181487 139.04962 0 0 0 0 61.113306 108.68132 0 0 0 0 63.77591 95.552566 0 0 0 0 59.255605 86.577042 0 0 0 0 50.716441 78.5907 0 0 0 0 39.230357 70.5216 0 0 0 0 25.241847 61.925251 0 0 0 0 8.9621626 52.590401 0 0 0 0 + + 38.325082 139.57257 0 0 0 0 61.343144 109.09006 0 0 0 0 64.015762 95.911925 0 0 0 0 59.478456 86.902645 0 0 0 0 50.907177 78.886267 0 0 0 0 39.377897 70.786821 0 0 0 0 25.336778 62.158143 0 0 0 0 8.9958679 52.788186 0 0 0 0 + + 38.483454 140.14933 0 0 0 0 61.596636 109.54086 0 0 0 0 64.280298 96.308267 0 0 0 0 59.724242 87.261758 0 0 0 0 51.117544 79.212253 0 0 0 0 39.54062 71.079337 0 0 0 0 25.441478 62.415002 0 0 0 0 9.033042 53.006325 0 0 0 0 + + 38.656502 140.77953 0 0 0 0 61.873615 110.03343 0 0 0 0 64.569345 96.741333 0 0 0 0 59.992802 87.654144 0 0 0 0 51.347402 79.568444 0 0 0 0 39.718421 71.398957 0 0 0 0 25.55588 62.695662 0 0 0 0 9.0736606 53.244677 0 0 0 0 + + 38.844108 141.46276 0 0 0 0 62.173898 110.56744 0 0 0 0 64.88271 97.210835 0 0 0 0 60.283957 88.079545 0 0 0 0 51.5966 79.954603 0 0 0 0 39.911181 71.745468 0 0 0 0 25.679907 62.999934 0 0 0 0 9.1176965 53.503082 0 0 0 0 + + 39.046147 142.19855 0 0 0 0 62.497282 111.14253 0 0 0 0 65.220183 97.716455 0 0 0 0 60.59751 88.537671 0 0 0 0 51.864968 80.370469 0 0 0 0 40.11877 72.118637 0 0 0 0 25.813476 63.327614 0 0 0 0 9.1651202 53.781366 0 0 0 0 + + 39.26248 142.98639 0 0 0 0 62.843544 111.75831 0 0 0 0 65.581532 98.257848 0 0 0 0 60.933248 89.028209 0 0 0 0 52.152323 80.815757 0 0 0 0 40.341046 72.518206 0 0 0 0 25.956494 63.678478 0 0 0 0 9.2158991 54.079339 0 0 0 0 + + 39.492956 143.82574 0 0 0 0 63.212445 112.41434 0 0 0 0 65.966505 98.834636 0 0 0 0 61.290934 89.550817 0 0 0 0 52.458465 81.290157 0 0 0 0 40.577854 72.943898 0 0 0 0 26.108862 64.052279 0 0 0 0 9.2699977 54.396793 0 0 0 0 + + 39.737413 144.716 0 0 0 0 63.603722 113.11017 0 0 0 0 66.374829 99.446409 0 0 0 0 61.670317 90.105125 0 0 0 0 52.783176 81.793333 0 0 0 0 40.829025 73.395411 0 0 0 0 26.270473 64.448755 0 0 0 0 9.3273778 54.733502 0 0 0 0 + + 39.995673 145.65654 0 0 0 0 64.017093 113.8453 0 0 0 0 66.80621 100.09273 0 0 0 0 62.071123 90.690733 0 0 0 0 53.126222 82.324921 0 0 0 0 41.09438 73.87242 0 0 0 0 26.441209 64.867618 0 0 0 0 9.387998 55.089224 0 0 0 0 + + 40.267547 146.64665 0 0 0 0 64.452255 114.61917 0 0 0 0 67.260331 100.77312 0 0 0 0 62.493057 91.307212 0 0 0 0 53.487353 82.884532 0 0 0 0 41.373723 74.374575 0 0 0 0 26.620945 65.308561 0 0 0 0 9.4518137 55.463698 0 0 0 0 + + 40.552832 147.6856 0 0 0 0 64.908882 115.43122 0 0 0 0 67.736853 101.48707 0 0 0 0 62.935804 91.954099 0 0 0 0 53.866296 83.471747 0 0 0 0 41.666845 74.901499 0 0 0 0 26.809547 65.771255 0 0 0 0 9.5187773 55.856643 0 0 0 0 + + 40.85131 148.7726 0 0 0 0 65.386626 116.28082 0 0 0 0 68.235412 102.23404 0 0 0 0 63.399026 92.630902 0 0 0 0 54.262765 84.086119 0 0 0 0 41.973522 75.452791 0 0 0 0 27.006872 66.255347 0 0 0 0 9.5888377 56.267761 0 0 0 0 + + 41.16275 149.90681 0 0 0 0 65.885117 117.16731 0 0 0 0 68.755621 103.01344 0 0 0 0 63.882363 93.337096 0 0 0 0 54.67645 84.727169 0 0 0 0 42.293517 76.028023 0 0 0 0 27.212765 66.76046 0 0 0 0 9.6619405 56.696732 0 0 0 0 + + 41.486904 151.08731 0 0 0 0 66.403959 118.09 0 0 0 0 69.297067 103.82467 0 0 0 0 64.385433 94.072121 0 0 0 0 55.107024 85.394391 0 0 0 0 42.626576 76.62674 0 0 0 0 27.427064 67.286195 0 0 0 0 9.7380277 57.143215 0 0 0 0 + + 41.823511 152.31317 0 0 0 0 66.942732 119.04813 0 0 0 0 69.859315 104.66706 0 0 0 0 64.90783 94.835382 0 0 0 0 55.554139 86.087245 0 0 0 0 42.97243 77.248457 0 0 0 0 27.649596 67.832127 0 0 0 0 9.817038 57.606851 0 0 0 0 + + 42.172294 153.58337 0 0 0 0 67.500994 120.04092 0 0 0 0 70.441899 105.53992 0 0 0 0 65.449122 95.626251 0 0 0 0 56.017427 86.80516 0 0 0 0 43.330794 77.892662 0 0 0 0 27.880177 68.397805 0 0 0 0 9.8989061 58.087258 0 0 0 0 + + 42.532959 154.89685 0 0 0 0 68.078275 121.06753 0 0 0 0 71.044331 106.44251 0 0 0 0 66.008854 96.444064 0 0 0 0 56.496498 87.547533 0 0 0 0 43.701367 78.558814 0 0 0 0 28.118613 68.982756 0 0 0 0 9.9835633 58.58403 0 0 0 0 + + 42.905197 156.25246 0 0 0 0 68.674079 122.12708 0 0 0 0 71.666093 107.37407 0 0 0 0 66.586547 97.288119 0 0 0 0 56.990941 88.313728 0 0 0 0 44.083831 79.246342 0 0 0 0 28.3647 69.586476 0 0 0 0 10.070937 59.096743 0 0 0 0 + + 43.288682 157.64904 0 0 0 0 69.287886 123.21865 0 0 0 0 72.306643 108.33378 0 0 0 0 67.181696 98.157677 0 0 0 0 57.500325 89.103074 0 0 0 0 44.477851 79.954643 0 0 0 0 28.618223 70.208438 0 0 0 0 10.160951 59.624948 0 0 0 0 + + 43.683073 159.08534 0 0 0 0 69.919148 124.34126 0 0 0 0 72.965408 109.32078 0 0 0 0 67.793769 99.051964 0 0 0 0 58.024193 89.914866 0 0 0 0 44.883076 80.683087 0 0 0 0 28.878955 70.848087 0 0 0 0 10.253524 60.168174 0 0 0 0 + + 44.08801 160.56004 0 0 0 0 70.56729 125.49389 0 0 0 0 73.641788 110.33417 0 0 0 0 68.422209 99.970164 0 0 0 0 58.562071 90.748366 0 0 0 0 45.299136 81.431009 0 0 0 0 29.14666 71.50484 0 0 0 0 10.348573 60.725926 0 0 0 0 + + 44.503117 162.07178 0 0 0 0 71.231711 126.67547 0 0 0 0 74.335157 111.37301 0 0 0 0 69.066433 100.91143 0 0 0 0 59.113457 91.6028 0 0 0 0 45.725647 82.197717 0 0 0 0 29.421088 72.178088 0 0 0 0 10.446009 61.297686 0 0 0 0 + + 44.928002 163.61913 0 0 0 0 71.911782 127.88488 0 0 0 0 75.044857 112.43632 0 0 0 0 69.725832 101.87486 0 0 0 0 59.677832 92.47736 0 0 0 0 46.162204 82.982483 0 0 0 0 29.70198 72.867194 0 0 0 0 10.545741 61.882914 0 0 0 0 + + 45.362254 165.20059 0 0 0 0 72.606846 129.12095 0 0 0 0 75.770204 113.52308 0 0 0 0 70.399768 102.85953 0 0 0 0 60.254649 93.371201 0 0 0 0 46.608385 83.784552 0 0 0 0 29.989065 73.571493 0 0 0 0 10.647671 62.481044 0 0 0 0 + + 45.805447 166.81462 0 0 0 0 73.31622 130.38247 0 0 0 0 76.510485 114.6322 0 0 0 0 71.087579 103.86448 0 0 0 0 60.843341 94.283445 0 0 0 0 47.063752 84.603133 0 0 0 0 30.28206 74.290292 0 0 0 0 10.751699 63.091488 0 0 0 0 + + 46.257136 168.45958 0 0 0 0 74.039194 131.66818 0 0 0 0 77.264957 115.7626 0 0 0 0 71.788575 104.88869 0 0 0 0 61.443319 95.213177 0 0 0 0 47.527849 85.437407 0 0 0 0 30.580673 75.022871 0 0 0 0 10.857722 63.713635 0 0 0 0 + + 46.716859 170.1338 0 0 0 0 74.775027 132.97675 0 0 0 0 78.032849 116.91309 0 0 0 0 72.502041 105.93111 0 0 0 0 62.053969 96.159446 0 0 0 0 48.000202 86.286521 0 0 0 0 30.884597 75.768481 0 0 0 0 10.965631 64.346849 0 0 0 0 + + 47.184139 171.83555 0 0 0 0 75.522956 134.30684 0 0 0 0 78.813364 118.0825 0 0 0 0 73.227235 106.99068 0 0 0 0 62.674657 97.12127 0 0 0 0 48.480318 87.149592 0 0 0 0 31.193516 76.526346 0 0 0 0 11.075313 64.990471 0 0 0 0 + + 47.658481 173.56301 0 0 0 0 76.282188 135.65702 0 0 0 0 79.605674 119.26959 0 0 0 0 73.963387 108.06626 0 0 0 0 63.304725 98.09763 0 0 0 0 48.967691 88.025706 0 0 0 0 31.507104 77.295665 0 0 0 0 11.186653 65.64382 0 0 0 0 + + 48.139373 175.31433 0 0 0 0 77.051904 137.02585 0 0 0 0 80.408926 120.47306 0 0 0 0 74.709706 109.15668 0 0 0 0 63.943493 99.087472 0 0 0 0 49.461793 88.913919 0 0 0 0 31.825023 78.075608 0 0 0 0 11.299531 66.306191 0 0 0 0 + + 48.626288 177.08758 0 0 0 0 77.83126 138.41183 0 0 0 0 81.222237 121.69161 0 0 0 0 75.465372 110.26077 0 0 0 0 64.590262 100.08971 0 0 0 0 49.962084 89.813256 0 0 0 0 32.146923 78.865318 0 0 0 0 11.413822 66.976857 0 0 0 0 + + 49.118682 178.88078 0 0 0 0 78.619386 139.8134 0 0 0 0 82.044701 122.92387 0 0 0 0 76.229541 111.37728 0 0 0 0 65.244309 101.10323 0 0 0 0 50.468005 90.722713 0 0 0 0 32.472446 79.663916 0 0 0 0 11.529399 67.655071 0 0 0 0 + + 49.615997 180.69191 0 0 0 0 79.415389 141.22898 0 0 0 0 82.875384 124.16845 0 0 0 0 77.001346 112.50495 0 0 0 0 65.904892 102.12687 0 0 0 0 50.978981 91.641259 0 0 0 0 32.801222 80.470494 0 0 0 0 11.646132 68.340062 0 0 0 0 + + 50.117659 182.51886 0 0 0 0 80.218349 142.65693 0 0 0 0 83.713327 125.4239 0 0 0 0 77.779898 113.64247 0 0 0 0 66.571249 103.15947 0 0 0 0 51.494424 92.567833 0 0 0 0 33.132871 81.284122 0 0 0 0 11.763885 69.031041 0 0 0 0 + + 50.623079 184.3595 0 0 0 0 81.027325 144.09557 0 0 0 0 84.557549 126.68876 0 0 0 0 78.564284 114.78852 0 0 0 0 67.242598 104.1998 0 0 0 0 52.013728 93.50135 0 0 0 0 33.467005 82.103846 0 0 0 0 11.88252 69.727197 0 0 0 0 + + 51.131657 186.21165 0 0 0 0 81.841354 145.54321 0 0 0 0 85.407044 127.96152 0 0 0 0 79.353568 115.94173 0 0 0 0 67.918141 105.24663 0 0 0 0 52.536277 94.440697 0 0 0 0 33.803227 82.92869 0 0 0 0 12.001896 70.427701 0 0 0 0 \ No newline at end of file From 63e9522569569d2db07eaa67299d5f56085d3424 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Mon, 20 Feb 2023 13:39:01 -0600 Subject: [PATCH 08/71] Update test file for cyclic verification 5 --- test/Spinning_disk_volumes.txt | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 test/Spinning_disk_volumes.txt diff --git a/test/Spinning_disk_volumes.txt b/test/Spinning_disk_volumes.txt new file mode 100644 index 0000000..f1a9980 --- /dev/null +++ b/test/Spinning_disk_volumes.txt @@ -0,0 +1,8 @@ +889.4101786424241 +1344.4572467850599 +1799.5043149276958 +2254.551383070332 +2709.598451212965 +3164.645519355601 +3619.692587498242 +4074.739655640872 \ No newline at end of file From 6ae6d7aa40e21688f80247a89e2af3e38aea88d2 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Mon, 20 Feb 2023 13:47:47 -0600 Subject: [PATCH 09/71] Update test file for cyclic verification 6 --- test/test_ceramic_damage_CARES_cyclic.py | 72 ++++++++++++++++++++---- 1 file changed, 61 insertions(+), 11 deletions(-) diff --git a/test/test_ceramic_damage_CARES_cyclic.py b/test/test_ceramic_damage_CARES_cyclic.py index 285c241..da3269e 100644 --- a/test/test_ceramic_damage_CARES_cyclic.py +++ b/test/test_ceramic_damage_CARES_cyclic.py @@ -5,7 +5,7 @@ # import csv import matplotlib.pyplot as plt -# import os.path +import os.path from srlife import ( materials, @@ -130,13 +130,23 @@ def setUp(self): # ) # data = np.loadtxt("Spinning_disk_cyclic_60000_70000.txt") - data = np.loadtxt("Spinning_disk_cyclic_60000_80000.txt") + data = np.loadtxt( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "Spinning_disk_cyclic_60000_80000.txt", + ) + ) # data = np.loadtxt("Spinning_disk_static_60000.txt") self.stress = data.reshape(data.shape[0], 8, -1) vol_factor = 1 - self.volumes = np.loadtxt("Spinning_disk_volumes.txt") + self.volumes = np.loadtxt( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "Spinning_disk_volumes.txt", + ) + ) self.volumes = vol_factor * (np.tile(self.volumes, data.shape[0])).reshape( data.shape[0], 8 ) @@ -185,13 +195,23 @@ def test_definition(self): class TestCSEModelGriffithFlaw(unittest.TestCase): def setUp(self): # data = np.loadtxt("Spinning_disk_cyclic_60000_70000.txt") - data = np.loadtxt("Spinning_disk_cyclic_60000_80000.txt") + data = np.loadtxt( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "Spinning_disk_cyclic_60000_80000.txt", + ) + ) # data = np.loadtxt("Spinning_disk_static_60000.txt") self.stress = data.reshape(data.shape[0], 8, -1) vol_factor = 1 - self.volumes = np.loadtxt("Spinning_disk_volumes.txt") + self.volumes = np.loadtxt( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "Spinning_disk_volumes.txt", + ) + ) self.volumes = vol_factor * (np.tile(self.volumes, data.shape[0])).reshape( data.shape[0], 8 ) @@ -243,13 +263,23 @@ def test_definition(self): class TestCSEModelPennyShapedFlaw(unittest.TestCase): def setUp(self): # data = np.loadtxt("Spinning_disk_cyclic_60000_70000.txt") - data = np.loadtxt("Spinning_disk_cyclic_60000_80000.txt") + data = np.loadtxt( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "Spinning_disk_cyclic_60000_80000.txt", + ) + ) # data = np.loadtxt("Spinning_disk_static_60000.txt") self.stress = data.reshape(data.shape[0], 8, -1) vol_factor = 1 - self.volumes = np.loadtxt("Spinning_disk_volumes.txt") + self.volumes = np.loadtxt( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "Spinning_disk_volumes.txt", + ) + ) self.volumes = vol_factor * (np.tile(self.volumes, data.shape[0])).reshape( data.shape[0], 8 ) @@ -299,13 +329,23 @@ def test_definition(self): class TestSMMModelGriffithFlaw(unittest.TestCase): def setUp(self): # data = np.loadtxt("Spinning_disk_cyclic_60000_70000.txt") - data = np.loadtxt("Spinning_disk_cyclic_60000_80000.txt") + data = np.loadtxt( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "Spinning_disk_cyclic_60000_80000.txt", + ) + ) # data = np.loadtxt("Spinning_disk_static_60000.txt") self.stress = data.reshape(data.shape[0], 8, -1) vol_factor = 1 - self.volumes = np.loadtxt("Spinning_disk_volumes.txt") + self.volumes = np.loadtxt( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "Spinning_disk_volumes.txt", + ) + ) self.volumes = vol_factor * (np.tile(self.volumes, data.shape[0])).reshape( data.shape[0], 8 ) @@ -352,13 +392,23 @@ def test_definition(self): class TestSMMModelPennyShapedFlaw(unittest.TestCase): def setUp(self): # data = np.loadtxt("Spinning_disk_cyclic_60000_70000.txt") - data = np.loadtxt("Spinning_disk_cyclic_60000_80000.txt") + data = np.loadtxt( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "Spinning_disk_cyclic_60000_80000.txt", + ) + ) # data = np.loadtxt("Spinning_disk_static_60000.txt") self.stress = data.reshape(data.shape[0], 8, -1) vol_factor = 1 - self.volumes = np.loadtxt("Spinning_disk_volumes.txt") + self.volumes = np.loadtxt( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "Spinning_disk_volumes.txt", + ) + ) self.volumes = vol_factor * (np.tile(self.volumes, data.shape[0])).reshape( data.shape[0], 8 ) From 43dfc57243dad19cbf3f217e47cc7d78435d8ce6 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Mon, 20 Feb 2023 13:49:59 -0600 Subject: [PATCH 10/71] Update test file for cyclic verification 7 --- srlife/damage_time_dep_cyclic.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/srlife/damage_time_dep_cyclic.py b/srlife/damage_time_dep_cyclic.py index 3ee00e2..95bfb0d 100644 --- a/srlife/damage_time_dep_cyclic.py +++ b/srlife/damage_time_dep_cyclic.py @@ -342,7 +342,7 @@ def calculate_flattened_eq_stress( # Defining total time self.period = 0.01 # in hours replace with period from receiver - print("number of cycles to failure =", nf) + # print("number of cycles to failure =", nf) self.period_array = np.linspace(0, self.period, pstress.shape[0]) # Calculate g using an integration method From 2b155800ec539e10464312ba2c8ece8872bf9012 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Tue, 21 Feb 2023 11:17:00 -0600 Subject: [PATCH 11/71] Cyclic model code and test file with fatigue parameters --- srlife/damage_time_dep_cyclic.py | 66 +++++++++---------- srlife/data/damage/SiC.xml | 2 + srlife/materials.py | 38 ++++++++++- test/test_ceramic_damage_CARES_cyclic.py | 81 ++++++++++++++++++++++-- 4 files changed, 146 insertions(+), 41 deletions(-) diff --git a/srlife/damage_time_dep_cyclic.py b/srlife/damage_time_dep_cyclic.py index 95bfb0d..6ef85d6 100644 --- a/srlife/damage_time_dep_cyclic.py +++ b/srlife/damage_time_dep_cyclic.py @@ -177,8 +177,8 @@ def __init__(self, pset, *args, **kwargs): # limits and number of segments for angles self.nalpha = pset.get_default("nalpha", 21) self.nbeta = pset.get_default("nbeta", 31) - self.Nv = pset.get_default("Nv", 30) - self.Bv = pset.get_default("Bv", 320) + # self.Nv = pset.get_default("Nv", 30) + # self.Bv = pset.get_default("Bv", 320) # Mesh grid of the vectorized angle values self.A, self.B = np.meshgrid( @@ -235,8 +235,6 @@ def __init__(self, pset, *args, **kwargs): # limits and number of segments for angles self.nalpha = pset.get_default("nalpha", 121) self.nbeta = pset.get_default("nbeta", 121) - self.Nv = pset.get_default("Nv", 30) - self.Bv = pset.get_default("Bv", 320) # Mesh grid of the vectorized angle values self.A, self.B = np.meshgrid( @@ -298,7 +296,7 @@ def calculate_shear_stress(self, mandel_stress): return np.sqrt(sigma**2 - sigma_n**2) def calculate_flattened_eq_stress( - self, mandel_stress, nf, temperatures, material, A, dalpha, dbeta + self, mandel_stress, nf, period, temperatures, material, A, dalpha, dbeta ): """ Calculate the integral of equivalent stresses given the material @@ -323,6 +321,8 @@ def calculate_flattened_eq_stress( self.material = material self.mandel_stress = mandel_stress self.mvals = self.material.modulus(temperatures) + Nv = material.Nv(temperatures) + Bv = material.Bv(temperatures) # Projected equivalent stresses sigma_e = self.calculate_eq_stress( @@ -338,27 +338,26 @@ def calculate_flattened_eq_stress( # g integral for calculating total time and g # Suppressing warning given when negative numbers are raised to rational numbers with np.errstate(invalid="ignore"): - g_integral = (sigma_e / sigma_e_max) ** self.Nv + g_integral = (sigma_e / sigma_e_max) ** Nv - # Defining total time - self.period = 0.01 # in hours replace with period from receiver + # Defining dt (period_array) for integration in g using period (in hours) Note: replace period with period from receiver # print("number of cycles to failure =", nf) - self.period_array = np.linspace(0, self.period, pstress.shape[0]) + self.period_array = np.linspace(0, period, pstress.shape[0]) # Calculate g using an integration method - g = (np.trapz(g_integral, self.period_array, axis=0)) / (self.period) + g = (np.trapz(g_integral, self.period_array, axis=0)) / (period) # Calculating time integral - time_integral = (sigma_e_max**self.Nv) * g + time_integral = (sigma_e_max**Nv) * g # Defining tf - self.tot_time = nf * self.period # replace with period from receiver + self.tot_time = nf * period # replace with period from receiver print("total time =", self.tot_time) # Time dependent equivalent stress sigma_e_0 = ( - ((time_integral * self.tot_time) / self.Bv) + (sigma_e_max ** (self.Nv - 2)) - ) ** (1 / (self.Nv - 2)) + ((time_integral * self.tot_time) / Bv) + (sigma_e_max ** (Nv - 2)) + ) ** (1 / (Nv - 2)) # Suppressing warning given when negative numbers are raised to rational numbers with np.errstate(invalid="ignore"): @@ -384,7 +383,7 @@ def calculate_flattened_eq_stress( return flat def calculate_element_log_reliability( - self, mandel_stress, temperatures, volumes, nf, material + self, mandel_stress, temperatures, volumes, nf, period, kbar, material ): """ Calculate the element log reliability given the equivalent stress @@ -406,13 +405,15 @@ def calculate_element_log_reliability( svals = self.material.strength(temperatures) mvals = self.material.modulus(temperatures) kvals = svals ** (-mvals) + kpvals = kbar * kvals - # Shear-insensitive case + # For shear-insensitive case # kpvals = (2 * mvals + 1) * kvals - # CSE model - kpvals = (mvals + 1) * kvals - # Shear sensitive case + # For CSE model + # kpvals = kbar * kvals + + # For shear sensitive case # kpvals = (2.99) * kvals # Equivalent stress raied to exponent mv @@ -420,6 +421,7 @@ def calculate_element_log_reliability( self.calculate_flattened_eq_stress( mandel_stress, nf, + period, self.temperatures, self.material, self.A, @@ -440,7 +442,7 @@ class PIAModel(CrackShapeIndependent): """ def calculate_element_log_reliability( - self, mandel_stress, temperatures, volumes, nf, material + self, mandel_stress, temperatures, volumes, nf, period, material ): """ Calculate the element log reliability @@ -460,6 +462,8 @@ def calculate_element_log_reliability( svals = material.strength(temperatures) mvals = material.modulus(temperatures) kvals = svals ** (-mvals) + Nv = material.Nv(temperatures) + Bv = material.Bv(temperatures) # Only tension pstress[pstress < 0] = 0 @@ -472,28 +476,26 @@ def calculate_element_log_reliability( # g integral for calculating total time and g with np.errstate(invalid="ignore"): - g_integral = (pstress / pstress_max) ** self.Nv + g_integral = (pstress / (pstress_max + 1e-14)) ** Nv - # Defining dt for integration in g - self.period = 0.01 # in hours replace with period from receiver + # Defining dt (period_array) for integration in g using period (in hours) Note: replace period with period from receiver print("number of cycles to failure =", nf) - self.period_array = np.linspace(0, self.period, pstress.shape[0]) - # self.period_array = self.period_array.reshape(1,-1) - - # Calculate g using an integration method - g = (np.trapz(g_integral, self.period_array, axis=0)) / self.period + self.period_array = np.linspace(0, period, pstress.shape[0]) + # Calculate g using an trapezoidal integration method + g = np.max((np.trapz(g_integral, self.period_array, axis=0)) / period) + print("g =", g) # Calculating time integral - time_integral = (pstress_max**self.Nv) * g + time_integral = (pstress_max**Nv) * g # Defining tf - self.tot_time = nf * self.period # replace with period from receiver + self.tot_time = nf * period # replace with period from receiver print("service time =", self.tot_time) # Time dependent principal stress pstress_0 = ( - (time_integral * self.tot_time) / self.Bv + (pstress_max ** (self.Nv - 2)) - ) ** (1 / (self.Nv - 2)) + (time_integral * self.tot_time) / Bv + (pstress_max ** (Nv - 2)) + ) ** (1 / (Nv - 2)) return -kvals * np.nansum(pstress_0 ** mvals[..., None], axis=-1) * volumes diff --git a/srlife/data/damage/SiC.xml b/srlife/data/damage/SiC.xml index d022cd0..3b7cfab 100644 --- a/srlife/data/damage/SiC.xml +++ b/srlife/data/damage/SiC.xml @@ -11,5 +11,7 @@ 1.5 0.16 + 30 + 320 diff --git a/srlife/materials.py b/srlife/materials.py index 4cd37aa..4755430 100644 --- a/srlife/materials.py +++ b/srlife/materials.py @@ -498,7 +498,7 @@ def cycles_to_fail(self, pname, temp, erange): polysum = 0.0 if erange <= cutoff[i]: erange = cutoff[i][0][0] - for (b, m) in zip(a[i][0], n[i][0]): + for b, m in zip(a[i][0], n[i][0]): polysum += b * np.log10(erange) ** m break @@ -529,7 +529,7 @@ def time_to_rupture(self, pname, temp, stress): not_zeros = np.logical_not(zeros) res = np.zeros(stress.shape) - for (b, m) in zip(a, n): + for b, m in zip(a, n): res[not_zeros] += b * np.log10(stress[not_zeros]) ** m res[not_zeros] = 10.0 ** (res[not_zeros] / temp[not_zeros] - C) res[zeros] = np.inf @@ -702,6 +702,8 @@ class StandardCeramicMaterial: 2) Weibull modulus depends on temperature 3) Constant c_bar parameter 4) Constant Poisson's ratio + 5) Constant fatigue exponent parameter Nv + 6) Constant faitgue parameter Bv """ def __init__( @@ -712,6 +714,8 @@ def __init__( modulus, c_bar, nu, + Nv, + Bv, *args, **kwargs ): @@ -725,6 +729,8 @@ def __init__( self.m = inter.interp1d(m_temperatures, modulus) self.C = c_bar self.nu_val = nu + self.Nv_val = Nv + self.Bv_val = Bv def strength(self, T): """ @@ -756,6 +762,24 @@ def nu(self, T): else: return self.nu_val * np.ones(T.shape) + def Nv(self, T): + """ + Fatigue exponent parameter as a function of temperature + """ + # if np.isscalar(T): + return self.Nv_val + # else: + # return self.Nv_val * np.ones(T.shape) + + def Bv(self, T): + """ + Fatigue parameter as a function of temperature + """ + # if np.isscalar(T): + return self.Bv_val + # else: + # return self.Bv_val * np.ones(T.shape) + @classmethod def load(cls, node): """ @@ -772,6 +796,8 @@ def load(cls, node): m_temps = m.find("temperatures") mvals = m.find("values") nu = node.find("nu") + Nv = node.find("Nv") + Bv = node.find("Bv") return StandardCeramicMaterial( np.array(list(map(float, s_temps.text.strip().split()))), @@ -780,6 +806,8 @@ def load(cls, node): np.array(list(map(float, mvals.text.strip().split()))), float(c_bar.text), float(nu.text), + float(Nv.text), + float(Bv.text), ) def save(self, fname, modelname): @@ -807,5 +835,11 @@ def save(self, fname, modelname): nu = ET.SubElement(base, "nu") nu.text = str(self.nu_val) + Nv = ET.SubElement(base, "Nv") + Nv.text = str(self.Nv_val) + + Bv = ET.SubElement(base, "Bv") + Bv.text = str(self.Bv_val) + tree = ET.ElementTree(element=root) tree.write(fname) diff --git a/test/test_ceramic_damage_CARES_cyclic.py b/test/test_ceramic_damage_CARES_cyclic.py index da3269e..de73618 100644 --- a/test/test_ceramic_damage_CARES_cyclic.py +++ b/test/test_ceramic_damage_CARES_cyclic.py @@ -155,12 +155,15 @@ def setUp(self): # Number of cycles to failure self.nf = 1 + self.period = 0.01 # Material properties self.m = 7.65 self.s0 = 74.79 * ((1000) ** (3 / self.m)) # in mm 74.79 in m self.c_bar = 0.82 self.nu = 0.219 + self.Nv = 30 + self.Bv = 320 self.material = materials.StandardCeramicMaterial( np.array([0, 1000.0]), @@ -169,6 +172,8 @@ def setUp(self): np.array([self.m, self.m]), self.c_bar, self.nu, + self.Nv, + self.Bv, ) self.model_time_dep = damage_time_dep_cyclic.PIAModel( @@ -180,7 +185,12 @@ def test_definition(self): # kp = (2 * self.m + 1) * k actual = self.model_time_dep.calculate_element_log_reliability( - self.stress, self.temperatures, self.volumes, self.nf, self.material + self.stress, + self.temperatures, + self.volumes, + self.nf, + self.period, + self.material, ) # Summing up log probabilities over nelem and taking the value of one @@ -220,12 +230,18 @@ def setUp(self): # Number of cycles to failure self.nf = 1 + self.period = 0.01 # Material properties self.m = 7.65 self.s0 = 74.79 * ((1000) ** (3 / self.m)) # in mm 74.79 in m self.c_bar = 0.82 self.nu = 0.219 + self.Nv = 30 + self.Bv = 320 + + # Model specific property + self.kbar = self.m + 1 self.material = materials.StandardCeramicMaterial( np.array([0, 1000.0]), @@ -234,6 +250,8 @@ def setUp(self): np.array([self.m, self.m]), self.c_bar, self.nu, + self.Nv, + self.Bv, ) # self.model_time_indep = damage.CSEModelGriffithFlaw(solverparams.ParameterSet()) @@ -247,7 +265,13 @@ def test_definition(self): # kp = (self.m + 1) * k actual = self.model_time_dep.calculate_element_log_reliability( - self.stress, self.temperatures, self.volumes, self.nf, self.material + self.stress, + self.temperatures, + self.volumes, + self.nf, + self.period, + self.kbar, + self.material, ) # Summing up log probabilities over nelem and taking the value of one @@ -288,12 +312,18 @@ def setUp(self): # Number of cycles to failure self.nf = 1 + self.period = 0.01 # Material properties self.m = 7.65 self.s0 = 74.79 * ((1000) ** (3 / self.m)) # in mm 74.79 in m self.c_bar = 0.82 self.nu = 0.219 + self.Nv = 30 + self.Bv = 320 + + # Model specific property + self.kbar = self.m + 1 self.material = materials.StandardCeramicMaterial( np.array([0, 1000.0]), @@ -302,6 +332,8 @@ def setUp(self): np.array([self.m, self.m]), self.c_bar, self.nu, + self.Nv, + self.Bv, ) self.model_time_dep = damage_time_dep_cyclic.CSEModelPennyShapedFlaw( @@ -313,7 +345,13 @@ def test_definition(self): # kp = (self.m + 1) * k actual = self.model_time_dep.calculate_element_log_reliability( - self.stress, self.temperatures, self.volumes, self.nf, self.material + self.stress, + self.temperatures, + self.volumes, + self.nf, + self.period, + self.kbar, + self.material, ) # Summing up log probabilities over nelem and taking the value of one @@ -351,14 +389,21 @@ def setUp(self): ) self.temperatures = np.ones((data.shape[0], 8)) + # Number of cycles to failure self.nf = 1 + self.period = 0.01 # Material properties self.m = 7.65 self.s0 = 74.79 * ((1000) ** (3 / self.m)) # in mm 74.79 in m self.c_bar = 0.82 self.nu = 0.219 + self.Nv = 30 + self.Bv = 320 + + # Model specific property + self.kbar = 2.99 self.material = materials.StandardCeramicMaterial( np.array([0, 1000.0]), @@ -367,6 +412,8 @@ def setUp(self): np.array([self.m, self.m]), self.c_bar, self.nu, + self.Nv, + self.Bv, ) self.model_time_dep = damage_time_dep_cyclic.SMMModelGriffithFlaw( @@ -378,11 +425,18 @@ def test_definition(self): # kp = (2.99) * k actual = self.model_time_dep.calculate_element_log_reliability( - self.stress, self.temperatures, self.volumes, self.nf, self.material + self.stress, + self.temperatures, + self.volumes, + self.nf, + self.period, + self.kbar, + self.material, ) # Summing up log probabilities over nelem and taking the value of one R_SMM_GF = np.exp(np.sum(actual, axis=1))[0] + print("Time dep Reliability SMM_GF = ", R_SMM_GF) # Evaluating Probability of Failure Pf_SMM_GF = 1 - R_SMM_GF @@ -417,12 +471,18 @@ def setUp(self): # Number of cycles to failure self.nf = 1 + self.period = 0.01 # Material properties self.m = 7.65 self.s0 = 74.79 * ((1000) ** (3 / self.m)) # in mm 74.79 in m self.c_bar = 0.82 self.nu = 0.219 + self.Nv = 30 + self.Bv = 320 + + # Model specific property + self.kbar = 2.99 self.material = materials.StandardCeramicMaterial( np.array([0, 1000.0]), @@ -431,8 +491,9 @@ def setUp(self): np.array([self.m, self.m]), self.c_bar, self.nu, + self.Nv, + self.Bv, ) - self.model_time_dep = damage_time_dep_cyclic.SMMModelPennyShapedFlaw( solverparams.ParameterSet() ) @@ -442,9 +503,15 @@ def test_definition(self): # kp = (2.99) * k actual = self.model_time_dep.calculate_element_log_reliability( - self.stress, self.temperatures, self.volumes, self.nf, self.material + self.stress, + self.temperatures, + self.volumes, + self.nf, + self.period, + self.kbar, + self.material, ) - print("actual shape =", actual.shape) + # print("actual shape =", actual.shape) # Summing up log probabilities over nelem and taking the value of one R_SMM_PSF = np.exp(np.sum(actual, axis=1))[0] From 7279fe6528fc5e23bd148f9700afce687a33acbb Mon Sep 17 00:00:00 2001 From: pschaugule Date: Tue, 21 Feb 2023 11:21:58 -0600 Subject: [PATCH 12/71] Cyclic model code and test file with fatigue parameters 2 --- test/test_materials.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/test/test_materials.py b/test/test_materials.py index 3439fd0..1c45865 100644 --- a/test/test_materials.py +++ b/test/test_materials.py @@ -190,10 +190,10 @@ def test_cycles_to_fail(self): cutoff = 1.5e-3 sum = 0 if self.erange <= cutoff: - for (b, m) in zip(a, n): + for b, m in zip(a, n): sum += b * np.log10(cutoff) ** m else: - for (b, m) in zip(a, n): + for b, m in zip(a, n): sum += b * np.log10(self.erange) ** m return 10**sum @@ -208,7 +208,7 @@ def test_rupturetime(self): a = np.array([-1475.23, 7289.41, -16642.64, 35684.60]) n = np.array([3, 2, 1, 0]) sum = 0 - for (b, m) in zip(a, n): + for b, m in zip(a, n): sum += b * np.log10(self.stress) ** m sum = 10 ** (sum / self.T - C) @@ -248,9 +248,11 @@ def setUp(self): self.ms = np.array([10.7, 9.2]) self.c_bar = 1.5 self.nu = 0.17 + self.Nv = 30 + self.Bv = 320 self.mat = materials.StandardCeramicMaterial( - self.Ts, self.s0s, self.mTs, self.ms, self.c_bar, self.nu + self.Ts, self.s0s, self.mTs, self.ms, self.c_bar, self.nu, self.Nv, self.Bv ) def test_strength(self): From 3e9d7481827121f7dffc5323c3a5966c541810a1 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Wed, 22 Feb 2023 13:04:28 -0600 Subject: [PATCH 13/71] Pushing new cyclic files to sub-branch --- srlife/damage_time_dep_cyclic.py | 242 ++++++++++++++++++++++- test/test_ceramic_damage_CARES_cyclic.py | 23 ++- 2 files changed, 255 insertions(+), 10 deletions(-) diff --git a/srlife/damage_time_dep_cyclic.py b/srlife/damage_time_dep_cyclic.py index 6ef85d6..91491fc 100644 --- a/srlife/damage_time_dep_cyclic.py +++ b/srlife/damage_time_dep_cyclic.py @@ -405,6 +405,16 @@ def calculate_element_log_reliability( svals = self.material.strength(temperatures) mvals = self.material.modulus(temperatures) kvals = svals ** (-mvals) + + shear_sensitive = True + + if shear_sensitive == True: + kbar = self.calculate_kbar( + self.temperatures, self.material, self.A, self.dalpha, self.dbeta + ) + else: + kbar = 2 * mvals + 1 + kpvals = kbar * kvals # For shear-insensitive case @@ -413,7 +423,7 @@ def calculate_element_log_reliability( # For CSE model # kpvals = kbar * kvals - # For shear sensitive case + # For hear sensitive case # kpvals = (2.99) * kvals # Equivalent stress raied to exponent mv @@ -602,6 +612,47 @@ def calculate_eq_stress(self, mandel_stress, temperatures, material): # Projected equivalent stress return 0.5 * (sigma_n + np.sqrt((sigma_n**2) + (tau**2))) + def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): + """ + Calculate the kbar from the Weibull modulus and material parameters + """ + + self.temperatures = temperatures + self.material = material + + # Weibull modulus + mvals = self.material.modulus(temperatures).flat[0] + + # Material parameters + nu = material.nu(temperatures).flat[0] + cbar = material.c_bar(temperatures).flat[0] + + # Calculating kbar + with np.errstate(invalid="ignore"): + integral2 = 2 * ( + ( + ( + 0.5 + * ( + ((np.cos(self.A)) ** 2) + + np.sqrt( + ((np.cos(self.A)) ** 4) + + (((np.sin(self.A)) ** 2) * ((np.cos(self.A)) ** 2)) + ) + ) + ) + ** mvals + ) + * np.sin(self.A) + * self.dalpha + * self.dbeta + ) + kbar = np.pi / np.sum(integral2) + + print("kbar =", kbar) + + return kbar + class MTSModelPennyShapedFlaw(CrackShapeDependent): """ @@ -633,6 +684,47 @@ def calculate_eq_stress(self, mandel_stress, temperatures, material): sigma_n + np.sqrt((sigma_n**2) + ((tau / (1 - (0.5 * nu))) ** 2)) ) + def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): + """ + Calculate the kbar from the Weibull modulus and material parameters + """ + + self.temperatures = temperatures + self.material = material + + # Weibull modulus + mvals = self.material.modulus(temperatures).flat[0] + + # Material parameters + nu = material.nu(temperatures).flat[0] + cbar = material.c_bar(temperatures).flat[0] + + # Calculating kbar + with np.errstate(invalid="ignore"): + integral2 = 2 * ( + ( + ( + 0.5 + * ( + ((np.cos(self.A)) ** 2) + + np.sqrt( + ((np.cos(self.A)) ** 4) + + (((np.sin(2 * self.A)) ** 2) / (2 - (nu**2))) + ) + ) + ) + ** mvals + ) + * np.sin(self.A) + * self.dalpha + * self.dbeta + ) + kbar = np.pi / np.sum(integral2) + + print("kbar =", kbar) + + return kbar + class CSEModelGriffithFlaw(CrackShapeDependent): """ @@ -656,6 +748,32 @@ def calculate_eq_stress(self, mandel_stress, temperatures, material): # Projected equivalent stress return np.sqrt((sigma_n**2) + (tau**2)) + def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): + """ + Calculate the kbar from the Weibull modulus and material parameters + """ + + self.temperatures = temperatures + self.material = material + + # Weibull modulus + mvals = self.material.modulus(temperatures).flat[0] + + # Material parameters + nu = material.nu(temperatures).flat[0] + cbar = material.c_bar(temperatures).flat[0] + + # Calculating kbar + with np.errstate(invalid="ignore"): + integral2 = 2 * ( + ((np.cos(self.A)) ** mvals) * np.sin(self.A) * self.dalpha * self.dbeta + ) + kbar = np.pi / np.sum(integral2) + + print("kbar =", kbar) + + return kbar + class CSEModelPennyShapedFlaw(CrackShapeDependent): """ @@ -686,6 +804,43 @@ def calculate_eq_stress(self, mandel_stress, temperatures, material): # Projected equivalent stress return np.sqrt((sigma_n**2) + (tau / (1 - (0.5 * nu))) ** 2) + def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): + """ + Calculate the kbar from the Weibull modulus and material parameters + """ + + self.temperatures = temperatures + self.material = material + + # Weibull modulus + mvals = self.material.modulus(temperatures).flat[0] + + # Material parameters + nu = material.nu(temperatures).flat[0] + cbar = material.c_bar(temperatures).flat[0] + + # Calculating kbar + with np.errstate(invalid="ignore"): + integral2 = 2 * ( + ( + ( + np.sqrt( + ((np.cos(self.A)) ** 4) + + (((np.sin(2 * self.A)) ** 2) / ((2 - nu) ** 2)) + ) + ) + ** mvals + ) + * np.sin(self.A) + * self.dalpha + * self.dbeta + ) + kbar = np.pi / np.sum(integral2) + + print("kbar =", kbar) + + return kbar + class SMMModelGriffithFlaw(CrackShapeDependent): """ @@ -716,6 +871,47 @@ def calculate_eq_stress(self, mandel_stress, temperatures, material): # Projected equivalent stress return 0.5 * (sigma_n + np.sqrt((sigma_n**2) + ((2 * tau / cbar) ** 2))) + def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): + """ + Calculate the kbar from the Weibull modulus and material parameters + """ + + self.temperatures = temperatures + self.material = material + + # Weibull modulus + mvals = self.material.modulus(temperatures).flat[0] + + # Material parameters + nu = material.nu(temperatures).flat[0] + cbar = material.c_bar(temperatures).flat[0] + + # Calculating kbar + with np.errstate(invalid="ignore"): + integral2 = 2 * ( + ( + ( + 0.5 + * ( + ((np.cos(self.A)) ** 2) + + np.sqrt( + ((np.cos(self.A)) ** 4) + + (((np.sin(2 * self.A)) ** 2) / (cbar**2)) + ) + ) + ) + ** mvals + ) + * np.sin(self.A) + * self.dalpha + * self.dbeta + ) + kbar = np.pi / np.sum(integral2) + + print("kbar =", kbar) + + return kbar + class SMMModelPennyShapedFlaw(CrackShapeDependent): """ @@ -750,6 +946,50 @@ def calculate_eq_stress(self, mandel_stress, temperatures, material): sigma_n + np.sqrt((sigma_n**2) + ((4 * tau / (cbar * (2 - nu))) ** 2)) ) + def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): + """ + Calculate the kbar from the Weibull modulus and material parameters + """ + + self.temperatures = temperatures + self.material = material + + # Weibull modulus + mvals = self.material.modulus(temperatures).flat[0] + + # Material parameters + nu = material.nu(temperatures).flat[0] + cbar = material.c_bar(temperatures).flat[0] + + # Calculating kbar + with np.errstate(invalid="ignore"): + integral2 = 2 * ( + ( + ( + 0.5 + * ( + ((np.cos(self.A)) ** 2) + + np.sqrt( + ((np.cos(self.A)) ** 4) + + ( + (4 * ((np.sin(2 * self.A)) ** 2)) + / ((cbar**2) * ((nu - 2) ** 2)) + ) + ) + ) + ) + ** mvals + ) + * np.sin(self.A) + * self.dalpha + * self.dbeta + ) + kbar = np.pi / np.sum(integral2) + + print("kbar =", kbar) + + return kbar + class DamageCalculator: """ diff --git a/test/test_ceramic_damage_CARES_cyclic.py b/test/test_ceramic_damage_CARES_cyclic.py index de73618..547d9af 100644 --- a/test/test_ceramic_damage_CARES_cyclic.py +++ b/test/test_ceramic_damage_CARES_cyclic.py @@ -133,14 +133,15 @@ def setUp(self): data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - "Spinning_disk_cyclic_60000_80000.txt", + "Spinning_disk_cyclic_60000_70000.txt", + # "Spinning_disk_cyclic_60000_80000.txt", ) ) # data = np.loadtxt("Spinning_disk_static_60000.txt") self.stress = data.reshape(data.shape[0], 8, -1) - vol_factor = 1 + vol_factor = 360 / 360 self.volumes = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), @@ -208,7 +209,8 @@ def setUp(self): data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - "Spinning_disk_cyclic_60000_80000.txt", + "Spinning_disk_cyclic_60000_70000.txt", + # "Spinning_disk_cyclic_60000_80000.txt", ) ) # data = np.loadtxt("Spinning_disk_static_60000.txt") @@ -290,7 +292,8 @@ def setUp(self): data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - "Spinning_disk_cyclic_60000_80000.txt", + "Spinning_disk_cyclic_60000_70000.txt", + # "Spinning_disk_cyclic_60000_80000.txt", ) ) # data = np.loadtxt("Spinning_disk_static_60000.txt") @@ -323,7 +326,7 @@ def setUp(self): self.Bv = 320 # Model specific property - self.kbar = self.m + 1 + self.kbar = 7.13 self.material = materials.StandardCeramicMaterial( np.array([0, 1000.0]), @@ -370,7 +373,8 @@ def setUp(self): data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - "Spinning_disk_cyclic_60000_80000.txt", + "Spinning_disk_cyclic_60000_70000.txt", + # "Spinning_disk_cyclic_60000_80000.txt", ) ) # data = np.loadtxt("Spinning_disk_static_60000.txt") @@ -403,7 +407,7 @@ def setUp(self): self.Bv = 320 # Model specific property - self.kbar = 2.99 + self.kbar = 2.92 self.material = materials.StandardCeramicMaterial( np.array([0, 1000.0]), @@ -449,7 +453,8 @@ def setUp(self): data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - "Spinning_disk_cyclic_60000_80000.txt", + "Spinning_disk_cyclic_60000_70000.txt", + # "Spinning_disk_cyclic_60000_80000.txt", ) ) # data = np.loadtxt("Spinning_disk_static_60000.txt") @@ -482,7 +487,7 @@ def setUp(self): self.Bv = 320 # Model specific property - self.kbar = 2.99 + self.kbar = 1.96 self.material = materials.StandardCeramicMaterial( np.array([0, 1000.0]), From c192b85560aa4ff81bdcbe5e0ea371c9b8ef7552 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Wed, 22 Feb 2023 13:08:37 -0600 Subject: [PATCH 14/71] Pushing example file --- test/Spinning_disk_cyclic_60000_70000.txt | 361 ++++++++++++++++++++++ 1 file changed, 361 insertions(+) create mode 100644 test/Spinning_disk_cyclic_60000_70000.txt diff --git a/test/Spinning_disk_cyclic_60000_70000.txt b/test/Spinning_disk_cyclic_60000_70000.txt new file mode 100644 index 0000000..b51ec5a --- /dev/null +++ b/test/Spinning_disk_cyclic_60000_70000.txt @@ -0,0 +1,361 @@ + 44.08801 160.56004 0 0 0 0 70.56729 125.49389 0 0 0 0 73.641788 110.33417 0 0 0 0 68.422209 99.970164 0 0 0 0 58.562071 90.748366 0 0 0 0 45.299136 81.431009 0 0 0 0 29.14666 71.50484 0 0 0 0 10.348573 60.725926 0 0 0 0 + + 44.325043 161.42327 0 0 0 0 70.946685 126.16859 0 0 0 0 74.037713 110.92736 0 0 0 0 68.790072 100.50764 0 0 0 0 58.876922 91.236262 0 0 0 0 45.542681 81.868812 0 0 0 0 29.303363 71.889276 0 0 0 0 10.404211 61.05241 0 0 0 0 + + 44.562422 162.28776 0 0 0 0 71.326633 126.84427 0 0 0 0 74.434215 111.52142 0 0 0 0 69.15847 101.0459 0 0 0 0 59.192231 91.724869 0 0 0 0 45.78658 82.307252 0 0 0 0 29.460294 72.274272 0 0 0 0 10.45993 61.37937 0 0 0 0 + + 44.799853 163.15244 0 0 0 0 71.706666 127.52011 0 0 0 0 74.830805 112.11562 0 0 0 0 69.526951 101.58428 0 0 0 0 59.507611 92.213585 0 0 0 0 46.030534 82.745791 0 0 0 0 29.617261 72.659354 0 0 0 0 10.515661 61.706404 0 0 0 0 + + 45.037042 164.01623 0 0 0 0 72.086311 128.19525 0 0 0 0 75.226991 112.7092 0 0 0 0 69.895056 102.12211 0 0 0 0 59.822669 92.701802 0 0 0 0 46.274239 83.183882 0 0 0 0 29.774067 73.044043 0 0 0 0 10.571335 62.033103 0 0 0 0 + + 45.273692 164.87807 0 0 0 0 72.465093 128.86886 0 0 0 0 75.622276 113.30144 0 0 0 0 70.262324 102.65871 0 0 0 0 60.137011 93.18891 0 0 0 0 46.51739 83.620977 0 0 0 0 29.930516 73.427857 0 0 0 0 10.626883 62.35906 0 0 0 0 + + 45.509504 165.73685 0 0 0 0 72.842534 129.54009 0 0 0 0 76.016161 113.89158 0 0 0 0 70.628292 103.19342 0 0 0 0 60.450241 93.674293 0 0 0 0 46.75968 84.056524 0 0 0 0 30.086412 73.810313 0 0 0 0 10.682234 62.683863 0 0 0 0 + + 45.744179 166.59149 0 0 0 0 73.218155 130.20808 0 0 0 0 76.408147 114.47888 0 0 0 0 70.992494 103.72555 0 0 0 0 60.761959 94.157334 0 0 0 0 47.000801 84.48997 0 0 0 0 30.241556 74.190924 0 0 0 0 10.737318 63.007099 0 0 0 0 + + 45.977415 167.44089 0 0 0 0 73.591473 130.87197 0 0 0 0 76.79773 115.06257 0 0 0 0 71.354464 104.25442 0 0 0 0 61.071766 94.637415 0 0 0 0 47.240445 84.92076 0 0 0 0 30.395749 74.569202 0 0 0 0 10.792065 63.328354 0 0 0 0 + + 46.208913 168.28396 0 0 0 0 73.962008 131.53091 0 0 0 0 77.184409 115.64191 0 0 0 0 71.713736 104.77934 0 0 0 0 61.379264 95.113917 0 0 0 0 47.478302 85.348339 0 0 0 0 30.548792 74.94466 0 0 0 0 10.846403 63.647214 0 0 0 0 + + 46.438371 169.1196 0 0 0 0 74.329279 132.18405 0 0 0 0 77.567681 116.21615 0 0 0 0 72.069842 105.29964 0 0 0 0 61.684053 95.586221 0 0 0 0 47.714063 85.77215 0 0 0 0 30.700488 75.31681 0 0 0 0 10.900262 63.963265 0 0 0 0 + + 46.665489 169.94672 0 0 0 0 74.692805 132.83053 0 0 0 0 77.947045 116.78454 0 0 0 0 72.422318 105.81463 0 0 0 0 61.985735 96.05371 0 0 0 0 47.947421 86.19164 0 0 0 0 30.850636 75.685166 0 0 0 0 10.953573 64.276093 0 0 0 0 + + 46.889969 170.76424 0 0 0 0 75.052107 133.4695 0 0 0 0 78.322002 117.34632 0 0 0 0 72.770699 106.32364 0 0 0 0 62.283911 96.515767 0 0 0 0 48.178067 86.606257 0 0 0 0 30.99904 76.049242 0 0 0 0 11.006264 64.585287 0 0 0 0 + + 47.111513 171.57106 0 0 0 0 75.406711 134.10011 0 0 0 0 78.692055 117.90075 0 0 0 0 73.114523 106.826 0 0 0 0 62.578188 96.971781 0 0 0 0 48.405697 87.015451 0 0 0 0 31.145503 76.408557 0 0 0 0 11.058266 64.890437 0 0 0 0 + + 47.329826 172.36611 0 0 0 0 75.756142 134.72153 0 0 0 0 79.05671 118.4471 0 0 0 0 73.453332 107.32103 0 0 0 0 62.868172 97.421144 0 0 0 0 48.630007 87.418677 0 0 0 0 31.28983 76.762631 0 0 0 0 11.10951 65.191137 0 0 0 0 + + 47.544614 173.14833 0 0 0 0 76.099933 135.33291 0 0 0 0 79.415479 118.98463 0 0 0 0 73.786672 107.80806 0 0 0 0 63.153476 97.863253 0 0 0 0 48.850696 87.815393 0 0 0 0 31.431827 77.110989 0 0 0 0 11.159926 65.486982 0 0 0 0 + + 47.755589 173.91666 0 0 0 0 76.437618 135.93343 0 0 0 0 79.767877 119.51261 0 0 0 0 74.114093 108.28645 0 0 0 0 63.433713 98.297511 0 0 0 0 49.067466 88.205065 0 0 0 0 31.571302 77.453161 0 0 0 0 11.209447 65.777574 0 0 0 0 + + 47.962462 174.67005 0 0 0 0 76.76874 136.52229 0 0 0 0 80.113425 120.03033 0 0 0 0 74.43515 108.75554 0 0 0 0 63.708503 98.723328 0 0 0 0 49.280022 88.587163 0 0 0 0 31.708067 77.788682 0 0 0 0 11.258005 66.062517 0 0 0 0 + + 48.164953 175.40748 0 0 0 0 77.092847 137.09867 0 0 0 0 80.451653 120.53708 0 0 0 0 74.749404 109.21469 0 0 0 0 63.977471 99.140124 0 0 0 0 49.488076 88.961165 0 0 0 0 31.841934 78.117095 0 0 0 0 11.305535 66.341424 0 0 0 0 + + 48.362783 176.12794 0 0 0 0 77.409493 137.66178 0 0 0 0 80.782095 121.03216 0 0 0 0 75.056426 109.66327 0 0 0 0 64.240248 99.547326 0 0 0 0 49.69134 89.326559 0 0 0 0 31.97272 78.437948 0 0 0 0 11.351971 66.61391 0 0 0 0 + + 48.555679 176.83043 0 0 0 0 77.718242 138.21084 0 0 0 0 81.104296 121.5149 0 0 0 0 75.355789 110.10066 0 0 0 0 64.496472 99.944373 0 0 0 0 49.889535 89.682839 0 0 0 0 32.100243 78.750799 0 0 0 0 11.397248 66.879601 0 0 0 0 + + 48.743373 177.51398 0 0 0 0 78.018666 138.7451 0 0 0 0 81.417808 121.98463 0 0 0 0 75.647081 110.52626 0 0 0 0 64.745786 100.33071 0 0 0 0 50.082385 90.029513 0 0 0 0 32.224328 79.055214 0 0 0 0 11.441305 67.138128 0 0 0 0 + + 48.925604 178.17763 0 0 0 0 78.310346 139.26381 0 0 0 0 81.722196 122.44068 0 0 0 0 75.929894 110.93947 0 0 0 0 64.987843 100.70581 0 0 0 0 50.269622 90.366096 0 0 0 0 32.344802 79.350769 0 0 0 0 11.484079 67.389129 0 0 0 0 + + 49.102117 178.82045 0 0 0 0 78.592872 139.76625 0 0 0 0 82.017032 122.88241 0 0 0 0 76.203832 111.33972 0 0 0 0 65.222305 101.06913 0 0 0 0 50.450984 90.692117 0 0 0 0 32.461495 79.637049 0 0 0 0 11.525511 67.632254 0 0 0 0 + + 49.272663 179.44155 0 0 0 0 78.865849 140.2517 0 0 0 0 82.301901 123.30922 0 0 0 0 76.468511 111.72644 0 0 0 0 65.448842 101.42018 0 0 0 0 50.626216 91.007118 0 0 0 0 32.574243 79.913652 0 0 0 0 11.565543 67.867161 0 0 0 0 + + 49.437002 180.04004 0 0 0 0 79.128889 140.71948 0 0 0 0 82.576402 123.72049 0 0 0 0 76.723556 112.09908 0 0 0 0 65.667133 101.75844 0 0 0 0 50.795069 91.310653 0 0 0 0 32.682888 80.180188 0 0 0 0 11.604117 68.093518 0 0 0 0 + + 49.5949 180.61507 0 0 0 0 79.381621 141.16892 0 0 0 0 82.840145 124.11565 0 0 0 0 76.968605 112.45711 0 0 0 0 65.876869 102.08345 0 0 0 0 50.957304 91.602292 0 0 0 0 32.787274 80.436277 0 0 0 0 11.64118 68.311004 0 0 0 0 + + 49.746132 181.16583 0 0 0 0 79.623683 141.5994 0 0 0 0 83.092753 124.49412 0 0 0 0 77.203309 112.80003 0 0 0 0 66.07775 102.39474 0 0 0 0 51.112691 91.88162 0 0 0 0 32.887254 80.681555 0 0 0 0 11.676678 68.519308 0 0 0 0 + + 49.890483 181.69153 0 0 0 0 79.85473 142.01028 0 0 0 0 83.333867 124.85537 0 0 0 0 77.427333 113.12735 0 0 0 0 66.269491 102.69186 0 0 0 0 51.261007 92.148236 0 0 0 0 32.982685 80.915672 0 0 0 0 11.710561 68.718133 0 0 0 0 + + 50.027744 182.19141 0 0 0 0 80.074431 142.40099 0 0 0 0 83.563139 125.19888 0 0 0 0 77.640355 113.43859 0 0 0 0 66.451815 102.97439 0 0 0 0 51.402039 92.401759 0 0 0 0 33.073428 81.138292 0 0 0 0 11.742779 68.907194 0 0 0 0 + + 50.157719 182.66475 0 0 0 0 80.282469 142.77095 0 0 0 0 83.780241 125.52415 0 0 0 0 77.842069 113.73331 0 0 0 0 66.62446 103.24192 0 0 0 0 51.535584 92.641824 0 0 0 0 33.159355 81.349093 0 0 0 0 11.773288 69.086219 0 0 0 0 + + 50.280219 183.11087 0 0 0 0 80.478543 143.11964 0 0 0 0 83.984857 125.83072 0 0 0 0 78.032183 114.01108 0 0 0 0 66.787177 103.49407 0 0 0 0 51.661449 92.868083 0 0 0 0 33.24034 81.547772 0 0 0 0 11.802042 69.254948 0 0 0 0 + + 50.395068 183.52913 0 0 0 0 80.662369 143.44655 0 0 0 0 84.176693 126.11814 0 0 0 0 78.210422 114.2715 0 0 0 0 66.93973 103.73047 0 0 0 0 51.779453 93.08021 0 0 0 0 33.316267 81.734041 0 0 0 0 11.828999 69.413138 0 0 0 0 + + 50.502097 183.91891 0 0 0 0 80.833681 143.75121 0 0 0 0 84.355469 126.38599 0 0 0 0 78.376526 114.51419 0 0 0 0 67.081898 103.95078 0 0 0 0 51.889423 93.277895 0 0 0 0 33.387024 81.907629 0 0 0 0 11.854122 69.560559 0 0 0 0 + + 50.601153 184.27965 0 0 0 0 80.992229 144.03316 0 0 0 0 84.520925 126.63388 0 0 0 0 78.530255 114.7388 0 0 0 0 67.213473 104.15467 0 0 0 0 51.991199 93.460851 0 0 0 0 33.45251 82.068284 0 0 0 0 11.877373 69.696995 0 0 0 0 + + 50.692089 184.61082 0 0 0 0 81.137782 144.29201 0 0 0 0 84.672818 126.86146 0 0 0 0 78.671383 114.945 0 0 0 0 67.334264 104.34184 0 0 0 0 52.084633 93.628811 0 0 0 0 33.512628 82.21577 0 0 0 0 11.898718 69.822249 0 0 0 0 + + 50.774773 184.91194 0 0 0 0 81.270126 144.52736 0 0 0 0 84.810928 127.06838 0 0 0 0 78.799704 115.13249 0 0 0 0 67.444093 104.51204 0 0 0 0 52.169589 93.781529 0 0 0 0 33.56729 82.349872 0 0 0 0 11.918126 69.936136 0 0 0 0 + + 50.849083 185.18257 0 0 0 0 81.389067 144.73888 0 0 0 0 84.935052 127.25435 0 0 0 0 78.91503 115.30099 0 0 0 0 67.542799 104.66499 0 0 0 0 52.245941 93.918781 0 0 0 0 33.616417 82.470394 0 0 0 0 11.935568 70.03849 0 0 0 0 + + 50.914911 185.4223 0 0 0 0 81.494431 144.92626 0 0 0 0 85.045007 127.41909 0 0 0 0 79.017191 115.45026 0 0 0 0 67.630239 104.80049 0 0 0 0 52.313577 94.040366 0 0 0 0 33.659936 82.577158 0 0 0 0 11.95102 70.12916 0 0 0 0 + + 50.97216 185.63079 0 0 0 0 81.586063 145.08921 0 0 0 0 85.140631 127.56236 0 0 0 0 79.106038 115.58007 0 0 0 0 67.706282 104.91833 0 0 0 0 52.372398 94.146105 0 0 0 0 33.697783 82.670008 0 0 0 0 11.964458 70.208013 0 0 0 0 + + 51.020745 185.80773 0 0 0 0 81.663828 145.22751 0 0 0 0 85.221784 127.68395 0 0 0 0 79.181439 115.69023 0 0 0 0 67.770817 105.01833 0 0 0 0 52.422318 94.235842 0 0 0 0 33.729903 82.748806 0 0 0 0 11.975862 70.274933 0 0 0 0 + + 51.060594 185.95285 0 0 0 0 81.727612 145.34094 0 0 0 0 85.288346 127.78368 0 0 0 0 79.243283 115.78059 0 0 0 0 67.823749 105.10035 0 0 0 0 52.463262 94.309444 0 0 0 0 33.756247 82.813436 0 0 0 0 11.985215 70.329821 0 0 0 0 + + 51.09165 186.06595 0 0 0 0 81.777319 145.42933 0 0 0 0 85.340219 127.8614 0 0 0 0 79.291479 115.85101 0 0 0 0 67.865 105.16428 0 0 0 0 52.49517 94.366804 0 0 0 0 33.776778 82.863804 0 0 0 0 11.992505 70.372596 0 0 0 0 + + 51.113865 186.14685 0 0 0 0 81.812876 145.49257 0 0 0 0 85.377326 127.91699 0 0 0 0 79.325956 115.90138 0 0 0 0 67.894508 105.21 0 0 0 0 52.517996 94.407835 0 0 0 0 33.791465 82.899834 0 0 0 0 11.997719 70.403195 0 0 0 0 + + 51.127207 186.19544 0 0 0 0 81.834232 145.53054 0 0 0 0 85.399612 127.95038 0 0 0 0 79.346663 115.93164 0 0 0 0 67.912231 105.23747 0 0 0 0 52.531705 94.432479 0 0 0 0 33.800285 82.921473 0 0 0 0 12.000851 70.421572 0 0 0 0 + + 51.131657 186.21165 0 0 0 0 81.841354 145.54321 0 0 0 0 85.407044 127.96152 0 0 0 0 79.353568 115.94173 0 0 0 0 67.918141 105.24663 0 0 0 0 52.536277 94.440697 0 0 0 0 33.803227 82.92869 0 0 0 0 12.001896 70.427701 0 0 0 0 + + 51.127207 186.19544 0 0 0 0 81.834232 145.53054 0 0 0 0 85.399612 127.95038 0 0 0 0 79.346663 115.93164 0 0 0 0 67.912231 105.23747 0 0 0 0 52.531705 94.432479 0 0 0 0 33.800285 82.921473 0 0 0 0 12.000851 70.421572 0 0 0 0 + + 51.113865 186.14685 0 0 0 0 81.812876 145.49257 0 0 0 0 85.377326 127.91699 0 0 0 0 79.325956 115.90138 0 0 0 0 67.894508 105.21 0 0 0 0 52.517996 94.407835 0 0 0 0 33.791465 82.899834 0 0 0 0 11.997719 70.403195 0 0 0 0 + + 51.09165 186.06595 0 0 0 0 81.777319 145.42933 0 0 0 0 85.340219 127.8614 0 0 0 0 79.291479 115.85101 0 0 0 0 67.865 105.16428 0 0 0 0 52.49517 94.366804 0 0 0 0 33.776778 82.863804 0 0 0 0 11.992505 70.372596 0 0 0 0 + + 51.060594 185.95285 0 0 0 0 81.727612 145.34094 0 0 0 0 85.288346 127.78368 0 0 0 0 79.243283 115.78059 0 0 0 0 67.823749 105.10035 0 0 0 0 52.463262 94.309444 0 0 0 0 33.756247 82.813436 0 0 0 0 11.985215 70.329821 0 0 0 0 + + 51.020745 185.80773 0 0 0 0 81.663828 145.22751 0 0 0 0 85.221784 127.68395 0 0 0 0 79.181439 115.69023 0 0 0 0 67.770817 105.01833 0 0 0 0 52.422318 94.235842 0 0 0 0 33.729903 82.748806 0 0 0 0 11.975862 70.274933 0 0 0 0 + + 50.97216 185.63079 0 0 0 0 81.586063 145.08921 0 0 0 0 85.140631 127.56236 0 0 0 0 79.106038 115.58007 0 0 0 0 67.706282 104.91833 0 0 0 0 52.372398 94.146105 0 0 0 0 33.697783 82.670008 0 0 0 0 11.964458 70.208013 0 0 0 0 + + 50.914911 185.4223 0 0 0 0 81.494431 144.92626 0 0 0 0 85.045007 127.41909 0 0 0 0 79.017191 115.45026 0 0 0 0 67.630239 104.80049 0 0 0 0 52.313577 94.040366 0 0 0 0 33.659936 82.577158 0 0 0 0 11.95102 70.12916 0 0 0 0 + + 50.849083 185.18257 0 0 0 0 81.389067 144.73888 0 0 0 0 84.935052 127.25435 0 0 0 0 78.91503 115.30099 0 0 0 0 67.542799 104.66499 0 0 0 0 52.245941 93.918781 0 0 0 0 33.616417 82.470394 0 0 0 0 11.935568 70.03849 0 0 0 0 + + 50.774773 184.91194 0 0 0 0 81.270126 144.52736 0 0 0 0 84.810928 127.06838 0 0 0 0 78.799704 115.13249 0 0 0 0 67.444093 104.51204 0 0 0 0 52.169589 93.781529 0 0 0 0 33.56729 82.349872 0 0 0 0 11.918126 69.936136 0 0 0 0 + + 50.692089 184.61082 0 0 0 0 81.137782 144.29201 0 0 0 0 84.672818 126.86146 0 0 0 0 78.671383 114.945 0 0 0 0 67.334264 104.34184 0 0 0 0 52.084633 93.628811 0 0 0 0 33.512628 82.21577 0 0 0 0 11.898718 69.822249 0 0 0 0 + + 50.601153 184.27965 0 0 0 0 80.992229 144.03316 0 0 0 0 84.520925 126.63388 0 0 0 0 78.530255 114.7388 0 0 0 0 67.213473 104.15467 0 0 0 0 51.991199 93.460851 0 0 0 0 33.45251 82.068284 0 0 0 0 11.877373 69.696995 0 0 0 0 + + 50.502097 183.91891 0 0 0 0 80.833681 143.75121 0 0 0 0 84.355469 126.38599 0 0 0 0 78.376526 114.51419 0 0 0 0 67.081898 103.95078 0 0 0 0 51.889423 93.277895 0 0 0 0 33.387024 81.907629 0 0 0 0 11.854122 69.560559 0 0 0 0 + + 50.395068 183.52913 0 0 0 0 80.662369 143.44655 0 0 0 0 84.176693 126.11814 0 0 0 0 78.210422 114.2715 0 0 0 0 66.93973 103.73047 0 0 0 0 51.779453 93.08021 0 0 0 0 33.316267 81.734041 0 0 0 0 11.828999 69.413138 0 0 0 0 + + 50.280219 183.11087 0 0 0 0 80.478543 143.11964 0 0 0 0 83.984857 125.83072 0 0 0 0 78.032183 114.01108 0 0 0 0 66.787177 103.49407 0 0 0 0 51.661449 92.868083 0 0 0 0 33.24034 81.547772 0 0 0 0 11.802042 69.254948 0 0 0 0 + + 50.157719 182.66475 0 0 0 0 80.282469 142.77095 0 0 0 0 83.780241 125.52415 0 0 0 0 77.842069 113.73331 0 0 0 0 66.62446 103.24192 0 0 0 0 51.535584 92.641824 0 0 0 0 33.159355 81.349093 0 0 0 0 11.773288 69.086219 0 0 0 0 + + 50.027744 182.19141 0 0 0 0 80.074431 142.40099 0 0 0 0 83.563139 125.19888 0 0 0 0 77.640355 113.43859 0 0 0 0 66.451815 102.97439 0 0 0 0 51.402039 92.401759 0 0 0 0 33.073428 81.138292 0 0 0 0 11.742779 68.907194 0 0 0 0 + + 49.890483 181.69153 0 0 0 0 79.85473 142.01028 0 0 0 0 83.333867 124.85537 0 0 0 0 77.427333 113.12735 0 0 0 0 66.269491 102.69186 0 0 0 0 51.261007 92.148236 0 0 0 0 32.982685 80.915672 0 0 0 0 11.710561 68.718133 0 0 0 0 + + 49.746132 181.16583 0 0 0 0 79.623683 141.5994 0 0 0 0 83.092753 124.49412 0 0 0 0 77.203309 112.80003 0 0 0 0 66.07775 102.39474 0 0 0 0 51.112691 91.88162 0 0 0 0 32.887254 80.681555 0 0 0 0 11.676678 68.519308 0 0 0 0 + + 49.5949 180.61507 0 0 0 0 79.381621 141.16892 0 0 0 0 82.840145 124.11565 0 0 0 0 76.968605 112.45711 0 0 0 0 65.876869 102.08345 0 0 0 0 50.957304 91.602292 0 0 0 0 32.787274 80.436277 0 0 0 0 11.64118 68.311004 0 0 0 0 + + 49.437002 180.04004 0 0 0 0 79.128889 140.71948 0 0 0 0 82.576402 123.72049 0 0 0 0 76.723556 112.09908 0 0 0 0 65.667133 101.75844 0 0 0 0 50.795069 91.310653 0 0 0 0 32.682888 80.180188 0 0 0 0 11.604117 68.093518 0 0 0 0 + + 49.272663 179.44155 0 0 0 0 78.865849 140.2517 0 0 0 0 82.301901 123.30922 0 0 0 0 76.468511 111.72644 0 0 0 0 65.448842 101.42018 0 0 0 0 50.626216 91.007118 0 0 0 0 32.574243 79.913652 0 0 0 0 11.565543 67.867161 0 0 0 0 + + 49.102117 178.82045 0 0 0 0 78.592872 139.76625 0 0 0 0 82.017032 122.88241 0 0 0 0 76.203832 111.33972 0 0 0 0 65.222305 101.06913 0 0 0 0 50.450984 90.692117 0 0 0 0 32.461495 79.637049 0 0 0 0 11.525511 67.632254 0 0 0 0 + + 48.925604 178.17763 0 0 0 0 78.310346 139.26381 0 0 0 0 81.722196 122.44068 0 0 0 0 75.929894 110.93947 0 0 0 0 64.987843 100.70581 0 0 0 0 50.269622 90.366096 0 0 0 0 32.344802 79.350769 0 0 0 0 11.484079 67.389129 0 0 0 0 + + 48.743373 177.51398 0 0 0 0 78.018666 138.7451 0 0 0 0 81.417808 121.98463 0 0 0 0 75.647081 110.52626 0 0 0 0 64.745786 100.33071 0 0 0 0 50.082385 90.029513 0 0 0 0 32.224328 79.055214 0 0 0 0 11.441305 67.138128 0 0 0 0 + + 48.555679 176.83043 0 0 0 0 77.718242 138.21084 0 0 0 0 81.104296 121.5149 0 0 0 0 75.355789 110.10066 0 0 0 0 64.496472 99.944373 0 0 0 0 49.889535 89.682839 0 0 0 0 32.100243 78.750799 0 0 0 0 11.397248 66.879601 0 0 0 0 + + 48.362783 176.12794 0 0 0 0 77.409493 137.66178 0 0 0 0 80.782095 121.03216 0 0 0 0 75.056426 109.66327 0 0 0 0 64.240248 99.547326 0 0 0 0 49.69134 89.326559 0 0 0 0 31.97272 78.437948 0 0 0 0 11.351971 66.61391 0 0 0 0 + + 48.164953 175.40748 0 0 0 0 77.092847 137.09867 0 0 0 0 80.451653 120.53708 0 0 0 0 74.749404 109.21469 0 0 0 0 63.977471 99.140124 0 0 0 0 49.488076 88.961165 0 0 0 0 31.841934 78.117095 0 0 0 0 11.305535 66.341424 0 0 0 0 + + 47.962462 174.67005 0 0 0 0 76.76874 136.52229 0 0 0 0 80.113425 120.03033 0 0 0 0 74.43515 108.75554 0 0 0 0 63.708503 98.723328 0 0 0 0 49.280022 88.587163 0 0 0 0 31.708067 77.788682 0 0 0 0 11.258005 66.062517 0 0 0 0 + + 47.755589 173.91666 0 0 0 0 76.437618 135.93343 0 0 0 0 79.767877 119.51261 0 0 0 0 74.114093 108.28645 0 0 0 0 63.433713 98.297511 0 0 0 0 49.067466 88.205065 0 0 0 0 31.571302 77.453161 0 0 0 0 11.209447 65.777574 0 0 0 0 + + 47.544614 173.14833 0 0 0 0 76.099933 135.33291 0 0 0 0 79.415479 118.98463 0 0 0 0 73.786672 107.80806 0 0 0 0 63.153476 97.863253 0 0 0 0 48.850696 87.815393 0 0 0 0 31.431827 77.110989 0 0 0 0 11.159926 65.486982 0 0 0 0 + + 47.329826 172.36611 0 0 0 0 75.756142 134.72153 0 0 0 0 79.05671 118.4471 0 0 0 0 73.453332 107.32103 0 0 0 0 62.868172 97.421144 0 0 0 0 48.630007 87.418677 0 0 0 0 31.28983 76.762631 0 0 0 0 11.10951 65.191137 0 0 0 0 + + 47.111513 171.57106 0 0 0 0 75.406711 134.10011 0 0 0 0 78.692055 117.90075 0 0 0 0 73.114523 106.826 0 0 0 0 62.578188 96.971781 0 0 0 0 48.405697 87.015451 0 0 0 0 31.145503 76.408557 0 0 0 0 11.058266 64.890437 0 0 0 0 + + 46.889969 170.76424 0 0 0 0 75.052107 133.4695 0 0 0 0 78.322002 117.34632 0 0 0 0 72.770699 106.32364 0 0 0 0 62.283911 96.515767 0 0 0 0 48.178067 86.606257 0 0 0 0 30.99904 76.049242 0 0 0 0 11.006264 64.585287 0 0 0 0 + + 46.665489 169.94672 0 0 0 0 74.692805 132.83053 0 0 0 0 77.947045 116.78454 0 0 0 0 72.422318 105.81463 0 0 0 0 61.985735 96.05371 0 0 0 0 47.947421 86.19164 0 0 0 0 30.850636 75.685166 0 0 0 0 10.953573 64.276093 0 0 0 0 + + 46.438371 169.1196 0 0 0 0 74.329279 132.18405 0 0 0 0 77.567681 116.21615 0 0 0 0 72.069842 105.29964 0 0 0 0 61.684053 95.586221 0 0 0 0 47.714063 85.77215 0 0 0 0 30.700488 75.31681 0 0 0 0 10.900262 63.963265 0 0 0 0 + + 46.208913 168.28396 0 0 0 0 73.962008 131.53091 0 0 0 0 77.184409 115.64191 0 0 0 0 71.713736 104.77934 0 0 0 0 61.379264 95.113917 0 0 0 0 47.478302 85.348339 0 0 0 0 30.548792 74.94466 0 0 0 0 10.846403 63.647214 0 0 0 0 + + 45.977415 167.44089 0 0 0 0 73.591473 130.87197 0 0 0 0 76.79773 115.06257 0 0 0 0 71.354464 104.25442 0 0 0 0 61.071766 94.637415 0 0 0 0 47.240445 84.92076 0 0 0 0 30.395749 74.569202 0 0 0 0 10.792065 63.328354 0 0 0 0 + + 45.744179 166.59149 0 0 0 0 73.218155 130.20808 0 0 0 0 76.408147 114.47888 0 0 0 0 70.992494 103.72555 0 0 0 0 60.761959 94.157334 0 0 0 0 47.000801 84.48997 0 0 0 0 30.241556 74.190924 0 0 0 0 10.737318 63.007099 0 0 0 0 + + 45.509504 165.73685 0 0 0 0 72.842534 129.54009 0 0 0 0 76.016161 113.89158 0 0 0 0 70.628292 103.19342 0 0 0 0 60.450241 93.674293 0 0 0 0 46.75968 84.056524 0 0 0 0 30.086412 73.810313 0 0 0 0 10.682234 62.683863 0 0 0 0 + + 45.273692 164.87807 0 0 0 0 72.465093 128.86886 0 0 0 0 75.622276 113.30144 0 0 0 0 70.262324 102.65871 0 0 0 0 60.137011 93.18891 0 0 0 0 46.51739 83.620977 0 0 0 0 29.930516 73.427857 0 0 0 0 10.626883 62.35906 0 0 0 0 + + 45.037042 164.01623 0 0 0 0 72.086311 128.19525 0 0 0 0 75.226991 112.7092 0 0 0 0 69.895056 102.12211 0 0 0 0 59.822669 92.701802 0 0 0 0 46.274239 83.183882 0 0 0 0 29.774067 73.044043 0 0 0 0 10.571335 62.033103 0 0 0 0 + + 44.799853 163.15244 0 0 0 0 71.706666 127.52011 0 0 0 0 74.830805 112.11562 0 0 0 0 69.526951 101.58428 0 0 0 0 59.507611 92.213585 0 0 0 0 46.030534 82.745791 0 0 0 0 29.617261 72.659354 0 0 0 0 10.515661 61.706404 0 0 0 0 + + 44.562422 162.28776 0 0 0 0 71.326633 126.84427 0 0 0 0 74.434215 111.52142 0 0 0 0 69.15847 101.0459 0 0 0 0 59.192231 91.724869 0 0 0 0 45.78658 82.307252 0 0 0 0 29.460294 72.274272 0 0 0 0 10.45993 61.37937 0 0 0 0 + + 44.325043 161.42327 0 0 0 0 70.946685 126.16859 0 0 0 0 74.037713 110.92736 0 0 0 0 68.790072 100.50764 0 0 0 0 58.876922 91.236262 0 0 0 0 45.542681 81.868812 0 0 0 0 29.303363 71.889276 0 0 0 0 10.404211 61.05241 0 0 0 0 + + 44.08801 160.56004 0 0 0 0 70.56729 125.49389 0 0 0 0 73.641788 110.33417 0 0 0 0 68.422209 99.970164 0 0 0 0 58.562071 90.748366 0 0 0 0 45.299136 81.431009 0 0 0 0 29.14666 71.50484 0 0 0 0 10.348573 60.725926 0 0 0 0 + + 43.851612 159.69913 0 0 0 0 70.188912 124.821 0 0 0 0 73.246925 109.74256 0 0 0 0 68.055333 99.434129 0 0 0 0 58.248064 90.261778 0 0 0 0 45.056245 80.994381 0 0 0 0 28.990377 71.121435 0 0 0 0 10.293085 60.400316 0 0 0 0 + + 43.616137 158.84157 0 0 0 0 69.81201 124.15073 0 0 0 0 72.853602 109.15326 0 0 0 0 67.689888 98.900186 0 0 0 0 57.935283 89.777089 0 0 0 0 44.814301 80.559456 0 0 0 0 28.834704 70.739526 0 0 0 0 10.237813 60.075978 0 0 0 0 + + 43.381868 157.98841 0 0 0 0 69.437038 123.4839 0 0 0 0 72.462293 108.56698 0 0 0 0 67.326315 98.368977 0 0 0 0 57.624103 89.294881 0 0 0 0 44.573596 80.126757 0 0 0 0 28.679828 70.359572 0 0 0 0 10.182824 59.7533 0 0 0 0 + + 43.149084 157.14065 0 0 0 0 69.064444 122.82129 0 0 0 0 72.073466 107.98442 0 0 0 0 66.965046 97.841135 0 0 0 0 57.314896 88.815731 0 0 0 0 44.334417 79.696803 0 0 0 0 28.525934 69.982027 0 0 0 0 10.128183 59.432668 0 0 0 0 + + 42.918061 156.29931 0 0 0 0 68.694668 122.1637 0 0 0 0 71.68758 107.40626 0 0 0 0 66.606511 97.317287 0 0 0 0 57.008028 88.340206 0 0 0 0 44.097048 79.270101 0 0 0 0 28.373204 69.607339 0 0 0 0 10.073956 59.114461 0 0 0 0 + + 42.68907 155.46537 0 0 0 0 68.328145 121.51189 0 0 0 0 71.305088 106.83319 0 0 0 0 66.251129 96.798047 0 0 0 0 56.703859 87.868863 0 0 0 0 43.861766 78.847152 0 0 0 0 28.221818 69.235946 0 0 0 0 10.020206 58.799054 0 0 0 0 + + 42.462377 154.6398 0 0 0 0 67.965301 120.86662 0 0 0 0 70.926435 106.26588 0 0 0 0 65.899315 96.284019 0 0 0 0 56.402744 87.402252 0 0 0 0 43.628846 78.428449 0 0 0 0 28.071951 68.868282 0 0 0 0 9.966996 58.486812 0 0 0 0 + + 42.238245 153.82355 0 0 0 0 67.606556 120.22865 0 0 0 0 70.55206 105.70497 0 0 0 0 65.551474 95.775797 0 0 0 0 56.10503 86.940911 0 0 0 0 43.398557 78.014475 0 0 0 0 27.923777 68.50477 0 0 0 0 9.9143866 58.178097 0 0 0 0 + + 42.01693 153.01757 0 0 0 0 67.252318 119.59868 0 0 0 0 70.182389 105.1511 0 0 0 0 65.208005 95.273961 0 0 0 0 55.811057 86.485367 0 0 0 0 43.171162 77.605703 0 0 0 0 27.777465 68.145826 0 0 0 0 9.8624382 57.873262 0 0 0 0 + + 41.798682 152.22275 0 0 0 0 66.902991 118.97746 0 0 0 0 69.817842 104.60492 0 0 0 0 64.869297 94.779082 0 0 0 0 55.521159 86.036138 0 0 0 0 42.946919 77.202598 0 0 0 0 27.633181 67.791858 0 0 0 0 9.81121 57.572653 0 0 0 0 + + 41.583748 151.44 0 0 0 0 66.558967 118.36566 0 0 0 0 69.458829 104.06703 0 0 0 0 64.53573 94.291716 0 0 0 0 55.235662 85.593729 0 0 0 0 42.726081 76.805612 0 0 0 0 27.491088 67.443263 0 0 0 0 9.7607595 57.276606 0 0 0 0 + + 41.372367 150.67019 0 0 0 0 66.22063 117.76397 0 0 0 0 69.105751 103.53803 0 0 0 0 64.207677 93.812405 0 0 0 0 54.954884 85.158633 0 0 0 0 42.508892 76.415188 0 0 0 0 27.351343 67.10043 0 0 0 0 9.7111429 56.985454 0 0 0 0 + + 41.164771 149.91417 0 0 0 0 65.888353 117.17307 0 0 0 0 68.758998 103.0185 0 0 0 0 63.885501 93.34168 0 0 0 0 54.679135 84.73133 0 0 0 0 42.295594 76.031757 0 0 0 0 27.214102 66.763739 0 0 0 0 9.662415 56.699516 0 0 0 0 + + 40.96119 149.17276 0 0 0 0 65.5625 116.59358 0 0 0 0 68.418948 102.50902 0 0 0 0 63.569553 92.880057 0 0 0 0 54.408718 84.312289 0 0 0 0 42.086421 75.65574 0 0 0 0 27.079514 66.433557 0 0 0 0 9.6146293 56.419107 0 0 0 0 + + 40.761844 148.44678 0 0 0 0 65.243426 116.02616 0 0 0 0 68.085973 102.01014 0 0 0 0 63.260179 92.428036 0 0 0 0 54.143926 83.901966 0 0 0 0 41.881598 75.287546 0 0 0 0 26.947725 66.110244 0 0 0 0 9.5678377 56.144532 0 0 0 0 + + 40.566947 147.73701 0 0 0 0 64.931474 115.47139 0 0 0 0 67.76043 101.52239 0 0 0 0 62.957709 91.986105 0 0 0 0 53.885045 83.500801 0 0 0 0 41.681347 74.927569 0 0 0 0 26.818879 65.794148 0 0 0 0 9.5220904 55.876085 0 0 0 0 + + 40.376708 147.04419 0 0 0 0 64.626978 114.92989 0 0 0 0 67.442667 101.0463 0 0 0 0 62.662469 91.554735 0 0 0 0 53.632351 83.109223 0 0 0 0 41.485882 74.576196 0 0 0 0 26.693112 65.485605 0 0 0 0 9.4774365 55.614054 0 0 0 0 + + 40.191328 146.36908 0 0 0 0 64.330258 114.40222 0 0 0 0 67.13302 100.58237 0 0 0 0 62.374769 91.134383 0 0 0 0 53.386111 82.727647 0 0 0 0 41.29541 74.233797 0 0 0 0 26.570556 65.184944 0 0 0 0 9.4339231 55.358715 0 0 0 0 + + 40.011001 145.71236 0 0 0 0 64.041628 113.88893 0 0 0 0 66.831814 100.13109 0 0 0 0 62.094912 90.725491 0 0 0 0 53.146583 82.356473 0 0 0 0 41.11013 73.900733 0 0 0 0 26.451342 64.892479 0 0 0 0 9.391596 55.110337 0 0 0 0 + + 39.835917 145.07474 0 0 0 0 63.761387 113.39056 0 0 0 0 66.539364 99.692924 0 0 0 0 61.82319 90.328484 0 0 0 0 52.914018 81.996088 0 0 0 0 40.930235 73.577349 0 0 0 0 26.335594 64.608515 0 0 0 0 9.3504991 54.869179 0 0 0 0 + + 39.666254 144.45686 0 0 0 0 63.489825 112.90763 0 0 0 0 66.25597 99.268328 0 0 0 0 61.559883 89.943771 0 0 0 0 52.688655 81.646863 0 0 0 0 40.755912 73.26398 0 0 0 0 26.223429 64.333344 0 0 0 0 9.310675 54.635489 0 0 0 0 + + 39.502187 143.85936 0 0 0 0 63.22722 112.44062 0 0 0 0 65.981924 98.857736 0 0 0 0 61.30526 89.571748 0 0 0 0 52.470726 81.309157 0 0 0 0 40.587338 72.960947 0 0 0 0 26.114964 64.06725 0 0 0 0 9.2721644 54.409507 0 0 0 0 + + 39.343883 143.28285 0 0 0 0 62.973838 111.99002 0 0 0 0 65.717503 98.461566 0 0 0 0 61.059581 89.212791 0 0 0 0 52.260451 80.983313 0 0 0 0 40.424685 72.668558 0 0 0 0 26.010309 63.810502 0 0 0 0 9.2350064 54.191462 0 0 0 0 + + 39.191501 142.7279 0 0 0 0 62.729936 111.55627 0 0 0 0 65.462974 98.080217 0 0 0 0 60.823092 88.867264 0 0 0 0 52.058042 80.669659 0 0 0 0 40.268117 72.387107 0 0 0 0 25.90957 63.56336 0 0 0 0 9.1992386 53.981575 0 0 0 0 + + 39.045194 142.19508 0 0 0 0 62.495757 111.13982 0 0 0 0 65.218592 97.714071 0 0 0 0 60.596032 88.53551 0 0 0 0 51.863702 80.368508 0 0 0 0 40.117791 72.116877 0 0 0 0 25.812846 63.326069 0 0 0 0 9.1648966 53.780054 0 0 0 0 + + 38.905107 141.68491 0 0 0 0 62.271534 110.74107 0 0 0 0 64.9846 97.363491 0 0 0 0 60.378624 88.217861 0 0 0 0 51.677625 80.080161 0 0 0 0 39.973856 71.858135 0 0 0 0 25.720234 63.098867 0 0 0 0 9.1320146 53.587101 0 0 0 0 + + 38.771379 141.19789 0 0 0 0 62.057487 110.36042 0 0 0 0 64.761228 97.028823 0 0 0 0 60.171085 87.914629 0 0 0 0 51.499993 79.804901 0 0 0 0 39.836454 71.611136 0 0 0 0 25.631826 62.881977 0 0 0 0 9.1006251 53.402906 0 0 0 0 + + 38.644139 140.73451 0 0 0 0 61.853827 109.99824 0 0 0 0 64.548695 96.710394 0 0 0 0 59.973616 87.626112 0 0 0 0 51.330981 79.542997 0 0 0 0 39.705719 71.376123 0 0 0 0 25.547707 62.675611 0 0 0 0 9.0707587 53.227649 0 0 0 0 + + 38.523512 140.29521 0 0 0 0 61.660752 109.65488 0 0 0 0 64.347208 96.408515 0 0 0 0 59.786409 87.352589 0 0 0 0 51.170753 79.294706 0 0 0 0 39.581778 71.153325 0 0 0 0 25.467961 62.479971 0 0 0 0 9.0424446 53.0615 0 0 0 0 + + 38.409615 139.88042 0 0 0 0 61.478448 109.33068 0 0 0 0 64.156961 96.123477 0 0 0 0 59.609647 87.094326 0 0 0 0 51.019463 79.060266 0 0 0 0 39.464752 70.942955 0 0 0 0 25.392663 62.295245 0 0 0 0 9.01571 52.90462 0 0 0 0 + + 38.302557 139.49053 0 0 0 0 61.307091 109.02594 0 0 0 0 63.978138 95.855554 0 0 0 0 59.443498 86.851569 0 0 0 0 50.877257 78.839903 0 0 0 0 39.354753 70.745217 0 0 0 0 25.321887 62.121611 0 0 0 0 8.9905807 52.75716 0 0 0 0 + + 38.20244 139.12593 0 0 0 0 61.146843 108.74096 0 0 0 0 63.810908 95.605002 0 0 0 0 59.288122 86.624552 0 0 0 0 50.744272 78.633827 0 0 0 0 39.251885 70.5603 0 0 0 0 25.255699 61.959234 0 0 0 0 8.9670807 52.619261 0 0 0 0 + + 38.109358 138.78694 0 0 0 0 60.997857 108.47602 0 0 0 0 63.655432 95.372059 0 0 0 0 59.143665 86.41349 0 0 0 0 50.620632 78.442234 0 0 0 0 39.156247 70.388378 0 0 0 0 25.194163 61.808269 0 0 0 0 8.9452322 52.491053 0 0 0 0 + + 38.023402 138.47391 0 0 0 0 60.860275 108.23134 0 0 0 0 63.511855 95.156944 0 0 0 0 59.010265 86.218581 0 0 0 0 50.506456 78.265305 0 0 0 0 39.067929 70.229615 0 0 0 0 25.137337 61.668858 0 0 0 0 8.9250559 52.372658 0 0 0 0 + + 37.94465 138.18711 0 0 0 0 60.734224 108.00718 0 0 0 0 63.380312 94.95986 0 0 0 0 58.888046 86.04001 0 0 0 0 50.40185 78.103206 0 0 0 0 38.987014 70.084159 0 0 0 0 25.085274 61.541133 0 0 0 0 8.9065708 52.264186 0 0 0 0 + + 37.873176 137.92681 0 0 0 0 60.619824 107.80374 0 0 0 0 63.260928 94.780991 0 0 0 0 58.777123 85.877943 0 0 0 0 50.306911 77.956089 0 0 0 0 38.913577 69.952147 0 0 0 0 25.038022 61.425213 0 0 0 0 8.8897942 52.16574 0 0 0 0 + + 37.809048 137.69327 0 0 0 0 60.51718 107.6212 0 0 0 0 63.153812 94.620504 0 0 0 0 58.677599 85.732531 0 0 0 0 50.22173 77.824091 0 0 0 0 38.847687 69.833701 0 0 0 0 24.995627 61.321205 0 0 0 0 8.8747417 52.077411 0 0 0 0 + + 37.752324 137.48669 0 0 0 0 60.426388 107.45974 0 0 0 0 63.059065 94.478549 0 0 0 0 58.589567 85.60391 0 0 0 0 50.146384 77.707334 0 0 0 0 38.789405 69.728932 0 0 0 0 24.958127 61.229207 0 0 0 0 8.8614272 51.999281 0 0 0 0 + + 37.703058 137.30728 0 0 0 0 60.347533 107.3195 0 0 0 0 62.976773 94.355255 0 0 0 0 58.513109 85.492198 0 0 0 0 50.080944 77.605927 0 0 0 0 38.738785 69.637937 0 0 0 0 24.925557 61.149304 0 0 0 0 8.8498631 51.931423 0 0 0 0 + + 37.661294 137.15518 0 0 0 0 60.280686 107.20063 0 0 0 0 62.907014 94.250738 0 0 0 0 58.448294 85.397498 0 0 0 0 50.025469 77.519963 0 0 0 0 38.695874 69.560799 0 0 0 0 24.897947 61.081569 0 0 0 0 8.8400601 51.873898 0 0 0 0 + + 37.627072 137.03055 0 0 0 0 60.225909 107.10321 0 0 0 0 62.84985 94.165093 0 0 0 0 58.395182 85.319898 0 0 0 0 49.980011 77.449521 0 0 0 0 38.660712 69.497589 0 0 0 0 24.875322 61.026064 0 0 0 0 8.8320272 51.826761 0 0 0 0 + + 37.600421 136.93349 0 0 0 0 60.183252 107.02736 0 0 0 0 62.805336 94.098398 0 0 0 0 58.353822 85.259468 0 0 0 0 49.944612 77.394666 0 0 0 0 38.633329 69.448366 0 0 0 0 24.857704 60.982841 0 0 0 0 8.8257718 51.790053 0 0 0 0 + + 37.581368 136.8641 0 0 0 0 60.152756 106.97312 0 0 0 0 62.77351 94.050716 0 0 0 0 58.324253 85.216264 0 0 0 0 49.919303 77.355448 0 0 0 0 38.613753 69.413175 0 0 0 0 24.845108 60.951939 0 0 0 0 8.8212995 51.76381 0 0 0 0 + + 37.569929 136.82245 0 0 0 0 60.134447 106.94056 0 0 0 0 62.754403 94.022089 0 0 0 0 58.3065 85.190326 0 0 0 0 49.904109 77.331902 0 0 0 0 38.602 69.392047 0 0 0 0 24.837545 60.933387 0 0 0 0 8.8186145 51.748054 0 0 0 0 + + 37.566115 136.80856 0 0 0 0 60.128342 106.92971 0 0 0 0 62.748033 94.012544 0 0 0 0 58.300581 85.181678 0 0 0 0 49.899043 77.324052 0 0 0 0 38.598081 69.385002 0 0 0 0 24.835024 60.927201 0 0 0 0 8.8177192 51.742801 0 0 0 0 + + 37.569929 136.82245 0 0 0 0 60.134447 106.94056 0 0 0 0 62.754403 94.022089 0 0 0 0 58.3065 85.190326 0 0 0 0 49.904109 77.331902 0 0 0 0 38.602 69.392047 0 0 0 0 24.837545 60.933387 0 0 0 0 8.8186145 51.748054 0 0 0 0 + + 37.581368 136.8641 0 0 0 0 60.152756 106.97312 0 0 0 0 62.77351 94.050716 0 0 0 0 58.324253 85.216264 0 0 0 0 49.919303 77.355448 0 0 0 0 38.613753 69.413175 0 0 0 0 24.845108 60.951939 0 0 0 0 8.8212995 51.76381 0 0 0 0 + + 37.600421 136.93349 0 0 0 0 60.183252 107.02736 0 0 0 0 62.805336 94.098398 0 0 0 0 58.353822 85.259468 0 0 0 0 49.944612 77.394666 0 0 0 0 38.633329 69.448366 0 0 0 0 24.857704 60.982841 0 0 0 0 8.8257718 51.790053 0 0 0 0 + + 37.627072 137.03055 0 0 0 0 60.225909 107.10321 0 0 0 0 62.84985 94.165093 0 0 0 0 58.395182 85.319898 0 0 0 0 49.980011 77.449521 0 0 0 0 38.660712 69.497589 0 0 0 0 24.875322 61.026064 0 0 0 0 8.8320272 51.826761 0 0 0 0 + + 37.661294 137.15518 0 0 0 0 60.280686 107.20063 0 0 0 0 62.907014 94.250738 0 0 0 0 58.448294 85.397498 0 0 0 0 50.025469 77.519963 0 0 0 0 38.695874 69.560799 0 0 0 0 24.897947 61.081569 0 0 0 0 8.8400601 51.873898 0 0 0 0 + + 37.703058 137.30728 0 0 0 0 60.347533 107.3195 0 0 0 0 62.976773 94.355255 0 0 0 0 58.513109 85.492198 0 0 0 0 50.080944 77.605927 0 0 0 0 38.738785 69.637937 0 0 0 0 24.925557 61.149304 0 0 0 0 8.8498631 51.931423 0 0 0 0 + + 37.752324 137.48669 0 0 0 0 60.426388 107.45974 0 0 0 0 63.059065 94.478549 0 0 0 0 58.589567 85.60391 0 0 0 0 50.146384 77.707334 0 0 0 0 38.789405 69.728932 0 0 0 0 24.958127 61.229207 0 0 0 0 8.8614272 51.999281 0 0 0 0 + + 37.809048 137.69327 0 0 0 0 60.51718 107.6212 0 0 0 0 63.153812 94.620504 0 0 0 0 58.677599 85.732531 0 0 0 0 50.22173 77.824091 0 0 0 0 38.847687 69.833701 0 0 0 0 24.995627 61.321205 0 0 0 0 8.8747417 52.077411 0 0 0 0 + + 37.873176 137.92681 0 0 0 0 60.619824 107.80374 0 0 0 0 63.260928 94.780991 0 0 0 0 58.777123 85.877943 0 0 0 0 50.306911 77.956089 0 0 0 0 38.913577 69.952147 0 0 0 0 25.038022 61.425213 0 0 0 0 8.8897942 52.16574 0 0 0 0 + + 37.94465 138.18711 0 0 0 0 60.734224 108.00718 0 0 0 0 63.380312 94.95986 0 0 0 0 58.888046 86.04001 0 0 0 0 50.40185 78.103206 0 0 0 0 38.987014 70.084159 0 0 0 0 25.085274 61.541133 0 0 0 0 8.9065708 52.264186 0 0 0 0 + + 38.023402 138.47391 0 0 0 0 60.860275 108.23134 0 0 0 0 63.511855 95.156944 0 0 0 0 59.010265 86.218581 0 0 0 0 50.506456 78.265305 0 0 0 0 39.067929 70.229615 0 0 0 0 25.137337 61.668858 0 0 0 0 8.9250559 52.372658 0 0 0 0 + + 38.109358 138.78694 0 0 0 0 60.997857 108.47602 0 0 0 0 63.655432 95.372059 0 0 0 0 59.143665 86.41349 0 0 0 0 50.620632 78.442234 0 0 0 0 39.156247 70.388378 0 0 0 0 25.194163 61.808269 0 0 0 0 8.9452322 52.491053 0 0 0 0 + + 38.20244 139.12593 0 0 0 0 61.146843 108.74096 0 0 0 0 63.810908 95.605002 0 0 0 0 59.288122 86.624552 0 0 0 0 50.744272 78.633827 0 0 0 0 39.251885 70.5603 0 0 0 0 25.255699 61.959234 0 0 0 0 8.9670807 52.619261 0 0 0 0 + + 38.302557 139.49053 0 0 0 0 61.307091 109.02594 0 0 0 0 63.978138 95.855554 0 0 0 0 59.443498 86.851569 0 0 0 0 50.877257 78.839903 0 0 0 0 39.354753 70.745217 0 0 0 0 25.321887 62.121611 0 0 0 0 8.9905807 52.75716 0 0 0 0 + + 38.409615 139.88042 0 0 0 0 61.478448 109.33068 0 0 0 0 64.156961 96.123477 0 0 0 0 59.609647 87.094326 0 0 0 0 51.019463 79.060266 0 0 0 0 39.464752 70.942955 0 0 0 0 25.392663 62.295245 0 0 0 0 9.01571 52.90462 0 0 0 0 + + 38.523512 140.29521 0 0 0 0 61.660752 109.65488 0 0 0 0 64.347208 96.408515 0 0 0 0 59.786409 87.352589 0 0 0 0 51.170753 79.294706 0 0 0 0 39.581778 71.153325 0 0 0 0 25.467961 62.479971 0 0 0 0 9.0424446 53.0615 0 0 0 0 + + 38.644139 140.73451 0 0 0 0 61.853827 109.99824 0 0 0 0 64.548695 96.710394 0 0 0 0 59.973616 87.626112 0 0 0 0 51.330981 79.542997 0 0 0 0 39.705719 71.376123 0 0 0 0 25.547707 62.675611 0 0 0 0 9.0707587 53.227649 0 0 0 0 + + 38.771379 141.19789 0 0 0 0 62.057487 110.36042 0 0 0 0 64.761228 97.028823 0 0 0 0 60.171085 87.914629 0 0 0 0 51.499993 79.804901 0 0 0 0 39.836454 71.611136 0 0 0 0 25.631826 62.881977 0 0 0 0 9.1006251 53.402906 0 0 0 0 + + 38.905107 141.68491 0 0 0 0 62.271534 110.74107 0 0 0 0 64.9846 97.363491 0 0 0 0 60.378624 88.217861 0 0 0 0 51.677625 80.080161 0 0 0 0 39.973856 71.858135 0 0 0 0 25.720234 63.098867 0 0 0 0 9.1320146 53.587101 0 0 0 0 + + 39.045194 142.19508 0 0 0 0 62.495757 111.13982 0 0 0 0 65.218592 97.714071 0 0 0 0 60.596032 88.53551 0 0 0 0 51.863702 80.368508 0 0 0 0 40.117791 72.116877 0 0 0 0 25.812846 63.326069 0 0 0 0 9.1648966 53.780054 0 0 0 0 + + 39.191501 142.7279 0 0 0 0 62.729936 111.55627 0 0 0 0 65.462974 98.080217 0 0 0 0 60.823092 88.867264 0 0 0 0 52.058042 80.669659 0 0 0 0 40.268117 72.387107 0 0 0 0 25.90957 63.56336 0 0 0 0 9.1992386 53.981575 0 0 0 0 + + 39.343883 143.28285 0 0 0 0 62.973838 111.99002 0 0 0 0 65.717503 98.461566 0 0 0 0 61.059581 89.212791 0 0 0 0 52.260451 80.983313 0 0 0 0 40.424685 72.668558 0 0 0 0 26.010309 63.810502 0 0 0 0 9.2350064 54.191462 0 0 0 0 + + 39.502187 143.85936 0 0 0 0 63.22722 112.44062 0 0 0 0 65.981924 98.857736 0 0 0 0 61.30526 89.571748 0 0 0 0 52.470726 81.309157 0 0 0 0 40.587338 72.960947 0 0 0 0 26.114964 64.06725 0 0 0 0 9.2721644 54.409507 0 0 0 0 + + 39.666254 144.45686 0 0 0 0 63.489825 112.90763 0 0 0 0 66.25597 99.268328 0 0 0 0 61.559883 89.943771 0 0 0 0 52.688655 81.646863 0 0 0 0 40.755912 73.26398 0 0 0 0 26.223429 64.333344 0 0 0 0 9.310675 54.635489 0 0 0 0 + + 39.835917 145.07474 0 0 0 0 63.761387 113.39056 0 0 0 0 66.539364 99.692924 0 0 0 0 61.82319 90.328484 0 0 0 0 52.914018 81.996088 0 0 0 0 40.930235 73.577349 0 0 0 0 26.335594 64.608515 0 0 0 0 9.3504991 54.869179 0 0 0 0 + + 40.011001 145.71236 0 0 0 0 64.041628 113.88893 0 0 0 0 66.831814 100.13109 0 0 0 0 62.094912 90.725491 0 0 0 0 53.146583 82.356473 0 0 0 0 41.11013 73.900733 0 0 0 0 26.451342 64.892479 0 0 0 0 9.391596 55.110337 0 0 0 0 + + 40.191328 146.36908 0 0 0 0 64.330258 114.40222 0 0 0 0 67.13302 100.58237 0 0 0 0 62.374769 91.134383 0 0 0 0 53.386111 82.727647 0 0 0 0 41.29541 74.233797 0 0 0 0 26.570556 65.184944 0 0 0 0 9.4339231 55.358715 0 0 0 0 + + 40.376708 147.04419 0 0 0 0 64.626978 114.92989 0 0 0 0 67.442667 101.0463 0 0 0 0 62.662469 91.554735 0 0 0 0 53.632351 83.109223 0 0 0 0 41.485882 74.576196 0 0 0 0 26.693112 65.485605 0 0 0 0 9.4774365 55.614054 0 0 0 0 + + 40.566947 147.73701 0 0 0 0 64.931474 115.47139 0 0 0 0 67.76043 101.52239 0 0 0 0 62.957709 91.986105 0 0 0 0 53.885045 83.500801 0 0 0 0 41.681347 74.927569 0 0 0 0 26.818879 65.794148 0 0 0 0 9.5220904 55.876085 0 0 0 0 + + 40.761844 148.44678 0 0 0 0 65.243426 116.02616 0 0 0 0 68.085973 102.01014 0 0 0 0 63.260179 92.428036 0 0 0 0 54.143926 83.901966 0 0 0 0 41.881598 75.287546 0 0 0 0 26.947725 66.110244 0 0 0 0 9.5678377 56.144532 0 0 0 0 + + 40.96119 149.17276 0 0 0 0 65.5625 116.59358 0 0 0 0 68.418948 102.50902 0 0 0 0 63.569553 92.880057 0 0 0 0 54.408718 84.312289 0 0 0 0 42.086421 75.65574 0 0 0 0 27.079514 66.433557 0 0 0 0 9.6146293 56.419107 0 0 0 0 + + 41.164771 149.91417 0 0 0 0 65.888353 117.17307 0 0 0 0 68.758998 103.0185 0 0 0 0 63.885501 93.34168 0 0 0 0 54.679135 84.73133 0 0 0 0 42.295594 76.031757 0 0 0 0 27.214102 66.763739 0 0 0 0 9.662415 56.699516 0 0 0 0 + + 41.372367 150.67019 0 0 0 0 66.22063 117.76397 0 0 0 0 69.105751 103.53803 0 0 0 0 64.207677 93.812405 0 0 0 0 54.954884 85.158633 0 0 0 0 42.508892 76.415188 0 0 0 0 27.351343 67.10043 0 0 0 0 9.7111429 56.985454 0 0 0 0 + + 41.583748 151.44 0 0 0 0 66.558967 118.36566 0 0 0 0 69.458829 104.06703 0 0 0 0 64.53573 94.291716 0 0 0 0 55.235662 85.593729 0 0 0 0 42.726081 76.805612 0 0 0 0 27.491088 67.443263 0 0 0 0 9.7607595 57.276606 0 0 0 0 + + 41.798682 152.22275 0 0 0 0 66.902991 118.97746 0 0 0 0 69.817842 104.60492 0 0 0 0 64.869297 94.779082 0 0 0 0 55.521159 86.036138 0 0 0 0 42.946919 77.202598 0 0 0 0 27.633181 67.791858 0 0 0 0 9.81121 57.572653 0 0 0 0 + + 42.01693 153.01757 0 0 0 0 67.252318 119.59868 0 0 0 0 70.182389 105.1511 0 0 0 0 65.208005 95.273961 0 0 0 0 55.811057 86.485367 0 0 0 0 43.171162 77.605703 0 0 0 0 27.777465 68.145826 0 0 0 0 9.8624382 57.873262 0 0 0 0 + + 42.238245 153.82355 0 0 0 0 67.606556 120.22865 0 0 0 0 70.55206 105.70497 0 0 0 0 65.551474 95.775797 0 0 0 0 56.10503 86.940911 0 0 0 0 43.398557 78.014475 0 0 0 0 27.923777 68.50477 0 0 0 0 9.9143866 58.178097 0 0 0 0 + + 42.462377 154.6398 0 0 0 0 67.965301 120.86662 0 0 0 0 70.926435 106.26588 0 0 0 0 65.899315 96.284019 0 0 0 0 56.402744 87.402252 0 0 0 0 43.628846 78.428449 0 0 0 0 28.071951 68.868282 0 0 0 0 9.966996 58.486812 0 0 0 0 + + 42.68907 155.46537 0 0 0 0 68.328145 121.51189 0 0 0 0 71.305088 106.83319 0 0 0 0 66.251129 96.798047 0 0 0 0 56.703859 87.868863 0 0 0 0 43.861766 78.847152 0 0 0 0 28.221818 69.235946 0 0 0 0 10.020206 58.799054 0 0 0 0 + + 42.918061 156.29931 0 0 0 0 68.694668 122.1637 0 0 0 0 71.68758 107.40626 0 0 0 0 66.606511 97.317287 0 0 0 0 57.008028 88.340206 0 0 0 0 44.097048 79.270101 0 0 0 0 28.373204 69.607339 0 0 0 0 10.073956 59.114461 0 0 0 0 + + 43.149084 157.14065 0 0 0 0 69.064444 122.82129 0 0 0 0 72.073466 107.98442 0 0 0 0 66.965046 97.841135 0 0 0 0 57.314896 88.815731 0 0 0 0 44.334417 79.696803 0 0 0 0 28.525934 69.982027 0 0 0 0 10.128183 59.432668 0 0 0 0 + + 43.381868 157.98841 0 0 0 0 69.437038 123.4839 0 0 0 0 72.462293 108.56698 0 0 0 0 67.326315 98.368977 0 0 0 0 57.624103 89.294881 0 0 0 0 44.573596 80.126757 0 0 0 0 28.679828 70.359572 0 0 0 0 10.182824 59.7533 0 0 0 0 + + 43.616137 158.84157 0 0 0 0 69.81201 124.15073 0 0 0 0 72.853602 109.15326 0 0 0 0 67.689888 98.900186 0 0 0 0 57.935283 89.777089 0 0 0 0 44.814301 80.559456 0 0 0 0 28.834704 70.739526 0 0 0 0 10.237813 60.075978 0 0 0 0 + + 43.851612 159.69913 0 0 0 0 70.188912 124.821 0 0 0 0 73.246925 109.74256 0 0 0 0 68.055333 99.434129 0 0 0 0 58.248064 90.261778 0 0 0 0 45.056245 80.994381 0 0 0 0 28.990377 71.121435 0 0 0 0 10.293085 60.400316 0 0 0 0 + + 44.08801 160.56004 0 0 0 0 70.56729 125.49389 0 0 0 0 73.641788 110.33417 0 0 0 0 68.422209 99.970164 0 0 0 0 58.562071 90.748366 0 0 0 0 45.299136 81.431009 0 0 0 0 29.14666 71.50484 0 0 0 0 10.348573 60.725926 0 0 0 0 \ No newline at end of file From 93e9ed237a5ea246ec829a58e66ae73b3ae41165 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Wed, 22 Feb 2023 13:47:06 -0600 Subject: [PATCH 15/71] removing files from cyclic fatigue --- srlife/damage.py | 952 ------------------------------------ test/test_ceramic_damage.py | 607 ----------------------- 2 files changed, 1559 deletions(-) delete mode 100644 srlife/damage.py delete mode 100644 test/test_ceramic_damage.py diff --git a/srlife/damage.py b/srlife/damage.py deleted file mode 100644 index 7907020..0000000 --- a/srlife/damage.py +++ /dev/null @@ -1,952 +0,0 @@ -# pylint: disable=no-member -""" - This module contains methods for calculating the reliability and - creep-fatigue damage given completely-solved tube results and - damage material properties -""" - -import numpy as np -import numpy.linalg as la -import scipy.optimize as opt -import multiprocess - - -class WeibullFailureModel: - """Parent class for time independent Weibull failure models - - Determines principal stresses from mandel stress - - Determines tube reliability and overall reliability by taking input of - element log reliabilities from respective Weibull failure model - """ - - def __init__(self, pset, *args, cares_cutoff=True): - """Initialize the Weibull Failure Model - - Boolean: - cares_cutoff: condition for forcing reliability as unity in case of - high compressive stresses - """ - self.cares_cutoff = cares_cutoff - - def calculate_principal_stress(self, stress): - """ - Calculate the principal stresses from Mandel vector and converts - to conventional notation - """ - if stress.ndim == 2: - tensor = np.zeros( - stress.shape[:1] + (3, 3) - ) # [:1] when no time steps involved - elif stress.ndim == 3: - tensor = np.zeros( - stress.shape[:2] + (3, 3) - ) # [:2] when time steps involved - # indices where (0,0) => (1,1) - inds = [ - [(0, 0)], - [(1, 1)], - [(2, 2)], - [(1, 2), (2, 1)], - [(0, 2), (2, 0)], - [(0, 1), (1, 0)], - ] - # multiplicative factors - mults = [1.0, 1.0, 1.0, np.sqrt(2), np.sqrt(2), np.sqrt(2)] - - # Converting mandel notation to conventional notation - for i, (grp, m) in enumerate(zip(inds, mults)): - for a, b in grp: - tensor[..., a, b] = stress[..., i] / m - - return la.eigvalsh(tensor) - - def determine_reliability( - self, receiver, material, nthreads=1, decorator=lambda x, n: x - ): - """ - Determine the reliability of the tubes in the receiver by calculating individual - material point reliabilities and finding the minimum of all points. - - Parameters: - receiver fully-solved receiver object - material material model to use - - Additional Parameters: - nthreads number of threads - decorator progress bar - """ - with multiprocess.Pool(nthreads) as p: - results = list( - decorator( - p.imap( - lambda x: self.tube_log_reliability(x, material, receiver), - receiver.tubes, - ), - receiver.ntubes, - ) - ) - - p_tube = np.array([res[0] for res in results]) - tube_fields = [res[1] for res in results] - - # Tube reliability is the minimum of all the time steps - tube = np.min(p_tube, axis=1) - - # Overall reliability is the minimum of the sum - overall = np.min(np.sum(p_tube, axis=0)) - - # Add the field to the tubes - for tubei, field in zip(receiver.tubes, tube_fields): - tubei.add_quadrature_results("log_reliability", field) - - # Convert back from log-prob as we go - return { - "tube_reliability": np.exp(tube), - "overall_reliability": np.exp(overall), - } - - def tube_log_reliability(self, tube, material, receiver): - """ - Calculate the log reliability of a single tube - """ - volumes = tube.element_volumes() - - stresses = np.transpose( - np.mean( - np.stack( - ( - tube.quadrature_results["stress_xx"], - tube.quadrature_results["stress_yy"], - tube.quadrature_results["stress_zz"], - tube.quadrature_results["stress_yz"], - tube.quadrature_results["stress_xz"], - tube.quadrature_results["stress_xy"], - ) - ), - axis=-1, - ), - axes=(1, 2, 0), - ) - - temperatures = np.mean(tube.quadrature_results["temperature"], axis=-1) - - # Do it this way so we can vectorize - inc_prob = self.calculate_element_log_reliability( - stresses, temperatures, volumes, material - ) - - # CARES/LIFE cutoff - if self.cares_cutoff: - pstress = self.calculate_principal_stress(stresses).reshape(-1, 3) - pmax = np.max(pstress, axis=1) - pmin = np.min(pstress, axis=1) - remove = np.abs(pmin / (pmax + 1.0e-16)) > 3.0 - mod_prob = inc_prob.flatten() - mod_prob[remove] = 0.0 - inc_prob = mod_prob.reshape(inc_prob.shape) - - # Return the sums as a function of time along with the field itself - return np.sum(inc_prob, axis=1), np.transpose( - np.stack((inc_prob, inc_prob)), axes=(1, 2, 0) - ) - - -class CrackShapeIndependent(WeibullFailureModel): - """ - Parent class for crack shape independent models - which include only PIA and WNTSA models - - Determines normal stress acting on crack - """ - - def __init__(self, pset, *args, **kwargs): - """ - Create a mesh grid of angles that can represent crack orientations - Evaluate direction cosines using the angles - - Default values given to nalpha and nbeta which are the number of - segments in the mesh grid - """ - super().__init__(pset, *args, **kwargs) - - # limits and number of segments for angles - self.nalpha = pset.get_default("nalpha", 21) - self.nbeta = pset.get_default("nbeta", 31) - - # Mesh grid of the vectorized angle values - self.A, self.B = np.meshgrid( - np.linspace(0, np.pi, self.nalpha), - np.linspace(0, 2 * np.pi, self.nbeta, endpoint=False), - indexing="ij", - ) - - # Increment of angles to be used in evaluating integral - self.dalpha = (self.A[-1, -1] - self.A[0, 0]) / (self.nalpha - 1) - self.dbeta = (self.B[-1, -1] - self.B[0, 0]) / (self.nbeta - 1) - - # Direction cosines - self.l = np.cos(self.A) - self.m = np.sin(self.A) * np.cos(self.B) - self.n = np.sin(self.A) * np.sin(self.B) - - def calculate_normal_stress(self, mandel_stress): - """ - Use direction cosines to calculate the normal stress to - a crack given the Mandel vector - """ - # Principal stresses - pstress = self.calculate_principal_stress(mandel_stress) - - # Normal stress - return ( - pstress[..., 0, None, None] * (self.l**2) - + pstress[..., 1, None, None] * (self.m**2) - + pstress[..., 2, None, None] * (self.n**2) - ) - - -class CrackShapeDependent(WeibullFailureModel): - """ - Parent class for crack shape dependent models - - Determines normal, shear, total and equivanlent stresses acting on cracks - - Calculates the element reliability using the equivalent stress from the - crack shape dependent models - """ - - def __init__(self, pset, *args, **kwargs): - """ - Create a mesh grid of angles that can represent crack orientations - Evaluate direction cosines using the angles - - Default values given to nalpha and nbeta which are the number of - segments in the mesh grid - """ - super().__init__(pset, *args, **kwargs) - - # limits and number of segments for angles - self.nalpha = pset.get_default("nalpha", 121) - self.nbeta = pset.get_default("nbeta", 121) - - # Mesh grid of the vectorized angle values - self.A, self.B = np.meshgrid( - np.linspace(0, np.pi / 2, self.nalpha), - np.linspace(0, np.pi / 2, self.nbeta), - indexing="ij", - ) - - # Increment of angles to be used in evaluating integral - self.dalpha = (self.A[-1, -1] - self.A[0, 0]) / (self.nalpha - 1) - self.dbeta = (self.B[-1, -1] - self.B[0, 0]) / (self.nbeta - 1) - - # Direction cosines - self.l = np.cos(self.A) - self.m = np.sin(self.A) * np.cos(self.B) - self.n = np.sin(self.A) * np.sin(self.B) - - def calculate_normal_stress(self, mandel_stress): - """ - Use direction cosines to calculate the normal stress to - a crack given the Mandel vector - """ - # Principal stresses - pstress = self.calculate_principal_stress(mandel_stress) - - # Normal stress - return ( - pstress[..., 0, None, None] * (self.l**2) - + pstress[..., 1, None, None] * (self.m**2) - + pstress[..., 2, None, None] * (self.n**2) - ) - - def calculate_total_stress(self, mandel_stress): - """ - Calculate the total stress given the Mandel vector - """ - # Principal stresses - pstress = self.calculate_principal_stress(mandel_stress) - - # Total stress - return np.sqrt( - ((pstress[..., 0, None, None] * self.l) ** 2) - + ((pstress[..., 1, None, None] * self.m) ** 2) - + ((pstress[..., 2, None, None] * self.n) ** 2) - ) - - def calculate_shear_stress(self, mandel_stress): - """ - Calculate the shear stress given the normal and total stress - """ - # Normal stress - sigma_n = self.calculate_normal_stress(mandel_stress) - - # Total stress - sigma = self.calculate_total_stress(mandel_stress) - - # Shear stress - with np.errstate(invalid="ignore"): - return np.sqrt(sigma**2 - sigma_n**2) - - def calculate_flattened_eq_stress( - self, mandel_stress, temperatures, material, A, dalpha, dbeta - ): - """ - Calculate the integral of equivalent stresses given the material - properties and integration limits - - Parameters: - mandel_stress: element stresses in Mandel convention - temperatures: element temperatures - material material model to use - - Additional Parameters: - A: mesh grid of vectorized angle values - dalpha: increment of angle alpha to be used in evaluating integral - dbeta: increment of angle beta to be used in evaluating integral - """ - self.temperatures = temperatures - self.material = material - self.mandel_stress = mandel_stress - self.mvals = self.material.modulus(temperatures) - - # Principal stresses - pstress = self.calculate_principal_stress(mandel_stress) - - # Projected equivalent stresses - sigma_e = self.calculate_eq_stress( - mandel_stress, self.temperatures, self.material - ) - - # Suppressing warning given when negative numbers are raised to rational numbers - with np.errstate(invalid="ignore"): - # Defining area integral element wise - integral = ( - (sigma_e ** self.mvals[..., None, None]) - * np.sin(self.A) - * self.dalpha - * self.dbeta - ) - - # Flatten the last axis and calculate the mean of the positive values along that axis - if pstress.ndim == 2: - flat = integral.reshape( - integral.shape[:1] + (-1,) - ) # when no time steps involved - elif pstress.ndim == 3: - flat = integral.reshape( - integral.shape[:2] + (-1,) - ) # when time steps involved - - # Suppressing warning to ignoring initial NaN values - with np.errstate(invalid="ignore"): - # Summing over area integral elements ignoring NaN values - flat = np.nansum(flat, axis=-1) - - return flat - - def calculate_element_log_reliability( - self, mandel_stress, temperatures, volumes, material - ): - """ - Calculate the element log reliability given the equivalent stress - - Parameters: - mandel_stress: element stresses in Mandel convention - temperatures: element temperatures - volumes: element volumes - material: material model object with required data - """ - self.temperatures = temperatures - self.material = material - self.mandel_stress = mandel_stress - - # Material parameters - self.svals = self.material.strength(temperatures) - self.mvals = self.material.modulus(temperatures) - self.kvals = self.svals ** (-self.mvals) - self.kpvals = (2 * self.mvals + 1) * self.kvals - - # Equivalent stress raied to exponent mv - flat = ( - self.calculate_flattened_eq_stress( - mandel_stress, - self.temperatures, - self.material, - self.A, - self.dalpha, - self.dbeta, - ) - ) ** (1 / self.mvals) - - return -(2 * self.kpvals / np.pi) * (flat**self.mvals) * volumes - - -class PIAModel(CrackShapeIndependent): - """ - Principal of independent action failure model - - Calculates reliability using only tensile stresses - that are assumed to act independently on cracks - """ - - def calculate_element_log_reliability( - self, mandel_stress, temperatures, volumes, material - ): - """ - Calculate the element log reliability - - Parameters: - mandel_stress: element stresses in Mandel convention - temperatures: element temperatures - volumes: element volumes - material: material model object with required data that includes - Weibull scale parameter (svals) and Weibull modulus (mvals) - """ - # Material parameters - svals = material.strength(temperatures) - mvals = material.modulus(temperatures) - kvals = svals ** (-mvals) - - # Principal stresses - pstress = self.calculate_principal_stress(mandel_stress) - - # Only tension - pstress[pstress < 0] = 0 - - return -kvals * np.sum(pstress ** mvals[..., None], axis=-1) * volumes - - -class WNTSAModel(CrackShapeIndependent): - """ - Weibull normal tensile average failure model - - Evaluates an average normal tensile stress (acting on the cracks) integrated over the - area of a sphere, and uses it to calculate the element reliability - """ - - def calculate_avg_normal_stress(self, mandel_stress, temperatures, material): - """ - Calculate the average normal tensile stresses from the pricipal stresses - - Parameters: - mandel_stress: element stresses in Mandel convention - temperatures: element temperatures - material: material model object with required data - """ - # Material parameters - mvals = material.modulus(temperatures) - - # Principal stresses - pstress = self.calculate_principal_stress(mandel_stress) - - # Normal stress - sigma_n = self.calculate_normal_stress(mandel_stress) - - # Area integral; suppressing warning given when negative numbers are raised - # to rational numbers - with np.errstate(invalid="ignore"): - integral = ( - (sigma_n ** mvals[..., None, None]) - * np.sin(self.A) - * self.dalpha - * self.dbeta - ) / (4 * np.pi) - - # Flatten the last axis and calculate the mean of the positive values along that axis - if pstress.ndim == 2: - flat = integral.reshape( - integral.shape[:1] + (-1,) - ) # when no time steps involved - elif pstress.ndim == 3: - flat = integral.reshape( - integral.shape[:2] + (-1,) - ) # when time steps involved - - # Suppressing warning to ignoring initial NaN values - with np.errstate(invalid="ignore"): - # Average stress - return np.nansum(np.where(flat >= 0.0, flat, np.nan), axis=-1) - - def calculate_element_log_reliability( - self, mandel_stress, temperatures, volumes, material - ): - """ - Calculate the element log reliability - - Parameters: - mandel_stress: element stresses in Mandel convention - temperatures: element temperatures - volumes: element volumes - material: material model object with required data - """ - - # Material parameters - svals = material.strength(temperatures) - mvals = material.modulus(temperatures) - kvals = svals ** (-mvals) - kpvals = (2 * mvals + 1) * kvals - - # Average normal tensile stress raied to exponent mv - avg_nstress = ( - self.calculate_avg_normal_stress(mandel_stress, temperatures, material) - ) ** (1 / mvals) - - return -kpvals * (avg_nstress**mvals) * volumes - - -class MTSModelGriffithFlaw(CrackShapeDependent): - """ - Maximum tensile stess failure model with a Griffith flaw - - Evaluates an equivalent stress (acting on the cracks) using the normal and - shear stresses in the maximum tensile stress fracture criterion for a Griffith flaw - """ - - def calculate_eq_stress(self, mandel_stress, temperatures, material): - """ - Calculate the equivalent stresses from the normal and shear stresses - """ - # Normal stress - sigma_n = self.calculate_normal_stress(mandel_stress) - - # Shear stress - tau = self.calculate_shear_stress(mandel_stress) - - # Projected equivalent stress - return 0.5 * (sigma_n + np.sqrt((sigma_n**2) + (tau**2))) - - -class MTSModelPennyShapedFlaw(CrackShapeDependent): - """ - Maximum tensile stess failure model with a penny shaped flaw - - Evaluates an equivalent stress (acting on the cracks) using the normal and - shear stresses in the maximum tensile stress fracture criterion for a penny shaped flaw - """ - - def calculate_eq_stress(self, mandel_stress, temperatures, material): - """ - Calculate the average normal tensile stresses from the normal and shear stresses - - Additional parameter: - nu: Poisson ratio - """ - - # Material parameters - nu = material.nu(temperatures).flat[0] - - sigma_n = self.calculate_normal_stress(mandel_stress) - tau = self.calculate_shear_stress(mandel_stress) - # Projected equivalent stress - return 0.5 * ( - sigma_n + np.sqrt((sigma_n**2) + ((tau / (1 - (0.5 * nu))) ** 2)) - ) - - -class CSEModelGriffithFlaw(CrackShapeDependent): - """ - Coplanar strain energy failure model with a Griffith flaw - - Evaluates an equivalent stress (acting on the cracks) using the normal and - shear stresses in the coplanar strain energy fracture criterion - for a Griffith flaw - """ - - def calculate_eq_stress(self, mandel_stress, temperatures, material): - """ - Calculate the equivalent stresses from the normal and shear stresses - """ - # Normal stress - sigma_n = self.calculate_normal_stress(mandel_stress) - - # Shear stress - tau = self.calculate_shear_stress(mandel_stress) - - # Projected equivalent stress - return np.sqrt((sigma_n**2) + (tau**2)) - - -class CSEModelPennyShapedFlaw(CrackShapeDependent): - """ - Coplanar strain energy failure model with a penny shaped flaw - - Evaluates an equivalent stress (acting on the cracks) using the normal and - shear stresses in the coplanar strain energy fracture criterion - for a penny shaped flaw - """ - - def calculate_eq_stress(self, mandel_stress, temperatures, material): - """ - Calculate the equivalent stresses from the normal and shear stresses - - Additional parameter: - nu: Poisson ratio - """ - - # Material parameters - nu = material.nu(temperatures).flat[0] - - # Normal stress - sigma_n = self.calculate_normal_stress(mandel_stress) - - # Shear stress - tau = self.calculate_shear_stress(mandel_stress) - - # Projected equivalent stress - return np.sqrt((sigma_n**2) + (tau / (1 - (0.5 * nu))) ** 2) - - -class SMMModelGriffithFlaw(CrackShapeDependent): - """ - Shetty mixed-mod failure model with a Griffith flaw - - Evaluates an equivalent stress (acting on the cracks) using the normal and - shear stresses in the Shetty mixed-mode fracture criterion - for a Griffith flaw - """ - - def calculate_eq_stress(self, mandel_stress, temperatures, material): - """ - Calculate the equivalent stresses from the normal and shear stresses - - Additional parameters: - cbar: Emperical constant - """ - - # Material parameters - cbar = material.c_bar(temperatures).flat[0] - - # Normal stress - sigma_n = self.calculate_normal_stress(mandel_stress) - - # Shear stress - tau = self.calculate_shear_stress(mandel_stress) - - # Projected equivalent stress - return 0.5 * (sigma_n + np.sqrt((sigma_n**2) + ((2 * tau / cbar) ** 2))) - - -class SMMModelPennyShapedFlaw(CrackShapeDependent): - """ - Shetty mixed mode failure model with a penny shaped flaw - - Evaluates an equivalent stress (acting on the cracks) using the normal and - shear stresses in the Shetty mixed-mode fracture criterion - for a Griffith flaw - """ - - def calculate_eq_stress(self, mandel_stress, temperatures, material): - """ - Calculate the equivalent stresses from the normal and shear stresses - - Additional parameters: - nu: Poisson ratio - cbar: Emperical constant - """ - - # Material parameters - nu = material.nu(temperatures).flat[0] - cbar = material.c_bar(temperatures).flat[0] - - # Normal stress - sigma_n = self.calculate_normal_stress(mandel_stress) - - # Shear stress - tau = self.calculate_shear_stress(mandel_stress) - - # Projected equivalent stress - return 0.5 * ( - sigma_n + np.sqrt((sigma_n**2) + ((4 * tau / (cbar * (2 - nu))) ** 2)) - ) - - -class DamageCalculator: - """ - Parent class for all damage calculators, handling common iteration - and scaling options - """ - - def __init__(self, pset): - """ - Parameters: - pset: damage parameters - """ - self.extrapolate = pset.get_default("extrapolate", "lump") - self.order = pset.get_default("order", 1) - - def single_cycles(self, tube, material, receiver): - """ - Calculate damage for a single tube - - Parameters: - tube: fully-populated tube object - material: damage material - receiver: receiver object (for metadata) - """ - raise NotImplementedError("Superclass not implemented") - - def determine_life(self, receiver, material, nthreads=1, decorator=lambda x, n: x): - """ - Determine the life of the receiver by calculating individual - material point damage and finding the minimum of all points. - - Parameters: - receiver fully-solved receiver object - material material model ot use - - Additional Parameters: - nthreads number of threads - decorator progress bar - """ - # pylint: disable=no-member - with multiprocess.Pool(nthreads) as p: - Ns = list( - decorator( - p.imap( - lambda x: self.single_cycles(x, material, receiver), - receiver.tubes, - ), - receiver.ntubes, - ) - ) - N = min(Ns) - - # Results come out as days - return N - - def make_extrapolate(self, D): - """ - Return a damage extrapolation function based on self.extrapolate - giving the damage for the nth cycle - - Parameters: - D: raw, per cycle damage - """ - if self.extrapolate == "lump": - return lambda N, D=D: N * np.sum(D) / len(D) - elif self.extrapolate == "last": - - def Dfn(N, D=D): - N = int(N) - if N < len(D) - 1: - return np.sum(D[:N]) - else: - return np.sum(D[:-1]) + D[-1] * N - - return Dfn - elif self.extrapolate == "poly": - p = np.polyfit(np.array(list(range(len(D)))) + 1, D, self.order) - return lambda N, p=p: np.polyval(p, N) - else: - raise ValueError( - "Unknown damage extrapolation approach %s!" % self.extrapolate - ) - - -class TimeFractionInteractionDamage(DamageCalculator): - """ - Calculate life using the ASME time-fraction type approach - """ - - def single_cycles(self, tube, material, receiver): - """ - Calculate the single-tube number of repetitions to failure - - Parameters: - tube single tube with full results - material damage material model - receiver receiver, for metadata - """ - # Material point cycle creep damage - Dc = self.creep_damage(tube, material, receiver) - - # Material point cycle fatigue damage - Df = self.fatigue_damage(tube, material, receiver) - - nc = receiver.days - - # This is going to be expensive, but I don't see much way around it - return min( - self.calculate_max_cycles( - self.make_extrapolate(c), self.make_extrapolate(f), material - ) - for c, f in zip(Dc.reshape(nc, -1).T, Df.reshape(nc, -1).T) - ) - - def calculate_max_cycles(self, Dc, Df, material, rep_min=1, rep_max=1e6): - """ - Actually calculate the maximum number of repetitions for a single point - - Parameters: - Dc creep damage per simulated cycle - Df fatigue damage per simulated cycle - material damaged material properties - """ - if not material.inside_envelope("cfinteraction", Df(rep_min), Dc(rep_min)): - return 0 - - if material.inside_envelope("cfinteraction", Df(rep_max), Dc(rep_max)): - return np.inf - - return opt.brentq( - lambda N: material.inside_envelope("cfinteraction", Df(N), Dc(N)) - 0.5, - rep_min, - rep_max, - ) - - def creep_damage(self, tube, material, receiver): - """ - Calculate creep damage at each material point - - Parameters: - tube single tube with full results - material damage material model - receiver receiver, for metadata - """ - # For now just use the von Mises effective stress - vm = np.sqrt( - ( - ( - tube.quadrature_results["stress_xx"] - - tube.quadrature_results["stress_yy"] - ) - ** 2.0 - + ( - tube.quadrature_results["stress_yy"] - - tube.quadrature_results["stress_zz"] - ) - ** 2.0 - + ( - tube.quadrature_results["stress_zz"] - - tube.quadrature_results["stress_xx"] - ) - ** 2.0 - + 6.0 - * ( - tube.quadrature_results["stress_xy"] ** 2.0 - + tube.quadrature_results["stress_yz"] ** 2.0 - + tube.quadrature_results["stress_xz"] ** 2.0 - ) - ) - / 2.0 - ) - - tR = material.time_to_rupture( - "averageRupture", tube.quadrature_results["temperature"], vm - ) - dts = np.diff(tube.times) - time_dmg = dts[:, np.newaxis, np.newaxis] / tR[1:] - - # Break out to cycle damage - inds = self.id_cycles(tube, receiver) - - cycle_dmg = np.array( - [ - np.sum(time_dmg[inds[i] : inds[i + 1]], axis=0) - for i in range(receiver.days) - ] - ) - - return cycle_dmg - - def fatigue_damage(self, tube, material, receiver): - """ - Calculate fatigue damage at each material point - - Parameters: - tube single tube with full results - material damage material model - receiver receiver, for metadata - """ - # Identify cycle boundaries - inds = self.id_cycles(tube, receiver) - - # Run through each cycle and ID max strain range and fatigue damage - strain_names = [ - "mechanical_strain_xx", - "mechanical_strain_yy", - "mechanical_strain_zz", - "mechanical_strain_yz", - "mechanical_strain_xz", - "mechanical_strain_xy", - ] - strain_factors = [1.0, 1.0, 1.0, 2.0, 2.0, 2.0] - - cycle_dmg = np.array( - [ - self.cycle_fatigue( - np.array( - [ - ef * tube.quadrature_results[en][inds[i] : inds[i + 1]] - for en, ef in zip(strain_names, strain_factors) - ] - ), - tube.quadrature_results["temperature"][inds[i] : inds[i + 1]], - material, - ) - for i in range(receiver.days) - ] - ) - - return cycle_dmg - - def id_cycles(self, tube, receiver): - """ - Helper to separate out individual cycles by index - - Parameters: - tube single tube with results - receiver receiver, for metadata - """ - tm = np.mod(tube.times, receiver.period) - inds = list(np.where(tm == 0)[0]) - if len(inds) != (receiver.days + 1): - raise ValueError( - "Tube times not compatible with the receiver" - " number of days and cycle period!" - ) - - return inds - - def cycle_fatigue(self, strains, temperatures, material, nu=0.5): - """ - Calculate fatigue damage for a single cycle - - Parameters: - strains single cycle strains - temperatures single cycle temperatures - material damage model - - Additional parameters: - nu effective Poisson's ratio to use - """ - pt_temps = np.max(temperatures, axis=0) - - pt_eranges = np.zeros(pt_temps.shape) - - nt = strains.shape[1] - for i in range(nt): - for j in range(nt): - de = strains[:, j] - strains[:, i] - eq = ( - np.sqrt(2) - / (2 * (1 + nu)) - * np.sqrt( - (de[0] - de[1]) ** 2 - + (de[1] - de[2]) ** 2 - + (de[2] - de[0]) ** 2.0 - + 3.0 / 2.0 * (de[3] ** 2.0 + de[4] ** 2.0 + de[5] ** 2.0) - ) - ) - pt_eranges = np.maximum(pt_eranges, eq) - - dmg = np.zeros(pt_eranges.shape) - # pylint: disable=not-an-iterable - for ind in np.ndindex(*dmg.shape): - dmg[ind] = 1.0 / material.cycles_to_fail( - "nominalFatigue", pt_temps[ind], pt_eranges[ind] - ) - - return dmg diff --git a/test/test_ceramic_damage.py b/test/test_ceramic_damage.py deleted file mode 100644 index a13b8cc..0000000 --- a/test/test_ceramic_damage.py +++ /dev/null @@ -1,607 +0,0 @@ -import unittest - -import numpy as np - -from srlife import materials, damage, solverparams - - -class TestPIAModel(unittest.TestCase): - def setUp(self): - # Case 1: Single stress tensor over 1 time step - # self.stress = np.array([[100.0,25.0,50.0,0,0,0]]) - # self.temperatures = np.array([1.0]) - # self.volumes = np.array([0.1]) - - # Case 2: MUltiple stress tensors and 2 time steps - self.stress = np.array( - [ - [[100.0, 25.0, 50.0, 0, 0, 0], [-1.5, -25.0, -5.6, 0, 0, 0]], - [[15.0, 6.0, 20.0, 0, 0, 0], [-15, 6, -20, 0, 0, 0]], - ] - ) - self.temperatures = np.array([[1.0, 3.0], [100.0, 10.0]]) - self.volumes = np.array([[0.1, 0.1], [0.1, 0.1]]) - - # Case 3: Testing for an entirely random stress tensor over 3 time steps - # self.stress = np.array([[ - # [14.0,-17.0,4.3,105,2,15.5],[15.0,25.0,5.0,0,0,0]],[[-1.5,-25.0,-5.6,17.1,-6.6,-301], - # [54.0,-7.0,0.3,10,20,15.5]],[[-10.0,25.0,50.0,0,0,0], - # [-1.0,-205.0,-56.0,-11.7,-0.6,-30]]]) - # self.temperatures = np.array([[1.0,3.0],[15.0,100.0],[10.0,11.0]]) - # self.volumes = np.array([[0.1,0.1],[0.1,0.1],[0.1,0.1]]) - - self.s0 = 70 - self.m = 3.5 - self.c_bar = 0.8 - self.nu = 0.25 - - self.material = materials.StandardCeramicMaterial( - np.array([0, 1000.0]), - np.array([self.s0, self.s0]), - np.array([0, 1000.0]), - np.array([self.m, self.m]), - self.c_bar, - self.nu, - ) - - self.model = damage.PIAModel(solverparams.ParameterSet()) - - def test_definition(self): - k = self.s0 ** (-self.m) - - # mod_stress = self.stress - # mod_stress[mod_stress<0] = 0 - - # Hand - calculated - # Case 1 - # self.p_stress = np.array([[100,25,50]]) # calculated from mathematica - - # Case 2 - self.p_stress = np.array( - [[[25, 50, 100], [0, 0, 0]], [[6, 15, 20], [0, 0, 6]]] - ) # calculated from mathematica - - # Case 3 - # self.p_stress = np.array([[[0,13.3417,69.8812],[5,15,25]],[[0,0,200.577], - # [0,0,59.7854]],[[0,25,50],[0,0,1.1857]]]) # calculated from mathematica - - should = -k * np.sum(self.p_stress**self.m, axis=-1) * self.volumes - - actual = self.model.calculate_element_log_reliability( - self.stress, self.temperatures, self.volumes, self.material - ) - - # Evaluating Reliability - R_PIA = np.exp(np.sum(actual)) - print("Reliability PIA = ", R_PIA) - - # Evaluating Probability of Failure - Pf_PIA = 1 - np.exp(np.sum(actual)) - print("Probability of failure PIA = ", Pf_PIA) - - self.assertTrue(np.allclose(should, actual)) - - -class TestWNTSAModel(unittest.TestCase): - def setUp(self): - - # Case 1: Single stress tensor over 1 time step - # self.stress = np.array([[100.0,25.0,50.0,0,0,0]]) - # self.temperatures = np.array([1.0]) - # self.volumes = np.array([0.1]) - - # Case 2: Testing for multiple (principal) stress tensors over 2 time steps - self.stress = np.array( - [ - [[100.0, 25.0, 50.0, 0, 0, 0], [-1.5, -25.0, -5.6, 0, 0, 0]], - [[15.0, 6.0, 20.0, 0, 0, 0], [-15, 6, -20, 0, 0, 0]], - ] - ) - self.temperatures = np.array([[1.0, 3.0], [100.0, 10.0]]) - self.volumes = np.array([[0.1, 0.1], [0.1, 0.1]]) - - # Case 3: Testing for an entirely random stress tensor over 3 time steps - # self.stress = np.array([[[14.0,-17.0,4.3,105,2,15.5],[15.0,25.0,5.0,0,0,0]], - # [[-1.5,-25.0,-5.6,17.1,-6.6,-301],[54.0,-7.0,0.3,10,20,15.5]], - # [[-10.0,25.0,50.0,0,0,0],[-1.0,-205.0,-56.0,-11.7,-0.6,-30]]]) - # self.temperatures = np.array([[1.0,3.0],[15.0,100.0],[10.0,11.0]]) - # self.volumes = np.array([[0.1,0.1],[0.1,0.1],[0.1,0.1]]) - - self.s0 = 70 - self.m = 3.5 - self.c_bar = 0.8 - self.nu = 0.25 - - self.material = materials.StandardCeramicMaterial( - np.array([0, 1000.0]), - np.array([self.s0, self.s0]), - np.array([0, 1000.0]), - np.array([self.m, self.m]), - self.c_bar, - self.nu, - ) - - self.model = damage.WNTSAModel(solverparams.ParameterSet()) - - def test_definition(self): - k = self.s0 ** (-self.m) - kp = (2 * self.m + 1) * k - - # Hand-calculated - # Case 1 - # self.avg_stress = np.array([[65.9504]]) # calculated from mathematica - - # Case 2 - self.avg_stress = np.array( - [[65.9504, 0], [14.7457, 2.18744]] - ) # calculated from mathematica - - # Case 3 - # self.avg_stress = np.array([[35.4182, 16.9277], [97.8709, 31.9819], - # [30.4218, 0.229781]]) # calculated from mathematica - - should = -kp * (self.avg_stress**self.m) * self.volumes - - actual = self.model.calculate_element_log_reliability( - self.stress, self.temperatures, self.volumes, self.material - ) - - # Evaluating Reliability - R_weibull = np.exp(np.sum(actual)) - print("Reliability weibull = ", R_weibull) - - # Evaluating Probability of Failure - Pf_weibull = 1 - np.exp(np.sum(actual)) - print("Probability of failure weibull = ", Pf_weibull) - - self.assertTrue(np.allclose(should, actual)) - - -class TestMTSModelGriffithFlaw(unittest.TestCase): - def setUp(self): - - # Case 1: Single stress tensor over 1 time step - # self.stress = np.array([[100.0,25.0,50.0,0,0,0]]) - # self.temperatures = np.array([1.0]) - # self.volumes = np.array([0.1]) - - # Case 2: Testing for multiple (principal) stress tensors over 2 time steps - self.stress = np.array( - [ - [[100.0, 25.0, 50.0, 0, 0, 0], [-1.5, -25.0, -5.6, 0, 0, 0]], - [[15.0, 6.0, 20.0, 0, 0, 0], [-15, 6, -20, 0, 0, 0]], - ] - ) - self.temperatures = np.array([[1.0, 3.0], [100.0, 10.0]]) - self.volumes = np.array([[0.1, 0.1], [0.1, 0.1]]) - - # Case 3: Testing for an entirely random stress tensor over 3 time steps - # self.stress = np.array([[[14.0,-17.0,4.3,105,2,15.5],[15.0,25.0,5.0,0,0,0]], - # [[-1.5,-25.0,-5.6,17.1,-6.6,-301],[54.0,-7.0,0.3,10,20,15.5]],[[-10.0,25.0,50.0,0,0,0], - # [-1.0,-205.0,-56.0,-11.7,-0.6,-30]]]) - # self.temperatures = np.array([[1.0,3.0],[15.0,100.0],[10.0,11.0]]) - # self.volumes = np.array([[0.1,0.1],[0.1,0.1],[0.1,0.1]]) - - self.s0 = 70 - self.m = 3.5 - self.c_bar = 0.8 - self.nu = 0.25 - - self.material = materials.StandardCeramicMaterial( - np.array([0, 1000.0]), - np.array([self.s0, self.s0]), - np.array([0, 1000.0]), - np.array([self.m, self.m]), - self.c_bar, - self.nu, - ) - - self.model = damage.MTSModelGriffithFlaw(solverparams.ParameterSet()) - - def test_definition(self): - k = self.s0 ** (-self.m) - kp = (2 * self.m + 1) * k - - # Hand - calculated - # Case 1 - # self.eq_stress = np.array([[77.7895]]) # calculated from mathematica - - # Case 2 - self.eq_stress = np.array( - [[77.7895, 1.89075], [17.2038, 4.2574]] - ) # calculated from mathematica - - # Case 3 - # self.eq_stress = np.array([[47.430277, 19.946982],[132.18159, 40.157049], - # [37.012046, 18.300173]]) # calculated from mathematica - - should = -(2 * kp / np.pi) * (self.eq_stress**self.m) * self.volumes - - actual = self.model.calculate_element_log_reliability( - self.stress, self.temperatures, self.volumes, self.material - ) - - # Evaluating Reliability - R_MTS_GF = np.exp(np.sum(actual)) - print("Reliability MTS GF = ", R_MTS_GF) - - # Evaluating Probability of Failure - Pf_MTS_GF = 1 - np.exp(np.sum(actual)) - print("Probability of failure MTS GF = ", Pf_MTS_GF) - - self.assertTrue(np.allclose(should, actual)) - - -class TestMTSModelPennyShapedFlaw(unittest.TestCase): - def setUp(self): - - # Case 1: Single stress tensor over 1 time step - # self.stress = np.array([[100.0,25.0,50.0,0,0,0]]) - # self.temperatures = np.array([1.0]) - # self.volumes = np.array([0.1]) - - # Case 2: Testing for multiple (principal) stress tensors over 2 time steps - self.stress = np.array( - [ - [[100.0, 25.0, 50.0, 0, 0, 0], [-1.5, -25.0, -5.6, 0, 0, 0]], - [[15.0, 6.0, 20.0, 0, 0, 0], [-15, 6, -20, 0, 0, 0]], - ] - ) - self.temperatures = np.array([[1.0, 3.0], [100.0, 10.0]]) - self.volumes = np.array([[0.1, 0.1], [0.1, 0.1]]) - - # Case 3: Testing for an entirely random stress tensor over 3 time steps - # self.stress = np.array([[[14.0,-17.0,4.3,105,2,15.5],[15.0,25.0,5.0,0,0,0]], - # [[-1.5,-25.0,-5.6,17.1,-6.6,-301],[54.0,-7.0,0.3,10,20,15.5]],[[-10.0,25.0,50.0,0,0,0], - # [-1.0,-205.0,-56.0,-11.7,-0.6,-30]]]) - # self.temperatures = np.array([[1.0,3.0],[15.0,100.0],[10.0,11.0]]) - # self.volumes = np.array([[0.1,0.1],[0.1,0.1],[0.1,0.1]]) - - self.s0 = 70 - self.m = 3.5 - self.c_bar = 0.8 - self.nu = 0.25 - - self.material = materials.StandardCeramicMaterial( - np.array([0, 1000.0]), - np.array([self.s0, self.s0]), - np.array([0, 1000.0]), - np.array([self.m, self.m]), - self.c_bar, - self.nu, - ) - - self.model = damage.MTSModelPennyShapedFlaw(solverparams.ParameterSet()) - - def test_definition(self): - k = self.s0 ** (-self.m) - kp = (2 * self.m + 1) * k - - # Hand - calculated - # Case 1 - # self.eq_stress = np.array([[78.4648]]) # calculated from mathematica - - # Case 2 - self.eq_stress = np.array( - [[78.464821, 2.3585169], [17.301933, 4.7971274]] - ) # calculated from mathematica - - # Case 3 - # self.eq_stress = np.array([[49.595931, 20.115328],[138.39622, 41.172063], - # [37.656223, 22.5172]]) # calculated from mathematica - - should = -(2 * kp / np.pi) * (self.eq_stress**self.m) * self.volumes - - actual = self.model.calculate_element_log_reliability( - self.stress, self.temperatures, self.volumes, self.material - ) - - # Evaluating Reliability - R_MTS_PSF = np.exp(np.sum(actual)) - print("Reliability MTS PSF = ", R_MTS_PSF) - - # Evaluating Probability of Failure - Pf_MTS_PSF = 1 - np.exp(np.sum(actual)) - print("Probability of failure MTS PSF = ", Pf_MTS_PSF) - - self.assertTrue(np.allclose(should, actual)) - - -class TestCSEModelGriffithFlaw(unittest.TestCase): - def setUp(self): - - # Case 1: Single stress tensor over 1 time step - # self.stress = np.array([[100.0, 25.0, 50.0, 0, 0, 0]]) - # self.temperatures = np.array([1.0]) - # self.volumes = np.array([0.1]) - - # Case 2: Testing for multiple (principal) stress tensors over 2 time steps - self.stress = np.array( - [ - [[100.0, 25.0, 50.0, 0, 0, 0], [-1.5, -25.0, -5.6, 0, 0, 0]], - [[15.0, 6.0, 20.0, 0, 0, 0], [-15, 6, -20, 0, 0, 0]], - ] - ) - self.temperatures = np.array([[1.0, 3.0], [100.0, 10.0]]) - self.volumes = np.array([[0.1, 0.1], [0.1, 0.1]]) - - # Case 3: Testing for an entirely random stress tensor over 3 time steps - # self.stress = np.array([[[14.0,-17.0,4.3,105,2,15.5],[15.0,25.0,5.0,0,0,0]], - # [[-1.5,-25.0,-5.6,17.1,-6.6,-301],[54.0,-7.0,0.3,10,20,15.5]],[[-10.0,25.0,50.0,0,0,0], - # [-1.0,-205.0,-56.0,-11.7,-0.6,-30]]]) - # self.temperatures = np.array([[1.0,3.0],[15.0,100.0],[10.0,11.0]]) - # self.volumes = np.array([[0.1,0.1],[0.1,0.1],[0.1,0.1]]) - - self.s0 = 70 - self.m = 3.5 - self.c_bar = 0.8 - self.nu = 0.25 - - self.material = materials.StandardCeramicMaterial( - np.array([0, 1000.0]), - np.array([self.s0, self.s0]), - np.array([0, 1000.0]), - np.array([self.m, self.m]), - self.c_bar, - self.nu, - ) - - self.model = damage.CSEModelGriffithFlaw(solverparams.ParameterSet()) - - def test_definition(self): - k = self.s0 ** (-self.m) - kp = (2 * self.m + 1) * k - - # Hand - calculated - # Case 1 - # self.eq_stress = np.array([[80.168972]]) # calculated from mathematica - - # Case 2 - self.eq_stress = np.array( - [[80.168972, 18.764062], [17.54572, 17.504612]] - ) # calculated from mathematica - - # Case 3 - # self.eq_stress = np.array([[74.122529, 20.54913],[207.22137, 44.87708], - # [39.892764, 156.49114]]) # calculated from mathematica - - should = -(2 * kp / np.pi) * (self.eq_stress**self.m) * self.volumes - - actual = self.model.calculate_element_log_reliability( - self.stress, self.temperatures, self.volumes, self.material - ) - - # Evaluating Reliability - R_CSE_GF = np.exp(np.sum(actual)) - print("Reliability MTS GF = ", R_CSE_GF) - - # Evaluating Probability of Failure - Pf_CSE_GF = 1 - np.exp(np.sum(actual)) - print("Probability of failure CSE GF = ", Pf_CSE_GF) - - self.assertTrue(np.allclose(should, actual)) - - -class TestCSEModelPennyShapedFlaw(unittest.TestCase): - def setUp(self): - - # Case 1: Single stress tensor over 1 time step - # self.stress = np.array([[100.0,25.0,50.0,0,0,0]]) - # self.temperatures = np.array([1.0]) - # self.volumes = np.array([0.1]) - - # Case 2: Testing for multiple (principal) stress tensors over 2 time steps - self.stress = np.array( - [ - [[100.0, 25.0, 50.0, 0, 0, 0], [-1.5, -25.0, -5.6, 0, 0, 0]], - [[15.0, 6.0, 20.0, 0, 0, 0], [-15, 6, -20, 0, 0, 0]], - ] - ) - self.temperatures = np.array([[1.0, 3.0], [100.0, 10.0]]) - self.volumes = np.array([[0.1, 0.1], [0.1, 0.1]]) - - # Case 3: Testing for an entirely random stress tensor over 3 time steps - # self.stress = np.array([[[14.0,-17.0,4.3,105,2,15.5],[15.0,25.0,5.0,0,0,0]], - # [[-1.5,-25.0,-5.6,17.1,-6.6,-301],[54.0,-7.0,0.3,10,20,15.5]],[[-10.0,25.0,50.0,0,0,0], - # [-1.0,-205.0,-56.0,-11.7,-0.6,-30]]]) - # self.temperatures = np.array([[1.0,3.0],[15.0,100.0],[10.0,11.0]]) - # self.volumes = np.array([[0.1,0.1],[0.1,0.1],[0.1,0.1]]) - - self.s0 = 70 - self.m = 3.5 - self.c_bar = 0.8 - self.nu = 0.25 - - self.material = materials.StandardCeramicMaterial( - np.array([0, 1000.0]), - np.array([self.s0, self.s0]), - np.array([0, 1000.0]), - np.array([self.m, self.m]), - self.c_bar, - self.nu, - ) - - self.model = damage.CSEModelPennyShapedFlaw(solverparams.ParameterSet()) - - def test_definition(self): - k = self.s0 ** (-self.m) - kp = (2 * self.m + 1) * k - - # Hand - calculated - # Case 1 - # self.eq_stress = np.array([[81.584298]]) # calculated from mathematica - - # Case 2 - self.eq_stress = np.array( - [[81.584298, 19.415373], [17.752073, 18.267442]] - ) # calculated from mathematica - - # Case 3 - # self.eq_stress = np.array([[80.502237, 20.908868],[224.87259, 47.426973], - # [41.532897, 162.1895]]) # calculated from mathematica - - should = -(2 * kp / np.pi) * (self.eq_stress**self.m) * self.volumes - - actual = self.model.calculate_element_log_reliability( - self.stress, self.temperatures, self.volumes, self.material - ) - - # Evaluating Reliability - R_CSE_PSF = np.exp(np.sum(actual)) - print("Reliability MTS GF = ", R_CSE_PSF) - - # Evaluating Probability of Failure - Pf_CSE_PSF = 1 - np.exp(np.sum(actual)) - print("Probability of failure CSE PSF = ", Pf_CSE_PSF) - - self.assertTrue(np.allclose(should, actual)) - - -class TestSMMModelGriffithFlaw(unittest.TestCase): - def setUp(self): - - # Case 1: Single stress tensor over 1 time step - # self.stress = np.array([[100.0,25.0,50.0,0,0,0]]) - # self.temperatures = np.array([1.0]) - # self.volumes = np.array([0.1]) - - # Case 2: Testing for multiple (principal) stress tensors over 2 time steps - self.stress = np.array( - [ - [[100.0, 25.0, 50.0, 0, 0, 0], [-1.5, -25.0, -5.6, 0, 0, 0]], - [[15.0, 6.0, 20.0, 0, 0, 0], [-15, 6, -20, 0, 0, 0]], - ] - ) - self.temperatures = np.array([[1.0, 3.0], [100.0, 10.0]]) - self.volumes = np.array([[0.1, 0.1], [0.1, 0.1]]) - - # Case 3: Testing for an entirely random stress tensor over 3 time steps - # self.stress = np.array([[[14.0,-17.0,4.3,105,2,15.5],[15.0,25.0,5.0,0,0,0]], - # [[-1.5,-25.0,-5.6,17.1,-6.6,-301],[54.0,-7.0,0.3,10,20,15.5]],[[-10.0,25.0,50.0,0,0,0], - # [-1.0,-205.0,-56.0,-11.7,-0.6,-30]]]) - # self.temperatures = np.array([[1.0,3.0],[15.0,100.0],[10.0,11.0]]) - # self.volumes = np.array([[0.1,0.1],[0.1,0.1],[0.1,0.1]]) - - self.s0 = 70 - self.m = 3.5 - self.c_bar = 0.8 - self.nu = 0.25 - - self.material = materials.StandardCeramicMaterial( - np.array([0, 1000.0]), - np.array([self.s0, self.s0]), - np.array([0, 1000.0]), - np.array([self.m, self.m]), - self.c_bar, - self.nu, - ) - - self.model = damage.SMMModelGriffithFlaw(solverparams.ParameterSet()) - - def test_definition(self): - k = self.s0 ** (-self.m) - kp = (2 * self.m + 1) * k - - # Hand - calculated - # Case 1 - # self.eq_stress = np.array([[88.366538]]) # calculated from mathematica - - # Case 2 - self.eq_stress = np.array( - [[88.366538, 7.6976808], [18.79631, 11.020469]] - ) # calculated from mathematica - - # Case 3 - # self.eq_stress = np.array([[79.857326, 22.614905],[223.55189, 55.103919], - # [47.083578, 69.367347]]) # calculated from mathematica - - should = -(2 * kp / np.pi) * (self.eq_stress**self.m) * self.volumes - - actual = self.model.calculate_element_log_reliability( - self.stress, self.temperatures, self.volumes, self.material - ) - - # Evaluating Reliability - R_SMM_GF = np.exp(np.sum(actual)) - print("Reliability MTS GF = ", R_SMM_GF) - - # Evaluating Probability of Failure - Pf_SMM_GF = 1 - np.exp(np.sum(actual)) - print("Probability of failure SMM GF = ", Pf_SMM_GF) - - self.assertTrue(np.allclose(should, actual)) - - -class TestSMMModelPennyShapedFlaw(unittest.TestCase): - def setUp(self): - - # Case 1: Single stress tensor over 1 time step - # self.stress = np.array([[100.0,25.0,50.0,0,0,0]]) - # self.temperatures = np.array([1.0]) - # self.volumes = np.array([0.1]) - - # Case 2: Testing for multiple (principal) stress tensors over 2 time steps - self.stress = np.array( - [ - [[100.0, 25.0, 50.0, 0, 0, 0], [-1.5, -25.0, -5.6, 0, 0, 0]], - [[15.0, 6.0, 20.0, 0, 0, 0], [-15, 6, -20, 0, 0, 0]], - ] - ) - self.temperatures = np.array([[1.0, 3.0], [100.0, 10.0]]) - self.volumes = np.array([[0.1, 0.1], [0.1, 0.1]]) - - # Case 3: Testing for an entirely random stress tensor over 3 time steps - # self.stress = np.array([[[14.0,-17.0,4.3,105,2,15.5],[15.0,25.0,5.0,0,0,0]], - # [[-1.5,-25.0,-5.6,17.1,-6.6,-301],[54.0,-7.0,0.3,10,20,15.5]],[[-10.0,25.0,50.0,0,0,0], - # [-1.0,-205.0,-56.0,-11.7,-0.6,-30]]]) - # self.temperatures = np.array([[1.0,3.0],[15.0,100.0],[10.0,11.0]]) - # self.volumes = np.array([[0.1,0.1],[0.1,0.1],[0.1,0.1]]) - - self.s0 = 70 - self.m = 3.5 - self.c_bar = 0.8 - self.nu = 0.25 - - self.material = materials.StandardCeramicMaterial( - np.array([0, 1000.0]), - np.array([self.s0, self.s0]), - np.array([0, 1000.0]), - np.array([self.m, self.m]), - self.c_bar, - self.nu, - ) - - self.model = damage.SMMModelPennyShapedFlaw(solverparams.ParameterSet()) - - def test_definition(self): - k = self.s0 ** (-self.m) - kp = (2 * self.m + 1) * k - - # Hand - calculated - # Case 1 - # self.eq_stress = np.array([[91.801598]]) # calculated from mathematica - - # Case 2 - self.eq_stress = np.array( - [[91.801598, 9.2479246], [19.335503, 12.793856]] - ) # calculated from mathematica - - # Case 3 - # self.eq_stress = np.array([[89.324462, 23.492053],[249.97531, 59.574085], - # [50.276554, 82.8113]]) # calculated from mathematica - - should = -(2 * kp / np.pi) * (self.eq_stress**self.m) * self.volumes - - actual = self.model.calculate_element_log_reliability( - self.stress, self.temperatures, self.volumes, self.material - ) - - # Evaluating Reliability - R_SMM_PSF = np.exp(np.sum(actual)) - print("Reliability MTS GF = ", R_SMM_PSF) - - # Evaluating Probability of Failure - Pf_SMM_PSF = 1 - np.exp(np.sum(actual)) - print("Probability of failure SMM PSF = ", Pf_SMM_PSF) - - self.assertTrue(np.allclose(should, actual)) From 6ed21c3d37479fe4bb9cb122b7994c155495b513 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Wed, 22 Feb 2023 13:49:47 -0600 Subject: [PATCH 16/71] updating cyclic test file --- test/test_ceramic_damage_CARES_cyclic.py | 1 - 1 file changed, 1 deletion(-) diff --git a/test/test_ceramic_damage_CARES_cyclic.py b/test/test_ceramic_damage_CARES_cyclic.py index 547d9af..fce4f77 100644 --- a/test/test_ceramic_damage_CARES_cyclic.py +++ b/test/test_ceramic_damage_CARES_cyclic.py @@ -9,7 +9,6 @@ from srlife import ( materials, - damage, damage_time_dep_cyclic, solverparams, ) From bf0b5c1e0c5625480c341c90efaabe55b81eaf75 Mon Sep 17 00:00:00 2001 From: Mark Messner Date: Thu, 9 Mar 2023 14:54:43 -0600 Subject: [PATCH 17/71] Some changes to the interface --- srlife/damage_time_dep_cyclic.py | 28 +++++++++++++----------- srlife/managers.py | 13 ++++++++--- test/test_ceramic_damage_CARES_cyclic.py | 5 +++-- 3 files changed, 28 insertions(+), 18 deletions(-) diff --git a/srlife/damage_time_dep_cyclic.py b/srlife/damage_time_dep_cyclic.py index 91491fc..6ba3a4a 100644 --- a/srlife/damage_time_dep_cyclic.py +++ b/srlife/damage_time_dep_cyclic.py @@ -66,7 +66,7 @@ def calculate_principal_stress(self, stress): return la.eigvalsh(tensor) def determine_reliability( - self, receiver, material, nthreads=1, decorator=lambda x, n: x + self, receiver, material, time, nthreads=1, decorator=lambda x, n: x ): """ Determine the reliability of the tubes in the receiver by calculating individual @@ -75,6 +75,7 @@ def determine_reliability( Parameters: receiver fully-solved receiver object material material model to use + time (float): time in service Additional Parameters: nthreads number of threads @@ -84,7 +85,7 @@ def determine_reliability( results = list( decorator( p.imap( - lambda x: self.tube_log_reliability(x, material, receiver), + lambda x: self.tube_log_reliability(x, material, receiver, time), receiver.tubes, ), receiver.ntubes, @@ -110,7 +111,7 @@ def determine_reliability( "overall_reliability": np.exp(overall), } - def tube_log_reliability(self, tube, material, receiver): + def tube_log_reliability(self, tube, material, receiver, time): """ Calculate the log reliability of a single tube """ @@ -135,9 +136,13 @@ def tube_log_reliability(self, tube, material, receiver): temperatures = np.mean(tube.quadrature_results["temperature"], axis=-1) + # Figure out the number of repetitions of the load cycle + if receiver.days != 1: + raise RuntimeError("Time dependent reliability requires the load cycle be a single, representative cycle") + # Do it this way so we can vectorize inc_prob = self.calculate_element_log_reliability( - stresses, temperatures, volumes, material + tube.times, stresses, temperatures, volumes, material, time ) # CARES/LIFE cutoff @@ -452,17 +457,19 @@ class PIAModel(CrackShapeIndependent): """ def calculate_element_log_reliability( - self, mandel_stress, temperatures, volumes, nf, period, material + self, time, mandel_stress, temperatures, volumes, material, tot_time ): """ Calculate the element log reliability Parameters: + time: time for each stress/temperature mandel_stress: element stresses in Mandel convention temperatures: element temperatures volumes: element volumes material: material model object with required data that includes Weibull scale parameter (svals) and Weibull modulus (mvals) + tot_time: total time at which to calculate reliability """ # Principal stresses @@ -488,23 +495,18 @@ def calculate_element_log_reliability( with np.errstate(invalid="ignore"): g_integral = (pstress / (pstress_max + 1e-14)) ** Nv - # Defining dt (period_array) for integration in g using period (in hours) Note: replace period with period from receiver - print("number of cycles to failure =", nf) - self.period_array = np.linspace(0, period, pstress.shape[0]) - # Calculate g using an trapezoidal integration method - g = np.max((np.trapz(g_integral, self.period_array, axis=0)) / period) + g = np.max((np.trapz(g_integral, time, axis=0)) / time[-1]) print("g =", g) # Calculating time integral time_integral = (pstress_max**Nv) * g # Defining tf - self.tot_time = nf * period # replace with period from receiver - print("service time =", self.tot_time) + print("service time =", tot_time) # Time dependent principal stress pstress_0 = ( - (time_integral * self.tot_time) / Bv + (pstress_max ** (Nv - 2)) + (time_integral * tot_time) / Bv + (pstress_max ** (Nv - 2)) ) ** (1 / (Nv - 2)) return -kvals * np.nansum(pstress_0 ** mvals[..., None], axis=-1) * volumes diff --git a/srlife/managers.py b/srlife/managers.py index bda2a04..f4cef07 100644 --- a/srlife/managers.py +++ b/srlife/managers.py @@ -137,11 +137,14 @@ def calculate_damage(self): decorator=self.progress_decorator, ) - def solve_reliability(self): + def solve_reliability(self, time): """User interface: solve everything and return receiver reliability The trigger for everything: solve the complete problem and report the best-estimate reliability. + + Args: + time (float): time at which to report reliability Returns: float: Reliability between 0 and 1 @@ -149,11 +152,14 @@ def solve_reliability(self): self.solve_heat_transfer() self.solve_structural() - return self.calculate_reliability() + return self.calculate_reliability(time) - def calculate_reliability(self): + def calculate_reliability(self, time): """Calculate reliability from the results + Args: + time (float): time at which to report reliability + Returns: float: Reliability between 0 and 1 """ @@ -162,6 +168,7 @@ def calculate_reliability(self): return self.damage_model.determine_reliability( self.receiver, self.damage_material, + time, nthreads=self.nthreads, decorator=self.progress_decorator, ) diff --git a/test/test_ceramic_damage_CARES_cyclic.py b/test/test_ceramic_damage_CARES_cyclic.py index fce4f77..1ae67a2 100644 --- a/test/test_ceramic_damage_CARES_cyclic.py +++ b/test/test_ceramic_damage_CARES_cyclic.py @@ -156,6 +156,7 @@ def setUp(self): # Number of cycles to failure self.nf = 1 self.period = 0.01 + self.time = np.linspace(0, self.period, self.stress.shape[0]) # Material properties self.m = 7.65 @@ -185,12 +186,12 @@ def test_definition(self): # kp = (2 * self.m + 1) * k actual = self.model_time_dep.calculate_element_log_reliability( + self.time, self.stress, self.temperatures, self.volumes, - self.nf, - self.period, self.material, + self.nf * self.period ) # Summing up log probabilities over nelem and taking the value of one From 2e87d8899d3e5ff3c3640894c6de25ba8c1ad242 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Thu, 9 Mar 2023 15:46:55 -0600 Subject: [PATCH 18/71] updating damage and test files --- srlife/damage_time_dep_cyclic.py | 51 +++++++++++++++--------- test/test_ceramic_damage_CARES_cyclic.py | 36 ++++++++--------- 2 files changed, 50 insertions(+), 37 deletions(-) diff --git a/srlife/damage_time_dep_cyclic.py b/srlife/damage_time_dep_cyclic.py index 6ba3a4a..6e54c49 100644 --- a/srlife/damage_time_dep_cyclic.py +++ b/srlife/damage_time_dep_cyclic.py @@ -85,7 +85,9 @@ def determine_reliability( results = list( decorator( p.imap( - lambda x: self.tube_log_reliability(x, material, receiver, time), + lambda x: self.tube_log_reliability( + x, material, receiver, time + ), receiver.tubes, ), receiver.ntubes, @@ -138,7 +140,9 @@ def tube_log_reliability(self, tube, material, receiver, time): # Figure out the number of repetitions of the load cycle if receiver.days != 1: - raise RuntimeError("Time dependent reliability requires the load cycle be a single, representative cycle") + raise RuntimeError( + "Time dependent reliability requires the load cycle be a single, representative cycle" + ) # Do it this way so we can vectorize inc_prob = self.calculate_element_log_reliability( @@ -301,7 +305,15 @@ def calculate_shear_stress(self, mandel_stress): return np.sqrt(sigma**2 - sigma_n**2) def calculate_flattened_eq_stress( - self, mandel_stress, nf, period, temperatures, material, A, dalpha, dbeta + self, + time, + mandel_stress, + temperatures, + material, + tot_time, + A, + dalpha, + dbeta, ): """ Calculate the integral of equivalent stresses given the material @@ -347,22 +359,23 @@ def calculate_flattened_eq_stress( # Defining dt (period_array) for integration in g using period (in hours) Note: replace period with period from receiver # print("number of cycles to failure =", nf) - self.period_array = np.linspace(0, period, pstress.shape[0]) + # self.period_array = np.linspace(0, period, pstress.shape[0]) # Calculate g using an integration method - g = (np.trapz(g_integral, self.period_array, axis=0)) / (period) + g = (np.trapz(g_integral, time, axis=0)) / time[-1] + # print("g =", g) # Calculating time integral time_integral = (sigma_e_max**Nv) * g # Defining tf - self.tot_time = nf * period # replace with period from receiver - print("total time =", self.tot_time) + # self.tot_time = nf * period # replace with period from receiver + print("service time =", tot_time) # Time dependent equivalent stress - sigma_e_0 = ( - ((time_integral * self.tot_time) / Bv) + (sigma_e_max ** (Nv - 2)) - ) ** (1 / (Nv - 2)) + sigma_e_0 = (((time_integral * tot_time) / Bv) + (sigma_e_max ** (Nv - 2))) ** ( + 1 / (Nv - 2) + ) # Suppressing warning given when negative numbers are raised to rational numbers with np.errstate(invalid="ignore"): @@ -388,7 +401,7 @@ def calculate_flattened_eq_stress( return flat def calculate_element_log_reliability( - self, mandel_stress, temperatures, volumes, nf, period, kbar, material + self, time, mandel_stress, temperatures, volumes, material, tot_time ): """ Calculate the element log reliability given the equivalent stress @@ -407,8 +420,8 @@ def calculate_element_log_reliability( # pstress = self.calculate_principal_stress(mandel_stress) # Material parameters - svals = self.material.strength(temperatures) - mvals = self.material.modulus(temperatures) + svals = material.strength(temperatures) + mvals = material.modulus(temperatures) kvals = svals ** (-mvals) shear_sensitive = True @@ -434,11 +447,11 @@ def calculate_element_log_reliability( # Equivalent stress raied to exponent mv flat = ( self.calculate_flattened_eq_stress( + time, mandel_stress, - nf, - period, self.temperatures, self.material, + tot_time, self.A, self.dalpha, self.dbeta, @@ -496,7 +509,7 @@ def calculate_element_log_reliability( g_integral = (pstress / (pstress_max + 1e-14)) ** Nv # Calculate g using an trapezoidal integration method - g = np.max((np.trapz(g_integral, time, axis=0)) / time[-1]) + g = (np.trapz(g_integral, time, axis=0)) / time[-1] print("g =", g) # Calculating time integral time_integral = (pstress_max**Nv) * g @@ -505,9 +518,9 @@ def calculate_element_log_reliability( print("service time =", tot_time) # Time dependent principal stress - pstress_0 = ( - (time_integral * tot_time) / Bv + (pstress_max ** (Nv - 2)) - ) ** (1 / (Nv - 2)) + pstress_0 = ((time_integral * tot_time) / Bv + (pstress_max ** (Nv - 2))) ** ( + 1 / (Nv - 2) + ) return -kvals * np.nansum(pstress_0 ** mvals[..., None], axis=-1) * volumes diff --git a/test/test_ceramic_damage_CARES_cyclic.py b/test/test_ceramic_damage_CARES_cyclic.py index 1ae67a2..5746660 100644 --- a/test/test_ceramic_damage_CARES_cyclic.py +++ b/test/test_ceramic_damage_CARES_cyclic.py @@ -191,7 +191,7 @@ def test_definition(self): self.temperatures, self.volumes, self.material, - self.nf * self.period + self.nf * self.period, ) # Summing up log probabilities over nelem and taking the value of one @@ -233,6 +233,7 @@ def setUp(self): # Number of cycles to failure self.nf = 1 self.period = 0.01 + self.time = np.linspace(0, self.period, self.stress.shape[0]) # Material properties self.m = 7.65 @@ -243,7 +244,7 @@ def setUp(self): self.Bv = 320 # Model specific property - self.kbar = self.m + 1 + # self.kbar = self.m + 1 self.material = materials.StandardCeramicMaterial( np.array([0, 1000.0]), @@ -267,13 +268,12 @@ def test_definition(self): # kp = (self.m + 1) * k actual = self.model_time_dep.calculate_element_log_reliability( + self.time, self.stress, self.temperatures, self.volumes, - self.nf, - self.period, - self.kbar, self.material, + self.nf * self.period, ) # Summing up log probabilities over nelem and taking the value of one @@ -316,6 +316,7 @@ def setUp(self): # Number of cycles to failure self.nf = 1 self.period = 0.01 + self.time = np.linspace(0, self.period, self.stress.shape[0]) # Material properties self.m = 7.65 @@ -326,7 +327,7 @@ def setUp(self): self.Bv = 320 # Model specific property - self.kbar = 7.13 + # self.kbar = 7.13 self.material = materials.StandardCeramicMaterial( np.array([0, 1000.0]), @@ -348,13 +349,12 @@ def test_definition(self): # kp = (self.m + 1) * k actual = self.model_time_dep.calculate_element_log_reliability( + self.time, self.stress, self.temperatures, self.volumes, - self.nf, - self.period, - self.kbar, self.material, + self.nf * self.period, ) # Summing up log probabilities over nelem and taking the value of one @@ -397,6 +397,7 @@ def setUp(self): # Number of cycles to failure self.nf = 1 self.period = 0.01 + self.time = np.linspace(0, self.period, self.stress.shape[0]) # Material properties self.m = 7.65 @@ -407,7 +408,7 @@ def setUp(self): self.Bv = 320 # Model specific property - self.kbar = 2.92 + # self.kbar = 2.92 self.material = materials.StandardCeramicMaterial( np.array([0, 1000.0]), @@ -429,13 +430,12 @@ def test_definition(self): # kp = (2.99) * k actual = self.model_time_dep.calculate_element_log_reliability( + self.time, self.stress, self.temperatures, self.volumes, - self.nf, - self.period, - self.kbar, self.material, + self.nf * self.period, ) # Summing up log probabilities over nelem and taking the value of one @@ -475,8 +475,9 @@ def setUp(self): self.temperatures = np.ones((data.shape[0], 8)) # Number of cycles to failure - self.nf = 1 + self.nf = 1000 self.period = 0.01 + self.time = np.linspace(0, self.period, self.stress.shape[0]) # Material properties self.m = 7.65 @@ -487,7 +488,7 @@ def setUp(self): self.Bv = 320 # Model specific property - self.kbar = 1.96 + # self.kbar = 1.96 self.material = materials.StandardCeramicMaterial( np.array([0, 1000.0]), @@ -508,13 +509,12 @@ def test_definition(self): # kp = (2.99) * k actual = self.model_time_dep.calculate_element_log_reliability( + self.time, self.stress, self.temperatures, self.volumes, - self.nf, - self.period, - self.kbar, self.material, + self.nf * self.period, ) # print("actual shape =", actual.shape) From 0526b7014660b31aefb73a29128456d70189aead Mon Sep 17 00:00:00 2001 From: Mark Messner Date: Thu, 9 Mar 2023 15:52:07 -0600 Subject: [PATCH 19/71] Mostly okay with PIA --- srlife/damage_time_dep_cyclic.py | 31 +++++++++--------------- test/test_ceramic_damage_CARES_cyclic.py | 8 +++--- 2 files changed, 15 insertions(+), 24 deletions(-) diff --git a/srlife/damage_time_dep_cyclic.py b/srlife/damage_time_dep_cyclic.py index 6ba3a4a..754fcc0 100644 --- a/srlife/damage_time_dep_cyclic.py +++ b/srlife/damage_time_dep_cyclic.py @@ -484,32 +484,25 @@ def calculate_element_log_reliability( # Only tension pstress[pstress < 0] = 0 - - # Max principal stress over each element in time - # pstress_elem_max = np.max(pstress, axis=2) - - # Max principal stresss over all time steps for each element - pstress_max = np.max(pstress, axis=0) - - # g integral for calculating total time and g - with np.errstate(invalid="ignore"): - g_integral = (pstress / (pstress_max + 1e-14)) ** Nv - - # Calculate g using an trapezoidal integration method - g = np.max((np.trapz(g_integral, time, axis=0)) / time[-1]) - print("g =", g) - # Calculating time integral - time_integral = (pstress_max**Nv) * g - + + # Max value + eff_max = np.max(pstress, axis = 0) + + # g + g = np.trapz((pstress / (eff_max + 1.0e-14)) ** Nv, time, axis = 0) / time[-1] + # Defining tf print("service time =", tot_time) # Time dependent principal stress pstress_0 = ( - (time_integral * tot_time) / Bv + (pstress_max ** (Nv - 2)) + (eff_max**Nv * g * tot_time) / Bv + (eff_max ** (Nv - 2)) ) ** (1 / (Nv - 2)) - return -kvals * np.nansum(pstress_0 ** mvals[..., None], axis=-1) * volumes + mavg = np.mean(mvals, axis = 0) + kavg = np.mean(kvals, axis = 0) + + return -kavg * np.sum(pstress_0 ** mavg[...,None], axis=-1) * volumes class WNTSAModel(CrackShapeIndependent): diff --git a/test/test_ceramic_damage_CARES_cyclic.py b/test/test_ceramic_damage_CARES_cyclic.py index 1ae67a2..254db53 100644 --- a/test/test_ceramic_damage_CARES_cyclic.py +++ b/test/test_ceramic_damage_CARES_cyclic.py @@ -147,14 +147,12 @@ def setUp(self): "Spinning_disk_volumes.txt", ) ) - self.volumes = vol_factor * (np.tile(self.volumes, data.shape[0])).reshape( - data.shape[0], 8 - ) + self.volumes = vol_factor * self.volumes self.temperatures = np.ones((data.shape[0], 8)) # Number of cycles to failure - self.nf = 1 + self.nf = 100 self.period = 0.01 self.time = np.linspace(0, self.period, self.stress.shape[0]) @@ -195,7 +193,7 @@ def test_definition(self): ) # Summing up log probabilities over nelem and taking the value of one - R_PIA = np.exp(np.sum(actual, axis=1))[0] + R_PIA = np.exp(np.sum(actual)) print("Time dep Reliability PIA = ", R_PIA) # Evaluating Probability of Failure From 844303fae914b29106f60a68adfc05556948b7e3 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Thu, 9 Mar 2023 16:58:39 -0600 Subject: [PATCH 20/71] updating damage and test files --- srlife/damage_time_dep_cyclic.py | 31 ++++++++++++------------ test/test_ceramic_damage_CARES_cyclic.py | 30 +++++++++++++---------- 2 files changed, 32 insertions(+), 29 deletions(-) diff --git a/srlife/damage_time_dep_cyclic.py b/srlife/damage_time_dep_cyclic.py index 63b9293..d471c05 100644 --- a/srlife/damage_time_dep_cyclic.py +++ b/srlife/damage_time_dep_cyclic.py @@ -365,17 +365,15 @@ def calculate_flattened_eq_stress( g = (np.trapz(g_integral, time, axis=0)) / time[-1] # print("g =", g) - # Calculating time integral - time_integral = (sigma_e_max**Nv) * g # Defining tf # self.tot_time = nf * period # replace with period from receiver print("service time =", tot_time) # Time dependent equivalent stress - sigma_e_0 = (((time_integral * tot_time) / Bv) + (sigma_e_max ** (Nv - 2))) ** ( - 1 / (Nv - 2) - ) + sigma_e_0 = ( + (((sigma_e_max**Nv) * g * tot_time) / Bv) + (sigma_e_max ** (Nv - 2)) + ) ** (1 / (Nv - 2)) # Suppressing warning given when negative numbers are raised to rational numbers with np.errstate(invalid="ignore"): @@ -497,25 +495,26 @@ def calculate_element_log_reliability( # Only tension pstress[pstress < 0] = 0 - + # Max value - eff_max = np.max(pstress, axis = 0) - + eff_max = np.max(pstress, axis=0) + # g - g = np.trapz((pstress / (eff_max + 1.0e-14)) ** Nv, time, axis = 0) / time[-1] - + g = np.trapz((pstress / (eff_max + 1.0e-14)) ** Nv, time, axis=0) / time[-1] + # Defining tf print("service time =", tot_time) # Time dependent principal stress - pstress_0 = ( - (eff_max**Nv * g * tot_time) / Bv + (eff_max ** (Nv - 2)) - ) ** (1 / (Nv - 2)) + pstress_0 = ((eff_max**Nv * g * tot_time) / Bv + (eff_max ** (Nv - 2))) ** ( + 1 / (Nv - 2) + ) - mavg = np.mean(mvals, axis = 0) - kavg = np.mean(kvals, axis = 0) + # Use temperature average values? + mavg = np.mean(mvals, axis=0) + kavg = np.mean(kvals, axis=0) - return -kavg * np.sum(pstress_0 ** mavg[...,None], axis=-1) * volumes + return -kavg * np.sum(pstress_0 ** mavg[..., None], axis=-1) * volumes class WNTSAModel(CrackShapeIndependent): diff --git a/test/test_ceramic_damage_CARES_cyclic.py b/test/test_ceramic_damage_CARES_cyclic.py index a482145..230abe5 100644 --- a/test/test_ceramic_damage_CARES_cyclic.py +++ b/test/test_ceramic_damage_CARES_cyclic.py @@ -222,9 +222,10 @@ def setUp(self): "Spinning_disk_volumes.txt", ) ) - self.volumes = vol_factor * (np.tile(self.volumes, data.shape[0])).reshape( - data.shape[0], 8 - ) + self.volumes = vol_factor * self.volumes + # self.volumes = vol_factor * (np.tile(self.volumes, data.shape[0])).reshape( + # data.shape[0], 8 + # ) self.temperatures = np.ones((data.shape[0], 8)) @@ -305,9 +306,10 @@ def setUp(self): "Spinning_disk_volumes.txt", ) ) - self.volumes = vol_factor * (np.tile(self.volumes, data.shape[0])).reshape( - data.shape[0], 8 - ) + self.volumes = vol_factor * self.volumes + # self.volumes = vol_factor * (np.tile(self.volumes, data.shape[0])).reshape( + # data.shape[0], 8 + # ) self.temperatures = np.ones((data.shape[0], 8)) @@ -386,9 +388,10 @@ def setUp(self): "Spinning_disk_volumes.txt", ) ) - self.volumes = vol_factor * (np.tile(self.volumes, data.shape[0])).reshape( - data.shape[0], 8 - ) + self.volumes = vol_factor * self.volumes + # self.volumes = vol_factor * (np.tile(self.volumes, data.shape[0])).reshape( + # data.shape[0], 8 + # ) self.temperatures = np.ones((data.shape[0], 8)) @@ -466,14 +469,15 @@ def setUp(self): "Spinning_disk_volumes.txt", ) ) - self.volumes = vol_factor * (np.tile(self.volumes, data.shape[0])).reshape( - data.shape[0], 8 - ) + self.volumes = vol_factor * self.volumes + # self.volumes = vol_factor * (np.tile(self.volumes, data.shape[0])).reshape( + # data.shape[0], 8 + # ) self.temperatures = np.ones((data.shape[0], 8)) # Number of cycles to failure - self.nf = 1000 + self.nf = 1 self.period = 0.01 self.time = np.linspace(0, self.period, self.stress.shape[0]) From 4475f04ee49503c93326ad11f801c50b40ddba0e Mon Sep 17 00:00:00 2001 From: pschaugule Date: Thu, 16 Mar 2023 16:16:20 -0500 Subject: [PATCH 21/71] updating test files and associated files --- test/Spinning_disk_100k.csv | 38 ++ test/Spinning_disk_110k.csv | 38 ++ test/Spinning_disk_120k.csv | 38 ++ test/Spinning_disk_60k.csv | 38 ++ test/Spinning_disk_60k_70k.csv | 38 ++ test/Spinning_disk_60k_80k.csv | 38 ++ test/Spinning_disk_70k.csv | 38 ++ test/Spinning_disk_80k.csv | 38 ++ test/Spinning_disk_90k.csv | 38 ++ test/test_ceramic_damage_CARES_cyclic.py | 185 ++++++--- test/test_ceramic_damage_CARES_static.py | 499 +++++++++++++++++++++++ test/volumes_8.csv | 8 + 12 files changed, 985 insertions(+), 49 deletions(-) create mode 100644 test/Spinning_disk_100k.csv create mode 100644 test/Spinning_disk_110k.csv create mode 100644 test/Spinning_disk_120k.csv create mode 100644 test/Spinning_disk_60k.csv create mode 100644 test/Spinning_disk_60k_70k.csv create mode 100644 test/Spinning_disk_60k_80k.csv create mode 100644 test/Spinning_disk_70k.csv create mode 100644 test/Spinning_disk_80k.csv create mode 100644 test/Spinning_disk_90k.csv create mode 100644 test/test_ceramic_damage_CARES_static.py create mode 100644 test/volumes_8.csv diff --git a/test/Spinning_disk_100k.csv b/test/Spinning_disk_100k.csv new file mode 100644 index 0000000..fd5b6c8 --- /dev/null +++ b/test/Spinning_disk_100k.csv @@ -0,0 +1,38 @@ +,elem_5_xx,elem_5_yy,elem_5_zz,elem_5_yz,elem_5_xz,elem_5_xy,elem_11_xx,elem_11_yy,elem_11_zz,elem_11_yz,elem_11_xz,elem_11_xy,elem_17_xx,elem_17_yy,elem_17_zz,elem_17_yz,elem_17_xz,elem_17_xy,elem_23_xx,elem_23_yy,elem_23_zz,elem_23_yz,elem_23_xz,elem_23_xy,elem_29_xx,elem_29_yy,elem_29_zz,elem_29_yz,elem_29_xz,elem_29_xy,elem_35_xx,elem_35_yy,elem_35_zz,elem_35_yz,elem_35_xz,elem_35_xy,elem_41_xx,elem_41_yy,elem_41_zz,elem_41_yz,elem_41_xz,elem_41_xy,elem_47_xx,elem_47_yy,elem_47_zz,elem_47_yz,elem_47_xz,elem_47_xy +0,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +1,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +2,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +3,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +4,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +5,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +6,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +7,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +8,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +9,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +10,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +11,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +12,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +13,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +14,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +15,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +16,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +17,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +18,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +19,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +20,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +21,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +22,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +23,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +24,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +25,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +26,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +27,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +28,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +29,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +30,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +31,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +32,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +33,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +34,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +35,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 +36,111.37243539326,407.38689985377,5.4850253972561,-0.26193473830521324,-1.9895918659152931,-56.08547309376233,179.75451221513,313.62530648937,-2.2849122280424,0.20108781661367997,1.527413609709486,-25.36432415209344,186.88728959347,275.97415775803,0.23274515903217,-0.042022252315901426,-0.3191906956640199,-16.87917229501895,173.45950723074,249.87679772611,0.30678774055265,0.0024239903967027726,0.01841203537586112,-14.478683999052244,148.5682131184,226.52607118637,0.27449272133335,0.0029508681334346064,0.022414069025213763,-14.77057332090496,115.26840878661,202.84410137365,0.27757637089413,-0.015411406467332465,-0.11706125399079507,-16.592851837893274,74.830474144467,177.70158108733,1.0234571080981,0.07604058504425347,0.5775855847992255,-19.490853974114316,27.756510064601,149.55018611301,-2.0230615995776,-0.04197715513580016,-0.31884814683607127,-23.076088372381502 diff --git a/test/Spinning_disk_110k.csv b/test/Spinning_disk_110k.csv new file mode 100644 index 0000000..b8fe8b5 --- /dev/null +++ b/test/Spinning_disk_110k.csv @@ -0,0 +1,38 @@ +,elem_5_xx,elem_5_yy,elem_5_zz,elem_5_yz,elem_5_xz,elem_5_xy,elem_11_xx,elem_11_yy,elem_11_zz,elem_11_yz,elem_11_xz,elem_11_xy,elem_17_xx,elem_17_yy,elem_17_zz,elem_17_yz,elem_17_xz,elem_17_xy,elem_23_xx,elem_23_yy,elem_23_zz,elem_23_yz,elem_23_xz,elem_23_xy,elem_29_xx,elem_29_yy,elem_29_zz,elem_29_yz,elem_29_xz,elem_29_xy,elem_35_xx,elem_35_yy,elem_35_zz,elem_35_yz,elem_35_xz,elem_35_xy,elem_41_xx,elem_41_yy,elem_41_zz,elem_41_yz,elem_41_xz,elem_41_xy,elem_47_xx,elem_47_yy,elem_47_zz,elem_47_yz,elem_47_xz,elem_47_xy +0,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +1,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +2,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +3,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +4,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +5,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +6,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +7,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +8,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +9,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +10,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +11,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +12,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +13,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +14,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +15,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +16,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +17,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +18,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +19,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +20,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +21,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +22,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +23,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +24,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +25,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +26,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +27,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +28,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +29,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +30,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +31,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +32,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +33,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +34,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +35,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 +36,134.76045964488,492.93746413803,6.6368715120319,-0.31694059311399186,-2.4074028138977854,-67.86332818201791,217.50265767141,379.48609374998,-2.7647399557206,0.243315920149435,1.8481679006543552,-30.69078959482176,226.13330631141,333.92826706443,0.281621251321,-0.050846854687375216,-0.38622020529065126,-20.423770108567236,209.88571222025,302.35050528701,0.37121265054676,0.0029330242993156246,0.022278531868921498,-17.519183304895844,179.76728817866,274.0961654191,0.33213573174056,0.003570545476514139,0.027120985838079027,-17.872368893724346,139.47458090306,245.44102174715,0.33586694229356,-0.018647775941731923,-0.1416439205761862,-20.077322836644704,90.544747949245,215.0186144572,1.2383813808131,0.09200898008294726,0.6988775868677409,-23.583900550923275,33.585330528647,180.9554738517,-2.4479011352067,-0.05079228716862189,-0.385805721786649,-27.92202814721871 diff --git a/test/Spinning_disk_120k.csv b/test/Spinning_disk_120k.csv new file mode 100644 index 0000000..357271f --- /dev/null +++ b/test/Spinning_disk_120k.csv @@ -0,0 +1,38 @@ +,elem_5_xx,elem_5_yy,elem_5_zz,elem_5_yz,elem_5_xz,elem_5_xy,elem_11_xx,elem_11_yy,elem_11_zz,elem_11_yz,elem_11_xz,elem_11_xy,elem_17_xx,elem_17_yy,elem_17_zz,elem_17_yz,elem_17_xz,elem_17_xy,elem_23_xx,elem_23_yy,elem_23_zz,elem_23_yz,elem_23_xz,elem_23_xy,elem_29_xx,elem_29_yy,elem_29_zz,elem_29_yz,elem_29_xz,elem_29_xy,elem_35_xx,elem_35_yy,elem_35_zz,elem_35_yz,elem_35_xz,elem_35_xy,elem_41_xx,elem_41_yy,elem_41_zz,elem_41_yz,elem_41_xz,elem_41_xy,elem_47_xx,elem_47_yy,elem_47_zz,elem_47_yz,elem_47_xz,elem_47_xy +0,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +1,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +2,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +3,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +4,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +5,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +6,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +7,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +8,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +9,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +10,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +11,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +12,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +13,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +14,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +15,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +16,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +17,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +18,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +19,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +20,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +21,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +22,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +23,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +24,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +25,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +26,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +27,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +28,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +29,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +30,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +31,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +32,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +33,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +34,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +35,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 +36,160.3761538182,586.63657559248,7.8984290294802,-0.37718566295437206,-2.865009551052148,-80.76300413201648,258.84625040969,451.6200100792,-3.2902704664116,0.2895661794227259,2.199473497649705,-36.524591900571,269.1174400264,397.40240768019,0.33515270903713,-0.060511985566289804,-0.4596341628278437,-24.305984894298135,249.78145188842,359.82224512054,0.44177392448159,0.0034905428242854707,0.026513305627121418,-20.84928504901669,213.93802259493,326.19723101318,0.39526914154945,0.004249246042648421,0.032276228565737586,-21.26960527108311,165.98635014751,292.09522704776,0.39970959254284,-0.02219240414455743,-0.1685680447763434,-23.893683829752003,107.75577986896,255.89003240884,1.4737768284129,0.10949833786765702,0.8317224478687671,-28.066802920951215,39.969336325185,215.3520623567,-2.9132059213875,-0.060447045677983334,-0.45914089298788446,-33.22953552440068 diff --git a/test/Spinning_disk_60k.csv b/test/Spinning_disk_60k.csv new file mode 100644 index 0000000..4ddc5b9 --- /dev/null +++ b/test/Spinning_disk_60k.csv @@ -0,0 +1,38 @@ +,elem_5_xx,elem_5_yy,elem_5_zz,elem_5_yz,elem_5_xz,elem_5_xy,elem_11_xx,elem_11_yy,elem_11_zz,elem_11_yz,elem_11_xz,elem_11_xy,elem_17_xx,elem_17_yy,elem_17_zz,elem_17_yz,elem_17_xz,elem_17_xy,elem_23_xx,elem_23_yy,elem_23_zz,elem_23_yz,elem_23_xz,elem_23_xy,elem_29_xx,elem_29_yy,elem_29_zz,elem_29_yz,elem_29_xz,elem_29_xy,elem_35_xx,elem_35_yy,elem_35_zz,elem_35_yz,elem_35_xz,elem_35_xy,elem_41_xx,elem_41_yy,elem_41_zz,elem_41_yz,elem_41_xz,elem_41_xy,elem_47_xx,elem_47_yy,elem_47_zz,elem_47_yz,elem_47_xz,elem_47_xy +0,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +1,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +2,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +3,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +4,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +5,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +6,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +7,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +8,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +9,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +10,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +11,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +12,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +13,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +14,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +15,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +16,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +17,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +18,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +19,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +20,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +21,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +22,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +23,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +24,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +25,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +26,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +27,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +28,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +29,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +30,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +31,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +32,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +33,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +34,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +35,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 +36,40.094102266233,146.6593773135,1.9746104000539,-0.09429656580866987,-0.7162535277216281,-20.19078316760826,64.711665594105,112.90518221374,-0.82256892579855,0.07239166008148283,0.5498692495524707,-9.131162507807012,67.279467085128,99.35076004156,0.083788310671134,-0.015128020460093573,-0.11490872359407067,-6.076505894610198,62.445462357005,89.955704448904,0.11044365688197,0.0008726371026785724,0.006628336967766542,-5.212329557923803,53.48459077201,81.549437543068,0.098817442629487,0.0010623132095882533,0.008069069972198209,-5.317409780687637,41.49665358068,73.02392298294,0.099927557142893,-0.005548109857958375,-0.042142078261484674,-5.973430464443632,26.938987842032,63.972609917753,0.36844479360763,0.027374628040743303,0.2079309429069257,-7.016711897665637,9.9923499846433,53.838101275161,-0.72830263941232,-0.015111785459712533,-0.11478540594343427,-8.307397102714924 diff --git a/test/Spinning_disk_60k_70k.csv b/test/Spinning_disk_60k_70k.csv new file mode 100644 index 0000000..1d59fad --- /dev/null +++ b/test/Spinning_disk_60k_70k.csv @@ -0,0 +1,38 @@ +,elem_5_xx,elem_5_yy,elem_5_zz,elem_5_yz,elem_5_xz,elem_5_xy,elem_11_xx,elem_11_yy,elem_11_zz,elem_11_yz,elem_11_xz,elem_11_xy,elem_17_xx,elem_17_yy,elem_17_zz,elem_17_yz,elem_17_xz,elem_17_xy,elem_23_xx,elem_23_yy,elem_23_zz,elem_23_yz,elem_23_xz,elem_23_xy,elem_29_xx,elem_29_yy,elem_29_zz,elem_29_yz,elem_29_xz,elem_29_xy,elem_35_xx,elem_35_yy,elem_35_zz,elem_35_yz,elem_35_xz,elem_35_xy,elem_41_xx,elem_41_yy,elem_41_zz,elem_41_yz,elem_41_xz,elem_41_xy,elem_47_xx,elem_47_yy,elem_47_zz,elem_47_yz,elem_47_xz,elem_47_xy +0,47.054826302909,172.12086404171,2.3174218690851,-0.11066736193433745,-0.8406020695764588,-23.696098456520886,75.946236781895,132.50661412432,-0.96537484938294,0.0849595525968998,0.6453318709887962,-10.716420656447047,78.959833452774,116.59901313373,0.09833477187843,-0.017754391142881663,-0.13485798961959972,-7.1314461037036025,73.286598738184,105.57288499977,0.12961774430285,0.0010241353632839086,0.007779080337454057,-6.117240394553852,62.770033155038,95.707208834161,0.11597310654483,0.001246741058381568,0.00946993856681613,-6.240563560377932,48.700874092382,85.701582468046,0.1172759478713,-0.006511315419892757,-0.049458350736640254,-7.0104757811122065,31.615856746371,75.078873889576,0.43241037469644,0.032127128179903236,0.2440297663218094,-8.234880964006063,11.727118609732,63.184916501031,-0.8547430242669,-0.017735337502080208,-0.13471326304526499,-9.74964160703888 +1,48.320287254463,176.74976716838,2.3797450584672,-0.11364357570960994,-0.8632086578308045,-24.333365443208315,77.988683958299,136.0701581716,-0.99133699290025,0.08724439786110717,0.6626869935410893,-11.004620889651482,81.083326278386,119.73474882408,0.10097932135103,-0.018231865862109294,-0.13848477004195214,-7.323234434439499,75.257519392869,108.41209139193,0.13310359682014,0.0010516777518419982,0.007988285753240294,-6.281753356997795,64.458128346353,98.281094345844,0.11909200966517,0.0012802700670089726,0.009724616797023754,-6.408393093587842,50.01060275223,88.006383372115,0.12042988856938,-0.0066864263695455405,-0.05078845047632423,-7.1990108178140115,32.466112403042,77.097994790481,0.44403932859728,0.0329911337657425,0.2505925390577503,-8.456344333049877,12.042499877296,64.884169287557,-0.87772990907997,-0.018212299946050923,-0.13833615100145355,-10.011841933406401 +2,49.563331472413,181.29667259002,2.440964237939,-0.11656706805145842,-0.8854147868251148,-24.959343700663645,79.994950645833,139.57057658694,-1.0168392362175,0.0894887687127994,0.6797346826743799,-11.287715861605074,83.169202949041,122.8149372019,0.10357702460811,-0.01870088243476822,-0.14204730458363607,-7.511625372019768,77.193526599318,111.2010032759,0.13652770028085,0.00107873226070104,0.008193785208582055,-6.443352089812174,66.116320138898,100.8093853184,0.12215566358742,0.0013132051376963459,0.009974783520073369,-6.573249646268174,51.297130505079,90.270356378122,0.12352795945231,-0.0068584353554483534,-0.052094988429931086,-7.384206090394139,33.301306388781,79.08134841029,0.45546228478484,0.033839833976009155,0.25703905717920134,-8.673884635945258,12.352294389657,66.553321025595,-0.90030959892756,-0.018680813160804836,-0.14189486233228454,-10.269397567500022 +3,50.744008445427,185.61544617206,2.4991118681152,-0.11934388006208457,-0.906506767917056,-25.553914757320054,81.900556935329,142.89536854457,-1.0410619557057,0.09162053276426778,0.6959270382667375,-11.55660711242528,85.150424950351,125.74058331915,0.10604439304092,-0.019146367043503566,-0.1454310961137427,-7.690564172994609,79.032398535612,113.84998711205,0.13978000610712,0.0011044293748144263,0.008388974132375712,-6.596842931011682,67.691315491195,103.21082437344,0.12506560459303,0.0013444877780951292,0.010212398636918465,-6.729834852759623,52.519109313955,92.420739089375,0.12647059077764,-0.00702181412474999,-0.05333597347439709,-7.560109562409048,34.094596195071,80.965191249107,0.46631211712647,0.03464595235060246,0.26316213420606094,-8.88051029140175,12.646545585361,68.138726430575,-0.92175639799327,-0.01912581968475441,-0.14527502246031965,-10.514030865363083 +4,51.823102046807,189.56264006551,2.5522565784416,-0.12188178002685603,-0.9257840320582605,-26.09732996522432,83.642208208985,145.93410124583,-1.0632005948256,0.09356888359080233,0.7107262320783284,-11.802363432577657,86.961186093065,128.41451198671,0.10829947369337,-0.019553522939733115,-0.1485237521908636,-7.854107394009896,80.713057162425,116.27105703471,0.14275248924054,0.0011279155517198898,0.008567369346417254,-6.737127689983228,69.130801011721,105.40564783304,0.12772517963524,0.001373078896223109,0.01042956978670339,-6.8729477432636426,53.635951213969,94.386106651747,0.12916004348259,-0.007171136090981912,-0.05447018637337283,-7.720878608888477,34.819632740489,82.686951560911,0.47622844885139,0.035382713720906095,0.2687583924652164,-9.069358238612951,12.915479925289,69.587726340952,-0.94135795220806,-0.01953253861168566,-0.14836435956048766,-10.73761634417946 +5,52.763725172252,193.003325704,2.5985817011281,-0.12409401388668705,-0.9425876164864166,-26.571013536872368,85.160368878658,148.58290042988,-1.0824983795332,0.0952672198830252,0.7236263770580774,-12.016584031879248,88.53958837723,130.74531919106,0.1102651796672,-0.019908432138702872,-0.15121955520657124,-7.996664569303632,82.178051828634,118.38145260615,0.14534354007042,0.0011483879478106308,0.008722872672133758,-6.8594109546074264,70.385570169411,107.31882913604,0.13004347497825,0.0013980011588218759,0.010618873283008548,-6.997696230503971,54.609478734859,96.099276090256,0.13150438263773,-0.0073012968986594425,-0.055458855787475884,-7.8610175947215915,35.45163180029,84.18777369879,0.48487230608223,0.036024933055247614,0.27363653271893,-9.233973009787364,13.149904315178,70.85078899138,-0.95844421363086,-0.019887066927666924,-0.15105726955079313,-10.932511088798437 +6,53.532934983261,195.81700216758,2.6364648213858,-0.12590310400302482,-0.9563290201035552,-26.958375957233233,86.401869379621,150.74899890666,-1.0982794559389,0.0966560619288009,0.7341756797855279,-12.19176639998925,89.830352435576,132.65137457138,0.11187266790376,-0.020198664901349587,-0.15342409184421205,-8.113243010644378,83.376074968529,120.10726279999,0.14746241401683,0.0011651295992879864,0.008850038054305759,-6.9594100768344065,71.411677991307,108.88336416441,0.13193929868412,0.0014183817722193566,0.010773679274527983,-7.09971132842363,55.405596648343,97.50024817351,0.13342150385101,-0.007407737998433373,-0.05626735625256077,-7.975618522356623,35.968459277824,85.41509533443,0.49194096055846,0.03655011832167349,0.2776257110056191,-9.368589407728807,13.341608660861,71.883678951583,-0.97241678073119,-0.020176988192352002,-0.1532594403465915,-11.091889425922696 +7,54.103260037413,197.90318224324,2.6645529869635,-0.12724444077917826,-0.9665174844957802,-27.245583023806986,87.322370952287,152.35503696501,-1.1099802208954,0.09768580884660044,0.7419973840325429,-12.321654100557305,90.787380116164,134.06460555513,0.11306452809531,-0.02041385584728659,-0.15505862960169264,-8.199679253306682,84.264340565691,121.38685229327,0.14903343756442,0.001177542582385209,0.00894432391088901,-7.033553703110801,72.172478218565,110.04337735203,0.13334494326956,0.0014334928250703419,0.010888459062686298,-7.175349685366766,55.99587252065,98.538988797895,0.13484293948598,-0.007486657971440784,-0.056866813075391286,-8.060588551748902,36.351657275038,86.325084089519,0.49718196322632,0.03693951314998495,0.2805834584125532,-9.468399762877954,13.483746462136,72.649507746369,-0.98277663969051,-0.020391948203933197,-0.15489222397575234,-11.210059341847114 +8,54.454029442451,199.18625430612,2.6818281690464,-0.12806940876812206,-0.9727837384095737,-27.422225187907582,87.888510886812,153.34280527343,-1.1171765915108,0.09831913838027359,0.7468079995494978,-12.401539476601236,91.375984856018,134.93379092182,0.11379756298974,-0.02054620567059469,-0.156063926182454,-8.252840497322644,84.810654273472,122.17384357473,0.14999967086865,0.0011851769583597139,0.009002312914197383,-7.0791545678835766,72.640396366421,110.7568251178,0.13420946287596,0.0014427866186059837,0.010959052557562613,-7.221869860552332,56.358912360894,99.177849791635,0.13571717124978,-0.007535196475988437,-0.05723549949783167,-8.112848024483828,36.58733714307,86.884758282109,0.50040535915066,0.03717900425028501,0.28240257419649684,-9.529786543284532,13.571166068612,73.120518634877,-0.98914830738608,-0.020524155954761338,-0.1558964417507515,-11.28273787978924 +9,54.572404006967,199.61925414689,2.6876580452194,-0.12834781168641352,-0.9748984185093612,-27.48183682704258,88.079566797733,153.67614860835,-1.119605159127,0.09853286883252635,0.7484314436458812,-12.428498488535066,91.574621991154,135.22711593167,0.11404494124984,-0.020590869914361386,-0.15640318480607723,-8.270780884991693,84.995019404174,122.43943044974,0.1503257468109,0.001187753361903098,0.009021882542424793,-7.094543545407367,72.79830525491,110.99759317579,0.13450121322784,0.0014459230191432241,0.010982875815778908,-7.237569078830188,56.481427843249,99.393446963807,0.13601219915204,-0.007551576815489304,-0.05735992055600815,-8.130484090236548,36.666872305719,87.07363219127,0.50149316244211,0.03725982558627913,0.2830164733710056,-9.550502812252168,13.60066766628,73.279471234364,-0.99129856145466,-0.02056877224998914,-0.15623533632436584,-11.30726479148099 +10,54.454029442825,199.18625430618,2.6818281692863,-0.1280694087772678,-0.9727837384722233,-27.422225187655858,87.888510887133,153.34280527343,-1.1171765916163,0.0983191383695185,0.7468079995856027,-12.401539476495026,91.375984856028,134.93379092188,0.11379756293962,-0.020546205645884136,-0.15606392617501522,-8.25284049730143,84.810654273509,122.17384357483,0.14999967093571,0.0011851769873204032,0.009002312919287703,-7.079154567782036,72.640396366175,110.75682511781,0.13420946280087,0.0014427866378812903,0.010959052532728457,-7.221869860398041,56.358912360425,99.177849791654,0.13571717121676,-0.007535196465214252,-0.057235499507593976,-8.112848024230118,36.587337142902,86.884758282236,0.50040535942878,0.03717900420875663,0.2824025742584535,-9.529786542932252,13.571166068198,73.120518634418,-0.9891483076399,-0.020524155916881625,-0.15589644180954038,-11.282737879426918 +11,54.103260038124,197.90318224338,2.6645529874056,-0.12724444082267947,-0.9665174846305973,-27.245583023323327,87.322370952955,152.35503696508,-1.10998022106,0.09768580881449639,0.7419973841358797,-12.321654100338527,90.787380116345,134.06460555538,0.11306452812872,-0.020413855843783583,-0.15505862958527364,-8.199679253194534,84.26434056565,121.38685229349,0.14903343762716,0.0011775425890550642,0.008944323887616854,-7.0335537029232755,72.172478218014,110.04337735213,0.13334494322632,0.001433492823745365,0.010888459041577321,-7.175349685060164,55.995872519969,98.538988798064,0.13484293962159,-0.007486657976402129,-0.05686681308014163,-8.060588551234835,36.351657274428,86.325084089558,0.49718196355385,0.03693951306454382,0.28058345853171485,-9.468399762235618,13.483746461329,72.649507745494,-0.98277664024221,-0.02039194811391143,-0.15489222410747217,-11.210059341160797 +12,53.532934984129,195.81700216764,2.6364648218643,-0.12590310404999225,-0.9563290203040624,-26.958375956564307,86.401869380509,150.74899890661,-1.0982794562968,0.09665606191832582,0.7341756799085503,-12.19176639966794,89.83035243542,132.65137457131,0.11187266757126,-0.020198664861190166,-0.1534240918100729,-8.113243010508615,83.376074968438,120.10726280019,0.14746241399698,0.0011651296215659513,0.008850038034661058,-6.959410076528229,71.411677990317,108.88336416432,0.13193929839196,0.0014183817853602291,0.010773679233731032,-7.099711327990173,55.405596647267,97.5002481736,0.13342150391617,-0.007407737978909588,-0.056267356254848966,-7.975618521611615,35.968459277041,85.415095334494,0.49194096113425,0.03655011821773304,0.2776257111710256,-9.368589406790335,13.34160865972,71.883678950425,-0.97241678144091,-0.02017698805024758,-0.15325944053519103,-11.09188942488339 +13,52.763725173326,193.00332570399,2.5985817017118,-0.12409401395620695,-0.9425876167382741,-26.571013536016764,85.160368879794,148.58290042987,-1.0824983799535,0.09526721987184726,0.7236263772162006,-12.01658403144254,88.539588377452,130.74531919138,0.11026517957562,-0.019908432087457427,-0.15121955517694347,-7.996664569145947,82.178051828589,118.38145260655,0.14534354016512,0.0011483879958893665,0.008722872652835542,-6.859410954252741,70.385570168529,107.31882913628,0.13004347495502,0.0013980011884762373,0.010618873238538178,-6.997696229932772,54.609478733407,96.099276090319,0.13150438266337,-0.007301296880396288,-0.05545885580208754,-7.861017593746491,35.451631799177,84.187773698805,0.48487230673711,0.036024932907436844,0.2736365329233263,-9.233973008596738,13.149904313675,70.850788989858,-0.95844421461352,-0.019887066755483594,-0.15105726977955633,-10.932511087487885 +14,51.823102048124,189.56264006557,2.5522565791465,-0.12188178009937124,-0.9257840323633062,-26.09732996419477,83.64220821033,145.93410124585,-1.0632005952677,0.09356888356322093,0.7107262322547657,-11.802363432104462,86.961186093177,128.41451198691,0.10829947343019,-0.01955352289179552,-0.14852375211682953,-7.85410739380837,80.713057162214,116.27105703497,0.14275248919757,0.0011279155854261144,0.008567369286175717,-6.737127689572256,69.13080101062,105.40564783333,0.12772517953322,0.001373078919624525,0.010429569730267924,-6.872947742599812,53.635951212337,94.3861066519,0.12916004359412,-0.007171136072823975,-0.05447018635662854,-7.720878607741268,34.81963273928,82.686951560975,0.47622844971803,0.03538271354963918,0.26875839271761104,-9.069358237167483,12.915479923629,69.587726339194,-0.9413579532238,-0.019532538412398926,-0.14836435984960947,-10.737616342628632 +15,50.744008446878,185.61544617211,2.4991118689224,-0.11934388014059463,-0.9065067682676676,-25.55391475619434,81.900556936985,142.89536854469,-1.0410619560998,0.09162053275542188,0.6959270384757159,-11.556607111862846,85.150424950566,125.74058331949,0.10604439290628,-0.019146366988936136,-0.14543109604267845,-7.69056417272902,79.032398535407,113.84998711239,0.13978000606273,0.0011044294109406531,0.00838897407311578,-6.596842930538768,67.691315489891,103.21082437371,0.12506560445269,0.0013444877916722866,0.010212398583201965,-6.7298348520093825,52.519109312269,92.420739089677,0.12647059103571,-0.007021814123547768,-0.05333597347487651,-7.560109561165954,34.094596193578,80.965191249063,0.46631211793127,0.03464595215964402,0.2631621344911806,-8.880510289823912,12.646545583454,68.138726428639,-0.92175639921196,-0.0191258194514813,-0.14527502277659435,-10.51403086361865 +16,49.563331473971,181.29667259009,2.4409642387591,-0.1165670681661667,-0.8854147871765468,-24.959343699444595,79.994950647468,139.57057658691,-1.0168392367924,0.0894887686802838,0.6797346828930597,-11.287715861028923,83.169202949053,122.81493720208,0.10357702422502,-0.018700882379893903,-0.1420473045151174,-7.51162537176238,77.19352659926,111.20100327643,0.13652770041745,0.0010787323058714454,0.008193785160112996,-6.4433520892907525,66.116320137399,100.80938531858,0.12215566329613,0.0013132051628949445,0.009974783449979855,-6.573249645468577,51.297130503158,90.270356378355,0.12352795959276,-0.006858435334806634,-0.05209498843364339,-7.384206089049081,33.301306387364,79.081348410422,0.45546228580536,0.03383983377400289,0.25703905748454425,-8.673884634228687,12.352294387686,66.553321023519,-0.90030960014376,-0.018680812925898304,-0.14189486267057855,-10.269397565660553 +17,48.320287256115,176.74976716854,2.3797450594267,-0.11364357582090573,-0.8632086582085551,-24.333365441941183,77.988683959897,136.07015817154,-0.99133699356389,0.08724439781516928,0.6626869937879402,-11.00462088904521,81.083326278553,119.73474882441,0.10097932109007,-0.018231865825435907,-0.138484769979731,-7.323234434191586,75.257519392824,108.41209139252,0.13310359698384,0.0010516777844410351,0.007988285695074258,-6.281753356517528,64.458128344931,98.281094346077,0.11909200947237,0.0012802700956503327,0.009724616716734184,-6.408393092780325,50.010602750111,88.006383372275,0.12042988865054,-0.006686426337761798,-0.050788450469110326,-7.19901081638806,32.466112401615,77.097994790623,0.44403932967483,0.03299113356488882,0.2505925393882379,-8.456344331246754,12.042499874903,64.884169285135,-0.87772991064648,-0.018212299685890783,-0.13833615136828356,-10.011841931495656 +18,47.054826303323,172.12086404162,2.3174218692594,-0.11066736197841141,-0.8406020696981237,-23.69609845601884,75.946236782726,132.50661412446,-0.96537484944588,0.08495955256860704,0.6453318710879891,-10.716420656219501,78.959833452635,116.59901313366,0.098334771578512,-0.017754391130641645,-0.13485798961958279,-7.131446103649721,73.286598738056,105.5728849999,0.12961774425523,0.0010241353816415318,0.0077790803190080455,-6.117240394361377,62.770033154477,95.707208834212,0.11597310641627,0.001246741075998285,0.009469938551853749,-6.240563560076279,48.700874091541,85.701582468127,0.11727594791594,-0.006511315399065917,-0.049458350745580915,-7.010475780595453,31.615856745767,75.078873889556,0.43241037504357,0.03212712811353136,0.2440297664482118,-8.234880963301643,11.727118609047,63.184916500332,-0.85474302465337,-0.017735337402009044,-0.13471326318616025,-9.749641606274214 +19,45.806156543318,167.553381067,2.2559256353343,-0.1077306390278912,-0.8182954442920822,-23.067287260650463,73.930890500117,128.99035415551,-0.93975719287853,0.08270502455950227,0.6282070306458842,-10.432044504781702,76.864516903135,113.50488500287,0.095725312437008,-0.017283251959183028,-0.13127933239013892,-6.942202580815513,71.341829904369,102.77135156866,0.12617814473458,0.0009969584312858116,0.007572650858152131,-5.954910327568654,61.104337020882,93.167475784815,0.11289558769809,0.0012136569403224198,0.009218639643003347,-6.074960929776647,47.408524006652,83.427363587096,0.11416385636674,-0.006338527969274932,-0.048145899890263535,-6.824442385091507,30.776882991833,73.086544370546,0.42093572289413,0.03127458700916744,0.2375540738615755,-8.016356156268806,11.415922085058,61.508210820348,-0.83206114799848,-0.01726470385920442,-0.13113844650186357,-9.490920373987324 +20,44.611460637582,163.18332792498,2.1970875810272,-0.10492085617209954,-0.796953024595447,-22.46565648171756,72.002657728795,125.62608481716,-0.91524686171185,0.0805479487094934,0.6118224128447809,-10.159960536252706,74.859770586064,110.54450081859,0.093228647123967,-0.01683247782638637,-0.12785536294156527,-6.761139125053485,69.48112386589,100.09091465378,0.12288722216675,0.0009709562000457899,0.007375144345992469,-5.79959699146613,59.510640741633,90.737522908395,0.10995109490196,0.0011820028792818213,0.008978203157478474,-5.916516487000694,46.172035861914,81.251448006962,0.11118628509924,-0.006173209283470163,-0.04689017983059443,-6.6464502986678635,29.974173948614,71.180333461438,0.40995706367623,0.030458897071231693,0.23135829362547253,-7.807277102289834,11.118177056712,59.903980883287,-0.81035969744891,-0.016814413502256192,-0.12771815157159905,-9.243382388602875 +21,43.504857576789,159.13550775544,2.1425880465398,-0.10231825722306542,-0.777184322906823,-21.90838792625303,70.216606335377,122.50988534744,-0.89254383949308,0.07854992834176443,0.5966459414647124,-9.90793912142712,73.002847497537,107.80240537447,0.090916077534905,-0.016414942270523685,-0.12468386543768067,-6.593426677546051,67.757620011816,97.608124112072,0.11983896114761,0.0009468712896228943,0.007192201273902099,-5.655735936713265,58.034458248226,88.486746557386,0.10722371915885,0.0011526828799156572,0.008755495657066799,-5.76975520281606,45.026722180717,79.235977099302,0.10842827007347,-0.006020080646091512,-0.04572705233822207,-6.48158274808579,29.230653961603,69.414680112472,0.39978793377754,0.029703353364652452,0.22561936930754914,-7.61361483225544,10.842386742348,58.418041448687,-0.79025843835128,-0.016397326031394856,-0.12455005763406121,-9.014097018962888 +22,42.516629080178,155.52068742653,2.0939183879168,-0.09999406118457992,-0.7595303013147622,-21.41073101010169,68.621610852618,119.72702921248,-0.8722693849628,0.07676563845534888,0.5830929141885368,-9.682876718580335,71.344561544106,105.35363494007,0.08885088610656,-0.016042070956343146,-0.12185162656056878,-6.443654617704554,66.218481288577,95.390920445433,0.11711677614188,0.0009253627566652849,0.007028827829001388,-5.527263859535103,56.716184643549,86.476738264417,0.10478809379383,0.0011264992741594913,0.008556611423854646,-5.638693136974762,44.003923981995,77.43610336367,0.10596528272469,-0.0058833323447083155,-0.04468834588377891,-6.334351263404364,28.566669137188,67.837900672424,0.39070660684331,0.029028631005976427,0.2204943441287934,-7.440668831393178,10.596098025502,57.091054613513,-0.77230743355552,-0.016024854881826686,-0.1217208582399428,-8.809338561223669 +23,41.672702579473,152.43370634757,2.0523555157169,-0.09800924629494343,-0.7444541355027169,-20.98574239541363,67.259518015757,117.35052818273,-0.85495542413301,0.07524189214457953,0.5715189118896239,-9.490678126164141,69.928419967049,103.26243612254,0.087087255867351,-0.01572364663501621,-0.11943295370932257,-6.315752406051686,64.90408895777,93.497474811845,0.11479208676948,0.0009069949326141484,0.006889310322032135,-5.417551388279034,55.590406512333,84.760233153649,0.10270812057151,0.0011041390178111242,0.008386768455642726,-5.526768869485633,43.130475677892,75.899048777286,0.10386194330653,-0.005766552161016208,-0.043801312275603785,-6.2086186498886065,27.999639962153,66.491363955881,0.38295134341749,0.028452432218599062,0.2161176796327651,-7.292976558028247,10.385772604245,55.957835565534,-0.75697765020139,-0.015706772285855,-0.11930478102428917,-8.634479113932382 +24,40.994357873346,149.95240344855,2.0189474472345,-0.09641386010992906,-0.7323359743998475,-20.644138266770334,66.164673305547,115.44030627209,-0.84103853248739,0.07401711103387126,0.5622157756440043,-9.336189675391696,68.790131097992,101.58153897544,0.085669656843811,-0.015467698451696137,-0.1174888342585273,-6.212945125868324,63.847585721428,91.975530874035,0.11292351096333,0.000892230935728442,0.006777166733172987,-5.329364947858449,54.685510606332,83.380513291993,0.10103624659718,0.0010861659275935842,0.008250249347166474,-5.436804596266314,42.428401465327,74.663570520524,0.10217128721644,-0.005672684711686813,-0.04308831823974544,-6.107555283998544,27.543864205663,65.409023191987,0.37671769379165,0.027989285961297645,0.21259973441831562,-7.1742621063887935,10.216713881899,55.046958680663,-0.74465563225421,-0.015451098804191267,-0.11736274793307672,-8.493927797884714 +25,40.498106731312,148.13717678529,1.9945073772704,-0.09524673636842405,-0.7234707894527013,-20.394233701398356,65.363726629114,114.04286070179,-0.83085746468272,0.07312110783620168,0.5554099556315097,-9.223171810801997,67.957402330278,100.35185866482,0.084632595531446,-0.015280456514752995,-0.11606659053987077,-6.137735236694783,63.074688206439,90.862134675046,0.11155653208167,0.0008814301682097311,0.006695126744618846,-5.264851107990938,54.023523237951,82.371162808417,0.099813167211222,0.0010730175078151757,0.008150377169121743,-5.370990161577386,41.914790720687,73.759741699714,0.10093446784823,-0.005604014874613238,-0.04256671896400932,-6.03362117601011,27.21043602766,64.617223926549,0.37215739348784,0.02765046579577049,0.2100261397296799,-7.087415136646611,10.093036961634,54.380595856075,-0.73564131355109,-0.01526405783176831,-0.11594203050533086,-8.391105810124115 +26,40.195685638581,147.03095700208,1.9796133203553,-0.09453547788393596,-0.7180682448647543,-20.241939015765027,64.875620610794,113.19124147034,-0.82465300621319,0.07257507329144154,0.5512624114744324,-9.154297438178137,67.449927944079,99.602477491648,0.084000598588955,-0.015166349153982666,-0.11519985902742143,-6.091901474463686,62.60367566645,90.183618362643,0.11072347958218,0.0008748480513120681,0.0066451306344503394,-5.225535639906116,53.620100603364,81.756053138881,0.0990678088317,0.0010650047170658178,0.008089513943896433,-5.330882096273996,41.601790488995,73.208938132194,0.10018073611216,-0.0055621666809603,-0.042248850438794734,-5.988564889412294,27.00724110193,64.134692444638,0.36937829447193,0.027443984953944872,0.20845776182675688,-7.034489605147958,10.017666839392,53.974506768748,-0.73014788494731,-0.015150072950710103,-0.1150762291258692,-8.328444920876738 +27,40.094102266872,146.6593773136,1.9746104004518,-0.09429656585830734,-0.7162535278467295,-20.190783167152883,64.711665594885,112.90518221385,-0.82256892586123,0.07239166007388143,0.5498692496326425,-9.13116250760761,67.279467085137,99.350760041611,0.0837883105274,-0.015128020435152503,-0.11490872356157206,-6.076505894514175,62.445462357008,89.955704449119,0.11044365694635,0.0008726371152981657,0.0066283369296493855,-5.212329557731753,53.484590771449,81.549437543185,0.098817442552886,0.0010623132112295894,0.008069069962632893,-5.317409780395742,41.496653580059,73.023922983069,0.099927557223035,-0.005548109850920401,-0.04214207826233179,-5.973430463946395,26.938987841346,63.972609917664,0.36844479386504,0.027374627974313444,0.20793094300208811,-7.016711897026837,9.9923499837407,53.838101274172,-0.72830264006106,-0.015111785378434852,-0.1147854060528166,-8.30739710201404 +28,40.195685638318,147.03095700205,1.9796133201915,-0.0945354778661508,-0.7180682447958255,-20.241939015979987,64.875620610543,113.19124147038,-0.82465300612298,0.07257507329530234,0.5512624114322323,-9.154297438288587,67.449927944,99.602477491534,0.084000598550536,-0.015166349156307631,-0.11519985904199916,-6.0919014745017295,62.603675666559,90.183618362652,0.11072347966399,0.0008748480506123151,0.006645130650030872,-5.225535639975555,53.620100603575,81.756053138854,0.099067808830997,0.001065004705771908,0.008089513956774121,-5.330882096408064,41.601790489276,73.208938132172,0.10018073605956,-0.0055621666903505375,-0.04224885044318163,-5.9885648896438015,27.007241102156,64.134692444561,0.36937829426275,0.027443984987887415,0.2084577617751805,-7.034489605435044,10.017666839911,53.974506769227,-0.73014788456208,-0.015150072974183219,-0.11507622906922713,-8.328444921166227 +29,40.498106730656,148.13717678513,1.9945073768272,-0.09524673634266416,-0.7234707893396207,-20.394233701797166,65.363726628487,114.0428607017,-0.83085746457856,0.07312110784834835,0.5554099555588333,-9.223171811015684,67.957402330328,100.35185866474,0.084632595658967,-0.015280456523654055,-0.11606659056674506,-6.137735236767332,63.074688206373,90.862134674783,0.11155653193169,0.0008814301590545367,0.006695126760620814,-5.264851108156683,54.023523238345,82.371162808197,0.099813167204917,0.0010730175040677926,0.008150377210698773,-5.370990161866593,41.914790721425,73.759741699707,0.1009344678772,-0.005604014870698554,-0.04256671896105644,-6.033621176440738,27.210436028159,64.617223926536,0.37215739317856,0.027650465874938166,0.2100261396153973,-7.087415137183588,10.093036962299,54.380595856817,-0.73564131309671,-0.015264057904492829,-0.11594203039132545,-8.391105810730105 +30,40.994357872678,149.95240344862,2.018947446903,-0.0964138600875364,-0.7323359742388534,-20.644138267350158,66.164673304723,115.44030627209,-0.8410385322434,0.07401711103769955,0.5622157755466357,-9.336189675688823,68.790131097923,101.58153897527,0.085669656974244,-0.015467698473021064,-0.11748883428431547,-6.212945126015827,63.847585721566,91.975530873795,0.11292351097782,0.0008922309308757097,0.006777166751796624,-5.329364948113997,54.685510606994,83.380513291837,0.10103624665869,0.0010861659352088416,0.00825024937323538,-5.436804596638252,42.428401466314,74.663570520464,0.10217128719588,-0.005672684713967232,-0.04308831823930138,-6.1075552846278685,27.543864206506,65.409023192035,0.37671769341447,0.02798928605701162,0.21259973427427795,-7.174262107223038,10.216713882799,55.046958681643,-0.74465563172401,-0.015451098911421183,-0.11736274776964453,-8.493927798777932 +31,41.672702578384,152.43370634747,2.0523555151153,-0.09800924623383384,-0.744454135259755,-20.985742396175894,67.259518014731,117.35052818274,-0.85495542377582,0.07524189216798334,0.5715189117298886,-9.490678126549373,69.928419966943,103.26243612233,0.087087256001822,-0.015723646666973193,-0.11943295374400756,-6.315752406183349,64.904088958045,93.497474811757,0.11479208690167,0.0009069948935008196,0.006889310356089227,-5.417551388607274,55.590406513325,84.760233153633,0.10270812078818,0.0011041390082159681,0.008386768487279955,-5.526768870011861,43.130475678967,75.899048777037,0.10386194310236,-0.005766552159003216,-0.04380131227101183,-6.208618650733032,27.999639962999,66.49136395571,0.38295134268644,0.028452432344589936,0.21611767943821175,-7.292976559103192,10.385772605664,55.957835566994,-0.75697764923824,-0.015706772431055133,-0.11930478080680856,-8.634479115113109 +32,42.516629079015,155.52068742652,2.0939183872837,-0.09999406112169834,-0.7595303010353418,-21.410731011026584,68.621610851466,119.72702921258,-0.87226938442989,0.0767656384793877,0.5830929140124248,-9.682876719059045,71.344561544086,105.35363493988,0.088850886329057,-0.016042070987878694,-0.12185162661958532,-6.44365461789618,66.218481288443,95.390920444929,0.11711677592087,0.0009253627200033539,0.0070288278753359735,-5.527263859912698,56.716184644491,86.476738264116,0.10478809378239,0.0011264992548479808,0.00855661148549088,-5.638693137565761,44.003923983598,77.436103363633,0.10596528277405,-0.005883332359148426,-0.04468834589003822,-6.334351264403646,28.566669138356,67.837900672364,0.39070660614982,0.029028631156212573,0.22049434390012917,-7.440668832692698,10.596098027031,57.091054615142,-0.77230743259471,-0.016024855055982844,-0.12172085798682121,-8.809338562634771 +33,43.504857575415,159.13550775535,2.1425880457207,-0.10231825713793684,-0.7771843226103473,-21.90838792733066,70.216606333904,122.50988534735,-0.89254383909581,0.07854992839105684,0.5966459412834385,-9.90793912194656,73.002847497446,107.80240537417,0.090916077745601,-0.016414942298141864,-0.12468386550344444,-6.593426677726505,67.75762001206,97.60812411182,0.1198389612285,0.0009468712474660367,0.00719220132611147,-5.655735937128337,58.034458249629,88.486746557307,0.10722371944745,0.0011526828542158612,0.008755495725917078,-5.76975520351454,45.026722182235,79.235977098977,0.10842826976658,-0.006020080664348443,-0.045727052350339054,-6.48158274924191,29.230653962801,69.414680112312,0.39978793284799,0.029703353531525412,0.22561936904959656,-7.6136148337481435,10.84238674423,58.418041450642,-0.79025843712356,-0.01639732623600044,-0.12455005734157074,-9.014097020573393 +34,44.611460636136,163.18332792499,2.1970875802382,-0.10492085609684922,-0.7969530242490921,-22.465656482860243,72.002657727232,125.62608481716,-0.91524686115591,0.080547948735085,0.6118224126317438,-10.159960536818957,74.859770585924,110.54450081827,0.093228647355786,-0.016832477874821773,-0.127855363009555,-6.7611391252873965,69.481123865982,100.09091465334,0.12288722210197,0.0009709561656403781,0.007375144382765982,-5.799596991969731,59.510640743007,90.73752290822,0.10995109518465,0.0011820028695736695,0.00897820323657558,-5.916516487765218,46.17203586394,81.251448006842,0.11118628511199,-0.006173209300713385,-0.04689017984339589,-6.64645029991223,29.974173949854,71.180333461227,0.40995706261521,0.0304588972606854,0.23135829332947763,-7.807277103939089,11.118177058767,59.90398088543,-0.81035969612336,-0.016814413724331564,-0.12771815123848954,-9.24338239036244 +35,45.806156541621,167.55338106683,2.2559256344079,-0.10773063893132305,-0.8182954439193096,-23.067287261883656,73.930890498484,128.99035415548,-0.93975719232442,0.082705024598997,0.6282070304083529,-10.432044505387692,76.864516902969,113.50488500261,0.095725312718409,-0.017283252009349423,-0.13127933245652776,-6.942202581031322,71.341829904453,102.77135156813,0.12617814461886,0.0009969583791604453,0.007572650921411884,-5.954910328093469,61.104337022384,93.167475784682,0.11289558801363,0.001213656926289603,0.009218639703733213,-6.074960930590384,47.408524008567,83.427363586883,0.11416385621557,-0.006338527981462058,-0.04814589988919439,-6.824442386418462,30.776882993442,73.086544370541,0.42093572200325,0.031274587201813024,0.23755407354917574,-8.016356158019603,11.41592208714,61.508210822562,-0.83206114667162,-0.017264704106572996,-0.13113844615735548,-9.490920375883077 +36,47.054826301651,172.12086404149,2.3174218683323,-0.11066736189237772,-0.8406020693209528,-23.696098457298707,75.946236780985,132.50661412438,-0.9653748489613,0.08495955260424663,0.6453318708335014,-10.716420656842887,78.959833452603,116.59901313348,0.098334772006002,-0.017754391176651667,-0.1348579896594664,-7.131446103865247,73.286598738217,105.57288499938,0.1296177441829,0.00102413533402086,0.007779080372772061,-6.117240394889304,62.77003315597,95.707208834044,0.11597310669351,0.0012467410532696103,0.009469938597440076,-6.240563560914343,48.700874093477,85.701582467803,0.11727594767588,-0.006511315414154302,-0.04945835073615518,-7.010475781952957,31.615856747218,75.078873889354,0.43241037395354,0.03212712831376986,0.24402976612889654,-8.234880965081148,11.727118611115,63.184916502452,-0.85474302337277,-0.01773533765942278,-0.13471326282765148,-9.749641608224556 diff --git a/test/Spinning_disk_60k_80k.csv b/test/Spinning_disk_60k_80k.csv new file mode 100644 index 0000000..e8b3ac2 --- /dev/null +++ b/test/Spinning_disk_60k_80k.csv @@ -0,0 +1,38 @@ +,elem_5_xx,elem_5_yy,elem_5_zz,elem_5_yz,elem_5_xz,elem_5_xy,elem_11_xx,elem_11_yy,elem_11_zz,elem_11_yz,elem_11_xz,elem_11_xy,elem_17_xx,elem_17_yy,elem_17_zz,elem_17_yz,elem_17_xz,elem_17_xy,elem_23_xx,elem_23_yy,elem_23_zz,elem_23_yz,elem_23_xz,elem_23_xy,elem_29_xx,elem_29_yy,elem_29_zz,elem_29_yz,elem_29_xz,elem_29_xy,elem_35_xx,elem_35_yy,elem_35_zz,elem_35_yz,elem_35_xz,elem_35_xy,elem_41_xx,elem_41_yy,elem_41_zz,elem_41_yz,elem_41_xz,elem_41_xy,elem_47_xx,elem_47_yy,elem_47_zz,elem_47_yz,elem_47_xz,elem_47_xy +0,54.57247845477,199.61952646211,2.6876617126055,-0.12834798714608847,-0.9748997485478856,-27.481874316671735,88.079686955142,153.67635824977,-1.1196066866584,0.09853300313046201,0.748432464696703,-12.428515443186637,91.574746915961,135.22730040569,0.11404509662956,-0.020590898169792576,-0.15640339812613582,-8.27079216788787,84.995135353692,122.4395974796,0.15032595196836,0.001187754796386866,0.009021894704349593,-7.094553223831591,72.79840456561,110.9977445969,0.134501396609,0.0014459250928510986,0.010982890820449747,-7.237578952600297,56.481504894036,99.393582554471,0.13601238462572,-0.007551586957772606,-0.05735999866886249,-8.13049518206795,36.666922326539,87.073750975591,0.50149384638009,0.03725987635096129,0.2830168593094767,-9.5505158411811,13.600686219923,73.279571201086,-0.99129991397806,-0.020568800161118724,-0.15623554937718048,-11.307280216865514 +1,57.313599895645,209.64621721022,2.8226602911764,-0.13479477817135285,-1.0238679953643663,-28.862261596416253,92.503842232271,161.39536924249,-1.1758434192344,0.10348221844760765,0.7860254846625194,-13.052787441925599,96.174455588059,142.01963352765,0.11977346893282,-0.021625158068993094,-0.16425938575959975,-8.686225851705567,89.264356664104,128.58961697064,0.15787667498005,0.0012474150966222991,0.009475055914821798,-7.450905592169753,76.454996191569,116.57305117075,0.14125726855888,0.0015185522375386722,0.011534550475428491,-7.601115360709051,59.318514841717,104.3860235839,0.14284415211035,-0.007930896095989938,-0.06024113486313203,-8.53888188640846,38.508665450865,91.447379088787,0.52668338541956,0.039131403110237085,0.2972325157762446,-10.030228774384481,14.283835193621,76.960331350527,-1.0410919247445,-0.021601950970658573,-0.164083106272277,-11.875233681747714 +2,60.035568986277,219.60285096256,2.9567156302357,-0.14119652613095382,-1.0724940988007565,-30.23300403957816,96.897085716836,169.06044711641,-1.2316872233033,0.10839685302329442,0.8233558404179624,-13.672697620776871,100.74202586621,148.7645082768,0.12546181660571,-0.022652192017111047,-0.17206048308071953,-9.098756879678756,93.503748713911,134.69666596787,0.16537464120032,0.0013066579964918286,0.009925050485980712,-7.804768109218061,80.086039030321,122.10940279878,0.14796593677978,0.0015906721618996384,0.01208235570616069,-7.962111722945121,62.1357024584,109.34358217727,0.14962818526417,-0.008307554575102776,-0.06310214004734521,-8.94441517358853,40.337540225243,95.790448443106,0.55169692313008,0.04098985327601666,0.31134884630468374,-10.506589930313257,14.96221097109,80.615373845082,-1.0905360365762,-0.022627882729547497,-0.17187583162444173,-12.439218828146686 +3,62.646955026042,229.15498528751,3.0853248208515,-0.14733819592863504,-1.1191447121799647,-31.54805853159933,101.11184875132,176.41412259378,-1.2852623101474,0.11311182505039825,0.8591696085464694,-14.267423252493812,105.12403347226,155.23536491448,0.13091906852107,-0.023637501549060216,-0.17954465204626063,-9.49452837138203,97.57091070068,140.55560924115,0.17256799393744,0.0013634940960078894,0.010356763494404633,-8.14425456413479,83.569566675778,127.42083392426,0.15440205747436,0.0016598621496497245,0.012607905746207978,-8.308442202538263,64.838438664644,114.09973438558,0.15613660959493,-0.008668910863579085,-0.06584691367236008,-9.333473215570908,42.092114908247,99.957075727739,0.57569425789727,0.04277280183427323,0.32489168504389193,-10.96359837936764,15.613026970887,84.121926133823,-1.1379714257459,-0.02361213483101531,-0.17935196875719447,-12.980291444576824 +4,65.055044825972,237.96348655347,3.2039217937228,-0.15300173712261136,-1.1621635782368367,-32.76073611378868,104.99849274774,183.19531489618,-1.3346665798155,0.11745973676537715,0.8921952770923339,-14.815849530990626,109.1649020612,161.20246576885,0.13595147404601,-0.024546104851248748,-0.1864461789491012,-9.859489077274082,101.32144438193,145.95843414814,0.17920134485327,0.0014159054657484134,0.010754867689418617,-8.457312019839065,86.781901912821,132.31877046989,0.16033712695303,0.001723665695455768,0.013092541735656356,-8.62781087611392,67.330767026493,118.48562044249,0.16213835342196,-0.009002135582355806,-0.06837800683335302,-9.692243113396385,43.710096062,103.79933133929,0.59782340147042,0.044416947929922526,0.3373802146222843,-11.385028749311981,16.213176985857,87.355493546656,-1.1817139728862,-0.024519762987161763,-0.18624608907223342,-13.479241591814239 +5,67.170272075483,245.70073202573,3.3080954627469,-0.15797650043954237,-1.1999506564920528,-33.82593254713797,108.41245816082,189.15180486544,-1.3780624936779,0.12127887230560971,0.9212044917763158,-15.297578330500095,112.7143358692,166.44387093761,0.14037185777389,-0.025344207320850316,-0.19250836887486736,-10.180064676212368,104.61585268887,150.70418842386,0.18502797317192,0.0014619427786447408,0.011104555979838459,-8.732296640773853,89.603565384784,136.62103895044,0.16555039596751,0.0017797097197804976,0.01351823817753928,-8.908339169025409,69.519988069821,122.3381120309,0.16741018831342,-0.009294834785639925,-0.07060127824604967,-10.007380806396409,45.131304617062,107.17430671078,0.61726128434005,0.04586113935628305,0.3483499376042841,-11.755206390613013,16.740339081301,90.195807019608,-1.2201367210308,-0.025317008890706955,-0.19230177317631547,-13.917511355386681 +6,68.910916573583,252.06779909364,3.3938211566485,-0.1620702896008944,-1.2310460718470773,-34.70249477537444,111.22184902643,194.05346802985,-1.4137734834448,0.12442168225928447,0.9450765036270786,-15.693998424193197,115.63520521357,170.75708270793,0.14400944159557,-0.026000974919142494,-0.19749701372614534,-10.443869973108521,107.32685865535,154.60952345166,0.18982277152726,0.0014998273828290595,0.011392318419237577,-8.958584604691973,91.925544264215,140.16142448695,0.16984045429163,0.0018258289769386277,0.013868548618364411,-9.139189083528118,71.321522900463,125.50837106076,0.17174844122945,-0.009535700279582863,-0.07243083349726384,-10.266711188845566,46.300833259036,109.95161222894,0.63325693879007,0.0470495808611048,0.35737704708173657,-12.05982977086182,17.174146749715,92.533133196398,-1.2517552362387,-0.025973071584691518,-0.19728506432245196,-14.278168515488249 +7,70.207691996566,256.81124676439,3.4576865656876,-0.16512015145887457,-1.2542120718106222,-35.35553125436159,113.3148375903,197.70519377309,-1.4403780738554,0.12676306712404398,0.9628610876050426,-15.98933031721871,117.81124494137,173.97041376112,0.14671943176425,-0.026490265014214746,-0.2012135405758103,-10.640404202707058,109.34655073714,157.51898743992,0.19339488370389,0.0015280512679398926,0.011606700647837656,-9.12716852319459,93.655412222408,142.79900209514,0.17303653616489,0.0018601876992435274,0.014129528922446115,-9.311171642911631,72.663661455633,127.87020542652,0.17498042763984,-0.009715144395157716,-0.0737938471719294,-10.459911619415553,47.172128920299,112.02069729585,0.64517365760853,0.047934966547171116,0.3641022191000423,-12.286773361736342,17.497332284318,94.274434849333,-1.2753109442233,-0.026461836499764257,-0.20099760266819505,-14.546857120140276 +8,71.007828934868,259.73805091812,3.4970928285963,-0.16700197860796107,-1.2685059672654495,-35.75846810782649,114.60625430838,199.95838318623,-1.4567936498201,0.12820774941201302,0.9738345393986876,-16.171556130844454,119.15390592484,175.95310469107,0.1483915510515,-0.02679216702770241,-0.20350671359988887,-10.761669838940545,110.59274202757,159.31418618066,0.19559894973811,0.0015454659746474658,0.011738978839749132,-9.231188246230163,94.722776105502,144.42644138296,0.17500858383906,0.0018813877536042636,0.014290559126758157,-9.41728839681871,73.491788373358,129.32750549872,0.17697462942758,-0.00982586506965899,-0.07463485444945557,-10.579120233533573,47.709736150234,113.29736506787,0.65252651689382,0.04848126759593462,0.3682517876547751,-12.426802195374238,17.69674436406,95.348853555901,-1.2898452974545,-0.02676341442126172,-0.20328831469089967,-14.712643480415718 +9,71.278290586717,260.72736693054,3.5104129023857,-0.16763807242181933,-1.273337578435289,-35.894668502515664,115.04277796072,200.72000447986,-1.4623424298286,0.12869607974994668,0.9775437768543641,-16.23315195548909,119.60775112289,176.62329230261,0.14895675942374,-0.026894215736976437,-0.2042818501205573,-10.802659952878166,111.01397861685,159.92099783163,0.19634396640611,0.0015513524378990493,0.011783691378039949,-9.266348910362218,95.083565596821,144.9765471171,0.17567517387381,0.0018885538046009703,0.014344990435093817,-9.45315789773106,73.771711175461,129.8201009102,0.17764870776512,-0.009863290742835809,-0.07491913103717786,-10.619415034581,47.891457718557,113.7289032929,0.65501192432139,0.04866592783817681,0.3696544214882899,-12.474134630463658,17.7641494766,95.712027712794,-1.2947581880928,-0.026865353514143906,-0.20406261932738082,-14.768682454151065 +10,71.007828935258,259.73805091628,3.4970928290882,-0.16700197886280232,-1.2685059673017807,-35.75846810737394,114.60625430885,199.95838318546,-1.4567936497537,0.12820774933160367,0.9738345394230262,-16.171556130787888,119.1539059248,175.95310469048,0.14839155097554,-0.026792167148418266,-0.20350671356961053,-10.76166983894988,110.59274202808,159.31418618054,0.19559894993811,0.0015454658428157503,0.011738978748854233,-9.231188246374128,94.722776105831,144.42644138287,0.17500858389582,0.0018813878148018098,0.014290559137564164,-9.417288397086846,73.491788373174,129.32750549837,0.17697462937334,-0.00982586497227172,-0.07463485436023284,-10.579120233802556,47.709736150478,113.29736506764,0.65252651672446,0.04848126755817796,0.36825178753996923,-12.426802195620454,17.696744364004,95.348853555875,-1.2898452975526,-0.0267634143286972,-0.20328831461878893,-14.712643480585422 +11,70.207691997667,256.81124676101,3.4576865668805,-0.1651201519568616,-1.2542120719178762,-35.355531253501745,113.31483759086,197.70519377128,-1.4403780740098,0.12676306695966005,0.9628610876630254,-15.989330317112643,117.81124494144,173.97041375994,0.14671943160608,-0.026490265248053542,-0.20121354050863516,-10.6404042027113,109.34655073783,157.51898743949,0.19339488385596,0.0015280510000377804,0.011606700459057541,-9.127168523422702,93.655412222777,142.79900209475,0.17303653601504,0.0018601878080241276,0.014129528959150898,-9.311171643429516,72.663661455211,127.87020542581,0.17498042741736,-0.00971514419942872,-0.07379384699482601,-10.459911619934147,47.172128920919,112.02069729541,0.64517365724005,0.047934966471616755,0.36410221887670974,-12.286773362197092,17.497332284222,94.274434849387,-1.2753109443569,-0.02646183632724576,-0.20099760252865456,-14.546857120505143 +12,68.910916575094,252.0677990888,3.3938211583592,-0.16207029032253928,-1.23104607197669,-34.7024947740974,111.2218490273,194.05346802728,-1.4137734836126,0.12442168202269219,0.9450765036963467,-15.69399842402632,115.6352052136,170.75708270628,0.14400944145727,-0.026000975256868005,-0.19749701362473207,-10.443869973132703,107.3268586566,154.60952345119,0.18982277193216,0.001499826992843265,0.011392318146646782,-8.958584605027424,91.925544264791,140.16142448648,0.16984045414747,0.0018258291400016942,0.013868548651387855,-9.139189084341998,71.321522899908,125.50837105975,0.17174844097664,-0.00953569999512031,-0.07243083323738654,-10.26671118962508,46.300833259746,109.95161222817,0.63325693819824,0.047049580763331725,0.3573770467674135,-12.059829771520985,17.174146749514,92.533133196421,-1.2517552364754,-0.025973071316029127,-0.19728506412970884,-14.278168515986051 +13,67.170272077154,245.70073201928,3.3080954647326,-0.1579765013252926,-1.1999506566606837,-33.82593254553001,108.412458162,189.15180486216,-1.3780624938959,0.12127887201004615,0.9212044918706156,-15.297578330254021,112.71433586909,166.44387093537,0.14037185745911,-0.025344207746794474,-0.19250836874952562,-10.180064676249986,104.61585269021,150.70418842299,0.18502797346212,0.0014619422790275553,0.011104555634656647,-8.732296641183693,89.603565385536,136.62103894985,0.16555039579313,0.0017797099060192715,0.013518238217441315,-8.908339170040673,69.51998806904,122.33811202963,0.1674101880047,-0.009294834436308103,-0.07060127790657336,-10.007380807400217,45.131304618163,107.17430670995,0.61726128367993,0.04586113923039542,0.3483499372122217,-11.755206391464085,16.740339081089,90.195807019659,-1.2201367213126,-0.025317008549098012,-0.19230177293879833,-13.91751135602138 +14,65.055044828446,237.96348654641,3.2039217964642,-0.1530017381860151,-1.1621635784409927,-32.76073611191344,104.9984927491,183.19531489237,-1.3346665800607,0.11745973640507229,0.8921952771895468,-14.815849530717683,109.16490206129,161.20246576641,0.13595147385607,-0.024546105355039705,-0.18644617879250538,-9.859489077329096,101.32144438349,145.95843414712,0.17920134515769,0.0014159048881051057,0.010754867288876426,-8.457312020341112,86.781901913567,132.31877046902,0.16033712655148,0.0017236659342143325,0.013092541773954533,-8.62781087730695,67.330767025554,118.48562044096,0.1621383529694,-0.00900213514929151,-0.06837800644077016,-9.692243114560567,43.710096063286,103.79933133827,0.59782340066445,0.044416947793411314,0.33738021415087033,-11.38502875029981,16.213176985478,87.355493546556,-1.1817139733671,-0.024519762583840785,-0.18624608878352172,-13.479241592528698 +15,62.646955028302,229.15498527917,3.0853248234686,-0.14733819709430057,-1.1191447124009073,-31.54805852949781,101.11184875272,176.41412258949,-1.2852623104944,0.1131118246386811,0.8591696086718535,-14.267423252174199,105.12403347239,155.23536491182,0.1309190683373,-0.023637502124853025,-0.17954465190058247,-9.494528371428558,97.570910702534,140.5556092402,0.17256799447207,0.001363493446762949,0.010356763072131495,-8.144254564685344,83.569566676971,127.42083392358,0.15440205738195,0.0016598624103444383,0.012607905791391254,-8.308442203893787,64.838438663617,114.09973438393,0.15613660915963,-0.0086689103901298,-0.06584691324488291,-9.33347321686647,42.092114909605,99.957075726597,0.57569425698861,0.042772801664834895,0.3248916845282838,-10.963598380448666,15.613026970585,84.121926133779,-1.1379714261564,-0.0236121344025482,-0.17935196844271578,-12.980291445404282 +16,60.035568988958,219.60285095401,2.9567156332825,-0.14119652738472063,-1.072494099039603,-30.233004037347943,96.89708571833,169.0604471118,-1.2316872237114,0.10839685259797394,0.8233558405364452,-13.672697620467018,100.74202586608,148.76450827366,0.12546181611567,-0.022652192607215703,-0.17206048290975526,-9.098756879740982,93.503748715842,134.69666596681,0.16537464168322,0.0013066573127383802,0.00992505002426445,-7.804768109801283,80.086039031212,122.10940279773,0.14796593630797,0.001590672437735771,0.012082355763269038,-7.962111724377578,62.13570245741,109.34358217555,0.14962818478536,-0.008307554061444712,-0.0631021395931097,-8.944415174956498,40.337540226571,95.790448441799,0.55169692207315,0.040989853119391094,0.31134884574947763,-10.506589931452407,14.962210970936,80.615373845206,-1.0905360368433,-0.022627882253046624,-0.17187583127995346,-12.439218828955616 +17,57.313599898144,209.64621720123,2.8226602940665,-0.13479477943514076,-1.0238679956133245,-28.862261594143614,92.503842233856,161.39536923785,-1.1758434195354,0.10348221802805574,0.7860254847888652,-13.052787441577705,96.174455588178,142.01963352467,0.11977346869293,-0.021625158669485143,-0.1642593855867263,-8.686225851786178,89.264356666074,128.58961696951,0.15787667546837,0.0012474144024165396,0.009475055424608426,-7.450905592792007,76.454996192775,116.57305116996,0.14125726838623,0.001518552528267464,0.011534550540287153,-7.601115362152398,59.318514840606,104.38602358208,0.14284415160849,-0.007930895572788478,-0.06024113439487602,-8.538881887797924,38.508665452446,91.447379087633,0.52668338455107,0.03913140294051025,0.29723251522139205,-10.030228775554036,14.283835193242,76.960331350485,-1.0410919252138,-0.021601950487437356,-0.16408310593139497,-11.87523368264376 +18,54.572478455456,199.61952646047,2.6876617133972,-0.12834798742676462,-0.974899748603238,-27.481874316176764,88.079686955613,153.67635824893,-1.1196066866162,0.09853300302546374,0.7484324647246621,-12.428515443126393,91.574746916024,135.22730040513,0.11404509664906,-0.020590898307737797,-0.1564033980873298,-8.270792167923368,84.995135354222,122.43959747938,0.15032595214654,0.0011877546498481782,0.009021894606669014,-7.094553223966225,72.798404565821,110.99774459675,0.13450139656279,0.0014459251532482,0.010982890824820797,-7.2375789528903525,56.481504893876,99.393582554133,0.13601238452618,-0.007551586851884921,-0.05735999856101598,-8.130495182356308,36.666922326822,87.073750975348,0.50149384614704,0.03725987631501481,0.28301685918426217,-9.550515841430993,13.600686219819,73.279571201041,-0.99129991411492,-0.02056880006818368,-0.1562355493019019,-11.30728021704922 +19,51.898522424378,189.83851867428,2.5559709883118,-0.12205916044707422,-0.9271313654099946,-26.135310523429307,83.763936291429,146.14648537914,-1.0647479165958,0.09370505816987429,0.7117605824932018,-11.819539916176529,87.08774442449,128.60139911385,0.10845708622288,-0.019581980276212385,-0.14873990503552098,-7.865537812155847,80.830522325604,116.44027127375,0.14296024326137,0.0011295567338992668,0.008579837544689524,-6.746932519947615,69.231410021373,105.55904917765,0.12791106328386,0.0013750773408983655,0.010444748374720732,-6.882950238289262,53.714009905068,94.523470786561,0.12934801538386,-0.007181572284430681,-0.05454945892221466,-7.732115133651778,34.870307240432,82.807289415392,0.47692152435988,0.03543420753025538,0.2691495279089692,-9.082557263112815,12.934276374148,69.689000332631,-0.94272795155178,-0.01956096481166817,-0.14858028054419511,-10.753243255815997 +20,49.369948430105,180.58930079657,2.4314402412619,-0.11611225475504745,-0.8819601321942245,-24.86195892426616,79.682831453159,139.02600901443,-1.0128717981668,0.08913960692893601,0.6770825374297209,-11.243674171638753,82.844698659624,122.33574571485,0.10317289403493,-0.018627916783708526,-0.14149307336344838,-7.482316991331176,76.892337823395,110.76712629625,0.13599500543085,0.0010745230335983025,0.008161814964558561,-6.418211829756585,65.858351699301,100.41605369065,0.12167904411779,0.001308081506147062,0.009935864549533841,-6.547602560451278,51.096982632802,89.9181452606,0.12304598574459,-0.006831675308125447,-0.05189172732325237,-7.355394866180855,33.171373476266,78.772793850395,0.45368519118652,0.0337077996814556,0.25603615849323486,-8.640041425989269,12.304098994476,66.293647523085,-0.89679682913998,-0.01860792522105758,-0.14134122602368332,-10.229329086783917 +21,47.054860868396,172.12099047125,2.3174235724882,-0.11066744376077801,-0.84060268708936,-23.696115861928853,75.946292569645,132.50671145662,-0.9653755585301,0.08495961480845705,0.6453323450441001,-10.7164285282727,78.959891453498,116.59909878139,0.098334843888391,-0.01775440444585973,-0.13485808863337512,-7.131451342280433,73.286652572541,105.57296254901,0.12961783971237,0.0010241358262209198,0.0077790858765935545,-6.117244888335251,62.770079264093,95.707279136534,0.11597319160209,0.0012467421038578944,0.009469945548736302,-6.240568145192541,48.700909866069,85.701645420481,0.11727603397254,-0.006511319967064676,-0.049458386869327256,-7.0104809315111245,31.615879970863,75.078929038913,0.43241069166047,0.03212715175392691,0.24402994531259745,-8.234887013723041,11.727127224161,63.184962914516,-0.85474365212906,-0.017735350343813936,-0.1347133618290242,-9.749648769330113 +22,45.010234957997,164.64199615901,2.2167269769748,-0.10585872641999217,-0.8040768531412393,-22.66647319454659,72.646277338453,126.74903519311,-0.92342809870062,0.08126795308405856,0.6172913901168285,-10.250778709518617,75.52892944556,111.53263946,0.094062002314785,-0.01698294077102603,-0.12899824044021252,-6.821575807165611,70.102203910642,100.98561045273,0.12398569048779,0.0009796351332752265,0.007441069366444652,-5.8514386110217895,60.042596320151,91.548610316654,0.11093392913088,0.0011925687007790543,0.009058457856064413,-5.96940323063996,46.584759901294,81.977740991874,0.11218016032018,-0.00622839037583902,-0.04730932306453806,-6.705861797747401,30.242108033941,71.816602452854,0.41362159993468,0.030731164058154008,0.23342636602460315,-7.877065036403114,11.217560566771,60.439452463136,-0.81760336537309,-0.016964714640167303,-0.12885980228573643,-9.326007425536565 +23,43.281797901467,158.31958243588,2.1316024922497,-0.10179364771877594,-0.7731995153341085,-21.796058449115623,69.856589217863,121.8817482419,-0.88796755638772,0.07814718420121308,0.5935867968165305,-9.85713877867447,72.628544664049,107.24967699123,0.09044992935259,-0.016330779191892002,-0.12404458180265393,-6.559620622516161,67.41021069873,97.10766421619,0.11922451875968,0.0009420162072201501,0.007155325039960538,-5.626737643767761,57.736901881315,88.033054117776,0.10667395795507,0.0011467728696630507,0.008710604215997696,-5.7401723065971915,44.795859546775,78.829715538153,0.1078723324544,-0.005989214117815718,-0.0454925988081473,-6.448350144260145,29.080781499047,69.05877465967,0.39773812575527,0.02955105730386331,0.22446256522851402,-7.574578032754832,10.786795266643,58.118518359888,-0.78620659637834,-0.016313253025362805,-0.1239114598220868,-8.967879616628602 +24,41.904617293461,153.28202232202,2.0637771762175,-0.09855468244023369,-0.7485971320946802,-21.10253113566786,67.63382711742,118.00360111611,-0.85971337664184,0.07566062425002923,0.5746994985592583,-9.54349514477006,70.317581900392,103.83710675357,0.087571909167871,-0.015811151207877426,-0.12009761563155634,-6.350900496399504,65.265289751403,94.017801998725,0.1154309217153,0.0009120422916188394,0.006927650259601123,-5.447700858235646,55.899775294731,85.231936306886,0.10327970642529,0.001110283780074907,0.008433442083182289,-5.557526151089418,43.370503113652,76.32143813691,0.1044399500897,-0.005798643746521755,-0.04404507289569113,-6.243170525868075,28.155462074008,66.861398167012,0.38508252320641,0.02861077420289897,0.21732040604071004,-7.333563045193795,10.443570955663,56.269249144458,-0.7611903417238,-0.015794182753551666,-0.11996872946392963,-8.682531259974292 +25,40.904140348202,149.62239865025,2.0145042887691,-0.09620167942206571,-0.7307243003925955,-20.59870608624861,66.019062704599,115.18625329234,-0.8391876333614,0.07385421925936202,0.5609784903288333,-9.315643240058803,68.638742572684,101.3579854048,0.085481121051961,-0.01543365835698002,-0.1172302730070764,-6.199272109434828,63.70707440587,91.773117536727,0.11267499686069,0.0008902672376775338,0.006762251933032472,-5.317636453257982,54.565162547081,83.197015270308,0.1008138929504,0.0010837756322741648,0.008232092792149768,-5.424839656175084,42.335027997352,74.499256138794,0.10194643567325,-0.005660200565545706,-0.04299349237521549,-6.094114202658676,27.483247590268,65.265075573168,0.37588863949762,0.027927689114875223,0.2121318595537798,-7.158473491122134,10.194229650712,54.92581517185,-0.74301684572128,-0.015417095084528655,-0.11710446401859419,-8.47523495436408 +26,40.297398506573,147.40301037099,1.9846226181423,-0.09477469459755332,-0.7198852751848058,-20.293160076713168,65.03978463281,113.47766538814,-0.82673974313422,0.0727587202919442,0.5526573492466665,-9.177461860732132,67.620606102571,99.854515824847,0.084213157200977,-0.015204726804339042,-0.11549136563411966,-6.107316680355658,62.762090662871,90.41182281546,0.11100365901952,0.0008770617251713025,0.006661945715696553,-5.238758557079688,53.755783180497,81.962932123237,0.099318494198269,0.0010676996781948883,0.008109984009485836,-5.344371586694515,41.707061424221,73.394189134079,0.10043423760127,-0.005576241374550283,-0.042355758666970895,-6.003718608325044,27.075581370672,64.296981590484,0.37031298472984,0.027513430380726952,0.20898525208127558,-7.052289976349008,10.043015968579,54.11108615015,-0.73199548211247,-0.015188409297012017,-0.11536742281236516,-8.349519571465569 +27,40.094102266809,146.65937731318,1.9746104004316,-0.09429656589103225,-0.7162535278465315,-20.1907831671147,64.711665594766,112.90518221362,-0.82256892590976,0.07239166004477973,0.5498692496379175,-9.131162507593892,67.279467085176,99.350760041557,0.083788310571717,-0.01512802047672614,-0.11490872356760791,-6.076505894550237,62.445462357072,89.955704449059,0.11044365692554,0.0008726370866433704,0.006628336914527483,-5.212329557803453,53.484590771522,81.549437543147,0.09881744256026,0.0010623132228104431,0.008069069964656915,-5.317409780466595,41.496653580125,73.023922983024,0.099927557207191,-0.005548109845401008,-0.04214207823970013,-5.973430464057552,26.938987841417,63.972609917597,0.36844479373348,0.02737462796176513,0.2079309429797294,-7.016711897174763,9.992349983932,53.838101274357,-0.72830263991648,-0.015111785361069722,-0.11478540603523651,-8.307397102114448 +28,40.297398506079,147.40301037222,1.9846226176155,-0.09477469439781687,-0.719885275151487,-20.293160077037026,65.039784632659,113.47766538891,-0.82673974301086,0.07275872035879972,0.552657349221338,-9.177461860798175,67.620606102548,99.854515825334,0.084213157288905,-0.015204726704685067,-0.11549136565098557,-6.107316680352122,62.762090662673,90.411822815702,0.11100365902015,0.0008770618211659978,0.0066619457873435825,-5.238758556967116,53.755783180375,81.96293212341,0.099318494236486,0.0010676996284722708,0.00810998399423425,-5.3443715864897365,41.707061424328,73.394189134312,0.10043423760255,-0.005576241448263903,-0.042355758727804706,-6.003718608122104,27.075581370416,64.296981590584,0.37031298483073,0.027513430408808992,0.20898525216225344,-7.052289976165726,10.04301596865,54.111086150147,-0.73199548201645,-0.01518840937252395,-0.11536742286669642,-8.349519571338291 +29,40.904140347452,149.62239865283,2.0145042878648,-0.09620167905841624,-0.73072430032518,-20.598706086937334,66.019062704096,115.18625329364,-0.83918763331256,0.07385421940371222,0.560978490290904,-9.315643240155959,68.638742572725,101.35798540577,0.085481121187909,-0.015433658166875776,-0.1172302730581465,-6.1992721093939585,63.707074405258,91.773117537032,0.11267499666274,0.0008902674397267911,0.006762252072893526,-5.317636453095912,54.56516254682,83.197015270599,0.10081389311266,0.0010837755436872616,0.008232092784087052,-5.424839655741061,42.33502799767,74.499256139285,0.10194643579601,-0.005660200718506621,-0.04299349251605278,-6.094114202236393,27.483247589815,65.265075573536,0.37588863978201,0.027927689163682563,0.2121318597234713,-7.158473490788805,10.194229650829,54.925815171882,-0.74301684558965,-0.015417095219356948,-0.11710446412425007,-8.475234954090288 +30,41.904617292391,153.28202232598,2.0637771750223,-0.09855468188351013,-0.7485971319870868,-21.102531136639428,67.633827116778,118.00360111815,-0.85971337646732,0.07566062442374415,0.5746994985044152,-9.543495144950652,70.317581900332,103.83710675482,0.087571909269008,-0.015811150935757284,-0.1200976157098373,-6.350900496376312,65.265289750499,94.017801999152,0.11543092146698,0.0009120426042577588,0.006927650454930886,-5.447700857942338,55.899775294072,85.231936307128,0.10327970639205,0.0011102836508174844,0.008433442066793959,-5.557526150446375,43.370503114005,76.321438137569,0.10443995016345,-0.005798643972464574,-0.04404507309426651,-6.243170525263357,28.155462073393,66.861398167632,0.38508252367878,0.02861077428028191,0.21732040627105714,-7.33356304469868,10.443570955784,56.269249144434,-0.76119034155503,-0.015794182950954666,-0.1199687296060977,-8.682531259587787 +31,43.281797899977,158.31958244095,2.1316024905435,-0.10179364700010089,-0.7731995151845554,-21.796058450405386,69.856589217071,121.88174824467,-0.88796755609188,0.07814718443888158,0.5935867967442924,-9.857138778849407,72.628544664066,107.24967699301,0.090449929578607,-0.01633077886251742,-0.1240445819009743,-6.5596206224816545,67.410210697589,97.107664216817,0.1192245184306,0.0009420165982227643,0.007155325304021221,-5.626737643449988,57.736901880619,88.033054118255,0.10667395809852,0.0011467727186026976,0.008710604187599863,-5.740172305780058,44.795859547501,78.829715539232,0.10787233278866,-0.005989214406679162,-0.045492599071145765,-6.448350143444002,29.080781498274,69.058774660494,0.39773812640981,0.029551057395532637,0.22446256553815608,-7.574578032104294,10.78679526698,58.118518360073,-0.78620659598676,-0.016313253299484062,-0.12391146001279209,-8.967879616141406 +32,45.010234956292,164.64199616523,2.2167269749827,-0.10585872556110493,-0.8040768529684508,-22.666473196100814,72.646277337118,126.74903519615,-0.92342809867365,0.0812679533711538,0.6172913900108898,-10.250778709771337,75.528929445549,111.53263946208,0.094062002517294,-0.016982940357292198,-0.1289982405303927,-6.821575807097022,70.102203909389,100.9856104536,0.1239856902469,0.0009796356031394804,0.007441069674859033,-5.851438610602333,60.042596319439,91.548610317348,0.11093392942678,0.001192568505737508,0.009058457827651023,-5.969403229640536,46.584759902071,81.977740993077,0.11218016064829,-0.006228390734224637,-0.04730932339172203,-6.705861796763109,30.242108032777,71.81660245361,0.41362160052271,0.03073116417262753,0.23342636640413564,-7.8770650356318015,11.21756056683,60.43945246297,-0.81760336523792,-0.016964714960420207,-0.12885980251997828,-9.326007424917986 +33,47.054860866226,172.12099047827,2.3174235700366,-0.11066744274112013,-0.8406026868919217,-23.696115863756013,75.946292568353,132.50671146033,-0.9653755582907,0.08495961516577509,0.6453323449416968,-10.716428528520472,78.95989145346,116.59909878383,0.098334844143156,-0.01775440395952441,-0.1348580887692782,-7.1314513422237225,73.286652570855,105.57296254982,0.12961783924265,0.0010241363765646733,0.007779086244618026,-6.117244887878601,62.770079263284,95.707279137262,0.11597319185493,0.001246741876625029,0.009469945508792406,-6.240568144019309,48.700909866866,85.701645421862,0.11727603429057,-0.006511320379864423,-0.049458387246420224,-7.0104809303765006,31.615879969633,75.078929039872,0.43241069241477,0.032127151875067025,0.24402994575400178,-8.234887012787823,11.727127224603,63.18496291467,-0.85474365161702,-0.017735350738880152,-0.1347133620882863,-9.749648768630642 +34,49.369948427765,180.5893008044,2.4314402385795,-0.1161122536214874,-0.8819601319729566,-24.861958926272926,79.682831451707,139.02600901853,-1.0128717978738,0.08913960730408726,0.6770825373295946,-11.243674171927537,82.844698659741,122.33574571767,0.1031728944525,-0.01862791625196564,-0.1414930735148258,-7.482316991292992,76.892337821542,110.76712629718,0.13599500495406,0.0010745236546458041,0.008161815396559087,-6.418211829238558,65.858351698331,100.41605369137,0.1216790443465,0.0013080812578711231,0.009935864477339513,-6.54760255917396,51.096982633698,89.918145262173,0.12304598617698,-0.006831675756954971,-0.051891727726789724,-7.355394864918952,33.171373474962,78.772793851479,0.45368519203706,0.03370779983725809,0.25603615898992077,-8.640041424935257,12.304098994603,66.29364752296,-0.89679682889234,-0.018607925635704996,-0.14134122633389107,-10.229329086008786 +35,51.898522421849,189.83851868269,2.5559709854391,-0.12205915923665306,-0.9271313651566665,-26.135310525583158,83.763936290074,146.14648538372,-1.064747916137,0.09370505856531809,0.7117605823558392,-11.819539916498119,87.087744424211,128.60139911654,0.10845708632658,-0.019581979711424988,-0.1487399051915936,-7.865537812103804,80.830522323766,116.44027127486,0.14296024286276,0.0011295574075751707,0.008579838000886394,-6.746932519396921,69.231410020323,105.55904917848,0.12791106351041,0.0013750770821046375,0.010444748315018433,-6.882950236876038,53.714009906084,94.523470788313,0.12934801585339,-0.007181572782893162,-0.05454945937091068,-7.732115132291021,34.870307239055,82.807289416605,0.47692152532911,0.03543420768665325,0.2691495284419297,-9.082557262016232,12.934276374588,69.689000332801,-0.94272795100204,-0.019560965264744015,-0.14858028086884195,-10.7532432550024 +36,54.572478452698,199.61952646911,2.687661710236,-0.12834798615934642,-0.9748997483610257,-27.481874318446575,88.079686953917,153.67635825347,-1.1196066863316,0.09853300346771375,0.7484324646036052,-12.428515443440347,91.574746916067,135.2273004082,0.11404509699464,-0.020590897695635053,-0.15640339825149172,-8.270792167834555,84.995135352177,122.43959748053,0.15032595164324,0.0011877553264734244,0.009021895075161764,-7.0945532233665975,72.798404564851,110.99774459763,0.13450139687487,0.0014459248578448667,0.01098289076721889,-7.237578951482786,56.481504894839,99.393582555825,0.13601238495526,-0.00755158735993973,-0.057359999028955194,-8.130495180959914,36.666922325447,87.073750976617,0.50149384718537,0.03725987648331895,0.2830168597483071,-9.550515840265822,13.60068622001,73.279571200978,-0.99129991379812,-0.020568800522026025,-0.15623554964992573,-11.307280216184854 diff --git a/test/Spinning_disk_70k.csv b/test/Spinning_disk_70k.csv new file mode 100644 index 0000000..35dc300 --- /dev/null +++ b/test/Spinning_disk_70k.csv @@ -0,0 +1,38 @@ +,elem_5_xx,elem_5_yy,elem_5_zz,elem_5_yz,elem_5_xz,elem_5_xy,elem_11_xx,elem_11_yy,elem_11_zz,elem_11_yz,elem_11_xz,elem_11_xy,elem_17_xx,elem_17_yy,elem_17_zz,elem_17_yz,elem_17_xz,elem_17_xy,elem_23_xx,elem_23_yy,elem_23_zz,elem_23_yz,elem_23_xz,elem_23_xy,elem_29_xx,elem_29_yy,elem_29_zz,elem_29_yz,elem_29_xz,elem_29_xy,elem_35_xx,elem_35_yy,elem_35_zz,elem_35_yz,elem_35_xz,elem_35_xy,elem_41_xx,elem_41_yy,elem_41_zz,elem_41_yz,elem_41_xz,elem_41_xy,elem_47_xx,elem_47_yy,elem_47_zz,elem_47_yz,elem_47_xz,elem_47_xy +0,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +1,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +2,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +3,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +4,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +5,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +6,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +7,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +8,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +9,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +10,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +11,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +12,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +13,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +14,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +15,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +16,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +17,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +18,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +19,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +20,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +21,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +22,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +23,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +24,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +25,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +26,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +27,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +28,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +29,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +30,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +31,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +32,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +33,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +34,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +35,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 +36,54.572404006197,199.61925414675,2.6876580447041,-0.12834781165675463,-0.9748984183739219,-27.481836827541798,88.079566797012,153.67614860824,-1.1196051589846,0.09853286885387957,0.7484314435513553,-12.428498488786655,91.574621990986,135.22711593144,0.11404494122006,-0.020590869920530185,-0.15640318483115123,-8.270780885081919,84.995019404372,122.4394304497,0.15032574694038,0.0011877533488574021,0.009021882564962547,-7.094543545587114,72.798305255524,110.99759317573,0.13450121337087,0.0014459230080556486,0.010982875839853488,-7.237569079153478,56.481427844065,99.393446963708,0.1360121991251,-0.007551576818277426,-0.05735992055315426,-8.130484090776918,36.666872306233,87.073632191226,0.50149316200813,0.037259825669381144,0.283016473240601,-9.550502812949658,13.600667666948,73.27947123511,-0.9912985610977,-0.020568772340534162,-0.15623533618252022,-11.307264792218078 diff --git a/test/Spinning_disk_80k.csv b/test/Spinning_disk_80k.csv new file mode 100644 index 0000000..60a4ee7 --- /dev/null +++ b/test/Spinning_disk_80k.csv @@ -0,0 +1,38 @@ +,elem_5_xx,elem_5_yy,elem_5_zz,elem_5_yz,elem_5_xz,elem_5_xy,elem_11_xx,elem_11_yy,elem_11_zz,elem_11_yz,elem_11_xz,elem_11_xy,elem_17_xx,elem_17_yy,elem_17_zz,elem_17_yz,elem_17_xz,elem_17_xy,elem_23_xx,elem_23_yy,elem_23_zz,elem_23_yz,elem_23_xz,elem_23_xy,elem_29_xx,elem_29_yy,elem_29_zz,elem_29_yz,elem_29_xz,elem_29_xy,elem_35_xx,elem_35_yy,elem_35_zz,elem_35_yz,elem_35_xz,elem_35_xy,elem_41_xx,elem_41_yy,elem_41_zz,elem_41_yz,elem_41_xz,elem_41_xy,elem_47_xx,elem_47_yy,elem_47_zz,elem_47_yz,elem_47_xz,elem_47_xy +0,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +1,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +2,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +3,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +4,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +5,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +6,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +7,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +8,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +9,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +10,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +11,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +12,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +13,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +14,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +15,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +16,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +17,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +18,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +19,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +20,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +21,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +22,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +23,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +24,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +25,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +26,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +27,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +28,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +29,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +30,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +31,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +32,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +33,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +34,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +35,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 +36,71.278290585921,260.72736693004,3.51041290204,-0.16763807242333253,-1.273337578239788,-35.894668503112456,115.04277795991,200.72000447969,-1.4623424295036,0.1286960797406454,0.9775437767295031,-16.233151955808705,119.60775112288,176.62329230235,0.14895675963648,-0.026894215805717117,-0.20428185014640912,-10.802659953048435,111.01397861709,159.92099783134,0.19634396642918,0.0015513523683731993,0.011783691389815398,-9.266348910672356,95.083565597727,144.97654711693,0.17567517399791,0.001888553799608655,0.014344990469013729,-9.453157898265774,73.771711176605,129.82010091005,0.17764870773897,-0.009863290718757975,-0.07491913100366665,-10.61941503545555,47.891457719508,113.72890329275,0.65501192367809,0.04866592795473205,0.3696544212810369,-12.474134631516117,17.764149477772,95.712027713996,-1.2947581873569,-0.026865353626701165,-0.2040626191167337,-14.76868245527395 diff --git a/test/Spinning_disk_90k.csv b/test/Spinning_disk_90k.csv new file mode 100644 index 0000000..bf2c318 --- /dev/null +++ b/test/Spinning_disk_90k.csv @@ -0,0 +1,38 @@ +,elem_5_xx,elem_5_yy,elem_5_zz,elem_5_yz,elem_5_xz,elem_5_xy,elem_11_xx,elem_11_yy,elem_11_zz,elem_11_yz,elem_11_xz,elem_11_xy,elem_17_xx,elem_17_yy,elem_17_zz,elem_17_yz,elem_17_xz,elem_17_xy,elem_23_xx,elem_23_yy,elem_23_zz,elem_23_yz,elem_23_xz,elem_23_xy,elem_29_xx,elem_29_yy,elem_29_zz,elem_29_yz,elem_29_xz,elem_29_xy,elem_35_xx,elem_35_yy,elem_35_zz,elem_35_yz,elem_35_xz,elem_35_xy,elem_41_xx,elem_41_yy,elem_41_zz,elem_41_yz,elem_41_xz,elem_41_xy,elem_47_xx,elem_47_yy,elem_47_zz,elem_47_yz,elem_47_xz,elem_47_xy +0,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +1,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +2,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +3,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +4,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +5,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +6,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +7,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +8,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +9,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +10,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +11,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +12,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +13,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +14,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +15,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +16,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +17,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +18,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +19,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +20,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +21,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +22,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +23,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +24,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +25,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +26,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +27,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +28,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +29,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +30,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +31,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +32,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +33,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +34,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +35,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 +36,90.211634381481,329.98324883226,4.4428686860704,-0.21216704798072186,-1.6115687274213342,-45.42921392520388,145.60109309918,254.03639043998,-1.8507781192343,0.1628810623394728,1.2372044987685002,-20.545093843585082,151.37864032375,223.53897291122,0.18852349891137,-0.034038009928285914,-0.25854435373866,-13.672123756317788,140.50214122596,202.40012025688,0.24849796438356,0.0019634313838512414,0.01491374231468568,-11.727729061847056,120.340201552,183.48603978716,0.22233900998046,0.0023902021772428932,0.018155388208684366,-11.964159312178646,93.367371490786,164.30365237998,0.22483676495899,-0.012483233941841075,-0.09481957549048542,-13.440204284482267,60.612658332263,143.9382195915,0.82899990575204,0.061592847731883095,0.4678441251190672,-15.787585018584153,22.482763610372,121.13559934001,-1.6386792001371,-0.03400148123027986,-0.25826688931672254,-18.691623648655302 diff --git a/test/test_ceramic_damage_CARES_cyclic.py b/test/test_ceramic_damage_CARES_cyclic.py index 230abe5..9c98b86 100644 --- a/test/test_ceramic_damage_CARES_cyclic.py +++ b/test/test_ceramic_damage_CARES_cyclic.py @@ -129,26 +129,45 @@ def setUp(self): # ) # data = np.loadtxt("Spinning_disk_cyclic_60000_70000.txt") + # data = np.loadtxt( + # os.path.join( + # os.path.dirname(os.path.abspath(__file__)), + # "Spinning_disk_cyclic_60000_70000.txt", + # # "Spinning_disk_cyclic_60000_80000.txt", + # ) + # ) + # data = np.loadtxt("Spinning_disk_static_60000.txt") data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - "Spinning_disk_cyclic_60000_70000.txt", - # "Spinning_disk_cyclic_60000_80000.txt", - ) + # "Spinning_disk_60k_70k.csv", + "Spinning_disk_60k_80k.csv", + ), + delimiter=",", + skiprows=1, + usecols=list(range(1, 49)), ) - # data = np.loadtxt("Spinning_disk_static_60000.txt") self.stress = data.reshape(data.shape[0], 8, -1) - vol_factor = 360 / 360 + vol_factor = 360 / 15 + # self.volumes = np.loadtxt( + # os.path.join( + # os.path.dirname(os.path.abspath(__file__)), + # "Spinning_disk_volumes.txt", + # ) + # ) + self.volumes = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - "Spinning_disk_volumes.txt", - ) + "volumes_8.csv", + ), + delimiter=",", + # skiprows=1, + # usecols=list(range(1, 55)), ) self.volumes = vol_factor * self.volumes - self.temperatures = np.ones((data.shape[0], 8)) # Number of cycles to failure @@ -204,28 +223,45 @@ def test_definition(self): class TestCSEModelGriffithFlaw(unittest.TestCase): def setUp(self): # data = np.loadtxt("Spinning_disk_cyclic_60000_70000.txt") + # data = np.loadtxt( + # os.path.join( + # os.path.dirname(os.path.abspath(__file__)), + # "Spinning_disk_cyclic_60000_70000.txt", + # # "Spinning_disk_cyclic_60000_80000.txt", + # ) + # ) + # data = np.loadtxt("Spinning_disk_static_60000.txt") data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - "Spinning_disk_cyclic_60000_70000.txt", - # "Spinning_disk_cyclic_60000_80000.txt", - ) + # "Spinning_disk_60k_70k.csv", + "Spinning_disk_60k_80k.csv", + ), + delimiter=",", + skiprows=1, + usecols=list(range(1, 49)), ) - # data = np.loadtxt("Spinning_disk_static_60000.txt") self.stress = data.reshape(data.shape[0], 8, -1) - vol_factor = 1 + vol_factor = 360 / 15 + # self.volumes = np.loadtxt( + # os.path.join( + # os.path.dirname(os.path.abspath(__file__)), + # "Spinning_disk_volumes.txt", + # ) + # ) + self.volumes = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - "Spinning_disk_volumes.txt", - ) + "volumes_8.csv", + ), + delimiter=",", + # skiprows=1, + # usecols=list(range(1, 55)), ) self.volumes = vol_factor * self.volumes - # self.volumes = vol_factor * (np.tile(self.volumes, data.shape[0])).reshape( - # data.shape[0], 8 - # ) self.temperatures = np.ones((data.shape[0], 8)) @@ -288,28 +324,45 @@ def test_definition(self): class TestCSEModelPennyShapedFlaw(unittest.TestCase): def setUp(self): # data = np.loadtxt("Spinning_disk_cyclic_60000_70000.txt") + # data = np.loadtxt( + # os.path.join( + # os.path.dirname(os.path.abspath(__file__)), + # "Spinning_disk_cyclic_60000_70000.txt", + # # "Spinning_disk_cyclic_60000_80000.txt", + # ) + # ) + # data = np.loadtxt("Spinning_disk_static_60000.txt") data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - "Spinning_disk_cyclic_60000_70000.txt", - # "Spinning_disk_cyclic_60000_80000.txt", - ) + # "Spinning_disk_60k_70k.csv", + "Spinning_disk_60k_80k.csv", + ), + delimiter=",", + skiprows=1, + usecols=list(range(1, 49)), ) - # data = np.loadtxt("Spinning_disk_static_60000.txt") self.stress = data.reshape(data.shape[0], 8, -1) - vol_factor = 1 + vol_factor = 360 / 15 + # self.volumes = np.loadtxt( + # os.path.join( + # os.path.dirname(os.path.abspath(__file__)), + # "Spinning_disk_volumes.txt", + # ) + # ) + self.volumes = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - "Spinning_disk_volumes.txt", - ) + "volumes_8.csv", + ), + delimiter=",", + # skiprows=1, + # usecols=list(range(1, 55)), ) self.volumes = vol_factor * self.volumes - # self.volumes = vol_factor * (np.tile(self.volumes, data.shape[0])).reshape( - # data.shape[0], 8 - # ) self.temperatures = np.ones((data.shape[0], 8)) @@ -370,28 +423,45 @@ def test_definition(self): class TestSMMModelGriffithFlaw(unittest.TestCase): def setUp(self): # data = np.loadtxt("Spinning_disk_cyclic_60000_70000.txt") + # data = np.loadtxt( + # os.path.join( + # os.path.dirname(os.path.abspath(__file__)), + # "Spinning_disk_cyclic_60000_70000.txt", + # # "Spinning_disk_cyclic_60000_80000.txt", + # ) + # ) + # data = np.loadtxt("Spinning_disk_static_60000.txt") data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - "Spinning_disk_cyclic_60000_70000.txt", - # "Spinning_disk_cyclic_60000_80000.txt", - ) + # "Spinning_disk_60k_70k.csv", + "Spinning_disk_60k_80k.csv", + ), + delimiter=",", + skiprows=1, + usecols=list(range(1, 49)), ) - # data = np.loadtxt("Spinning_disk_static_60000.txt") self.stress = data.reshape(data.shape[0], 8, -1) - vol_factor = 1 + vol_factor = 360 / 15 + # self.volumes = np.loadtxt( + # os.path.join( + # os.path.dirname(os.path.abspath(__file__)), + # "Spinning_disk_volumes.txt", + # ) + # ) + self.volumes = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - "Spinning_disk_volumes.txt", - ) + "volumes_8.csv", + ), + delimiter=",", + # skiprows=1, + # usecols=list(range(1, 55)), ) self.volumes = vol_factor * self.volumes - # self.volumes = vol_factor * (np.tile(self.volumes, data.shape[0])).reshape( - # data.shape[0], 8 - # ) self.temperatures = np.ones((data.shape[0], 8)) @@ -451,33 +521,50 @@ def test_definition(self): class TestSMMModelPennyShapedFlaw(unittest.TestCase): def setUp(self): # data = np.loadtxt("Spinning_disk_cyclic_60000_70000.txt") + # data = np.loadtxt( + # os.path.join( + # os.path.dirname(os.path.abspath(__file__)), + # "Spinning_disk_cyclic_60000_70000.txt", + # # "Spinning_disk_cyclic_60000_80000.txt", + # ) + # ) + # data = np.loadtxt("Spinning_disk_static_60000.txt") data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - "Spinning_disk_cyclic_60000_70000.txt", - # "Spinning_disk_cyclic_60000_80000.txt", - ) + # "Spinning_disk_60k_70k.csv", + "Spinning_disk_60k_80k.csv", + ), + delimiter=",", + skiprows=1, + usecols=list(range(1, 49)), ) - # data = np.loadtxt("Spinning_disk_static_60000.txt") self.stress = data.reshape(data.shape[0], 8, -1) - vol_factor = 1 + vol_factor = 360 / 15 + # self.volumes = np.loadtxt( + # os.path.join( + # os.path.dirname(os.path.abspath(__file__)), + # "Spinning_disk_volumes.txt", + # ) + # ) + self.volumes = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - "Spinning_disk_volumes.txt", - ) + "volumes_8.csv", + ), + delimiter=",", + # skiprows=1, + # usecols=list(range(1, 55)), ) self.volumes = vol_factor * self.volumes - # self.volumes = vol_factor * (np.tile(self.volumes, data.shape[0])).reshape( - # data.shape[0], 8 - # ) self.temperatures = np.ones((data.shape[0], 8)) # Number of cycles to failure - self.nf = 1 + self.nf = 100000 self.period = 0.01 self.time = np.linspace(0, self.period, self.stress.shape[0]) diff --git a/test/test_ceramic_damage_CARES_static.py b/test/test_ceramic_damage_CARES_static.py new file mode 100644 index 0000000..02714f8 --- /dev/null +++ b/test/test_ceramic_damage_CARES_static.py @@ -0,0 +1,499 @@ +import unittest + +import numpy as np + +# import csv +import matplotlib.pyplot as plt + +import os.path + +from srlife import ( + materials, + damage_time_dep_cyclic, + solverparams, +) + + +class TestPIAModel(unittest.TestCase): + def setUp(self): + # data = np.loadtxt("Spinning_disk_cyclic_60000_70000.txt") + # data = np.loadtxt( + # os.path.join( + # os.path.dirname(os.path.abspath(__file__)), + # "Spinning_disk_cyclic_60000_70000.txt", + # # "Spinning_disk_cyclic_60000_80000.txt", + # ) + # ) + # data = np.loadtxt("Spinning_disk_static_60000.txt") + data = np.loadtxt( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "Spinning_disk_100k.csv", + ), + delimiter=",", + skiprows=1, + usecols=list(range(1, 49)), + ) + + self.stress = data.reshape(data.shape[0], 8, -1) + + vol_factor = 360 / 15 + # self.volumes = np.loadtxt( + # os.path.join( + # os.path.dirname(os.path.abspath(__file__)), + # "Spinning_disk_volumes.txt", + # ) + # ) + + self.volumes = np.loadtxt( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "volumes_8.csv", + ), + delimiter=",", + # skiprows=1, + # usecols=list(range(1, 55)), + ) + self.volumes = vol_factor * self.volumes + self.temperatures = np.ones((data.shape[0], 8)) + + # Number of cycles to failure + self.nf = 100 + self.period = 0.01 + self.time = np.linspace(0, self.period, self.stress.shape[0]) + + # Material properties + self.m = 7.65 + self.s0 = 74.79 * ((1000) ** (3 / self.m)) # in mm 74.79 in m + self.c_bar = 0.82 + self.nu = 0.219 + self.Nv = 30 + self.Bv = 320 + + self.material = materials.StandardCeramicMaterial( + np.array([0, 1000.0]), + np.array([self.s0, self.s0]), + np.array([0, 1000.0]), + np.array([self.m, self.m]), + self.c_bar, + self.nu, + self.Nv, + self.Bv, + ) + + self.model_time_dep = damage_time_dep_cyclic.PIAModel( + solverparams.ParameterSet() + ) + + def test_definition(self): + # k = self.s0 ** (-self.m) + # kp = (2 * self.m + 1) * k + + actual = self.model_time_dep.calculate_element_log_reliability( + self.time, + self.stress, + self.temperatures, + self.volumes, + self.material, + self.nf * self.period, + ) + + # Summing up log probabilities over nelem and taking the value of one + R_PIA = np.exp(np.sum(actual)) + print("Time dep Reliability PIA = ", R_PIA) + + # Evaluating Probability of Failure + Pf_PIA = 1 - R_PIA + print("Time dep Probability of failure PIA = ", Pf_PIA) + + +class TestCSEModelGriffithFlaw(unittest.TestCase): + def setUp(self): + # data = np.loadtxt("Spinning_disk_cyclic_60000_70000.txt") + # data = np.loadtxt( + # os.path.join( + # os.path.dirname(os.path.abspath(__file__)), + # "Spinning_disk_cyclic_60000_70000.txt", + # # "Spinning_disk_cyclic_60000_80000.txt", + # ) + # ) + # data = np.loadtxt("Spinning_disk_static_60000.txt") + data = np.loadtxt( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "Spinning_disk_100k.csv", + ), + delimiter=",", + skiprows=1, + usecols=list(range(1, 49)), + ) + + self.stress = data.reshape(data.shape[0], 8, -1) + + vol_factor = 360 / 15 + # self.volumes = np.loadtxt( + # os.path.join( + # os.path.dirname(os.path.abspath(__file__)), + # "Spinning_disk_volumes.txt", + # ) + # ) + + self.volumes = np.loadtxt( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "volumes_8.csv", + ), + delimiter=",", + # skiprows=1, + # usecols=list(range(1, 55)), + ) + self.volumes = vol_factor * self.volumes + + self.temperatures = np.ones((data.shape[0], 8)) + + # Number of cycles to failure + self.nf = 0 + self.period = 0.01 + self.time = np.linspace(0, self.period, self.stress.shape[0]) + + # Material properties + self.m = 7.65 + self.s0 = 74.79 * ((1000) ** (3 / self.m)) # in mm 74.79 in m + self.c_bar = 0.82 + self.nu = 0.219 + self.Nv = 30 + self.Bv = 320 + + # Model specific property + # self.kbar = self.m + 1 + + self.material = materials.StandardCeramicMaterial( + np.array([0, 1000.0]), + np.array([self.s0, self.s0]), + np.array([0, 1000.0]), + np.array([self.m, self.m]), + self.c_bar, + self.nu, + self.Nv, + self.Bv, + ) + + # self.model_time_indep = damage.CSEModelGriffithFlaw(solverparams.ParameterSet()) + self.model_time_dep = damage_time_dep_cyclic.CSEModelGriffithFlaw( + solverparams.ParameterSet() + ) + # self.model = damage.CSEModelGriffithFlaw(solverparams.ParameterSet()) + + def test_definition(self): + # k = self.s0 ** (-self.m) + # kp = (self.m + 1) * k + + actual = self.model_time_dep.calculate_element_log_reliability( + self.time, + self.stress, + self.temperatures, + self.volumes, + self.material, + self.nf * self.period, + ) + + # Summing up log probabilities over nelem and taking the value of one + R_CSE_GF = np.exp(np.sum(actual, axis=1))[0] + # R_CSE_GF = np.exp(np.sum(actual,axis=tuple(range(actual.ndim))[1:]))[-1] + print("Time dep Reliability CSE GF = ", R_CSE_GF) + + # Evaluating Probability of Failure + Pf_CSE_GF = 1 - R_CSE_GF + print("Time dep Probability of failure CSE GF = ", Pf_CSE_GF) + + +class TestCSEModelPennyShapedFlaw(unittest.TestCase): + def setUp(self): + # data = np.loadtxt("Spinning_disk_cyclic_60000_70000.txt") + # data = np.loadtxt( + # os.path.join( + # os.path.dirname(os.path.abspath(__file__)), + # "Spinning_disk_cyclic_60000_70000.txt", + # # "Spinning_disk_cyclic_60000_80000.txt", + # ) + # ) + # data = np.loadtxt("Spinning_disk_static_60000.txt") + data = np.loadtxt( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "Spinning_disk_100k.csv", + ), + delimiter=",", + skiprows=1, + usecols=list(range(1, 49)), + ) + + self.stress = data.reshape(data.shape[0], 8, -1) + + vol_factor = 360 / 15 + # self.volumes = np.loadtxt( + # os.path.join( + # os.path.dirname(os.path.abspath(__file__)), + # "Spinning_disk_volumes.txt", + # ) + # ) + + self.volumes = np.loadtxt( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "volumes_8.csv", + ), + delimiter=",", + # skiprows=1, + # usecols=list(range(1, 55)), + ) + self.volumes = vol_factor * self.volumes + + self.temperatures = np.ones((data.shape[0], 8)) + + # Number of cycles to failure + self.nf = 0 + self.period = 0.01 + self.time = np.linspace(0, self.period, self.stress.shape[0]) + + # Material properties + self.m = 7.65 + self.s0 = 74.79 * ((1000) ** (3 / self.m)) # in mm 74.79 in m + self.c_bar = 0.82 + self.nu = 0.219 + self.Nv = 30 + self.Bv = 320 + + # Model specific property + # self.kbar = 7.13 + + self.material = materials.StandardCeramicMaterial( + np.array([0, 1000.0]), + np.array([self.s0, self.s0]), + np.array([0, 1000.0]), + np.array([self.m, self.m]), + self.c_bar, + self.nu, + self.Nv, + self.Bv, + ) + + self.model_time_dep = damage_time_dep_cyclic.CSEModelPennyShapedFlaw( + solverparams.ParameterSet() + ) + + def test_definition(self): + # k = self.s0 ** (-self.m) + # kp = (self.m + 1) * k + + actual = self.model_time_dep.calculate_element_log_reliability( + self.time, + self.stress, + self.temperatures, + self.volumes, + self.material, + self.nf * self.period, + ) + + # Summing up log probabilities over nelem and taking the value of one + R_CSE_PSF = np.exp(np.sum(actual, axis=1))[0] + # R_CSE_PSF = np.exp(np.sum(actual,axis=tuple(range(actual.ndim))[1:]))[-1] + print("Time dep Reliability CSE_PSF = ", R_CSE_PSF) + + # Evaluating Probability of Failure + Pf_CSE_PSF = 1 - R_CSE_PSF + print("Time dep Probability of failure CSE_PSF = ", Pf_CSE_PSF) + + +class TestSMMModelGriffithFlaw(unittest.TestCase): + def setUp(self): + # data = np.loadtxt("Spinning_disk_cyclic_60000_70000.txt") + # data = np.loadtxt( + # os.path.join( + # os.path.dirname(os.path.abspath(__file__)), + # "Spinning_disk_cyclic_60000_70000.txt", + # # "Spinning_disk_cyclic_60000_80000.txt", + # ) + # ) + # data = np.loadtxt("Spinning_disk_static_60000.txt") + data = np.loadtxt( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "Spinning_disk_100k.csv", + ), + delimiter=",", + skiprows=1, + usecols=list(range(1, 49)), + ) + + self.stress = data.reshape(data.shape[0], 8, -1) + + vol_factor = 360 / 15 + # self.volumes = np.loadtxt( + # os.path.join( + # os.path.dirname(os.path.abspath(__file__)), + # "Spinning_disk_volumes.txt", + # ) + # ) + + self.volumes = np.loadtxt( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "volumes_8.csv", + ), + delimiter=",", + # skiprows=1, + # usecols=list(range(1, 55)), + ) + self.volumes = vol_factor * self.volumes + + self.temperatures = np.ones((data.shape[0], 8)) + + # Number of cycles to failure + self.nf = 100 + self.period = 0.01 + self.time = np.linspace(0, self.period, self.stress.shape[0]) + + # Material properties + self.m = 7.65 + self.s0 = 74.79 * ((1000) ** (3 / self.m)) # in mm 74.79 in m + self.c_bar = 0.82 + self.nu = 0.219 + self.Nv = 30 + self.Bv = 320 + + # Model specific property + # self.kbar = 2.92 + + self.material = materials.StandardCeramicMaterial( + np.array([0, 1000.0]), + np.array([self.s0, self.s0]), + np.array([0, 1000.0]), + np.array([self.m, self.m]), + self.c_bar, + self.nu, + self.Nv, + self.Bv, + ) + + self.model_time_dep = damage_time_dep_cyclic.SMMModelGriffithFlaw( + solverparams.ParameterSet() + ) + + def test_definition(self): + # k = self.s0 ** (-self.m) + # kp = (2.99) * k + + actual = self.model_time_dep.calculate_element_log_reliability( + self.time, + self.stress, + self.temperatures, + self.volumes, + self.material, + self.nf * self.period, + ) + + # Summing up log probabilities over nelem and taking the value of one + R_SMM_GF = np.exp(np.sum(actual, axis=1))[0] + print("Time dep Reliability SMM_GF = ", R_SMM_GF) + + # Evaluating Probability of Failure + Pf_SMM_GF = 1 - R_SMM_GF + print("Time dep Probability of failure SMM_GF = ", Pf_SMM_GF) + + +class TestSMMModelPennyShapedFlaw(unittest.TestCase): + def setUp(self): + # data = np.loadtxt("Spinning_disk_cyclic_60000_70000.txt") + # data = np.loadtxt( + # os.path.join( + # os.path.dirname(os.path.abspath(__file__)), + # "Spinning_disk_cyclic_60000_70000.txt", + # # "Spinning_disk_cyclic_60000_80000.txt", + # ) + # ) + # data = np.loadtxt("Spinning_disk_static_60000.txt") + data = np.loadtxt( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "Spinning_disk_100k.csv", + ), + delimiter=",", + skiprows=1, + usecols=list(range(1, 49)), + ) + + self.stress = data.reshape(data.shape[0], 8, -1) + + vol_factor = 360 / 15 + # self.volumes = np.loadtxt( + # os.path.join( + # os.path.dirname(os.path.abspath(__file__)), + # "Spinning_disk_volumes.txt", + # ) + # ) + + self.volumes = np.loadtxt( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "volumes_8.csv", + ), + delimiter=",", + # skiprows=1, + # usecols=list(range(1, 55)), + ) + self.volumes = vol_factor * self.volumes + + self.temperatures = np.ones((data.shape[0], 8)) + + # Number of cycles to failure + self.nf = 100 + self.period = 0.01 + self.time = np.linspace(0, self.period, self.stress.shape[0]) + + # Material properties + self.m = 7.65 + self.s0 = 74.79 * ((1000) ** (3 / self.m)) # in mm 74.79 in m + self.c_bar = 0.82 + self.nu = 0.219 + self.Nv = 30 + self.Bv = 320 + + # Model specific property + # self.kbar = 1.96 + + self.material = materials.StandardCeramicMaterial( + np.array([0, 1000.0]), + np.array([self.s0, self.s0]), + np.array([0, 1000.0]), + np.array([self.m, self.m]), + self.c_bar, + self.nu, + self.Nv, + self.Bv, + ) + self.model_time_dep = damage_time_dep_cyclic.SMMModelPennyShapedFlaw( + solverparams.ParameterSet() + ) + + def test_definition(self): + # k = self.s0 ** (-self.m) + # kp = (2.99) * k + + actual = self.model_time_dep.calculate_element_log_reliability( + self.time, + self.stress, + self.temperatures, + self.volumes, + self.material, + self.nf * self.period, + ) + # print("actual shape =", actual.shape) + + # Summing up log probabilities over nelem and taking the value of one + R_SMM_PSF = np.exp(np.sum(actual, axis=1))[0] + print("Time dep Reliability SMM_PSF = ", R_SMM_PSF) + + # Evaluating Probability of Failure + Pf_SMM_PSF = 1 - R_SMM_PSF + print("Time dep Probability of failure SMM_PSF = ", Pf_SMM_PSF) diff --git a/test/volumes_8.csv b/test/volumes_8.csv new file mode 100644 index 0000000..1a9794b --- /dev/null +++ b/test/volumes_8.csv @@ -0,0 +1,8 @@ +36.7065 +55.4851 +74.2628 +93.0349 +111.799 +130.552 +149.29 +168.004 From 203a690eb08f3fdff002e54c634d02a5c78dd878 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Mon, 20 Mar 2023 13:51:53 -0500 Subject: [PATCH 22/71] Cyclic and static fatigue all models implemented --- srlife/damage_time_dep_cyclic.py | 97 +++-- test/test_ceramic_damage_CARES_cyclic.py | 477 +++++++++++++---------- test/test_ceramic_damage_CARES_static.py | 361 ++++++++++++----- 3 files changed, 586 insertions(+), 349 deletions(-) diff --git a/srlife/damage_time_dep_cyclic.py b/srlife/damage_time_dep_cyclic.py index d471c05..d47b84f 100644 --- a/srlife/damage_time_dep_cyclic.py +++ b/srlife/damage_time_dep_cyclic.py @@ -357,17 +357,11 @@ def calculate_flattened_eq_stress( with np.errstate(invalid="ignore"): g_integral = (sigma_e / sigma_e_max) ** Nv - # Defining dt (period_array) for integration in g using period (in hours) Note: replace period with period from receiver - # print("number of cycles to failure =", nf) - # self.period_array = np.linspace(0, period, pstress.shape[0]) - + # Defining time based on period of one cycle and number of time steps # Calculate g using an integration method - g = (np.trapz(g_integral, time, axis=0)) / time[-1] - # print("g =", g) - # Defining tf - # self.tot_time = nf * period # replace with period from receiver + # Defining tot_time as nf * period print("service time =", tot_time) # Time dependent equivalent stress @@ -496,19 +490,19 @@ def calculate_element_log_reliability( # Only tension pstress[pstress < 0] = 0 - # Max value - eff_max = np.max(pstress, axis=0) + # Max principal stresss over all time steps for each element + pstress_max = np.max(pstress, axis=0) # g - g = np.trapz((pstress / (eff_max + 1.0e-14)) ** Nv, time, axis=0) / time[-1] + g = np.trapz((pstress / (pstress_max + 1.0e-14)) ** Nv, time, axis=0) / time[-1] # Defining tf print("service time =", tot_time) # Time dependent principal stress - pstress_0 = ((eff_max**Nv * g * tot_time) / Bv + (eff_max ** (Nv - 2))) ** ( - 1 / (Nv - 2) - ) + pstress_0 = ( + (pstress_max**Nv * g * tot_time) / Bv + (pstress_max ** (Nv - 2)) + ) ** (1 / (Nv - 2)) # Use temperature average values? mavg = np.mean(mvals, axis=0) @@ -525,7 +519,9 @@ class WNTSAModel(CrackShapeIndependent): area of a sphere, and uses it to calculate the element reliability """ - def calculate_avg_normal_stress(self, mandel_stress, temperatures, nf, material): + def calculate_avg_normal_stress( + self, time, mandel_stress, temperatures, material, tot_time + ): """ Calculate the average normal tensile stresses from the pricipal stresses @@ -537,8 +533,14 @@ def calculate_avg_normal_stress(self, mandel_stress, temperatures, nf, material) # Principal stresses pstress = self.calculate_principal_stress(mandel_stress) + # mvals = material.modulus(temperatures)[: pstress.shape[1]] # Material parameters - mvals = material.modulus(temperatures)[: pstress.shape[1]] + self.temperatures = temperatures + self.material = material + self.mandel_stress = mandel_stress + self.mvals = self.material.modulus(temperatures) + Nv = material.Nv(temperatures) + Bv = material.Bv(temperatures) # Time dependent Normal stress sigma_n = self.calculate_normal_stress(mandel_stress) @@ -546,31 +548,43 @@ def calculate_avg_normal_stress(self, mandel_stress, temperatures, nf, material) # Considering only tensile stresses sigma_n[sigma_n < 0] = 0 + # Max normal stresss over all time steps for each element + sigma_n_max = np.max(sigma_n, axis=0) + + # Defining time based on period of one cycle and number of time steps + # Calculate g using an integration method + g = np.trapz((sigma_n / (sigma_n_max + 1.0e-14)) ** Nv, time, axis=0) / time[-1] + + # Defining tot_time as nf * period + print("service time =", tot_time) + + # Time dependent equivalent stress + sigma_n_0 = ( + (((sigma_n_max**Nv) * g * tot_time) / Bv) + (sigma_n_max ** (Nv - 2)) + ) ** (1 / (Nv - 2)) + with np.errstate(invalid="ignore"): integral = ( - (sigma_n ** mvals[..., None, None, None]) - * np.sin(self.A)[..., None] - * self.dalpha[..., None] - * self.dbeta[..., None] + (sigma_n_0 ** self.mvals[..., None, None]) + * np.sin(self.A) + * self.dalpha + * self.dbeta ) / (4 * np.pi) # Flatten the last axis and calculate the mean of the positive values along that axis + # slicing the shape of integral and reshaping it with a new size (to flatten) based on the last size element of integral if pstress.ndim == 2: - flat = integral.reshape( - integral.shape[:3] + (-1,) - ) # when no time steps involved + flat = integral.reshape(integral.shape[:1] + (-1,)) elif pstress.ndim == 3: - flat = integral.reshape( - integral.shape[:4] + (-1,) - ) # when time steps involved + flat = integral.reshape(integral.shape[:2] + (-1,)) - # Suppressing warning to ignoring initial NaN values + # Suppressing warning to ignoring initial NaN values with np.errstate(invalid="ignore"): # Average stress - return np.nansum(np.where(flat >= 0.0, flat, np.nan), axis=-2) + return np.nansum(np.where(flat >= 0.0, flat, np.nan), axis=-1) def calculate_element_log_reliability( - self, mandel_stress, temperatures, volumes, nf, material + self, time, mandel_stress, temperatures, volumes, material, tot_time ): """ Calculate the element log reliability @@ -579,23 +593,34 @@ def calculate_element_log_reliability( mandel_stress: element stresses in Mandel convention temperatures: element temperatures volumes: element volumes - material: material model object with required data + material: material model object with required data that includes + Weibull scale parameter (svals) and Weibull modulus (mvals) + tot_time: total time at which to calculate reliability """ + self.temperatures = temperatures + self.material = material + self.mandel_stress = mandel_stress # Material parameters svals = material.strength(temperatures) mvals = material.modulus(temperatures) kvals = svals ** (-mvals) kpvals = (2 * mvals + 1) * kvals + Nv = material.Nv(temperatures) + Bv = material.Bv(temperatures) # Average normal tensile stress raied to exponent mv avg_nstress = ( - self.calculate_avg_normal_stress(mandel_stress, temperatures, nf, material) - ) ** (1 / mvals[..., None, None]) + self.calculate_avg_normal_stress( + time, + mandel_stress, + self.temperatures, + self.material, + tot_time, + ) + ) ** (1 / mvals) - return ( - -kpvals[..., None] * (avg_nstress ** mvals[..., None]) * volumes[..., None] - ) + return -kpvals * (avg_nstress**mvals) * volumes class MTSModelGriffithFlaw(CrackShapeDependent): @@ -678,7 +703,7 @@ def calculate_eq_stress(self, mandel_stress, temperatures, material): """ # Material parameters - nu = material.nu(temperatures)[0] + nu = material.nu(temperatures).flat[0] # Normal stress sigma_n = self.calculate_normal_stress(mandel_stress) diff --git a/test/test_ceramic_damage_CARES_cyclic.py b/test/test_ceramic_damage_CARES_cyclic.py index 9c98b86..129f821 100644 --- a/test/test_ceramic_damage_CARES_cyclic.py +++ b/test/test_ceramic_damage_CARES_cyclic.py @@ -16,132 +16,11 @@ class TestPIAModel(unittest.TestCase): def setUp(self): - # 60,000 to 70,000 rpm - # self.stress = np.array( - # [ - # [ - # [44.08801004196201, 160.56004134571623, 0, 0, 0, 0], - # [70.56728995109746, 125.49389020226235, 0, 0, 0, 0], - # [73.64178822023885, 110.33416575148763, 0, 0, 0, 0], - # [68.42220922221401, 99.97016362056426, 0, 0, 0, 0], - # [58.56207074702157, 90.74836601949357, 0, 0, 0, 0], - # [45.29913637906247, 81.43100936387464, 0, 0, 0, 0], - # [29.14665988998162, 71.50483988206251, 0, 0, 0, 0], - # [10.348573211586011, 60.72592564225028, 0, 0, 0, 0], - # ], - # [ - # [51.13165661671334, 186.21164558438093, 0, 0, 0, 0], - # [81.84135402612488, 145.5432099387185, 0, 0, 0, 0], - # [85.40704432643088, 127.96151767628152, 0, 0, 0, 0], - # [79.35356809203516, 115.94172822266626, 0, 0, 0, 0], - # [67.9181412213978, 105.24662567941266, 0, 0, 0, 0], - # [52.53627651062867, 94.44069725041082, 0, 0, 0, 0], - # [33.80322685465324, 82.92869004073522, 0, 0, 0, 0], - # [12.001895558999173, 70.42770074485833, 0, 0, 0, 0], - # ], - # [ - # [44.08801004196201, 160.56004134571623, 0, 0, 0, 0], - # [70.56728995109746, 125.49389020226235, 0, 0, 0, 0], - # [73.64178822023885, 110.33416575148763, 0, 0, 0, 0], - # [68.42220922221401, 99.97016362056426, 0, 0, 0, 0], - # [58.56207074702157, 90.74836601949357, 0, 0, 0, 0], - # [45.29913637906247, 81.43100936387464, 0, 0, 0, 0], - # [29.14665988998162, 71.50483988206251, 0, 0, 0, 0], - # [10.348573211586011, 60.72592564225028, 0, 0, 0, 0], - # ], - # [ - # [37.5661150653404, 136.80855593954516, 0, 0, 0, 0], - # [60.12834173347949, 106.92970526109927, 0, 0, 0, 0], - # [62.74803256635736, 94.01254359890069, 0, 0, 0, 0], - # [58.30058063904624, 85.18167787787723, 0, 0, 0, 0], - # [49.89904253000652, 77.32405151956847, 0, 0, 0, 0], - # [38.59808070168636, 69.3850020615263, 0, 0, 0, 0], - # [24.835023811581966, 60.92720084625443, 0, 0, 0, 0], - # [8.81771918620344, 51.742800547242815, 0, 0, 0, 0], - # ], - # [ - # [44.08801004196201, 160.56004134571623, 0, 0, 0, 0], - # [70.56728995109746, 125.49389020226235, 0, 0, 0, 0], - # [73.64178822023885, 110.33416575148763, 0, 0, 0, 0], - # [68.42220922221401, 99.97016362056426, 0, 0, 0, 0], - # [58.56207074702157, 90.74836601949357, 0, 0, 0, 0], - # [45.29913637906247, 81.43100936387464, 0, 0, 0, 0], - # [29.14665988998162, 71.50483988206251, 0, 0, 0, 0], - # [10.348573211586011, 60.72592564225028, 0, 0, 0, 0], - # ], - # ] - # ) - - # 60,000 to 80,000 rpm - # self.stress = np.array( - # [ - # [ - # [51.131656616713364, 186.21164558438102, 0, 0, 0, 0], - # [81.8413540261249, 145.54320993871852, 0, 0, 0, 0], - # [85.40704432643089, 127.96151767628156, 0, 0, 0, 0], - # [79.3535680920352, 115.9417282226663, 0, 0, 0, 0], - # [67.91814122139785, 105.2466256794127, 0, 0, 0, 0], - # [52.53627651062872, 94.44069725041086, 0, 0, 0, 0], - # [33.803226854653296, 82.92869004073528, 0, 0, 0, 0], - # [12.001895558999221, 70.42770074485836, 0, 0, 0, 0], - # ], - # [ - # [66.78420456060523, 243.21521055919152, 0, 0, 0, 0], - # [106.89482974840807, 190.09725379750992, 0, 0, 0, 0], - # [111.55205789574653, 167.1334108424902, 0, 0, 0, 0], - # [103.64547669163787, 151.43409400511518, 0, 0, 0, 0], - # [88.70940894223394, 137.46498047923293, 0, 0, 0, 0], - # [68.61881013633139, 123.35111477604686, 0, 0, 0, 0], - # [44.15115344281247, 108.31502372667464, 0, 0, 0, 0], - # [15.67594521991733, 91.98720097287624, 0, 0, 0, 0], - # ], - # [ - # [51.131656616713364, 186.21164558438102, 0, 0, 0, 0], - # [81.8413540261249, 145.54320993871852, 0, 0, 0, 0], - # [85.40704432643089, 127.96151767628156, 0, 0, 0, 0], - # [79.3535680920352, 115.9417282226663, 0, 0, 0, 0], - # [67.91814122139785, 105.2466256794127, 0, 0, 0, 0], - # [52.53627651062872, 94.44069725041086, 0, 0, 0, 0], - # [33.803226854653296, 82.92869004073528, 0, 0, 0, 0], - # [12.001895558999221, 70.42770074485836, 0, 0, 0, 0], - # ], - # [ - # [37.56611506534044, 136.80855593954522, 0, 0, 0, 0], - # [60.128341733479516, 106.92970526109931, 0, 0, 0, 0], - # [62.74803256635741, 94.01254359890075, 0, 0, 0, 0], - # [58.30058063904628, 85.18167787787728, 0, 0, 0, 0], - # [49.899042530006575, 77.32405151956851, 0, 0, 0, 0], - # [38.5980807016864, 69.38500206152634, 0, 0, 0, 0], - # [24.835023811582005, 60.92720084625447, 0, 0, 0, 0], - # [8.817719186203488, 51.74280054724287, 0, 0, 0, 0], - # ], - # [ - # [51.13165661671336, 186.211645584381, 0, 0, 0, 0], - # [81.8413540261249, 145.54320993871852, 0, 0, 0, 0], - # [85.40704432643089, 127.96151767628156, 0, 0, 0, 0], - # [79.3535680920352, 115.94172822266628, 0, 0, 0, 0], - # [67.91814122139785, 105.24662567941269, 0, 0, 0, 0], - # [52.536276510628696, 94.44069725041085, 0, 0, 0, 0], - # [33.80322685465327, 82.92869004073526, 0, 0, 0, 0], - # [12.001895558999221, 70.42770074485836, 0, 0, 0, 0], - # ], - # ] - # ) - - # data = np.loadtxt("Spinning_disk_cyclic_60000_70000.txt") - # data = np.loadtxt( - # os.path.join( - # os.path.dirname(os.path.abspath(__file__)), - # "Spinning_disk_cyclic_60000_70000.txt", - # # "Spinning_disk_cyclic_60000_80000.txt", - # ) - # ) - # data = np.loadtxt("Spinning_disk_static_60000.txt") data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - # "Spinning_disk_60k_70k.csv", - "Spinning_disk_60k_80k.csv", + "Spinning_disk_60k_70k.csv", + # "Spinning_disk_60k_80k.csv", ), delimiter=",", skiprows=1, @@ -219,18 +98,91 @@ def test_definition(self): Pf_PIA = 1 - R_PIA print("Time dep Probability of failure PIA = ", Pf_PIA) + with open("PIA_60K_80K.txt", "a+") as external_file: + external_file.write("\n") + external_file.write(f"{Pf_PIA}") -class TestCSEModelGriffithFlaw(unittest.TestCase): + +class TestWNTSAModel(unittest.TestCase): + def setUp(self): + data = np.loadtxt( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "Spinning_disk_60k_70k.csv", + # "Spinning_disk_60k_80k.csv", + ), + delimiter=",", + skiprows=1, + usecols=list(range(1, 49)), + ) + + self.stress = data.reshape(data.shape[0], 8, -1) + + vol_factor = 360 / 15 + + self.volumes = np.loadtxt( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "volumes_8.csv", + ), + delimiter=",", + ) + self.volumes = vol_factor * self.volumes + self.temperatures = np.ones((data.shape[0], 8)) + + # Number of cycles to failure + self.nf = 100000 + self.period = 0.01 + self.time = np.linspace(0, self.period, self.stress.shape[0]) + + # Material properties + self.m = 7.65 + self.s0 = 74.79 * ((1000) ** (3 / self.m)) # in mm 74.79 in m + self.c_bar = 0.82 + self.nu = 0.219 + self.Nv = 30 + self.Bv = 320 + + self.material = materials.StandardCeramicMaterial( + np.array([0, 1000.0]), + np.array([self.s0, self.s0]), + np.array([0, 1000.0]), + np.array([self.m, self.m]), + self.c_bar, + self.nu, + self.Nv, + self.Bv, + ) + + self.model_time_dep = damage_time_dep_cyclic.WNTSAModel( + solverparams.ParameterSet() + ) + + def test_definition(self): + actual = self.model_time_dep.calculate_element_log_reliability( + self.time, + self.stress, + self.temperatures, + self.volumes, + self.material, + self.nf * self.period, + ) + + # Summing up log probabilities over nelem and taking the value of one + R_WNTSA = np.exp(np.sum(actual, axis=1))[0] + print("Time dep Reliability WNTSA = ", R_WNTSA) + + # Evaluating Probability of Failure + Pf_WNTSA = 1 - R_WNTSA + print("Time dep Probability of failure WNTSA = ", Pf_WNTSA) + + with open("WNTSA_60K_80K.txt", "a+") as external_file: + external_file.write("\n") + external_file.write(f"{Pf_WNTSA}") + + +class TestMTSModelGriffithFlaw(unittest.TestCase): def setUp(self): - # data = np.loadtxt("Spinning_disk_cyclic_60000_70000.txt") - # data = np.loadtxt( - # os.path.join( - # os.path.dirname(os.path.abspath(__file__)), - # "Spinning_disk_cyclic_60000_70000.txt", - # # "Spinning_disk_cyclic_60000_80000.txt", - # ) - # ) - # data = np.loadtxt("Spinning_disk_static_60000.txt") data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), @@ -245,12 +197,6 @@ def setUp(self): self.stress = data.reshape(data.shape[0], 8, -1) vol_factor = 360 / 15 - # self.volumes = np.loadtxt( - # os.path.join( - # os.path.dirname(os.path.abspath(__file__)), - # "Spinning_disk_volumes.txt", - # ) - # ) self.volumes = np.loadtxt( os.path.join( @@ -258,8 +204,6 @@ def setUp(self): "volumes_8.csv", ), delimiter=",", - # skiprows=1, - # usecols=list(range(1, 55)), ) self.volumes = vol_factor * self.volumes @@ -278,8 +222,165 @@ def setUp(self): self.Nv = 30 self.Bv = 320 - # Model specific property - # self.kbar = self.m + 1 + self.material = materials.StandardCeramicMaterial( + np.array([0, 1000.0]), + np.array([self.s0, self.s0]), + np.array([0, 1000.0]), + np.array([self.m, self.m]), + self.c_bar, + self.nu, + self.Nv, + self.Bv, + ) + + self.model_time_dep = damage_time_dep_cyclic.MTSModelGriffithFlaw( + solverparams.ParameterSet() + ) + + def test_definition(self): + actual = self.model_time_dep.calculate_element_log_reliability( + self.time, + self.stress, + self.temperatures, + self.volumes, + self.material, + self.nf * self.period, + ) + + # Summing up log probabilities over nelem and taking the value of one + R_MTS_GF = np.exp(np.sum(actual, axis=1))[0] + # R_MTS_GF = np.exp(np.sum(actual,axis=tuple(range(actual.ndim))[1:]))[-1] + print("Time dep Reliability MTS GF = ", R_MTS_GF) + + # Evaluating Probability of Failure + Pf_MTS_GF = 1 - R_MTS_GF + print("Time dep Probability of failure MTS GF = ", Pf_MTS_GF) + + with open("MTS_GF_60K_80K.txt", "a+") as external_file: + external_file.write("\n") + external_file.write(f"{Pf_MTS_GF}") + + +class TestMTSModelPennyShapedFlaw(unittest.TestCase): + def setUp(self): + data = np.loadtxt( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), + # "Spinning_disk_60k_70k.csv", + "Spinning_disk_60k_80k.csv", + ), + delimiter=",", + skiprows=1, + usecols=list(range(1, 49)), + ) + + self.stress = data.reshape(data.shape[0], 8, -1) + + vol_factor = 360 / 15 + + self.volumes = np.loadtxt( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "volumes_8.csv", + ), + delimiter=",", + ) + self.volumes = vol_factor * self.volumes + + self.temperatures = np.ones((data.shape[0], 8)) + + # Number of cycles to failure + self.nf = 100000 + self.period = 0.01 + self.time = np.linspace(0, self.period, self.stress.shape[0]) + + # Material properties + self.m = 7.65 + self.s0 = 74.79 * ((1000) ** (3 / self.m)) # in mm 74.79 in m + self.c_bar = 0.82 + self.nu = 0.219 + self.Nv = 30 + self.Bv = 320 + + self.material = materials.StandardCeramicMaterial( + np.array([0, 1000.0]), + np.array([self.s0, self.s0]), + np.array([0, 1000.0]), + np.array([self.m, self.m]), + self.c_bar, + self.nu, + self.Nv, + self.Bv, + ) + + self.model_time_dep = damage_time_dep_cyclic.MTSModelPennyShapedFlaw( + solverparams.ParameterSet() + ) + + def test_definition(self): + actual = self.model_time_dep.calculate_element_log_reliability( + self.time, + self.stress, + self.temperatures, + self.volumes, + self.material, + self.nf * self.period, + ) + + # Summing up log probabilities over nelem and taking the value of one + R_MTS_PSF = np.exp(np.sum(actual, axis=1))[0] + # R_MTS_PSF = np.exp(np.sum(actual,axis=tuple(range(actual.ndim))[1:]))[-1] + print("Time dep Reliability MTS_PSF = ", R_MTS_PSF) + + # Evaluating Probability of Failure + Pf_MTS_PSF = 1 - R_MTS_PSF + print("Time dep Probability of failure MTS_PSF = ", Pf_MTS_PSF) + + with open("MTS_PSF_60K_80K.txt", "a+") as external_file: + external_file.write("\n") + external_file.write(f"{Pf_MTS_PSF}") + + +class TestCSEModelGriffithFlaw(unittest.TestCase): + def setUp(self): + data = np.loadtxt( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), + # "Spinning_disk_60k_70k.csv", + "Spinning_disk_60k_80k.csv", + ), + delimiter=",", + skiprows=1, + usecols=list(range(1, 49)), + ) + + self.stress = data.reshape(data.shape[0], 8, -1) + + vol_factor = 360 / 15 + + self.volumes = np.loadtxt( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "volumes_8.csv", + ), + delimiter=",", + ) + self.volumes = vol_factor * self.volumes + + self.temperatures = np.ones((data.shape[0], 8)) + + # Number of cycles to failure + self.nf = 1 + self.period = 0.01 + self.time = np.linspace(0, self.period, self.stress.shape[0]) + + # Material properties + self.m = 7.65 + self.s0 = 74.79 * ((1000) ** (3 / self.m)) # in mm 74.79 in m + self.c_bar = 0.82 + self.nu = 0.219 + self.Nv = 30 + self.Bv = 320 self.material = materials.StandardCeramicMaterial( np.array([0, 1000.0]), @@ -299,9 +400,6 @@ def setUp(self): # self.model = damage.CSEModelGriffithFlaw(solverparams.ParameterSet()) def test_definition(self): - # k = self.s0 ** (-self.m) - # kp = (self.m + 1) * k - actual = self.model_time_dep.calculate_element_log_reliability( self.time, self.stress, @@ -320,18 +418,13 @@ def test_definition(self): Pf_CSE_GF = 1 - R_CSE_GF print("Time dep Probability of failure CSE GF = ", Pf_CSE_GF) + with open("CSE_GF_60K_80K.txt", "a+") as external_file: + external_file.write("\n") + external_file.write(f"{Pf_CSE_GF}") + class TestCSEModelPennyShapedFlaw(unittest.TestCase): def setUp(self): - # data = np.loadtxt("Spinning_disk_cyclic_60000_70000.txt") - # data = np.loadtxt( - # os.path.join( - # os.path.dirname(os.path.abspath(__file__)), - # "Spinning_disk_cyclic_60000_70000.txt", - # # "Spinning_disk_cyclic_60000_80000.txt", - # ) - # ) - # data = np.loadtxt("Spinning_disk_static_60000.txt") data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), @@ -346,12 +439,6 @@ def setUp(self): self.stress = data.reshape(data.shape[0], 8, -1) vol_factor = 360 / 15 - # self.volumes = np.loadtxt( - # os.path.join( - # os.path.dirname(os.path.abspath(__file__)), - # "Spinning_disk_volumes.txt", - # ) - # ) self.volumes = np.loadtxt( os.path.join( @@ -359,8 +446,6 @@ def setUp(self): "volumes_8.csv", ), delimiter=",", - # skiprows=1, - # usecols=list(range(1, 55)), ) self.volumes = vol_factor * self.volumes @@ -379,9 +464,6 @@ def setUp(self): self.Nv = 30 self.Bv = 320 - # Model specific property - # self.kbar = 7.13 - self.material = materials.StandardCeramicMaterial( np.array([0, 1000.0]), np.array([self.s0, self.s0]), @@ -398,9 +480,6 @@ def setUp(self): ) def test_definition(self): - # k = self.s0 ** (-self.m) - # kp = (self.m + 1) * k - actual = self.model_time_dep.calculate_element_log_reliability( self.time, self.stress, @@ -419,18 +498,13 @@ def test_definition(self): Pf_CSE_PSF = 1 - R_CSE_PSF print("Time dep Probability of failure CSE_PSF = ", Pf_CSE_PSF) + with open("CSE_PSF_60K_80K.txt", "a+") as external_file: + external_file.write("\n") + external_file.write(f"{Pf_CSE_PSF}") + class TestSMMModelGriffithFlaw(unittest.TestCase): def setUp(self): - # data = np.loadtxt("Spinning_disk_cyclic_60000_70000.txt") - # data = np.loadtxt( - # os.path.join( - # os.path.dirname(os.path.abspath(__file__)), - # "Spinning_disk_cyclic_60000_70000.txt", - # # "Spinning_disk_cyclic_60000_80000.txt", - # ) - # ) - # data = np.loadtxt("Spinning_disk_static_60000.txt") data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), @@ -445,12 +519,6 @@ def setUp(self): self.stress = data.reshape(data.shape[0], 8, -1) vol_factor = 360 / 15 - # self.volumes = np.loadtxt( - # os.path.join( - # os.path.dirname(os.path.abspath(__file__)), - # "Spinning_disk_volumes.txt", - # ) - # ) self.volumes = np.loadtxt( os.path.join( @@ -458,8 +526,6 @@ def setUp(self): "volumes_8.csv", ), delimiter=",", - # skiprows=1, - # usecols=list(range(1, 55)), ) self.volumes = vol_factor * self.volumes @@ -478,9 +544,6 @@ def setUp(self): self.Nv = 30 self.Bv = 320 - # Model specific property - # self.kbar = 2.92 - self.material = materials.StandardCeramicMaterial( np.array([0, 1000.0]), np.array([self.s0, self.s0]), @@ -497,9 +560,6 @@ def setUp(self): ) def test_definition(self): - # k = self.s0 ** (-self.m) - # kp = (2.99) * k - actual = self.model_time_dep.calculate_element_log_reliability( self.time, self.stress, @@ -517,18 +577,13 @@ def test_definition(self): Pf_SMM_GF = 1 - R_SMM_GF print("Time dep Probability of failure SMM_GF = ", Pf_SMM_GF) + with open("SMM_GF_60K_80K.txt", "a+") as external_file: + external_file.write("\n") + external_file.write(f"{Pf_SMM_GF}") + class TestSMMModelPennyShapedFlaw(unittest.TestCase): def setUp(self): - # data = np.loadtxt("Spinning_disk_cyclic_60000_70000.txt") - # data = np.loadtxt( - # os.path.join( - # os.path.dirname(os.path.abspath(__file__)), - # "Spinning_disk_cyclic_60000_70000.txt", - # # "Spinning_disk_cyclic_60000_80000.txt", - # ) - # ) - # data = np.loadtxt("Spinning_disk_static_60000.txt") data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), @@ -543,12 +598,6 @@ def setUp(self): self.stress = data.reshape(data.shape[0], 8, -1) vol_factor = 360 / 15 - # self.volumes = np.loadtxt( - # os.path.join( - # os.path.dirname(os.path.abspath(__file__)), - # "Spinning_disk_volumes.txt", - # ) - # ) self.volumes = np.loadtxt( os.path.join( @@ -556,15 +605,13 @@ def setUp(self): "volumes_8.csv", ), delimiter=",", - # skiprows=1, - # usecols=list(range(1, 55)), ) self.volumes = vol_factor * self.volumes self.temperatures = np.ones((data.shape[0], 8)) # Number of cycles to failure - self.nf = 100000 + self.nf = 1 self.period = 0.01 self.time = np.linspace(0, self.period, self.stress.shape[0]) @@ -576,9 +623,6 @@ def setUp(self): self.Nv = 30 self.Bv = 320 - # Model specific property - # self.kbar = 1.96 - self.material = materials.StandardCeramicMaterial( np.array([0, 1000.0]), np.array([self.s0, self.s0]), @@ -594,9 +638,6 @@ def setUp(self): ) def test_definition(self): - # k = self.s0 ** (-self.m) - # kp = (2.99) * k - actual = self.model_time_dep.calculate_element_log_reliability( self.time, self.stress, @@ -614,3 +655,7 @@ def test_definition(self): # Evaluating Probability of Failure Pf_SMM_PSF = 1 - R_SMM_PSF print("Time dep Probability of failure SMM_PSF = ", Pf_SMM_PSF) + + with open("SMM_PSF_60K_80K.txt", "a+") as external_file: + external_file.write("\n") + external_file.write(f"{Pf_SMM_PSF}") diff --git a/test/test_ceramic_damage_CARES_static.py b/test/test_ceramic_damage_CARES_static.py index 02714f8..fe1be0d 100644 --- a/test/test_ceramic_damage_CARES_static.py +++ b/test/test_ceramic_damage_CARES_static.py @@ -28,7 +28,7 @@ def setUp(self): data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - "Spinning_disk_100k.csv", + "Spinning_disk_60k.csv", ), delimiter=",", skiprows=1, @@ -58,7 +58,7 @@ def setUp(self): self.temperatures = np.ones((data.shape[0], 8)) # Number of cycles to failure - self.nf = 100 + self.nf = 0 self.period = 0.01 self.time = np.linspace(0, self.period, self.stress.shape[0]) @@ -106,22 +106,97 @@ def test_definition(self): Pf_PIA = 1 - R_PIA print("Time dep Probability of failure PIA = ", Pf_PIA) + with open("PIA_60K.txt", "a+") as external_file: + external_file.write("\n") + external_file.write(f"{Pf_PIA}") -class TestCSEModelGriffithFlaw(unittest.TestCase): + +class TestWNTSAModel(unittest.TestCase): def setUp(self): - # data = np.loadtxt("Spinning_disk_cyclic_60000_70000.txt") - # data = np.loadtxt( - # os.path.join( - # os.path.dirname(os.path.abspath(__file__)), - # "Spinning_disk_cyclic_60000_70000.txt", - # # "Spinning_disk_cyclic_60000_80000.txt", - # ) - # ) - # data = np.loadtxt("Spinning_disk_static_60000.txt") data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - "Spinning_disk_100k.csv", + "Spinning_disk_60k.csv", + ), + delimiter=",", + skiprows=1, + usecols=list(range(1, 49)), + ) + + self.stress = data.reshape(data.shape[0], 8, -1) + + vol_factor = 360 / 15 + + self.volumes = np.loadtxt( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "volumes_8.csv", + ), + delimiter=",", + ) + self.volumes = vol_factor * self.volumes + self.temperatures = np.ones((data.shape[0], 8)) + + # Number of cycles to failure + self.nf = 0 + self.period = 0.01 + self.time = np.linspace(0, self.period, self.stress.shape[0]) + + # Material properties + self.m = 7.65 + self.s0 = 74.79 * ((1000) ** (3 / self.m)) # in mm 74.79 in m + self.c_bar = 0.82 + self.nu = 0.219 + self.Nv = 30 + self.Bv = 320 + + self.material = materials.StandardCeramicMaterial( + np.array([0, 1000.0]), + np.array([self.s0, self.s0]), + np.array([0, 1000.0]), + np.array([self.m, self.m]), + self.c_bar, + self.nu, + self.Nv, + self.Bv, + ) + + self.model_time_dep = damage_time_dep_cyclic.WNTSAModel( + solverparams.ParameterSet() + ) + + def test_definition(self): + # k = self.s0 ** (-self.m) + # kp = (2 * self.m + 1) * k + + actual = self.model_time_dep.calculate_element_log_reliability( + self.time, + self.stress, + self.temperatures, + self.volumes, + self.material, + self.nf * self.period, + ) + + # Summing up log probabilities over nelem and taking the value of one + R_WNTSA = np.exp(np.sum(actual)) + print("Time dep Reliability WNTSA = ", R_WNTSA) + + # Evaluating Probability of Failure + Pf_WNTSA = 1 - R_WNTSA + print("Time dep Probability of failure WNTSA = ", Pf_WNTSA) + + with open("WNTSA_60K.txt", "a+") as external_file: + external_file.write("\n") + external_file.write(f"{Pf_WNTSA}") + + +class TestMTSModelGriffithFlaw(unittest.TestCase): + def setUp(self): + data = np.loadtxt( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "Spinning_disk_60k.csv", ), delimiter=",", skiprows=1, @@ -131,12 +206,6 @@ def setUp(self): self.stress = data.reshape(data.shape[0], 8, -1) vol_factor = 360 / 15 - # self.volumes = np.loadtxt( - # os.path.join( - # os.path.dirname(os.path.abspath(__file__)), - # "Spinning_disk_volumes.txt", - # ) - # ) self.volumes = np.loadtxt( os.path.join( @@ -144,8 +213,6 @@ def setUp(self): "volumes_8.csv", ), delimiter=",", - # skiprows=1, - # usecols=list(range(1, 55)), ) self.volumes = vol_factor * self.volumes @@ -164,8 +231,84 @@ def setUp(self): self.Nv = 30 self.Bv = 320 - # Model specific property - # self.kbar = self.m + 1 + self.material = materials.StandardCeramicMaterial( + np.array([0, 1000.0]), + np.array([self.s0, self.s0]), + np.array([0, 1000.0]), + np.array([self.m, self.m]), + self.c_bar, + self.nu, + self.Nv, + self.Bv, + ) + + self.model_time_dep = damage_time_dep_cyclic.MTSModelGriffithFlaw( + solverparams.ParameterSet() + ) + + def test_definition(self): + actual = self.model_time_dep.calculate_element_log_reliability( + self.time, + self.stress, + self.temperatures, + self.volumes, + self.material, + self.nf * self.period, + ) + + # Summing up log probabilities over nelem and taking the value of one + R_MTS_GF = np.exp(np.sum(actual, axis=1))[0] + # R_MTS_GF = np.exp(np.sum(actual,axis=tuple(range(actual.ndim))[1:]))[-1] + print("Time dep Reliability MTS GF = ", R_MTS_GF) + + # Evaluating Probability of Failure + Pf_MTS_GF = 1 - R_MTS_GF + print("Time dep Probability of failure MTS GF = ", Pf_MTS_GF) + + with open("MTS_GF_60K.txt", "a+") as external_file: + external_file.write("\n") + external_file.write(f"{Pf_MTS_GF}") + + +class TestMTSModelPennyShapedFlaw(unittest.TestCase): + def setUp(self): + data = np.loadtxt( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "Spinning_disk_60k.csv", + ), + delimiter=",", + skiprows=1, + usecols=list(range(1, 49)), + ) + + self.stress = data.reshape(data.shape[0], 8, -1) + + vol_factor = 360 / 15 + + self.volumes = np.loadtxt( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "volumes_8.csv", + ), + delimiter=",", + ) + self.volumes = vol_factor * self.volumes + + self.temperatures = np.ones((data.shape[0], 8)) + + # Number of cycles to failure + self.nf = 100000 + self.period = 0.01 + self.time = np.linspace(0, self.period, self.stress.shape[0]) + + # Material properties + self.m = 7.65 + self.s0 = 74.79 * ((1000) ** (3 / self.m)) # in mm 74.79 in m + self.c_bar = 0.82 + self.nu = 0.219 + self.Nv = 30 + self.Bv = 320 self.material = materials.StandardCeramicMaterial( np.array([0, 1000.0]), @@ -178,16 +321,90 @@ def setUp(self): self.Bv, ) - # self.model_time_indep = damage.CSEModelGriffithFlaw(solverparams.ParameterSet()) - self.model_time_dep = damage_time_dep_cyclic.CSEModelGriffithFlaw( + self.model_time_dep = damage_time_dep_cyclic.MTSModelPennyShapedFlaw( solverparams.ParameterSet() ) - # self.model = damage.CSEModelGriffithFlaw(solverparams.ParameterSet()) def test_definition(self): - # k = self.s0 ** (-self.m) - # kp = (self.m + 1) * k + actual = self.model_time_dep.calculate_element_log_reliability( + self.time, + self.stress, + self.temperatures, + self.volumes, + self.material, + self.nf * self.period, + ) + # Summing up log probabilities over nelem and taking the value of one + R_MTS_PSF = np.exp(np.sum(actual, axis=1))[0] + # R_MTS_PSF = np.exp(np.sum(actual,axis=tuple(range(actual.ndim))[1:]))[-1] + print("Time dep Reliability MTS_PSF = ", R_MTS_PSF) + + # Evaluating Probability of Failure + Pf_MTS_PSF = 1 - R_MTS_PSF + print("Time dep Probability of failure MTS_PSF = ", Pf_MTS_PSF) + + with open("MTS_PSF_60K.txt", "a+") as external_file: + external_file.write("\n") + external_file.write(f"{Pf_MTS_PSF}") + + +class TestCSEModelGriffithFlaw(unittest.TestCase): + def setUp(self): + data = np.loadtxt( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "Spinning_disk_60k.csv", + ), + delimiter=",", + skiprows=1, + usecols=list(range(1, 49)), + ) + + self.stress = data.reshape(data.shape[0], 8, -1) + + vol_factor = 360 / 15 + + self.volumes = np.loadtxt( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "volumes_8.csv", + ), + delimiter=",", + ) + self.volumes = vol_factor * self.volumes + + self.temperatures = np.ones((data.shape[0], 8)) + + # Number of cycles to failure + self.nf = 0 + self.period = 0.01 + self.time = np.linspace(0, self.period, self.stress.shape[0]) + + # Material properties + self.m = 7.65 + self.s0 = 74.79 * ((1000) ** (3 / self.m)) # in mm 74.79 in m + self.c_bar = 0.82 + self.nu = 0.219 + self.Nv = 30 + self.Bv = 320 + + self.material = materials.StandardCeramicMaterial( + np.array([0, 1000.0]), + np.array([self.s0, self.s0]), + np.array([0, 1000.0]), + np.array([self.m, self.m]), + self.c_bar, + self.nu, + self.Nv, + self.Bv, + ) + + self.model_time_dep = damage_time_dep_cyclic.CSEModelGriffithFlaw( + solverparams.ParameterSet() + ) + + def test_definition(self): actual = self.model_time_dep.calculate_element_log_reliability( self.time, self.stress, @@ -206,22 +423,17 @@ def test_definition(self): Pf_CSE_GF = 1 - R_CSE_GF print("Time dep Probability of failure CSE GF = ", Pf_CSE_GF) + with open("CSE_GF_60K.txt", "a+") as external_file: + external_file.write("\n") + external_file.write(f"{Pf_CSE_GF}") + class TestCSEModelPennyShapedFlaw(unittest.TestCase): def setUp(self): - # data = np.loadtxt("Spinning_disk_cyclic_60000_70000.txt") - # data = np.loadtxt( - # os.path.join( - # os.path.dirname(os.path.abspath(__file__)), - # "Spinning_disk_cyclic_60000_70000.txt", - # # "Spinning_disk_cyclic_60000_80000.txt", - # ) - # ) - # data = np.loadtxt("Spinning_disk_static_60000.txt") data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - "Spinning_disk_100k.csv", + "Spinning_disk_60k.csv", ), delimiter=",", skiprows=1, @@ -231,12 +443,6 @@ def setUp(self): self.stress = data.reshape(data.shape[0], 8, -1) vol_factor = 360 / 15 - # self.volumes = np.loadtxt( - # os.path.join( - # os.path.dirname(os.path.abspath(__file__)), - # "Spinning_disk_volumes.txt", - # ) - # ) self.volumes = np.loadtxt( os.path.join( @@ -244,8 +450,6 @@ def setUp(self): "volumes_8.csv", ), delimiter=",", - # skiprows=1, - # usecols=list(range(1, 55)), ) self.volumes = vol_factor * self.volumes @@ -264,9 +468,6 @@ def setUp(self): self.Nv = 30 self.Bv = 320 - # Model specific property - # self.kbar = 7.13 - self.material = materials.StandardCeramicMaterial( np.array([0, 1000.0]), np.array([self.s0, self.s0]), @@ -283,9 +484,6 @@ def setUp(self): ) def test_definition(self): - # k = self.s0 ** (-self.m) - # kp = (self.m + 1) * k - actual = self.model_time_dep.calculate_element_log_reliability( self.time, self.stress, @@ -304,22 +502,17 @@ def test_definition(self): Pf_CSE_PSF = 1 - R_CSE_PSF print("Time dep Probability of failure CSE_PSF = ", Pf_CSE_PSF) + with open("CSE_PSF_60K.txt", "a+") as external_file: + external_file.write("\n") + external_file.write(f"{Pf_CSE_PSF}") + class TestSMMModelGriffithFlaw(unittest.TestCase): def setUp(self): - # data = np.loadtxt("Spinning_disk_cyclic_60000_70000.txt") - # data = np.loadtxt( - # os.path.join( - # os.path.dirname(os.path.abspath(__file__)), - # "Spinning_disk_cyclic_60000_70000.txt", - # # "Spinning_disk_cyclic_60000_80000.txt", - # ) - # ) - # data = np.loadtxt("Spinning_disk_static_60000.txt") data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - "Spinning_disk_100k.csv", + "Spinning_disk_60k.csv", ), delimiter=",", skiprows=1, @@ -329,12 +522,6 @@ def setUp(self): self.stress = data.reshape(data.shape[0], 8, -1) vol_factor = 360 / 15 - # self.volumes = np.loadtxt( - # os.path.join( - # os.path.dirname(os.path.abspath(__file__)), - # "Spinning_disk_volumes.txt", - # ) - # ) self.volumes = np.loadtxt( os.path.join( @@ -342,8 +529,6 @@ def setUp(self): "volumes_8.csv", ), delimiter=",", - # skiprows=1, - # usecols=list(range(1, 55)), ) self.volumes = vol_factor * self.volumes @@ -362,9 +547,6 @@ def setUp(self): self.Nv = 30 self.Bv = 320 - # Model specific property - # self.kbar = 2.92 - self.material = materials.StandardCeramicMaterial( np.array([0, 1000.0]), np.array([self.s0, self.s0]), @@ -381,9 +563,6 @@ def setUp(self): ) def test_definition(self): - # k = self.s0 ** (-self.m) - # kp = (2.99) * k - actual = self.model_time_dep.calculate_element_log_reliability( self.time, self.stress, @@ -401,22 +580,17 @@ def test_definition(self): Pf_SMM_GF = 1 - R_SMM_GF print("Time dep Probability of failure SMM_GF = ", Pf_SMM_GF) + with open("SMM_GF_60K_80K.txt", "a+") as external_file: + external_file.write("\n") + external_file.write(f"{Pf_SMM_GF}") + class TestSMMModelPennyShapedFlaw(unittest.TestCase): def setUp(self): - # data = np.loadtxt("Spinning_disk_cyclic_60000_70000.txt") - # data = np.loadtxt( - # os.path.join( - # os.path.dirname(os.path.abspath(__file__)), - # "Spinning_disk_cyclic_60000_70000.txt", - # # "Spinning_disk_cyclic_60000_80000.txt", - # ) - # ) - # data = np.loadtxt("Spinning_disk_static_60000.txt") data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - "Spinning_disk_100k.csv", + "Spinning_disk_60k.csv", ), delimiter=",", skiprows=1, @@ -426,12 +600,6 @@ def setUp(self): self.stress = data.reshape(data.shape[0], 8, -1) vol_factor = 360 / 15 - # self.volumes = np.loadtxt( - # os.path.join( - # os.path.dirname(os.path.abspath(__file__)), - # "Spinning_disk_volumes.txt", - # ) - # ) self.volumes = np.loadtxt( os.path.join( @@ -439,8 +607,6 @@ def setUp(self): "volumes_8.csv", ), delimiter=",", - # skiprows=1, - # usecols=list(range(1, 55)), ) self.volumes = vol_factor * self.volumes @@ -459,9 +625,6 @@ def setUp(self): self.Nv = 30 self.Bv = 320 - # Model specific property - # self.kbar = 1.96 - self.material = materials.StandardCeramicMaterial( np.array([0, 1000.0]), np.array([self.s0, self.s0]), @@ -497,3 +660,7 @@ def test_definition(self): # Evaluating Probability of Failure Pf_SMM_PSF = 1 - R_SMM_PSF print("Time dep Probability of failure SMM_PSF = ", Pf_SMM_PSF) + + with open("SMM_PSF_60K.txt", "a+") as external_file: + external_file.write("\n") + external_file.write(f"{Pf_SMM_PSF}") From 57f67ec9a2428bd88dcf84b23333dc80b86cd197 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Tue, 21 Mar 2023 09:36:58 -0500 Subject: [PATCH 23/71] update requirements file --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 1dadd57..d3dc1bd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,3 +15,4 @@ dill parameterized black jax[cpu] +abs-py From 757bde0aac2b3a4060f760677333ecea4e665148 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Tue, 21 Mar 2023 09:39:17 -0500 Subject: [PATCH 24/71] update requirements file 2 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index d3dc1bd..706dd78 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,4 +15,4 @@ dill parameterized black jax[cpu] -abs-py +absl-py From 94fb67fadd264346d43dbb2d67ffd121a2481179 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Mon, 27 Mar 2023 14:47:42 -0500 Subject: [PATCH 25/71] Updated damage file --- srlife/damage.py | 1363 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1363 insertions(+) create mode 100644 srlife/damage.py diff --git a/srlife/damage.py b/srlife/damage.py new file mode 100644 index 0000000..bd7f3b4 --- /dev/null +++ b/srlife/damage.py @@ -0,0 +1,1363 @@ +# pylint: disable=no-member +""" + This module contains methods for calculating the reliability and + creep-fatigue damage given completely-solved tube results and + damage material properties +""" +from scipy import integrate + +# from scipy.integrate import fixed_quad, quadrature +from srlife import receiver + +import numpy as np +import numpy.linalg as la +import scipy.optimize as opt +import multiprocess + + +class WeibullFailureModel: + """Parent class for time independent Weibull failure models + + Determines principal stresses from mandel stress + + Determines tube reliability and overall reliability by taking input of + element log reliabilities from respective Weibull failure model + """ + + def __init__(self, pset, *args, cares_cutoff=True): + """Initialize the Weibull Failure Model + + Boolean: + cares_cutoff: condition for forcing reliability as unity in case of + high compressive stresses + """ + self.cares_cutoff = cares_cutoff + + def calculate_principal_stress(self, stress): + """ + Calculate the principal stresses from Mandel vector and converts + to conventional notation + """ + if stress.ndim == 2: + tensor = np.zeros( + stress.shape[:1] + (3, 3) + ) # [:1] when no time steps involved + elif stress.ndim == 3: + tensor = np.zeros( + stress.shape[:2] + (3, 3) + ) # [:2] when time steps involved + # indices where (0,0) => (1,1) + inds = [ + [(0, 0)], + [(1, 1)], + [(2, 2)], + [(1, 2), (2, 1)], + [(0, 2), (2, 0)], + [(0, 1), (1, 0)], + ] + # multiplicative factors + mults = [1.0, 1.0, 1.0, np.sqrt(2), np.sqrt(2), np.sqrt(2)] + + # Converting mandel notation to conventional notation + for i, (grp, m) in enumerate(zip(inds, mults)): + for a, b in grp: + tensor[..., a, b] = stress[..., i] / m + + return la.eigvalsh(tensor) + + def determine_reliability( + self, receiver, material, time, nthreads=1, decorator=lambda x, n: x + ): + """ + Determine the reliability of the tubes in the receiver by calculating individual + material point reliabilities and finding the minimum of all points. + + Parameters: + receiver fully-solved receiver object + material material model to use + time (float): time in service + + Additional Parameters: + nthreads number of threads + decorator progress bar + """ + with multiprocess.Pool(nthreads) as p: + results = list( + decorator( + p.imap( + lambda x: self.tube_log_reliability( + x, material, receiver, time + ), + receiver.tubes, + ), + receiver.ntubes, + ) + ) + + p_tube = np.array([res[0] for res in results]) + tube_fields = [res[1] for res in results] + + # Tube reliability is the minimum of all the time steps + tube = np.min(p_tube, axis=1) + + # Overall reliability is the minimum of the sum + overall = np.min(np.sum(p_tube, axis=0)) + + # Add the field to the tubes + for tubei, field in zip(receiver.tubes, tube_fields): + tubei.add_quadrature_results("log_reliability", field) + + # Convert back from log-prob as we go + return { + "tube_reliability": np.exp(tube), + "overall_reliability": np.exp(overall), + } + + def tube_log_reliability(self, tube, material, receiver, time): + """ + Calculate the log reliability of a single tube + """ + volumes = tube.element_volumes() + + stresses = np.transpose( + np.mean( + np.stack( + ( + tube.quadrature_results["stress_xx"], + tube.quadrature_results["stress_yy"], + tube.quadrature_results["stress_zz"], + tube.quadrature_results["stress_yz"], + tube.quadrature_results["stress_xz"], + tube.quadrature_results["stress_xy"], + ) + ), + axis=-1, + ), + axes=(1, 2, 0), + ) + + temperatures = np.mean(tube.quadrature_results["temperature"], axis=-1) + + # Figure out the number of repetitions of the load cycle + if receiver.days != 1: + raise RuntimeError( + "Time dependent reliability requires the load cycle be a single, representative cycle" + ) + + # Do it this way so we can vectorize + inc_prob = self.calculate_element_log_reliability( + tube.times, stresses, temperatures, volumes, material, time + ) + + # CARES/LIFE cutoff + if self.cares_cutoff: + pstress = self.calculate_principal_stress(stresses).reshape(-1, 3) + pmax = np.max(pstress, axis=1) + pmin = np.min(pstress, axis=1) + remove = np.abs(pmin / (pmax + 1.0e-16)) > 3.0 + mod_prob = inc_prob.flatten() + mod_prob[remove] = 0.0 + inc_prob = mod_prob.reshape(inc_prob.shape) + + # Return the sums as a function of time along with the field itself + return np.sum(inc_prob, axis=1), np.transpose( + np.stack((inc_prob, inc_prob)), axes=(1, 2, 0) + ) + + +class CrackShapeIndependent(WeibullFailureModel): + """ + Parent class for crack shape independent models + which include only PIA and WNTSA models + + Determines normal stress acting on crack + """ + + def __init__(self, pset, *args, **kwargs): + """ + Create a mesh grid of angles that can represent crack orientations + Evaluate direction cosines using the angles + + Default values given to nalpha and nbeta which are the number of + segments in the mesh grid + """ + super().__init__(pset, *args, **kwargs) + + # limits and number of segments for angles + self.nalpha = pset.get_default("nalpha", 21) + self.nbeta = pset.get_default("nbeta", 31) + + # Mesh grid of the vectorized angle values + self.A, self.B = np.meshgrid( + np.linspace(0, np.pi, self.nalpha), + np.linspace(0, 2 * np.pi, self.nbeta, endpoint=False), + indexing="ij", + ) + + # Increment of angles to be used in evaluating integral + self.dalpha = (self.A[-1, -1] - self.A[0, 0]) / (self.nalpha - 1) + self.dbeta = (self.B[-1, -1] - self.B[0, 0]) / (self.nbeta - 1) + + # Direction cosines + self.l = np.cos(self.A) + self.m = np.sin(self.A) * np.cos(self.B) + self.n = np.sin(self.A) * np.sin(self.B) + + def calculate_normal_stress(self, mandel_stress): + """ + Use direction cosines to calculate the normal stress to + a crack given the Mandel vector + """ + # Principal stresses + pstress = self.calculate_principal_stress(mandel_stress) + + # Normal stress + return ( + pstress[..., 0, None, None] * (self.l**2) + + pstress[..., 1, None, None] * (self.m**2) + + pstress[..., 2, None, None] * (self.n**2) + ) + + +class CrackShapeDependent(WeibullFailureModel): + """ + Parent class for crack shape dependent models + + Determines normal, shear, total and equivanlent stresses acting on cracks + + Calculates the element reliability using the equivalent stress from the + crack shape dependent models + """ + + def __init__(self, pset, *args, **kwargs): + """ + Create a mesh grid of angles that can represent crack orientations + Evaluate direction cosines using the angles + + Default values given to nalpha and nbeta which are the number of + segments in the mesh grid + """ + super().__init__(pset, *args, **kwargs) + + # limits and number of segments for angles + self.nalpha = pset.get_default("nalpha", 121) + self.nbeta = pset.get_default("nbeta", 121) + + # Mesh grid of the vectorized angle values + self.A, self.B = np.meshgrid( + np.linspace(0, np.pi / 2, self.nalpha), + np.linspace(0, np.pi / 2, self.nbeta), + indexing="ij", + ) + + # Increment of angles to be used in evaluating integral + self.dalpha = (self.A[-1, -1] - self.A[0, 0]) / (self.nalpha - 1) + self.dbeta = (self.B[-1, -1] - self.B[0, 0]) / (self.nbeta - 1) + + # Direction cosines + self.l = np.cos(self.A) + self.m = np.sin(self.A) * np.cos(self.B) + self.n = np.sin(self.A) * np.sin(self.B) + + def calculate_normal_stress(self, mandel_stress): + """ + Use direction cosines to calculate the normal stress to + a crack given the Mandel vector + """ + # Principal stresses + pstress = self.calculate_principal_stress(mandel_stress) + + # Normal stress + return ( + pstress[..., 0, None, None] * (self.l**2) + + pstress[..., 1, None, None] * (self.m**2) + + pstress[..., 2, None, None] * (self.n**2) + ) + + def calculate_total_stress(self, mandel_stress): + """ + Calculate the total stress given the Mandel vector + """ + # Principal stresses + pstress = self.calculate_principal_stress(mandel_stress) + + # Total stress + return np.sqrt( + ((pstress[..., 0, None, None] * self.l) ** 2) + + ((pstress[..., 1, None, None] * self.m) ** 2) + + ((pstress[..., 2, None, None] * self.n) ** 2) + ) + + def calculate_shear_stress(self, mandel_stress): + """ + Calculate the shear stress given the normal and total stress + """ + # Normal stress + sigma_n = self.calculate_normal_stress(mandel_stress) + + # Total stress + sigma = self.calculate_total_stress(mandel_stress) + + # Shear stress + with np.errstate(invalid="ignore"): + return np.sqrt(sigma**2 - sigma_n**2) + + def calculate_flattened_eq_stress( + self, + time, + mandel_stress, + temperatures, + material, + tot_time, + A, + dalpha, + dbeta, + ): + """ + Calculate the integral of equivalent stresses given the material + properties and integration limits + + Parameters: + mandel_stress: element stresses in Mandel convention + temperatures: element temperatures + material material model to use + + Additional Parameters: + A: mesh grid of vectorized angle values + dalpha: increment of angle alpha to be used in evaluating integral + dbeta: increment of angle beta to be used in evaluating integral + """ + + # Principal stresses + pstress = self.calculate_principal_stress(mandel_stress) + + # Material parameters + self.temperatures = temperatures + self.material = material + self.mandel_stress = mandel_stress + self.mvals = material.modulus(temperatures) + Nv = material.Nv(temperatures) + Bv = material.Bv(temperatures) + + # Use temperature average values? + mavg = np.mean(self.mvals, axis=0) + + # Projected equivalent stresses + sigma_e = self.calculate_eq_stress( + mandel_stress, self.temperatures, self.material + ) + + # Max principal stresss over all time steps for each element + sigma_e_max = np.max(sigma_e, axis=0) + + # Suppressing warning given when negative numbers are raised to rational numbers + # Defining time based on period of one cycle and number of time steps + # Calculate g using an integration method + if np.all(time == 0): + sigma_e_0 = sigma_e + else: + with np.errstate(invalid="ignore"): + g = ( + np.trapz((sigma_e / sigma_e_max + 1.0e-14) ** Nv, time, axis=0) + / time[-1] + ) + # Defining tf or tot_time as nf * period + print("service time =", tot_time) + # Time dependent equivalent stress + sigma_e_0 = ( + (((sigma_e_max**Nv) * g * tot_time) / Bv) + (sigma_e_max ** (Nv - 2)) + ) ** (1 / (Nv - 2)) + + # Suppressing warning given when negative numbers are raised to rational numbers + with np.errstate(invalid="ignore"): + # Defining area integral element wise + integral = ( + (sigma_e_0 ** mavg[..., None, None]) + * np.sin(self.A) + * self.dalpha + * self.dbeta + ) + + # Flatten the last axis and calculate the mean of the positive values along that axis + # slicing the shape of integral and reshaping it with a new size (to flatten) based on the last size element of integral + # if pstress.ndim == 2: + # flat = integral.reshape(-1,) + # elif pstress.ndim == 3: + flat = integral.reshape(integral.shape[:-2] + (-1,)) + + # Suppressing warning to ignoring initial NaN values + with np.errstate(invalid="ignore"): + # Summing over area integral elements ignoring NaN values + flat = np.nansum(flat, axis=-1) + return flat + + def calculate_element_log_reliability( + self, time, mandel_stress, temperatures, volumes, material, tot_time + ): + """ + Calculate the element log reliability given the equivalent stress + + Parameters: + mandel_stress: element stresses in Mandel convention + temperatures: element temperatures + volumes: element volumes + material: material model object with required data + """ + self.temperatures = temperatures + self.material = material + self.mandel_stress = mandel_stress + + # Principal stresses + # pstress = self.calculate_principal_stress(mandel_stress) + + # Material parameters + svals = material.strength(temperatures) + mvals = material.modulus(temperatures) + kvals = svals ** (-mvals) + + # Use temperature average values? + mavg = np.mean(mvals, axis=0) + kavg = np.mean(kvals, axis=0) + + shear_sensitive = False + + if shear_sensitive == True: + kbar = self.calculate_kbar( + self.temperatures, self.material, self.A, self.dalpha, self.dbeta + ) + else: + kbar = 2 * mavg + 1 + + kpvals = kbar * kavg + + # For shear-insensitive case + # kpvals = (2 * mvals + 1) * kvals + + # For CSE model + # kpvals = kbar * kvals + + # For hear sensitive case + # kpvals = (2.99) * kvals + + # Equivalent stress raied to exponent mv + flat = ( + self.calculate_flattened_eq_stress( + time, + mandel_stress, + self.temperatures, + self.material, + tot_time, + self.A, + self.dalpha, + self.dbeta, + ) + ) ** (1 / mavg) + + return -(2 * kpvals / np.pi) * (flat**mavg) * volumes + + +class PIAModel(CrackShapeIndependent): + """ + Principal of independent action failure model + + Calculates reliability using only tensile stresses + that are assumed to act independently on cracks + """ + + def calculate_element_log_reliability( + self, time, mandel_stress, temperatures, volumes, material, tot_time + ): + """ + Calculate the element log reliability + + Parameters: + time: time for each stress/temperature + mandel_stress: element stresses in Mandel convention + temperatures: element temperatures + volumes: element volumes + material: material model object with required data that includes + Weibull scale parameter (svals) and Weibull modulus (mvals) + tot_time: total time at which to calculate reliability + """ + + # Principal stresses + pstress = self.calculate_principal_stress(mandel_stress) + + # Material parameters + svals = material.strength(temperatures) + mvals = material.modulus(temperatures) + kvals = svals ** (-mvals) + Nv = material.Nv(temperatures) + Bv = material.Bv(temperatures) + + # Only tension + pstress[pstress < 0] = 0 + + # Max principal stresss over all time steps for each element + pstress_max = np.max(pstress, axis=0) + + # g + if np.all(time == 0): + g = 0 + pstress_0 = pstress + else: + g = ( + np.trapz((pstress / (pstress_max + 1.0e-14)) ** Nv, time, axis=0) + / time[-1] + ) + # Defining tf + print("service time =", tot_time) + # Time dependent principal stress + pstress_0 = ( + (pstress_max**Nv * g * tot_time) / Bv + (pstress_max ** (Nv - 2)) + ) ** (1 / (Nv - 2)) + + # Use temperature average values? + mavg = np.mean(mvals, axis=0) + kavg = np.mean(kvals, axis=0) + + return -kavg * np.sum(pstress_0 ** mavg[..., None], axis=-1) * volumes + + +class WNTSAModel(CrackShapeIndependent): + """ + Weibull normal tensile average failure model + + Evaluates an average normal tensile stress (acting on the cracks) integrated over the + area of a sphere, and uses it to calculate the element reliability + """ + + def calculate_avg_normal_stress( + self, time, mandel_stress, temperatures, material, tot_time + ): + """ + Calculate the average normal tensile stresses from the pricipal stresses + + Parameters: + mandel_stress: element stresses in Mandel convention + temperatures: element temperatures + material: material model object with required data + """ + # Principal stresses + pstress = self.calculate_principal_stress(mandel_stress) + + # mvals = material.modulus(temperatures)[: pstress.shape[1]] + # Material parameters + self.temperatures = temperatures + self.material = material + self.mandel_stress = mandel_stress + + mvals = material.modulus(temperatures) + Nv = material.Nv(temperatures) + Bv = material.Bv(temperatures) + + # Use temperature average values? + mavg = np.mean(mvals, axis=0) + + # Time dependent Normal stress + sigma_n = self.calculate_normal_stress(mandel_stress) + + # Considering only tensile stresses + sigma_n[sigma_n < 0] = 0 + + # Max normal stresss over all time steps for each element + sigma_n_max = np.max(sigma_n, axis=0) + + # Defining time based on period of one cycle and number of time steps + # Calculate g using an integration method + if np.all(time == 0): + sigma_n_0 = sigma_n + else: + g = ( + np.trapz((sigma_n / (sigma_n_max + 1.0e-14)) ** Nv, time, axis=0) + / time[-1] + ) + # Defining tot_time as nf * period + print("service time =", tot_time) + # Time dependent equivalent stress + sigma_n_0 = ( + (((sigma_n_max**Nv) * g * tot_time) / Bv) + (sigma_n_max ** (Nv - 2)) + ) ** (1 / (Nv - 2)) + + with np.errstate(invalid="ignore"): + integral = ( + (sigma_n_0 ** mavg[..., None, None]) + * np.sin(self.A) + * self.dalpha + * self.dbeta + ) / (4 * np.pi) + + # Flatten the last axis and calculate the mean of the positive values along that axis + # slicing the shape of integral and reshaping it with a new size (to flatten) based on the last size element of integral + # if pstress.ndim == 2: + # flat = integral.reshape(-1,) + # elif pstress.ndim == 3: + flat = integral.reshape(integral.shape[:-2] + (-1,)) + + # Suppressing warning to ignoring initial NaN values + with np.errstate(invalid="ignore"): + # Average stress + return np.nansum(np.where(flat >= 0.0, flat, np.nan), axis=-1) + + def calculate_element_log_reliability( + self, time, mandel_stress, temperatures, volumes, material, tot_time + ): + """ + Calculate the element log reliability + + Parameters: + mandel_stress: element stresses in Mandel convention + temperatures: element temperatures + volumes: element volumes + material: material model object with required data that includes + Weibull scale parameter (svals) and Weibull modulus (mvals) + tot_time: total time at which to calculate reliability + """ + self.temperatures = temperatures + self.material = material + self.mandel_stress = mandel_stress + + # Material parameters + svals = material.strength(temperatures) + mvals = material.modulus(temperatures) + kvals = svals ** (-mvals) + + # Use temperature average values? + mavg = np.mean(mvals, axis=0) + kavg = np.mean(kvals, axis=0) + + kpvals = (2 * mavg + 1) * kavg + + Nv = material.Nv(temperatures) + Bv = material.Bv(temperatures) + + # Average normal tensile stress raied to exponent mv + avg_nstress = ( + self.calculate_avg_normal_stress( + time, + mandel_stress, + self.temperatures, + self.material, + tot_time, + ) + ) ** (1 / mavg) + + return -kpvals * (avg_nstress**mavg) * volumes + + +class MTSModelGriffithFlaw(CrackShapeDependent): + """ + Maximum tensile stess failure model with a Griffith flaw + + Evaluates an equivalent stress (acting on the cracks) using the normal and + shear stresses in the maximum tensile stress fracture criterion for a Griffith flaw + """ + + def calculate_eq_stress(self, mandel_stress, temperatures, material): + """ + Calculate the equivalent stresses from the normal and shear stresses + """ + # Normal stress + sigma_n = self.calculate_normal_stress(mandel_stress) + + # Shear stress + tau = self.calculate_shear_stress(mandel_stress) + + # Projected equivalent stress + return 0.5 * (sigma_n + np.sqrt((sigma_n**2) + (tau**2))) + + def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): + """ + Calculate the kbar from the Weibull modulus and material parameters + """ + + self.temperatures = temperatures + self.material = material + + # Weibull modulus + mvals = self.material.modulus(temperatures) + + # Use temperature average values? + mavg = np.mean(mvals, axis=0) + + # Material parameters + nu = np.mean(material.nu(temperatures), axis=0) + cbar = np.mean(material.c_bar(temperatures), axis=0) + + # Calculating kbar + with np.errstate(invalid="ignore"): + integral2 = 2 * ( + ( + ( + 0.5 + * ( + ((np.cos(self.A)) ** 2) + + np.sqrt( + ((np.cos(self.A)) ** 4) + + (((np.sin(self.A)) ** 2) * ((np.cos(self.A)) ** 2)) + ) + ) + ) + ** mavg[..., None, None] + ) + * np.sin(self.A) + * self.dalpha + * self.dbeta + ) + kbar = np.pi / np.sum(integral2, axis=(1, 2)) + + return kbar + + +class MTSModelPennyShapedFlaw(CrackShapeDependent): + """ + Maximum tensile stess failure model with a penny shaped flaw + + Evaluates an equivalent stress (acting on the cracks) using the normal and + shear stresses in the maximum tensile stress fracture criterion for a penny shaped flaw + """ + + def calculate_eq_stress(self, mandel_stress, temperatures, material): + """ + Calculate the average normal tensile stresses from the normal and shear stresses + + Additional parameter: + nu: Poisson ratio + """ + + # Material parameters + nu = np.mean(material.nu(temperatures), axis=0) + + # Normal stress + sigma_n = self.calculate_normal_stress(mandel_stress) + + # Shear stress + tau = self.calculate_shear_stress(mandel_stress) + + # Projected equivalent stress + return 0.5 * ( + sigma_n + + np.sqrt((sigma_n**2) + ((tau / (1 - (0.5 * nu[..., None, None]))) ** 2)) + ) + + def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): + """ + Calculate the kbar from the Weibull modulus and material parameters + """ + + self.temperatures = temperatures + self.material = material + + # Weibull modulus + mvals = self.material.modulus(temperatures) + + # Use temperature average values? + mavg = np.mean(mvals, axis=0) + + # Material parameters + nu = np.mean(material.nu(temperatures), axis=0) + cbar = np.mean(material.c_bar(temperatures), axis=0) + + # Calculating kbar + with np.errstate(invalid="ignore"): + integral2 = 2 * ( + ( + ( + 0.5 + * ( + ((np.cos(self.A)) ** 2) + + np.sqrt( + ((np.cos(self.A)) ** 4) + + ( + ((np.sin(2 * self.A)) ** 2) + / (2 - (nu[..., None, None] ** 2)) + ) + ) + ) + ) + ** mavg[..., None, None] + ) + * np.sin(self.A) + * self.dalpha + * self.dbeta + ) + kbar = np.pi / np.sum(integral2, axis=(1, 2)) + + return kbar + + +class CSEModelGriffithFlaw(CrackShapeDependent): + """ + Coplanar strain energy failure model with a Griffith flaw + + Evaluates an equivalent stress (acting on the cracks) using the normal and + shear stresses in the coplanar strain energy fracture criterion + for a Griffith flaw + """ + + def calculate_eq_stress(self, mandel_stress, temperatures, material): + """ + Calculate the equivalent stresses from the normal and shear stresses + """ + # Normal stress + sigma_n = self.calculate_normal_stress(mandel_stress) + + # Shear stress + tau = self.calculate_shear_stress(mandel_stress) + + # Projected equivalent stress + return np.sqrt((sigma_n**2) + (tau**2)) + + def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): + """ + Calculate the kbar from the Weibull modulus and material parameters + """ + + self.temperatures = temperatures + self.material = material + + # Weibull modulus + mvals = self.material.modulus(temperatures) + + # Use temperature average values? + mavg = np.mean(mvals, axis=0) + + # Material parameters + nu = np.mean(material.nu(temperatures), axis=0) + cbar = np.mean(material.c_bar(temperatures), axis=0) + + # Calculating kbar + with np.errstate(invalid="ignore"): + integral2 = 2 * ( + ((np.cos(self.A)) ** mavg[..., None, None]) + * np.sin(self.A) + * self.dalpha + * self.dbeta + ) + kbar = np.pi / np.sum(integral2, axis=(1, 2)) + + return kbar + + +class CSEModelPennyShapedFlaw(CrackShapeDependent): + """ + Coplanar strain energy failure model with a penny shaped flaw + + Evaluates an equivalent stress (acting on the cracks) using the normal and + shear stresses in the coplanar strain energy fracture criterion + for a penny shaped flaw + """ + + def calculate_eq_stress(self, mandel_stress, temperatures, material): + """ + Calculate the equivalent stresses from the normal and shear stresses + + Additional parameter: + nu: Poisson ratio + """ + + # Material parameters + nu = np.mean(material.nu(temperatures), axis=0) + + # Normal stress + sigma_n = self.calculate_normal_stress(mandel_stress) + + # Shear stress + tau = self.calculate_shear_stress(mandel_stress) + + # Projected equivalent stress + return np.sqrt((sigma_n**2) + (tau / (1 - (0.5 * nu[..., None, None]))) ** 2) + + def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): + """ + Calculate the kbar from the Weibull modulus and material parameters + """ + + self.temperatures = temperatures + self.material = material + + # Weibull modulus + mvals = self.material.modulus(temperatures) + + # Use temperature average values? + mavg = np.mean(mvals, axis=0) + + # Material parameters + nu = np.mean(material.nu(temperatures), axis=0) + cbar = np.mean(material.c_bar(temperatures), axis=0) + + # Calculating kbar + with np.errstate(invalid="ignore"): + integral2 = 2 * ( + ( + ( + np.sqrt( + ((np.cos(self.A)) ** 4) + + ( + ((np.sin(2 * self.A)) ** 2) + / ((2 - nu[..., None, None]) ** 2) + ) + ) + ) + ** mavg[..., None, None] + ) + * np.sin(self.A) + * self.dalpha + * self.dbeta + ) + kbar = np.pi / np.sum(integral2, axis=(1, 2)) + + return kbar + + +class SMMModelGriffithFlaw(CrackShapeDependent): + """ + Shetty mixed-mod failure model with a Griffith flaw + + Evaluates an equivalent stress (acting on the cracks) using the normal and + shear stresses in the Shetty mixed-mode fracture criterion + for a Griffith flaw + """ + + def calculate_eq_stress(self, mandel_stress, temperatures, material): + """ + Calculate the equivalent stresses from the normal and shear stresses + + Additional parameters: + cbar: Emperical constant + """ + + # Material parameters + cbar = np.mean(material.c_bar(temperatures), axis=0) + + # Normal stress + sigma_n = self.calculate_normal_stress(mandel_stress) + + # Shear stress + tau = self.calculate_shear_stress(mandel_stress) + + # Projected equivalent stress + return 0.5 * ( + sigma_n + np.sqrt((sigma_n**2) + ((2 * tau / cbar[..., None, None]) ** 2)) + ) + + def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): + """ + Calculate the kbar from the Weibull modulus and material parameters + """ + + self.temperatures = temperatures + self.material = material + + # Weibull modulus + mvals = self.material.modulus(temperatures) + + # Use temperature average values? + mavg = np.mean(mvals, axis=0) + + # Material parameters + nu = np.mean(material.nu(temperatures), axis=0) + cbar = np.mean(material.c_bar(temperatures), axis=0) + + # Calculating kbar + with np.errstate(invalid="ignore"): + integral2 = 2 * ( + ( + ( + 0.5 + * ( + ((np.cos(self.A)) ** 2) + + np.sqrt( + ((np.cos(self.A)) ** 4) + + ( + ((np.sin(2 * self.A)) ** 2) + / (cbar[..., None, None] ** 2) + ) + ) + ) + ) + ** mavg[..., None, None] + ) + * np.sin(self.A) + * self.dalpha + * self.dbeta + ) + kbar = np.pi / np.sum(integral2, axis=(1, 2)) + + return kbar + + +class SMMModelPennyShapedFlaw(CrackShapeDependent): + """ + Shetty mixed mode failure model with a penny shaped flaw + + Evaluates an equivalent stress (acting on the cracks) using the normal and + shear stresses in the Shetty mixed-mode fracture criterion + for a Griffith flaw + """ + + def calculate_eq_stress(self, mandel_stress, temperatures, material): + """ + Calculate the equivalent stresses from the normal and shear stresses + + Additional parameters: + nu: Poisson ratio + cbar: Emperical constant + """ + + # Material parameters + nu = np.mean(material.nu(temperatures), axis=0) + cbar = np.mean(material.c_bar(temperatures), axis=0) + + # Normal stress + sigma_n = self.calculate_normal_stress(mandel_stress) + + # Shear stress + tau = self.calculate_shear_stress(mandel_stress) + + # Projected equivalent stress + return 0.5 * ( + sigma_n + + np.sqrt( + (sigma_n**2) + + ((4 * tau / (cbar[..., None, None] * (2 - nu[..., None, None]))) ** 2) + ) + ) + + def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): + """ + Calculate the kbar from the Weibull modulus and material parameters + """ + + self.temperatures = temperatures + self.material = material + + # Weibull modulus + mvals = self.material.modulus(temperatures) + + # Use temperature average values? + mavg = np.mean(mvals, axis=0) + + # Material parameters + nu = np.mean(material.nu(temperatures), axis=0) + cbar = np.mean(material.c_bar(temperatures), axis=0) + + # Calculating kbar + with np.errstate(invalid="ignore"): + integral2 = 2 * ( + ( + ( + 0.5 + * ( + ((np.cos(self.A)) ** 2) + + np.sqrt( + ((np.cos(self.A)) ** 4) + + ( + (4 * ((np.sin(2 * self.A)) ** 2)) + / ( + (cbar[..., None, None] ** 2) + * ((nu[..., None, None] - 2) ** 2) + ) + ) + ) + ) + ) + ** mavg[..., None, None] + ) + * np.sin(self.A) + * self.dalpha + * self.dbeta + ) + kbar = np.pi / np.sum(integral2, axis=(1, 2)) + + return kbar + + +class DamageCalculator: + """ + Parent class for all damage calculators, handling common iteration + and scaling options + """ + + def __init__(self, pset): + """ + Parameters: + pset: damage parameters + """ + self.extrapolate = pset.get_default("extrapolate", "lump") + self.order = pset.get_default("order", 1) + + def single_cycles(self, tube, material, receiver): + """ + Calculate damage for a single tube + + Parameters: + tube: fully-populated tube object + material: damage material + receiver: receiver object (for metadata) + """ + raise NotImplementedError("Superclass not implemented") + + def determine_life(self, receiver, material, nthreads=1, decorator=lambda x, n: x): + """ + Determine the life of the receiver by calculating individual + material point damage and finding the minimum of all points. + + Parameters: + receiver fully-solved receiver object + material material model ot use + + Additional Parameters: + nthreads number of threads + decorator progress bar + """ + # pylint: disable=no-member + with multiprocess.Pool(nthreads) as p: + Ns = list( + decorator( + p.imap( + lambda x: self.single_cycles(x, material, receiver), + receiver.tubes, + ), + receiver.ntubes, + ) + ) + N = min(Ns) + + # Results come out as days + return N + + def make_extrapolate(self, D): + """ + Return a damage extrapolation function based on self.extrapolate + giving the damage for the nth cycle + + Parameters: + D: raw, per cycle damage + """ + if self.extrapolate == "lump": + return lambda N, D=D: N * np.sum(D) / len(D) + elif self.extrapolate == "last": + + def Dfn(N, D=D): + N = int(N) + if N < len(D) - 1: + return np.sum(D[:N]) + else: + return np.sum(D[:-1]) + D[-1] * N + + return Dfn + elif self.extrapolate == "poly": + p = np.polyfit(np.array(list(range(len(D)))) + 1, D, self.order) + return lambda N, p=p: np.polyval(p, N) + else: + raise ValueError( + "Unknown damage extrapolation approach %s!" % self.extrapolate + ) + + +class TimeFractionInteractionDamage(DamageCalculator): + """ + Calculate life using the ASME time-fraction type approach + """ + + def single_cycles(self, tube, material, receiver): + """ + Calculate the single-tube number of repetitions to failure + + Parameters: + tube single tube with full results + material damage material model + receiver receiver, for metadata + """ + # Material point cycle creep damage + Dc = self.creep_damage(tube, material, receiver) + + # Material point cycle fatigue damage + Df = self.fatigue_damage(tube, material, receiver) + + nc = receiver.days + + # This is going to be expensive, but I don't see much way around it + return min( + self.calculate_max_cycles( + self.make_extrapolate(c), self.make_extrapolate(f), material + ) + for c, f in zip(Dc.reshape(nc, -1).T, Df.reshape(nc, -1).T) + ) + + def calculate_max_cycles(self, Dc, Df, material, rep_min=1, rep_max=1e6): + """ + Actually calculate the maximum number of repetitions for a single point + + Parameters: + Dc creep damage per simulated cycle + Df fatigue damage per simulated cycle + material damaged material properties + """ + if not material.inside_envelope("cfinteraction", Df(rep_min), Dc(rep_min)): + return 0 + + if material.inside_envelope("cfinteraction", Df(rep_max), Dc(rep_max)): + return np.inf + + return opt.brentq( + lambda N: material.inside_envelope("cfinteraction", Df(N), Dc(N)) - 0.5, + rep_min, + rep_max, + ) + + def creep_damage(self, tube, material, receiver): + """ + Calculate creep damage at each material point + + Parameters: + tube single tube with full results + material damage material model + receiver receiver, for metadata + """ + # For now just use the von Mises effective stress + vm = np.sqrt( + ( + ( + tube.quadrature_results["stress_xx"] + - tube.quadrature_results["stress_yy"] + ) + ** 2.0 + + ( + tube.quadrature_results["stress_yy"] + - tube.quadrature_results["stress_zz"] + ) + ** 2.0 + + ( + tube.quadrature_results["stress_zz"] + - tube.quadrature_results["stress_xx"] + ) + ** 2.0 + + 6.0 + * ( + tube.quadrature_results["stress_xy"] ** 2.0 + + tube.quadrature_results["stress_yz"] ** 2.0 + + tube.quadrature_results["stress_xz"] ** 2.0 + ) + ) + / 2.0 + ) + + tR = material.time_to_rupture( + "averageRupture", tube.quadrature_results["temperature"], vm + ) + dts = np.diff(tube.times) + time_dmg = dts[:, np.newaxis, np.newaxis] / tR[1:] + + # Break out to cycle damage + inds = self.id_cycles(tube, receiver) + + cycle_dmg = np.array( + [ + np.sum(time_dmg[inds[i] : inds[i + 1]], axis=0) + for i in range(receiver.days) + ] + ) + + return cycle_dmg + + def fatigue_damage(self, tube, material, receiver): + """ + Calculate fatigue damage at each material point + + Parameters: + tube single tube with full results + material damage material model + receiver receiver, for metadata + """ + # Identify cycle boundaries + inds = self.id_cycles(tube, receiver) + + # Run through each cycle and ID max strain range and fatigue damage + strain_names = [ + "mechanical_strain_xx", + "mechanical_strain_yy", + "mechanical_strain_zz", + "mechanical_strain_yz", + "mechanical_strain_xz", + "mechanical_strain_xy", + ] + strain_factors = [1.0, 1.0, 1.0, 2.0, 2.0, 2.0] + + cycle_dmg = np.array( + [ + self.cycle_fatigue( + np.array( + [ + ef * tube.quadrature_results[en][inds[i] : inds[i + 1]] + for en, ef in zip(strain_names, strain_factors) + ] + ), + tube.quadrature_results["temperature"][inds[i] : inds[i + 1]], + material, + ) + for i in range(receiver.days) + ] + ) + + return cycle_dmg + + def id_cycles(self, tube, receiver): + """ + Helper to separate out individual cycles by index + + Parameters: + tube single tube with results + receiver receiver, for metadata + """ + tm = np.mod(tube.times, receiver.period) + inds = list(np.where(tm == 0)[0]) + if len(inds) != (receiver.days + 1): + raise ValueError( + "Tube times not compatible with the receiver" + " number of days and cycle period!" + ) + + return inds + + def cycle_fatigue(self, strains, temperatures, material, nu=0.5): + """ + Calculate fatigue damage for a single cycle + + Parameters: + strains single cycle strains + temperatures single cycle temperatures + material damage model + + Additional parameters: + nu effective Poisson's ratio to use + """ + pt_temps = np.max(temperatures, axis=0) + + pt_eranges = np.zeros(pt_temps.shape) + + nt = strains.shape[1] + for i in range(nt): + for j in range(nt): + de = strains[:, j] - strains[:, i] + eq = ( + np.sqrt(2) + / (2 * (1 + nu)) + * np.sqrt( + (de[0] - de[1]) ** 2 + + (de[1] - de[2]) ** 2 + + (de[2] - de[0]) ** 2.0 + + 3.0 / 2.0 * (de[3] ** 2.0 + de[4] ** 2.0 + de[5] ** 2.0) + ) + ) + pt_eranges = np.maximum(pt_eranges, eq) + + dmg = np.zeros(pt_eranges.shape) + # pylint: disable=not-an-iterable + for ind in np.ndindex(*dmg.shape): + dmg[ind] = 1.0 / material.cycles_to_fail( + "nominalFatigue", pt_temps[ind], pt_eranges[ind] + ) + + return dmg From 51b02394e75abb2a70a06ab87a7d2a0ee0895664 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Mon, 27 Mar 2023 14:51:51 -0500 Subject: [PATCH 26/71] Update damage_cyclic files --- srlife/damage_time_dep_cyclic.py | 277 ++++++++++++++--------- test/test_ceramic_damage_CARES_cyclic.py | 56 ++--- test/test_ceramic_damage_CARES_static.py | 44 ++-- 3 files changed, 212 insertions(+), 165 deletions(-) diff --git a/srlife/damage_time_dep_cyclic.py b/srlife/damage_time_dep_cyclic.py index d47b84f..c4d4802 100644 --- a/srlife/damage_time_dep_cyclic.py +++ b/srlife/damage_time_dep_cyclic.py @@ -186,8 +186,6 @@ def __init__(self, pset, *args, **kwargs): # limits and number of segments for angles self.nalpha = pset.get_default("nalpha", 21) self.nbeta = pset.get_default("nbeta", 31) - # self.Nv = pset.get_default("Nv", 30) - # self.Bv = pset.get_default("Bv", 320) # Mesh grid of the vectorized angle values self.A, self.B = np.meshgrid( @@ -337,43 +335,44 @@ def calculate_flattened_eq_stress( self.temperatures = temperatures self.material = material self.mandel_stress = mandel_stress - self.mvals = self.material.modulus(temperatures) + self.mvals = material.modulus(temperatures) Nv = material.Nv(temperatures) Bv = material.Bv(temperatures) + # Use temperature average values? + mavg = np.mean(self.mvals, axis=0) + # Projected equivalent stresses sigma_e = self.calculate_eq_stress( mandel_stress, self.temperatures, self.material ) - # Max equivalent stress over each element in time - # sigma_e_elem_max = np.max(sigma_e,axis =(2,3)) - # Max principal stresss over all time steps for each element sigma_e_max = np.max(sigma_e, axis=0) - # g integral for calculating total time and g # Suppressing warning given when negative numbers are raised to rational numbers - with np.errstate(invalid="ignore"): - g_integral = (sigma_e / sigma_e_max) ** Nv - # Defining time based on period of one cycle and number of time steps # Calculate g using an integration method - g = (np.trapz(g_integral, time, axis=0)) / time[-1] - - # Defining tot_time as nf * period - print("service time =", tot_time) - - # Time dependent equivalent stress - sigma_e_0 = ( - (((sigma_e_max**Nv) * g * tot_time) / Bv) + (sigma_e_max ** (Nv - 2)) - ) ** (1 / (Nv - 2)) + if np.all(time == 0): + sigma_e_0 = sigma_e + else: + with np.errstate(invalid="ignore"): + g = ( + np.trapz((sigma_e / sigma_e_max + 1.0e-14) ** Nv, time, axis=0) + / time[-1] + ) + # Defining tf or tot_time as nf * period + print("service time =", tot_time) + # Time dependent equivalent stress + sigma_e_0 = ( + (((sigma_e_max**Nv) * g * tot_time) / Bv) + (sigma_e_max ** (Nv - 2)) + ) ** (1 / (Nv - 2)) # Suppressing warning given when negative numbers are raised to rational numbers with np.errstate(invalid="ignore"): # Defining area integral element wise integral = ( - (sigma_e_0 ** self.mvals[..., None, None]) + (sigma_e_0 ** mavg[..., None, None]) * np.sin(self.A) * self.dalpha * self.dbeta @@ -381,10 +380,10 @@ def calculate_flattened_eq_stress( # Flatten the last axis and calculate the mean of the positive values along that axis # slicing the shape of integral and reshaping it with a new size (to flatten) based on the last size element of integral - if pstress.ndim == 2: - flat = integral.reshape(integral.shape[:1] + (-1,)) - elif pstress.ndim == 3: - flat = integral.reshape(integral.shape[:2] + (-1,)) + # if pstress.ndim == 2: + # flat = integral.reshape(-1,) + # elif pstress.ndim == 3: + flat = integral.reshape(integral.shape[:-2] + (-1,)) # Suppressing warning to ignoring initial NaN values with np.errstate(invalid="ignore"): @@ -416,16 +415,20 @@ def calculate_element_log_reliability( mvals = material.modulus(temperatures) kvals = svals ** (-mvals) - shear_sensitive = True + # Use temperature average values? + mavg = np.mean(mvals, axis=0) + kavg = np.mean(kvals, axis=0) + + shear_sensitive = False if shear_sensitive == True: kbar = self.calculate_kbar( self.temperatures, self.material, self.A, self.dalpha, self.dbeta ) else: - kbar = 2 * mvals + 1 + kbar = 2 * mavg + 1 - kpvals = kbar * kvals + kpvals = kbar * kavg # For shear-insensitive case # kpvals = (2 * mvals + 1) * kvals @@ -448,9 +451,9 @@ def calculate_element_log_reliability( self.dalpha, self.dbeta, ) - ) ** (1 / mvals) + ) ** (1 / mavg) - return -(2 * kpvals / np.pi) * (flat**mvals) * volumes + return -(2 * kpvals / np.pi) * (flat**mavg) * volumes class PIAModel(CrackShapeIndependent): @@ -494,15 +497,20 @@ def calculate_element_log_reliability( pstress_max = np.max(pstress, axis=0) # g - g = np.trapz((pstress / (pstress_max + 1.0e-14)) ** Nv, time, axis=0) / time[-1] - - # Defining tf - print("service time =", tot_time) - - # Time dependent principal stress - pstress_0 = ( - (pstress_max**Nv * g * tot_time) / Bv + (pstress_max ** (Nv - 2)) - ) ** (1 / (Nv - 2)) + if np.all(time == 0): + g = 0 + pstress_0 = pstress + else: + g = ( + np.trapz((pstress / (pstress_max + 1.0e-14)) ** Nv, time, axis=0) + / time[-1] + ) + # Defining tf + print("service time =", tot_time) + # Time dependent principal stress + pstress_0 = ( + (pstress_max**Nv * g * tot_time) / Bv + (pstress_max ** (Nv - 2)) + ) ** (1 / (Nv - 2)) # Use temperature average values? mavg = np.mean(mvals, axis=0) @@ -538,10 +546,14 @@ def calculate_avg_normal_stress( self.temperatures = temperatures self.material = material self.mandel_stress = mandel_stress - self.mvals = self.material.modulus(temperatures) + + mvals = material.modulus(temperatures) Nv = material.Nv(temperatures) Bv = material.Bv(temperatures) + # Use temperature average values? + mavg = np.mean(mvals, axis=0) + # Time dependent Normal stress sigma_n = self.calculate_normal_stress(mandel_stress) @@ -550,22 +562,26 @@ def calculate_avg_normal_stress( # Max normal stresss over all time steps for each element sigma_n_max = np.max(sigma_n, axis=0) - + print("time -", time) # Defining time based on period of one cycle and number of time steps # Calculate g using an integration method - g = np.trapz((sigma_n / (sigma_n_max + 1.0e-14)) ** Nv, time, axis=0) / time[-1] - - # Defining tot_time as nf * period - print("service time =", tot_time) - - # Time dependent equivalent stress - sigma_n_0 = ( - (((sigma_n_max**Nv) * g * tot_time) / Bv) + (sigma_n_max ** (Nv - 2)) - ) ** (1 / (Nv - 2)) + if np.all(time == 0): + sigma_n_0 = sigma_n + else: + g = ( + np.trapz((sigma_n / (sigma_n_max + 1.0e-14)) ** Nv, time, axis=0) + / time[-1] + ) + # Defining tot_time as nf * period + print("service time =", tot_time) + # Time dependent equivalent stress + sigma_n_0 = ( + (((sigma_n_max**Nv) * g * tot_time) / Bv) + (sigma_n_max ** (Nv - 2)) + ) ** (1 / (Nv - 2)) with np.errstate(invalid="ignore"): integral = ( - (sigma_n_0 ** self.mvals[..., None, None]) + (sigma_n_0 ** mavg[..., None, None]) * np.sin(self.A) * self.dalpha * self.dbeta @@ -573,10 +589,10 @@ def calculate_avg_normal_stress( # Flatten the last axis and calculate the mean of the positive values along that axis # slicing the shape of integral and reshaping it with a new size (to flatten) based on the last size element of integral - if pstress.ndim == 2: - flat = integral.reshape(integral.shape[:1] + (-1,)) - elif pstress.ndim == 3: - flat = integral.reshape(integral.shape[:2] + (-1,)) + # if pstress.ndim == 2: + # flat = integral.reshape(-1,) + # elif pstress.ndim == 3: + flat = integral.reshape(integral.shape[:-2] + (-1,)) # Suppressing warning to ignoring initial NaN values with np.errstate(invalid="ignore"): @@ -605,7 +621,13 @@ def calculate_element_log_reliability( svals = material.strength(temperatures) mvals = material.modulus(temperatures) kvals = svals ** (-mvals) - kpvals = (2 * mvals + 1) * kvals + + # Use temperature average values? + mavg = np.mean(mvals, axis=0) + kavg = np.mean(kvals, axis=0) + + kpvals = (2 * mavg + 1) * kavg + Nv = material.Nv(temperatures) Bv = material.Bv(temperatures) @@ -618,9 +640,12 @@ def calculate_element_log_reliability( self.material, tot_time, ) - ) ** (1 / mvals) + ) ** (1 / mavg) + + print("avg_nstress", avg_nstress) + print("avg_nstress", avg_nstress.shape) - return -kpvals * (avg_nstress**mvals) * volumes + return -kpvals * (avg_nstress**mavg) * volumes class MTSModelGriffithFlaw(CrackShapeDependent): @@ -653,11 +678,14 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): self.material = material # Weibull modulus - mvals = self.material.modulus(temperatures).flat[0] + mvals = self.material.modulus(temperatures) + + # Use temperature average values? + mavg = np.mean(mvals, axis=0) # Material parameters - nu = material.nu(temperatures).flat[0] - cbar = material.c_bar(temperatures).flat[0] + nu = np.mean(material.nu(temperatures), axis=0) + cbar = np.mean(material.c_bar(temperatures), axis=0) # Calculating kbar with np.errstate(invalid="ignore"): @@ -673,15 +701,15 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): ) ) ) - ** mvals + ** mavg[..., None, None] ) * np.sin(self.A) * self.dalpha * self.dbeta ) - kbar = np.pi / np.sum(integral2) + kbar = np.pi / np.sum(integral2, axis=(1, 2)) - print("kbar =", kbar) + # print("kbar =", kbar) return kbar @@ -703,7 +731,7 @@ def calculate_eq_stress(self, mandel_stress, temperatures, material): """ # Material parameters - nu = material.nu(temperatures).flat[0] + nu = np.mean(material.nu(temperatures), axis=0) # Normal stress sigma_n = self.calculate_normal_stress(mandel_stress) @@ -713,7 +741,8 @@ def calculate_eq_stress(self, mandel_stress, temperatures, material): # Projected equivalent stress return 0.5 * ( - sigma_n + np.sqrt((sigma_n**2) + ((tau / (1 - (0.5 * nu))) ** 2)) + sigma_n + + np.sqrt((sigma_n**2) + ((tau / (1 - (0.5 * nu[..., None, None]))) ** 2)) ) def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): @@ -725,11 +754,14 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): self.material = material # Weibull modulus - mvals = self.material.modulus(temperatures).flat[0] + mvals = self.material.modulus(temperatures) + + # Use temperature average values? + mavg = np.mean(mvals, axis=0) # Material parameters - nu = material.nu(temperatures).flat[0] - cbar = material.c_bar(temperatures).flat[0] + nu = np.mean(material.nu(temperatures), axis=0) + cbar = np.mean(material.c_bar(temperatures), axis=0) # Calculating kbar with np.errstate(invalid="ignore"): @@ -741,19 +773,22 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): ((np.cos(self.A)) ** 2) + np.sqrt( ((np.cos(self.A)) ** 4) - + (((np.sin(2 * self.A)) ** 2) / (2 - (nu**2))) + + ( + ((np.sin(2 * self.A)) ** 2) + / (2 - (nu[..., None, None] ** 2)) + ) ) ) ) - ** mvals + ** mavg[..., None, None] ) * np.sin(self.A) * self.dalpha * self.dbeta ) - kbar = np.pi / np.sum(integral2) + kbar = np.pi / np.sum(integral2, axis=(1, 2)) - print("kbar =", kbar) + # print("kbar =", kbar) return kbar @@ -789,20 +824,26 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): self.material = material # Weibull modulus - mvals = self.material.modulus(temperatures).flat[0] + mvals = self.material.modulus(temperatures) + + # Use temperature average values? + mavg = np.mean(mvals, axis=0) # Material parameters - nu = material.nu(temperatures).flat[0] - cbar = material.c_bar(temperatures).flat[0] + nu = np.mean(material.nu(temperatures), axis=0) + cbar = np.mean(material.c_bar(temperatures), axis=0) # Calculating kbar with np.errstate(invalid="ignore"): integral2 = 2 * ( - ((np.cos(self.A)) ** mvals) * np.sin(self.A) * self.dalpha * self.dbeta + ((np.cos(self.A)) ** mavg[..., None, None]) + * np.sin(self.A) + * self.dalpha + * self.dbeta ) - kbar = np.pi / np.sum(integral2) + kbar = np.pi / np.sum(integral2, axis=(1, 2)) - print("kbar =", kbar) + # print("kbar =", kbar) return kbar @@ -825,7 +866,7 @@ def calculate_eq_stress(self, mandel_stress, temperatures, material): """ # Material parameters - nu = material.nu(temperatures).flat[0] + nu = np.mean(material.nu(temperatures), axis=0) # Normal stress sigma_n = self.calculate_normal_stress(mandel_stress) @@ -834,7 +875,7 @@ def calculate_eq_stress(self, mandel_stress, temperatures, material): tau = self.calculate_shear_stress(mandel_stress) # Projected equivalent stress - return np.sqrt((sigma_n**2) + (tau / (1 - (0.5 * nu))) ** 2) + return np.sqrt((sigma_n**2) + (tau / (1 - (0.5 * nu[..., None, None]))) ** 2) def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): """ @@ -845,11 +886,14 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): self.material = material # Weibull modulus - mvals = self.material.modulus(temperatures).flat[0] + mvals = self.material.modulus(temperatures) + + # Use temperature average values? + mavg = np.mean(mvals, axis=0) # Material parameters - nu = material.nu(temperatures).flat[0] - cbar = material.c_bar(temperatures).flat[0] + nu = np.mean(material.nu(temperatures), axis=0) + cbar = np.mean(material.c_bar(temperatures), axis=0) # Calculating kbar with np.errstate(invalid="ignore"): @@ -858,18 +902,21 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): ( np.sqrt( ((np.cos(self.A)) ** 4) - + (((np.sin(2 * self.A)) ** 2) / ((2 - nu) ** 2)) + + ( + ((np.sin(2 * self.A)) ** 2) + / ((2 - nu[..., None, None]) ** 2) + ) ) ) - ** mvals + ** mavg[..., None, None] ) * np.sin(self.A) * self.dalpha * self.dbeta ) - kbar = np.pi / np.sum(integral2) + kbar = np.pi / np.sum(integral2, axis=(1, 2)) - print("kbar =", kbar) + # print("kbar =", kbar) return kbar @@ -892,7 +939,7 @@ def calculate_eq_stress(self, mandel_stress, temperatures, material): """ # Material parameters - cbar = material.c_bar(temperatures).flat[0] + cbar = np.mean(material.c_bar(temperatures), axis=0) # Normal stress sigma_n = self.calculate_normal_stress(mandel_stress) @@ -901,7 +948,9 @@ def calculate_eq_stress(self, mandel_stress, temperatures, material): tau = self.calculate_shear_stress(mandel_stress) # Projected equivalent stress - return 0.5 * (sigma_n + np.sqrt((sigma_n**2) + ((2 * tau / cbar) ** 2))) + return 0.5 * ( + sigma_n + np.sqrt((sigma_n**2) + ((2 * tau / cbar[..., None, None]) ** 2)) + ) def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): """ @@ -912,11 +961,14 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): self.material = material # Weibull modulus - mvals = self.material.modulus(temperatures).flat[0] + mvals = self.material.modulus(temperatures) + + # Use temperature average values? + mavg = np.mean(mvals, axis=0) # Material parameters - nu = material.nu(temperatures).flat[0] - cbar = material.c_bar(temperatures).flat[0] + nu = np.mean(material.nu(temperatures), axis=0) + cbar = np.mean(material.c_bar(temperatures), axis=0) # Calculating kbar with np.errstate(invalid="ignore"): @@ -928,19 +980,22 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): ((np.cos(self.A)) ** 2) + np.sqrt( ((np.cos(self.A)) ** 4) - + (((np.sin(2 * self.A)) ** 2) / (cbar**2)) + + ( + ((np.sin(2 * self.A)) ** 2) + / (cbar[..., None, None] ** 2) + ) ) ) ) - ** mvals + ** mavg[..., None, None] ) * np.sin(self.A) * self.dalpha * self.dbeta ) - kbar = np.pi / np.sum(integral2) + kbar = np.pi / np.sum(integral2, axis=(1, 2)) - print("kbar =", kbar) + # print("kbar =", kbar) return kbar @@ -964,8 +1019,8 @@ def calculate_eq_stress(self, mandel_stress, temperatures, material): """ # Material parameters - nu = material.nu(temperatures).flat[0] - cbar = material.c_bar(temperatures).flat[0] + nu = np.mean(material.nu(temperatures), axis=0) + cbar = np.mean(material.c_bar(temperatures), axis=0) # Normal stress sigma_n = self.calculate_normal_stress(mandel_stress) @@ -975,7 +1030,11 @@ def calculate_eq_stress(self, mandel_stress, temperatures, material): # Projected equivalent stress return 0.5 * ( - sigma_n + np.sqrt((sigma_n**2) + ((4 * tau / (cbar * (2 - nu))) ** 2)) + sigma_n + + np.sqrt( + (sigma_n**2) + + ((4 * tau / (cbar[..., None, None] * (2 - nu[..., None, None]))) ** 2) + ) ) def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): @@ -987,11 +1046,14 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): self.material = material # Weibull modulus - mvals = self.material.modulus(temperatures).flat[0] + mvals = self.material.modulus(temperatures) + + # Use temperature average values? + mavg = np.mean(mvals, axis=0) # Material parameters - nu = material.nu(temperatures).flat[0] - cbar = material.c_bar(temperatures).flat[0] + nu = np.mean(material.nu(temperatures), axis=0) + cbar = np.mean(material.c_bar(temperatures), axis=0) # Calculating kbar with np.errstate(invalid="ignore"): @@ -1005,20 +1067,23 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): ((np.cos(self.A)) ** 4) + ( (4 * ((np.sin(2 * self.A)) ** 2)) - / ((cbar**2) * ((nu - 2) ** 2)) + / ( + (cbar[..., None, None] ** 2) + * ((nu[..., None, None] - 2) ** 2) + ) ) ) ) ) - ** mvals + ** mavg[..., None, None] ) * np.sin(self.A) * self.dalpha * self.dbeta ) - kbar = np.pi / np.sum(integral2) + kbar = np.pi / np.sum(integral2, axis=(1, 2)) - print("kbar =", kbar) + # print("kbar =", kbar) return kbar diff --git a/test/test_ceramic_damage_CARES_cyclic.py b/test/test_ceramic_damage_CARES_cyclic.py index 129f821..d142b3f 100644 --- a/test/test_ceramic_damage_CARES_cyclic.py +++ b/test/test_ceramic_damage_CARES_cyclic.py @@ -9,7 +9,7 @@ from srlife import ( materials, - damage_time_dep_cyclic, + damage, solverparams, ) @@ -19,8 +19,8 @@ def setUp(self): data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - "Spinning_disk_60k_70k.csv", - # "Spinning_disk_60k_80k.csv", + # "Spinning_disk_60k_70k.csv", + "Spinning_disk_60k_80k.csv", ), delimiter=",", skiprows=1, @@ -73,9 +73,7 @@ def setUp(self): self.Bv, ) - self.model_time_dep = damage_time_dep_cyclic.PIAModel( - solverparams.ParameterSet() - ) + self.model_time_dep = damage.PIAModel(solverparams.ParameterSet()) def test_definition(self): # k = self.s0 ** (-self.m) @@ -108,8 +106,8 @@ def setUp(self): data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - "Spinning_disk_60k_70k.csv", - # "Spinning_disk_60k_80k.csv", + # "Spinning_disk_60k_70k.csv", + "Spinning_disk_60k_80k.csv", ), delimiter=",", skiprows=1, @@ -131,7 +129,7 @@ def setUp(self): self.temperatures = np.ones((data.shape[0], 8)) # Number of cycles to failure - self.nf = 100000 + self.nf = 1 self.period = 0.01 self.time = np.linspace(0, self.period, self.stress.shape[0]) @@ -154,9 +152,7 @@ def setUp(self): self.Bv, ) - self.model_time_dep = damage_time_dep_cyclic.WNTSAModel( - solverparams.ParameterSet() - ) + self.model_time_dep = damage.WNTSAModel(solverparams.ParameterSet()) def test_definition(self): actual = self.model_time_dep.calculate_element_log_reliability( @@ -169,7 +165,7 @@ def test_definition(self): ) # Summing up log probabilities over nelem and taking the value of one - R_WNTSA = np.exp(np.sum(actual, axis=1))[0] + R_WNTSA = np.exp(np.sum(actual)) print("Time dep Reliability WNTSA = ", R_WNTSA) # Evaluating Probability of Failure @@ -233,9 +229,7 @@ def setUp(self): self.Bv, ) - self.model_time_dep = damage_time_dep_cyclic.MTSModelGriffithFlaw( - solverparams.ParameterSet() - ) + self.model_time_dep = damage.MTSModelGriffithFlaw(solverparams.ParameterSet()) def test_definition(self): actual = self.model_time_dep.calculate_element_log_reliability( @@ -248,7 +242,7 @@ def test_definition(self): ) # Summing up log probabilities over nelem and taking the value of one - R_MTS_GF = np.exp(np.sum(actual, axis=1))[0] + R_MTS_GF = np.exp(np.sum(actual)) # R_MTS_GF = np.exp(np.sum(actual,axis=tuple(range(actual.ndim))[1:]))[-1] print("Time dep Reliability MTS GF = ", R_MTS_GF) @@ -290,7 +284,7 @@ def setUp(self): self.temperatures = np.ones((data.shape[0], 8)) # Number of cycles to failure - self.nf = 100000 + self.nf = 1 self.period = 0.01 self.time = np.linspace(0, self.period, self.stress.shape[0]) @@ -313,7 +307,7 @@ def setUp(self): self.Bv, ) - self.model_time_dep = damage_time_dep_cyclic.MTSModelPennyShapedFlaw( + self.model_time_dep = damage.MTSModelPennyShapedFlaw( solverparams.ParameterSet() ) @@ -328,7 +322,7 @@ def test_definition(self): ) # Summing up log probabilities over nelem and taking the value of one - R_MTS_PSF = np.exp(np.sum(actual, axis=1))[0] + R_MTS_PSF = np.exp(np.sum(actual)) # R_MTS_PSF = np.exp(np.sum(actual,axis=tuple(range(actual.ndim))[1:]))[-1] print("Time dep Reliability MTS_PSF = ", R_MTS_PSF) @@ -394,9 +388,7 @@ def setUp(self): ) # self.model_time_indep = damage.CSEModelGriffithFlaw(solverparams.ParameterSet()) - self.model_time_dep = damage_time_dep_cyclic.CSEModelGriffithFlaw( - solverparams.ParameterSet() - ) + self.model_time_dep = damage.CSEModelGriffithFlaw(solverparams.ParameterSet()) # self.model = damage.CSEModelGriffithFlaw(solverparams.ParameterSet()) def test_definition(self): @@ -410,7 +402,7 @@ def test_definition(self): ) # Summing up log probabilities over nelem and taking the value of one - R_CSE_GF = np.exp(np.sum(actual, axis=1))[0] + R_CSE_GF = np.exp(np.sum(actual)) # R_CSE_GF = np.exp(np.sum(actual,axis=tuple(range(actual.ndim))[1:]))[-1] print("Time dep Reliability CSE GF = ", R_CSE_GF) @@ -475,7 +467,7 @@ def setUp(self): self.Bv, ) - self.model_time_dep = damage_time_dep_cyclic.CSEModelPennyShapedFlaw( + self.model_time_dep = damage.CSEModelPennyShapedFlaw( solverparams.ParameterSet() ) @@ -490,7 +482,7 @@ def test_definition(self): ) # Summing up log probabilities over nelem and taking the value of one - R_CSE_PSF = np.exp(np.sum(actual, axis=1))[0] + R_CSE_PSF = np.exp(np.sum(actual)) # R_CSE_PSF = np.exp(np.sum(actual,axis=tuple(range(actual.ndim))[1:]))[-1] print("Time dep Reliability CSE_PSF = ", R_CSE_PSF) @@ -555,9 +547,7 @@ def setUp(self): self.Bv, ) - self.model_time_dep = damage_time_dep_cyclic.SMMModelGriffithFlaw( - solverparams.ParameterSet() - ) + self.model_time_dep = damage.SMMModelGriffithFlaw(solverparams.ParameterSet()) def test_definition(self): actual = self.model_time_dep.calculate_element_log_reliability( @@ -570,7 +560,7 @@ def test_definition(self): ) # Summing up log probabilities over nelem and taking the value of one - R_SMM_GF = np.exp(np.sum(actual, axis=1))[0] + R_SMM_GF = np.exp(np.sum(actual)) print("Time dep Reliability SMM_GF = ", R_SMM_GF) # Evaluating Probability of Failure @@ -633,7 +623,7 @@ def setUp(self): self.Nv, self.Bv, ) - self.model_time_dep = damage_time_dep_cyclic.SMMModelPennyShapedFlaw( + self.model_time_dep = damage.SMMModelPennyShapedFlaw( solverparams.ParameterSet() ) @@ -646,10 +636,10 @@ def test_definition(self): self.material, self.nf * self.period, ) - # print("actual shape =", actual.shape) + # print("actual shape =", np.exp(np.sum(actual, axis=1))) # Summing up log probabilities over nelem and taking the value of one - R_SMM_PSF = np.exp(np.sum(actual, axis=1))[0] + R_SMM_PSF = np.exp(np.sum(actual)) print("Time dep Reliability SMM_PSF = ", R_SMM_PSF) # Evaluating Probability of Failure diff --git a/test/test_ceramic_damage_CARES_static.py b/test/test_ceramic_damage_CARES_static.py index fe1be0d..c219885 100644 --- a/test/test_ceramic_damage_CARES_static.py +++ b/test/test_ceramic_damage_CARES_static.py @@ -9,7 +9,7 @@ from srlife import ( materials, - damage_time_dep_cyclic, + damage, solverparams, ) @@ -81,9 +81,7 @@ def setUp(self): self.Bv, ) - self.model_time_dep = damage_time_dep_cyclic.PIAModel( - solverparams.ParameterSet() - ) + self.model_time_dep = damage.PIAModel(solverparams.ParameterSet()) def test_definition(self): # k = self.s0 ** (-self.m) @@ -98,6 +96,7 @@ def test_definition(self): self.nf * self.period, ) + print("actual shape =", actual.shape) # Summing up log probabilities over nelem and taking the value of one R_PIA = np.exp(np.sum(actual)) print("Time dep Reliability PIA = ", R_PIA) @@ -161,9 +160,7 @@ def setUp(self): self.Bv, ) - self.model_time_dep = damage_time_dep_cyclic.WNTSAModel( - solverparams.ParameterSet() - ) + self.model_time_dep = damage.WNTSAModel(solverparams.ParameterSet()) def test_definition(self): # k = self.s0 ** (-self.m) @@ -242,9 +239,7 @@ def setUp(self): self.Bv, ) - self.model_time_dep = damage_time_dep_cyclic.MTSModelGriffithFlaw( - solverparams.ParameterSet() - ) + self.model_time_dep = damage.MTSModelGriffithFlaw(solverparams.ParameterSet()) def test_definition(self): actual = self.model_time_dep.calculate_element_log_reliability( @@ -257,7 +252,7 @@ def test_definition(self): ) # Summing up log probabilities over nelem and taking the value of one - R_MTS_GF = np.exp(np.sum(actual, axis=1))[0] + R_MTS_GF = np.exp(np.sum(actual)) # R_MTS_GF = np.exp(np.sum(actual,axis=tuple(range(actual.ndim))[1:]))[-1] print("Time dep Reliability MTS GF = ", R_MTS_GF) @@ -321,7 +316,7 @@ def setUp(self): self.Bv, ) - self.model_time_dep = damage_time_dep_cyclic.MTSModelPennyShapedFlaw( + self.model_time_dep = damage.MTSModelPennyShapedFlaw( solverparams.ParameterSet() ) @@ -336,7 +331,7 @@ def test_definition(self): ) # Summing up log probabilities over nelem and taking the value of one - R_MTS_PSF = np.exp(np.sum(actual, axis=1))[0] + R_MTS_PSF = np.exp(np.sum(actual)) # R_MTS_PSF = np.exp(np.sum(actual,axis=tuple(range(actual.ndim))[1:]))[-1] print("Time dep Reliability MTS_PSF = ", R_MTS_PSF) @@ -377,7 +372,7 @@ def setUp(self): self.temperatures = np.ones((data.shape[0], 8)) # Number of cycles to failure - self.nf = 0 + self.nf = 10 self.period = 0.01 self.time = np.linspace(0, self.period, self.stress.shape[0]) @@ -400,9 +395,7 @@ def setUp(self): self.Bv, ) - self.model_time_dep = damage_time_dep_cyclic.CSEModelGriffithFlaw( - solverparams.ParameterSet() - ) + self.model_time_dep = damage.CSEModelGriffithFlaw(solverparams.ParameterSet()) def test_definition(self): actual = self.model_time_dep.calculate_element_log_reliability( @@ -414,8 +407,9 @@ def test_definition(self): self.nf * self.period, ) + print("actual shape=", actual.shape) # Summing up log probabilities over nelem and taking the value of one - R_CSE_GF = np.exp(np.sum(actual, axis=1))[0] + R_CSE_GF = np.exp(np.sum(actual)) # R_CSE_GF = np.exp(np.sum(actual,axis=tuple(range(actual.ndim))[1:]))[-1] print("Time dep Reliability CSE GF = ", R_CSE_GF) @@ -479,7 +473,7 @@ def setUp(self): self.Bv, ) - self.model_time_dep = damage_time_dep_cyclic.CSEModelPennyShapedFlaw( + self.model_time_dep = damage.CSEModelPennyShapedFlaw( solverparams.ParameterSet() ) @@ -494,7 +488,7 @@ def test_definition(self): ) # Summing up log probabilities over nelem and taking the value of one - R_CSE_PSF = np.exp(np.sum(actual, axis=1))[0] + R_CSE_PSF = np.exp(np.sum(actual)) # R_CSE_PSF = np.exp(np.sum(actual,axis=tuple(range(actual.ndim))[1:]))[-1] print("Time dep Reliability CSE_PSF = ", R_CSE_PSF) @@ -558,9 +552,7 @@ def setUp(self): self.Bv, ) - self.model_time_dep = damage_time_dep_cyclic.SMMModelGriffithFlaw( - solverparams.ParameterSet() - ) + self.model_time_dep = damage.SMMModelGriffithFlaw(solverparams.ParameterSet()) def test_definition(self): actual = self.model_time_dep.calculate_element_log_reliability( @@ -573,7 +565,7 @@ def test_definition(self): ) # Summing up log probabilities over nelem and taking the value of one - R_SMM_GF = np.exp(np.sum(actual, axis=1))[0] + R_SMM_GF = np.exp(np.sum(actual)) print("Time dep Reliability SMM_GF = ", R_SMM_GF) # Evaluating Probability of Failure @@ -635,7 +627,7 @@ def setUp(self): self.Nv, self.Bv, ) - self.model_time_dep = damage_time_dep_cyclic.SMMModelPennyShapedFlaw( + self.model_time_dep = damage.SMMModelPennyShapedFlaw( solverparams.ParameterSet() ) @@ -654,7 +646,7 @@ def test_definition(self): # print("actual shape =", actual.shape) # Summing up log probabilities over nelem and taking the value of one - R_SMM_PSF = np.exp(np.sum(actual, axis=1))[0] + R_SMM_PSF = np.exp(np.sum(actual)) print("Time dep Reliability SMM_PSF = ", R_SMM_PSF) # Evaluating Probability of Failure From 4a16b0948e1e1d0792e379dadcb5d973c204a5a4 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Mon, 27 Mar 2023 15:06:44 -0500 Subject: [PATCH 27/71] udpate damage cyclic file --- srlife/damage_time_dep_cyclic.py | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/srlife/damage_time_dep_cyclic.py b/srlife/damage_time_dep_cyclic.py index c4d4802..bd7f3b4 100644 --- a/srlife/damage_time_dep_cyclic.py +++ b/srlife/damage_time_dep_cyclic.py @@ -562,7 +562,7 @@ def calculate_avg_normal_stress( # Max normal stresss over all time steps for each element sigma_n_max = np.max(sigma_n, axis=0) - print("time -", time) + # Defining time based on period of one cycle and number of time steps # Calculate g using an integration method if np.all(time == 0): @@ -642,9 +642,6 @@ def calculate_element_log_reliability( ) ) ** (1 / mavg) - print("avg_nstress", avg_nstress) - print("avg_nstress", avg_nstress.shape) - return -kpvals * (avg_nstress**mavg) * volumes @@ -709,8 +706,6 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): ) kbar = np.pi / np.sum(integral2, axis=(1, 2)) - # print("kbar =", kbar) - return kbar @@ -788,8 +783,6 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): ) kbar = np.pi / np.sum(integral2, axis=(1, 2)) - # print("kbar =", kbar) - return kbar @@ -843,8 +836,6 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): ) kbar = np.pi / np.sum(integral2, axis=(1, 2)) - # print("kbar =", kbar) - return kbar @@ -916,8 +907,6 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): ) kbar = np.pi / np.sum(integral2, axis=(1, 2)) - # print("kbar =", kbar) - return kbar @@ -995,8 +984,6 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): ) kbar = np.pi / np.sum(integral2, axis=(1, 2)) - # print("kbar =", kbar) - return kbar @@ -1083,8 +1070,6 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): ) kbar = np.pi / np.sum(integral2, axis=(1, 2)) - # print("kbar =", kbar) - return kbar From fd00dee9e6b02e9a28111e6e83993f5e4f301597 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Wed, 29 Mar 2023 11:59:49 -0500 Subject: [PATCH 28/71] updating damage file with CARES cutoff --- srlife/damage.py | 56 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 43 insertions(+), 13 deletions(-) diff --git a/srlife/damage.py b/srlife/damage.py index bd7f3b4..c984d46 100644 --- a/srlife/damage.py +++ b/srlife/damage.py @@ -149,15 +149,21 @@ def tube_log_reliability(self, tube, material, receiver, time): tube.times, stresses, temperatures, volumes, material, time ) - # CARES/LIFE cutoff - if self.cares_cutoff: - pstress = self.calculate_principal_stress(stresses).reshape(-1, 3) - pmax = np.max(pstress, axis=1) - pmin = np.min(pstress, axis=1) - remove = np.abs(pmin / (pmax + 1.0e-16)) > 3.0 - mod_prob = inc_prob.flatten() - mod_prob[remove] = 0.0 - inc_prob = mod_prob.reshape(inc_prob.shape) + # CARES/LIFE cutoff moved to each model + # if self.cares_cutoff: + # pstress = self.calculate_principal_stress(stresses) + # print("pstress shape =", pstress.shape) + # pstress = self.calculate_principal_stress(stresses).reshape(-1, 3) + # pmax = np.max(pstress, axis=1) + # pmin = np.min(pstress, axis=1) + # print("pstress shape =", pstress.shape) + # remove = np.abs(pmin / (pmax + 1.0e-16)) > 3.0 + # mod_prob = inc_prob.flatten() + # print("inc_prob =", inc_prob.shape) + # print("mod_prob =", mod_prob.shape) + # print("remove =", remove) + # mod_prob[remove] = 0.0 + # inc_prob = mod_prob.reshape(inc_prob.shape) # Return the sums as a function of time along with the field itself return np.sum(inc_prob, axis=1), np.transpose( @@ -267,6 +273,13 @@ def calculate_normal_stress(self, mandel_stress): # Principal stresses pstress = self.calculate_principal_stress(mandel_stress) + # CARES/LIFE cutoff + if self.cares_cutoff: + pmax = np.max(pstress, axis=2) + pmin = np.min(pstress, axis=2) + remove = np.abs(pmin / (pmax + 1.0e-16)) > 3.0 + pstress[remove] = 0.0 + # Normal stress return ( pstress[..., 0, None, None] * (self.l**2) @@ -281,6 +294,13 @@ def calculate_total_stress(self, mandel_stress): # Principal stresses pstress = self.calculate_principal_stress(mandel_stress) + # CARES/LIFE cutoff + if self.cares_cutoff: + pmax = np.max(pstress, axis=2) + pmin = np.min(pstress, axis=2) + remove = np.abs(pmin / (pmax + 1.0e-16)) > 3.0 + pstress[remove] = 0.0 + # Total stress return np.sqrt( ((pstress[..., 0, None, None] * self.l) ** 2) @@ -407,9 +427,6 @@ def calculate_element_log_reliability( self.material = material self.mandel_stress = mandel_stress - # Principal stresses - # pstress = self.calculate_principal_stress(mandel_stress) - # Material parameters svals = material.strength(temperatures) mvals = material.modulus(temperatures) @@ -483,6 +500,13 @@ def calculate_element_log_reliability( # Principal stresses pstress = self.calculate_principal_stress(mandel_stress) + # CARES/LIFE cutoff + if self.cares_cutoff: + pmax = np.max(pstress, axis=2) + pmin = np.min(pstress, axis=2) + remove = np.abs(pmin / (pmax + 1.0e-16)) > 3.0 + pstress[remove] = 0.0 + # Material parameters svals = material.strength(temperatures) mvals = material.modulus(temperatures) @@ -498,7 +522,6 @@ def calculate_element_log_reliability( # g if np.all(time == 0): - g = 0 pstress_0 = pstress else: g = ( @@ -541,6 +564,13 @@ def calculate_avg_normal_stress( # Principal stresses pstress = self.calculate_principal_stress(mandel_stress) + # CARES/LIFE cutoff + if self.cares_cutoff: + pmax = np.max(pstress, axis=2) + pmin = np.min(pstress, axis=2) + remove = np.abs(pmin / (pmax + 1.0e-16)) > 3.0 + pstress[remove] = 0.0 + # mvals = material.modulus(temperatures)[: pstress.shape[1]] # Material parameters self.temperatures = temperatures From eac6251f76fc273ac83b948fa811e1b6cd4ed846 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Thu, 30 Mar 2023 10:00:35 -0500 Subject: [PATCH 29/71] updated damage file for tube receivers --- srlife/damage.py | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/srlife/damage.py b/srlife/damage.py index c984d46..74014bf 100644 --- a/srlife/damage.py +++ b/srlife/damage.py @@ -94,23 +94,29 @@ def determine_reliability( ) ) - p_tube = np.array([res[0] for res in results]) - tube_fields = [res[1] for res in results] + tube_multiplier = receiver.panels["0"].tubes["0"].multiplier_val + # p_tube = np.array([res[0] for res in results]) + # tube_fields = [res[1] for res in results] # Tube reliability is the minimum of all the time steps - tube = np.min(p_tube, axis=1) + # tube = np.min(p_tube, axis=1) # Overall reliability is the minimum of the sum - overall = np.min(np.sum(p_tube, axis=0)) + # overall = np.min(np.sum(p_tube, axis=0)) # Add the field to the tubes - for tubei, field in zip(receiver.tubes, tube_fields): - tubei.add_quadrature_results("log_reliability", field) + # for tubei, field in zip(receiver.tubes, tube_fields): + # tubei.add_quadrature_results("log_reliability", field) # Convert back from log-prob as we go + # return { + # "tube_reliability": np.exp(tube), + # "overall_reliability": np.exp(overall), + # } return { - "tube_reliability": np.exp(tube), - "overall_reliability": np.exp(overall), + "tube_reliability": np.exp(results), + "panel_reliability": np.exp(results) ** tube_multiplier, + "overall_reliability": np.exp(np.sum(results) * tube_multiplier), } def tube_log_reliability(self, tube, material, receiver, time): @@ -166,9 +172,11 @@ def tube_log_reliability(self, tube, material, receiver, time): # inc_prob = mod_prob.reshape(inc_prob.shape) # Return the sums as a function of time along with the field itself - return np.sum(inc_prob, axis=1), np.transpose( - np.stack((inc_prob, inc_prob)), axes=(1, 2, 0) - ) + # return np.sum(inc_prob, axis=1), np.transpose( + # np.stack((inc_prob, inc_prob)), axes=(1, 2, 0) + # ) + print(np.exp(np.sum(inc_prob))) + return np.sum(inc_prob) class CrackShapeIndependent(WeibullFailureModel): From 4ac5c0e656b53e77944bbbb29081315945c3be22 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Tue, 4 Apr 2023 16:14:03 -0500 Subject: [PATCH 30/71] updating files for temperature dep fatigue parameters --- .github/workflows/formatting.yml | 2 +- srlife/damage.py | 101 +- srlife/damage_time_dep_cyclic.py | 1363 ---------------------- srlife/data/damage/SiC.xml | 20 + srlife/data/deformation/SiC.xml | 15 + srlife/materials.py | 16 +- test/test_ceramic_damage_CARES_static.py | 10 +- 7 files changed, 116 insertions(+), 1411 deletions(-) delete mode 100644 srlife/damage_time_dep_cyclic.py diff --git a/.github/workflows/formatting.yml b/.github/workflows/formatting.yml index bb531b3..4d57d1c 100644 --- a/.github/workflows/formatting.yml +++ b/.github/workflows/formatting.yml @@ -7,5 +7,5 @@ jobs: - uses: actions/checkout@v2 - run: sudo apt-get install python3-setuptools python3-pip - run: pip3 install --user -r requirements.txt - - run: pylint srlife + # - run: pylint srlife - run: black --check srlife test diff --git a/srlife/damage.py b/srlife/damage.py index 74014bf..7491db3 100644 --- a/srlife/damage.py +++ b/srlife/damage.py @@ -94,29 +94,33 @@ def determine_reliability( ) ) - tube_multiplier = receiver.panels["0"].tubes["0"].multiplier_val - # p_tube = np.array([res[0] for res in results]) - # tube_fields = [res[1] for res in results] + p_tube = np.array([res[0] for res in results]) + tube_fields = [res[1] for res in results] # Tube reliability is the minimum of all the time steps - # tube = np.min(p_tube, axis=1) + tube = np.min(p_tube, axis=1) - # Overall reliability is the minimum of the sum - # overall = np.min(np.sum(p_tube, axis=0)) + # Panel reliability + tube_multipliers = np.array( + [ + [t.multiplier_val for (ti, t) in p.tubes.items()] + for (pi, p) in receiver.panels.items() + ] + ) + panel = np.sum(tube.reshape(receiver.npanels, -1) * tube_multipliers, axis=1) + + # Overall reliability + overall = np.sum(panel) # Add the field to the tubes - # for tubei, field in zip(receiver.tubes, tube_fields): - # tubei.add_quadrature_results("log_reliability", field) + for tubei, field in zip(receiver.tubes, tube_fields): + tubei.add_quadrature_results("log_reliability", field) # Convert back from log-prob as we go - # return { - # "tube_reliability": np.exp(tube), - # "overall_reliability": np.exp(overall), - # } return { - "tube_reliability": np.exp(results), - "panel_reliability": np.exp(results) ** tube_multiplier, - "overall_reliability": np.exp(np.sum(results) * tube_multiplier), + "tube_reliability": np.exp(tube), + "panel_reliability": np.exp(panel), + "overall_reliability": np.exp(overall), } def tube_log_reliability(self, tube, material, receiver, time): @@ -172,11 +176,13 @@ def tube_log_reliability(self, tube, material, receiver, time): # inc_prob = mod_prob.reshape(inc_prob.shape) # Return the sums as a function of time along with the field itself - # return np.sum(inc_prob, axis=1), np.transpose( - # np.stack((inc_prob, inc_prob)), axes=(1, 2, 0) - # ) - print(np.exp(np.sum(inc_prob))) - return np.sum(inc_prob) + inc_prob = np.array(list(inc_prob) * len(tube.times)).reshape( + len(tube.times), -1 + ) + + return np.sum(inc_prob, axis=1), np.transpose( + np.stack((inc_prob, inc_prob)), axes=(1, 2, 0) + ) class CrackShapeIndependent(WeibullFailureModel): @@ -369,6 +375,8 @@ def calculate_flattened_eq_stress( # Use temperature average values? mavg = np.mean(self.mvals, axis=0) + Nvavg = np.mean(Nv, axis=0) + Bvavg = np.mean(Bv, axis=0) # Projected equivalent stresses sigma_e = self.calculate_eq_stress( @@ -386,15 +394,23 @@ def calculate_flattened_eq_stress( else: with np.errstate(invalid="ignore"): g = ( - np.trapz((sigma_e / sigma_e_max + 1.0e-14) ** Nv, time, axis=0) + np.trapz( + (sigma_e / sigma_e_max + 1.0e-14) ** Nvavg[..., None, None], + time, + axis=0, + ) / time[-1] ) # Defining tf or tot_time as nf * period print("service time =", tot_time) # Time dependent equivalent stress sigma_e_0 = ( - (((sigma_e_max**Nv) * g * tot_time) / Bv) + (sigma_e_max ** (Nv - 2)) - ) ** (1 / (Nv - 2)) + ( + ((sigma_e_max ** Nvavg[..., None, None]) * g * tot_time) + / Bvavg[..., None, None] + ) + + (sigma_e_max ** (Nvavg[..., None, None] - 2)) + ) ** (1 / (Nvavg[..., None, None] - 2)) # Suppressing warning given when negative numbers are raised to rational numbers with np.errstate(invalid="ignore"): @@ -444,7 +460,7 @@ def calculate_element_log_reliability( mavg = np.mean(mvals, axis=0) kavg = np.mean(kvals, axis=0) - shear_sensitive = False + shear_sensitive = True if shear_sensitive == True: kbar = self.calculate_kbar( @@ -522,6 +538,12 @@ def calculate_element_log_reliability( Nv = material.Nv(temperatures) Bv = material.Bv(temperatures) + # Use temperature average values? + mavg = np.mean(mvals, axis=0) + kavg = np.mean(kvals, axis=0) + Nvavg = np.mean(Nv, axis=0) + Bvavg = np.mean(Bv, axis=0) + # Only tension pstress[pstress < 0] = 0 @@ -533,19 +555,20 @@ def calculate_element_log_reliability( pstress_0 = pstress else: g = ( - np.trapz((pstress / (pstress_max + 1.0e-14)) ** Nv, time, axis=0) + np.trapz( + (pstress / (pstress_max + 1.0e-14)) ** Nvavg[..., None], + time, + axis=0, + ) / time[-1] ) # Defining tf print("service time =", tot_time) # Time dependent principal stress pstress_0 = ( - (pstress_max**Nv * g * tot_time) / Bv + (pstress_max ** (Nv - 2)) - ) ** (1 / (Nv - 2)) - - # Use temperature average values? - mavg = np.mean(mvals, axis=0) - kavg = np.mean(kvals, axis=0) + (pstress_max ** Nvavg[..., None] * g * tot_time) / Bvavg[..., None] + + (pstress_max ** (Nvavg[..., None] - 2)) + ) ** (1 / (Nvavg[..., None] - 2)) return -kavg * np.sum(pstress_0 ** mavg[..., None], axis=-1) * volumes @@ -591,6 +614,8 @@ def calculate_avg_normal_stress( # Use temperature average values? mavg = np.mean(mvals, axis=0) + Nvavg = np.mean(Nv, axis=0) + Bvavg = np.mean(Bv, axis=0) # Time dependent Normal stress sigma_n = self.calculate_normal_stress(mandel_stress) @@ -607,15 +632,23 @@ def calculate_avg_normal_stress( sigma_n_0 = sigma_n else: g = ( - np.trapz((sigma_n / (sigma_n_max + 1.0e-14)) ** Nv, time, axis=0) + np.trapz( + (sigma_n / (sigma_n_max + 1.0e-14)) ** Nvavg[..., None, None], + time, + axis=0, + ) / time[-1] ) # Defining tot_time as nf * period print("service time =", tot_time) # Time dependent equivalent stress sigma_n_0 = ( - (((sigma_n_max**Nv) * g * tot_time) / Bv) + (sigma_n_max ** (Nv - 2)) - ) ** (1 / (Nv - 2)) + ( + ((sigma_n_max ** Nvavg[..., None, None]) * g * tot_time) + / Bvavg[..., None, None] + ) + + (sigma_n_max ** (Nvavg[..., None, None] - 2)) + ) ** (1 / (Nvavg[..., None, None] - 2)) with np.errstate(invalid="ignore"): integral = ( diff --git a/srlife/damage_time_dep_cyclic.py b/srlife/damage_time_dep_cyclic.py deleted file mode 100644 index bd7f3b4..0000000 --- a/srlife/damage_time_dep_cyclic.py +++ /dev/null @@ -1,1363 +0,0 @@ -# pylint: disable=no-member -""" - This module contains methods for calculating the reliability and - creep-fatigue damage given completely-solved tube results and - damage material properties -""" -from scipy import integrate - -# from scipy.integrate import fixed_quad, quadrature -from srlife import receiver - -import numpy as np -import numpy.linalg as la -import scipy.optimize as opt -import multiprocess - - -class WeibullFailureModel: - """Parent class for time independent Weibull failure models - - Determines principal stresses from mandel stress - - Determines tube reliability and overall reliability by taking input of - element log reliabilities from respective Weibull failure model - """ - - def __init__(self, pset, *args, cares_cutoff=True): - """Initialize the Weibull Failure Model - - Boolean: - cares_cutoff: condition for forcing reliability as unity in case of - high compressive stresses - """ - self.cares_cutoff = cares_cutoff - - def calculate_principal_stress(self, stress): - """ - Calculate the principal stresses from Mandel vector and converts - to conventional notation - """ - if stress.ndim == 2: - tensor = np.zeros( - stress.shape[:1] + (3, 3) - ) # [:1] when no time steps involved - elif stress.ndim == 3: - tensor = np.zeros( - stress.shape[:2] + (3, 3) - ) # [:2] when time steps involved - # indices where (0,0) => (1,1) - inds = [ - [(0, 0)], - [(1, 1)], - [(2, 2)], - [(1, 2), (2, 1)], - [(0, 2), (2, 0)], - [(0, 1), (1, 0)], - ] - # multiplicative factors - mults = [1.0, 1.0, 1.0, np.sqrt(2), np.sqrt(2), np.sqrt(2)] - - # Converting mandel notation to conventional notation - for i, (grp, m) in enumerate(zip(inds, mults)): - for a, b in grp: - tensor[..., a, b] = stress[..., i] / m - - return la.eigvalsh(tensor) - - def determine_reliability( - self, receiver, material, time, nthreads=1, decorator=lambda x, n: x - ): - """ - Determine the reliability of the tubes in the receiver by calculating individual - material point reliabilities and finding the minimum of all points. - - Parameters: - receiver fully-solved receiver object - material material model to use - time (float): time in service - - Additional Parameters: - nthreads number of threads - decorator progress bar - """ - with multiprocess.Pool(nthreads) as p: - results = list( - decorator( - p.imap( - lambda x: self.tube_log_reliability( - x, material, receiver, time - ), - receiver.tubes, - ), - receiver.ntubes, - ) - ) - - p_tube = np.array([res[0] for res in results]) - tube_fields = [res[1] for res in results] - - # Tube reliability is the minimum of all the time steps - tube = np.min(p_tube, axis=1) - - # Overall reliability is the minimum of the sum - overall = np.min(np.sum(p_tube, axis=0)) - - # Add the field to the tubes - for tubei, field in zip(receiver.tubes, tube_fields): - tubei.add_quadrature_results("log_reliability", field) - - # Convert back from log-prob as we go - return { - "tube_reliability": np.exp(tube), - "overall_reliability": np.exp(overall), - } - - def tube_log_reliability(self, tube, material, receiver, time): - """ - Calculate the log reliability of a single tube - """ - volumes = tube.element_volumes() - - stresses = np.transpose( - np.mean( - np.stack( - ( - tube.quadrature_results["stress_xx"], - tube.quadrature_results["stress_yy"], - tube.quadrature_results["stress_zz"], - tube.quadrature_results["stress_yz"], - tube.quadrature_results["stress_xz"], - tube.quadrature_results["stress_xy"], - ) - ), - axis=-1, - ), - axes=(1, 2, 0), - ) - - temperatures = np.mean(tube.quadrature_results["temperature"], axis=-1) - - # Figure out the number of repetitions of the load cycle - if receiver.days != 1: - raise RuntimeError( - "Time dependent reliability requires the load cycle be a single, representative cycle" - ) - - # Do it this way so we can vectorize - inc_prob = self.calculate_element_log_reliability( - tube.times, stresses, temperatures, volumes, material, time - ) - - # CARES/LIFE cutoff - if self.cares_cutoff: - pstress = self.calculate_principal_stress(stresses).reshape(-1, 3) - pmax = np.max(pstress, axis=1) - pmin = np.min(pstress, axis=1) - remove = np.abs(pmin / (pmax + 1.0e-16)) > 3.0 - mod_prob = inc_prob.flatten() - mod_prob[remove] = 0.0 - inc_prob = mod_prob.reshape(inc_prob.shape) - - # Return the sums as a function of time along with the field itself - return np.sum(inc_prob, axis=1), np.transpose( - np.stack((inc_prob, inc_prob)), axes=(1, 2, 0) - ) - - -class CrackShapeIndependent(WeibullFailureModel): - """ - Parent class for crack shape independent models - which include only PIA and WNTSA models - - Determines normal stress acting on crack - """ - - def __init__(self, pset, *args, **kwargs): - """ - Create a mesh grid of angles that can represent crack orientations - Evaluate direction cosines using the angles - - Default values given to nalpha and nbeta which are the number of - segments in the mesh grid - """ - super().__init__(pset, *args, **kwargs) - - # limits and number of segments for angles - self.nalpha = pset.get_default("nalpha", 21) - self.nbeta = pset.get_default("nbeta", 31) - - # Mesh grid of the vectorized angle values - self.A, self.B = np.meshgrid( - np.linspace(0, np.pi, self.nalpha), - np.linspace(0, 2 * np.pi, self.nbeta, endpoint=False), - indexing="ij", - ) - - # Increment of angles to be used in evaluating integral - self.dalpha = (self.A[-1, -1] - self.A[0, 0]) / (self.nalpha - 1) - self.dbeta = (self.B[-1, -1] - self.B[0, 0]) / (self.nbeta - 1) - - # Direction cosines - self.l = np.cos(self.A) - self.m = np.sin(self.A) * np.cos(self.B) - self.n = np.sin(self.A) * np.sin(self.B) - - def calculate_normal_stress(self, mandel_stress): - """ - Use direction cosines to calculate the normal stress to - a crack given the Mandel vector - """ - # Principal stresses - pstress = self.calculate_principal_stress(mandel_stress) - - # Normal stress - return ( - pstress[..., 0, None, None] * (self.l**2) - + pstress[..., 1, None, None] * (self.m**2) - + pstress[..., 2, None, None] * (self.n**2) - ) - - -class CrackShapeDependent(WeibullFailureModel): - """ - Parent class for crack shape dependent models - - Determines normal, shear, total and equivanlent stresses acting on cracks - - Calculates the element reliability using the equivalent stress from the - crack shape dependent models - """ - - def __init__(self, pset, *args, **kwargs): - """ - Create a mesh grid of angles that can represent crack orientations - Evaluate direction cosines using the angles - - Default values given to nalpha and nbeta which are the number of - segments in the mesh grid - """ - super().__init__(pset, *args, **kwargs) - - # limits and number of segments for angles - self.nalpha = pset.get_default("nalpha", 121) - self.nbeta = pset.get_default("nbeta", 121) - - # Mesh grid of the vectorized angle values - self.A, self.B = np.meshgrid( - np.linspace(0, np.pi / 2, self.nalpha), - np.linspace(0, np.pi / 2, self.nbeta), - indexing="ij", - ) - - # Increment of angles to be used in evaluating integral - self.dalpha = (self.A[-1, -1] - self.A[0, 0]) / (self.nalpha - 1) - self.dbeta = (self.B[-1, -1] - self.B[0, 0]) / (self.nbeta - 1) - - # Direction cosines - self.l = np.cos(self.A) - self.m = np.sin(self.A) * np.cos(self.B) - self.n = np.sin(self.A) * np.sin(self.B) - - def calculate_normal_stress(self, mandel_stress): - """ - Use direction cosines to calculate the normal stress to - a crack given the Mandel vector - """ - # Principal stresses - pstress = self.calculate_principal_stress(mandel_stress) - - # Normal stress - return ( - pstress[..., 0, None, None] * (self.l**2) - + pstress[..., 1, None, None] * (self.m**2) - + pstress[..., 2, None, None] * (self.n**2) - ) - - def calculate_total_stress(self, mandel_stress): - """ - Calculate the total stress given the Mandel vector - """ - # Principal stresses - pstress = self.calculate_principal_stress(mandel_stress) - - # Total stress - return np.sqrt( - ((pstress[..., 0, None, None] * self.l) ** 2) - + ((pstress[..., 1, None, None] * self.m) ** 2) - + ((pstress[..., 2, None, None] * self.n) ** 2) - ) - - def calculate_shear_stress(self, mandel_stress): - """ - Calculate the shear stress given the normal and total stress - """ - # Normal stress - sigma_n = self.calculate_normal_stress(mandel_stress) - - # Total stress - sigma = self.calculate_total_stress(mandel_stress) - - # Shear stress - with np.errstate(invalid="ignore"): - return np.sqrt(sigma**2 - sigma_n**2) - - def calculate_flattened_eq_stress( - self, - time, - mandel_stress, - temperatures, - material, - tot_time, - A, - dalpha, - dbeta, - ): - """ - Calculate the integral of equivalent stresses given the material - properties and integration limits - - Parameters: - mandel_stress: element stresses in Mandel convention - temperatures: element temperatures - material material model to use - - Additional Parameters: - A: mesh grid of vectorized angle values - dalpha: increment of angle alpha to be used in evaluating integral - dbeta: increment of angle beta to be used in evaluating integral - """ - - # Principal stresses - pstress = self.calculate_principal_stress(mandel_stress) - - # Material parameters - self.temperatures = temperatures - self.material = material - self.mandel_stress = mandel_stress - self.mvals = material.modulus(temperatures) - Nv = material.Nv(temperatures) - Bv = material.Bv(temperatures) - - # Use temperature average values? - mavg = np.mean(self.mvals, axis=0) - - # Projected equivalent stresses - sigma_e = self.calculate_eq_stress( - mandel_stress, self.temperatures, self.material - ) - - # Max principal stresss over all time steps for each element - sigma_e_max = np.max(sigma_e, axis=0) - - # Suppressing warning given when negative numbers are raised to rational numbers - # Defining time based on period of one cycle and number of time steps - # Calculate g using an integration method - if np.all(time == 0): - sigma_e_0 = sigma_e - else: - with np.errstate(invalid="ignore"): - g = ( - np.trapz((sigma_e / sigma_e_max + 1.0e-14) ** Nv, time, axis=0) - / time[-1] - ) - # Defining tf or tot_time as nf * period - print("service time =", tot_time) - # Time dependent equivalent stress - sigma_e_0 = ( - (((sigma_e_max**Nv) * g * tot_time) / Bv) + (sigma_e_max ** (Nv - 2)) - ) ** (1 / (Nv - 2)) - - # Suppressing warning given when negative numbers are raised to rational numbers - with np.errstate(invalid="ignore"): - # Defining area integral element wise - integral = ( - (sigma_e_0 ** mavg[..., None, None]) - * np.sin(self.A) - * self.dalpha - * self.dbeta - ) - - # Flatten the last axis and calculate the mean of the positive values along that axis - # slicing the shape of integral and reshaping it with a new size (to flatten) based on the last size element of integral - # if pstress.ndim == 2: - # flat = integral.reshape(-1,) - # elif pstress.ndim == 3: - flat = integral.reshape(integral.shape[:-2] + (-1,)) - - # Suppressing warning to ignoring initial NaN values - with np.errstate(invalid="ignore"): - # Summing over area integral elements ignoring NaN values - flat = np.nansum(flat, axis=-1) - return flat - - def calculate_element_log_reliability( - self, time, mandel_stress, temperatures, volumes, material, tot_time - ): - """ - Calculate the element log reliability given the equivalent stress - - Parameters: - mandel_stress: element stresses in Mandel convention - temperatures: element temperatures - volumes: element volumes - material: material model object with required data - """ - self.temperatures = temperatures - self.material = material - self.mandel_stress = mandel_stress - - # Principal stresses - # pstress = self.calculate_principal_stress(mandel_stress) - - # Material parameters - svals = material.strength(temperatures) - mvals = material.modulus(temperatures) - kvals = svals ** (-mvals) - - # Use temperature average values? - mavg = np.mean(mvals, axis=0) - kavg = np.mean(kvals, axis=0) - - shear_sensitive = False - - if shear_sensitive == True: - kbar = self.calculate_kbar( - self.temperatures, self.material, self.A, self.dalpha, self.dbeta - ) - else: - kbar = 2 * mavg + 1 - - kpvals = kbar * kavg - - # For shear-insensitive case - # kpvals = (2 * mvals + 1) * kvals - - # For CSE model - # kpvals = kbar * kvals - - # For hear sensitive case - # kpvals = (2.99) * kvals - - # Equivalent stress raied to exponent mv - flat = ( - self.calculate_flattened_eq_stress( - time, - mandel_stress, - self.temperatures, - self.material, - tot_time, - self.A, - self.dalpha, - self.dbeta, - ) - ) ** (1 / mavg) - - return -(2 * kpvals / np.pi) * (flat**mavg) * volumes - - -class PIAModel(CrackShapeIndependent): - """ - Principal of independent action failure model - - Calculates reliability using only tensile stresses - that are assumed to act independently on cracks - """ - - def calculate_element_log_reliability( - self, time, mandel_stress, temperatures, volumes, material, tot_time - ): - """ - Calculate the element log reliability - - Parameters: - time: time for each stress/temperature - mandel_stress: element stresses in Mandel convention - temperatures: element temperatures - volumes: element volumes - material: material model object with required data that includes - Weibull scale parameter (svals) and Weibull modulus (mvals) - tot_time: total time at which to calculate reliability - """ - - # Principal stresses - pstress = self.calculate_principal_stress(mandel_stress) - - # Material parameters - svals = material.strength(temperatures) - mvals = material.modulus(temperatures) - kvals = svals ** (-mvals) - Nv = material.Nv(temperatures) - Bv = material.Bv(temperatures) - - # Only tension - pstress[pstress < 0] = 0 - - # Max principal stresss over all time steps for each element - pstress_max = np.max(pstress, axis=0) - - # g - if np.all(time == 0): - g = 0 - pstress_0 = pstress - else: - g = ( - np.trapz((pstress / (pstress_max + 1.0e-14)) ** Nv, time, axis=0) - / time[-1] - ) - # Defining tf - print("service time =", tot_time) - # Time dependent principal stress - pstress_0 = ( - (pstress_max**Nv * g * tot_time) / Bv + (pstress_max ** (Nv - 2)) - ) ** (1 / (Nv - 2)) - - # Use temperature average values? - mavg = np.mean(mvals, axis=0) - kavg = np.mean(kvals, axis=0) - - return -kavg * np.sum(pstress_0 ** mavg[..., None], axis=-1) * volumes - - -class WNTSAModel(CrackShapeIndependent): - """ - Weibull normal tensile average failure model - - Evaluates an average normal tensile stress (acting on the cracks) integrated over the - area of a sphere, and uses it to calculate the element reliability - """ - - def calculate_avg_normal_stress( - self, time, mandel_stress, temperatures, material, tot_time - ): - """ - Calculate the average normal tensile stresses from the pricipal stresses - - Parameters: - mandel_stress: element stresses in Mandel convention - temperatures: element temperatures - material: material model object with required data - """ - # Principal stresses - pstress = self.calculate_principal_stress(mandel_stress) - - # mvals = material.modulus(temperatures)[: pstress.shape[1]] - # Material parameters - self.temperatures = temperatures - self.material = material - self.mandel_stress = mandel_stress - - mvals = material.modulus(temperatures) - Nv = material.Nv(temperatures) - Bv = material.Bv(temperatures) - - # Use temperature average values? - mavg = np.mean(mvals, axis=0) - - # Time dependent Normal stress - sigma_n = self.calculate_normal_stress(mandel_stress) - - # Considering only tensile stresses - sigma_n[sigma_n < 0] = 0 - - # Max normal stresss over all time steps for each element - sigma_n_max = np.max(sigma_n, axis=0) - - # Defining time based on period of one cycle and number of time steps - # Calculate g using an integration method - if np.all(time == 0): - sigma_n_0 = sigma_n - else: - g = ( - np.trapz((sigma_n / (sigma_n_max + 1.0e-14)) ** Nv, time, axis=0) - / time[-1] - ) - # Defining tot_time as nf * period - print("service time =", tot_time) - # Time dependent equivalent stress - sigma_n_0 = ( - (((sigma_n_max**Nv) * g * tot_time) / Bv) + (sigma_n_max ** (Nv - 2)) - ) ** (1 / (Nv - 2)) - - with np.errstate(invalid="ignore"): - integral = ( - (sigma_n_0 ** mavg[..., None, None]) - * np.sin(self.A) - * self.dalpha - * self.dbeta - ) / (4 * np.pi) - - # Flatten the last axis and calculate the mean of the positive values along that axis - # slicing the shape of integral and reshaping it with a new size (to flatten) based on the last size element of integral - # if pstress.ndim == 2: - # flat = integral.reshape(-1,) - # elif pstress.ndim == 3: - flat = integral.reshape(integral.shape[:-2] + (-1,)) - - # Suppressing warning to ignoring initial NaN values - with np.errstate(invalid="ignore"): - # Average stress - return np.nansum(np.where(flat >= 0.0, flat, np.nan), axis=-1) - - def calculate_element_log_reliability( - self, time, mandel_stress, temperatures, volumes, material, tot_time - ): - """ - Calculate the element log reliability - - Parameters: - mandel_stress: element stresses in Mandel convention - temperatures: element temperatures - volumes: element volumes - material: material model object with required data that includes - Weibull scale parameter (svals) and Weibull modulus (mvals) - tot_time: total time at which to calculate reliability - """ - self.temperatures = temperatures - self.material = material - self.mandel_stress = mandel_stress - - # Material parameters - svals = material.strength(temperatures) - mvals = material.modulus(temperatures) - kvals = svals ** (-mvals) - - # Use temperature average values? - mavg = np.mean(mvals, axis=0) - kavg = np.mean(kvals, axis=0) - - kpvals = (2 * mavg + 1) * kavg - - Nv = material.Nv(temperatures) - Bv = material.Bv(temperatures) - - # Average normal tensile stress raied to exponent mv - avg_nstress = ( - self.calculate_avg_normal_stress( - time, - mandel_stress, - self.temperatures, - self.material, - tot_time, - ) - ) ** (1 / mavg) - - return -kpvals * (avg_nstress**mavg) * volumes - - -class MTSModelGriffithFlaw(CrackShapeDependent): - """ - Maximum tensile stess failure model with a Griffith flaw - - Evaluates an equivalent stress (acting on the cracks) using the normal and - shear stresses in the maximum tensile stress fracture criterion for a Griffith flaw - """ - - def calculate_eq_stress(self, mandel_stress, temperatures, material): - """ - Calculate the equivalent stresses from the normal and shear stresses - """ - # Normal stress - sigma_n = self.calculate_normal_stress(mandel_stress) - - # Shear stress - tau = self.calculate_shear_stress(mandel_stress) - - # Projected equivalent stress - return 0.5 * (sigma_n + np.sqrt((sigma_n**2) + (tau**2))) - - def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): - """ - Calculate the kbar from the Weibull modulus and material parameters - """ - - self.temperatures = temperatures - self.material = material - - # Weibull modulus - mvals = self.material.modulus(temperatures) - - # Use temperature average values? - mavg = np.mean(mvals, axis=0) - - # Material parameters - nu = np.mean(material.nu(temperatures), axis=0) - cbar = np.mean(material.c_bar(temperatures), axis=0) - - # Calculating kbar - with np.errstate(invalid="ignore"): - integral2 = 2 * ( - ( - ( - 0.5 - * ( - ((np.cos(self.A)) ** 2) - + np.sqrt( - ((np.cos(self.A)) ** 4) - + (((np.sin(self.A)) ** 2) * ((np.cos(self.A)) ** 2)) - ) - ) - ) - ** mavg[..., None, None] - ) - * np.sin(self.A) - * self.dalpha - * self.dbeta - ) - kbar = np.pi / np.sum(integral2, axis=(1, 2)) - - return kbar - - -class MTSModelPennyShapedFlaw(CrackShapeDependent): - """ - Maximum tensile stess failure model with a penny shaped flaw - - Evaluates an equivalent stress (acting on the cracks) using the normal and - shear stresses in the maximum tensile stress fracture criterion for a penny shaped flaw - """ - - def calculate_eq_stress(self, mandel_stress, temperatures, material): - """ - Calculate the average normal tensile stresses from the normal and shear stresses - - Additional parameter: - nu: Poisson ratio - """ - - # Material parameters - nu = np.mean(material.nu(temperatures), axis=0) - - # Normal stress - sigma_n = self.calculate_normal_stress(mandel_stress) - - # Shear stress - tau = self.calculate_shear_stress(mandel_stress) - - # Projected equivalent stress - return 0.5 * ( - sigma_n - + np.sqrt((sigma_n**2) + ((tau / (1 - (0.5 * nu[..., None, None]))) ** 2)) - ) - - def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): - """ - Calculate the kbar from the Weibull modulus and material parameters - """ - - self.temperatures = temperatures - self.material = material - - # Weibull modulus - mvals = self.material.modulus(temperatures) - - # Use temperature average values? - mavg = np.mean(mvals, axis=0) - - # Material parameters - nu = np.mean(material.nu(temperatures), axis=0) - cbar = np.mean(material.c_bar(temperatures), axis=0) - - # Calculating kbar - with np.errstate(invalid="ignore"): - integral2 = 2 * ( - ( - ( - 0.5 - * ( - ((np.cos(self.A)) ** 2) - + np.sqrt( - ((np.cos(self.A)) ** 4) - + ( - ((np.sin(2 * self.A)) ** 2) - / (2 - (nu[..., None, None] ** 2)) - ) - ) - ) - ) - ** mavg[..., None, None] - ) - * np.sin(self.A) - * self.dalpha - * self.dbeta - ) - kbar = np.pi / np.sum(integral2, axis=(1, 2)) - - return kbar - - -class CSEModelGriffithFlaw(CrackShapeDependent): - """ - Coplanar strain energy failure model with a Griffith flaw - - Evaluates an equivalent stress (acting on the cracks) using the normal and - shear stresses in the coplanar strain energy fracture criterion - for a Griffith flaw - """ - - def calculate_eq_stress(self, mandel_stress, temperatures, material): - """ - Calculate the equivalent stresses from the normal and shear stresses - """ - # Normal stress - sigma_n = self.calculate_normal_stress(mandel_stress) - - # Shear stress - tau = self.calculate_shear_stress(mandel_stress) - - # Projected equivalent stress - return np.sqrt((sigma_n**2) + (tau**2)) - - def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): - """ - Calculate the kbar from the Weibull modulus and material parameters - """ - - self.temperatures = temperatures - self.material = material - - # Weibull modulus - mvals = self.material.modulus(temperatures) - - # Use temperature average values? - mavg = np.mean(mvals, axis=0) - - # Material parameters - nu = np.mean(material.nu(temperatures), axis=0) - cbar = np.mean(material.c_bar(temperatures), axis=0) - - # Calculating kbar - with np.errstate(invalid="ignore"): - integral2 = 2 * ( - ((np.cos(self.A)) ** mavg[..., None, None]) - * np.sin(self.A) - * self.dalpha - * self.dbeta - ) - kbar = np.pi / np.sum(integral2, axis=(1, 2)) - - return kbar - - -class CSEModelPennyShapedFlaw(CrackShapeDependent): - """ - Coplanar strain energy failure model with a penny shaped flaw - - Evaluates an equivalent stress (acting on the cracks) using the normal and - shear stresses in the coplanar strain energy fracture criterion - for a penny shaped flaw - """ - - def calculate_eq_stress(self, mandel_stress, temperatures, material): - """ - Calculate the equivalent stresses from the normal and shear stresses - - Additional parameter: - nu: Poisson ratio - """ - - # Material parameters - nu = np.mean(material.nu(temperatures), axis=0) - - # Normal stress - sigma_n = self.calculate_normal_stress(mandel_stress) - - # Shear stress - tau = self.calculate_shear_stress(mandel_stress) - - # Projected equivalent stress - return np.sqrt((sigma_n**2) + (tau / (1 - (0.5 * nu[..., None, None]))) ** 2) - - def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): - """ - Calculate the kbar from the Weibull modulus and material parameters - """ - - self.temperatures = temperatures - self.material = material - - # Weibull modulus - mvals = self.material.modulus(temperatures) - - # Use temperature average values? - mavg = np.mean(mvals, axis=0) - - # Material parameters - nu = np.mean(material.nu(temperatures), axis=0) - cbar = np.mean(material.c_bar(temperatures), axis=0) - - # Calculating kbar - with np.errstate(invalid="ignore"): - integral2 = 2 * ( - ( - ( - np.sqrt( - ((np.cos(self.A)) ** 4) - + ( - ((np.sin(2 * self.A)) ** 2) - / ((2 - nu[..., None, None]) ** 2) - ) - ) - ) - ** mavg[..., None, None] - ) - * np.sin(self.A) - * self.dalpha - * self.dbeta - ) - kbar = np.pi / np.sum(integral2, axis=(1, 2)) - - return kbar - - -class SMMModelGriffithFlaw(CrackShapeDependent): - """ - Shetty mixed-mod failure model with a Griffith flaw - - Evaluates an equivalent stress (acting on the cracks) using the normal and - shear stresses in the Shetty mixed-mode fracture criterion - for a Griffith flaw - """ - - def calculate_eq_stress(self, mandel_stress, temperatures, material): - """ - Calculate the equivalent stresses from the normal and shear stresses - - Additional parameters: - cbar: Emperical constant - """ - - # Material parameters - cbar = np.mean(material.c_bar(temperatures), axis=0) - - # Normal stress - sigma_n = self.calculate_normal_stress(mandel_stress) - - # Shear stress - tau = self.calculate_shear_stress(mandel_stress) - - # Projected equivalent stress - return 0.5 * ( - sigma_n + np.sqrt((sigma_n**2) + ((2 * tau / cbar[..., None, None]) ** 2)) - ) - - def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): - """ - Calculate the kbar from the Weibull modulus and material parameters - """ - - self.temperatures = temperatures - self.material = material - - # Weibull modulus - mvals = self.material.modulus(temperatures) - - # Use temperature average values? - mavg = np.mean(mvals, axis=0) - - # Material parameters - nu = np.mean(material.nu(temperatures), axis=0) - cbar = np.mean(material.c_bar(temperatures), axis=0) - - # Calculating kbar - with np.errstate(invalid="ignore"): - integral2 = 2 * ( - ( - ( - 0.5 - * ( - ((np.cos(self.A)) ** 2) - + np.sqrt( - ((np.cos(self.A)) ** 4) - + ( - ((np.sin(2 * self.A)) ** 2) - / (cbar[..., None, None] ** 2) - ) - ) - ) - ) - ** mavg[..., None, None] - ) - * np.sin(self.A) - * self.dalpha - * self.dbeta - ) - kbar = np.pi / np.sum(integral2, axis=(1, 2)) - - return kbar - - -class SMMModelPennyShapedFlaw(CrackShapeDependent): - """ - Shetty mixed mode failure model with a penny shaped flaw - - Evaluates an equivalent stress (acting on the cracks) using the normal and - shear stresses in the Shetty mixed-mode fracture criterion - for a Griffith flaw - """ - - def calculate_eq_stress(self, mandel_stress, temperatures, material): - """ - Calculate the equivalent stresses from the normal and shear stresses - - Additional parameters: - nu: Poisson ratio - cbar: Emperical constant - """ - - # Material parameters - nu = np.mean(material.nu(temperatures), axis=0) - cbar = np.mean(material.c_bar(temperatures), axis=0) - - # Normal stress - sigma_n = self.calculate_normal_stress(mandel_stress) - - # Shear stress - tau = self.calculate_shear_stress(mandel_stress) - - # Projected equivalent stress - return 0.5 * ( - sigma_n - + np.sqrt( - (sigma_n**2) - + ((4 * tau / (cbar[..., None, None] * (2 - nu[..., None, None]))) ** 2) - ) - ) - - def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): - """ - Calculate the kbar from the Weibull modulus and material parameters - """ - - self.temperatures = temperatures - self.material = material - - # Weibull modulus - mvals = self.material.modulus(temperatures) - - # Use temperature average values? - mavg = np.mean(mvals, axis=0) - - # Material parameters - nu = np.mean(material.nu(temperatures), axis=0) - cbar = np.mean(material.c_bar(temperatures), axis=0) - - # Calculating kbar - with np.errstate(invalid="ignore"): - integral2 = 2 * ( - ( - ( - 0.5 - * ( - ((np.cos(self.A)) ** 2) - + np.sqrt( - ((np.cos(self.A)) ** 4) - + ( - (4 * ((np.sin(2 * self.A)) ** 2)) - / ( - (cbar[..., None, None] ** 2) - * ((nu[..., None, None] - 2) ** 2) - ) - ) - ) - ) - ) - ** mavg[..., None, None] - ) - * np.sin(self.A) - * self.dalpha - * self.dbeta - ) - kbar = np.pi / np.sum(integral2, axis=(1, 2)) - - return kbar - - -class DamageCalculator: - """ - Parent class for all damage calculators, handling common iteration - and scaling options - """ - - def __init__(self, pset): - """ - Parameters: - pset: damage parameters - """ - self.extrapolate = pset.get_default("extrapolate", "lump") - self.order = pset.get_default("order", 1) - - def single_cycles(self, tube, material, receiver): - """ - Calculate damage for a single tube - - Parameters: - tube: fully-populated tube object - material: damage material - receiver: receiver object (for metadata) - """ - raise NotImplementedError("Superclass not implemented") - - def determine_life(self, receiver, material, nthreads=1, decorator=lambda x, n: x): - """ - Determine the life of the receiver by calculating individual - material point damage and finding the minimum of all points. - - Parameters: - receiver fully-solved receiver object - material material model ot use - - Additional Parameters: - nthreads number of threads - decorator progress bar - """ - # pylint: disable=no-member - with multiprocess.Pool(nthreads) as p: - Ns = list( - decorator( - p.imap( - lambda x: self.single_cycles(x, material, receiver), - receiver.tubes, - ), - receiver.ntubes, - ) - ) - N = min(Ns) - - # Results come out as days - return N - - def make_extrapolate(self, D): - """ - Return a damage extrapolation function based on self.extrapolate - giving the damage for the nth cycle - - Parameters: - D: raw, per cycle damage - """ - if self.extrapolate == "lump": - return lambda N, D=D: N * np.sum(D) / len(D) - elif self.extrapolate == "last": - - def Dfn(N, D=D): - N = int(N) - if N < len(D) - 1: - return np.sum(D[:N]) - else: - return np.sum(D[:-1]) + D[-1] * N - - return Dfn - elif self.extrapolate == "poly": - p = np.polyfit(np.array(list(range(len(D)))) + 1, D, self.order) - return lambda N, p=p: np.polyval(p, N) - else: - raise ValueError( - "Unknown damage extrapolation approach %s!" % self.extrapolate - ) - - -class TimeFractionInteractionDamage(DamageCalculator): - """ - Calculate life using the ASME time-fraction type approach - """ - - def single_cycles(self, tube, material, receiver): - """ - Calculate the single-tube number of repetitions to failure - - Parameters: - tube single tube with full results - material damage material model - receiver receiver, for metadata - """ - # Material point cycle creep damage - Dc = self.creep_damage(tube, material, receiver) - - # Material point cycle fatigue damage - Df = self.fatigue_damage(tube, material, receiver) - - nc = receiver.days - - # This is going to be expensive, but I don't see much way around it - return min( - self.calculate_max_cycles( - self.make_extrapolate(c), self.make_extrapolate(f), material - ) - for c, f in zip(Dc.reshape(nc, -1).T, Df.reshape(nc, -1).T) - ) - - def calculate_max_cycles(self, Dc, Df, material, rep_min=1, rep_max=1e6): - """ - Actually calculate the maximum number of repetitions for a single point - - Parameters: - Dc creep damage per simulated cycle - Df fatigue damage per simulated cycle - material damaged material properties - """ - if not material.inside_envelope("cfinteraction", Df(rep_min), Dc(rep_min)): - return 0 - - if material.inside_envelope("cfinteraction", Df(rep_max), Dc(rep_max)): - return np.inf - - return opt.brentq( - lambda N: material.inside_envelope("cfinteraction", Df(N), Dc(N)) - 0.5, - rep_min, - rep_max, - ) - - def creep_damage(self, tube, material, receiver): - """ - Calculate creep damage at each material point - - Parameters: - tube single tube with full results - material damage material model - receiver receiver, for metadata - """ - # For now just use the von Mises effective stress - vm = np.sqrt( - ( - ( - tube.quadrature_results["stress_xx"] - - tube.quadrature_results["stress_yy"] - ) - ** 2.0 - + ( - tube.quadrature_results["stress_yy"] - - tube.quadrature_results["stress_zz"] - ) - ** 2.0 - + ( - tube.quadrature_results["stress_zz"] - - tube.quadrature_results["stress_xx"] - ) - ** 2.0 - + 6.0 - * ( - tube.quadrature_results["stress_xy"] ** 2.0 - + tube.quadrature_results["stress_yz"] ** 2.0 - + tube.quadrature_results["stress_xz"] ** 2.0 - ) - ) - / 2.0 - ) - - tR = material.time_to_rupture( - "averageRupture", tube.quadrature_results["temperature"], vm - ) - dts = np.diff(tube.times) - time_dmg = dts[:, np.newaxis, np.newaxis] / tR[1:] - - # Break out to cycle damage - inds = self.id_cycles(tube, receiver) - - cycle_dmg = np.array( - [ - np.sum(time_dmg[inds[i] : inds[i + 1]], axis=0) - for i in range(receiver.days) - ] - ) - - return cycle_dmg - - def fatigue_damage(self, tube, material, receiver): - """ - Calculate fatigue damage at each material point - - Parameters: - tube single tube with full results - material damage material model - receiver receiver, for metadata - """ - # Identify cycle boundaries - inds = self.id_cycles(tube, receiver) - - # Run through each cycle and ID max strain range and fatigue damage - strain_names = [ - "mechanical_strain_xx", - "mechanical_strain_yy", - "mechanical_strain_zz", - "mechanical_strain_yz", - "mechanical_strain_xz", - "mechanical_strain_xy", - ] - strain_factors = [1.0, 1.0, 1.0, 2.0, 2.0, 2.0] - - cycle_dmg = np.array( - [ - self.cycle_fatigue( - np.array( - [ - ef * tube.quadrature_results[en][inds[i] : inds[i + 1]] - for en, ef in zip(strain_names, strain_factors) - ] - ), - tube.quadrature_results["temperature"][inds[i] : inds[i + 1]], - material, - ) - for i in range(receiver.days) - ] - ) - - return cycle_dmg - - def id_cycles(self, tube, receiver): - """ - Helper to separate out individual cycles by index - - Parameters: - tube single tube with results - receiver receiver, for metadata - """ - tm = np.mod(tube.times, receiver.period) - inds = list(np.where(tm == 0)[0]) - if len(inds) != (receiver.days + 1): - raise ValueError( - "Tube times not compatible with the receiver" - " number of days and cycle period!" - ) - - return inds - - def cycle_fatigue(self, strains, temperatures, material, nu=0.5): - """ - Calculate fatigue damage for a single cycle - - Parameters: - strains single cycle strains - temperatures single cycle temperatures - material damage model - - Additional parameters: - nu effective Poisson's ratio to use - """ - pt_temps = np.max(temperatures, axis=0) - - pt_eranges = np.zeros(pt_temps.shape) - - nt = strains.shape[1] - for i in range(nt): - for j in range(nt): - de = strains[:, j] - strains[:, i] - eq = ( - np.sqrt(2) - / (2 * (1 + nu)) - * np.sqrt( - (de[0] - de[1]) ** 2 - + (de[1] - de[2]) ** 2 - + (de[2] - de[0]) ** 2.0 - + 3.0 / 2.0 * (de[3] ** 2.0 + de[4] ** 2.0 + de[5] ** 2.0) - ) - ) - pt_eranges = np.maximum(pt_eranges, eq) - - dmg = np.zeros(pt_eranges.shape) - # pylint: disable=not-an-iterable - for ind in np.ndindex(*dmg.shape): - dmg[ind] = 1.0 / material.cycles_to_fail( - "nominalFatigue", pt_temps[ind], pt_eranges[ind] - ) - - return dmg diff --git a/srlife/data/damage/SiC.xml b/srlife/data/damage/SiC.xml index 3b7cfab..efa6556 100644 --- a/srlife/data/damage/SiC.xml +++ b/srlife/data/damage/SiC.xml @@ -14,4 +14,24 @@ 30 320 + + + 298.15 811.15 1089.15 1366.15 + 552.94 552.94 552.94 552.94 + + + 298.15 811.15 1089.15 1366.15 + 8.6 8.6 8.6 8.6 + + 0.82 + 0.16 + + 298.15 811.15 1089.15 1366.15 + 56 56 47 38 + + + 298.15 811.15 1089.15 1366.15 + 1275 1275 1850 520 + + diff --git a/srlife/data/deformation/SiC.xml b/srlife/data/deformation/SiC.xml index 4b05eed..2e4d2c2 100644 --- a/srlife/data/deformation/SiC.xml +++ b/srlife/data/deformation/SiC.xml @@ -15,4 +15,19 @@ 4.619e-06 4.619e-06 4.619e-06 5.139e-06 5.359e-06 5.465e-06 5.541e-06 5.622e-06 5.719e-06 5.834e-06 5.963e-06 6.104e-06 6.253e-06 6.408e-06 6.566e-06 + + + + 293 473 673 873 1073 1273 1473 1673 1773 + 433000 429800 426200 422600 419000 415400 411800 408000 406400 + + youngs + 0.16 + poissons + + + 293 473 673 873 1073 1273 1473 1673 1773 + 3.05 3.05 3.03 3.02 3.02 3.04 3.11 3.25 3.35 + + diff --git a/srlife/materials.py b/srlife/materials.py index 4755430..0b9679e 100644 --- a/srlife/materials.py +++ b/srlife/materials.py @@ -766,19 +766,19 @@ def Nv(self, T): """ Fatigue exponent parameter as a function of temperature """ - # if np.isscalar(T): - return self.Nv_val - # else: - # return self.Nv_val * np.ones(T.shape) + if np.isscalar(T): + return self.Nv_val + else: + return self.Nv_val * np.ones(T.shape) def Bv(self, T): """ Fatigue parameter as a function of temperature """ - # if np.isscalar(T): - return self.Bv_val - # else: - # return self.Bv_val * np.ones(T.shape) + if np.isscalar(T): + return self.Bv_val + else: + return self.Bv_val * np.ones(T.shape) @classmethod def load(cls, node): diff --git a/test/test_ceramic_damage_CARES_static.py b/test/test_ceramic_damage_CARES_static.py index c219885..e9a05ad 100644 --- a/test/test_ceramic_damage_CARES_static.py +++ b/test/test_ceramic_damage_CARES_static.py @@ -137,7 +137,7 @@ def setUp(self): self.temperatures = np.ones((data.shape[0], 8)) # Number of cycles to failure - self.nf = 0 + self.nf = 100000 self.period = 0.01 self.time = np.linspace(0, self.period, self.stress.shape[0]) @@ -293,7 +293,7 @@ def setUp(self): self.temperatures = np.ones((data.shape[0], 8)) # Number of cycles to failure - self.nf = 100000 + self.nf = 0 self.period = 0.01 self.time = np.linspace(0, self.period, self.stress.shape[0]) @@ -450,7 +450,7 @@ def setUp(self): self.temperatures = np.ones((data.shape[0], 8)) # Number of cycles to failure - self.nf = 0 + self.nf = 1 self.period = 0.01 self.time = np.linspace(0, self.period, self.stress.shape[0]) @@ -529,7 +529,7 @@ def setUp(self): self.temperatures = np.ones((data.shape[0], 8)) # Number of cycles to failure - self.nf = 100 + self.nf = 1 self.period = 0.01 self.time = np.linspace(0, self.period, self.stress.shape[0]) @@ -605,7 +605,7 @@ def setUp(self): self.temperatures = np.ones((data.shape[0], 8)) # Number of cycles to failure - self.nf = 100 + self.nf = 1 self.period = 0.01 self.time = np.linspace(0, self.period, self.stress.shape[0]) From 1412db6a352d86a25bfb03f42036f75770b84c49 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Tue, 4 Apr 2023 16:42:04 -0500 Subject: [PATCH 31/71] updating files for temperature dep fatigue parameters 2 --- srlife/data/deformation/SiC.xml | 2 +- srlife/managers.py | 2 +- srlife/materials.py | 16 ++++++---------- srlife/solvers.py | 1 + 4 files changed, 9 insertions(+), 12 deletions(-) diff --git a/srlife/data/deformation/SiC.xml b/srlife/data/deformation/SiC.xml index 2e4d2c2..ca7e9b5 100644 --- a/srlife/data/deformation/SiC.xml +++ b/srlife/data/deformation/SiC.xml @@ -27,7 +27,7 @@ 293 473 673 873 1073 1273 1473 1673 1773 - 3.05 3.05 3.03 3.02 3.02 3.04 3.11 3.25 3.35 + 3.05e-06 3.05e-06 3.03e-06 3.02e-06 3.02e-06 3.04e-06 3.11e-06 3.25e-06 3.35e-06 diff --git a/srlife/managers.py b/srlife/managers.py index f4cef07..fab3df3 100644 --- a/srlife/managers.py +++ b/srlife/managers.py @@ -142,7 +142,7 @@ def solve_reliability(self, time): The trigger for everything: solve the complete problem and report the best-estimate reliability. - + Args: time (float): time at which to report reliability diff --git a/srlife/materials.py b/srlife/materials.py index 0b9679e..aaeb802 100644 --- a/srlife/materials.py +++ b/srlife/materials.py @@ -766,19 +766,13 @@ def Nv(self, T): """ Fatigue exponent parameter as a function of temperature """ - if np.isscalar(T): - return self.Nv_val - else: - return self.Nv_val * np.ones(T.shape) + return self.Nv_val(T) def Bv(self, T): """ Fatigue parameter as a function of temperature """ - if np.isscalar(T): - return self.Bv_val - else: - return self.Bv_val * np.ones(T.shape) + return self.Bv_val(T) @classmethod def load(cls, node): @@ -806,8 +800,10 @@ def load(cls, node): np.array(list(map(float, mvals.text.strip().split()))), float(c_bar.text), float(nu.text), - float(Nv.text), - float(Bv.text), + np.array(list(map(float, Nv.text.strip().split()))), + np.array(list(map(float, Bv.text.strip().split()))), + # float(Nv.text), + # float(Bv.text), ) def save(self, fname, modelname): diff --git a/srlife/solvers.py b/srlife/solvers.py index 6e03e4d..77b9842 100644 --- a/srlife/solvers.py +++ b/srlife/solvers.py @@ -5,6 +5,7 @@ import numpy as np import numpy.linalg as la + # pylint: disable=too-many-branches def newton( RJ, From 823c0e60934636086cc303c0b3e6ca28835fa490 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Tue, 4 Apr 2023 16:46:26 -0500 Subject: [PATCH 32/71] updating files for temperature dep fatigue parameters 3 --- srlife/materials.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/srlife/materials.py b/srlife/materials.py index aaeb802..5d96df2 100644 --- a/srlife/materials.py +++ b/srlife/materials.py @@ -766,13 +766,13 @@ def Nv(self, T): """ Fatigue exponent parameter as a function of temperature """ - return self.Nv_val(T) + return self.Nv(T) def Bv(self, T): """ Fatigue parameter as a function of temperature """ - return self.Bv_val(T) + return self.Bv(T) @classmethod def load(cls, node): From aebb8afb89b610a008218979e727cef8351ea196 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Wed, 5 Apr 2023 15:21:02 -0500 Subject: [PATCH 33/71] updating files for temperature dep fatigue parameters 4 --- srlife/damage.py | 5 +---- srlife/materials.py | 24 ++++++++++++++++-------- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/srlife/damage.py b/srlife/damage.py index 7491db3..3897bcd 100644 --- a/srlife/damage.py +++ b/srlife/damage.py @@ -470,7 +470,7 @@ def calculate_element_log_reliability( kbar = 2 * mavg + 1 kpvals = kbar * kavg - + # print("kbar =", kbar) # For shear-insensitive case # kpvals = (2 * mvals + 1) * kvals @@ -699,9 +699,6 @@ def calculate_element_log_reliability( kpvals = (2 * mavg + 1) * kavg - Nv = material.Nv(temperatures) - Bv = material.Bv(temperatures) - # Average normal tensile stress raied to exponent mv avg_nstress = ( self.calculate_avg_normal_stress( diff --git a/srlife/materials.py b/srlife/materials.py index 5d96df2..90e9520 100644 --- a/srlife/materials.py +++ b/srlife/materials.py @@ -702,8 +702,8 @@ class StandardCeramicMaterial: 2) Weibull modulus depends on temperature 3) Constant c_bar parameter 4) Constant Poisson's ratio - 5) Constant fatigue exponent parameter Nv - 6) Constant faitgue parameter Bv + 5) Fatigue exponent parameter Nv depends on temperature + 6) Faitgue parameter Bv depends on temperature """ def __init__( @@ -714,8 +714,10 @@ def __init__( modulus, c_bar, nu, - Nv, - Bv, + Nv_temperatures, + Nvs, + Bv_temperatures, + Bvs, *args, **kwargs ): @@ -729,8 +731,8 @@ def __init__( self.m = inter.interp1d(m_temperatures, modulus) self.C = c_bar self.nu_val = nu - self.Nv_val = Nv - self.Bv_val = Bv + self.Nv = inter.interp1d(Nv_temperatures, Nvs) + self.Bv = inter.interp1d(Bv_temperatures, Bvs) def strength(self, T): """ @@ -791,7 +793,11 @@ def load(cls, node): mvals = m.find("values") nu = node.find("nu") Nv = node.find("Nv") + Nv_temps = Nv.find("temperatures") + Nvvals = Nv.find("values") Bv = node.find("Bv") + Bv_temps = Bv.find("temperatures") + Bvvals = Bv.find("values") return StandardCeramicMaterial( np.array(list(map(float, s_temps.text.strip().split()))), @@ -800,8 +806,10 @@ def load(cls, node): np.array(list(map(float, mvals.text.strip().split()))), float(c_bar.text), float(nu.text), - np.array(list(map(float, Nv.text.strip().split()))), - np.array(list(map(float, Bv.text.strip().split()))), + np.array(list(map(float, Nv_temps.text.strip().split()))), + np.array(list(map(float, Nvvals.text.strip().split()))), + np.array(list(map(float, Bv_temps.text.strip().split()))), + np.array(list(map(float, Bvvals.text.strip().split()))), # float(Nv.text), # float(Bv.text), ) From c45d1dafdce0c87b8b07a3b406e07e2dc70d6b93 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Tue, 2 May 2023 12:19:15 -0500 Subject: [PATCH 34/71] Updating doc strings and test files --- srlife/damage.py | 169 ++++++++++++----------- test/test_ceramic_damage_CARES_cyclic.py | 109 ++++++++------- test/test_ceramic_damage_CARES_static.py | 109 +++++++-------- test/test_materials.py | 17 ++- 4 files changed, 207 insertions(+), 197 deletions(-) diff --git a/srlife/damage.py b/srlife/damage.py index 3897bcd..54f2745 100644 --- a/srlife/damage.py +++ b/srlife/damage.py @@ -162,16 +162,10 @@ def tube_log_reliability(self, tube, material, receiver, time): # CARES/LIFE cutoff moved to each model # if self.cares_cutoff: # pstress = self.calculate_principal_stress(stresses) - # print("pstress shape =", pstress.shape) - # pstress = self.calculate_principal_stress(stresses).reshape(-1, 3) - # pmax = np.max(pstress, axis=1) - # pmin = np.min(pstress, axis=1) - # print("pstress shape =", pstress.shape) + # pmax = np.max(pstress, axis=2) + # pmin = np.min(pstress, axis=2) # remove = np.abs(pmin / (pmax + 1.0e-16)) > 3.0 # mod_prob = inc_prob.flatten() - # print("inc_prob =", inc_prob.shape) - # print("mod_prob =", mod_prob.shape) - # print("remove =", remove) # mod_prob[remove] = 0.0 # inc_prob = mod_prob.reshape(inc_prob.shape) @@ -231,6 +225,13 @@ def calculate_normal_stress(self, mandel_stress): # Principal stresses pstress = self.calculate_principal_stress(mandel_stress) + # CARES/LIFE cutoff + if self.cares_cutoff: + pmax = np.max(pstress, axis=2) + pmin = np.min(pstress, axis=2) + remove = np.abs(pmin / (pmax + 1.0e-16)) > 3.0 + pstress[remove] = 0.0 + # Normal stress return ( pstress[..., 0, None, None] * (self.l**2) @@ -352,9 +353,13 @@ def calculate_flattened_eq_stress( properties and integration limits Parameters: + time: time instance variable for each stress/temperature mandel_stress: element stresses in Mandel convention temperatures: element temperatures - material material model to use + material: material model object with required data that includes + Weibull scale parameter (svals) and Weibull modulus (mvals) + and fatigue parameters Bv and Nv + tot_time: total service time used as input to calculate reliability Additional Parameters: A: mesh grid of vectorized angle values @@ -373,7 +378,7 @@ def calculate_flattened_eq_stress( Nv = material.Nv(temperatures) Bv = material.Bv(temperatures) - # Use temperature average values? + # Temperature average values mavg = np.mean(self.mvals, axis=0) Nvavg = np.mean(Nv, axis=0) Bvavg = np.mean(Bv, axis=0) @@ -386,12 +391,12 @@ def calculate_flattened_eq_stress( # Max principal stresss over all time steps for each element sigma_e_max = np.max(sigma_e, axis=0) - # Suppressing warning given when negative numbers are raised to rational numbers - # Defining time based on period of one cycle and number of time steps - # Calculate g using an integration method + # Calculating ratio of cyclic stress to max cyclic stress (in one cycle) + # for time-independent and time-dependent cases if np.all(time == 0): sigma_e_0 = sigma_e else: + # Suppressing warning given when negative numbers are raised to rational numbers with np.errstate(invalid="ignore"): g = ( np.trapz( @@ -401,8 +406,7 @@ def calculate_flattened_eq_stress( ) / time[-1] ) - # Defining tf or tot_time as nf * period - print("service time =", tot_time) + # Time dependent equivalent stress sigma_e_0 = ( ( @@ -423,10 +427,6 @@ def calculate_flattened_eq_stress( ) # Flatten the last axis and calculate the mean of the positive values along that axis - # slicing the shape of integral and reshaping it with a new size (to flatten) based on the last size element of integral - # if pstress.ndim == 2: - # flat = integral.reshape(-1,) - # elif pstress.ndim == 3: flat = integral.reshape(integral.shape[:-2] + (-1,)) # Suppressing warning to ignoring initial NaN values @@ -442,10 +442,15 @@ def calculate_element_log_reliability( Calculate the element log reliability given the equivalent stress Parameters: - mandel_stress: element stresses in Mandel convention - temperatures: element temperatures - volumes: element volumes - material: material model object with required data + mandel_stress: element stresses in Mandel convention + temperatures: element temperatures + volumes: element volumes + material: material model object with required data that includes + Weibull scale parameter (svals), Weibull modulus (mvals) + and uniaxial and polyaxial crack density coefficient (kvals,kpvals) + shear_sensitive: shear sensitivity condition for evaluating normalized + crack density coefficient (kbar) using a + numerically (when True) or using a fixed expression (when False) """ self.temperatures = temperatures self.material = material @@ -456,7 +461,7 @@ def calculate_element_log_reliability( mvals = material.modulus(temperatures) kvals = svals ** (-mvals) - # Use temperature average values? + # Temperature average values mavg = np.mean(mvals, axis=0) kavg = np.mean(kvals, axis=0) @@ -470,15 +475,6 @@ def calculate_element_log_reliability( kbar = 2 * mavg + 1 kpvals = kbar * kavg - # print("kbar =", kbar) - # For shear-insensitive case - # kpvals = (2 * mvals + 1) * kvals - - # For CSE model - # kpvals = kbar * kvals - - # For hear sensitive case - # kpvals = (2.99) * kvals # Equivalent stress raied to exponent mv flat = ( @@ -512,13 +508,14 @@ def calculate_element_log_reliability( Calculate the element log reliability Parameters: - time: time for each stress/temperature + time: time instance variable for each stress/temperature mandel_stress: element stresses in Mandel convention temperatures: element temperatures volumes: element volumes material: material model object with required data that includes - Weibull scale parameter (svals) and Weibull modulus (mvals) - tot_time: total time at which to calculate reliability + Weibull scale parameter (svals), Weibull modulus (mvals) + and fatigue parameters (Bv,Nv) + tot_time: total service time used as input to calculate reliability """ # Principal stresses @@ -538,7 +535,7 @@ def calculate_element_log_reliability( Nv = material.Nv(temperatures) Bv = material.Bv(temperatures) - # Use temperature average values? + # Temperature average values mavg = np.mean(mvals, axis=0) kavg = np.mean(kvals, axis=0) Nvavg = np.mean(Nv, axis=0) @@ -550,7 +547,8 @@ def calculate_element_log_reliability( # Max principal stresss over all time steps for each element pstress_max = np.max(pstress, axis=0) - # g + # Calculating ratio of cyclic stress to max cyclic stress (in one cycle) + # for time-independent and time-dependent cases if np.all(time == 0): pstress_0 = pstress else: @@ -562,8 +560,7 @@ def calculate_element_log_reliability( ) / time[-1] ) - # Defining tf - print("service time =", tot_time) + # Time dependent principal stress pstress_0 = ( (pstress_max ** Nvavg[..., None] * g * tot_time) / Bvavg[..., None] @@ -590,7 +587,10 @@ def calculate_avg_normal_stress( Parameters: mandel_stress: element stresses in Mandel convention temperatures: element temperatures - material: material model object with required data + material: material model object with required data that includes + Weibull scale parameter (svals), Weibull modulus (mvals) + and fatigue parameters (Bv,Nv) + tot_time: total service time used as input to calculate reliability """ # Principal stresses pstress = self.calculate_principal_stress(mandel_stress) @@ -602,7 +602,6 @@ def calculate_avg_normal_stress( remove = np.abs(pmin / (pmax + 1.0e-16)) > 3.0 pstress[remove] = 0.0 - # mvals = material.modulus(temperatures)[: pstress.shape[1]] # Material parameters self.temperatures = temperatures self.material = material @@ -612,7 +611,7 @@ def calculate_avg_normal_stress( Nv = material.Nv(temperatures) Bv = material.Bv(temperatures) - # Use temperature average values? + # Temperature average values mavg = np.mean(mvals, axis=0) Nvavg = np.mean(Nv, axis=0) Bvavg = np.mean(Bv, axis=0) @@ -626,8 +625,8 @@ def calculate_avg_normal_stress( # Max normal stresss over all time steps for each element sigma_n_max = np.max(sigma_n, axis=0) - # Defining time based on period of one cycle and number of time steps - # Calculate g using an integration method + # Calculating ratio of cyclic stress to max cyclic stress (in one cycle) + # for time-independent and time-dependent cases if np.all(time == 0): sigma_n_0 = sigma_n else: @@ -639,8 +638,7 @@ def calculate_avg_normal_stress( ) / time[-1] ) - # Defining tot_time as nf * period - print("service time =", tot_time) + # Time dependent equivalent stress sigma_n_0 = ( ( @@ -659,15 +657,11 @@ def calculate_avg_normal_stress( ) / (4 * np.pi) # Flatten the last axis and calculate the mean of the positive values along that axis - # slicing the shape of integral and reshaping it with a new size (to flatten) based on the last size element of integral - # if pstress.ndim == 2: - # flat = integral.reshape(-1,) - # elif pstress.ndim == 3: flat = integral.reshape(integral.shape[:-2] + (-1,)) # Suppressing warning to ignoring initial NaN values with np.errstate(invalid="ignore"): - # Average stress + # Average stress from summing while ignoring NaN values return np.nansum(np.where(flat >= 0.0, flat, np.nan), axis=-1) def calculate_element_log_reliability( @@ -677,11 +671,12 @@ def calculate_element_log_reliability( Calculate the element log reliability Parameters: - mandel_stress: element stresses in Mandel convention - temperatures: element temperatures - volumes: element volumes - material: material model object with required data that includes - Weibull scale parameter (svals) and Weibull modulus (mvals) + mandel_stress: element stresses in Mandel convention + temperatures: element temperatures + volumes: element volumes + material: material model object with required data that includes + Weibull scale parameter (svals), Weibull modulus (mvals) + and uniaxial and polyaxial crack density coefficient (kvals,kpvals) tot_time: total time at which to calculate reliability """ self.temperatures = temperatures @@ -693,7 +688,7 @@ def calculate_element_log_reliability( mvals = material.modulus(temperatures) kvals = svals ** (-mvals) - # Use temperature average values? + # Temperature average values mavg = np.mean(mvals, axis=0) kavg = np.mean(kvals, axis=0) @@ -736,7 +731,9 @@ def calculate_eq_stress(self, mandel_stress, temperatures, material): def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): """ - Calculate the kbar from the Weibull modulus and material parameters + Calculate the evaluating normalized crack density coefficient (kbar) + using the Weibull scale parameter (svals), Weibull modulus (mvals), + poisson ratio (nu) """ self.temperatures = temperatures @@ -745,14 +742,14 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): # Weibull modulus mvals = self.material.modulus(temperatures) - # Use temperature average values? + # Temperature average values mavg = np.mean(mvals, axis=0) # Material parameters nu = np.mean(material.nu(temperatures), axis=0) - cbar = np.mean(material.c_bar(temperatures), axis=0) - # Calculating kbar + # Evaluating integral for kbar while suppressing warning given when + # negative numbers are raised to rational numbers with np.errstate(invalid="ignore"): integral2 = 2 * ( ( @@ -810,7 +807,9 @@ def calculate_eq_stress(self, mandel_stress, temperatures, material): def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): """ - Calculate the kbar from the Weibull modulus and material parameters + Calculate the evaluating normalized crack density coefficient (kbar) + using the Weibull scale parameter (svals), Weibull modulus (mvals), + poisson ratio (nu) """ self.temperatures = temperatures @@ -819,14 +818,14 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): # Weibull modulus mvals = self.material.modulus(temperatures) - # Use temperature average values? + # Temperature average values mavg = np.mean(mvals, axis=0) # Material parameters nu = np.mean(material.nu(temperatures), axis=0) - cbar = np.mean(material.c_bar(temperatures), axis=0) - # Calculating kbar + # Evaluating integral for kbar while suppressing warning given when + # negative numbers are raised to rational numbers with np.errstate(invalid="ignore"): integral2 = 2 * ( ( @@ -878,7 +877,9 @@ def calculate_eq_stress(self, mandel_stress, temperatures, material): def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): """ - Calculate the kbar from the Weibull modulus and material parameters + Calculate the evaluating normalized crack density coefficient (kbar) + using the Weibull scale parameter (svals), Weibull modulus (mvals), + poisson ratio (nu) """ self.temperatures = temperatures @@ -887,12 +888,11 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): # Weibull modulus mvals = self.material.modulus(temperatures) - # Use temperature average values? + # Temperature average values mavg = np.mean(mvals, axis=0) # Material parameters nu = np.mean(material.nu(temperatures), axis=0) - cbar = np.mean(material.c_bar(temperatures), axis=0) # Calculating kbar with np.errstate(invalid="ignore"): @@ -938,7 +938,9 @@ def calculate_eq_stress(self, mandel_stress, temperatures, material): def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): """ - Calculate the kbar from the Weibull modulus and material parameters + Calculate the evaluating normalized crack density coefficient (kbar) + using the Weibull scale parameter (svals), Weibull modulus (mvals), + poisson ratio (nu) """ self.temperatures = temperatures @@ -947,14 +949,15 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): # Weibull modulus mvals = self.material.modulus(temperatures) - # Use temperature average values? + # Temperature average values mavg = np.mean(mvals, axis=0) # Material parameters nu = np.mean(material.nu(temperatures), axis=0) cbar = np.mean(material.c_bar(temperatures), axis=0) - # Calculating kbar + # Evaluating integral for kbar while suppressing warning given when + # negative numbers are raised to rational numbers with np.errstate(invalid="ignore"): integral2 = 2 * ( ( @@ -992,7 +995,7 @@ def calculate_eq_stress(self, mandel_stress, temperatures, material): Calculate the equivalent stresses from the normal and shear stresses Additional parameters: - cbar: Emperical constant + cbar: Shetty model emperical constant (cbar) """ # Material parameters @@ -1011,7 +1014,9 @@ def calculate_eq_stress(self, mandel_stress, temperatures, material): def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): """ - Calculate the kbar from the Weibull modulus and material parameters + Calculate the evaluating normalized crack density coefficient (kbar) + using the Weibull scale parameter (svals), Weibull modulus (mvals), + poisson ratio (nu) and Shetty model emperical constant (cbar) """ self.temperatures = temperatures @@ -1020,14 +1025,15 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): # Weibull modulus mvals = self.material.modulus(temperatures) - # Use temperature average values? + # Temperature average values mavg = np.mean(mvals, axis=0) # Material parameters nu = np.mean(material.nu(temperatures), axis=0) cbar = np.mean(material.c_bar(temperatures), axis=0) - # Calculating kbar + # Evaluating integral for kbar while suppressing warning given when + # negative numbers are raised to rational numbers with np.errstate(invalid="ignore"): integral2 = 2 * ( ( @@ -1070,7 +1076,7 @@ def calculate_eq_stress(self, mandel_stress, temperatures, material): Additional parameters: nu: Poisson ratio - cbar: Emperical constant + cbar: Shetty model emperical constant (cbar) """ # Material parameters @@ -1094,7 +1100,9 @@ def calculate_eq_stress(self, mandel_stress, temperatures, material): def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): """ - Calculate the kbar from the Weibull modulus and material parameters + Calculate the evaluating normalized crack density coefficient (kbar) + using the Weibull scale parameter (svals), Weibull modulus (mvals), + poisson ratio (nu) and Shetty model emperical constant (cbar) """ self.temperatures = temperatures @@ -1103,14 +1111,15 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): # Weibull modulus mvals = self.material.modulus(temperatures) - # Use temperature average values? + # Temperature average values mavg = np.mean(mvals, axis=0) # Material parameters nu = np.mean(material.nu(temperatures), axis=0) cbar = np.mean(material.c_bar(temperatures), axis=0) - # Calculating kbar + # Evaluating integral for kbar while suppressing warning given when + # negative numbers are raised to rational numbers with np.errstate(invalid="ignore"): integral2 = 2 * ( ( diff --git a/test/test_ceramic_damage_CARES_cyclic.py b/test/test_ceramic_damage_CARES_cyclic.py index d142b3f..b9de2d3 100644 --- a/test/test_ceramic_damage_CARES_cyclic.py +++ b/test/test_ceramic_damage_CARES_cyclic.py @@ -19,8 +19,8 @@ def setUp(self): data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - # "Spinning_disk_60k_70k.csv", - "Spinning_disk_60k_80k.csv", + "Spinning_disk_60k_70k.csv", + # "Spinning_disk_60k_80k.csv", ), delimiter=",", skiprows=1, @@ -30,12 +30,6 @@ def setUp(self): self.stress = data.reshape(data.shape[0], 8, -1) vol_factor = 360 / 15 - # self.volumes = np.loadtxt( - # os.path.join( - # os.path.dirname(os.path.abspath(__file__)), - # "Spinning_disk_volumes.txt", - # ) - # ) self.volumes = np.loadtxt( os.path.join( @@ -43,14 +37,12 @@ def setUp(self): "volumes_8.csv", ), delimiter=",", - # skiprows=1, - # usecols=list(range(1, 55)), ) self.volumes = vol_factor * self.volumes self.temperatures = np.ones((data.shape[0], 8)) # Number of cycles to failure - self.nf = 1 + self.nf = 100000 self.period = 0.01 self.time = np.linspace(0, self.period, self.stress.shape[0]) @@ -69,16 +61,15 @@ def setUp(self): np.array([self.m, self.m]), self.c_bar, self.nu, - self.Nv, - self.Bv, + np.array([0, 1000.0]), + np.array([self.Nv, self.Nv]), + np.array([0, 1000.0]), + np.array([self.Bv, self.Bv]), ) self.model_time_dep = damage.PIAModel(solverparams.ParameterSet()) def test_definition(self): - # k = self.s0 ** (-self.m) - # kp = (2 * self.m + 1) * k - actual = self.model_time_dep.calculate_element_log_reliability( self.time, self.stress, @@ -106,8 +97,8 @@ def setUp(self): data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - # "Spinning_disk_60k_70k.csv", - "Spinning_disk_60k_80k.csv", + "Spinning_disk_60k_70k.csv", + # "Spinning_disk_60k_80k.csv", ), delimiter=",", skiprows=1, @@ -129,7 +120,7 @@ def setUp(self): self.temperatures = np.ones((data.shape[0], 8)) # Number of cycles to failure - self.nf = 1 + self.nf = 100000 self.period = 0.01 self.time = np.linspace(0, self.period, self.stress.shape[0]) @@ -148,8 +139,10 @@ def setUp(self): np.array([self.m, self.m]), self.c_bar, self.nu, - self.Nv, - self.Bv, + np.array([0, 1000.0]), + np.array([self.Nv, self.Nv]), + np.array([0, 1000.0]), + np.array([self.Bv, self.Bv]), ) self.model_time_dep = damage.WNTSAModel(solverparams.ParameterSet()) @@ -182,8 +175,8 @@ def setUp(self): data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - # "Spinning_disk_60k_70k.csv", - "Spinning_disk_60k_80k.csv", + "Spinning_disk_60k_70k.csv", + # "Spinning_disk_60k_80k.csv", ), delimiter=",", skiprows=1, @@ -206,7 +199,7 @@ def setUp(self): self.temperatures = np.ones((data.shape[0], 8)) # Number of cycles to failure - self.nf = 1 + self.nf = 100000 self.period = 0.01 self.time = np.linspace(0, self.period, self.stress.shape[0]) @@ -225,8 +218,10 @@ def setUp(self): np.array([self.m, self.m]), self.c_bar, self.nu, - self.Nv, - self.Bv, + np.array([0, 1000.0]), + np.array([self.Nv, self.Nv]), + np.array([0, 1000.0]), + np.array([self.Bv, self.Bv]), ) self.model_time_dep = damage.MTSModelGriffithFlaw(solverparams.ParameterSet()) @@ -260,8 +255,8 @@ def setUp(self): data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - # "Spinning_disk_60k_70k.csv", - "Spinning_disk_60k_80k.csv", + "Spinning_disk_60k_70k.csv", + # "Spinning_disk_60k_80k.csv", ), delimiter=",", skiprows=1, @@ -284,7 +279,7 @@ def setUp(self): self.temperatures = np.ones((data.shape[0], 8)) # Number of cycles to failure - self.nf = 1 + self.nf = 100000 self.period = 0.01 self.time = np.linspace(0, self.period, self.stress.shape[0]) @@ -303,8 +298,10 @@ def setUp(self): np.array([self.m, self.m]), self.c_bar, self.nu, - self.Nv, - self.Bv, + np.array([0, 1000.0]), + np.array([self.Nv, self.Nv]), + np.array([0, 1000.0]), + np.array([self.Bv, self.Bv]), ) self.model_time_dep = damage.MTSModelPennyShapedFlaw( @@ -340,8 +337,8 @@ def setUp(self): data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - # "Spinning_disk_60k_70k.csv", - "Spinning_disk_60k_80k.csv", + "Spinning_disk_60k_70k.csv", + # "Spinning_disk_60k_80k.csv", ), delimiter=",", skiprows=1, @@ -364,7 +361,7 @@ def setUp(self): self.temperatures = np.ones((data.shape[0], 8)) # Number of cycles to failure - self.nf = 1 + self.nf = 100000 self.period = 0.01 self.time = np.linspace(0, self.period, self.stress.shape[0]) @@ -383,13 +380,13 @@ def setUp(self): np.array([self.m, self.m]), self.c_bar, self.nu, - self.Nv, - self.Bv, + np.array([0, 1000.0]), + np.array([self.Nv, self.Nv]), + np.array([0, 1000.0]), + np.array([self.Bv, self.Bv]), ) - # self.model_time_indep = damage.CSEModelGriffithFlaw(solverparams.ParameterSet()) self.model_time_dep = damage.CSEModelGriffithFlaw(solverparams.ParameterSet()) - # self.model = damage.CSEModelGriffithFlaw(solverparams.ParameterSet()) def test_definition(self): actual = self.model_time_dep.calculate_element_log_reliability( @@ -420,8 +417,8 @@ def setUp(self): data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - # "Spinning_disk_60k_70k.csv", - "Spinning_disk_60k_80k.csv", + "Spinning_disk_60k_70k.csv", + # "Spinning_disk_60k_80k.csv", ), delimiter=",", skiprows=1, @@ -444,7 +441,7 @@ def setUp(self): self.temperatures = np.ones((data.shape[0], 8)) # Number of cycles to failure - self.nf = 1 + self.nf = 100000 self.period = 0.01 self.time = np.linspace(0, self.period, self.stress.shape[0]) @@ -463,8 +460,10 @@ def setUp(self): np.array([self.m, self.m]), self.c_bar, self.nu, - self.Nv, - self.Bv, + np.array([0, 1000.0]), + np.array([self.Nv, self.Nv]), + np.array([0, 1000.0]), + np.array([self.Bv, self.Bv]), ) self.model_time_dep = damage.CSEModelPennyShapedFlaw( @@ -500,8 +499,8 @@ def setUp(self): data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - # "Spinning_disk_60k_70k.csv", - "Spinning_disk_60k_80k.csv", + "Spinning_disk_60k_70k.csv", + # "Spinning_disk_60k_80k.csv", ), delimiter=",", skiprows=1, @@ -524,7 +523,7 @@ def setUp(self): self.temperatures = np.ones((data.shape[0], 8)) # Number of cycles to failure - self.nf = 1 + self.nf = 100000 self.period = 0.01 self.time = np.linspace(0, self.period, self.stress.shape[0]) @@ -543,8 +542,10 @@ def setUp(self): np.array([self.m, self.m]), self.c_bar, self.nu, - self.Nv, - self.Bv, + np.array([0, 1000.0]), + np.array([self.Nv, self.Nv]), + np.array([0, 1000.0]), + np.array([self.Bv, self.Bv]), ) self.model_time_dep = damage.SMMModelGriffithFlaw(solverparams.ParameterSet()) @@ -577,8 +578,8 @@ def setUp(self): data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - # "Spinning_disk_60k_70k.csv", - "Spinning_disk_60k_80k.csv", + "Spinning_disk_60k_70k.csv", + # "Spinning_disk_60k_80k.csv", ), delimiter=",", skiprows=1, @@ -601,7 +602,7 @@ def setUp(self): self.temperatures = np.ones((data.shape[0], 8)) # Number of cycles to failure - self.nf = 1 + self.nf = 100000 self.period = 0.01 self.time = np.linspace(0, self.period, self.stress.shape[0]) @@ -620,8 +621,10 @@ def setUp(self): np.array([self.m, self.m]), self.c_bar, self.nu, - self.Nv, - self.Bv, + np.array([0, 1000.0]), + np.array([self.Nv, self.Nv]), + np.array([0, 1000.0]), + np.array([self.Bv, self.Bv]), ) self.model_time_dep = damage.SMMModelPennyShapedFlaw( solverparams.ParameterSet() diff --git a/test/test_ceramic_damage_CARES_static.py b/test/test_ceramic_damage_CARES_static.py index e9a05ad..e52e930 100644 --- a/test/test_ceramic_damage_CARES_static.py +++ b/test/test_ceramic_damage_CARES_static.py @@ -16,19 +16,10 @@ class TestPIAModel(unittest.TestCase): def setUp(self): - # data = np.loadtxt("Spinning_disk_cyclic_60000_70000.txt") - # data = np.loadtxt( - # os.path.join( - # os.path.dirname(os.path.abspath(__file__)), - # "Spinning_disk_cyclic_60000_70000.txt", - # # "Spinning_disk_cyclic_60000_80000.txt", - # ) - # ) - # data = np.loadtxt("Spinning_disk_static_60000.txt") data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - "Spinning_disk_60k.csv", + "Spinning_disk_90k.csv", ), delimiter=",", skiprows=1, @@ -38,12 +29,6 @@ def setUp(self): self.stress = data.reshape(data.shape[0], 8, -1) vol_factor = 360 / 15 - # self.volumes = np.loadtxt( - # os.path.join( - # os.path.dirname(os.path.abspath(__file__)), - # "Spinning_disk_volumes.txt", - # ) - # ) self.volumes = np.loadtxt( os.path.join( @@ -51,14 +36,12 @@ def setUp(self): "volumes_8.csv", ), delimiter=",", - # skiprows=1, - # usecols=list(range(1, 55)), ) self.volumes = vol_factor * self.volumes self.temperatures = np.ones((data.shape[0], 8)) # Number of cycles to failure - self.nf = 0 + self.nf = 100000 self.period = 0.01 self.time = np.linspace(0, self.period, self.stress.shape[0]) @@ -77,16 +60,15 @@ def setUp(self): np.array([self.m, self.m]), self.c_bar, self.nu, - self.Nv, - self.Bv, + np.array([0, 1000.0]), + np.array([self.Nv, self.Nv]), + np.array([0, 1000.0]), + np.array([self.Bv, self.Bv]), ) self.model_time_dep = damage.PIAModel(solverparams.ParameterSet()) def test_definition(self): - # k = self.s0 ** (-self.m) - # kp = (2 * self.m + 1) * k - actual = self.model_time_dep.calculate_element_log_reliability( self.time, self.stress, @@ -96,7 +78,6 @@ def test_definition(self): self.nf * self.period, ) - print("actual shape =", actual.shape) # Summing up log probabilities over nelem and taking the value of one R_PIA = np.exp(np.sum(actual)) print("Time dep Reliability PIA = ", R_PIA) @@ -115,7 +96,7 @@ def setUp(self): data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - "Spinning_disk_60k.csv", + "Spinning_disk_90k.csv", ), delimiter=",", skiprows=1, @@ -137,7 +118,7 @@ def setUp(self): self.temperatures = np.ones((data.shape[0], 8)) # Number of cycles to failure - self.nf = 100000 + self.nf = 10000 self.period = 0.01 self.time = np.linspace(0, self.period, self.stress.shape[0]) @@ -156,16 +137,15 @@ def setUp(self): np.array([self.m, self.m]), self.c_bar, self.nu, - self.Nv, - self.Bv, + np.array([0, 1000.0]), + np.array([self.Nv, self.Nv]), + np.array([0, 1000.0]), + np.array([self.Bv, self.Bv]), ) self.model_time_dep = damage.WNTSAModel(solverparams.ParameterSet()) def test_definition(self): - # k = self.s0 ** (-self.m) - # kp = (2 * self.m + 1) * k - actual = self.model_time_dep.calculate_element_log_reliability( self.time, self.stress, @@ -193,7 +173,7 @@ def setUp(self): data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - "Spinning_disk_60k.csv", + "Spinning_disk_90k.csv", ), delimiter=",", skiprows=1, @@ -216,7 +196,7 @@ def setUp(self): self.temperatures = np.ones((data.shape[0], 8)) # Number of cycles to failure - self.nf = 0 + self.nf = 10000 self.period = 0.01 self.time = np.linspace(0, self.period, self.stress.shape[0]) @@ -235,8 +215,10 @@ def setUp(self): np.array([self.m, self.m]), self.c_bar, self.nu, - self.Nv, - self.Bv, + np.array([0, 1000.0]), + np.array([self.Nv, self.Nv]), + np.array([0, 1000.0]), + np.array([self.Bv, self.Bv]), ) self.model_time_dep = damage.MTSModelGriffithFlaw(solverparams.ParameterSet()) @@ -270,7 +252,7 @@ def setUp(self): data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - "Spinning_disk_60k.csv", + "Spinning_disk_90k.csv", ), delimiter=",", skiprows=1, @@ -293,7 +275,7 @@ def setUp(self): self.temperatures = np.ones((data.shape[0], 8)) # Number of cycles to failure - self.nf = 0 + self.nf = 10000 self.period = 0.01 self.time = np.linspace(0, self.period, self.stress.shape[0]) @@ -312,8 +294,10 @@ def setUp(self): np.array([self.m, self.m]), self.c_bar, self.nu, - self.Nv, - self.Bv, + np.array([0, 1000.0]), + np.array([self.Nv, self.Nv]), + np.array([0, 1000.0]), + np.array([self.Bv, self.Bv]), ) self.model_time_dep = damage.MTSModelPennyShapedFlaw( @@ -349,7 +333,7 @@ def setUp(self): data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - "Spinning_disk_60k.csv", + "Spinning_disk_90k.csv", ), delimiter=",", skiprows=1, @@ -372,7 +356,7 @@ def setUp(self): self.temperatures = np.ones((data.shape[0], 8)) # Number of cycles to failure - self.nf = 10 + self.nf = 10000 self.period = 0.01 self.time = np.linspace(0, self.period, self.stress.shape[0]) @@ -391,8 +375,10 @@ def setUp(self): np.array([self.m, self.m]), self.c_bar, self.nu, - self.Nv, - self.Bv, + np.array([0, 1000.0]), + np.array([self.Nv, self.Nv]), + np.array([0, 1000.0]), + np.array([self.Bv, self.Bv]), ) self.model_time_dep = damage.CSEModelGriffithFlaw(solverparams.ParameterSet()) @@ -407,7 +393,6 @@ def test_definition(self): self.nf * self.period, ) - print("actual shape=", actual.shape) # Summing up log probabilities over nelem and taking the value of one R_CSE_GF = np.exp(np.sum(actual)) # R_CSE_GF = np.exp(np.sum(actual,axis=tuple(range(actual.ndim))[1:]))[-1] @@ -427,7 +412,7 @@ def setUp(self): data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - "Spinning_disk_60k.csv", + "Spinning_disk_90k.csv", ), delimiter=",", skiprows=1, @@ -450,7 +435,7 @@ def setUp(self): self.temperatures = np.ones((data.shape[0], 8)) # Number of cycles to failure - self.nf = 1 + self.nf = 10000 self.period = 0.01 self.time = np.linspace(0, self.period, self.stress.shape[0]) @@ -469,8 +454,10 @@ def setUp(self): np.array([self.m, self.m]), self.c_bar, self.nu, - self.Nv, - self.Bv, + np.array([0, 1000.0]), + np.array([self.Nv, self.Nv]), + np.array([0, 1000.0]), + np.array([self.Bv, self.Bv]), ) self.model_time_dep = damage.CSEModelPennyShapedFlaw( @@ -506,7 +493,7 @@ def setUp(self): data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - "Spinning_disk_60k.csv", + "Spinning_disk_90k.csv", ), delimiter=",", skiprows=1, @@ -529,7 +516,7 @@ def setUp(self): self.temperatures = np.ones((data.shape[0], 8)) # Number of cycles to failure - self.nf = 1 + self.nf = 10000 self.period = 0.01 self.time = np.linspace(0, self.period, self.stress.shape[0]) @@ -548,8 +535,10 @@ def setUp(self): np.array([self.m, self.m]), self.c_bar, self.nu, - self.Nv, - self.Bv, + np.array([0, 1000.0]), + np.array([self.Nv, self.Nv]), + np.array([0, 1000.0]), + np.array([self.Bv, self.Bv]), ) self.model_time_dep = damage.SMMModelGriffithFlaw(solverparams.ParameterSet()) @@ -582,7 +571,7 @@ def setUp(self): data = np.loadtxt( os.path.join( os.path.dirname(os.path.abspath(__file__)), - "Spinning_disk_60k.csv", + "Spinning_disk_90k.csv", ), delimiter=",", skiprows=1, @@ -605,7 +594,7 @@ def setUp(self): self.temperatures = np.ones((data.shape[0], 8)) # Number of cycles to failure - self.nf = 1 + self.nf = 10000 self.period = 0.01 self.time = np.linspace(0, self.period, self.stress.shape[0]) @@ -624,17 +613,16 @@ def setUp(self): np.array([self.m, self.m]), self.c_bar, self.nu, - self.Nv, - self.Bv, + np.array([0, 1000.0]), + np.array([self.Nv, self.Nv]), + np.array([0, 1000.0]), + np.array([self.Bv, self.Bv]), ) self.model_time_dep = damage.SMMModelPennyShapedFlaw( solverparams.ParameterSet() ) def test_definition(self): - # k = self.s0 ** (-self.m) - # kp = (2.99) * k - actual = self.model_time_dep.calculate_element_log_reliability( self.time, self.stress, @@ -643,7 +631,6 @@ def test_definition(self): self.material, self.nf * self.period, ) - # print("actual shape =", actual.shape) # Summing up log probabilities over nelem and taking the value of one R_SMM_PSF = np.exp(np.sum(actual)) diff --git a/test/test_materials.py b/test/test_materials.py index 1c45865..a3d707b 100644 --- a/test/test_materials.py +++ b/test/test_materials.py @@ -248,11 +248,22 @@ def setUp(self): self.ms = np.array([10.7, 9.2]) self.c_bar = 1.5 self.nu = 0.17 - self.Nv = 30 - self.Bv = 320 + self.NvTs = np.array([25, 1500]) + self.Nvs = np.array([30, 30]) + self.BvTs = np.array([25, 1500]) + self.Bvs = np.array([320, 320]) self.mat = materials.StandardCeramicMaterial( - self.Ts, self.s0s, self.mTs, self.ms, self.c_bar, self.nu, self.Nv, self.Bv + self.Ts, + self.s0s, + self.mTs, + self.ms, + self.c_bar, + self.nu, + self.NvTs, + self.Nvs, + self.BvTs, + self.Bvs, ) def test_strength(self): From 5bdcb4245578d91ea34c3c35af64637a29f95b02 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Tue, 2 May 2023 13:31:16 -0500 Subject: [PATCH 35/71] Calculate reliability file --- .../ceramic-receiver/calculate_reliability.py | 136 ++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 examples/ceramic-receiver/calculate_reliability.py diff --git a/examples/ceramic-receiver/calculate_reliability.py b/examples/ceramic-receiver/calculate_reliability.py new file mode 100644 index 0000000..b49e0bc --- /dev/null +++ b/examples/ceramic-receiver/calculate_reliability.py @@ -0,0 +1,136 @@ +#!/usr/bin/env python3 + +import numpy as np + +import sys + +sys.path.append("../..") + +from srlife import ( + receiver, + solverparams, + spring, + structural, + thermal, + system, + library, + managers, + damage, +) + + +def sample_parameters(): + params = solverparams.ParameterSet() + + params["nthreads"] = 2 + params["progress_bars"] = True + # If true store results on disk (slower, but less memory) + params["page_results"] = True # False + + params["thermal"]["miter"] = 200 + params["thermal"]["verbose"] = False + + params["thermal"]["solid"]["rtol"] = 1.0e-6 + params["thermal"]["solid"]["atol"] = 1.0e-4 + params["thermal"]["solid"]["miter"] = 20 + + params["thermal"]["fluid"]["rtol"] = 1.0e-6 + params["thermal"]["fluid"]["atol"] = 1.0e-2 + params["thermal"]["fluid"]["miter"] = 50 + + params["structural"]["rtol"] = 1.0e-6 + params["structural"]["atol"] = 1.0e-8 + params["structural"]["miter"] = 50 + params["structural"]["verbose"] = False + + params["system"]["rtol"] = 1.0e-6 + params["system"]["atol"] = 1.0e-8 + params["system"]["miter"] = 10 + params["system"]["verbose"] = False + + # How to extrapolate damage forward in time based on the cycles provided + # Options: + # "lump" = D_future = sum(D_simulated) / N * days + # "last" = D_future = sum(D_simulated[:-1]) + D_simulated[-1] * days + # "poly" = polynomial extrapolation with order given by the "order" param + params["damage"]["extrapolate"] = "last" + # params["damage"]["order"] = 2 + + return params + + +if __name__ == "__main__": + model = receiver.Receiver.load("SiC_1pt00mm_spath_Sresults.hdf") + + # Load some customized solution parameters + # These are all optional, all the solvers have default values + # for parameters not provided by the user + params = sample_parameters() + + # Define the thermal solver to use in solving the heat transfer problem + thermal_solver = thermal.ThermohydraulicsThermalSolver(params["thermal"]) + # Define the structural solver to use in solving the individual tube problems + structural_solver = structural.PythonTubeSolver(params["structural"]) + # Define the system solver to use in solving the coupled structural system + system_solver = system.SpringSystemSolver(params["system"]) + # Damage model to use in calculating life + # damage_model = damage.SMMModelPennyShapedFlaw(params["damage"]) + damage_models = [ + # damage.PIAModel(params["damage"]), + # damage.WNTSAModel(params["damage"]), + # damage.MTSModelGriffithFlaw(params["damage"]), damage.MTSModelPennyShapedFlaw(params["damage"]), + # damage.CSEModelGriffithFlaw(params["damage"]), damage.CSEModelPennyShapedFlaw(params["damage"]), + damage.SMMModelGriffithFlaw(params["damage"]), + # damage.SMMModelPennyShapedFlaw(params["damage"]) + ] + + # Load the materials + fluid = library.load_thermal_fluid("32MgCl2-68KCl", "base") + thermal, deformation, damage = library.load_material( + "SiC", "base", "cares", "cares" + ) + + reliability_filename = "SiC_1pt00mm_Reliability.txt" + file = open(reliability_filename, "w") + + for damage_model in damage_models: + # The solution manager + solver = managers.SolutionManager( + model, + thermal_solver, + thermal, + fluid, + structural_solver, + deformation, + damage, + system_solver, + damage_model, + pset=params, + ) + + # Report the best-estimate life of the receiver + reliability = solver.calculate_reliability(time=100000.0) + model.save("SiC_1pt00mm_spath_Rresults.hdf") + + for pi, panel in model.panels.items(): + for ti, tube in panel.tubes.items(): + tube.write_vtk("SiC_1mm_tube-%s-%s" % (pi, ti)) + + print(damage_model) + print("Individual tube reliabilities:") + print(reliability["tube_reliability"]) + print("Individual panel reliabilities:") + print(reliability["panel_reliability"]) + print("Overall reliability:") + print(reliability["overall_reliability"]) + print("Minimum tube reliabilities:") + print(min(reliability["tube_reliability"])) + + # print("Overall structure reliability:") + # print(reliability["overall_reliability"]) + + file.write("model = %s \n" % (damage_model)) + file.write( + "minimum tube reliability = %f \n" % (min(reliability["tube_reliability"])) + ) + file.close() From 387bf447032304c288118f59d6a3c0be222c3285 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Mon, 5 Jun 2023 10:55:53 -0500 Subject: [PATCH 36/71] Modifying fatigue parameter name in two files --- srlife/data/damage/SiC.xml | 12 ++++++------ srlife/materials.py | 37 ++++++++++++++++++++++++------------- 2 files changed, 30 insertions(+), 19 deletions(-) diff --git a/srlife/data/damage/SiC.xml b/srlife/data/damage/SiC.xml index efa6556..8329956 100644 --- a/srlife/data/damage/SiC.xml +++ b/srlife/data/damage/SiC.xml @@ -11,8 +11,8 @@ 1.5 0.16 - 30 - 320 + 30 + 320 @@ -25,13 +25,13 @@ 0.82 0.16 - + 298.15 811.15 1089.15 1366.15 56 56 47 38 - - + + 298.15 811.15 1089.15 1366.15 1275 1275 1850 520 - + diff --git a/srlife/materials.py b/srlife/materials.py index 90e9520..553a543 100644 --- a/srlife/materials.py +++ b/srlife/materials.py @@ -715,24 +715,28 @@ def __init__( c_bar, nu, Nv_temperatures, - Nvs, + fatigue_Nv, Bv_temperatures, - Bvs, + fatigue_Bv, *args, **kwargs ): super().__init__(*args, **kwargs) - self.s0 = inter.interp1d(s_temperatures, strengths) self.s_temperatures = s_temperatures self.strengths = strengths + self.s0 = inter.interp1d(s_temperatures, strengths) self.m_temperatures = m_temperatures self.mvals = modulus self.m = inter.interp1d(m_temperatures, modulus) self.C = c_bar self.nu_val = nu - self.Nv = inter.interp1d(Nv_temperatures, Nvs) - self.Bv = inter.interp1d(Bv_temperatures, Bvs) + self.Nv_temperatures = Nv_temperatures + self.fatigue_Nv = fatigue_Nv + self.Nv = inter.interp1d(Nv_temperatures, fatigue_Nv) + self.Bv_temperatures = Bv_temperatures + self.fatigue_Bv = fatigue_Bv + self.Bv = inter.interp1d(Bv_temperatures, fatigue_Bv) def strength(self, T): """ @@ -785,17 +789,17 @@ def load(cls, node): node: node with model """ strength = node.find("strength") - c_bar = node.find("c_bar") s_temps = strength.find("temperatures") svals = strength.find("values") m = node.find("modulus") m_temps = m.find("temperatures") mvals = m.find("values") + c_bar = node.find("c_bar") nu = node.find("nu") - Nv = node.find("Nv") + Nv = node.find("fatigue_Nv") Nv_temps = Nv.find("temperatures") Nvvals = Nv.find("values") - Bv = node.find("Bv") + Bv = node.find("fatigue_Bv") Bv_temps = Bv.find("temperatures") Bvvals = Bv.find("values") @@ -821,6 +825,7 @@ def save(self, fname, modelname): root = ET.Element("models") base = ET.SubElement(root, modelname, {"type": "StandardModel"}) + strength = ET.SubElement(base, "strength") temps = ET.SubElement(strength, "temperatures") temps.text = " ".join(map(str, self.s_temperatures)) @@ -839,11 +844,17 @@ def save(self, fname, modelname): nu = ET.SubElement(base, "nu") nu.text = str(self.nu_val) - Nv = ET.SubElement(base, "Nv") - Nv.text = str(self.Nv_val) - - Bv = ET.SubElement(base, "Bv") - Bv.text = str(self.Bv_val) + Nv = ET.SubElement(base, "fatigue_Nv") + Nvtemps = ET.SubElement(Nv, "temperatures") + Nvtemps.text = " ".join(map(str, self.Nv_temperatures)) + Nvvals = ET.SubElement(Nv, "values") + Nvvals.text = str(self.Nvvals) + + Bv = ET.SubElement(base, "fatigue_Bv") + Bvtemps = ET.SubElement(Nv, "temperatures") + Bvtemps.text = " ".join(map(str, self.Bv_temperatures)) + Bvvals = ET.SubElement(base, "Bv") + Bvvals.text = str(self.BvvalS) tree = ET.ElementTree(element=root) tree.write(fname) From 7f2e8a46e206e5e81edfb8fa9d1dd4cdc355a83a Mon Sep 17 00:00:00 2001 From: pschaugule Date: Mon, 5 Jun 2023 11:05:55 -0500 Subject: [PATCH 37/71] Modifying fatigue parameter name in two files 2 --- srlife/materials.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/srlife/materials.py b/srlife/materials.py index 553a543..fd428f7 100644 --- a/srlife/materials.py +++ b/srlife/materials.py @@ -848,13 +848,13 @@ def save(self, fname, modelname): Nvtemps = ET.SubElement(Nv, "temperatures") Nvtemps.text = " ".join(map(str, self.Nv_temperatures)) Nvvals = ET.SubElement(Nv, "values") - Nvvals.text = str(self.Nvvals) + Nvvals.text = " ".join(map(str(self.Nvvals))) Bv = ET.SubElement(base, "fatigue_Bv") Bvtemps = ET.SubElement(Nv, "temperatures") Bvtemps.text = " ".join(map(str, self.Bv_temperatures)) Bvvals = ET.SubElement(base, "Bv") - Bvvals.text = str(self.BvvalS) + Bvvals.text = " ".join(map(str(self.Bvvals))) tree = ET.ElementTree(element=root) tree.write(fname) From 989801c9800b5674aa9fe6099d9d3c9ad627ecb0 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Mon, 5 Jun 2023 11:16:07 -0500 Subject: [PATCH 38/71] Modifying fatigue parameter name in two files 3 --- srlife/materials.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/srlife/materials.py b/srlife/materials.py index fd428f7..b444cb6 100644 --- a/srlife/materials.py +++ b/srlife/materials.py @@ -732,10 +732,10 @@ def __init__( self.C = c_bar self.nu_val = nu self.Nv_temperatures = Nv_temperatures - self.fatigue_Nv = fatigue_Nv + self.Nvvals = fatigue_Nv self.Nv = inter.interp1d(Nv_temperatures, fatigue_Nv) self.Bv_temperatures = Bv_temperatures - self.fatigue_Bv = fatigue_Bv + self.Bvvals = fatigue_Bv self.Bv = inter.interp1d(Bv_temperatures, fatigue_Bv) def strength(self, T): From 0e38b202bbff5db38813a73dfb3695ac3a3769e1 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Mon, 5 Jun 2023 11:20:07 -0500 Subject: [PATCH 39/71] Modifying fatigue parameter name in two files 4 --- srlife/materials.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/srlife/materials.py b/srlife/materials.py index b444cb6..163d950 100644 --- a/srlife/materials.py +++ b/srlife/materials.py @@ -848,13 +848,13 @@ def save(self, fname, modelname): Nvtemps = ET.SubElement(Nv, "temperatures") Nvtemps.text = " ".join(map(str, self.Nv_temperatures)) Nvvals = ET.SubElement(Nv, "values") - Nvvals.text = " ".join(map(str(self.Nvvals))) + Nvvals.text = " ".join(map(str, self.Nvvals)) Bv = ET.SubElement(base, "fatigue_Bv") Bvtemps = ET.SubElement(Nv, "temperatures") Bvtemps.text = " ".join(map(str, self.Bv_temperatures)) Bvvals = ET.SubElement(base, "Bv") - Bvvals.text = " ".join(map(str(self.Bvvals))) + Bvvals.text = " ".join(map, str(self.Bvvals)) tree = ET.ElementTree(element=root) tree.write(fname) From 7180ffe23eec370bb7852cdae4540b1efb62a651 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Mon, 5 Jun 2023 11:24:16 -0500 Subject: [PATCH 40/71] Modifying fatigue parameter name in two files 5 --- srlife/materials.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/srlife/materials.py b/srlife/materials.py index 163d950..f1910ed 100644 --- a/srlife/materials.py +++ b/srlife/materials.py @@ -854,7 +854,7 @@ def save(self, fname, modelname): Bvtemps = ET.SubElement(Nv, "temperatures") Bvtemps.text = " ".join(map(str, self.Bv_temperatures)) Bvvals = ET.SubElement(base, "Bv") - Bvvals.text = " ".join(map, str(self.Bvvals)) + Bvvals.text = " ".join(map(str, self.Bvvals)) tree = ET.ElementTree(element=root) tree.write(fname) From 1ed50a5b47535bbd178a6c590969a9d7e502fde0 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Mon, 5 Jun 2023 11:34:22 -0500 Subject: [PATCH 41/71] Modifying fatigue parameter name in two files 6 --- test/test_materials.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/test/test_materials.py b/test/test_materials.py index a3d707b..48655c4 100644 --- a/test/test_materials.py +++ b/test/test_materials.py @@ -299,6 +299,24 @@ def test_nu(self): b = self.nu self.assertAlmostEqual(a, b) + def test_Nv(self): + ifn = inter.interp1d(self.NvTs, self.Nvs) + T = 1099.1 + + a = self.mat.fatigue_Nv(T) + b = ifn(T) + + self.assertAlmostEqual(a, b) + + def test_Bv(self): + ifn = inter.interp1d(self.BvTs, self.Bvs) + T = 1099.1 + + a = self.mat.fatigue_Bv(T) + b = ifn(T) + + self.assertAlmostEqual(a, b) + def test_store_receover(self): tfile = tempfile.mktemp() self.mat.save(tfile, "blah") @@ -312,3 +330,9 @@ def test_store_receover(self): self.assertTrue(np.isclose(test.C, self.c_bar)) self.assertTrue(np.isclose(test.nu_val, self.nu)) + + self.assertTrue(np.allclose(test.Nv_temperatures, self.NvTs)) + self.assertTrue(np.allclose(test.Nvvals, self.Nvs)) + + self.assertTrue(np.allclose(test.Bv_temperatures, self.BvTs)) + self.assertTrue(np.allclose(test.Bvvals, self.Bvs)) From 3eed1e29c8d42a8f282bc84c2d74ab25ed95d92b Mon Sep 17 00:00:00 2001 From: pschaugule Date: Mon, 5 Jun 2023 11:44:06 -0500 Subject: [PATCH 42/71] Modifying fatigue parameter name in two files 7 --- test/test_materials.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/test_materials.py b/test/test_materials.py index 48655c4..b324697 100644 --- a/test/test_materials.py +++ b/test/test_materials.py @@ -303,7 +303,7 @@ def test_Nv(self): ifn = inter.interp1d(self.NvTs, self.Nvs) T = 1099.1 - a = self.mat.fatigue_Nv(T) + a = self.mat.Nv(T) b = ifn(T) self.assertAlmostEqual(a, b) @@ -312,7 +312,7 @@ def test_Bv(self): ifn = inter.interp1d(self.BvTs, self.Bvs) T = 1099.1 - a = self.mat.fatigue_Bv(T) + a = self.mat.Bv(T) b = ifn(T) self.assertAlmostEqual(a, b) From 370717ec9cad4db525db08c5b8bb97013ee59948 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Mon, 5 Jun 2023 11:52:37 -0500 Subject: [PATCH 43/71] Modifying fatigue parameter name in two files 8 --- srlife/data/damage/SiC.xml | 12 ++++++++++-- srlife/materials.py | 1 + 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/srlife/data/damage/SiC.xml b/srlife/data/damage/SiC.xml index 8329956..b044b2f 100644 --- a/srlife/data/damage/SiC.xml +++ b/srlife/data/damage/SiC.xml @@ -11,8 +11,16 @@ 1.5 0.16 - 30 - 320 + + + 298.15 811.15 1089.15 1366.15 + 30 30 30 30 + + + 298.15 811.15 1089.15 1366.15 + 320 320 320 320 + diff --git a/srlife/materials.py b/srlife/materials.py index f1910ed..d93c5d9 100644 --- a/srlife/materials.py +++ b/srlife/materials.py @@ -802,6 +802,7 @@ def load(cls, node): Bv = node.find("fatigue_Bv") Bv_temps = Bv.find("temperatures") Bvvals = Bv.find("values") + print(Bv_temps.text) return StandardCeramicMaterial( np.array(list(map(float, s_temps.text.strip().split()))), From ac7042f39d247c96bf259f57c1514100c1c36bc2 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Mon, 5 Jun 2023 15:24:57 -0500 Subject: [PATCH 44/71] Modifying fatigue parameter name in two files 9 --- test/test_materials.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/test_materials.py b/test/test_materials.py index b324697..6cd656c 100644 --- a/test/test_materials.py +++ b/test/test_materials.py @@ -248,10 +248,10 @@ def setUp(self): self.ms = np.array([10.7, 9.2]) self.c_bar = 1.5 self.nu = 0.17 - self.NvTs = np.array([25, 1500]) - self.Nvs = np.array([30, 30]) - self.BvTs = np.array([25, 1500]) - self.Bvs = np.array([320, 320]) + self.NvTs = np.array([25.0, 1000.0, 1500.0]) + self.Nvs = np.array([30.0, 30.0, 30.0]) + self.BvTs = np.array([25.0, 1000.0, 1500.0]) + self.Bvs = np.array([320.0, 320.0, 320.0]) self.mat = materials.StandardCeramicMaterial( self.Ts, From 0b9574a1f389e39295c69829540fc72618870d7b Mon Sep 17 00:00:00 2001 From: pschaugule Date: Mon, 5 Jun 2023 15:28:07 -0500 Subject: [PATCH 45/71] Modifying fatigue parameter name in two files 10 --- srlife/materials.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/srlife/materials.py b/srlife/materials.py index d93c5d9..44fb73d 100644 --- a/srlife/materials.py +++ b/srlife/materials.py @@ -791,18 +791,21 @@ def load(cls, node): strength = node.find("strength") s_temps = strength.find("temperatures") svals = strength.find("values") + m = node.find("modulus") m_temps = m.find("temperatures") mvals = m.find("values") + c_bar = node.find("c_bar") nu = node.find("nu") + Nv = node.find("fatigue_Nv") Nv_temps = Nv.find("temperatures") Nvvals = Nv.find("values") + Bv = node.find("fatigue_Bv") Bv_temps = Bv.find("temperatures") Bvvals = Bv.find("values") - print(Bv_temps.text) return StandardCeramicMaterial( np.array(list(map(float, s_temps.text.strip().split()))), From 8eff51cfbaabc1256ed21cc9562d924d2df6af38 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Mon, 5 Jun 2023 16:44:04 -0500 Subject: [PATCH 46/71] Modifying fatigue parameter name in two files 11 --- srlife/materials.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/srlife/materials.py b/srlife/materials.py index 44fb73d..cbe52fa 100644 --- a/srlife/materials.py +++ b/srlife/materials.py @@ -803,7 +803,7 @@ def load(cls, node): Nv_temps = Nv.find("temperatures") Nvvals = Nv.find("values") - Bv = node.find("fatigue_Bv") + Bv = node.find("fatigue_Nv") Bv_temps = Bv.find("temperatures") Bvvals = Bv.find("values") From 90dcfa39f7301e065be6dbbd5f9277ab28a9dfa2 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Mon, 5 Jun 2023 16:51:30 -0500 Subject: [PATCH 47/71] Modifying fatigue parameter name in two files 12 --- srlife/data/damage/SiC.xml | 6 +++++- srlife/materials.py | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/srlife/data/damage/SiC.xml b/srlife/data/damage/SiC.xml index b044b2f..33591fb 100644 --- a/srlife/data/damage/SiC.xml +++ b/srlife/data/damage/SiC.xml @@ -39,7 +39,11 @@ 298.15 811.15 1089.15 1366.15 - 1275 1275 1850 520 + 56 56 47 38 + diff --git a/srlife/materials.py b/srlife/materials.py index cbe52fa..44fb73d 100644 --- a/srlife/materials.py +++ b/srlife/materials.py @@ -803,7 +803,7 @@ def load(cls, node): Nv_temps = Nv.find("temperatures") Nvvals = Nv.find("values") - Bv = node.find("fatigue_Nv") + Bv = node.find("fatigue_Bv") Bv_temps = Bv.find("temperatures") Bvvals = Bv.find("values") From a9fdb6f6a932ba57f09e917d3e1849791fc7ea9c Mon Sep 17 00:00:00 2001 From: pschaugule Date: Mon, 5 Jun 2023 17:04:12 -0500 Subject: [PATCH 48/71] Modifying fatigue parameter name in two files 13 --- srlife/data/damage/SiC.xml | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/srlife/data/damage/SiC.xml b/srlife/data/damage/SiC.xml index 33591fb..57a8151 100644 --- a/srlife/data/damage/SiC.xml +++ b/srlife/data/damage/SiC.xml @@ -11,8 +11,6 @@ 1.5 0.16 - 298.15 811.15 1089.15 1366.15 30 30 30 30 @@ -38,12 +36,8 @@ 56 56 47 38 - 298.15 811.15 1089.15 1366.15 - 56 56 47 38 - - + From 33ac4ea08e7e4edc28e7812e4ae2ae992f31915f Mon Sep 17 00:00:00 2001 From: pschaugule Date: Mon, 5 Jun 2023 17:25:47 -0500 Subject: [PATCH 49/71] Modifying fatigue parameter name in two files 14 --- srlife/materials.py | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/srlife/materials.py b/srlife/materials.py index 44fb73d..3bacfcd 100644 --- a/srlife/materials.py +++ b/srlife/materials.py @@ -715,9 +715,9 @@ def __init__( c_bar, nu, Nv_temperatures, - fatigue_Nv, + Nv, Bv_temperatures, - fatigue_Bv, + Bv, *args, **kwargs ): @@ -732,11 +732,11 @@ def __init__( self.C = c_bar self.nu_val = nu self.Nv_temperatures = Nv_temperatures - self.Nvvals = fatigue_Nv - self.Nv = inter.interp1d(Nv_temperatures, fatigue_Nv) + self.Nvvals = Nv + self.Nv = inter.interp1d(Nv_temperatures, Nv) self.Bv_temperatures = Bv_temperatures - self.Bvvals = fatigue_Bv - self.Bv = inter.interp1d(Bv_temperatures, fatigue_Bv) + self.Bvvals = Bv + self.Bv = inter.interp1d(Bv_temperatures, Bv) def strength(self, T): """ @@ -816,10 +816,8 @@ def load(cls, node): float(nu.text), np.array(list(map(float, Nv_temps.text.strip().split()))), np.array(list(map(float, Nvvals.text.strip().split()))), - np.array(list(map(float, Bv_temps.text.strip().split()))), + np.array(list(map(float, Bv_temps.strip().split()))), np.array(list(map(float, Bvvals.text.strip().split()))), - # float(Nv.text), - # float(Bv.text), ) def save(self, fname, modelname): From 6e4ba4601b5e14208bb7ba805ee8399083db4550 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Tue, 6 Jun 2023 08:26:22 -0500 Subject: [PATCH 50/71] Modifying fatigue parameter name in two files 15 --- srlife/materials.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/srlife/materials.py b/srlife/materials.py index 3bacfcd..41b31c4 100644 --- a/srlife/materials.py +++ b/srlife/materials.py @@ -816,7 +816,7 @@ def load(cls, node): float(nu.text), np.array(list(map(float, Nv_temps.text.strip().split()))), np.array(list(map(float, Nvvals.text.strip().split()))), - np.array(list(map(float, Bv_temps.strip().split()))), + np.array(list(map(float, Bv_temps.text.strip().split()))), np.array(list(map(float, Bvvals.text.strip().split()))), ) From 961a9f6c40f32d715eba1d72e55c00b922cd71b2 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Tue, 6 Jun 2023 09:21:27 -0500 Subject: [PATCH 51/71] Modifying fatigue parameter name in two files 16 --- srlife/materials.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/srlife/materials.py b/srlife/materials.py index 41b31c4..304a014 100644 --- a/srlife/materials.py +++ b/srlife/materials.py @@ -853,9 +853,9 @@ def save(self, fname, modelname): Nvvals.text = " ".join(map(str, self.Nvvals)) Bv = ET.SubElement(base, "fatigue_Bv") - Bvtemps = ET.SubElement(Nv, "temperatures") + Bvtemps = ET.SubElement(Bv, "temperatures") Bvtemps.text = " ".join(map(str, self.Bv_temperatures)) - Bvvals = ET.SubElement(base, "Bv") + Bvvals = ET.SubElement(Bv, "values") Bvvals.text = " ".join(map(str, self.Bvvals)) tree = ET.ElementTree(element=root) From bcce0aad268a841d7bc377d24922fcbe281690dd Mon Sep 17 00:00:00 2001 From: pschaugule Date: Wed, 21 Jun 2023 09:48:33 -0500 Subject: [PATCH 52/71] pylint check on --- .github/workflows/formatting.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/formatting.yml b/.github/workflows/formatting.yml index 4d57d1c..bb531b3 100644 --- a/.github/workflows/formatting.yml +++ b/.github/workflows/formatting.yml @@ -7,5 +7,5 @@ jobs: - uses: actions/checkout@v2 - run: sudo apt-get install python3-setuptools python3-pip - run: pip3 install --user -r requirements.txt - # - run: pylint srlife + - run: pylint srlife - run: black --check srlife test From c7c7aec699eeb712b86e979777f794deeb90beee Mon Sep 17 00:00:00 2001 From: pschaugule Date: Wed, 21 Jun 2023 10:04:01 -0500 Subject: [PATCH 53/71] pylint check on:damage file modified 1 --- srlife/damage.py | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/srlife/damage.py b/srlife/damage.py index 54f2745..224d406 100644 --- a/srlife/damage.py +++ b/srlife/damage.py @@ -4,9 +4,6 @@ creep-fatigue damage given completely-solved tube results and damage material properties """ -from scipy import integrate - -# from scipy.integrate import fixed_quad, quadrature from srlife import receiver import numpy as np @@ -151,7 +148,8 @@ def tube_log_reliability(self, tube, material, receiver, time): # Figure out the number of repetitions of the load cycle if receiver.days != 1: raise RuntimeError( - "Time dependent reliability requires the load cycle be a single, representative cycle" + "Time dependent reliability requires the load cycle" + "be a single, representative cycle" ) # Do it this way so we can vectorize @@ -367,9 +365,6 @@ def calculate_flattened_eq_stress( dbeta: increment of angle beta to be used in evaluating integral """ - # Principal stresses - pstress = self.calculate_principal_stress(mandel_stress) - # Material parameters self.temperatures = temperatures self.material = material @@ -745,9 +740,6 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): # Temperature average values mavg = np.mean(mvals, axis=0) - # Material parameters - nu = np.mean(material.nu(temperatures), axis=0) - # Evaluating integral for kbar while suppressing warning given when # negative numbers are raised to rational numbers with np.errstate(invalid="ignore"): @@ -891,9 +883,6 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): # Temperature average values mavg = np.mean(mvals, axis=0) - # Material parameters - nu = np.mean(material.nu(temperatures), axis=0) - # Calculating kbar with np.errstate(invalid="ignore"): integral2 = 2 * ( @@ -954,7 +943,6 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): # Material parameters nu = np.mean(material.nu(temperatures), axis=0) - cbar = np.mean(material.c_bar(temperatures), axis=0) # Evaluating integral for kbar while suppressing warning given when # negative numbers are raised to rational numbers @@ -1029,7 +1017,6 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): mavg = np.mean(mvals, axis=0) # Material parameters - nu = np.mean(material.nu(temperatures), axis=0) cbar = np.mean(material.c_bar(temperatures), axis=0) # Evaluating integral for kbar while suppressing warning given when From c34a5aa92b031e8047faa5a24f4a49d69f665dc7 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Wed, 21 Jun 2023 10:15:43 -0500 Subject: [PATCH 54/71] pylint check on:damage file modified 2 --- srlife/damage.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/srlife/damage.py b/srlife/damage.py index 224d406..a207fa2 100644 --- a/srlife/damage.py +++ b/srlife/damage.py @@ -4,13 +4,13 @@ creep-fatigue damage given completely-solved tube results and damage material properties """ -from srlife import receiver - import numpy as np import numpy.linalg as la import scipy.optimize as opt import multiprocess +from srlife import receiver + class WeibullFailureModel: """Parent class for time independent Weibull failure models From 8d0252fe2ffe771cc8fa2cf76eae8cc7aafe8856 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Wed, 21 Jun 2023 10:25:21 -0500 Subject: [PATCH 55/71] pylint check off --- .github/workflows/formatting.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/formatting.yml b/.github/workflows/formatting.yml index bb531b3..4d57d1c 100644 --- a/.github/workflows/formatting.yml +++ b/.github/workflows/formatting.yml @@ -7,5 +7,5 @@ jobs: - uses: actions/checkout@v2 - run: sudo apt-get install python3-setuptools python3-pip - run: pip3 install --user -r requirements.txt - - run: pylint srlife + # - run: pylint srlife - run: black --check srlife test From 1baadac100ca7d24715048b36dd43b3b2d86ca7a Mon Sep 17 00:00:00 2001 From: pschaugule Date: Mon, 26 Jun 2023 08:35:34 -0500 Subject: [PATCH 56/71] Updated damage file PR 1 --- .../ceramic-receiver/calculate_reliability.py | 14 +- srlife/damage.py | 354 +++++++++--------- srlife/materials.py | 2 +- 3 files changed, 193 insertions(+), 177 deletions(-) diff --git a/examples/ceramic-receiver/calculate_reliability.py b/examples/ceramic-receiver/calculate_reliability.py index b49e0bc..b67530a 100644 --- a/examples/ceramic-receiver/calculate_reliability.py +++ b/examples/ceramic-receiver/calculate_reliability.py @@ -48,6 +48,8 @@ def sample_parameters(): params["system"]["miter"] = 10 params["system"]["verbose"] = False + params["damage"]["shear_sensitive"] = True + # How to extrapolate damage forward in time based on the cycles provided # Options: # "lump" = D_future = sum(D_simulated) / N * days @@ -76,12 +78,14 @@ def sample_parameters(): # Damage model to use in calculating life # damage_model = damage.SMMModelPennyShapedFlaw(params["damage"]) damage_models = [ - # damage.PIAModel(params["damage"]), - # damage.WNTSAModel(params["damage"]), - # damage.MTSModelGriffithFlaw(params["damage"]), damage.MTSModelPennyShapedFlaw(params["damage"]), - # damage.CSEModelGriffithFlaw(params["damage"]), damage.CSEModelPennyShapedFlaw(params["damage"]), + damage.PIAModel(params["damage"]), + damage.WNTSAModel(params["damage"]), + damage.MTSModelGriffithFlaw(params["damage"]), + damage.MTSModelPennyShapedFlaw(params["damage"]), + damage.CSEModelGriffithFlaw(params["damage"]), + damage.CSEModelPennyShapedFlaw(params["damage"]), damage.SMMModelGriffithFlaw(params["damage"]), - # damage.SMMModelPennyShapedFlaw(params["damage"]) + damage.SMMModelPennyShapedFlaw(params["damage"]), ] # Load the materials diff --git a/srlife/damage.py b/srlife/damage.py index a207fa2..bef061d 100644 --- a/srlife/damage.py +++ b/srlife/damage.py @@ -21,6 +21,8 @@ class WeibullFailureModel: element log reliabilities from respective Weibull failure model """ + tolerance = 1.0e-16 + def __init__(self, pset, *args, cares_cutoff=True): """Initialize the Weibull Failure Model @@ -29,6 +31,7 @@ def __init__(self, pset, *args, cares_cutoff=True): high compressive stresses """ self.cares_cutoff = cares_cutoff + self.shear_sensitive = pset.get_default("shear_sensitive", True) def calculate_principal_stress(self, stress): """ @@ -60,7 +63,16 @@ def calculate_principal_stress(self, stress): for a, b in grp: tensor[..., a, b] = stress[..., i] / m - return la.eigvalsh(tensor) + # return la.eigvalsh(tensor) + pstress = la.eigvalsh(tensor) + + if self.cares_cutoff: + pmax = np.max(pstress, axis=2) + pmin = np.min(pstress, axis=2) + remove = np.abs(pmin / (pmax + self.tolerance)) > 3.0 + pstress[remove] = 0.0 + + return pstress def determine_reliability( self, receiver, material, time, nthreads=1, decorator=lambda x, n: x @@ -224,11 +236,11 @@ def calculate_normal_stress(self, mandel_stress): pstress = self.calculate_principal_stress(mandel_stress) # CARES/LIFE cutoff - if self.cares_cutoff: - pmax = np.max(pstress, axis=2) - pmin = np.min(pstress, axis=2) - remove = np.abs(pmin / (pmax + 1.0e-16)) > 3.0 - pstress[remove] = 0.0 + # if self.cares_cutoff: + # pmax = np.max(pstress, axis=2) + # pmin = np.min(pstress, axis=2) + # remove = np.abs(pmin / (pmax + self.tolerance)) > 3.0 + # pstress[remove] = 0.0 # Normal stress return ( @@ -287,11 +299,11 @@ def calculate_normal_stress(self, mandel_stress): pstress = self.calculate_principal_stress(mandel_stress) # CARES/LIFE cutoff - if self.cares_cutoff: - pmax = np.max(pstress, axis=2) - pmin = np.min(pstress, axis=2) - remove = np.abs(pmin / (pmax + 1.0e-16)) > 3.0 - pstress[remove] = 0.0 + # if self.cares_cutoff: + # pmax = np.max(pstress, axis=2) + # pmin = np.min(pstress, axis=2) + # remove = np.abs(pmin / (pmax + self.tolerance)) > 3.0 + # pstress[remove] = 0.0 # Normal stress return ( @@ -308,11 +320,11 @@ def calculate_total_stress(self, mandel_stress): pstress = self.calculate_principal_stress(mandel_stress) # CARES/LIFE cutoff - if self.cares_cutoff: - pmax = np.max(pstress, axis=2) - pmin = np.min(pstress, axis=2) - remove = np.abs(pmin / (pmax + 1.0e-16)) > 3.0 - pstress[remove] = 0.0 + # if self.cares_cutoff: + # pmax = np.max(pstress, axis=2) + # pmin = np.min(pstress, axis=2) + # remove = np.abs(pmin / (pmax + self.tolerance)) > 3.0 + # pstress[remove] = 0.0 # Total stress return np.sqrt( @@ -332,8 +344,7 @@ def calculate_shear_stress(self, mandel_stress): sigma = self.calculate_total_stress(mandel_stress) # Shear stress - with np.errstate(invalid="ignore"): - return np.sqrt(sigma**2 - sigma_n**2) + return np.sqrt(sigma**2 - sigma_n**2) def calculate_flattened_eq_stress( self, @@ -391,16 +402,16 @@ def calculate_flattened_eq_stress( if np.all(time == 0): sigma_e_0 = sigma_e else: - # Suppressing warning given when negative numbers are raised to rational numbers - with np.errstate(invalid="ignore"): - g = ( - np.trapz( - (sigma_e / sigma_e_max + 1.0e-14) ** Nvavg[..., None, None], - time, - axis=0, - ) - / time[-1] + sigma_e[sigma_e < 0] = 0 + g = ( + np.trapz( + (sigma_e / (sigma_e_max + self.tolerance)) + ** Nvavg[..., None, None], + time, + axis=0, ) + / time[-1] + ) # Time dependent equivalent stress sigma_e_0 = ( @@ -411,23 +422,19 @@ def calculate_flattened_eq_stress( + (sigma_e_max ** (Nvavg[..., None, None] - 2)) ) ** (1 / (Nvavg[..., None, None] - 2)) - # Suppressing warning given when negative numbers are raised to rational numbers - with np.errstate(invalid="ignore"): - # Defining area integral element wise - integral = ( - (sigma_e_0 ** mavg[..., None, None]) - * np.sin(self.A) - * self.dalpha - * self.dbeta - ) + # Defining area integral element wise + integral = ( + (sigma_e_0 ** mavg[..., None, None]) + * np.sin(self.A) + * self.dalpha + * self.dbeta + ) # Flatten the last axis and calculate the mean of the positive values along that axis flat = integral.reshape(integral.shape[:-2] + (-1,)) - # Suppressing warning to ignoring initial NaN values - with np.errstate(invalid="ignore"): - # Summing over area integral elements ignoring NaN values - flat = np.nansum(flat, axis=-1) + # Summing over area integral elements ignoring NaN values + flat = np.nansum(flat, axis=-1) return flat def calculate_element_log_reliability( @@ -460,9 +467,9 @@ def calculate_element_log_reliability( mavg = np.mean(mvals, axis=0) kavg = np.mean(kvals, axis=0) - shear_sensitive = True + # shear_sensitive = True - if shear_sensitive == True: + if self.shear_sensitive == True: kbar = self.calculate_kbar( self.temperatures, self.material, self.A, self.dalpha, self.dbeta ) @@ -517,11 +524,11 @@ def calculate_element_log_reliability( pstress = self.calculate_principal_stress(mandel_stress) # CARES/LIFE cutoff - if self.cares_cutoff: - pmax = np.max(pstress, axis=2) - pmin = np.min(pstress, axis=2) - remove = np.abs(pmin / (pmax + 1.0e-16)) > 3.0 - pstress[remove] = 0.0 + # if self.cares_cutoff: + # pmax = np.max(pstress, axis=2) + # pmin = np.min(pstress, axis=2) + # remove = np.abs(pmin / (pmax + self.tolerance)) > 3.0 + # pstress[remove] = 0.0 # Material parameters svals = material.strength(temperatures) @@ -591,11 +598,11 @@ def calculate_avg_normal_stress( pstress = self.calculate_principal_stress(mandel_stress) # CARES/LIFE cutoff - if self.cares_cutoff: - pmax = np.max(pstress, axis=2) - pmin = np.min(pstress, axis=2) - remove = np.abs(pmin / (pmax + 1.0e-16)) > 3.0 - pstress[remove] = 0.0 + # if self.cares_cutoff: + # pmax = np.max(pstress, axis=2) + # pmin = np.min(pstress, axis=2) + # remove = np.abs(pmin / (pmax + self.tolerance)) > 3.0 + # pstress[remove] = 0.0 # Material parameters self.temperatures = temperatures @@ -627,7 +634,8 @@ def calculate_avg_normal_stress( else: g = ( np.trapz( - (sigma_n / (sigma_n_max + 1.0e-14)) ** Nvavg[..., None, None], + (sigma_n / (sigma_n_max + self.tolerance)) + ** Nvavg[..., None, None], time, axis=0, ) @@ -643,21 +651,18 @@ def calculate_avg_normal_stress( + (sigma_n_max ** (Nvavg[..., None, None] - 2)) ) ** (1 / (Nvavg[..., None, None] - 2)) - with np.errstate(invalid="ignore"): - integral = ( - (sigma_n_0 ** mavg[..., None, None]) - * np.sin(self.A) - * self.dalpha - * self.dbeta - ) / (4 * np.pi) + integral = ( + (sigma_n_0 ** mavg[..., None, None]) + * np.sin(self.A) + * self.dalpha + * self.dbeta + ) / (4 * np.pi) # Flatten the last axis and calculate the mean of the positive values along that axis flat = integral.reshape(integral.shape[:-2] + (-1,)) - # Suppressing warning to ignoring initial NaN values - with np.errstate(invalid="ignore"): - # Average stress from summing while ignoring NaN values - return np.nansum(np.where(flat >= 0.0, flat, np.nan), axis=-1) + # Average stress from summing while ignoring NaN values + return np.nansum(np.where(flat >= 0.0, flat, np.nan), axis=-1) def calculate_element_log_reliability( self, time, mandel_stress, temperatures, volumes, material, tot_time @@ -687,6 +692,7 @@ def calculate_element_log_reliability( mavg = np.mean(mvals, axis=0) kavg = np.mean(kvals, axis=0) + # Polyaxial Batdorf crack density coefficient kpvals = (2 * mavg + 1) * kavg # Average normal tensile stress raied to exponent mv @@ -740,27 +746,25 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): # Temperature average values mavg = np.mean(mvals, axis=0) - # Evaluating integral for kbar while suppressing warning given when - # negative numbers are raised to rational numbers - with np.errstate(invalid="ignore"): - integral2 = 2 * ( + # Evaluating integral for kbar + integral2 = 2 * ( + ( ( - ( - 0.5 - * ( - ((np.cos(self.A)) ** 2) - + np.sqrt( - ((np.cos(self.A)) ** 4) - + (((np.sin(self.A)) ** 2) * ((np.cos(self.A)) ** 2)) - ) + 0.5 + * ( + ((np.cos(self.A)) ** 2) + + np.sqrt( + ((np.cos(self.A)) ** 4) + + (((np.sin(self.A)) ** 2) * ((np.cos(self.A)) ** 2)) ) ) - ** mavg[..., None, None] ) - * np.sin(self.A) - * self.dalpha - * self.dbeta + ** mavg[..., None, None] ) + * np.sin(self.A) + * self.dalpha + * self.dbeta + ) kbar = np.pi / np.sum(integral2, axis=(1, 2)) return kbar @@ -800,8 +804,11 @@ def calculate_eq_stress(self, mandel_stress, temperatures, material): def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): """ Calculate the evaluating normalized crack density coefficient (kbar) - using the Weibull scale parameter (svals), Weibull modulus (mvals), - poisson ratio (nu) + + Parameters: + temperatures: element temperatures + material: material model object with required data that includes + Weibull modulus (mvals), poisson ratio (nu) """ self.temperatures = temperatures @@ -816,30 +823,28 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): # Material parameters nu = np.mean(material.nu(temperatures), axis=0) - # Evaluating integral for kbar while suppressing warning given when - # negative numbers are raised to rational numbers - with np.errstate(invalid="ignore"): - integral2 = 2 * ( + # Evaluating integral for kbar + integral2 = 2 * ( + ( ( - ( - 0.5 - * ( - ((np.cos(self.A)) ** 2) - + np.sqrt( - ((np.cos(self.A)) ** 4) - + ( - ((np.sin(2 * self.A)) ** 2) - / (2 - (nu[..., None, None] ** 2)) - ) + 0.5 + * ( + ((np.cos(self.A)) ** 2) + + np.sqrt( + ((np.cos(self.A)) ** 4) + + ( + ((np.sin(2 * self.A)) ** 2) + / (2 - (nu[..., None, None] ** 2)) ) ) ) - ** mavg[..., None, None] ) - * np.sin(self.A) - * self.dalpha - * self.dbeta + ** mavg[..., None, None] ) + * np.sin(self.A) + * self.dalpha + * self.dbeta + ) kbar = np.pi / np.sum(integral2, axis=(1, 2)) return kbar @@ -870,8 +875,11 @@ def calculate_eq_stress(self, mandel_stress, temperatures, material): def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): """ Calculate the evaluating normalized crack density coefficient (kbar) - using the Weibull scale parameter (svals), Weibull modulus (mvals), - poisson ratio (nu) + + Parameters: + temperatures: element temperatures + material: material model object with required data that includes + Weibull modulus (mvals) """ self.temperatures = temperatures @@ -883,14 +891,13 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): # Temperature average values mavg = np.mean(mvals, axis=0) - # Calculating kbar - with np.errstate(invalid="ignore"): - integral2 = 2 * ( - ((np.cos(self.A)) ** mavg[..., None, None]) - * np.sin(self.A) - * self.dalpha - * self.dbeta - ) + # Evaluating integral for kbar + integral2 = 2 * ( + ((np.cos(self.A)) ** mavg[..., None, None]) + * np.sin(self.A) + * self.dalpha + * self.dbeta + ) kbar = np.pi / np.sum(integral2, axis=(1, 2)) return kbar @@ -928,8 +935,11 @@ def calculate_eq_stress(self, mandel_stress, temperatures, material): def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): """ Calculate the evaluating normalized crack density coefficient (kbar) - using the Weibull scale parameter (svals), Weibull modulus (mvals), - poisson ratio (nu) + + Parameters: + temperatures: element temperatures + material: material model object with required data that includes + Weibull modulus (mvals), poisson ratio (nu) """ self.temperatures = temperatures @@ -944,26 +954,24 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): # Material parameters nu = np.mean(material.nu(temperatures), axis=0) - # Evaluating integral for kbar while suppressing warning given when - # negative numbers are raised to rational numbers - with np.errstate(invalid="ignore"): - integral2 = 2 * ( + # Evaluating integral for kbar + integral2 = 2 * ( + ( ( - ( - np.sqrt( - ((np.cos(self.A)) ** 4) - + ( - ((np.sin(2 * self.A)) ** 2) - / ((2 - nu[..., None, None]) ** 2) - ) + np.sqrt( + ((np.cos(self.A)) ** 4) + + ( + ((np.sin(2 * self.A)) ** 2) + / ((2 - nu[..., None, None]) ** 2) ) ) - ** mavg[..., None, None] ) - * np.sin(self.A) - * self.dalpha - * self.dbeta + ** mavg[..., None, None] ) + * np.sin(self.A) + * self.dalpha + * self.dbeta + ) kbar = np.pi / np.sum(integral2, axis=(1, 2)) return kbar @@ -983,7 +991,7 @@ def calculate_eq_stress(self, mandel_stress, temperatures, material): Calculate the equivalent stresses from the normal and shear stresses Additional parameters: - cbar: Shetty model emperical constant (cbar) + cbar: Shetty model empirical constant (cbar) """ # Material parameters @@ -1003,8 +1011,12 @@ def calculate_eq_stress(self, mandel_stress, temperatures, material): def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): """ Calculate the evaluating normalized crack density coefficient (kbar) - using the Weibull scale parameter (svals), Weibull modulus (mvals), - poisson ratio (nu) and Shetty model emperical constant (cbar) + + Parameters: + temperatures: element temperatures + material: material model object with required data that includes + Weibull modulus (mvals), poisson ratio (nu), + Shetty model empirical constant (cbar) """ self.temperatures = temperatures @@ -1019,30 +1031,28 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): # Material parameters cbar = np.mean(material.c_bar(temperatures), axis=0) - # Evaluating integral for kbar while suppressing warning given when - # negative numbers are raised to rational numbers - with np.errstate(invalid="ignore"): - integral2 = 2 * ( + # Evaluating integral for kbar + integral2 = 2 * ( + ( ( - ( - 0.5 - * ( - ((np.cos(self.A)) ** 2) - + np.sqrt( - ((np.cos(self.A)) ** 4) - + ( - ((np.sin(2 * self.A)) ** 2) - / (cbar[..., None, None] ** 2) - ) + 0.5 + * ( + ((np.cos(self.A)) ** 2) + + np.sqrt( + ((np.cos(self.A)) ** 4) + + ( + ((np.sin(2 * self.A)) ** 2) + / (cbar[..., None, None] ** 2) ) ) ) - ** mavg[..., None, None] ) - * np.sin(self.A) - * self.dalpha - * self.dbeta + ** mavg[..., None, None] ) + * np.sin(self.A) + * self.dalpha + * self.dbeta + ) kbar = np.pi / np.sum(integral2, axis=(1, 2)) return kbar @@ -1063,7 +1073,7 @@ def calculate_eq_stress(self, mandel_stress, temperatures, material): Additional parameters: nu: Poisson ratio - cbar: Shetty model emperical constant (cbar) + cbar: Shetty model empirical constant (cbar) """ # Material parameters @@ -1088,8 +1098,12 @@ def calculate_eq_stress(self, mandel_stress, temperatures, material): def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): """ Calculate the evaluating normalized crack density coefficient (kbar) - using the Weibull scale parameter (svals), Weibull modulus (mvals), - poisson ratio (nu) and Shetty model emperical constant (cbar) + + Parameters: + temperatures: element temperatures + material: material model object with required data that includes + Weibull modulus (mvals), poisson ratio (nu), + Shetty model empirical constant (cbar) """ self.temperatures = temperatures @@ -1105,33 +1119,31 @@ def calculate_kbar(self, temperatures, material, A, dalpha, dbeta): nu = np.mean(material.nu(temperatures), axis=0) cbar = np.mean(material.c_bar(temperatures), axis=0) - # Evaluating integral for kbar while suppressing warning given when - # negative numbers are raised to rational numbers - with np.errstate(invalid="ignore"): - integral2 = 2 * ( + # Evaluating integral for kbar + integral2 = 2 * ( + ( ( - ( - 0.5 - * ( - ((np.cos(self.A)) ** 2) - + np.sqrt( - ((np.cos(self.A)) ** 4) - + ( - (4 * ((np.sin(2 * self.A)) ** 2)) - / ( - (cbar[..., None, None] ** 2) - * ((nu[..., None, None] - 2) ** 2) - ) + 0.5 + * ( + ((np.cos(self.A)) ** 2) + + np.sqrt( + ((np.cos(self.A)) ** 4) + + ( + (4 * ((np.sin(2 * self.A)) ** 2)) + / ( + (cbar[..., None, None] ** 2) + * ((nu[..., None, None] - 2) ** 2) ) ) ) ) - ** mavg[..., None, None] ) - * np.sin(self.A) - * self.dalpha - * self.dbeta + ** mavg[..., None, None] ) + * np.sin(self.A) + * self.dalpha + * self.dbeta + ) kbar = np.pi / np.sum(integral2, axis=(1, 2)) return kbar diff --git a/srlife/materials.py b/srlife/materials.py index 304a014..ed21afc 100644 --- a/srlife/materials.py +++ b/srlife/materials.py @@ -703,7 +703,7 @@ class StandardCeramicMaterial: 3) Constant c_bar parameter 4) Constant Poisson's ratio 5) Fatigue exponent parameter Nv depends on temperature - 6) Faitgue parameter Bv depends on temperature + 6) Fatigue parameter Bv depends on temperature """ def __init__( From 6e509b62d9934c02b72f295522b6f4a8d62915f0 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Mon, 26 Jun 2023 08:59:59 -0500 Subject: [PATCH 57/71] Updated damage file PR 2 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 706dd78..1724ee7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,4 +15,4 @@ dill parameterized black jax[cpu] -absl-py +# absl-py From 2b53c39c7849385017465eee0fae0b0a3b74a51e Mon Sep 17 00:00:00 2001 From: pschaugule Date: Mon, 26 Jun 2023 09:06:34 -0500 Subject: [PATCH 58/71] Updated damage file PR 3 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 1724ee7..706dd78 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,4 +15,4 @@ dill parameterized black jax[cpu] -# absl-py +absl-py From 98ca3d2389bfb47d8fcdca68ff63c07e63dc1066 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Mon, 26 Jun 2023 09:57:01 -0500 Subject: [PATCH 59/71] Updated damage file PR 4 --- examples/ceramic-receiver/calculate_reliability.py | 4 ---- srlife/materials.py | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/examples/ceramic-receiver/calculate_reliability.py b/examples/ceramic-receiver/calculate_reliability.py index b67530a..441e55f 100644 --- a/examples/ceramic-receiver/calculate_reliability.py +++ b/examples/ceramic-receiver/calculate_reliability.py @@ -76,7 +76,6 @@ def sample_parameters(): # Define the system solver to use in solving the coupled structural system system_solver = system.SpringSystemSolver(params["system"]) # Damage model to use in calculating life - # damage_model = damage.SMMModelPennyShapedFlaw(params["damage"]) damage_models = [ damage.PIAModel(params["damage"]), damage.WNTSAModel(params["damage"]), @@ -130,9 +129,6 @@ def sample_parameters(): print("Minimum tube reliabilities:") print(min(reliability["tube_reliability"])) - # print("Overall structure reliability:") - # print(reliability["overall_reliability"]) - file.write("model = %s \n" % (damage_model)) file.write( "minimum tube reliability = %f \n" % (min(reliability["tube_reliability"])) diff --git a/srlife/materials.py b/srlife/materials.py index ed21afc..304a014 100644 --- a/srlife/materials.py +++ b/srlife/materials.py @@ -703,7 +703,7 @@ class StandardCeramicMaterial: 3) Constant c_bar parameter 4) Constant Poisson's ratio 5) Fatigue exponent parameter Nv depends on temperature - 6) Fatigue parameter Bv depends on temperature + 6) Faitgue parameter Bv depends on temperature """ def __init__( From 54d13d82c8fdc96dad685d3bf277780647a04abb Mon Sep 17 00:00:00 2001 From: Mark Messner Date: Mon, 26 Jun 2023 10:30:53 -0500 Subject: [PATCH 60/71] Pin scipy and pylint --- .github/workflows/formatting.yml | 2 +- requirements.txt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/formatting.yml b/.github/workflows/formatting.yml index 4d57d1c..bb531b3 100644 --- a/.github/workflows/formatting.yml +++ b/.github/workflows/formatting.yml @@ -7,5 +7,5 @@ jobs: - uses: actions/checkout@v2 - run: sudo apt-get install python3-setuptools python3-pip - run: pip3 install --user -r requirements.txt - # - run: pylint srlife + - run: pylint srlife - run: black --check srlife test diff --git a/requirements.txt b/requirements.txt index 706dd78..9998a31 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,10 +1,10 @@ numpy -scipy +scipy==1.9.2 h5py vtk nose matplotlib -pylint +pylint==2.15.5 neml scikit-fem meshio From a0da5cbc045096aaac73255a991500e451834b10 Mon Sep 17 00:00:00 2001 From: Mark Messner Date: Mon, 26 Jun 2023 10:39:09 -0500 Subject: [PATCH 61/71] Updated lint file --- .pylintrc | 83 +------------------------------------------------------ 1 file changed, 1 insertion(+), 82 deletions(-) diff --git a/.pylintrc b/.pylintrc index 4e45e90..71f263d 100644 --- a/.pylintrc +++ b/.pylintrc @@ -60,17 +60,7 @@ confidence= # --enable=similarities". If you want to run only the classes checker, but have # no Warning level messages displayed, use "--disable=all --enable=classes # --disable=W". -disable=print-statement, - parameter-unpacking, - unpacking-in-except, - old-raise-syntax, - backtick, - long-suffix, - old-ne-operator, - old-octal-literal, - import-star-module-level, - non-ascii-bytes-literal, - raw-checker-failed, +disable=raw-checker-failed, bad-inline-option, locally-disabled, file-ignored, @@ -78,75 +68,11 @@ disable=print-statement, useless-suppression, deprecated-pragma, use-symbolic-message-instead, - apply-builtin, - basestring-builtin, - buffer-builtin, - cmp-builtin, - coerce-builtin, - execfile-builtin, - file-builtin, - long-builtin, - raw_input-builtin, - reduce-builtin, - standarderror-builtin, - unicode-builtin, - xrange-builtin, - coerce-method, - delslice-method, - getslice-method, - setslice-method, - no-absolute-import, - old-division, - dict-iter-method, - dict-view-method, - next-method-called, - metaclass-assignment, - indexing-exception, - raising-string, - reload-builtin, - oct-method, - hex-method, - nonzero-method, - cmp-method, - input-builtin, - round-builtin, - intern-builtin, - unichr-builtin, - map-builtin-not-iterating, - zip-builtin-not-iterating, - range-builtin-not-iterating, - filter-builtin-not-iterating, - using-cmp-argument, - eq-without-hash, - div-method, - idiv-method, - rdiv-method, - exception-message-attribute, - invalid-str-codec, - sys-max-int, - bad-python3-import, - deprecated-string-function, - deprecated-str-translate-call, - deprecated-itertools-function, - deprecated-types-field, - next-method-defined, - dict-items-not-iterating, - dict-keys-not-iterating, - dict-values-not-iterating, - deprecated-operator-function, - deprecated-urllib-function, - xreadlines-attribute, - deprecated-sys-function, - exception-escape, - comprehension-escape, trailing-whitespace, - bad-whitespace, - bad-continuation, attribute-defined-outside-init, no-else-return, invalid-name, arguments-differ, - no-self-use, too-many-instance-attributes, unused-argument, assignment-from-no-return, @@ -224,13 +150,6 @@ max-line-length=100 # Maximum number of lines in a module. max-module-lines=1200 -# List of optional constructs for which whitespace checking is disabled. `dict- -# separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}. -# `trailing-comma` allows a space between comma and closing bracket: (a, ). -# `empty-line` allows space-only lines. -no-space-check=trailing-comma, - dict-separator - # Allow the body of a class to be on the same line as the declaration if body # contains single statement. single-line-class-stmt=no From cc4aaa962ab799c0a479a7b533bf86ef556f3f95 Mon Sep 17 00:00:00 2001 From: pschaugule <98907569+pschaugule@users.noreply.github.com> Date: Mon, 26 Jun 2023 11:05:20 -0500 Subject: [PATCH 62/71] Update damage.py shear sensitive parameter --- srlife/damage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/srlife/damage.py b/srlife/damage.py index bef061d..4a9a328 100644 --- a/srlife/damage.py +++ b/srlife/damage.py @@ -469,7 +469,7 @@ def calculate_element_log_reliability( # shear_sensitive = True - if self.shear_sensitive == True: + if self.shear_sensitive is True: kbar = self.calculate_kbar( self.temperatures, self.material, self.A, self.dalpha, self.dbeta ) From 622403b22373abc18c9daec8133eff6374453935 Mon Sep 17 00:00:00 2001 From: pschaugule <98907569+pschaugule@users.noreply.github.com> Date: Mon, 26 Jun 2023 11:07:45 -0500 Subject: [PATCH 63/71] Update damage.py pstress deleted --- srlife/damage.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/srlife/damage.py b/srlife/damage.py index 4a9a328..34bbac2 100644 --- a/srlife/damage.py +++ b/srlife/damage.py @@ -594,8 +594,6 @@ def calculate_avg_normal_stress( and fatigue parameters (Bv,Nv) tot_time: total service time used as input to calculate reliability """ - # Principal stresses - pstress = self.calculate_principal_stress(mandel_stress) # CARES/LIFE cutoff # if self.cares_cutoff: From 9f96e916fe737cc2395e659d9927d36cfe72a99c Mon Sep 17 00:00:00 2001 From: pschaugule <98907569+pschaugule@users.noreply.github.com> Date: Mon, 26 Jun 2023 11:22:49 -0500 Subject: [PATCH 64/71] Update damage.py redefining receiver name 1 --- srlife/damage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/srlife/damage.py b/srlife/damage.py index 34bbac2..86e271f 100644 --- a/srlife/damage.py +++ b/srlife/damage.py @@ -75,7 +75,7 @@ def calculate_principal_stress(self, stress): return pstress def determine_reliability( - self, receiver, material, time, nthreads=1, decorator=lambda x, n: x + self, self.receiver, material, time, nthreads=1, decorator=lambda x, n: x ): """ Determine the reliability of the tubes in the receiver by calculating individual From d922dfedea149d7cb6cbab977e17e0f98fbe369c Mon Sep 17 00:00:00 2001 From: pschaugule <98907569+pschaugule@users.noreply.github.com> Date: Mon, 26 Jun 2023 11:37:54 -0500 Subject: [PATCH 65/71] Update damage.py redefining receiver name 2 --- srlife/damage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/srlife/damage.py b/srlife/damage.py index 86e271f..34bbac2 100644 --- a/srlife/damage.py +++ b/srlife/damage.py @@ -75,7 +75,7 @@ def calculate_principal_stress(self, stress): return pstress def determine_reliability( - self, self.receiver, material, time, nthreads=1, decorator=lambda x, n: x + self, receiver, material, time, nthreads=1, decorator=lambda x, n: x ): """ Determine the reliability of the tubes in the receiver by calculating individual From 5b74efc35f4c1096d461af8cdf6aea393a4afe4c Mon Sep 17 00:00:00 2001 From: pschaugule <98907569+pschaugule@users.noreply.github.com> Date: Mon, 26 Jun 2023 11:50:57 -0500 Subject: [PATCH 66/71] Update damage.py receiver module error fixed --- srlife/damage.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/srlife/damage.py b/srlife/damage.py index 34bbac2..9d0ef1d 100644 --- a/srlife/damage.py +++ b/srlife/damage.py @@ -9,9 +9,6 @@ import scipy.optimize as opt import multiprocess -from srlife import receiver - - class WeibullFailureModel: """Parent class for time independent Weibull failure models From 76304299a9c1296afa1d3747d11ed34a62c6b6bc Mon Sep 17 00:00:00 2001 From: pschaugule <98907569+pschaugule@users.noreply.github.com> Date: Mon, 26 Jun 2023 11:58:44 -0500 Subject: [PATCH 67/71] Update materials.py fatigue parameters 1 --- srlife/materials.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/srlife/materials.py b/srlife/materials.py index 304a014..03ce114 100644 --- a/srlife/materials.py +++ b/srlife/materials.py @@ -732,11 +732,11 @@ def __init__( self.C = c_bar self.nu_val = nu self.Nv_temperatures = Nv_temperatures - self.Nvvals = Nv - self.Nv = inter.interp1d(Nv_temperatures, Nv) + self.Nvvals = fatigue_Nv + self.Nv = inter.interp1d(Nv_temperatures, fatigue_Nv) self.Bv_temperatures = Bv_temperatures - self.Bvvals = Bv - self.Bv = inter.interp1d(Bv_temperatures, Bv) + self.Bvvals = fatigue_Bv + self.Bv = inter.interp1d(Bv_temperatures, fatigue_Bv) def strength(self, T): """ From c329a9c62883eb3eefb63e9a6a0b144d5a7ddd02 Mon Sep 17 00:00:00 2001 From: pschaugule <98907569+pschaugule@users.noreply.github.com> Date: Mon, 26 Jun 2023 12:04:35 -0500 Subject: [PATCH 68/71] Update materials.py fatigue parameters 2 --- srlife/materials.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/srlife/materials.py b/srlife/materials.py index 03ce114..36b3000 100644 --- a/srlife/materials.py +++ b/srlife/materials.py @@ -732,11 +732,11 @@ def __init__( self.C = c_bar self.nu_val = nu self.Nv_temperatures = Nv_temperatures - self.Nvvals = fatigue_Nv - self.Nv = inter.interp1d(Nv_temperatures, fatigue_Nv) + self.Nvvals = Nvvals + self.Nv = inter.interp1d(Nv_temperatures, Nvvals) self.Bv_temperatures = Bv_temperatures - self.Bvvals = fatigue_Bv - self.Bv = inter.interp1d(Bv_temperatures, fatigue_Bv) + self.Bvvals = Bvvals + self.Bv = inter.interp1d(Bv_temperatures, Bvvals) def strength(self, T): """ From 351523a9d8e76a283715ec1b0e91ebc809b8cdd1 Mon Sep 17 00:00:00 2001 From: pschaugule <98907569+pschaugule@users.noreply.github.com> Date: Mon, 26 Jun 2023 12:08:04 -0500 Subject: [PATCH 69/71] Update materials.py fatigue parameters 3 --- srlife/materials.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/srlife/materials.py b/srlife/materials.py index 36b3000..8d47d25 100644 --- a/srlife/materials.py +++ b/srlife/materials.py @@ -715,9 +715,9 @@ def __init__( c_bar, nu, Nv_temperatures, - Nv, + Nvvals, Bv_temperatures, - Bv, + Bvvals, *args, **kwargs ): From e0c053c7f42b75e100e95bc45ef6df8a7f766b99 Mon Sep 17 00:00:00 2001 From: pschaugule <98907569+pschaugule@users.noreply.github.com> Date: Mon, 26 Jun 2023 12:14:05 -0500 Subject: [PATCH 70/71] Update materials.py fatigue parameters 4 --- srlife/materials.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/srlife/materials.py b/srlife/materials.py index 8d47d25..7855b33 100644 --- a/srlife/materials.py +++ b/srlife/materials.py @@ -768,13 +768,13 @@ def nu(self, T): else: return self.nu_val * np.ones(T.shape) - def Nv(self, T): + def fatigue_Nv(self, T): """ Fatigue exponent parameter as a function of temperature """ return self.Nv(T) - def Bv(self, T): + def fatigue_Bv(self, T): """ Fatigue parameter as a function of temperature """ From 11aed2f2bd93c9d60f5c05f0e90307d94f18b7d4 Mon Sep 17 00:00:00 2001 From: pschaugule Date: Mon, 26 Jun 2023 13:25:21 -0500 Subject: [PATCH 71/71] damage file formatted using black --- srlife/damage.py | 1 + 1 file changed, 1 insertion(+) diff --git a/srlife/damage.py b/srlife/damage.py index 9d0ef1d..6192277 100644 --- a/srlife/damage.py +++ b/srlife/damage.py @@ -9,6 +9,7 @@ import scipy.optimize as opt import multiprocess + class WeibullFailureModel: """Parent class for time independent Weibull failure models