def strain(radius, phi): A = np.array([[np.cos(phi), -np.sin(phi), 0.0], [np.sin(phi), np.cos(phi), 0.0], [0.000000000, 0.000000000, 1.0]]) mo = np.array([1, 0, 0]) no = np.array([0, 1, 0]) m = np.dot(A, mo) n = np.dot(A, no) nn = sf.sandwich(n, n, Cijkl) nm = sf.sandwich(n, m, Cijkl) nninm = np.dot(np.linalg.inv(nn), nm) nni = np.linalg.inv(nn) T1 = -1.0 / (2 * np.pi * radius) * np.outer(m, np.dot(S, burger)) T2 = 1.0 / (2 * np.pi * radius) * np.outer(n, np.dot(np.dot(nninm, S), burger)) T3 = 1.0 / (2 * np.pi * radius) * np.outer(n, np.dot(np.dot(nni, B), burger)) ux = T1 + T2 + T3 exy = 0.5 * (ux + ux.T) eij = 1.0 * exy # These equations comes from Hirth and Lothe p.476 eq. 13-220 return eij
zi, wi = np.polynomial.legendre.leggauss(nq) def xm(z): x = 0.5 * (2 * np.pi * (z + 1)) return x for i in xrange(nq): x = xm(zi[i]) A = np.array([[np.cos(x), -np.sin(x), 0.0], [np.sin(x), np.cos(x), 0.0], [0.0, 0.0, 1.0]]) mo = np.array([1, 0, 0]) no = np.array([0, 1, 0]) m = np.dot(A, mo) n = np.dot(A, no) mn = sf.sandwich(m, n, Cijkl) nn = sf.sandwich(n, n, Cijkl) nm = sf.sandwich(n, m, Cijkl) mm = sf.sandwich(m, m, Cijkl) Bt = (np.dot(mn, np.dot(np.linalg.inv(nn), nm)) - mm) * wi[i] B = B - Bt / 2 St = np.dot(np.linalg.inv(nn), nm) * wi[i] S = S - St / 2 Qt = np.linalg.inv(nn) * wi[i] Q = Q - Qt / 2 # calculate distortion tensor and then the stress tensor def strain(radius, phi): A = np.array([[np.cos(phi), -np.sin(phi), 0.0], [np.sin(phi), np.cos(phi), 0.0], [0.000000000, 0.000000000, 1.0]]) mo = np.array([1, 0, 0])