|
From: xav <xa...@us...> - 2004-04-01 22:49:29
|
Update of /cvsroot/teem/teem/src/gage In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29029 Modified Files: gage.h vecGage.c Log Message: added 2 new vector-derived quantities: - gageVecCurlNormGrad: gradient of curl norm ("cng") - gageVecNCurlNormGrad: normalized version of this gradient ("ncng") Index: gage.h =================================================================== RCS file: /cvsroot/teem/teem/src/gage/gage.h,v retrieving revision 1.63 retrieving revision 1.64 diff -C2 -d -r1.63 -r1.64 *** gage.h 1 Apr 2004 07:07:35 -0000 1.63 --- gage.h 1 Apr 2004 22:37:26 -0000 1.64 *************** *** 290,308 **** gageVecNormHelicity,/* 7: "nh", normalized helicity: GT[1] */ gageVecLambda2, /* 8: "lmabda2", lambda2 criterion: GT[1] */ ! gageVecHessian, /* 9: "vh", second-order derivative: GT[27] */ gageVecCurlGradient,/*10: "cg", curl gradient: GT[9] */ ! gageVecHelGradient,/* 11: "hg", helicity gradient: GT[3] */ ! gageVecDirHelDeriv,/* 12: "dhd", directional derivative of helicity: GT[1] */ ! gageVecProjHelGradient,/* 13: "phg", projected helicity gradient: GT[3] */ ! gageVecGradient0, /* 14: "g0", gradient of 1st component of vector: GT[3] */ ! gageVecGradient1, /* 15: "g1", gradient of 2nd component of vector: GT[3] */ ! gageVecGradient2, /* 16: "g2", gradient of 3rd component of vector: GT[3] */ ! gageVecMultiGrad, /* 17: "mg", sum of outer products of gradients: GT[9] */ ! gageVecMGFrob, /* 18: "mgfrob", frob norm of multi-gradient: GT[1] */ ! gageVecMGEval, /* 19: "mgeval", eigenvalues of multi-gradient: GT[3] */ ! gageVecMGEvec, /* 20: "mgevec", eigenvectors of multi-gradient: GT[9] */ gageVecLast }; ! #define GAGE_VEC_ITEM_MAX 20 struct gageKind_t; /* dumb forward declaraction, ignore */ --- 290,316 ---- gageVecNormHelicity,/* 7: "nh", normalized helicity: GT[1] */ gageVecLambda2, /* 8: "lmabda2", lambda2 criterion: GT[1] */ ! gageVecHessian, /* 9: "vh", second-order derivative: GT[27] ! 0:d2v_x/dxdx 1:d2v_x/dxdy 2:d2v_x/dxdz ! 3:d2v_x/dydx 4:d2v_x/dydy 5:d2v_x/dydz ! 6:d2v_x/dzdx 7:d2v_x/dzdy 8:d2v_x/dzdz ! 9:d2v_y/dxdx [...] ! [...] ! 24:dv2_z/dzdx 25:d2v_z/dzdy 26:d2v_z/dzdz */ gageVecCurlGradient,/*10: "cg", curl gradient: GT[9] */ ! gageVecCurlNormGrad,/*11: "cng", curl norm gradient: GT[3] */ ! gageVecNCurlNormGrad, /* 12: "ncng", normalized curl norm gradient: GT[3] */ ! gageVecHelGradient,/* 13: "hg", helicity gradient: GT[3] */ ! gageVecDirHelDeriv,/* 14: "dhd", directional derivative of helicity: GT[1] */ ! gageVecProjHelGradient, /* 15: "phg", projected helicity gradient: GT[3] */ ! gageVecGradient0, /* 16: "g0", gradient of 1st component of vector: GT[3] */ ! gageVecGradient1, /* 17: "g1", gradient of 2nd component of vector: GT[3] */ ! gageVecGradient2, /* 18: "g2", gradient of 3rd component of vector: GT[3] */ ! gageVecMultiGrad, /* 19: "mg", sum of outer products of gradients: GT[9] */ ! gageVecMGFrob, /* 20: "mgfrob", frob norm of multi-gradient: GT[1] */ ! gageVecMGEval, /* 21: "mgeval", eigenvalues of multi-gradient: GT[3] */ ! gageVecMGEvec, /* 22: "mgevec", eigenvectors of multi-gradient: GT[9] */ gageVecLast }; ! #define GAGE_VEC_ITEM_MAX 22 struct gageKind_t; /* dumb forward declaraction, ignore */ Index: vecGage.c =================================================================== RCS file: /cvsroot/teem/teem/src/gage/vecGage.c,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** vecGage.c 1 Apr 2004 07:07:35 -0000 1.18 --- vecGage.c 1 Apr 2004 22:37:27 -0000 1.19 *************** *** 35,38 **** --- 35,40 ---- {gageVecHessian, 27, 2, {-1, -1, -1, -1, -1}, -1, -1}, {gageVecCurlGradient, 9, 2, {gageVecHessian, -1, -1, -1, -1}, -1, -1}, + {gageVecCurlNormGrad, 3, 2, {gageVecHessian, gageVecCurl, -1, -1, -1}, -1, -1}, + {gageVecNCurlNormGrad, 3, 2, {gageVecCurlNormGrad, -1, -1, -1, -1}, -1, -1}, {gageVecHelGradient, 3, 2, {gageVecVector, gageVecJacobian, gageVecCurl, gageVecCurlGradient, -1}, -1, -1}, *************** *** 105,121 **** char me[]="_gageVecAnswer"; double cmag, tmpMat[9], mgevec[9], mgeval[3]; ! double symm[9], asym[9], tran[9], eval[3]; gage_t *vecAns, *normAns, *jacAns, *curlAns, *hesAns, *curlGradAns, ! *helGradAns, *dirHelDirAns; int asw; ! vecAns = pvl->directAnswer[gageVecVector]; ! normAns = pvl->directAnswer[gageVecNormalized]; ! jacAns = pvl->directAnswer[gageVecJacobian]; ! curlAns = pvl->directAnswer[gageVecCurl]; ! hesAns = pvl->directAnswer[gageVecHessian]; ! curlGradAns = pvl->directAnswer[gageVecCurlGradient]; ! helGradAns = pvl->directAnswer[gageVecHelGradient]; ! dirHelDirAns = pvl->directAnswer[gageVecDirHelDeriv]; if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecVector)) { --- 107,124 ---- char me[]="_gageVecAnswer"; double cmag, tmpMat[9], mgevec[9], mgeval[3]; ! double symm[9], asym[9], tran[9], eval[3], tmpVec[3], norm; gage_t *vecAns, *normAns, *jacAns, *curlAns, *hesAns, *curlGradAns, ! *helGradAns, *dirHelDirAns, *curlnormgradAns; int asw; ! vecAns = pvl->directAnswer[gageVecVector]; ! normAns = pvl->directAnswer[gageVecNormalized]; ! jacAns = pvl->directAnswer[gageVecJacobian]; ! curlAns = pvl->directAnswer[gageVecCurl]; ! hesAns = pvl->directAnswer[gageVecHessian]; ! curlGradAns = pvl->directAnswer[gageVecCurlGradient]; ! curlnormgradAns = pvl->directAnswer[gageVecCurlNormGrad]; ! helGradAns = pvl->directAnswer[gageVecHelGradient]; ! dirHelDirAns = pvl->directAnswer[gageVecDirHelDeriv]; if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecVector)) { *************** *** 173,211 **** if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecLambda2)) { ELL_3M_TRANSPOSE(tran, jacAns); ! // symmetric part ELL_3M_SCALE_ADD2(symm, 0.5, jacAns, 0.5, tran); ! // antisymmetric part ELL_3M_SCALE_ADD2(asym, 0.5, jacAns, -0.5, tran); ! // square symmetric part ELL_3M_MUL(tmpMat, symm, symm); ELL_3M_COPY(symm, tmpMat); ! // square antisymmetric part ELL_3M_MUL(tmpMat, asym, asym); ! // sum of both ELL_3M_ADD2(symm, symm, tmpMat); asw = ell_3m_eigenvalues_d(eval, symm, AIR_TRUE); ! if (asw == ell_cubic_root_triple) ! pvl->directAnswer[gageVecLambda2][0] = eval[0]; ! else if (asw == ell_cubic_root_single_double) ! pvl->directAnswer[gageVecLambda2][0] = eval[1]; ! else if (asw == ell_cubic_root_three) ! { ! if (eval[0]<=eval[1]) ! if (eval[1]<=eval[2]) ! pvl->directAnswer[gageVecLambda2][0] = eval[1]; ! else ! if (eval[0]<=eval[2]) ! pvl->directAnswer[gageVecLambda2][0] = eval[2]; ! else ! pvl->directAnswer[gageVecLambda2][0] = eval[0]; ! else ! if (eval[2]<=eval[1]) ! pvl->directAnswer[gageVecLambda2][0] = eval[1]; ! else ! if (eval[0]<=eval[2]) ! pvl->directAnswer[gageVecLambda2][0] = eval[0]; ! else ! pvl->directAnswer[gageVecLambda2][0] = eval[2]; ! } } /* 2nd order vector derivative continued */ --- 176,193 ---- if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecLambda2)) { ELL_3M_TRANSPOSE(tran, jacAns); ! /* symmetric part */ ELL_3M_SCALE_ADD2(symm, 0.5, jacAns, 0.5, tran); ! /* antisymmetric part */ ELL_3M_SCALE_ADD2(asym, 0.5, jacAns, -0.5, tran); ! /* square symmetric part */ ELL_3M_MUL(tmpMat, symm, symm); ELL_3M_COPY(symm, tmpMat); ! /* square antisymmetric part */ ELL_3M_MUL(tmpMat, asym, asym); ! /* sum of both */ ELL_3M_ADD2(symm, symm, tmpMat); + /* get eigenvalues in sorted order */ asw = ell_3m_eigenvalues_d(eval, symm, AIR_TRUE); ! pvl->directAnswer[gageVecLambda2][0] = eval[1]; } /* 2nd order vector derivative continued */ *************** *** 236,239 **** --- 218,247 ---- pvl->directAnswer[gageVecCurlGradient][8] = hesAns[11]-hesAns[ 3]; } + if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecCurlNormGrad)) { + norm = 1./ELL_3V_LEN(curlAns); + + tmpVec[0] = hesAns[21] - hesAns[15]; + tmpVec[1] = hesAns[ 6] - hesAns[18]; + tmpVec[2] = hesAns[ 9] - hesAns[ 3]; + pvl->directAnswer[gageVecCurlNormGrad][0]= + norm*ELL_3V_DOT(tmpVec, curlAns); + + tmpVec[0] = hesAns[22] - hesAns[16]; + tmpVec[1] = hesAns[ 7] - hesAns[19]; + tmpVec[2] = hesAns[10] - hesAns[ 4]; + pvl->directAnswer[gageVecCurlNormGrad][1]= + norm*ELL_3V_DOT(tmpVec, curlAns); + + tmpVec[0] = hesAns[23] - hesAns[17]; + tmpVec[1] = hesAns[ 8] - hesAns[20]; + tmpVec[2] = hesAns[11] - hesAns[ 5]; + pvl->directAnswer[gageVecCurlNormGrad][2]= + norm*ELL_3V_DOT(tmpVec, curlAns); + } + if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecNCurlNormGrad)) { + norm = 1./ELL_3V_LEN(curlnormgradAns); + ELL_3V_SCALE(pvl->directAnswer[gageVecNCurlNormGrad], + norm, pvl->directAnswer[gageVecCurlNormGrad]); + } if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecHelGradient)) { pvl->directAnswer[gageVecHelGradient][0] = *************** *** 332,335 **** --- 340,345 ---- "vector hessian", "curl gradient", + "curl norm gradient", + "normalized curl norm gradient", "helicity gradient", "directional helicity derivative", *************** *** 358,361 **** --- 368,373 ---- "3x3x3 second-order vector derivative", "3x3 derivative of curl", + "gradient of curl norm", + "normalized gradient of curl norm", "gradient of helicity", "directional derivative of helicity along flow", *************** *** 384,387 **** --- 396,401 ---- gageVecHessian, gageVecCurlGradient, + gageVecCurlNormGrad, + gageVecNCurlNormGrad, gageVecHelGradient, gageVecDirHelDeriv, *************** *** 396,420 **** }; ! #define GV_V gageVecVector ! #define GV_L gageVecLength ! #define GV_N gageVecNormalized ! #define GV_J gageVecJacobian ! #define GV_D gageVecDivergence ! #define GV_C gageVecCurl ! #define GV_H gageVecHelicity ! #define GV_NH gageVecNormHelicity ! #define GV_LB gageVecLambda2 ! #define GV_VH gageVecHessian ! #define GV_CG gageVecCurlGradient ! #define GV_HG gageVecHelGradient ! #define GV_DH gageVecDirHelDeriv ! #define GV_PH gageVecProjHelGradient ! #define GV_G0 gageVecGradient0 ! #define GV_G1 gageVecGradient1 ! #define GV_G2 gageVecGradient2 ! #define GV_MG gageVecMultiGrad ! #define GV_MF gageVecMGFrob ! #define GV_ML gageVecMGEval ! #define GV_MC gageVecMGEvec char --- 410,436 ---- }; ! #define GV_V gageVecVector ! #define GV_L gageVecLength ! #define GV_N gageVecNormalized ! #define GV_J gageVecJacobian ! #define GV_D gageVecDivergence ! #define GV_C gageVecCurl ! #define GV_H gageVecHelicity ! #define GV_NH gageVecNormHelicity ! #define GV_LB gageVecLambda2 ! #define GV_VH gageVecHessian ! #define GV_CG gageVecCurlGradient ! #define GV_CNG gageVecCurlNormGrad ! #define GV_NCG gageVecNCurlNormGrad ! #define GV_HG gageVecHelGradient ! #define GV_DH gageVecDirHelDeriv ! #define GV_PH gageVecProjHelGradient ! #define GV_G0 gageVecGradient0 ! #define GV_G1 gageVecGradient1 ! #define GV_G2 gageVecGradient2 ! #define GV_MG gageVecMultiGrad ! #define GV_MF gageVecMGFrob ! #define GV_ML gageVecMGEval ! #define GV_MC gageVecMGEvec char *************** *** 431,434 **** --- 447,452 ---- "vh", "vhes", "vhessian", "vector hessian", "cg", "curlgrad", "curlg", "curljac", "curl gradient", + "cng", "curl norm gradient", + "ncng", "norm curl norm gradient", "hg", "helg", "helgrad", "helicity gradient", "dirhelderiv", "dhd", "ddh", "directional helicity derivative", *************** *** 457,460 **** --- 475,480 ---- GV_VH, GV_VH, GV_VH, GV_VH, GV_CG, GV_CG, GV_CG, GV_CG, GV_CG, + GV_CNG, GV_CNG, + GV_NCG, GV_NCG, GV_HG, GV_HG, GV_HG, GV_HG, GV_DH, GV_DH, GV_DH, GV_DH, |