From 09bd9058e00b609d8cee2baa8023710ba74e3deb Mon Sep 17 00:00:00 2001 From: Jaron Kent-Dobias Date: Sat, 6 Nov 2021 22:03:34 +0100 Subject: Finished Levenburg-Marquardt for Stokes lines. --- p-spin.hpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'p-spin.hpp') diff --git a/p-spin.hpp b/p-spin.hpp index 50da209..15d2525 100644 --- a/p-spin.hpp +++ b/p-spin.hpp @@ -120,6 +120,29 @@ Tensor ddzDot(const Vector& z, const Vector& dH) { + zT.conjugate().contract(zT.conjugate(), ei).contract(zT.conjugate(), ei) * (2.0 * dH.dot(z) / pow(z², 3)); } +template +Tensor dcdzDot(const Vector& z, const Vector& dH, const Matrix& ddH) { + Tensor zT = Eigen::TensorMap>(z.data(), {z.size()}); + Tensor dHT = Eigen::TensorMap>(dH.data(), {dH.size()}); + Tensor ddHT = Eigen::TensorMap>(ddH.data(), {dH.size(), dH.size()}); + + Matrix I = Matrix::Identity(z.size(), z.size()); + Tensor IT = Eigen::TensorMap>(I.data(), {z.size(), z.size()}); + + Eigen::array, 0> ei = {}; + + Scalar z² = z.squaredNorm(); + + return ddHT.conjugate().contract(zT.conjugate(), ei) / z² + +IT.contract(dHT.conjugate(), ei).shuffle((std::array){0,2,1}) / z² + -zT.contract(dHT.conjugate(), ei).contract(zT.conjugate(), ei) / pow(z², 2) + -ddHT.conjugate().contract(zT, ip00).contract(zT.conjugate(), ei).contract(zT.conjugate(), ei) / pow(z², 2) + -IT.contract(zT.conjugate(), ei) * (dH.dot(z) / pow(z², 2)) + -IT.contract(zT.conjugate(), ei).shuffle((std::array){0,2,1}) * (dH.dot(z) / pow(z², 2)) + +zT.contract(zT.conjugate(), ei).contract(zT.conjugate(), ei) * (2.0 * dH.dot(z) / pow(z², 3)) + ; +} + template Tensor ddzDotConjugate(const Vector& z, const Vector& dH, const Matrix& ddH, const Tensor& dddH) { Tensor zT = Eigen::TensorMap>(z.data(), {z.size()}); -- cgit v1.2.3-54-g00ecf