def computeRotationMatrices(self, numThetaSteps = 10, numPhiSteps = 10): self.thetaList = np.arange(numThetaSteps, dtype = np.float64) / numThetaSteps * m.pi self.phiList = np.arange(numPhiSteps, dtype = np.float64) / numPhiSteps * m.pi self.rotMatrices = np.zeros(shape = (numThetaSteps, numPhiSteps, 3, 3), dtype = np.float64) for i in range(numThetaSteps): for j in range(numPhiSteps): self.rotMatrices[i, j, ...] = STC.getRotationTwoAngleTransf( theta = self.thetaList[i], phi = self.phiList[j])
def scaleStresses(self, k = 2.0): if (self.useCompiledExtensions): # Allocate array for scaled stresses self.stressesScaled = self.stressSeries * 1.0 Mech.scaleStressSeries_MultiaxialDamage(self.stressesScaled, k) else: # Allocate array for scaled stresses self.stressesScaled = self.stressSeries * 0 numSamples = self.stressSeries.shape[0] # Min/max stress ratios V = np.ones(numSamples) for i in range(self.stressSeries.shape[0]): if (np.max(np.abs(self.stressSeries[i, :])) > 1e-8): #sPrincipal = np.zeros((3,), dtype = S.floatT) #sPrincipal = DC.computePrincipalStresses(self.stressSeries[i, :]) sPrincipal = STC.computePrincipalStresses(self.stressSeries[i, :]) if ((sPrincipal[0] <= sPrincipal[1]) and (sPrincipal[1] <= sPrincipal[2])): pass else: print sPrincipal #err = np.abs(np.sum(sPrincipal - sPrincipalSeries[i, :]) / np.sum(sPrincipal)) #if ( err > 1e-8): # print ('Pricipal stresses calculation problem: err = {}, s1 = {}, s2 = {}'.format(err, sPrincipal, sPrincipalSeries[i, :])) # Take the ratio of min/max stress # V = -1: dominating shear stress # V = 0: dominating tension/copression stress # V = 1: hydro-static pressure if (abs(sPrincipal[0]) > abs(sPrincipal[2])): V = sPrincipal[2] / sPrincipal[0] else: V = sPrincipal[0] / sPrincipal[2] # Scale coefficient f = 1 + (1 - k) * V else: f = 1.0 self.stressesScaled[i, :] = self.stressSeries[i, :] * f