|
From: <kin...@us...> - 2004-02-23 02:53:42
|
Update of /cvsroot/teem/teem/src/ten In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26294 Modified Files: aniso.c enumsTen.c ten.h tenGage.c tensor.c Log Message: debugging tenGageKind Index: aniso.c =================================================================== RCS file: /cvsroot/teem/teem/src/ten/aniso.c,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** aniso.c 7 Jan 2004 15:34:31 -0000 1.25 --- aniso.c 23 Feb 2004 02:40:18 -0000 1.26 *************** *** 185,189 **** in = nin->data; for (I=0; I<=N-1; I++) { ! /* tenVerbose = (I == 1882); */ tensor = in + I*7; if (tensor[0] < thresh) { --- 185,189 ---- in = nin->data; for (I=0; I<=N-1; I++) { ! /* tenVerbose = (I == 911327); */ tensor = in + I*7; if (tensor[0] < thresh) { Index: enumsTen.c =================================================================== RCS file: /cvsroot/teem/teem/src/ten/enumsTen.c,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** enumsTen.c 19 Feb 2004 11:14:09 -0000 1.15 --- enumsTen.c 23 Feb 2004 02:40:24 -0000 1.16 *************** *** 64,87 **** _tenGageStr[][AIR_STRLEN_SMALL] = { "(unknown tenGage)", "tensor", "trace", ! "frob", ! "eigenvalues", ! "eigenvalue0", ! "eigenvalue1", ! "eigenvalue2", ! "eigenvectors", ! "eigenvector0", ! "eigenvector1", ! "eigenvector2", ! "tensor gradient", ! "Q anisotropy", ! "Q gradient vector", ! "Q gradient magnitude", ! "normalized Q gradient", ! "multigrad", ! "fro(multigrad)", ! "multigrad eigenvalues", ! "multigrad eigenvectors", "anisotropies" }; --- 64,116 ---- _tenGageStr[][AIR_STRLEN_SMALL] = { "(unknown tenGage)", + "tensor", "trace", ! "B", ! "det", ! "S", ! "Q", ! "FA", ! "R", ! ! "evals", ! "eval0", ! "eval1", ! "eval2", ! "evecs", ! "evec0", ! "evec1", ! "evec2", ! ! "tensor grad", ! ! "trace grad vec", ! "trace grad mag", ! "trace normal", ! ! "B grad vec", ! "B grad mag", ! "B normal", ! ! "det grad vec", ! "det grad mag", ! "det normal", ! ! "S grad vec", ! "S grad mag", ! "S normal", ! ! "Q grad vec", ! "Q grad mag", ! "Q normal", ! ! "FA grad vec", ! "FA grad mag", ! "FA normal", ! ! "R grad vec", ! "R grad mag", ! "R normal", ! "anisotropies" }; *************** *** 89,113 **** char _tenGageDesc[][AIR_STRLEN_MED] = { ! "unknown tenGage query", ! "reconstructed tensor", ! "tensor trace", ! "frob(tensor)", ! "3 tensor eigenvalues", ! "tensor eigenvalue 0", ! "tensor eigenvalue 1", ! "tensor eigenvalue 2", ! "3 tensor eigenvectors", ! "tensor eigenvector 0", ! "tensor eigenvector 1", ! "tensor eigenvector 2", ! "tensor gradient", ! "Q anisotropy", ! "Q gradient vector", ! "Q gradient magnitude", ! "normalized Q gradient", ! "multigrad", ! "frob(multigrad)", ! "multigrad eigenvalues", ! "multigrad eigenvectors", "anisotropies" }; --- 118,160 ---- char _tenGageDesc[][AIR_STRLEN_MED] = { ! "(unknown tenGage item)", ! "tensor", ! "trace", ! "B", ! "determinant", ! "S", ! "Q", ! "FA", ! "R", ! "3 eigenvalues", ! "eigenvalue 0", ! "eigenvalue 1", ! "eigenvalue 2", ! "3 eigenvectors", ! "eigenvector 0", ! "eigenvector 1", ! "eigenvector 2", ! "tensor gradients", ! "trace grad vec", ! "trace grad mag", ! "trace normal", ! "B grad vec", ! "B grad mag", ! "B normal", ! "determinant grad vec", ! "determinant grad mag", ! "determinant normal", ! "S grad vec", ! "S grad mag", ! "S normal", ! "Q grad vec", ! "Q grad mag", ! "Q normal", ! "FA grad vec", ! "FA grad mag", ! "FA normal", ! "R grad vec", ! "R grad mag", ! "R normal", "anisotropies" }; *************** *** 116,186 **** _tenGageVal[] = { tenGageUnknown, ! tenGageTensor, ! tenGageTrace, ! tenGageFrobTensor, ! tenGageEval, ! tenGageEval0, ! tenGageEval1, ! tenGageEval2, ! tenGageEvec, ! tenGageEvec0, ! tenGageEvec1, ! tenGageEvec2, ! tenGageTensorGrad, ! tenGageQ, ! tenGageQGradVec, ! tenGageQGradMag, ! tenGageQNormal, ! tenGageMultiGrad, ! tenGageFrobMG, ! tenGageMGEval, ! tenGageMGEvec, ! tenGageAniso }; - #define TG_T tenGageTensor - #define TG_TR tenGageTrace - #define TG_FT tenGageFrobTensor - #define TG_AL tenGageEval - #define TG_AL0 tenGageEval0 - #define TG_AL1 tenGageEval1 - #define TG_AL2 tenGageEval2 - #define TG_EC tenGageEvec - #define TG_EC0 tenGageEvec0 - #define TG_EC1 tenGageEvec1 - #define TG_EC2 tenGageEvec2 - #define TG_TG tenGageTensorGrad - #define TG_Q tenGageQ - #define TG_QGV tenGageQGradVec - #define TG_QGM tenGageQGradMag - #define TG_QGN tenGageQNormal - #define TG_MG tenGageMultiGrad - #define TG_FMG tenGageFrobMG - #define TG_MGA tenGageMGEval - #define TG_MGE tenGageMGEvec - #define TG_AN tenGageAniso - char _tenGageStrEqv[][AIR_STRLEN_SMALL] = { ! "t", "ten", "tensor", "tr", "trace", ! "frt", "fro", "frob", "frobt", ! "eval", "eigenvalue", ! "eval0", "eigenvalue0", ! "eval1", "eigenvalue1", ! "eval2", "eigenvalue2", ! "evec", "eigenvector", ! "evec0", "eigenvector0", ! "evec1", "eigenvector1", ! "evec2", "eigenvector2", ! "tg", "tgrad", "t grad", "tensor gradient", "q", ! "qv", "qgrad", "q grad", "q gradient vector", ! "qg", "qgmag", "q gmag", "q gradient magnitude", ! "qn", "qnorm", "q norm", "normalized q gradient", ! "mg", "multigrad", ! "frmg", "frobmg", "frob mg", ! "mgeval", "mg eval", "multigrad eigenvalues", ! "mgevec", "mg evec", "multigrad eigenvectors", "an", "aniso", "anisotropies", "" --- 163,247 ---- _tenGageVal[] = { tenGageUnknown, ! tenGageTensor, /* 0: "t", the reconstructed tensor: GT[7] */ ! tenGageTrace, /* 1: "tr", trace of tensor: GT[1] */ ! tenGageB, /* 2: "b": GT[1] */ ! tenGageDet, /* 3: "det", determinant of tensor: GT[1] */ ! tenGageS, /* 4: "s", square of frobenius norm: GT[1] */ ! tenGageQ, /* 5: "q", (S - B)/9: GT[1] */ ! tenGageFA, /* 6: "fa", fractional anisotropy: GT[1] */ ! tenGageR, /* 7: "r", 9*A*B - 2*A^3 - 27*C: GT[1] */ ! tenGageEval, /* 8: "eval", all eigenvalues of tensor : GT[3] */ ! tenGageEval0, /* 9: "eval0", major eigenvalue of tensor : GT[1] */ ! tenGageEval1, /* 10: "eval1", medium eigenvalue of tensor : GT[1] */ ! tenGageEval2, /* 11: "eval2", minor eigenvalue of tensor : GT[1] */ ! tenGageEvec, /* 12: "evec", major eigenvectors of tensor: GT[9] */ ! tenGageEvec0, /* 13: "evec0", major eigenvectors of tensor: GT[3] */ ! tenGageEvec1, /* 14: "evec1", medium eigenvectors of tensor: GT[3] */ ! tenGageEvec2, /* 15: "evec2", minor eigenvectors of tensor: GT[3] */ ! tenGageTensorGrad, /* 16: "tg, all tensor component gradients: GT[21] */ ! tenGageTraceGradVec, /* 17: "trgv": gradient (vector) of trace: GT[3] */ ! tenGageTraceGradMag, /* 18: "trgm": gradient magnitude of trace: GT[1] */ ! tenGageTraceNormal, /* 19: "trn": normal of trace: GT[3] */ ! tenGageBGradVec, /* 20: "bgv", gradient (vector) of B: GT[3] */ ! tenGageBGradMag, /* 21: "bgm", gradient magnitude of B: GT[1] */ ! tenGageBNormal, /* 22: "bn", normal of B: GT[3] */ ! tenGageDetGradVec, /* 23: "detgv", gradient (vector) of Det: GT[3] */ ! tenGageDetGradMag, /* 24: "detgm", gradient magnitude of Det: GT[1] */ ! tenGageDetNormal, /* 25: "detn", normal of Det: GT[3] */ ! tenGageSGradVec, /* 26: "sgv", gradient (vector) of S: GT[3] */ ! tenGageSGradMag, /* 27: "sgm", gradient magnitude of S: GT[1] */ ! tenGageSNormal, /* 28: "sn", normal of S: GT[3] */ ! tenGageQGradVec, /* 29: "qgv", gradient vector of Q: GT[3] */ ! tenGageQGradMag, /* 30: "qgm", gradient magnitude of Q: GT[1] */ ! tenGageQNormal, /* 31: "qn", normalized gradient of Q: GT[3] */ ! tenGageFAGradVec, /* 32: "fagv", gradient vector of FA: GT[3] */ ! tenGageFAGradMag, /* 33: "fagm", gradient magnitude of FA: GT[1] */ ! tenGageFANormal, /* 34: "fan", normalized gradient of FA: GT[3] */ ! tenGageRGradVec, /* 35: "rgv", gradient vector of Q: GT[3] */ ! tenGageRGradMag, /* 36: "rgm", gradient magnitude of Q: GT[1] */ ! tenGageRNormal, /* 37: "rn", normalized gradient of Q: GT[3] */ ! tenGageAniso /* 38: "an", all anisotropies: GT[TEN_ANISO_MAX+1] */ }; char _tenGageStrEqv[][AIR_STRLEN_SMALL] = { ! "t", "tensor", "tr", "trace", ! "b", ! "det", ! "s", "q", ! "fa", ! "r", ! "eval", ! "eval0", ! "eval1", ! "eval2", ! "evec", ! "evec0", ! "evec1", ! "evec2", ! "tg", "tensor grad", ! "trgv", "tracegv", "trace grad vec", ! "trgm", "tracegm", "trace grad mag", ! "trn", "tracen", "trace normal", ! "bgv", "b grad vec", ! "bgm", "b grad mag", ! "bn", "b normal", ! "detgv", "det grad vec", ! "detgm", "det grad mag", ! "detn", "det normal", ! "sgv", "s grad vec", ! "sgm", "s grad mag", ! "sn", "s normal", ! "qgv", "q grad vec", ! "qgm", "q grad mag", ! "qn", "q normal", ! "fagv", "fa grad vec", ! "fagm", "fa grad mag", ! "fan", "fa normal", ! "rgv", "r grad vec", ! "rgm", "r grad mag", ! "rn", "r normal", "an", "aniso", "anisotropies", "" *************** *** 189,213 **** int _tenGageValEqv[] = { ! TG_T, TG_T, TG_T, ! TG_TR, TG_TR, ! TG_FT, TG_FT, TG_FT, TG_FT, ! TG_AL, TG_AL, ! TG_AL0, TG_AL0, ! TG_AL1, TG_AL1, ! TG_AL2, TG_AL2, ! TG_EC, TG_EC, ! TG_EC0, TG_EC0, ! TG_EC1, TG_EC1, ! TG_EC2, TG_EC2, ! TG_TG, TG_TG, TG_TG, TG_TG, ! TG_Q, ! TG_QGV, TG_QGV, TG_QGV, TG_QGV, ! TG_QGM, TG_QGM, TG_QGM, TG_QGM, ! TG_QGN, TG_QGN, TG_QGN, TG_QGN, ! TG_MG, TG_MG, ! TG_FMG, TG_FMG, TG_FMG, ! TG_MGA, TG_MGA, TG_MGA, ! TG_MGE, TG_MGE, TG_MGE, ! TG_AN, TG_AN, TG_AN }; --- 250,292 ---- int _tenGageValEqv[] = { ! tenGageTensor, tenGageTensor, ! tenGageTrace, tenGageTrace, ! tenGageB, ! tenGageDet, ! tenGageS, ! tenGageQ, ! tenGageFA, ! tenGageR, ! tenGageEval, ! tenGageEval0, ! tenGageEval1, ! tenGageEval2, ! tenGageEvec, ! tenGageEvec0, ! tenGageEvec1, ! tenGageEvec2, ! tenGageTensorGrad, tenGageTensorGrad, ! tenGageTraceGradVec, tenGageTraceGradVec, tenGageTraceGradVec, ! tenGageTraceGradMag, tenGageTraceGradMag, tenGageTraceGradMag, ! tenGageTraceNormal, tenGageTraceNormal, tenGageTraceNormal, ! tenGageBGradVec, tenGageBGradVec, ! tenGageBGradMag, tenGageBGradMag, ! tenGageBNormal, tenGageBNormal, ! tenGageDetGradVec, tenGageDetGradVec, ! tenGageDetGradMag, tenGageDetGradMag, ! tenGageDetNormal, tenGageDetNormal, ! tenGageSGradVec, tenGageSGradVec, ! tenGageSGradMag, tenGageSGradMag, ! tenGageSNormal, tenGageSNormal, ! tenGageQGradVec, tenGageQGradVec, ! tenGageQGradMag, tenGageQGradMag, ! tenGageQNormal, tenGageQNormal, ! tenGageFAGradVec, tenGageFAGradVec, ! tenGageFAGradMag, tenGageFAGradMag, ! tenGageFANormal, tenGageFANormal, ! tenGageRGradVec, tenGageRGradVec, ! tenGageRGradMag, tenGageRGradMag, ! tenGageRNormal, tenGageRNormal, ! tenGageAniso, tenGageAniso, tenGageAniso }; Index: ten.h =================================================================== RCS file: /cvsroot/teem/teem/src/ten/ten.h,v retrieving revision 1.73 retrieving revision 1.74 diff -C2 -d -r1.73 -r1.74 *** ten.h 19 Feb 2004 11:14:09 -0000 1.73 --- ten.h 23 Feb 2004 02:40:24 -0000 1.74 *************** *** 141,176 **** ** ** all the possible queries supported in the tenGage gage kind */ enum { tenGageUnknown = -1, /* -1: nobody knows */ tenGageTensor, /* 0: "t", the reconstructed tensor: GT[7] */ tenGageTrace, /* 1: "tr", trace of tensor: GT[1] */ ! tenGageFrobTensor, /* 2: "fro", frobenius norm of tensor: GT[1] */ ! tenGageEval, /* 3: "eval", all eigenvalues of tensor : GT[3] */ ! tenGageEval0, /* 4: "eval0", major eigenvalue of tensor : GT[1] */ ! tenGageEval1, /* 5: "eval1", medium eigenvalue of tensor : GT[1] */ ! tenGageEval2, /* 6: "eval2", minor eigenvalue of tensor : GT[1] */ ! tenGageEvec, /* 7: "evec", major eigenvectors of tensor: GT[9] */ ! tenGageEvec0, /* 8: "evec0", major eigenvectors of tensor: GT[3] */ ! tenGageEvec1, /* 9: "evec1", medium eigenvectors of tensor: GT[3] */ ! tenGageEvec2, /* 10: "evec2", minor eigenvectors of tensor: GT[3] */ ! tenGageTensorGrad, /* 11: "tg", all tensor component gradients, starting ! with the confidence value gradient: GT[21] */ ! tenGageQ, /* 12: "q", Q anisotropy (or 9 times it): GT[1] */ ! tenGageQGradVec, /* 13: "qv", gradient vector of Q: GT[3] */ ! tenGageQGradMag, /* 14: "qg", gradient magnitude of Q: GT[1] */ ! tenGageQNormal, /* 15: "qn", normalized gradient of Q GT[3] */ ! tenGageMultiGrad, /* 16: "mg", sum of outer products of gradients of ! tensor elements, correctly counting the ! off-diagonal entries twice, but not counting ! the confidence value: GT[9] */ ! tenGageFrobMG, /* 17: "frmg", frob. norm of multi gradient: GT[1] */ ! tenGageMGEval, /* 18: "mgeval", eigenvalues of multi gradient: GT[3]*/ ! tenGageMGEvec, /* 19: "mgevec", eigenvectors of multi ! gradient: GT[9] */ ! tenGageAniso, /* 20: "an", all anisotropies: GT[TEN_ANISO_MAX+1] */ tenGageLast }; ! #define TEN_GAGE_ITEM_MAX 20 /* --- 141,212 ---- ** ** all the possible queries supported in the tenGage gage kind + ** various properties of the quantities below (eigenvalues = v1, v2, v3): + ** eigenvalue cubic equation: v^3 + A*v^2 + B*v + C = 0 + ** Trace = v1 + v2 + v3 = -A + ** B = v1*v2 + v1*v3 + v2*v3 + ** Det = v1*v2*v3 = -C + ** S = v1*v1 + v2*v2 + v3*v3 + ** Q = (S-B)/9 = variance({v1,v2,v3})/2 = (RootRadius/2)^2 + ** FA = 3*sqrt(Q/S) + ** R = (9*A*B - 2*A^3 - 27*C)/54 + = (5*A*B - 2*A*S - 27*C)/54 = thirdmoment({v1,v2,v3})/2 + ** (phase in cubic solution = arccos(R/sqrt(Q)^3)) */ enum { tenGageUnknown = -1, /* -1: nobody knows */ + tenGageTensor, /* 0: "t", the reconstructed tensor: GT[7] */ tenGageTrace, /* 1: "tr", trace of tensor: GT[1] */ ! tenGageB, /* 2: "b": GT[1] */ ! tenGageDet, /* 3: "det", determinant of tensor: GT[1] */ ! tenGageS, /* 4: "s", square of frobenius norm: GT[1] */ ! tenGageQ, /* 5: "q", (S - B)/9: GT[1] */ ! tenGageFA, /* 6: "fa", fractional anisotropy: GT[1] */ ! tenGageR, /* 7: "r", 9*A*B - 2*A^3 - 27*C: GT[1] */ ! ! tenGageEval, /* 8: "eval", all eigenvalues of tensor : GT[3] */ ! tenGageEval0, /* 9: "eval0", major eigenvalue of tensor : GT[1] */ ! tenGageEval1, /* 10: "eval1", medium eigenvalue of tensor : GT[1] */ ! tenGageEval2, /* 11: "eval2", minor eigenvalue of tensor : GT[1] */ ! tenGageEvec, /* 12: "evec", major eigenvectors of tensor: GT[9] */ ! tenGageEvec0, /* 13: "evec0", major eigenvectors of tensor: GT[3] */ ! tenGageEvec1, /* 14: "evec1", medium eigenvectors of tensor: GT[3] */ ! tenGageEvec2, /* 15: "evec2", minor eigenvectors of tensor: GT[3] */ ! ! tenGageTensorGrad, /* 16: "tg, all tensor component gradients, starting ! with the confidence gradient: GT[21] */ ! ! tenGageTraceGradVec, /* 17: "trgv": gradient (vector) of trace: GT[3] */ ! tenGageTraceGradMag, /* 18: "trgm": gradient magnitude of trace: GT[1] */ ! tenGageTraceNormal, /* 19: "trn": normal of trace: GT[3] */ ! ! tenGageBGradVec, /* 20: "bgv", gradient (vector) of B: GT[3] */ ! tenGageBGradMag, /* 21: "bgm", gradient magnitude of B: GT[1] */ ! tenGageBNormal, /* 22: "bn", normal of B: GT[3] */ ! ! tenGageDetGradVec, /* 23: "detgv", gradient (vector) of Det: GT[3] */ ! tenGageDetGradMag, /* 24: "detgm", gradient magnitude of Det: GT[1] */ ! tenGageDetNormal, /* 25: "detn", normal of Det: GT[3] */ ! ! tenGageSGradVec, /* 26: "sgv", gradient (vector) of S: GT[3] */ ! tenGageSGradMag, /* 27: "sgm", gradient magnitude of S: GT[1] */ ! tenGageSNormal, /* 28: "sn", normal of S: GT[3] */ ! ! tenGageQGradVec, /* 29: "qgv", gradient vector of Q: GT[3] */ ! tenGageQGradMag, /* 30: "qgm", gradient magnitude of Q: GT[1] */ ! tenGageQNormal, /* 31: "qn", normalized gradient of Q: GT[3] */ ! ! tenGageFAGradVec, /* 32: "fagv", gradient vector of FA: GT[3] */ ! tenGageFAGradMag, /* 33: "fagm", gradient magnitude of FA: GT[1] */ ! tenGageFANormal, /* 34: "fan", normalized gradient of FA: GT[3] */ ! ! tenGageRGradVec, /* 35: "rgv", gradient vector of Q: GT[3] */ ! tenGageRGradMag, /* 36: "rgm", gradient magnitude of Q: GT[1] */ ! tenGageRNormal, /* 37: "rn", normalized gradient of Q: GT[3] */ ! ! tenGageAniso, /* 38: "an", all anisotropies: GT[TEN_ANISO_MAX+1] */ tenGageLast }; ! #define TEN_GAGE_ITEM_MAX 38 /* Index: tenGage.c =================================================================== RCS file: /cvsroot/teem/teem/src/ten/tenGage.c,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** tenGage.c 19 Feb 2004 11:14:09 -0000 1.13 --- tenGage.c 23 Feb 2004 02:40:24 -0000 1.14 *************** *** 27,31 **** {tenGageTensor, 7, 0, {-1, -1, -1, -1, -1}, -1, -1}, {tenGageTrace, 1, 0, {tenGageTensor, -1, -1, -1, -1}, -1, -1}, ! {tenGageFrobTensor, 1, 0, {tenGageTensor, -1, -1, -1, -1}, -1, -1}, {tenGageEval, 3, 0, {tenGageTensor, -1, -1, -1, -1}, -1, -1}, {tenGageEval0, 1, 0, {tenGageEval, -1, -1, -1, -1}, tenGageEval, 0}, --- 27,36 ---- {tenGageTensor, 7, 0, {-1, -1, -1, -1, -1}, -1, -1}, {tenGageTrace, 1, 0, {tenGageTensor, -1, -1, -1, -1}, -1, -1}, ! {tenGageB, 1, 0, {tenGageTensor, -1, -1, -1, -1}, -1, -1}, ! {tenGageDet, 1, 0, {tenGageTensor, -1, -1, -1, -1}, -1, -1}, ! {tenGageS, 1, 0, {tenGageTensor, -1, -1, -1, -1}, -1, -1}, ! {tenGageQ, 1, 0, {tenGageS, tenGageB, -1, -1, -1}, -1, -1}, ! {tenGageFA, 1, 0, {tenGageQ, tenGageS, -1, -1, -1}, -1, -1}, ! {tenGageR, 1, 0, {tenGageTrace, tenGageB, tenGageDet, tenGageS, -1}, -1, -1}, {tenGageEval, 3, 0, {tenGageTensor, -1, -1, -1, -1}, -1, -1}, {tenGageEval0, 1, 0, {tenGageEval, -1, -1, -1, -1}, tenGageEval, 0}, *************** *** 37,48 **** {tenGageEvec2, 3, 0, {tenGageEvec, -1, -1, -1, -1}, tenGageEvec, 6}, {tenGageTensorGrad, 21, 1, {-1, -1, -1, -1, -1}, -1, -1}, ! {tenGageQ, 1, 0, {-1, -1, -1, -1, -1}, -1, -1}, {tenGageQGradVec, 3, 1, {tenGageTensor, tenGageTensorGrad, -1, -1, -1}, -1, -1}, {tenGageQGradMag, 1, 1, {tenGageQGradVec, -1, -1, -1, -1}, -1, -1}, {tenGageQNormal, 3, 1, {tenGageQGradVec, tenGageQGradMag, -1, -1, -1}, -1, -1}, ! {tenGageMultiGrad, 9, 1, {tenGageTensorGrad, -1, -1, -1, -1}, -1, -1}, ! {tenGageFrobMG, 1, 1, {tenGageMultiGrad, -1, -1, -1, -1}, -1, -1}, ! {tenGageMGEval, 3, 1, {tenGageMultiGrad, -1, -1, -1, -1}, -1, -1}, ! {tenGageMGEvec, 9, 1, {tenGageMultiGrad, -1, -1, -1, -1}, -1, -1}, {tenGageAniso, TEN_ANISO_MAX+1, 0, {tenGageEval0, tenGageEval1, tenGageEval2, -1, -1}, -1, -1} }; --- 42,66 ---- {tenGageEvec2, 3, 0, {tenGageEvec, -1, -1, -1, -1}, tenGageEvec, 6}, {tenGageTensorGrad, 21, 1, {-1, -1, -1, -1, -1}, -1, -1}, ! {tenGageTraceGradVec, 3, 1, {tenGageTensor, tenGageTensorGrad, -1, -1, -1}, -1, -1}, ! {tenGageTraceGradMag, 1, 1, {tenGageTraceGradVec, -1, -1, -1, -1}, -1, -1}, ! {tenGageTraceNormal, 3, 1, {tenGageTraceGradVec, tenGageTraceGradMag, -1, -1, -1}, -1, -1}, ! {tenGageBGradVec, 3, 1, {tenGageTensor, tenGageTensorGrad, -1, -1, -1}, -1, -1}, ! {tenGageBGradMag, 1, 1, {tenGageBGradVec, -1, -1, -1, -1}, -1, -1}, ! {tenGageBNormal, 3, 1, {tenGageBGradVec, tenGageBGradMag, -1, -1, -1}, -1, -1}, ! {tenGageDetGradVec, 3, 1, {tenGageTensor, tenGageTensorGrad, -1, -1, -1}, -1, -1}, ! {tenGageDetGradMag, 1, 1, {tenGageDetGradVec, -1, -1, -1, -1}, -1, -1}, ! {tenGageDetNormal, 3, 1, {tenGageDetGradVec, tenGageDetGradMag, -1, -1, -1}, -1, -1}, ! {tenGageSGradVec, 3, 1, {tenGageTensor, tenGageTensorGrad, -1, -1, -1}, -1, -1}, ! {tenGageSGradMag, 1, 1, {tenGageSGradVec, -1, -1, -1, -1}, -1, -1}, ! {tenGageSNormal, 3, 1, {tenGageSGradVec, tenGageSGradMag, -1, -1, -1}, -1, -1}, {tenGageQGradVec, 3, 1, {tenGageTensor, tenGageTensorGrad, -1, -1, -1}, -1, -1}, {tenGageQGradMag, 1, 1, {tenGageQGradVec, -1, -1, -1, -1}, -1, -1}, {tenGageQNormal, 3, 1, {tenGageQGradVec, tenGageQGradMag, -1, -1, -1}, -1, -1}, ! {tenGageFAGradVec, 3, 1, {tenGageTensor, tenGageTensorGrad, -1, -1, -1}, -1, -1}, ! {tenGageFAGradMag, 1, 1, {tenGageFAGradVec, -1, -1, -1, -1}, -1, -1}, ! {tenGageFANormal, 3, 1, {tenGageFAGradVec, tenGageFAGradMag, -1, -1, -1}, -1, -1}, ! {tenGageRGradVec, 3, 1, {tenGageTensor, tenGageTensorGrad, -1, -1, -1}, -1, -1}, ! {tenGageRGradMag, 1, 1, {tenGageRGradVec, -1, -1, -1, -1}, -1, -1}, ! {tenGageRNormal, 3, 1, {tenGageRGradVec, tenGageRGradMag, -1, -1, -1}, -1, -1}, {tenGageAniso, TEN_ANISO_MAX+1, 0, {tenGageEval0, tenGageEval1, tenGageEval2, -1, -1}, -1, -1} }; *************** *** 109,114 **** _tenGageAnswer (gageContext *ctx, gagePerVolume *pvl) { /* char me[]="_tenGageAnswer"; */ ! gage_t *tenAns, *tgradAns, *QgradAns, *evalAns, *evecAns, tmptmp=0, ! dtA=0, dtB=0, dtC=0, dtD=0, dtE=0, dtF=0, cbA, cbB; #if !GAGE_TYPE_FLOAT --- 127,137 ---- _tenGageAnswer (gageContext *ctx, gagePerVolume *pvl) { /* char me[]="_tenGageAnswer"; */ ! gage_t *tenAns, *evalAns, *evecAns, *vecTmp=NULL, magTmp=0, ! tmp0, tmp1, ! dtConf=0, dtA=0, dtB=0, dtC=0, dtD=0, dtE=0, dtF=0, ! *gradDtA=NULL, *gradDtB=NULL, *gradDtC=NULL, ! *gradDtD=NULL, *gradDtE=NULL, *gradDtF=NULL, ! gradCbA[3], *gradCbS=NULL, *gradCbB=NULL, *gradCbQ=NULL, ! cbQ=0, cbA=0, cbB=0, cbC=0, cbS=0; #if !GAGE_TYPE_FLOAT *************** *** 118,127 **** tenAns = pvl->directAnswer[tenGageTensor]; - tgradAns = pvl->directAnswer[tenGageTensorGrad]; - QgradAns = pvl->directAnswer[tenGageQGradVec]; evalAns = pvl->directAnswer[tenGageEval]; evecAns = pvl->directAnswer[tenGageEvec]; if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTensor)) { /* done if doV */ dtA = tenAns[1]; dtB = tenAns[2]; --- 141,149 ---- tenAns = pvl->directAnswer[tenGageTensor]; evalAns = pvl->directAnswer[tenGageEval]; evecAns = pvl->directAnswer[tenGageEvec]; if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTensor)) { /* done if doV */ + dtConf = tenAns[0]; dtA = tenAns[1]; dtB = tenAns[2]; *************** *** 136,145 **** } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTrace)) { ! pvl->directAnswer[tenGageTrace][0] = dtA + dtD + dtF; } ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFrobTensor)) { ! pvl->directAnswer[tenGageFrobTensor][0] = sqrt(dtA*dtA + 2*dtB*dtB ! + 2*dtC*dtC + dtD*dtD ! + 2*dtE*dtE + dtF*dtF); } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageEvec)) { --- 158,184 ---- } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTrace)) { ! cbA = -(pvl->directAnswer[tenGageTrace][0] = dtA + dtD + dtF); } ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageB)) { ! cbB = pvl->directAnswer[tenGageB][0] = ! dtA*dtD + dtA*dtF + dtD*dtF - dtB*dtB - dtC*dtC - dtE*dtE; ! } ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageDet)) { ! cbC = -(pvl->directAnswer[tenGageDet][0] = ! 2*dtB*dtC*dtE + dtA*dtD*dtF ! - dtC*dtC*dtD - dtA*dtE*dtE - dtB*dtB*dtF); ! } ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageS)) { ! cbS = (pvl->directAnswer[tenGageS][0] = ! dtA*dtA + dtD*dtD + dtF*dtF + 2*dtB*dtB + 2*dtC*dtC + 2*dtE*dtE); ! } ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageQ)) { ! cbQ = pvl->directAnswer[tenGageQ][0] = (cbS - cbB)/9; ! } ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFA)) { ! pvl->directAnswer[tenGageFA][0] = 3*sqrt(cbQ/cbS); ! } ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageR)) { ! pvl->directAnswer[tenGageR][0] = (5*cbA*cbB - 27*cbC - 2*cbA*cbS)/54; } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageEvec)) { *************** *** 166,198 **** if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTensorGrad)) { /* done if doD1 */ } ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageQ)) { ! cbA = -(dtA + dtD + dtF); ! cbB = dtA*dtD - dtB*dtB + dtA*dtF - dtC*dtC + dtD*dtF - dtE*dtE; ! /* ! cbC = -(dtA*dtD*dtF + 2*dtB*dtE*dtC ! - dtC*dtC*dtD - dtB*dtB*dtF - dtA*dtE*dtE); ! */ ! pvl->directAnswer[tenGageQ][0] = cbA*cbA - 3*cbB; } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageQGradVec)) { ! ELL_3V_SET(QgradAns, 0, 0, 0); ! ELL_3V_SCALE_INCR(QgradAns, dtA, tgradAns + 1*3); ! ELL_3V_SCALE_INCR(QgradAns, 2*dtB, tgradAns + 2*3); ! ELL_3V_SCALE_INCR(QgradAns, 2*dtC, tgradAns + 3*3); ! ELL_3V_SCALE_INCR(QgradAns, dtD, tgradAns + 4*3); ! ELL_3V_SCALE_INCR(QgradAns, 2*dtE, tgradAns + 5*3); ! ELL_3V_SCALE_INCR(QgradAns, dtF, tgradAns + 6*3); ! tmptmp = -(dtA + dtD + dtF)/3; ! ELL_3V_SCALE_INCR(QgradAns, tmptmp, tgradAns + 1*3); ! ELL_3V_SCALE_INCR(QgradAns, tmptmp, tgradAns + 4*3); ! ELL_3V_SCALE_INCR(QgradAns, tmptmp, tgradAns + 6*3); } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageQGradMag)) { ! tmptmp = pvl->directAnswer[tenGageQGradMag][0] = ELL_3V_LEN(QgradAns); } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageQNormal)) { ! ELL_3V_SCALE(pvl->directAnswer[tenGageQNormal], 1.0/tmptmp, QgradAns); } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageAniso)) { #if GAGE_TYPE_FLOAT --- 205,324 ---- if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTensorGrad)) { /* done if doD1 */ + vecTmp = pvl->directAnswer[tenGageTensorGrad]; + gradDtA = vecTmp + 1*3; + gradDtB = vecTmp + 2*3; + gradDtC = vecTmp + 3*3; + gradDtD = vecTmp + 4*3; + gradDtE = vecTmp + 5*3; + gradDtF = vecTmp + 6*3; } ! ! /* --- Trace --- */ ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTraceGradVec)) { ! vecTmp = pvl->directAnswer[tenGageTraceGradVec]; ! ELL_3V_ADD3(vecTmp, gradDtA, gradDtD, gradDtF); ! ELL_3V_SCALE(gradCbA, -1, vecTmp); ! } ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTraceGradMag)) { ! magTmp = pvl->directAnswer[tenGageTraceGradMag][0] = ELL_3V_LEN(vecTmp); ! } ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTraceNormal)) { ! ELL_3V_SCALE(pvl->directAnswer[tenGageTraceNormal], 1.0/magTmp, vecTmp); ! } ! /* --- B --- */ ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageBGradVec)) { ! gradCbB = vecTmp = pvl->directAnswer[tenGageBGradVec]; ! ELL_3V_SCALE_ADD6(vecTmp, ! dtD + dtF, gradDtA, ! -2*dtB, gradDtB, ! -2*dtC, gradDtC, ! dtA + dtF, gradDtD, ! -2*dtE, gradDtE, ! dtA + dtD, gradDtF); ! } ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageBGradMag)) { ! magTmp = pvl->directAnswer[tenGageBGradMag][0] = ELL_3V_LEN(vecTmp); ! } ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageBNormal)) { ! ELL_3V_SCALE(pvl->directAnswer[tenGageBNormal], 1.0/magTmp, vecTmp); ! } ! /* --- Det --- */ ! if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageDetGradVec)) { ! vecTmp = pvl->directAnswer[tenGageDetGradVec]; ! ELL_3V_SCALE_ADD6(vecTmp, ! dtD*dtF - dtE*dtE, gradDtA, ! 2*(dtC*dtE - dtB*dtF), gradDtB, ! 2*(dtB*dtE - dtC*dtD), gradDtC, ! dtA*dtF - dtC*dtC, gradDtD, ! 2*(dtB*dtC - dtA*dtE), gradDtE, ! dtA*dtD - dtB*dtB, gradDtF); } + if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageDetGradMag)) { + magTmp = pvl->directAnswer[tenGageDetGradMag][0] = ELL_3V_LEN(vecTmp); + } + if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageDetNormal)) { + ELL_3V_SCALE(pvl->directAnswer[tenGageDetNormal], 1.0/magTmp, vecTmp); + } + /* --- S --- */ + if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageSGradVec)) { + gradCbS = vecTmp = pvl->directAnswer[tenGageSGradVec]; + ELL_3V_SCALE_ADD6(vecTmp, + 2*dtA, gradDtA, + 4*dtB, gradDtB, + 4*dtC, gradDtC, + 2*dtD, gradDtD, + 4*dtE, gradDtE, + 2*dtF, gradDtF); + } + if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageSGradMag)) { + magTmp = pvl->directAnswer[tenGageSGradMag][0] = ELL_3V_LEN(vecTmp); + } + if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageSNormal)) { + ELL_3V_SCALE(pvl->directAnswer[tenGageSNormal], 1.0/magTmp, vecTmp); + } + /* --- Q --- */ if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageQGradVec)) { ! gradCbQ = vecTmp = pvl->directAnswer[tenGageQGradVec]; ! ELL_3V_SCALE_ADD2(vecTmp, ! 1.0/9.0, gradCbS, ! -1.0/9.0, gradCbB); } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageQGradMag)) { ! magTmp = pvl->directAnswer[tenGageQGradMag][0] = ELL_3V_LEN(vecTmp); } if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageQNormal)) { ! ELL_3V_SCALE(pvl->directAnswer[tenGageQNormal], 1.0/magTmp, vecTmp); } + /* --- FA --- */ + if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFAGradVec)) { + vecTmp = pvl->directAnswer[tenGageFAGradVec]; + tmp0 = 9.0/(2*pvl->directAnswer[tenGageFA][0]*cbS); + tmp1 = -tmp0*cbQ/cbS; + ELL_3V_SCALE_ADD2(vecTmp, + tmp0, gradCbQ, + tmp1, gradCbS); + } + if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFAGradMag)) { + magTmp = pvl->directAnswer[tenGageFAGradMag][0] = ELL_3V_LEN(vecTmp); + } + if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFANormal)) { + ELL_3V_SCALE(pvl->directAnswer[tenGageFANormal], 1.0/magTmp, vecTmp); + } + /* --- R --- */ + if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageRGradVec)) { + vecTmp = pvl->directAnswer[tenGageRGradVec]; + ELL_3V_SCALE_ADD4(vecTmp, + (5*cbB - 2*cbS)/54.0, gradCbA, + 1.0/2.0, pvl->directAnswer[tenGageDetGradVec], + 5.0*cbA/54.0, gradCbB, + -cbA/27.0, gradCbS); + } + if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageRGradMag)) { + magTmp = pvl->directAnswer[tenGageRGradMag][0] = ELL_3V_LEN(vecTmp); + } + if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageRNormal)) { + ELL_3V_SCALE(pvl->directAnswer[tenGageRNormal], 1.0/magTmp, vecTmp); + } + /* --- Aniso --- */ if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageAniso)) { #if GAGE_TYPE_FLOAT Index: tensor.c =================================================================== RCS file: /cvsroot/teem/teem/src/ten/tensor.c,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -d -r1.26 -r1.27 *** tensor.c 7 Jan 2004 15:34:31 -0000 1.26 --- tensor.c 23 Feb 2004 02:40:24 -0000 1.27 *************** *** 200,204 **** if (_evec) { ret = ell_3m_eigensolve_d(eval, evec, m, AIR_TRUE); ! if (ell_cubic_root_three != ret && tenVerbose) { fprintf(stderr, "---- cubic ret = %d\n", ret); fprintf(stderr, "tensor = {\n"); --- 200,204 ---- if (_evec) { ret = ell_3m_eigensolve_d(eval, evec, m, AIR_TRUE); ! if (tenVerbose) { fprintf(stderr, "---- cubic ret = %d\n", ret); fprintf(stderr, "tensor = {\n"); *************** *** 209,213 **** fprintf(stderr, " % 15.7f,\n", t[5]); fprintf(stderr, " % 15.7f}\n", t[6]); ! fprintf(stderr, "roots = \n"); fprintf(stderr, " % 31.15f\n", trc + eval[0]); fprintf(stderr, " % 31.15f\n", trc + eval[1]); --- 209,213 ---- fprintf(stderr, " % 15.7f,\n", t[5]); fprintf(stderr, " % 15.7f}\n", t[6]); ! fprintf(stderr, "roots = %d:\n", ret); fprintf(stderr, " % 31.15f\n", trc + eval[0]); fprintf(stderr, " % 31.15f\n", trc + eval[1]); |