From 76e811266099da5ac4b2c97516ae73af0bd63c4b Mon Sep 17 00:00:00 2001 From: James E McClure Date: Fri, 24 Oct 2014 14:54:28 -0400 Subject: [PATCH] Fixed common/pmmc.h: pmmc_CurveCurvature() --- common/pmmc.h | 73 +++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 54 insertions(+), 19 deletions(-) diff --git a/common/pmmc.h b/common/pmmc.h index d7320d97..57815df4 100644 --- a/common/pmmc.h +++ b/common/pmmc.h @@ -4289,7 +4289,7 @@ inline void pmmc_CurveCurvature(DoubleArray &f, DoubleArray &s, DoubleArray &KN, sxz = 0.25*(s(i+1,j,k+1) - s(i+1,j,k-1) - s(i-1,j,k+1) + s(i-1,j,k-1)); syz = 0.25*(s(i,j+1,k+1) - s(i,j+1,k-1) - s(i,j-1,k+1) + s(i,j-1,k-1)); - // Compute the Jacobean matrix for tangent vector +/* // Compute the Jacobean matrix for tangent vector Axx = sxy*fz + sy*fxz - sxz*fy - sz*fxy; Axy = sxz*fx + sz*fxx - sxx*fz - sx*fxz; Axz = sxx*fy + sx*fxy - sxy*fx - sy*fxx; @@ -4299,21 +4299,19 @@ inline void pmmc_CurveCurvature(DoubleArray &f, DoubleArray &s, DoubleArray &KN, Azx = syz*fz + sy*fzz - szz*fy - sz*fyz; Azy = szz*fx + sz*fxz - sxz*fz - sx*fzz; Azz = sxz*fy + sx*fyz - syz*fx - sy*fxz; - +*/ // Normal to solid surface Sx.Corners(i-ic,j-jc,k-kc) = sx; Sy.Corners(i-ic,j-jc,k-kc) = sy; Sz.Corners(i-ic,j-jc,k-kc) = sz; // Compute the tangent vector - Tx.Corners(i-ic,j-jc,k-kc) = sy*fz-sz*fy; - Ty.Corners(i-ic,j-jc,k-kc) = sz*fx-sx*fz; - Tz.Corners(i-ic,j-jc,k-kc) = sx*fy-sy*fx; + norm = sqrt((sy*fz-sz*fy)*(sy*fz-sz*fy)+(sz*fx-sx*fz)*(sz*fx-sx*fz)+(sx*fy-sy*fx)*(sx*fy-sy*fx)); + if (norm == 0.0) norm=1.0; + Tx.Corners(i-ic,j-jc,k-kc) = (sy*fz-sz*fy)/norm; + Ty.Corners(i-ic,j-jc,k-kc) = (sz*fx-sx*fz)/norm; + Tz.Corners(i-ic,j-jc,k-kc) = (sx*fy-sy*fx)/norm; - // Compute the normal - Nx.Corners(i-ic,j-jc,k-kc) = Tx.Corners(i-ic,j-jc,k-kc)*Axx + Ty.Corners(i-ic,j-jc,k-kc)*Ayx + Tz.Corners(i-ic,j-jc,k-kc)*Azx; - Ny.Corners(i-ic,j-jc,k-kc) = Tx.Corners(i-ic,j-jc,k-kc)*Axy + Ty.Corners(i-ic,j-jc,k-kc)*Ayy + Tz.Corners(i-ic,j-jc,k-kc)*Azy; - Nz.Corners(i-ic,j-jc,k-kc) = Tx.Corners(i-ic,j-jc,k-kc)*Axz + Ty.Corners(i-ic,j-jc,k-kc)*Ayz + Tz.Corners(i-ic,j-jc,k-kc)*Azz; } } } @@ -4329,34 +4327,65 @@ inline void pmmc_CurveCurvature(DoubleArray &f, DoubleArray &s, DoubleArray &KN, Ny.assign(); Nz.assign(); + double tax,tay,taz,tbx,tby,tbz; + for (p=0; p 0.0){ // normal curvature component in the direction of the solid surface KNavg += K*(nsx*nwnsx + nsy*nwnsy + nsz*nwnsz)*length;