| File: | src/ten/tenGage.c |
| Location: | line 1746, column 9 |
| Description: | Value stored to 'axis' is never read |
| 1 | /* |
| 2 | Teem: Tools to process and visualize scientific data and images . |
| 3 | Copyright (C) 2013, 2012, 2011, 2010, 2009 University of Chicago |
| 4 | Copyright (C) 2008, 2007, 2006, 2005 Gordon Kindlmann |
| 5 | Copyright (C) 2004, 2003, 2002, 2001, 2000, 1999, 1998 University of Utah |
| 6 | |
| 7 | This library is free software; you can redistribute it and/or |
| 8 | modify it under the terms of the GNU Lesser General Public License |
| 9 | (LGPL) as published by the Free Software Foundation; either |
| 10 | version 2.1 of the License, or (at your option) any later version. |
| 11 | The terms of redistributing and/or modifying this software also |
| 12 | include exceptions to the LGPL that facilitate static linking. |
| 13 | |
| 14 | This library is distributed in the hope that it will be useful, |
| 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 17 | Lesser General Public License for more details. |
| 18 | |
| 19 | You should have received a copy of the GNU Lesser General Public License |
| 20 | along with this library; if not, write to Free Software Foundation, Inc., |
| 21 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
| 22 | */ |
| 23 | |
| 24 | #include "ten.h" |
| 25 | #include "privateTen.h" |
| 26 | |
| 27 | typedef struct { |
| 28 | double *buffTen, *buffWght; |
| 29 | tenInterpParm *tip; /* sneakiness: using tip->allocLen to record |
| 30 | allocation sizes of buffTen and buffWght, too */ |
| 31 | } _tenGagePvlData; |
| 32 | |
| 33 | gageItemEntry |
| 34 | _tenGageTable[TEN_GAGE_ITEM_MAX207+1] = { |
| 35 | /* enum value len,deriv, prereqs, parent item, parent index, needData */ |
| 36 | {tenGageUnknown, 0, 0, {0}, 0, 0, AIR_FALSE0}, |
| 37 | {tenGageTensor, 7, 0, {0}, 0, 0, AIR_FALSE0}, |
| 38 | {tenGageConfidence, 1, 0, {tenGageTensor}, tenGageTensor, 0, AIR_FALSE0}, |
| 39 | |
| 40 | {tenGageTrace, 1, 0, {tenGageTensor}, 0, 0, AIR_FALSE0}, |
| 41 | {tenGageNorm, 1, 0, {tenGageTensor}, 0, 0, AIR_FALSE0}, |
| 42 | {tenGageB, 1, 0, {tenGageTensor}, 0, 0, AIR_FALSE0}, |
| 43 | {tenGageDet, 1, 0, {tenGageTensor}, 0, 0, AIR_FALSE0}, |
| 44 | {tenGageS, 1, 0, {tenGageTensor}, 0, 0, AIR_FALSE0}, |
| 45 | {tenGageQ, 1, 0, {tenGageS, tenGageB}, 0, 0, AIR_FALSE0}, |
| 46 | {tenGageFA, 1, 0, {tenGageQ, tenGageS}, 0, 0, AIR_FALSE0}, |
| 47 | {tenGageR, 1, 0, {tenGageTrace, tenGageB, tenGageDet, tenGageS}, 0, 0, AIR_FALSE0}, |
| 48 | {tenGageMode, 1, 0, {tenGageR, tenGageQ}, 0, 0, AIR_FALSE0}, |
| 49 | {tenGageTheta, 1, 0, {tenGageMode}, 0, 0, AIR_FALSE0}, |
| 50 | {tenGageModeWarp, 1, 0, {tenGageMode}, 0, 0, AIR_FALSE0}, |
| 51 | {tenGageOmega, 1, 0, {tenGageFA, tenGageMode}, 0, 0, AIR_FALSE0}, |
| 52 | |
| 53 | {tenGageEval, 3, 0, {tenGageTensor}, 0, 0, AIR_FALSE0}, |
| 54 | {tenGageEval0, 1, 0, {tenGageEval}, tenGageEval, 0, AIR_FALSE0}, |
| 55 | {tenGageEval1, 1, 0, {tenGageEval}, tenGageEval, 1, AIR_FALSE0}, |
| 56 | {tenGageEval2, 1, 0, {tenGageEval}, tenGageEval, 2, AIR_FALSE0}, |
| 57 | {tenGageEvec, 9, 0, {tenGageTensor}, 0, 0, AIR_FALSE0}, |
| 58 | {tenGageEvec0, 3, 0, {tenGageEvec}, tenGageEvec, 0, AIR_FALSE0}, |
| 59 | {tenGageEvec1, 3, 0, {tenGageEvec}, tenGageEvec, 3, AIR_FALSE0}, |
| 60 | {tenGageEvec2, 3, 0, {tenGageEvec}, tenGageEvec, 6, AIR_FALSE0}, |
| 61 | |
| 62 | {tenGageDelNormK2, 7, 0, {tenGageTensor}, 0, 0, AIR_FALSE0}, |
| 63 | {tenGageDelNormK3, 7, 0, {tenGageTensor}, 0, 0, AIR_FALSE0}, |
| 64 | {tenGageDelNormR1, 7, 0, {tenGageTensor}, 0, 0, AIR_FALSE0}, |
| 65 | {tenGageDelNormR2, 7, 0, {tenGageTensor}, 0, 0, AIR_FALSE0}, |
| 66 | |
| 67 | {tenGageDelNormPhi1, 7, 0, {tenGageEvec}, 0, 0, AIR_FALSE0}, |
| 68 | {tenGageDelNormPhi2, 7, 0, {tenGageEvec}, 0, 0, AIR_FALSE0}, |
| 69 | {tenGageDelNormPhi3, 7, 0, {tenGageEvec}, 0, 0, AIR_FALSE0}, |
| 70 | |
| 71 | {tenGageTensorGrad, 21, 1, {0}, 0, 0, AIR_FALSE0}, |
| 72 | {tenGageTensorGradMag, 3, 1, {tenGageTensorGrad}, 0, 0, AIR_FALSE0}, |
| 73 | {tenGageTensorGradMagMag, 1, 1, {tenGageTensorGradMag}, 0, 0, AIR_FALSE0}, |
| 74 | |
| 75 | {tenGageTraceGradVec, 3, 1, {tenGageTensor, tenGageTensorGrad}, 0, 0, AIR_FALSE0}, |
| 76 | {tenGageTraceGradMag, 1, 1, {tenGageTraceGradVec}, 0, 0, AIR_FALSE0}, |
| 77 | {tenGageTraceNormal, 3, 1, {tenGageTraceGradVec, tenGageTraceGradMag}, 0, 0, AIR_FALSE0}, |
| 78 | |
| 79 | {tenGageNormGradVec, 3, 1, {tenGageNorm, tenGageSGradVec}, 0, 0, AIR_FALSE0}, |
| 80 | {tenGageNormGradMag, 1, 1, {tenGageNormGradVec}, 0, 0, AIR_FALSE0}, |
| 81 | {tenGageNormNormal, 3, 1, {tenGageNormGradVec, tenGageNormGradMag}, 0, 0, AIR_FALSE0}, |
| 82 | |
| 83 | {tenGageBGradVec, 3, 1, {tenGageTensor, tenGageTensorGrad}, 0, 0, AIR_FALSE0}, |
| 84 | {tenGageBGradMag, 1, 1, {tenGageBGradVec}, 0, 0, AIR_FALSE0}, |
| 85 | {tenGageBNormal, 3, 1, {tenGageBGradVec, tenGageBGradMag}, 0, 0, AIR_FALSE0}, |
| 86 | |
| 87 | {tenGageDetGradVec, 3, 1, {tenGageTensor, tenGageTensorGrad}, 0, 0, AIR_FALSE0}, |
| 88 | {tenGageDetGradMag, 1, 1, {tenGageDetGradVec}, 0, 0, AIR_FALSE0}, |
| 89 | {tenGageDetNormal, 3, 1, {tenGageDetGradVec, tenGageDetGradMag}, 0, 0, AIR_FALSE0}, |
| 90 | |
| 91 | {tenGageSGradVec, 3, 1, {tenGageTensor, tenGageTensorGrad}, 0, 0, AIR_FALSE0}, |
| 92 | {tenGageSGradMag, 1, 1, {tenGageSGradVec}, 0, 0, AIR_FALSE0}, |
| 93 | {tenGageSNormal, 3, 1, {tenGageSGradVec, tenGageSGradMag}, 0, 0, AIR_FALSE0}, |
| 94 | |
| 95 | {tenGageQGradVec, 3, 1, {tenGageSGradVec, tenGageBGradVec}, 0, 0, AIR_FALSE0}, |
| 96 | {tenGageQGradMag, 1, 1, {tenGageQGradVec}, 0, 0, AIR_FALSE0}, |
| 97 | {tenGageQNormal, 3, 1, {tenGageQGradVec, tenGageQGradMag}, 0, 0, AIR_FALSE0}, |
| 98 | |
| 99 | {tenGageFAGradVec, 3, 1, {tenGageQGradVec, tenGageSGradVec, tenGageFA}, 0, 0, AIR_FALSE0}, |
| 100 | {tenGageFAGradMag, 1, 1, {tenGageFAGradVec}, 0, 0, AIR_FALSE0}, |
| 101 | {tenGageFANormal, 3, 1, {tenGageFAGradVec, tenGageFAGradMag}, 0, 0, AIR_FALSE0}, |
| 102 | |
| 103 | {tenGageRGradVec, 3, 1, {tenGageR, tenGageTraceGradVec, tenGageBGradVec, |
| 104 | tenGageDetGradVec, tenGageSGradVec}, 0, 0, AIR_FALSE0}, |
| 105 | {tenGageRGradMag, 1, 1, {tenGageRGradVec}, 0, 0, AIR_FALSE0}, |
| 106 | {tenGageRNormal, 3, 1, {tenGageRGradVec, tenGageRGradMag}, 0, 0, AIR_FALSE0}, |
| 107 | |
| 108 | {tenGageModeGradVec, 3, 1, {tenGageRGradVec, tenGageQGradVec, tenGageMode}, 0, 0, AIR_FALSE0}, |
| 109 | {tenGageModeGradMag, 1, 1, {tenGageModeGradVec}, 0, 0, AIR_FALSE0}, |
| 110 | {tenGageModeNormal, 3, 1, {tenGageModeGradVec, tenGageModeGradMag}, 0, 0, AIR_FALSE0}, |
| 111 | |
| 112 | {tenGageThetaGradVec, 3, 1, {tenGageRGradVec, tenGageQGradVec, tenGageTheta}, 0, 0, AIR_FALSE0}, |
| 113 | {tenGageThetaGradMag, 1, 1, {tenGageThetaGradVec}, 0, 0, AIR_FALSE0}, |
| 114 | {tenGageThetaNormal, 3, 1, {tenGageThetaGradVec, tenGageThetaGradMag}, 0, 0, AIR_FALSE0}, |
| 115 | |
| 116 | {tenGageOmegaGradVec, 3, 1, {tenGageFA, tenGageMode, tenGageFAGradVec, tenGageModeGradVec}, 0, 0, AIR_FALSE0}, |
| 117 | {tenGageOmegaGradMag, 1, 1, {tenGageOmegaGradVec}, 0, 0, AIR_FALSE0}, |
| 118 | {tenGageOmegaNormal, 3, 1, {tenGageOmegaGradVec, tenGageOmegaGradMag}, 0, 0, AIR_FALSE0}, |
| 119 | |
| 120 | {tenGageInvarKGrads, 9, 1, {tenGageDelNormK2, tenGageDelNormK3, tenGageTensorGrad}, 0, 0, AIR_FALSE0}, |
| 121 | {tenGageInvarKGradMags, 3, 1, {tenGageInvarKGrads}, 0, 0, AIR_FALSE0}, |
| 122 | {tenGageInvarRGrads, 9, 1, {tenGageDelNormR1, tenGageDelNormR2, tenGageDelNormK3, |
| 123 | tenGageTensorGrad}, 0, 0, AIR_FALSE0}, |
| 124 | {tenGageInvarRGradMags, 3, 1, {tenGageInvarRGrads}, 0, 0, AIR_FALSE0}, |
| 125 | |
| 126 | {tenGageRotTans, 9, 1, {tenGageDelNormPhi1, tenGageDelNormPhi2, tenGageDelNormPhi3, |
| 127 | tenGageTensorGrad}, 0, 0, AIR_FALSE0}, |
| 128 | {tenGageRotTanMags, 3, 1, {tenGageRotTans}, 0, 0, AIR_FALSE0}, |
| 129 | |
| 130 | {tenGageEvalGrads, 9, 1, {tenGageTensorGrad, tenGageEval, tenGageEvec}, 0, 0, AIR_FALSE0}, |
| 131 | |
| 132 | {tenGageCl1, 1, 0, {tenGageTensor, tenGageEval0, tenGageEval1, tenGageEval2}, 0, 0, AIR_FALSE0}, |
| 133 | {tenGageCp1, 1, 0, {tenGageTensor, tenGageEval0, tenGageEval1, tenGageEval2}, 0, 0, AIR_FALSE0}, |
| 134 | {tenGageCa1, 1, 0, {tenGageTensor, tenGageEval0, tenGageEval1, tenGageEval2}, 0, 0, AIR_FALSE0}, |
| 135 | {tenGageClpmin1, 1, 0, {tenGageTensor, tenGageEval0, tenGageEval1, tenGageEval2}, 0, 0, AIR_FALSE0}, |
| 136 | {tenGageCl2, 1, 0, {tenGageTensor, tenGageEval0, tenGageEval1, tenGageEval2}, 0, 0, AIR_FALSE0}, |
| 137 | {tenGageCp2, 1, 0, {tenGageTensor, tenGageEval0, tenGageEval1, tenGageEval2}, 0, 0, AIR_FALSE0}, |
| 138 | {tenGageCa2, 1, 0, {tenGageTensor, tenGageEval0, tenGageEval1, tenGageEval2}, 0, 0, AIR_FALSE0}, |
| 139 | {tenGageClpmin2, 1, 0, {tenGageTensor, tenGageEval0, tenGageEval1, tenGageEval2}, 0, 0, AIR_FALSE0}, |
| 140 | |
| 141 | {tenGageHessian, 63, 2, {0}, 0, 0, AIR_FALSE0}, |
| 142 | {tenGageTraceHessian, 9, 2, {tenGageHessian}, 0, 0, AIR_FALSE0}, |
| 143 | {tenGageTraceHessianEval, 3, 2, {tenGageTraceHessian}, 0, 0, AIR_FALSE0}, |
| 144 | {tenGageTraceHessianEval0, 1, 2, {tenGageTraceHessianEval}, tenGageTraceHessianEval, 0, AIR_FALSE0}, |
| 145 | {tenGageTraceHessianEval1, 1, 2, {tenGageTraceHessianEval}, tenGageTraceHessianEval, 1, AIR_FALSE0}, |
| 146 | {tenGageTraceHessianEval2, 1, 2, {tenGageTraceHessianEval}, tenGageTraceHessianEval, 2, AIR_FALSE0}, |
| 147 | {tenGageTraceHessianEvec, 9, 2, {tenGageTraceHessian}, 0, 0, AIR_FALSE0}, |
| 148 | {tenGageTraceHessianEvec0, 3, 2, {tenGageTraceHessianEvec}, tenGageTraceHessianEvec, 0, AIR_FALSE0}, |
| 149 | {tenGageTraceHessianEvec1, 3, 2, {tenGageTraceHessianEvec}, tenGageTraceHessianEvec, 3, AIR_FALSE0}, |
| 150 | {tenGageTraceHessianEvec2, 3, 2, {tenGageTraceHessianEvec}, tenGageTraceHessianEvec, 6, AIR_FALSE0}, |
| 151 | {tenGageTraceHessianFrob, 1, 2, {tenGageTraceHessian}, 0, 0, AIR_FALSE0}, |
| 152 | {tenGageBHessian, 9, 2, {tenGageTensor, tenGageTensorGrad, tenGageHessian}, 0, 0, AIR_FALSE0}, |
| 153 | {tenGageDetHessian, 9, 2, {tenGageTensor, tenGageTensorGrad, tenGageHessian}, 0, 0, AIR_FALSE0}, |
| 154 | {tenGageSHessian, 9, 2, {tenGageTensor, tenGageTensorGrad, tenGageHessian}, 0, 0, AIR_FALSE0}, |
| 155 | {tenGageQHessian, 9, 2, {tenGageBHessian, tenGageSHessian}, 0, 0, AIR_FALSE0}, |
| 156 | |
| 157 | {tenGageFAHessian, 9, 2, {tenGageSHessian, tenGageQHessian, |
| 158 | tenGageSGradVec, tenGageQGradVec, tenGageFA}, 0, 0, AIR_FALSE0}, |
| 159 | {tenGageFAHessianEval, 3, 2, {tenGageFAHessian}, 0, 0, AIR_FALSE0}, |
| 160 | {tenGageFAHessianEval0, 1, 2, {tenGageFAHessianEval}, tenGageFAHessianEval, 0, AIR_FALSE0}, |
| 161 | {tenGageFAHessianEval1, 1, 2, {tenGageFAHessianEval}, tenGageFAHessianEval, 1, AIR_FALSE0}, |
| 162 | {tenGageFAHessianEval2, 1, 2, {tenGageFAHessianEval}, tenGageFAHessianEval, 2, AIR_FALSE0}, |
| 163 | {tenGageFAHessianEvec, 9, 2, {tenGageFAHessian}, 0, 0, AIR_FALSE0}, |
| 164 | {tenGageFAHessianEvec0, 3, 2, {tenGageFAHessianEvec}, tenGageFAHessianEvec, 0, AIR_FALSE0}, |
| 165 | {tenGageFAHessianEvec1, 3, 2, {tenGageFAHessianEvec}, tenGageFAHessianEvec, 3, AIR_FALSE0}, |
| 166 | {tenGageFAHessianEvec2, 3, 2, {tenGageFAHessianEvec}, tenGageFAHessianEvec, 6, AIR_FALSE0}, |
| 167 | {tenGageFAHessianFrob, 1, 2, {tenGageFAHessian}, 0, 0, AIR_FALSE0}, |
| 168 | {tenGageFARidgeSurfaceStrength, 1, 2, {tenGageConfidence, tenGageFAHessianEval}, 0, 0, AIR_FALSE0}, |
| 169 | {tenGageFAValleySurfaceStrength, 1, 2, {tenGageConfidence, tenGageFAHessianEval}, 0, 0, AIR_FALSE0}, |
| 170 | {tenGageFALaplacian, 1, 2, {tenGageFAHessian}, 0, 0, AIR_FALSE0}, |
| 171 | {tenGageFAHessianEvalMode, 1, 2, {tenGageFAHessianEval}, 0, 0, AIR_FALSE0}, |
| 172 | {tenGageFARidgeLineAlignment, 1, 2, {tenGageEvec0, tenGageFAHessianEvec0, tenGageFAHessianEvalMode}, 0, 0, AIR_FALSE0}, |
| 173 | {tenGageFARidgeSurfaceAlignment, 1, 2, {tenGageEvec0, tenGageFAHessianEvec2, tenGageFAHessianEvalMode}, 0, 0, AIR_FALSE0}, |
| 174 | {tenGageFA2ndDD, 1, 2, {tenGageFAHessian, tenGageFANormal}, 0, 0, AIR_FALSE0}, |
| 175 | |
| 176 | {tenGageFAGeomTens, 9, 2, {tenGageFAHessian, tenGageFAGradMag, tenGageFANormal}, 0, 0, AIR_FALSE0}, |
| 177 | {tenGageFAKappa1, 1, 2, {tenGageFAGeomTens}, 0, 0, AIR_FALSE0}, |
| 178 | {tenGageFAKappa2, 1, 2, {tenGageFAGeomTens}, 0, 0, AIR_FALSE0}, |
| 179 | {tenGageFATotalCurv, 1, 2, {tenGageFAGeomTens}, 0, 0, AIR_FALSE0}, |
| 180 | {tenGageFAShapeIndex, 1, 2, {tenGageFAKappa1, tenGageFAKappa2}, 0, 0, AIR_FALSE0}, |
| 181 | {tenGageFAMeanCurv, 1, 2, {tenGageFAKappa1, tenGageFAKappa2}, 0, 0, AIR_FALSE0}, |
| 182 | {tenGageFAGaussCurv, 1, 2, {tenGageFAKappa1, tenGageFAKappa2}, 0, 0, AIR_FALSE0}, |
| 183 | {tenGageFACurvDir1, 3, 2, {tenGageFAGeomTens, tenGageFAKappa2}, 0, 0, AIR_FALSE0}, |
| 184 | {tenGageFACurvDir2, 3, 2, {tenGageFAGeomTens, tenGageFAKappa1}, 0, 0, AIR_FALSE0}, |
| 185 | {tenGageFAFlowlineCurv, 1, 2, {tenGageFANormal, tenGageFAHessian, tenGageFAGradMag}, 0, 0, AIR_FALSE0}, |
| 186 | |
| 187 | {tenGageRHessian, 9, 2, {tenGageR, tenGageRGradVec, tenGageTraceHessian, |
| 188 | tenGageBHessian, tenGageDetHessian, tenGageSHessian}, 0, 0, AIR_FALSE0}, |
| 189 | |
| 190 | {tenGageModeHessian, 9, 2, {tenGageR, tenGageQ, tenGageRGradVec, tenGageQGradVec, |
| 191 | tenGageRHessian, tenGageQHessian}, 0, 0, AIR_FALSE0}, |
| 192 | {tenGageModeHessianEval, 3, 2, {tenGageModeHessian}, 0, 0, AIR_FALSE0}, |
| 193 | {tenGageModeHessianEval0, 1, 2, {tenGageModeHessianEval}, tenGageModeHessianEval, 0, AIR_FALSE0}, |
| 194 | {tenGageModeHessianEval1, 1, 2, {tenGageModeHessianEval}, tenGageModeHessianEval, 1, AIR_FALSE0}, |
| 195 | {tenGageModeHessianEval2, 1, 2, {tenGageModeHessianEval}, tenGageModeHessianEval, 2, AIR_FALSE0}, |
| 196 | {tenGageModeHessianEvec, 9, 2, {tenGageModeHessian}, 0, 0, AIR_FALSE0}, |
| 197 | {tenGageModeHessianEvec0, 3, 2, {tenGageModeHessianEvec}, tenGageModeHessianEvec, 0, AIR_FALSE0}, |
| 198 | {tenGageModeHessianEvec1, 3, 2, {tenGageModeHessianEvec}, tenGageModeHessianEvec, 3, AIR_FALSE0}, |
| 199 | {tenGageModeHessianEvec2, 3, 2, {tenGageModeHessianEvec}, tenGageModeHessianEvec, 6, AIR_FALSE0}, |
| 200 | {tenGageModeHessianFrob, 1, 2, {tenGageModeHessian}, 0, 0, AIR_FALSE0}, |
| 201 | |
| 202 | {tenGageOmegaHessian, 9, 2, {tenGageFA, tenGageMode, tenGageFAGradVec, tenGageModeGradVec, |
| 203 | tenGageFAHessian, tenGageModeHessian}, 0, 0, AIR_FALSE0}, |
| 204 | {tenGageOmegaHessianEval, 3, 2, {tenGageOmegaHessian}, 0, 0, AIR_FALSE0}, |
| 205 | {tenGageOmegaHessianEval0, 1, 2, {tenGageOmegaHessianEval}, tenGageOmegaHessianEval, 0, AIR_FALSE0}, |
| 206 | {tenGageOmegaHessianEval1, 1, 2, {tenGageOmegaHessianEval}, tenGageOmegaHessianEval, 1, AIR_FALSE0}, |
| 207 | {tenGageOmegaHessianEval2, 1, 2, {tenGageOmegaHessianEval}, tenGageOmegaHessianEval, 2, AIR_FALSE0}, |
| 208 | {tenGageOmegaHessianEvec, 9, 2, {tenGageOmegaHessian}, 0, 0, AIR_FALSE0}, |
| 209 | {tenGageOmegaHessianEvec0, 3, 2, {tenGageOmegaHessianEvec}, tenGageOmegaHessianEvec, 0, AIR_FALSE0}, |
| 210 | {tenGageOmegaHessianEvec1, 3, 2, {tenGageOmegaHessianEvec}, tenGageOmegaHessianEvec, 3, AIR_FALSE0}, |
| 211 | {tenGageOmegaHessianEvec2, 3, 2, {tenGageOmegaHessianEvec}, tenGageOmegaHessianEvec, 6, AIR_FALSE0}, |
| 212 | {tenGageOmegaLaplacian, 1, 2, {tenGageOmegaHessian}, 0, 0, AIR_FALSE0}, |
| 213 | {tenGageOmega2ndDD, 1, 2, {tenGageOmegaHessian, tenGageOmegaNormal}, 0, 0, AIR_FALSE0}, |
| 214 | |
| 215 | {tenGageOmegaHessianContrTenEvec0, 1, 2, {tenGageOmegaHessian, tenGageEvec0}, 0, 0, AIR_FALSE0}, |
| 216 | {tenGageOmegaHessianContrTenEvec1, 1, 2, {tenGageOmegaHessian, tenGageEvec1}, 0, 0, AIR_FALSE0}, |
| 217 | {tenGageOmegaHessianContrTenEvec2, 1, 2, {tenGageOmegaHessian, tenGageEvec2}, 0, 0, AIR_FALSE0}, |
| 218 | |
| 219 | {tenGageTraceGradVecDotEvec0, 1, 1, {tenGageTraceGradVec, tenGageEvec0}, 0, 0, AIR_FALSE0}, |
| 220 | {tenGageTraceDiffusionAlign, 1, 1, {tenGageTraceNormal, tenGageEvec0}, 0, 0, AIR_FALSE0}, |
| 221 | {tenGageTraceDiffusionFraction, 1, 1, {tenGageTraceNormal, tenGageTensor}, 0, 0, AIR_FALSE0}, |
| 222 | |
| 223 | {tenGageFAGradVecDotEvec0, 1, 1, {tenGageFAGradVec, tenGageEvec0}, 0, 0, AIR_FALSE0}, |
| 224 | {tenGageFADiffusionAlign, 1, 1, {tenGageFANormal, tenGageEvec0}, 0, 0, AIR_FALSE0}, |
| 225 | {tenGageFADiffusionFraction, 1, 1, {tenGageFANormal, tenGageTensor}, 0, 0, AIR_FALSE0}, |
| 226 | |
| 227 | {tenGageOmegaGradVecDotEvec0, 1, 1, {tenGageOmegaGradVec, tenGageEvec0}, 0, 0, AIR_FALSE0}, |
| 228 | {tenGageOmegaDiffusionAlign, 1, 1, {tenGageOmegaNormal, tenGageEvec0}, 0, 0, AIR_FALSE0}, |
| 229 | {tenGageOmegaDiffusionFraction, 1, 1, {tenGageOmegaNormal, tenGageTensor}, 0, 0, AIR_FALSE0}, |
| 230 | |
| 231 | /* currently don't have tenGageConfGradVec */ |
| 232 | {tenGageConfGradVecDotEvec0, 1, 1, {tenGageTensorGrad, tenGageEvec0}, 0, 0, AIR_FALSE0}, |
| 233 | {tenGageConfDiffusionAlign, 1, 1, {tenGageTensorGrad, tenGageEvec0}, 0, 0, AIR_FALSE0}, |
| 234 | {tenGageConfDiffusionFraction, 1, 1, {tenGageTensorGrad, tenGageTensor}, 0, 0, AIR_FALSE0}, |
| 235 | |
| 236 | {tenGageCovariance, 21, 0, {tenGageTensor}, /* and all the values in iv3 */ 0, 0, AIR_FALSE0}, |
| 237 | {tenGageCovarianceRGRT, 21, 0, {tenGageCovariance, |
| 238 | tenGageDelNormR1, tenGageDelNormR2, tenGageDelNormK3, |
| 239 | tenGageDelNormPhi1, tenGageDelNormPhi2, tenGageDelNormPhi3}, 0, 0, AIR_FALSE0}, |
| 240 | {tenGageCovarianceKGRT, 21, 0, {tenGageCovariance, |
| 241 | tenGageDelNormK2, tenGageDelNormK3, |
| 242 | tenGageDelNormPhi1, tenGageDelNormPhi2, tenGageDelNormPhi3}, 0, 0, AIR_FALSE0}, |
| 243 | |
| 244 | {tenGageTensorLogEuclidean, 7, 0, {0}, 0, 0, AIR_FALSE0}, |
| 245 | {tenGageTensorQuatGeoLoxK, 7, 0, {0}, 0, 0, AIR_FALSE0}, |
| 246 | {tenGageTensorQuatGeoLoxR, 7, 0, {0}, 0, 0, AIR_FALSE0}, |
| 247 | {tenGageTensorRThetaPhiLinear, 7, 0, {0}, 0, 0, AIR_FALSE0}, |
| 248 | {tenGageCl1GradVec, 3, 1, {tenGageTrace, tenGageEval, tenGageEvalGrads}, 0, 0, AIR_FALSE0}, |
| 249 | {tenGageCl1GradMag, 1, 1, {tenGageCl1GradVec}, 0, 0, AIR_FALSE0}, |
| 250 | {tenGageCl1Normal, 3, 1, {tenGageCl1GradVec, tenGageCl1GradMag}, 0, 0, AIR_FALSE0}, |
| 251 | {tenGageCp1GradVec, 3, 1, {tenGageTrace, tenGageEval, tenGageEvalGrads}, 0, 0, AIR_FALSE0}, |
| 252 | {tenGageCp1GradMag, 1, 1, {tenGageCp1GradVec}, 0, 0, AIR_FALSE0}, |
| 253 | {tenGageCp1Normal, 3, 1, {tenGageCp1GradVec, tenGageCp1GradMag}, 0, 0, AIR_FALSE0}, |
| 254 | {tenGageCa1GradVec, 3, 1, {tenGageTrace, tenGageEval, tenGageEvalGrads}, 0, 0, AIR_FALSE0}, |
| 255 | {tenGageCa1GradMag, 1, 1, {tenGageCa1GradVec}, 0, 0, AIR_FALSE0}, |
| 256 | {tenGageCa1Normal, 3, 1, {tenGageCa1GradVec, tenGageCa1GradMag}, 0, 0, AIR_FALSE0}, |
| 257 | {tenGageTensorGradRotE, 21, 1, {tenGageTensorGrad, tenGageEval, tenGageEvec}, 0, 0, AIR_FALSE0}, |
| 258 | {tenGageEvalHessian, 27, 2, {tenGageTensorGradRotE, tenGageHessian, tenGageEval}, 0, 0, AIR_FALSE0 }, |
| 259 | {tenGageCl1Hessian, 9, 2, {tenGageTensorGradRotE, tenGageEvalHessian}, 0, 0, AIR_FALSE0 }, |
| 260 | {tenGageCl1HessianEval, 3, 2, {tenGageCl1Hessian}, 0, 0, AIR_FALSE0 }, |
| 261 | {tenGageCl1HessianEval0, 1, 2, {tenGageCl1HessianEval}, tenGageCl1HessianEval, 0, AIR_FALSE0}, |
| 262 | {tenGageCl1HessianEval1, 1, 2, {tenGageCl1HessianEval}, tenGageCl1HessianEval, 1, AIR_FALSE0}, |
| 263 | {tenGageCl1HessianEval2, 1, 2, {tenGageCl1HessianEval}, tenGageCl1HessianEval, 2, AIR_FALSE0}, |
| 264 | {tenGageCl1HessianEvec, 9, 2, {tenGageCl1Hessian}, 0, 0, AIR_FALSE0 }, |
| 265 | {tenGageCl1HessianEvec0, 3, 2, {tenGageCl1HessianEvec}, tenGageCl1HessianEvec, 0, AIR_FALSE0}, |
| 266 | {tenGageCl1HessianEvec1, 3, 2, {tenGageCl1HessianEvec}, tenGageCl1HessianEvec, 3, AIR_FALSE0}, |
| 267 | {tenGageCl1HessianEvec2, 3, 2, {tenGageCl1HessianEvec}, tenGageCl1HessianEvec, 6, AIR_FALSE0}, |
| 268 | {tenGageCp1Hessian, 9, 2, {tenGageTensorGradRotE, tenGageEvalHessian}, 0, 0, AIR_FALSE0 }, |
| 269 | {tenGageCp1HessianEval, 3, 2, {tenGageCp1Hessian}, 0, 0, AIR_FALSE0 }, |
| 270 | {tenGageCp1HessianEval0, 1, 2, {tenGageCp1HessianEval}, tenGageCp1HessianEval, 0, AIR_FALSE0}, |
| 271 | {tenGageCp1HessianEval1, 1, 2, {tenGageCp1HessianEval}, tenGageCp1HessianEval, 1, AIR_FALSE0}, |
| 272 | {tenGageCp1HessianEval2, 1, 2, {tenGageCp1HessianEval}, tenGageCp1HessianEval, 2, AIR_FALSE0}, |
| 273 | {tenGageCp1HessianEvec, 9, 2, {tenGageCp1Hessian}, 0, 0, AIR_FALSE0 }, |
| 274 | {tenGageCp1HessianEvec0, 3, 2, {tenGageCp1HessianEvec}, tenGageCp1HessianEvec, 0, AIR_FALSE0}, |
| 275 | {tenGageCp1HessianEvec1, 3, 2, {tenGageCp1HessianEvec}, tenGageCp1HessianEvec, 3, AIR_FALSE0}, |
| 276 | {tenGageCp1HessianEvec2, 3, 2, {tenGageCp1HessianEvec}, tenGageCp1HessianEvec, 6, AIR_FALSE0}, |
| 277 | {tenGageCa1Hessian, 9, 2, {tenGageTensorGradRotE, tenGageEvalHessian}, 0, 0, AIR_FALSE0 }, |
| 278 | {tenGageCa1HessianEval, 3, 2, {tenGageCa1Hessian}, 0, 0, AIR_FALSE0 }, |
| 279 | {tenGageCa1HessianEval0, 1, 2, {tenGageCa1HessianEval}, tenGageCa1HessianEval, 0, AIR_FALSE0}, |
| 280 | {tenGageCa1HessianEval1, 1, 2, {tenGageCa1HessianEval}, tenGageCa1HessianEval, 1, AIR_FALSE0}, |
| 281 | {tenGageCa1HessianEval2, 1, 2, {tenGageCa1HessianEval}, tenGageCa1HessianEval, 2, AIR_FALSE0}, |
| 282 | {tenGageCa1HessianEvec, 9, 2, {tenGageCa1Hessian}, 0, 0, AIR_FALSE0 }, |
| 283 | {tenGageCa1HessianEvec0, 3, 2, {tenGageCa1HessianEvec}, tenGageCa1HessianEvec, 0, AIR_FALSE0}, |
| 284 | {tenGageCa1HessianEvec1, 3, 2, {tenGageCa1HessianEvec}, tenGageCa1HessianEvec, 3, AIR_FALSE0}, |
| 285 | {tenGageCa1HessianEvec2, 3, 2, {tenGageCa1HessianEvec}, tenGageCa1HessianEvec, 6, AIR_FALSE0}, |
| 286 | {tenGageFiberCurving, 1, 1, {tenGageRotTans, tenGageEvec}, 0, 0, AIR_FALSE0 }, |
| 287 | {tenGageFiberDispersion, 1, 1, {tenGageRotTans, tenGageEvec}, 0, 0, AIR_FALSE0 }, |
| 288 | {tenGageAniso, TEN_ANISO_MAX29+1, 0, {tenGageEval0, tenGageEval1, tenGageEval2}, 0, 0, AIR_FALSE0} |
| 289 | }; |
| 290 | |
| 291 | void |
| 292 | _tenGageIv3Print(FILE *file, gageContext *ctx, gagePerVolume *pvl) { |
| 293 | double *iv3; |
| 294 | int i, fd; |
| 295 | |
| 296 | fd = 2*ctx->radius; |
| 297 | iv3 = pvl->iv3 + fd*fd*fd; |
| 298 | fprintf(file, "iv3[]'s *Dxx* component:\n"); |
| 299 | switch(fd) { |
| 300 | case 2: |
| 301 | fprintf(file, "% 10.4f % 10.4f\n", (float)iv3[6], (float)iv3[7]); |
| 302 | fprintf(file, " % 10.4f % 10.4f\n\n", (float)iv3[4], (float)iv3[5]); |
| 303 | fprintf(file, "% 10.4f % 10.4f\n", (float)iv3[2], (float)iv3[3]); |
| 304 | fprintf(file, " % 10.4f % 10.4f\n", (float)iv3[0], (float)iv3[1]); |
| 305 | break; |
| 306 | case 4: |
| 307 | for (i=3; i>=0; i--) { |
| 308 | fprintf(file, "% 10.4f % 10.4f % 10.4f % 10.4f\n", |
| 309 | (float)iv3[12+16*i], (float)iv3[13+16*i], |
| 310 | (float)iv3[14+16*i], (float)iv3[15+16*i]); |
| 311 | fprintf(file, " % 10.4f %c% 10.4f % 10.4f%c % 10.4f\n", |
| 312 | (float)iv3[ 8+16*i], (i==1||i==2)?'\\':' ', |
| 313 | (float)iv3[ 9+16*i], (float)iv3[10+16*i], (i==1||i==2)?'\\':' ', |
| 314 | (float)iv3[11+16*i]); |
| 315 | fprintf(file, " % 10.4f %c% 10.4f % 10.4f%c % 10.4f\n", |
| 316 | (float)iv3[ 4+16*i], (i==1||i==2)?'\\':' ', |
| 317 | (float)iv3[ 5+16*i], (float)iv3[ 6+16*i], (i==1||i==2)?'\\':' ', |
| 318 | (float)iv3[ 7+16*i]); |
| 319 | fprintf(file, " % 10.4f % 10.4f % 10.4f % 10.4f\n", |
| 320 | (float)iv3[ 0+16*i], (float)iv3[ 1+16*i], |
| 321 | (float)iv3[ 2+16*i], (float)iv3[ 3+16*i]); |
| 322 | if (i) fprintf(file, "\n"); |
| 323 | } |
| 324 | break; |
| 325 | default: |
| 326 | for (i=0; i<fd*fd*fd; i++) { |
| 327 | fprintf(file, " iv3[% 3d,% 3d,% 3d] = % 10.4f\n", |
| 328 | i%fd, (i/fd)%fd, i/(fd*fd), (float)iv3[i]); |
| 329 | } |
| 330 | break; |
| 331 | } |
| 332 | return; |
| 333 | } |
| 334 | |
| 335 | void |
| 336 | _tenGageFilter(gageContext *ctx, gagePerVolume *pvl) { |
| 337 | char me[]="_tenGageFilter"; |
| 338 | double *fw00, *fw11, *fw22, *ten, *tgrad, *thess; |
| 339 | int fd; |
| 340 | gageScl3PFilter_t *filter[5] = {NULL((void*)0), gageScl3PFilter2, gageScl3PFilter4, |
| 341 | gageScl3PFilter6, gageScl3PFilter8}; |
| 342 | unsigned int valIdx; |
| 343 | |
| 344 | fd = 2*ctx->radius; |
| 345 | ten = pvl->directAnswer[tenGageTensor]; |
| 346 | tgrad = pvl->directAnswer[tenGageTensorGrad]; |
| 347 | thess = pvl->directAnswer[tenGageHessian]; |
| 348 | if (!ctx->parm.k3pack) { |
| 349 | fprintf(stderr__stderrp, "!%s: sorry, 6pack filtering not implemented\n", me); |
| 350 | return; |
| 351 | } |
| 352 | fw00 = ctx->fw + fd*3*gageKernel00; |
| 353 | fw11 = ctx->fw + fd*3*gageKernel11; |
| 354 | fw22 = ctx->fw + fd*3*gageKernel22; |
| 355 | /* perform the filtering */ |
| 356 | /* HEY: we still want trilinear interpolation of confidence, no? */ |
| 357 | if (fd <= 8) { |
| 358 | for (valIdx=0; valIdx<7; valIdx++) { |
| 359 | filter[ctx->radius](ctx->shape, |
| 360 | pvl->iv3 + valIdx*fd*fd*fd, |
| 361 | pvl->iv2 + valIdx*fd*fd, |
| 362 | pvl->iv1 + valIdx*fd, |
| 363 | fw00, fw11, fw22, |
| 364 | ten + valIdx, tgrad + valIdx*3, thess + valIdx*9, |
| 365 | pvl->needD); |
| 366 | } |
| 367 | } else { |
| 368 | for (valIdx=0; valIdx<7; valIdx++) { |
| 369 | gageScl3PFilterN(ctx->shape, fd, |
| 370 | pvl->iv3 + valIdx*fd*fd*fd, |
| 371 | pvl->iv2 + valIdx*fd*fd, |
| 372 | pvl->iv1 + valIdx*fd, |
| 373 | fw00, fw11, fw22, |
| 374 | ten + valIdx, tgrad + valIdx*3, thess + valIdx*9, |
| 375 | pvl->needD); |
| 376 | } |
| 377 | } |
| 378 | |
| 379 | return; |
| 380 | } |
| 381 | |
| 382 | void |
| 383 | _tenGageAnswer(gageContext *ctx, gagePerVolume *pvl) { |
| 384 | char me[]="_tenGageAnswer"; |
| 385 | double *tenAns, *evalAns, *evecAns, *vecTmp=NULL((void*)0), *matTmp=NULL((void*)0), |
| 386 | *gradDtA=NULL((void*)0), *gradDtB=NULL((void*)0), *gradDtC=NULL((void*)0), |
| 387 | *gradDtD=NULL((void*)0), *gradDtE=NULL((void*)0), *gradDtF=NULL((void*)0), |
| 388 | *hessDtA=NULL((void*)0), *hessDtB=NULL((void*)0), *hessDtC=NULL((void*)0), |
| 389 | *hessDtD=NULL((void*)0), *hessDtE=NULL((void*)0), *hessDtF=NULL((void*)0), |
| 390 | *gradCbS=NULL((void*)0), *gradCbB=NULL((void*)0), *gradCbQ=NULL((void*)0), *gradCbR=NULL((void*)0), |
| 391 | *hessCbS=NULL((void*)0), *hessCbB=NULL((void*)0), *hessCbQ=NULL((void*)0), *hessCbR=NULL((void*)0), |
| 392 | gradDdXYZ[21]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; |
| 393 | double tmp0, tmp1, tmp3, magTmp=0, |
| 394 | dtA=0, dtB=0, dtC=0, dtD=0, dtE=0, dtF=0, |
| 395 | cbQ=0, cbR=0, cbA=0, cbB=0, cbC=0, cbS=0, |
| 396 | gradCbA[3]={0,0,0}, gradCbC[3]={0,0,0}; |
| 397 | double hessCbA[9]={0,0,0,0,0,0,0,0,0}, |
| 398 | hessCbC[9]={0,0,0,0,0,0,0,0,0}; |
| 399 | int ci; |
| 400 | |
| 401 | tenAns = pvl->directAnswer[tenGageTensor]; |
| 402 | evalAns = pvl->directAnswer[tenGageEval]; |
| 403 | evecAns = pvl->directAnswer[tenGageEvec]; |
| 404 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTensor)(pvl->query[tenGageTensor/8] & (1 << (tenGageTensor % 8)))) { |
| 405 | /* done if doV */ |
| 406 | /* HEY: this was prohibiting a Deft-related hack |
| 407 | tenAns[0] = AIR_CLAMP(0, tenAns[0], 1); |
| 408 | */ |
| 409 | /* HEY: and this was botching using 1-conf as potential energy for push |
| 410 | tenAns[0] = AIR_MAX(0, tenAns[0]); |
| 411 | */ |
| 412 | dtA = tenAns[1]; |
| 413 | dtB = tenAns[2]; |
| 414 | dtC = tenAns[3]; |
| 415 | dtD = tenAns[4]; |
| 416 | dtE = tenAns[5]; |
| 417 | dtF = tenAns[6]; |
| 418 | if (ctx->verbose) { |
| 419 | fprintf(stderr__stderrp, "!%s: tensor = (%g) %g %g %g %g %g %g\n", me, |
| 420 | tenAns[0], dtA, dtB, dtC, dtD, dtE, dtF); |
| 421 | } |
| 422 | } |
| 423 | /* done if doV |
| 424 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageConfidence)) { |
| 425 | } |
| 426 | */ |
| 427 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTrace)(pvl->query[tenGageTrace/8] & (1 << (tenGageTrace % 8)))) { |
| 428 | cbA = -(pvl->directAnswer[tenGageTrace][0] = dtA + dtD + dtF); |
| 429 | } |
| 430 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageNorm)(pvl->query[tenGageNorm/8] & (1 << (tenGageNorm % 8)))) { |
| 431 | pvl->directAnswer[tenGageNorm][0] = |
| 432 | sqrt(dtA*dtA + dtD*dtD + dtF*dtF + 2*dtB*dtB + 2*dtC*dtC + 2*dtE*dtE); |
| 433 | } |
| 434 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageB)(pvl->query[tenGageB/8] & (1 << (tenGageB % 8)))) { |
| 435 | cbB = pvl->directAnswer[tenGageB][0] = |
| 436 | dtA*dtD + dtA*dtF + dtD*dtF - dtB*dtB - dtC*dtC - dtE*dtE; |
| 437 | } |
| 438 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageDet)(pvl->query[tenGageDet/8] & (1 << (tenGageDet % 8 )))) { |
| 439 | cbC = -(pvl->directAnswer[tenGageDet][0] = |
| 440 | 2*dtB*dtC*dtE + dtA*dtD*dtF |
| 441 | - dtC*dtC*dtD - dtA*dtE*dtE - dtB*dtB*dtF); |
| 442 | } |
| 443 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageS)(pvl->query[tenGageS/8] & (1 << (tenGageS % 8)))) { |
| 444 | cbS = (pvl->directAnswer[tenGageS][0] = |
| 445 | dtA*dtA + dtD*dtD + dtF*dtF |
| 446 | + 2*dtB*dtB + 2*dtC*dtC + 2*dtE*dtE); |
| 447 | } |
| 448 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageQ)(pvl->query[tenGageQ/8] & (1 << (tenGageQ % 8)))) { |
| 449 | cbQ = pvl->directAnswer[tenGageQ][0] = (cbS - cbB)/9; |
| 450 | } |
| 451 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFA)(pvl->query[tenGageFA/8] & (1 << (tenGageFA % 8) ))) { |
| 452 | tmp0 = (cbS |
| 453 | ? cbQ/cbS |
| 454 | : 0); |
| 455 | tmp0 = AIR_MAX(0, tmp0)((0) > (tmp0) ? (0) : (tmp0)); |
| 456 | pvl->directAnswer[tenGageFA][0] = 3*sqrt(tmp0); |
| 457 | /* |
| 458 | if (!AIR_EXISTS(pvl->directAnswer[tenGageFA][0])) { |
| 459 | fprintf(stderr, "!%s: cbS = %g, cbQ = %g, cbQ/(epsilon + cbS) = %g\n" |
| 460 | "tmp0 = max(0, cbQ/(epsilon + cbS)) = %g\n" |
| 461 | "sqrt(tmp0) = %g --> %g\n", me, |
| 462 | cbS, cbQ, cbQ/(epsilon + cbS), |
| 463 | tmp0, sqrt(tmp0), pvl->directAnswer[tenGageFA][0]); |
| 464 | } |
| 465 | */ |
| 466 | } |
| 467 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageR)(pvl->query[tenGageR/8] & (1 << (tenGageR % 8)))) { |
| 468 | cbR = pvl->directAnswer[tenGageR][0] = |
| 469 | (5*cbA*cbB - 27*cbC - 2*cbA*cbS)/54; |
| 470 | } |
| 471 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageMode)(pvl->query[tenGageMode/8] & (1 << (tenGageMode % 8)))) { |
| 472 | double cbQQQ; |
| 473 | cbQQQ = 2*AIR_MAX(0, cbQ*cbQ*cbQ)((0) > (cbQ*cbQ*cbQ) ? (0) : (cbQ*cbQ*cbQ)); |
| 474 | tmp0 = 1.41421356237309504880*(cbQQQ ? cbR/(sqrt(cbQQQ)) : 0); |
| 475 | pvl->directAnswer[tenGageMode][0] = AIR_CLAMP(-1, tmp0, 1)((tmp0) < (-1) ? (-1) : ((tmp0) > (1) ? (1) : (tmp0))); |
| 476 | } |
| 477 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageOmega)(pvl->query[tenGageOmega/8] & (1 << (tenGageOmega % 8)))) { |
| 478 | pvl->directAnswer[tenGageOmega][0] = |
| 479 | pvl->directAnswer[tenGageFA][0]*(1+pvl->directAnswer[tenGageMode][0])/2; |
| 480 | } |
| 481 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTheta)(pvl->query[tenGageTheta/8] & (1 << (tenGageTheta % 8)))) { |
| 482 | pvl->directAnswer[tenGageTheta][0] = |
| 483 | acos(-pvl->directAnswer[tenGageMode][0])/AIR_PI3.14159265358979323846; |
| 484 | } |
| 485 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageModeWarp)(pvl->query[tenGageModeWarp/8] & (1 << (tenGageModeWarp % 8)))) { |
| 486 | pvl->directAnswer[tenGageModeWarp][0] = |
| 487 | cos((1-pvl->directAnswer[tenGageMode][0])*AIR_PI3.14159265358979323846/2); |
| 488 | } |
| 489 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageEvec)(pvl->query[tenGageEvec/8] & (1 << (tenGageEvec % 8)))) { |
| 490 | /* we do the longer process to get eigenvectors, and in the process |
| 491 | we always find the eigenvalues, whether or not they were asked for */ |
| 492 | tenEigensolve_d(evalAns, evecAns, tenAns); |
| 493 | } else if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageEval)(pvl->query[tenGageEval/8] & (1 << (tenGageEval % 8)))) { |
| 494 | /* else eigenvectors are NOT needed, but eigenvalues ARE needed */ |
| 495 | tenEigensolve_d(evalAns, NULL((void*)0), tenAns); |
| 496 | } |
| 497 | |
| 498 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageDelNormK2)(pvl->query[tenGageDelNormK2/8] & (1 << (tenGageDelNormK2 % 8))) |
| 499 | || GAGE_QUERY_ITEM_TEST(pvl->query, tenGageDelNormK3)(pvl->query[tenGageDelNormK3/8] & (1 << (tenGageDelNormK3 % 8)))) { |
| 500 | double tmp[7]; |
| 501 | tenInvariantGradientsK_d(tmp, |
| 502 | pvl->directAnswer[tenGageDelNormK2], |
| 503 | pvl->directAnswer[tenGageDelNormK3], |
| 504 | tenAns, 0.0000001); |
| 505 | } |
| 506 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageDelNormR1)(pvl->query[tenGageDelNormR1/8] & (1 << (tenGageDelNormR1 % 8))) |
| 507 | || GAGE_QUERY_ITEM_TEST(pvl->query, tenGageDelNormR2)(pvl->query[tenGageDelNormR2/8] & (1 << (tenGageDelNormR2 % 8)))) { |
| 508 | tenInvariantGradientsR_d(pvl->directAnswer[tenGageDelNormR1], |
| 509 | pvl->directAnswer[tenGageDelNormR2], |
| 510 | pvl->directAnswer[tenGageDelNormK3], |
| 511 | tenAns, 0.0000001); |
| 512 | } |
| 513 | |
| 514 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageDelNormPhi1)(pvl->query[tenGageDelNormPhi1/8] & (1 << (tenGageDelNormPhi1 % 8))) |
| 515 | || GAGE_QUERY_ITEM_TEST(pvl->query, tenGageDelNormPhi2)(pvl->query[tenGageDelNormPhi2/8] & (1 << (tenGageDelNormPhi2 % 8))) |
| 516 | || GAGE_QUERY_ITEM_TEST(pvl->query, tenGageDelNormPhi3)(pvl->query[tenGageDelNormPhi3/8] & (1 << (tenGageDelNormPhi3 % 8)))) { |
| 517 | tenRotationTangents_d(pvl->directAnswer[tenGageDelNormPhi1], |
| 518 | pvl->directAnswer[tenGageDelNormPhi2], |
| 519 | pvl->directAnswer[tenGageDelNormPhi3], |
| 520 | evecAns); |
| 521 | } |
| 522 | |
| 523 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTensorGrad)(pvl->query[tenGageTensorGrad/8] & (1 << (tenGageTensorGrad % 8)))) { |
| 524 | /* done if doD1 */ |
| 525 | /* still have to set up pointer variables that item answers |
| 526 | below will rely on as short-cuts */ |
| 527 | vecTmp = pvl->directAnswer[tenGageTensorGrad]; |
| 528 | gradDtA = vecTmp + 1*3; |
| 529 | gradDtB = vecTmp + 2*3; |
| 530 | gradDtC = vecTmp + 3*3; |
| 531 | gradDtD = vecTmp + 4*3; |
| 532 | gradDtE = vecTmp + 5*3; |
| 533 | gradDtF = vecTmp + 6*3; |
| 534 | TEN_T_SET(gradDdXYZ + 0*7, tenAns[0],( (gradDdXYZ + 0*7)[0] = (tenAns[0]), (gradDdXYZ + 0*7)[1] = ( gradDtA[0]), (gradDdXYZ + 0*7)[2] = (gradDtB[0]), (gradDdXYZ + 0*7)[3] = (gradDtC[0]), (gradDdXYZ + 0*7)[4] = (gradDtD[0]), (gradDdXYZ + 0*7)[5] = (gradDtE[0]), (gradDdXYZ + 0*7)[6] = ( gradDtF[0]) ) |
| 535 | gradDtA[0], gradDtB[0], gradDtC[0],( (gradDdXYZ + 0*7)[0] = (tenAns[0]), (gradDdXYZ + 0*7)[1] = ( gradDtA[0]), (gradDdXYZ + 0*7)[2] = (gradDtB[0]), (gradDdXYZ + 0*7)[3] = (gradDtC[0]), (gradDdXYZ + 0*7)[4] = (gradDtD[0]), (gradDdXYZ + 0*7)[5] = (gradDtE[0]), (gradDdXYZ + 0*7)[6] = ( gradDtF[0]) ) |
| 536 | gradDtD[0], gradDtE[0],( (gradDdXYZ + 0*7)[0] = (tenAns[0]), (gradDdXYZ + 0*7)[1] = ( gradDtA[0]), (gradDdXYZ + 0*7)[2] = (gradDtB[0]), (gradDdXYZ + 0*7)[3] = (gradDtC[0]), (gradDdXYZ + 0*7)[4] = (gradDtD[0]), (gradDdXYZ + 0*7)[5] = (gradDtE[0]), (gradDdXYZ + 0*7)[6] = ( gradDtF[0]) ) |
| 537 | gradDtF[0])( (gradDdXYZ + 0*7)[0] = (tenAns[0]), (gradDdXYZ + 0*7)[1] = ( gradDtA[0]), (gradDdXYZ + 0*7)[2] = (gradDtB[0]), (gradDdXYZ + 0*7)[3] = (gradDtC[0]), (gradDdXYZ + 0*7)[4] = (gradDtD[0]), (gradDdXYZ + 0*7)[5] = (gradDtE[0]), (gradDdXYZ + 0*7)[6] = ( gradDtF[0]) ); |
| 538 | TEN_T_SET(gradDdXYZ + 1*7, tenAns[0],( (gradDdXYZ + 1*7)[0] = (tenAns[0]), (gradDdXYZ + 1*7)[1] = ( gradDtA[1]), (gradDdXYZ + 1*7)[2] = (gradDtB[1]), (gradDdXYZ + 1*7)[3] = (gradDtC[1]), (gradDdXYZ + 1*7)[4] = (gradDtD[1]), (gradDdXYZ + 1*7)[5] = (gradDtE[1]), (gradDdXYZ + 1*7)[6] = ( gradDtF[1]) ) |
| 539 | gradDtA[1], gradDtB[1], gradDtC[1],( (gradDdXYZ + 1*7)[0] = (tenAns[0]), (gradDdXYZ + 1*7)[1] = ( gradDtA[1]), (gradDdXYZ + 1*7)[2] = (gradDtB[1]), (gradDdXYZ + 1*7)[3] = (gradDtC[1]), (gradDdXYZ + 1*7)[4] = (gradDtD[1]), (gradDdXYZ + 1*7)[5] = (gradDtE[1]), (gradDdXYZ + 1*7)[6] = ( gradDtF[1]) ) |
| 540 | gradDtD[1], gradDtE[1],( (gradDdXYZ + 1*7)[0] = (tenAns[0]), (gradDdXYZ + 1*7)[1] = ( gradDtA[1]), (gradDdXYZ + 1*7)[2] = (gradDtB[1]), (gradDdXYZ + 1*7)[3] = (gradDtC[1]), (gradDdXYZ + 1*7)[4] = (gradDtD[1]), (gradDdXYZ + 1*7)[5] = (gradDtE[1]), (gradDdXYZ + 1*7)[6] = ( gradDtF[1]) ) |
| 541 | gradDtF[1])( (gradDdXYZ + 1*7)[0] = (tenAns[0]), (gradDdXYZ + 1*7)[1] = ( gradDtA[1]), (gradDdXYZ + 1*7)[2] = (gradDtB[1]), (gradDdXYZ + 1*7)[3] = (gradDtC[1]), (gradDdXYZ + 1*7)[4] = (gradDtD[1]), (gradDdXYZ + 1*7)[5] = (gradDtE[1]), (gradDdXYZ + 1*7)[6] = ( gradDtF[1]) ); |
| 542 | TEN_T_SET(gradDdXYZ + 2*7, tenAns[0],( (gradDdXYZ + 2*7)[0] = (tenAns[0]), (gradDdXYZ + 2*7)[1] = ( gradDtA[2]), (gradDdXYZ + 2*7)[2] = (gradDtB[2]), (gradDdXYZ + 2*7)[3] = (gradDtC[2]), (gradDdXYZ + 2*7)[4] = (gradDtD[2]), (gradDdXYZ + 2*7)[5] = (gradDtE[2]), (gradDdXYZ + 2*7)[6] = ( gradDtF[2]) ) |
| 543 | gradDtA[2], gradDtB[2], gradDtC[2],( (gradDdXYZ + 2*7)[0] = (tenAns[0]), (gradDdXYZ + 2*7)[1] = ( gradDtA[2]), (gradDdXYZ + 2*7)[2] = (gradDtB[2]), (gradDdXYZ + 2*7)[3] = (gradDtC[2]), (gradDdXYZ + 2*7)[4] = (gradDtD[2]), (gradDdXYZ + 2*7)[5] = (gradDtE[2]), (gradDdXYZ + 2*7)[6] = ( gradDtF[2]) ) |
| 544 | gradDtD[2], gradDtE[2],( (gradDdXYZ + 2*7)[0] = (tenAns[0]), (gradDdXYZ + 2*7)[1] = ( gradDtA[2]), (gradDdXYZ + 2*7)[2] = (gradDtB[2]), (gradDdXYZ + 2*7)[3] = (gradDtC[2]), (gradDdXYZ + 2*7)[4] = (gradDtD[2]), (gradDdXYZ + 2*7)[5] = (gradDtE[2]), (gradDdXYZ + 2*7)[6] = ( gradDtF[2]) ) |
| 545 | gradDtF[2])( (gradDdXYZ + 2*7)[0] = (tenAns[0]), (gradDdXYZ + 2*7)[1] = ( gradDtA[2]), (gradDdXYZ + 2*7)[2] = (gradDtB[2]), (gradDdXYZ + 2*7)[3] = (gradDtC[2]), (gradDdXYZ + 2*7)[4] = (gradDtD[2]), (gradDdXYZ + 2*7)[5] = (gradDtE[2]), (gradDdXYZ + 2*7)[6] = ( gradDtF[2]) ); |
| 546 | } |
| 547 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTensorGradMag)(pvl->query[tenGageTensorGradMag/8] & (1 << (tenGageTensorGradMag % 8)))) { |
| 548 | vecTmp = pvl->directAnswer[tenGageTensorGradMag]; |
| 549 | vecTmp[0] = sqrt(TEN_T_DOT(gradDdXYZ + 0*7, gradDdXYZ + 0*7)( (gradDdXYZ + 0*7)[1]*(gradDdXYZ + 0*7)[1] + 2*(gradDdXYZ + 0 *7)[2]*(gradDdXYZ + 0*7)[2] + 2*(gradDdXYZ + 0*7)[3]*(gradDdXYZ + 0*7)[3] + (gradDdXYZ + 0*7)[4]*(gradDdXYZ + 0*7)[4] + 2*(gradDdXYZ + 0*7)[5]*(gradDdXYZ + 0*7)[5] + (gradDdXYZ + 0*7)[6]*(gradDdXYZ + 0*7)[6] )); |
| 550 | vecTmp[1] = sqrt(TEN_T_DOT(gradDdXYZ + 1*7, gradDdXYZ + 1*7)( (gradDdXYZ + 1*7)[1]*(gradDdXYZ + 1*7)[1] + 2*(gradDdXYZ + 1 *7)[2]*(gradDdXYZ + 1*7)[2] + 2*(gradDdXYZ + 1*7)[3]*(gradDdXYZ + 1*7)[3] + (gradDdXYZ + 1*7)[4]*(gradDdXYZ + 1*7)[4] + 2*(gradDdXYZ + 1*7)[5]*(gradDdXYZ + 1*7)[5] + (gradDdXYZ + 1*7)[6]*(gradDdXYZ + 1*7)[6] )); |
| 551 | vecTmp[2] = sqrt(TEN_T_DOT(gradDdXYZ + 2*7, gradDdXYZ + 2*7)( (gradDdXYZ + 2*7)[1]*(gradDdXYZ + 2*7)[1] + 2*(gradDdXYZ + 2 *7)[2]*(gradDdXYZ + 2*7)[2] + 2*(gradDdXYZ + 2*7)[3]*(gradDdXYZ + 2*7)[3] + (gradDdXYZ + 2*7)[4]*(gradDdXYZ + 2*7)[4] + 2*(gradDdXYZ + 2*7)[5]*(gradDdXYZ + 2*7)[5] + (gradDdXYZ + 2*7)[6]*(gradDdXYZ + 2*7)[6] )); |
| 552 | } |
| 553 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTensorGradMag)(pvl->query[tenGageTensorGradMag/8] & (1 << (tenGageTensorGradMag % 8)))) { |
| 554 | pvl->directAnswer[tenGageTensorGradMagMag][0] = ELL_3V_LEN(vecTmp)(sqrt((((vecTmp))[0]*((vecTmp))[0] + ((vecTmp))[1]*((vecTmp)) [1] + ((vecTmp))[2]*((vecTmp))[2]))); |
| 555 | } |
| 556 | |
| 557 | /* --- Trace --- */ |
| 558 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTraceGradVec)(pvl->query[tenGageTraceGradVec/8] & (1 << (tenGageTraceGradVec % 8)))) { |
| 559 | vecTmp = pvl->directAnswer[tenGageTraceGradVec]; |
| 560 | ELL_3V_ADD3(vecTmp, gradDtA, gradDtD, gradDtF)((vecTmp)[0] = (gradDtA)[0] + (gradDtD)[0] + (gradDtF)[0], (vecTmp )[1] = (gradDtA)[1] + (gradDtD)[1] + (gradDtF)[1], (vecTmp)[2 ] = (gradDtA)[2] + (gradDtD)[2] + (gradDtF)[2]); |
| 561 | ELL_3V_SCALE(gradCbA, -1, vecTmp)((gradCbA)[0] = (-1)*(vecTmp)[0], (gradCbA)[1] = (-1)*(vecTmp )[1], (gradCbA)[2] = (-1)*(vecTmp)[2]); |
| 562 | } |
| 563 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTraceGradMag)(pvl->query[tenGageTraceGradMag/8] & (1 << (tenGageTraceGradMag % 8)))) { |
| 564 | magTmp = pvl->directAnswer[tenGageTraceGradMag][0] = ELL_3V_LEN(vecTmp)(sqrt((((vecTmp))[0]*((vecTmp))[0] + ((vecTmp))[1]*((vecTmp)) [1] + ((vecTmp))[2]*((vecTmp))[2]))); |
| 565 | } |
| 566 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTraceNormal)(pvl->query[tenGageTraceNormal/8] & (1 << (tenGageTraceNormal % 8)))) { |
| 567 | ELL_3V_SCALE(pvl->directAnswer[tenGageTraceNormal],((pvl->directAnswer[tenGageTraceNormal])[0] = (magTmp ? 1/ magTmp : 0)*(vecTmp)[0], (pvl->directAnswer[tenGageTraceNormal ])[1] = (magTmp ? 1/magTmp : 0)*(vecTmp)[1], (pvl->directAnswer [tenGageTraceNormal])[2] = (magTmp ? 1/magTmp : 0)*(vecTmp)[2 ]) |
| 568 | magTmp ? 1/magTmp : 0, vecTmp)((pvl->directAnswer[tenGageTraceNormal])[0] = (magTmp ? 1/ magTmp : 0)*(vecTmp)[0], (pvl->directAnswer[tenGageTraceNormal ])[1] = (magTmp ? 1/magTmp : 0)*(vecTmp)[1], (pvl->directAnswer [tenGageTraceNormal])[2] = (magTmp ? 1/magTmp : 0)*(vecTmp)[2 ]); |
| 569 | } |
| 570 | |
| 571 | /* ---- Norm stuff handled after S */ |
| 572 | |
| 573 | /* --- B --- */ |
| 574 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageBGradVec)(pvl->query[tenGageBGradVec/8] & (1 << (tenGageBGradVec % 8)))) { |
| 575 | gradCbB = vecTmp = pvl->directAnswer[tenGageBGradVec]; |
| 576 | ELL_3V_SCALE_ADD6(vecTmp,((vecTmp)[0] = (dtD + dtF)*(gradDtA)[0] + (dtA + dtF)*(gradDtD )[0] + (dtA + dtD)*(gradDtF)[0] + (-2*dtB)*(gradDtB)[0] + (-2 *dtC)*(gradDtC)[0] + (-2*dtE)*(gradDtE)[0], (vecTmp)[1] = (dtD + dtF)*(gradDtA)[1] + (dtA + dtF)*(gradDtD)[1] + (dtA + dtD) *(gradDtF)[1] + (-2*dtB)*(gradDtB)[1] + (-2*dtC)*(gradDtC)[1] + (-2*dtE)*(gradDtE)[1], (vecTmp)[2] = (dtD + dtF)*(gradDtA) [2] + (dtA + dtF)*(gradDtD)[2] + (dtA + dtD)*(gradDtF)[2] + ( -2*dtB)*(gradDtB)[2] + (-2*dtC)*(gradDtC)[2] + (-2*dtE)*(gradDtE )[2]) |
| 577 | dtD + dtF, gradDtA,((vecTmp)[0] = (dtD + dtF)*(gradDtA)[0] + (dtA + dtF)*(gradDtD )[0] + (dtA + dtD)*(gradDtF)[0] + (-2*dtB)*(gradDtB)[0] + (-2 *dtC)*(gradDtC)[0] + (-2*dtE)*(gradDtE)[0], (vecTmp)[1] = (dtD + dtF)*(gradDtA)[1] + (dtA + dtF)*(gradDtD)[1] + (dtA + dtD) *(gradDtF)[1] + (-2*dtB)*(gradDtB)[1] + (-2*dtC)*(gradDtC)[1] + (-2*dtE)*(gradDtE)[1], (vecTmp)[2] = (dtD + dtF)*(gradDtA) [2] + (dtA + dtF)*(gradDtD)[2] + (dtA + dtD)*(gradDtF)[2] + ( -2*dtB)*(gradDtB)[2] + (-2*dtC)*(gradDtC)[2] + (-2*dtE)*(gradDtE )[2]) |
| 578 | dtA + dtF, gradDtD,((vecTmp)[0] = (dtD + dtF)*(gradDtA)[0] + (dtA + dtF)*(gradDtD )[0] + (dtA + dtD)*(gradDtF)[0] + (-2*dtB)*(gradDtB)[0] + (-2 *dtC)*(gradDtC)[0] + (-2*dtE)*(gradDtE)[0], (vecTmp)[1] = (dtD + dtF)*(gradDtA)[1] + (dtA + dtF)*(gradDtD)[1] + (dtA + dtD) *(gradDtF)[1] + (-2*dtB)*(gradDtB)[1] + (-2*dtC)*(gradDtC)[1] + (-2*dtE)*(gradDtE)[1], (vecTmp)[2] = (dtD + dtF)*(gradDtA) [2] + (dtA + dtF)*(gradDtD)[2] + (dtA + dtD)*(gradDtF)[2] + ( -2*dtB)*(gradDtB)[2] + (-2*dtC)*(gradDtC)[2] + (-2*dtE)*(gradDtE )[2]) |
| 579 | dtA + dtD, gradDtF,((vecTmp)[0] = (dtD + dtF)*(gradDtA)[0] + (dtA + dtF)*(gradDtD )[0] + (dtA + dtD)*(gradDtF)[0] + (-2*dtB)*(gradDtB)[0] + (-2 *dtC)*(gradDtC)[0] + (-2*dtE)*(gradDtE)[0], (vecTmp)[1] = (dtD + dtF)*(gradDtA)[1] + (dtA + dtF)*(gradDtD)[1] + (dtA + dtD) *(gradDtF)[1] + (-2*dtB)*(gradDtB)[1] + (-2*dtC)*(gradDtC)[1] + (-2*dtE)*(gradDtE)[1], (vecTmp)[2] = (dtD + dtF)*(gradDtA) [2] + (dtA + dtF)*(gradDtD)[2] + (dtA + dtD)*(gradDtF)[2] + ( -2*dtB)*(gradDtB)[2] + (-2*dtC)*(gradDtC)[2] + (-2*dtE)*(gradDtE )[2]) |
| 580 | -2*dtB, gradDtB,((vecTmp)[0] = (dtD + dtF)*(gradDtA)[0] + (dtA + dtF)*(gradDtD )[0] + (dtA + dtD)*(gradDtF)[0] + (-2*dtB)*(gradDtB)[0] + (-2 *dtC)*(gradDtC)[0] + (-2*dtE)*(gradDtE)[0], (vecTmp)[1] = (dtD + dtF)*(gradDtA)[1] + (dtA + dtF)*(gradDtD)[1] + (dtA + dtD) *(gradDtF)[1] + (-2*dtB)*(gradDtB)[1] + (-2*dtC)*(gradDtC)[1] + (-2*dtE)*(gradDtE)[1], (vecTmp)[2] = (dtD + dtF)*(gradDtA) [2] + (dtA + dtF)*(gradDtD)[2] + (dtA + dtD)*(gradDtF)[2] + ( -2*dtB)*(gradDtB)[2] + (-2*dtC)*(gradDtC)[2] + (-2*dtE)*(gradDtE )[2]) |
| 581 | -2*dtC, gradDtC,((vecTmp)[0] = (dtD + dtF)*(gradDtA)[0] + (dtA + dtF)*(gradDtD )[0] + (dtA + dtD)*(gradDtF)[0] + (-2*dtB)*(gradDtB)[0] + (-2 *dtC)*(gradDtC)[0] + (-2*dtE)*(gradDtE)[0], (vecTmp)[1] = (dtD + dtF)*(gradDtA)[1] + (dtA + dtF)*(gradDtD)[1] + (dtA + dtD) *(gradDtF)[1] + (-2*dtB)*(gradDtB)[1] + (-2*dtC)*(gradDtC)[1] + (-2*dtE)*(gradDtE)[1], (vecTmp)[2] = (dtD + dtF)*(gradDtA) [2] + (dtA + dtF)*(gradDtD)[2] + (dtA + dtD)*(gradDtF)[2] + ( -2*dtB)*(gradDtB)[2] + (-2*dtC)*(gradDtC)[2] + (-2*dtE)*(gradDtE )[2]) |
| 582 | -2*dtE, gradDtE)((vecTmp)[0] = (dtD + dtF)*(gradDtA)[0] + (dtA + dtF)*(gradDtD )[0] + (dtA + dtD)*(gradDtF)[0] + (-2*dtB)*(gradDtB)[0] + (-2 *dtC)*(gradDtC)[0] + (-2*dtE)*(gradDtE)[0], (vecTmp)[1] = (dtD + dtF)*(gradDtA)[1] + (dtA + dtF)*(gradDtD)[1] + (dtA + dtD) *(gradDtF)[1] + (-2*dtB)*(gradDtB)[1] + (-2*dtC)*(gradDtC)[1] + (-2*dtE)*(gradDtE)[1], (vecTmp)[2] = (dtD + dtF)*(gradDtA) [2] + (dtA + dtF)*(gradDtD)[2] + (dtA + dtD)*(gradDtF)[2] + ( -2*dtB)*(gradDtB)[2] + (-2*dtC)*(gradDtC)[2] + (-2*dtE)*(gradDtE )[2]); |
| 583 | } |
| 584 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageBGradMag)(pvl->query[tenGageBGradMag/8] & (1 << (tenGageBGradMag % 8)))) { |
| 585 | magTmp = pvl->directAnswer[tenGageBGradMag][0] = ELL_3V_LEN(vecTmp)(sqrt((((vecTmp))[0]*((vecTmp))[0] + ((vecTmp))[1]*((vecTmp)) [1] + ((vecTmp))[2]*((vecTmp))[2]))); |
| 586 | } |
| 587 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageBNormal)(pvl->query[tenGageBNormal/8] & (1 << (tenGageBNormal % 8)))) { |
| 588 | ELL_3V_SCALE(pvl->directAnswer[tenGageBNormal],((pvl->directAnswer[tenGageBNormal])[0] = (magTmp ? 1/magTmp : 0)*(vecTmp)[0], (pvl->directAnswer[tenGageBNormal])[1] = (magTmp ? 1/magTmp : 0)*(vecTmp)[1], (pvl->directAnswer[tenGageBNormal ])[2] = (magTmp ? 1/magTmp : 0)*(vecTmp)[2]) |
| 589 | magTmp ? 1/magTmp : 0, vecTmp)((pvl->directAnswer[tenGageBNormal])[0] = (magTmp ? 1/magTmp : 0)*(vecTmp)[0], (pvl->directAnswer[tenGageBNormal])[1] = (magTmp ? 1/magTmp : 0)*(vecTmp)[1], (pvl->directAnswer[tenGageBNormal ])[2] = (magTmp ? 1/magTmp : 0)*(vecTmp)[2]); |
| 590 | } |
| 591 | /* --- Det --- */ |
| 592 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageDetGradVec)(pvl->query[tenGageDetGradVec/8] & (1 << (tenGageDetGradVec % 8)))) { |
| 593 | vecTmp = pvl->directAnswer[tenGageDetGradVec]; |
| 594 | ELL_3V_SCALE_ADD6(vecTmp,((vecTmp)[0] = (dtD*dtF - dtE*dtE)*(gradDtA)[0] + (2*(dtC*dtE - dtB*dtF))*(gradDtB)[0] + (2*(dtB*dtE - dtC*dtD))*(gradDtC) [0] + (dtA*dtF - dtC*dtC)*(gradDtD)[0] + (2*(dtB*dtC - dtA*dtE ))*(gradDtE)[0] + (dtA*dtD - dtB*dtB)*(gradDtF)[0], (vecTmp)[ 1] = (dtD*dtF - dtE*dtE)*(gradDtA)[1] + (2*(dtC*dtE - dtB*dtF ))*(gradDtB)[1] + (2*(dtB*dtE - dtC*dtD))*(gradDtC)[1] + (dtA *dtF - dtC*dtC)*(gradDtD)[1] + (2*(dtB*dtC - dtA*dtE))*(gradDtE )[1] + (dtA*dtD - dtB*dtB)*(gradDtF)[1], (vecTmp)[2] = (dtD*dtF - dtE*dtE)*(gradDtA)[2] + (2*(dtC*dtE - dtB*dtF))*(gradDtB)[ 2] + (2*(dtB*dtE - dtC*dtD))*(gradDtC)[2] + (dtA*dtF - dtC*dtC )*(gradDtD)[2] + (2*(dtB*dtC - dtA*dtE))*(gradDtE)[2] + (dtA* dtD - dtB*dtB)*(gradDtF)[2]) |
| 595 | dtD*dtF - dtE*dtE, gradDtA,((vecTmp)[0] = (dtD*dtF - dtE*dtE)*(gradDtA)[0] + (2*(dtC*dtE - dtB*dtF))*(gradDtB)[0] + (2*(dtB*dtE - dtC*dtD))*(gradDtC) [0] + (dtA*dtF - dtC*dtC)*(gradDtD)[0] + (2*(dtB*dtC - dtA*dtE ))*(gradDtE)[0] + (dtA*dtD - dtB*dtB)*(gradDtF)[0], (vecTmp)[ 1] = (dtD*dtF - dtE*dtE)*(gradDtA)[1] + (2*(dtC*dtE - dtB*dtF ))*(gradDtB)[1] + (2*(dtB*dtE - dtC*dtD))*(gradDtC)[1] + (dtA *dtF - dtC*dtC)*(gradDtD)[1] + (2*(dtB*dtC - dtA*dtE))*(gradDtE )[1] + (dtA*dtD - dtB*dtB)*(gradDtF)[1], (vecTmp)[2] = (dtD*dtF - dtE*dtE)*(gradDtA)[2] + (2*(dtC*dtE - dtB*dtF))*(gradDtB)[ 2] + (2*(dtB*dtE - dtC*dtD))*(gradDtC)[2] + (dtA*dtF - dtC*dtC )*(gradDtD)[2] + (2*(dtB*dtC - dtA*dtE))*(gradDtE)[2] + (dtA* dtD - dtB*dtB)*(gradDtF)[2]) |
| 596 | 2*(dtC*dtE - dtB*dtF), gradDtB,((vecTmp)[0] = (dtD*dtF - dtE*dtE)*(gradDtA)[0] + (2*(dtC*dtE - dtB*dtF))*(gradDtB)[0] + (2*(dtB*dtE - dtC*dtD))*(gradDtC) [0] + (dtA*dtF - dtC*dtC)*(gradDtD)[0] + (2*(dtB*dtC - dtA*dtE ))*(gradDtE)[0] + (dtA*dtD - dtB*dtB)*(gradDtF)[0], (vecTmp)[ 1] = (dtD*dtF - dtE*dtE)*(gradDtA)[1] + (2*(dtC*dtE - dtB*dtF ))*(gradDtB)[1] + (2*(dtB*dtE - dtC*dtD))*(gradDtC)[1] + (dtA *dtF - dtC*dtC)*(gradDtD)[1] + (2*(dtB*dtC - dtA*dtE))*(gradDtE )[1] + (dtA*dtD - dtB*dtB)*(gradDtF)[1], (vecTmp)[2] = (dtD*dtF - dtE*dtE)*(gradDtA)[2] + (2*(dtC*dtE - dtB*dtF))*(gradDtB)[ 2] + (2*(dtB*dtE - dtC*dtD))*(gradDtC)[2] + (dtA*dtF - dtC*dtC )*(gradDtD)[2] + (2*(dtB*dtC - dtA*dtE))*(gradDtE)[2] + (dtA* dtD - dtB*dtB)*(gradDtF)[2]) |
| 597 | 2*(dtB*dtE - dtC*dtD), gradDtC,((vecTmp)[0] = (dtD*dtF - dtE*dtE)*(gradDtA)[0] + (2*(dtC*dtE - dtB*dtF))*(gradDtB)[0] + (2*(dtB*dtE - dtC*dtD))*(gradDtC) [0] + (dtA*dtF - dtC*dtC)*(gradDtD)[0] + (2*(dtB*dtC - dtA*dtE ))*(gradDtE)[0] + (dtA*dtD - dtB*dtB)*(gradDtF)[0], (vecTmp)[ 1] = (dtD*dtF - dtE*dtE)*(gradDtA)[1] + (2*(dtC*dtE - dtB*dtF ))*(gradDtB)[1] + (2*(dtB*dtE - dtC*dtD))*(gradDtC)[1] + (dtA *dtF - dtC*dtC)*(gradDtD)[1] + (2*(dtB*dtC - dtA*dtE))*(gradDtE )[1] + (dtA*dtD - dtB*dtB)*(gradDtF)[1], (vecTmp)[2] = (dtD*dtF - dtE*dtE)*(gradDtA)[2] + (2*(dtC*dtE - dtB*dtF))*(gradDtB)[ 2] + (2*(dtB*dtE - dtC*dtD))*(gradDtC)[2] + (dtA*dtF - dtC*dtC )*(gradDtD)[2] + (2*(dtB*dtC - dtA*dtE))*(gradDtE)[2] + (dtA* dtD - dtB*dtB)*(gradDtF)[2]) |
| 598 | dtA*dtF - dtC*dtC, gradDtD,((vecTmp)[0] = (dtD*dtF - dtE*dtE)*(gradDtA)[0] + (2*(dtC*dtE - dtB*dtF))*(gradDtB)[0] + (2*(dtB*dtE - dtC*dtD))*(gradDtC) [0] + (dtA*dtF - dtC*dtC)*(gradDtD)[0] + (2*(dtB*dtC - dtA*dtE ))*(gradDtE)[0] + (dtA*dtD - dtB*dtB)*(gradDtF)[0], (vecTmp)[ 1] = (dtD*dtF - dtE*dtE)*(gradDtA)[1] + (2*(dtC*dtE - dtB*dtF ))*(gradDtB)[1] + (2*(dtB*dtE - dtC*dtD))*(gradDtC)[1] + (dtA *dtF - dtC*dtC)*(gradDtD)[1] + (2*(dtB*dtC - dtA*dtE))*(gradDtE )[1] + (dtA*dtD - dtB*dtB)*(gradDtF)[1], (vecTmp)[2] = (dtD*dtF - dtE*dtE)*(gradDtA)[2] + (2*(dtC*dtE - dtB*dtF))*(gradDtB)[ 2] + (2*(dtB*dtE - dtC*dtD))*(gradDtC)[2] + (dtA*dtF - dtC*dtC )*(gradDtD)[2] + (2*(dtB*dtC - dtA*dtE))*(gradDtE)[2] + (dtA* dtD - dtB*dtB)*(gradDtF)[2]) |
| 599 | 2*(dtB*dtC - dtA*dtE), gradDtE,((vecTmp)[0] = (dtD*dtF - dtE*dtE)*(gradDtA)[0] + (2*(dtC*dtE - dtB*dtF))*(gradDtB)[0] + (2*(dtB*dtE - dtC*dtD))*(gradDtC) [0] + (dtA*dtF - dtC*dtC)*(gradDtD)[0] + (2*(dtB*dtC - dtA*dtE ))*(gradDtE)[0] + (dtA*dtD - dtB*dtB)*(gradDtF)[0], (vecTmp)[ 1] = (dtD*dtF - dtE*dtE)*(gradDtA)[1] + (2*(dtC*dtE - dtB*dtF ))*(gradDtB)[1] + (2*(dtB*dtE - dtC*dtD))*(gradDtC)[1] + (dtA *dtF - dtC*dtC)*(gradDtD)[1] + (2*(dtB*dtC - dtA*dtE))*(gradDtE )[1] + (dtA*dtD - dtB*dtB)*(gradDtF)[1], (vecTmp)[2] = (dtD*dtF - dtE*dtE)*(gradDtA)[2] + (2*(dtC*dtE - dtB*dtF))*(gradDtB)[ 2] + (2*(dtB*dtE - dtC*dtD))*(gradDtC)[2] + (dtA*dtF - dtC*dtC )*(gradDtD)[2] + (2*(dtB*dtC - dtA*dtE))*(gradDtE)[2] + (dtA* dtD - dtB*dtB)*(gradDtF)[2]) |
| 600 | dtA*dtD - dtB*dtB, gradDtF)((vecTmp)[0] = (dtD*dtF - dtE*dtE)*(gradDtA)[0] + (2*(dtC*dtE - dtB*dtF))*(gradDtB)[0] + (2*(dtB*dtE - dtC*dtD))*(gradDtC) [0] + (dtA*dtF - dtC*dtC)*(gradDtD)[0] + (2*(dtB*dtC - dtA*dtE ))*(gradDtE)[0] + (dtA*dtD - dtB*dtB)*(gradDtF)[0], (vecTmp)[ 1] = (dtD*dtF - dtE*dtE)*(gradDtA)[1] + (2*(dtC*dtE - dtB*dtF ))*(gradDtB)[1] + (2*(dtB*dtE - dtC*dtD))*(gradDtC)[1] + (dtA *dtF - dtC*dtC)*(gradDtD)[1] + (2*(dtB*dtC - dtA*dtE))*(gradDtE )[1] + (dtA*dtD - dtB*dtB)*(gradDtF)[1], (vecTmp)[2] = (dtD*dtF - dtE*dtE)*(gradDtA)[2] + (2*(dtC*dtE - dtB*dtF))*(gradDtB)[ 2] + (2*(dtB*dtE - dtC*dtD))*(gradDtC)[2] + (dtA*dtF - dtC*dtC )*(gradDtD)[2] + (2*(dtB*dtC - dtA*dtE))*(gradDtE)[2] + (dtA* dtD - dtB*dtB)*(gradDtF)[2]); |
| 601 | ELL_3V_SCALE(gradCbC, -1, vecTmp)((gradCbC)[0] = (-1)*(vecTmp)[0], (gradCbC)[1] = (-1)*(vecTmp )[1], (gradCbC)[2] = (-1)*(vecTmp)[2]); |
| 602 | } |
| 603 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageDetGradMag)(pvl->query[tenGageDetGradMag/8] & (1 << (tenGageDetGradMag % 8)))) { |
| 604 | magTmp = pvl->directAnswer[tenGageDetGradMag][0] = |
| 605 | AIR_CAST(float, ELL_3V_LEN(vecTmp))((float)((sqrt((((vecTmp))[0]*((vecTmp))[0] + ((vecTmp))[1]*( (vecTmp))[1] + ((vecTmp))[2]*((vecTmp))[2]))))); |
| 606 | } |
| 607 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageDetNormal)(pvl->query[tenGageDetNormal/8] & (1 << (tenGageDetNormal % 8)))) { |
| 608 | ELL_3V_SCALE(pvl->directAnswer[tenGageDetNormal],((pvl->directAnswer[tenGageDetNormal])[0] = (magTmp ? 1/magTmp : 0)*(vecTmp)[0], (pvl->directAnswer[tenGageDetNormal])[1 ] = (magTmp ? 1/magTmp : 0)*(vecTmp)[1], (pvl->directAnswer [tenGageDetNormal])[2] = (magTmp ? 1/magTmp : 0)*(vecTmp)[2]) |
| 609 | magTmp ? 1/magTmp : 0, vecTmp)((pvl->directAnswer[tenGageDetNormal])[0] = (magTmp ? 1/magTmp : 0)*(vecTmp)[0], (pvl->directAnswer[tenGageDetNormal])[1 ] = (magTmp ? 1/magTmp : 0)*(vecTmp)[1], (pvl->directAnswer [tenGageDetNormal])[2] = (magTmp ? 1/magTmp : 0)*(vecTmp)[2]); |
| 610 | } |
| 611 | /* --- S --- */ |
| 612 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageSGradVec)(pvl->query[tenGageSGradVec/8] & (1 << (tenGageSGradVec % 8)))) { |
| 613 | gradCbS = vecTmp = pvl->directAnswer[tenGageSGradVec]; |
| 614 | ELL_3V_SCALE_ADD6(vecTmp,((vecTmp)[0] = (2*dtA)*(gradDtA)[0] + (2*dtD)*(gradDtD)[0] + ( 2*dtF)*(gradDtF)[0] + (4*dtB)*(gradDtB)[0] + (4*dtC)*(gradDtC )[0] + (4*dtE)*(gradDtE)[0], (vecTmp)[1] = (2*dtA)*(gradDtA)[ 1] + (2*dtD)*(gradDtD)[1] + (2*dtF)*(gradDtF)[1] + (4*dtB)*(gradDtB )[1] + (4*dtC)*(gradDtC)[1] + (4*dtE)*(gradDtE)[1], (vecTmp)[ 2] = (2*dtA)*(gradDtA)[2] + (2*dtD)*(gradDtD)[2] + (2*dtF)*(gradDtF )[2] + (4*dtB)*(gradDtB)[2] + (4*dtC)*(gradDtC)[2] + (4*dtE)* (gradDtE)[2]) |
| 615 | 2*dtA, gradDtA,((vecTmp)[0] = (2*dtA)*(gradDtA)[0] + (2*dtD)*(gradDtD)[0] + ( 2*dtF)*(gradDtF)[0] + (4*dtB)*(gradDtB)[0] + (4*dtC)*(gradDtC )[0] + (4*dtE)*(gradDtE)[0], (vecTmp)[1] = (2*dtA)*(gradDtA)[ 1] + (2*dtD)*(gradDtD)[1] + (2*dtF)*(gradDtF)[1] + (4*dtB)*(gradDtB )[1] + (4*dtC)*(gradDtC)[1] + (4*dtE)*(gradDtE)[1], (vecTmp)[ 2] = (2*dtA)*(gradDtA)[2] + (2*dtD)*(gradDtD)[2] + (2*dtF)*(gradDtF )[2] + (4*dtB)*(gradDtB)[2] + (4*dtC)*(gradDtC)[2] + (4*dtE)* (gradDtE)[2]) |
| 616 | 2*dtD, gradDtD,((vecTmp)[0] = (2*dtA)*(gradDtA)[0] + (2*dtD)*(gradDtD)[0] + ( 2*dtF)*(gradDtF)[0] + (4*dtB)*(gradDtB)[0] + (4*dtC)*(gradDtC )[0] + (4*dtE)*(gradDtE)[0], (vecTmp)[1] = (2*dtA)*(gradDtA)[ 1] + (2*dtD)*(gradDtD)[1] + (2*dtF)*(gradDtF)[1] + (4*dtB)*(gradDtB )[1] + (4*dtC)*(gradDtC)[1] + (4*dtE)*(gradDtE)[1], (vecTmp)[ 2] = (2*dtA)*(gradDtA)[2] + (2*dtD)*(gradDtD)[2] + (2*dtF)*(gradDtF )[2] + (4*dtB)*(gradDtB)[2] + (4*dtC)*(gradDtC)[2] + (4*dtE)* (gradDtE)[2]) |
| 617 | 2*dtF, gradDtF,((vecTmp)[0] = (2*dtA)*(gradDtA)[0] + (2*dtD)*(gradDtD)[0] + ( 2*dtF)*(gradDtF)[0] + (4*dtB)*(gradDtB)[0] + (4*dtC)*(gradDtC )[0] + (4*dtE)*(gradDtE)[0], (vecTmp)[1] = (2*dtA)*(gradDtA)[ 1] + (2*dtD)*(gradDtD)[1] + (2*dtF)*(gradDtF)[1] + (4*dtB)*(gradDtB )[1] + (4*dtC)*(gradDtC)[1] + (4*dtE)*(gradDtE)[1], (vecTmp)[ 2] = (2*dtA)*(gradDtA)[2] + (2*dtD)*(gradDtD)[2] + (2*dtF)*(gradDtF )[2] + (4*dtB)*(gradDtB)[2] + (4*dtC)*(gradDtC)[2] + (4*dtE)* (gradDtE)[2]) |
| 618 | 4*dtB, gradDtB,((vecTmp)[0] = (2*dtA)*(gradDtA)[0] + (2*dtD)*(gradDtD)[0] + ( 2*dtF)*(gradDtF)[0] + (4*dtB)*(gradDtB)[0] + (4*dtC)*(gradDtC )[0] + (4*dtE)*(gradDtE)[0], (vecTmp)[1] = (2*dtA)*(gradDtA)[ 1] + (2*dtD)*(gradDtD)[1] + (2*dtF)*(gradDtF)[1] + (4*dtB)*(gradDtB )[1] + (4*dtC)*(gradDtC)[1] + (4*dtE)*(gradDtE)[1], (vecTmp)[ 2] = (2*dtA)*(gradDtA)[2] + (2*dtD)*(gradDtD)[2] + (2*dtF)*(gradDtF )[2] + (4*dtB)*(gradDtB)[2] + (4*dtC)*(gradDtC)[2] + (4*dtE)* (gradDtE)[2]) |
| 619 | 4*dtC, gradDtC,((vecTmp)[0] = (2*dtA)*(gradDtA)[0] + (2*dtD)*(gradDtD)[0] + ( 2*dtF)*(gradDtF)[0] + (4*dtB)*(gradDtB)[0] + (4*dtC)*(gradDtC )[0] + (4*dtE)*(gradDtE)[0], (vecTmp)[1] = (2*dtA)*(gradDtA)[ 1] + (2*dtD)*(gradDtD)[1] + (2*dtF)*(gradDtF)[1] + (4*dtB)*(gradDtB )[1] + (4*dtC)*(gradDtC)[1] + (4*dtE)*(gradDtE)[1], (vecTmp)[ 2] = (2*dtA)*(gradDtA)[2] + (2*dtD)*(gradDtD)[2] + (2*dtF)*(gradDtF )[2] + (4*dtB)*(gradDtB)[2] + (4*dtC)*(gradDtC)[2] + (4*dtE)* (gradDtE)[2]) |
| 620 | 4*dtE, gradDtE)((vecTmp)[0] = (2*dtA)*(gradDtA)[0] + (2*dtD)*(gradDtD)[0] + ( 2*dtF)*(gradDtF)[0] + (4*dtB)*(gradDtB)[0] + (4*dtC)*(gradDtC )[0] + (4*dtE)*(gradDtE)[0], (vecTmp)[1] = (2*dtA)*(gradDtA)[ 1] + (2*dtD)*(gradDtD)[1] + (2*dtF)*(gradDtF)[1] + (4*dtB)*(gradDtB )[1] + (4*dtC)*(gradDtC)[1] + (4*dtE)*(gradDtE)[1], (vecTmp)[ 2] = (2*dtA)*(gradDtA)[2] + (2*dtD)*(gradDtD)[2] + (2*dtF)*(gradDtF )[2] + (4*dtB)*(gradDtB)[2] + (4*dtC)*(gradDtC)[2] + (4*dtE)* (gradDtE)[2]); |
| 621 | } |
| 622 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageSGradMag)(pvl->query[tenGageSGradMag/8] & (1 << (tenGageSGradMag % 8)))) { |
| 623 | magTmp = pvl->directAnswer[tenGageSGradMag][0] = ELL_3V_LEN(vecTmp)(sqrt((((vecTmp))[0]*((vecTmp))[0] + ((vecTmp))[1]*((vecTmp)) [1] + ((vecTmp))[2]*((vecTmp))[2]))); |
| 624 | } |
| 625 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageSNormal)(pvl->query[tenGageSNormal/8] & (1 << (tenGageSNormal % 8)))) { |
| 626 | ELL_3V_SCALE(pvl->directAnswer[tenGageSNormal],((pvl->directAnswer[tenGageSNormal])[0] = (magTmp ? 1/magTmp : 0)*(vecTmp)[0], (pvl->directAnswer[tenGageSNormal])[1] = (magTmp ? 1/magTmp : 0)*(vecTmp)[1], (pvl->directAnswer[tenGageSNormal ])[2] = (magTmp ? 1/magTmp : 0)*(vecTmp)[2]) |
| 627 | magTmp ? 1/magTmp : 0, vecTmp)((pvl->directAnswer[tenGageSNormal])[0] = (magTmp ? 1/magTmp : 0)*(vecTmp)[0], (pvl->directAnswer[tenGageSNormal])[1] = (magTmp ? 1/magTmp : 0)*(vecTmp)[1], (pvl->directAnswer[tenGageSNormal ])[2] = (magTmp ? 1/magTmp : 0)*(vecTmp)[2]); |
| 628 | } |
| 629 | |
| 630 | /* --- Norm --- */ |
| 631 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageNormGradVec)(pvl->query[tenGageNormGradVec/8] & (1 << (tenGageNormGradVec % 8)))) { |
| 632 | double nslc; |
| 633 | nslc = pvl->directAnswer[tenGageNorm][0]; |
| 634 | nslc = nslc ? 1/(2*nslc) : 0.0; |
| 635 | vecTmp = pvl->directAnswer[tenGageNormGradVec]; |
| 636 | ELL_3V_SCALE(vecTmp, nslc, pvl->directAnswer[tenGageSGradVec])((vecTmp)[0] = (nslc)*(pvl->directAnswer[tenGageSGradVec]) [0], (vecTmp)[1] = (nslc)*(pvl->directAnswer[tenGageSGradVec ])[1], (vecTmp)[2] = (nslc)*(pvl->directAnswer[tenGageSGradVec ])[2]); |
| 637 | } |
| 638 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageNormGradMag)(pvl->query[tenGageNormGradMag/8] & (1 << (tenGageNormGradMag % 8)))) { |
| 639 | magTmp = pvl->directAnswer[tenGageNormGradMag][0] = ELL_3V_LEN(vecTmp)(sqrt((((vecTmp))[0]*((vecTmp))[0] + ((vecTmp))[1]*((vecTmp)) [1] + ((vecTmp))[2]*((vecTmp))[2]))); |
| 640 | } |
| 641 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageNormNormal)(pvl->query[tenGageNormNormal/8] & (1 << (tenGageNormNormal % 8)))) { |
| 642 | ELL_3V_SCALE(pvl->directAnswer[tenGageNormNormal],((pvl->directAnswer[tenGageNormNormal])[0] = (magTmp ? 1/magTmp : 0)*(vecTmp)[0], (pvl->directAnswer[tenGageNormNormal])[ 1] = (magTmp ? 1/magTmp : 0)*(vecTmp)[1], (pvl->directAnswer [tenGageNormNormal])[2] = (magTmp ? 1/magTmp : 0)*(vecTmp)[2] ) |
| 643 | magTmp ? 1/magTmp : 0, vecTmp)((pvl->directAnswer[tenGageNormNormal])[0] = (magTmp ? 1/magTmp : 0)*(vecTmp)[0], (pvl->directAnswer[tenGageNormNormal])[ 1] = (magTmp ? 1/magTmp : 0)*(vecTmp)[1], (pvl->directAnswer [tenGageNormNormal])[2] = (magTmp ? 1/magTmp : 0)*(vecTmp)[2] ); |
| 644 | } |
| 645 | |
| 646 | /* --- Q --- */ |
| 647 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageQGradVec)(pvl->query[tenGageQGradVec/8] & (1 << (tenGageQGradVec % 8)))) { |
| 648 | gradCbQ = vecTmp = pvl->directAnswer[tenGageQGradVec]; |
| 649 | ELL_3V_SCALE_ADD2(vecTmp,((vecTmp)[0] = (1.0/9)*(gradCbS)[0] + (-1.0/9)*(gradCbB)[0], ( vecTmp)[1] = (1.0/9)*(gradCbS)[1] + (-1.0/9)*(gradCbB)[1], (vecTmp )[2] = (1.0/9)*(gradCbS)[2] + (-1.0/9)*(gradCbB)[2]) |
| 650 | 1.0/9, gradCbS,((vecTmp)[0] = (1.0/9)*(gradCbS)[0] + (-1.0/9)*(gradCbB)[0], ( vecTmp)[1] = (1.0/9)*(gradCbS)[1] + (-1.0/9)*(gradCbB)[1], (vecTmp )[2] = (1.0/9)*(gradCbS)[2] + (-1.0/9)*(gradCbB)[2]) |
| 651 | -1.0/9, gradCbB)((vecTmp)[0] = (1.0/9)*(gradCbS)[0] + (-1.0/9)*(gradCbB)[0], ( vecTmp)[1] = (1.0/9)*(gradCbS)[1] + (-1.0/9)*(gradCbB)[1], (vecTmp )[2] = (1.0/9)*(gradCbS)[2] + (-1.0/9)*(gradCbB)[2]); |
| 652 | |
| 653 | } |
| 654 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageQGradMag)(pvl->query[tenGageQGradMag/8] & (1 << (tenGageQGradMag % 8)))) { |
| 655 | magTmp = pvl->directAnswer[tenGageQGradMag][0] = ELL_3V_LEN(vecTmp)(sqrt((((vecTmp))[0]*((vecTmp))[0] + ((vecTmp))[1]*((vecTmp)) [1] + ((vecTmp))[2]*((vecTmp))[2]))); |
| 656 | } |
| 657 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageQNormal)(pvl->query[tenGageQNormal/8] & (1 << (tenGageQNormal % 8)))) { |
| 658 | ELL_3V_SCALE(pvl->directAnswer[tenGageQNormal],((pvl->directAnswer[tenGageQNormal])[0] = (magTmp ? 1/magTmp : 0)*(vecTmp)[0], (pvl->directAnswer[tenGageQNormal])[1] = (magTmp ? 1/magTmp : 0)*(vecTmp)[1], (pvl->directAnswer[tenGageQNormal ])[2] = (magTmp ? 1/magTmp : 0)*(vecTmp)[2]) |
| 659 | magTmp ? 1/magTmp : 0, vecTmp)((pvl->directAnswer[tenGageQNormal])[0] = (magTmp ? 1/magTmp : 0)*(vecTmp)[0], (pvl->directAnswer[tenGageQNormal])[1] = (magTmp ? 1/magTmp : 0)*(vecTmp)[1], (pvl->directAnswer[tenGageQNormal ])[2] = (magTmp ? 1/magTmp : 0)*(vecTmp)[2]); |
| 660 | } |
| 661 | /* --- FA --- */ |
| 662 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFAGradVec)(pvl->query[tenGageFAGradVec/8] & (1 << (tenGageFAGradVec % 8)))) { |
| 663 | vecTmp = pvl->directAnswer[tenGageFAGradVec]; |
| 664 | tmp3 = AIR_MAX(0, pvl->directAnswer[tenGageFA][0])((0) > (pvl->directAnswer[tenGageFA][0]) ? (0) : (pvl-> directAnswer[tenGageFA][0])); |
| 665 | tmp0 = cbQ ? tmp3/(2*cbQ) : 0; |
| 666 | tmp1 = cbS ? -tmp3/(2*cbS) : 0; |
| 667 | ELL_3V_SCALE_ADD2(vecTmp,((vecTmp)[0] = (tmp0)*(gradCbQ)[0] + (tmp1)*(gradCbS)[0], (vecTmp )[1] = (tmp0)*(gradCbQ)[1] + (tmp1)*(gradCbS)[1], (vecTmp)[2] = (tmp0)*(gradCbQ)[2] + (tmp1)*(gradCbS)[2]) |
| 668 | tmp0, gradCbQ,((vecTmp)[0] = (tmp0)*(gradCbQ)[0] + (tmp1)*(gradCbS)[0], (vecTmp )[1] = (tmp0)*(gradCbQ)[1] + (tmp1)*(gradCbS)[1], (vecTmp)[2] = (tmp0)*(gradCbQ)[2] + (tmp1)*(gradCbS)[2]) |
| 669 | tmp1, gradCbS)((vecTmp)[0] = (tmp0)*(gradCbQ)[0] + (tmp1)*(gradCbS)[0], (vecTmp )[1] = (tmp0)*(gradCbQ)[1] + (tmp1)*(gradCbS)[1], (vecTmp)[2] = (tmp0)*(gradCbQ)[2] + (tmp1)*(gradCbS)[2]); |
| 670 | } |
| 671 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFAGradMag)(pvl->query[tenGageFAGradMag/8] & (1 << (tenGageFAGradMag % 8)))) { |
| 672 | magTmp = pvl->directAnswer[tenGageFAGradMag][0] = ELL_3V_LEN(vecTmp)(sqrt((((vecTmp))[0]*((vecTmp))[0] + ((vecTmp))[1]*((vecTmp)) [1] + ((vecTmp))[2]*((vecTmp))[2]))); |
| 673 | } |
| 674 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFANormal)(pvl->query[tenGageFANormal/8] & (1 << (tenGageFANormal % 8)))) { |
| 675 | ELL_3V_SCALE(pvl->directAnswer[tenGageFANormal],((pvl->directAnswer[tenGageFANormal])[0] = (magTmp ? 1/magTmp : 0)*(vecTmp)[0], (pvl->directAnswer[tenGageFANormal])[1] = (magTmp ? 1/magTmp : 0)*(vecTmp)[1], (pvl->directAnswer [tenGageFANormal])[2] = (magTmp ? 1/magTmp : 0)*(vecTmp)[2]) |
| 676 | magTmp ? 1/magTmp : 0, vecTmp)((pvl->directAnswer[tenGageFANormal])[0] = (magTmp ? 1/magTmp : 0)*(vecTmp)[0], (pvl->directAnswer[tenGageFANormal])[1] = (magTmp ? 1/magTmp : 0)*(vecTmp)[1], (pvl->directAnswer [tenGageFANormal])[2] = (magTmp ? 1/magTmp : 0)*(vecTmp)[2]); |
| 677 | } |
| 678 | /* --- R --- */ |
| 679 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageRGradVec)(pvl->query[tenGageRGradVec/8] & (1 << (tenGageRGradVec % 8)))) { |
| 680 | gradCbR = vecTmp = pvl->directAnswer[tenGageRGradVec]; |
| 681 | ELL_3V_SCALE_ADD4(vecTmp,((vecTmp)[0] = ((5*cbB - 2*cbS)/54)*(gradCbA)[0] + (5*cbA/54) *(gradCbB)[0] + (-0.5)*(gradCbC)[0] + (-cbA/27)*(gradCbS)[0], (vecTmp)[1] = ((5*cbB - 2*cbS)/54)*(gradCbA)[1] + (5*cbA/54) *(gradCbB)[1] + (-0.5)*(gradCbC)[1] + (-cbA/27)*(gradCbS)[1], (vecTmp)[2] = ((5*cbB - 2*cbS)/54)*(gradCbA)[2] + (5*cbA/54) *(gradCbB)[2] + (-0.5)*(gradCbC)[2] + (-cbA/27)*(gradCbS)[2]) |
| 682 | (5*cbB - 2*cbS)/54, gradCbA,((vecTmp)[0] = ((5*cbB - 2*cbS)/54)*(gradCbA)[0] + (5*cbA/54) *(gradCbB)[0] + (-0.5)*(gradCbC)[0] + (-cbA/27)*(gradCbS)[0], (vecTmp)[1] = ((5*cbB - 2*cbS)/54)*(gradCbA)[1] + (5*cbA/54) *(gradCbB)[1] + (-0.5)*(gradCbC)[1] + (-cbA/27)*(gradCbS)[1], (vecTmp)[2] = ((5*cbB - 2*cbS)/54)*(gradCbA)[2] + (5*cbA/54) *(gradCbB)[2] + (-0.5)*(gradCbC)[2] + (-cbA/27)*(gradCbS)[2]) |
| 683 | 5*cbA/54, gradCbB,((vecTmp)[0] = ((5*cbB - 2*cbS)/54)*(gradCbA)[0] + (5*cbA/54) *(gradCbB)[0] + (-0.5)*(gradCbC)[0] + (-cbA/27)*(gradCbS)[0], (vecTmp)[1] = ((5*cbB - 2*cbS)/54)*(gradCbA)[1] + (5*cbA/54) *(gradCbB)[1] + (-0.5)*(gradCbC)[1] + (-cbA/27)*(gradCbS)[1], (vecTmp)[2] = ((5*cbB - 2*cbS)/54)*(gradCbA)[2] + (5*cbA/54) *(gradCbB)[2] + (-0.5)*(gradCbC)[2] + (-cbA/27)*(gradCbS)[2]) |
| 684 | -0.5, gradCbC,((vecTmp)[0] = ((5*cbB - 2*cbS)/54)*(gradCbA)[0] + (5*cbA/54) *(gradCbB)[0] + (-0.5)*(gradCbC)[0] + (-cbA/27)*(gradCbS)[0], (vecTmp)[1] = ((5*cbB - 2*cbS)/54)*(gradCbA)[1] + (5*cbA/54) *(gradCbB)[1] + (-0.5)*(gradCbC)[1] + (-cbA/27)*(gradCbS)[1], (vecTmp)[2] = ((5*cbB - 2*cbS)/54)*(gradCbA)[2] + (5*cbA/54) *(gradCbB)[2] + (-0.5)*(gradCbC)[2] + (-cbA/27)*(gradCbS)[2]) |
| 685 | -cbA/27, gradCbS)((vecTmp)[0] = ((5*cbB - 2*cbS)/54)*(gradCbA)[0] + (5*cbA/54) *(gradCbB)[0] + (-0.5)*(gradCbC)[0] + (-cbA/27)*(gradCbS)[0], (vecTmp)[1] = ((5*cbB - 2*cbS)/54)*(gradCbA)[1] + (5*cbA/54) *(gradCbB)[1] + (-0.5)*(gradCbC)[1] + (-cbA/27)*(gradCbS)[1], (vecTmp)[2] = ((5*cbB - 2*cbS)/54)*(gradCbA)[2] + (5*cbA/54) *(gradCbB)[2] + (-0.5)*(gradCbC)[2] + (-cbA/27)*(gradCbS)[2]); |
| 686 | } |
| 687 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageRGradMag)(pvl->query[tenGageRGradMag/8] & (1 << (tenGageRGradMag % 8)))) { |
| 688 | magTmp = pvl->directAnswer[tenGageRGradMag][0] = ELL_3V_LEN(vecTmp)(sqrt((((vecTmp))[0]*((vecTmp))[0] + ((vecTmp))[1]*((vecTmp)) [1] + ((vecTmp))[2]*((vecTmp))[2]))); |
| 689 | } |
| 690 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageRNormal)(pvl->query[tenGageRNormal/8] & (1 << (tenGageRNormal % 8)))) { |
| 691 | ELL_3V_SCALE(pvl->directAnswer[tenGageRNormal],((pvl->directAnswer[tenGageRNormal])[0] = (magTmp ? 1/magTmp : 0)*(vecTmp)[0], (pvl->directAnswer[tenGageRNormal])[1] = (magTmp ? 1/magTmp : 0)*(vecTmp)[1], (pvl->directAnswer[tenGageRNormal ])[2] = (magTmp ? 1/magTmp : 0)*(vecTmp)[2]) |
| 692 | magTmp ? 1/magTmp : 0, vecTmp)((pvl->directAnswer[tenGageRNormal])[0] = (magTmp ? 1/magTmp : 0)*(vecTmp)[0], (pvl->directAnswer[tenGageRNormal])[1] = (magTmp ? 1/magTmp : 0)*(vecTmp)[1], (pvl->directAnswer[tenGageRNormal ])[2] = (magTmp ? 1/magTmp : 0)*(vecTmp)[2]); |
| 693 | } |
| 694 | /* --- Mode --- */ |
| 695 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageModeGradVec)(pvl->query[tenGageModeGradVec/8] & (1 << (tenGageModeGradVec % 8)))) { |
| 696 | vecTmp = pvl->directAnswer[tenGageModeGradVec]; |
| 697 | tmp1 = AIR_MAX(0, cbQ*cbQ*cbQ)((0) > (cbQ*cbQ*cbQ) ? (0) : (cbQ*cbQ*cbQ)); |
| 698 | tmp1 = tmp1 ? sqrt(1/tmp1) : 0; |
| 699 | tmp0 = cbQ ? -tmp1*3*cbR/(2*cbQ) : 0; |
| 700 | ELL_3V_SCALE_ADD2(vecTmp,((vecTmp)[0] = (tmp0)*(gradCbQ)[0] + (tmp1)*(gradCbR)[0], (vecTmp )[1] = (tmp0)*(gradCbQ)[1] + (tmp1)*(gradCbR)[1], (vecTmp)[2] = (tmp0)*(gradCbQ)[2] + (tmp1)*(gradCbR)[2]) |
| 701 | tmp0, gradCbQ,((vecTmp)[0] = (tmp0)*(gradCbQ)[0] + (tmp1)*(gradCbR)[0], (vecTmp )[1] = (tmp0)*(gradCbQ)[1] + (tmp1)*(gradCbR)[1], (vecTmp)[2] = (tmp0)*(gradCbQ)[2] + (tmp1)*(gradCbR)[2]) |
| 702 | tmp1, gradCbR)((vecTmp)[0] = (tmp0)*(gradCbQ)[0] + (tmp1)*(gradCbR)[0], (vecTmp )[1] = (tmp0)*(gradCbQ)[1] + (tmp1)*(gradCbR)[1], (vecTmp)[2] = (tmp0)*(gradCbQ)[2] + (tmp1)*(gradCbR)[2]); |
| 703 | } |
| 704 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageModeGradMag)(pvl->query[tenGageModeGradMag/8] & (1 << (tenGageModeGradMag % 8)))) { |
| 705 | magTmp = pvl->directAnswer[tenGageModeGradMag][0] = ELL_3V_LEN(vecTmp)(sqrt((((vecTmp))[0]*((vecTmp))[0] + ((vecTmp))[1]*((vecTmp)) [1] + ((vecTmp))[2]*((vecTmp))[2]))); |
| 706 | } |
| 707 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageModeNormal)(pvl->query[tenGageModeNormal/8] & (1 << (tenGageModeNormal % 8)))) { |
| 708 | ELL_3V_SCALE(pvl->directAnswer[tenGageModeNormal],((pvl->directAnswer[tenGageModeNormal])[0] = (magTmp ? 1/magTmp : 0)*(vecTmp)[0], (pvl->directAnswer[tenGageModeNormal])[ 1] = (magTmp ? 1/magTmp : 0)*(vecTmp)[1], (pvl->directAnswer [tenGageModeNormal])[2] = (magTmp ? 1/magTmp : 0)*(vecTmp)[2] ) |
| 709 | magTmp ? 1/magTmp : 0, vecTmp)((pvl->directAnswer[tenGageModeNormal])[0] = (magTmp ? 1/magTmp : 0)*(vecTmp)[0], (pvl->directAnswer[tenGageModeNormal])[ 1] = (magTmp ? 1/magTmp : 0)*(vecTmp)[1], (pvl->directAnswer [tenGageModeNormal])[2] = (magTmp ? 1/magTmp : 0)*(vecTmp)[2] ); |
| 710 | } |
| 711 | /* --- Theta --- */ |
| 712 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageThetaGradVec)(pvl->query[tenGageThetaGradVec/8] & (1 << (tenGageThetaGradVec % 8)))) { |
| 713 | vecTmp = pvl->directAnswer[tenGageThetaGradVec]; |
| 714 | tmp1 = AIR_MAX(0, cbQ*cbQ*cbQ)((0) > (cbQ*cbQ*cbQ) ? (0) : (cbQ*cbQ*cbQ)); |
| 715 | tmp0 = tmp1 ? cbR*cbR/tmp1 : 0; |
| 716 | tmp1 = sqrt(tmp1)*sqrt(1.0 - tmp0); |
| 717 | tmp1 = tmp1 ? 1/(AIR_PI3.14159265358979323846*tmp1) : 0.0; |
| 718 | tmp0 = cbQ ? -tmp1*3*cbR/(2*cbQ) : 0.0; |
| 719 | ELL_3V_SCALE_ADD2(vecTmp,((vecTmp)[0] = (tmp0)*(gradCbQ)[0] + (tmp1)*(gradCbR)[0], (vecTmp )[1] = (tmp0)*(gradCbQ)[1] + (tmp1)*(gradCbR)[1], (vecTmp)[2] = (tmp0)*(gradCbQ)[2] + (tmp1)*(gradCbR)[2]) |
| 720 | tmp0, gradCbQ,((vecTmp)[0] = (tmp0)*(gradCbQ)[0] + (tmp1)*(gradCbR)[0], (vecTmp )[1] = (tmp0)*(gradCbQ)[1] + (tmp1)*(gradCbR)[1], (vecTmp)[2] = (tmp0)*(gradCbQ)[2] + (tmp1)*(gradCbR)[2]) |
| 721 | tmp1, gradCbR)((vecTmp)[0] = (tmp0)*(gradCbQ)[0] + (tmp1)*(gradCbR)[0], (vecTmp )[1] = (tmp0)*(gradCbQ)[1] + (tmp1)*(gradCbR)[1], (vecTmp)[2] = (tmp0)*(gradCbQ)[2] + (tmp1)*(gradCbR)[2]); |
| 722 | } |
| 723 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageThetaGradMag)(pvl->query[tenGageThetaGradMag/8] & (1 << (tenGageThetaGradMag % 8)))) { |
| 724 | magTmp = pvl->directAnswer[tenGageThetaGradMag][0] = ELL_3V_LEN(vecTmp)(sqrt((((vecTmp))[0]*((vecTmp))[0] + ((vecTmp))[1]*((vecTmp)) [1] + ((vecTmp))[2]*((vecTmp))[2]))); |
| 725 | } |
| 726 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageThetaNormal)(pvl->query[tenGageThetaNormal/8] & (1 << (tenGageThetaNormal % 8)))) { |
| 727 | ELL_3V_SCALE(pvl->directAnswer[tenGageThetaNormal],((pvl->directAnswer[tenGageThetaNormal])[0] = (magTmp ? 1/ magTmp : 0)*(vecTmp)[0], (pvl->directAnswer[tenGageThetaNormal ])[1] = (magTmp ? 1/magTmp : 0)*(vecTmp)[1], (pvl->directAnswer [tenGageThetaNormal])[2] = (magTmp ? 1/magTmp : 0)*(vecTmp)[2 ]) |
| 728 | magTmp ? 1/magTmp : 0, vecTmp)((pvl->directAnswer[tenGageThetaNormal])[0] = (magTmp ? 1/ magTmp : 0)*(vecTmp)[0], (pvl->directAnswer[tenGageThetaNormal ])[1] = (magTmp ? 1/magTmp : 0)*(vecTmp)[1], (pvl->directAnswer [tenGageThetaNormal])[2] = (magTmp ? 1/magTmp : 0)*(vecTmp)[2 ]); |
| 729 | } |
| 730 | /* --- Omega --- */ |
| 731 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageOmegaGradVec)(pvl->query[tenGageOmegaGradVec/8] & (1 << (tenGageOmegaGradVec % 8)))) { |
| 732 | double fa, mode, *faGrad, *modeGrad; |
| 733 | vecTmp = pvl->directAnswer[tenGageOmegaGradVec]; |
| 734 | fa = pvl->directAnswer[tenGageFA][0]; |
| 735 | mode = pvl->directAnswer[tenGageMode][0]; |
| 736 | faGrad = pvl->directAnswer[tenGageFAGradVec]; |
| 737 | modeGrad = pvl->directAnswer[tenGageModeGradVec]; |
| 738 | ELL_3V_SCALE_ADD2(vecTmp,((vecTmp)[0] = ((1+mode)/2)*(faGrad)[0] + (fa/2)*(modeGrad)[0 ], (vecTmp)[1] = ((1+mode)/2)*(faGrad)[1] + (fa/2)*(modeGrad) [1], (vecTmp)[2] = ((1+mode)/2)*(faGrad)[2] + (fa/2)*(modeGrad )[2]) |
| 739 | (1+mode)/2, faGrad,((vecTmp)[0] = ((1+mode)/2)*(faGrad)[0] + (fa/2)*(modeGrad)[0 ], (vecTmp)[1] = ((1+mode)/2)*(faGrad)[1] + (fa/2)*(modeGrad) [1], (vecTmp)[2] = ((1+mode)/2)*(faGrad)[2] + (fa/2)*(modeGrad )[2]) |
| 740 | fa/2, modeGrad)((vecTmp)[0] = ((1+mode)/2)*(faGrad)[0] + (fa/2)*(modeGrad)[0 ], (vecTmp)[1] = ((1+mode)/2)*(faGrad)[1] + (fa/2)*(modeGrad) [1], (vecTmp)[2] = ((1+mode)/2)*(faGrad)[2] + (fa/2)*(modeGrad )[2]); |
| 741 | } |
| 742 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageOmegaGradMag)(pvl->query[tenGageOmegaGradMag/8] & (1 << (tenGageOmegaGradMag % 8)))) { |
| 743 | magTmp = pvl->directAnswer[tenGageOmegaGradMag][0] = ELL_3V_LEN(vecTmp)(sqrt((((vecTmp))[0]*((vecTmp))[0] + ((vecTmp))[1]*((vecTmp)) [1] + ((vecTmp))[2]*((vecTmp))[2]))); |
| 744 | } |
| 745 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageOmegaNormal)(pvl->query[tenGageOmegaNormal/8] & (1 << (tenGageOmegaNormal % 8)))) { |
| 746 | ELL_3V_SCALE(pvl->directAnswer[tenGageOmegaNormal],((pvl->directAnswer[tenGageOmegaNormal])[0] = (magTmp ? 1/ magTmp : 0)*(vecTmp)[0], (pvl->directAnswer[tenGageOmegaNormal ])[1] = (magTmp ? 1/magTmp : 0)*(vecTmp)[1], (pvl->directAnswer [tenGageOmegaNormal])[2] = (magTmp ? 1/magTmp : 0)*(vecTmp)[2 ]) |
| 747 | magTmp ? 1/magTmp : 0, vecTmp)((pvl->directAnswer[tenGageOmegaNormal])[0] = (magTmp ? 1/ magTmp : 0)*(vecTmp)[0], (pvl->directAnswer[tenGageOmegaNormal ])[1] = (magTmp ? 1/magTmp : 0)*(vecTmp)[1], (pvl->directAnswer [tenGageOmegaNormal])[2] = (magTmp ? 1/magTmp : 0)*(vecTmp)[2 ]); |
| 748 | } |
| 749 | |
| 750 | #define SQRT_1_OVER_30.57735026918962576450 0.57735026918962576450 |
| 751 | |
| 752 | /* --- Invariant gradients + rotation tangents --- */ |
| 753 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageInvarKGrads)(pvl->query[tenGageInvarKGrads/8] & (1 << (tenGageInvarKGrads % 8)))) { |
| 754 | double mu1Grad[7], *mu2Grad, *skwGrad; |
| 755 | |
| 756 | TEN_T_SET(mu1Grad, 1,( (mu1Grad)[0] = (1), (mu1Grad)[1] = (0.57735026918962576450) , (mu1Grad)[2] = (0), (mu1Grad)[3] = (0), (mu1Grad)[4] = (0.57735026918962576450 ), (mu1Grad)[5] = (0), (mu1Grad)[6] = (0.57735026918962576450 ) ) |
| 757 | SQRT_1_OVER_3, 0, 0,( (mu1Grad)[0] = (1), (mu1Grad)[1] = (0.57735026918962576450) , (mu1Grad)[2] = (0), (mu1Grad)[3] = (0), (mu1Grad)[4] = (0.57735026918962576450 ), (mu1Grad)[5] = (0), (mu1Grad)[6] = (0.57735026918962576450 ) ) |
| 758 | SQRT_1_OVER_3, 0,( (mu1Grad)[0] = (1), (mu1Grad)[1] = (0.57735026918962576450) , (mu1Grad)[2] = (0), (mu1Grad)[3] = (0), (mu1Grad)[4] = (0.57735026918962576450 ), (mu1Grad)[5] = (0), (mu1Grad)[6] = (0.57735026918962576450 ) ) |
| 759 | SQRT_1_OVER_3)( (mu1Grad)[0] = (1), (mu1Grad)[1] = (0.57735026918962576450) , (mu1Grad)[2] = (0), (mu1Grad)[3] = (0), (mu1Grad)[4] = (0.57735026918962576450 ), (mu1Grad)[5] = (0), (mu1Grad)[6] = (0.57735026918962576450 ) ); |
| 760 | mu2Grad = pvl->directAnswer[tenGageDelNormK2]; |
| 761 | skwGrad = pvl->directAnswer[tenGageDelNormK3]; |
| 762 | |
| 763 | ELL_3V_SET(pvl->directAnswer[tenGageInvarKGrads] + 0*3,((pvl->directAnswer[tenGageInvarKGrads] + 0*3)[0] = (( (mu1Grad )[1]*(gradDdXYZ + 0*7)[1] + 2*(mu1Grad)[2]*(gradDdXYZ + 0*7)[ 2] + 2*(mu1Grad)[3]*(gradDdXYZ + 0*7)[3] + (mu1Grad)[4]*(gradDdXYZ + 0*7)[4] + 2*(mu1Grad)[5]*(gradDdXYZ + 0*7)[5] + (mu1Grad)[ 6]*(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageInvarKGrads ] + 0*3)[1] = (( (mu1Grad)[1]*(gradDdXYZ + 1*7)[1] + 2*(mu1Grad )[2]*(gradDdXYZ + 1*7)[2] + 2*(mu1Grad)[3]*(gradDdXYZ + 1*7)[ 3] + (mu1Grad)[4]*(gradDdXYZ + 1*7)[4] + 2*(mu1Grad)[5]*(gradDdXYZ + 1*7)[5] + (mu1Grad)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer [tenGageInvarKGrads] + 0*3)[2] = (( (mu1Grad)[1]*(gradDdXYZ + 2*7)[1] + 2*(mu1Grad)[2]*(gradDdXYZ + 2*7)[2] + 2*(mu1Grad)[ 3]*(gradDdXYZ + 2*7)[3] + (mu1Grad)[4]*(gradDdXYZ + 2*7)[4] + 2*(mu1Grad)[5]*(gradDdXYZ + 2*7)[5] + (mu1Grad)[6]*(gradDdXYZ + 2*7)[6] ))) |
| 764 | TEN_T_DOT(mu1Grad, gradDdXYZ + 0*7),((pvl->directAnswer[tenGageInvarKGrads] + 0*3)[0] = (( (mu1Grad )[1]*(gradDdXYZ + 0*7)[1] + 2*(mu1Grad)[2]*(gradDdXYZ + 0*7)[ 2] + 2*(mu1Grad)[3]*(gradDdXYZ + 0*7)[3] + (mu1Grad)[4]*(gradDdXYZ + 0*7)[4] + 2*(mu1Grad)[5]*(gradDdXYZ + 0*7)[5] + (mu1Grad)[ 6]*(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageInvarKGrads ] + 0*3)[1] = (( (mu1Grad)[1]*(gradDdXYZ + 1*7)[1] + 2*(mu1Grad )[2]*(gradDdXYZ + 1*7)[2] + 2*(mu1Grad)[3]*(gradDdXYZ + 1*7)[ 3] + (mu1Grad)[4]*(gradDdXYZ + 1*7)[4] + 2*(mu1Grad)[5]*(gradDdXYZ + 1*7)[5] + (mu1Grad)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer [tenGageInvarKGrads] + 0*3)[2] = (( (mu1Grad)[1]*(gradDdXYZ + 2*7)[1] + 2*(mu1Grad)[2]*(gradDdXYZ + 2*7)[2] + 2*(mu1Grad)[ 3]*(gradDdXYZ + 2*7)[3] + (mu1Grad)[4]*(gradDdXYZ + 2*7)[4] + 2*(mu1Grad)[5]*(gradDdXYZ + 2*7)[5] + (mu1Grad)[6]*(gradDdXYZ + 2*7)[6] ))) |
| 765 | TEN_T_DOT(mu1Grad, gradDdXYZ + 1*7),((pvl->directAnswer[tenGageInvarKGrads] + 0*3)[0] = (( (mu1Grad )[1]*(gradDdXYZ + 0*7)[1] + 2*(mu1Grad)[2]*(gradDdXYZ + 0*7)[ 2] + 2*(mu1Grad)[3]*(gradDdXYZ + 0*7)[3] + (mu1Grad)[4]*(gradDdXYZ + 0*7)[4] + 2*(mu1Grad)[5]*(gradDdXYZ + 0*7)[5] + (mu1Grad)[ 6]*(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageInvarKGrads ] + 0*3)[1] = (( (mu1Grad)[1]*(gradDdXYZ + 1*7)[1] + 2*(mu1Grad )[2]*(gradDdXYZ + 1*7)[2] + 2*(mu1Grad)[3]*(gradDdXYZ + 1*7)[ 3] + (mu1Grad)[4]*(gradDdXYZ + 1*7)[4] + 2*(mu1Grad)[5]*(gradDdXYZ + 1*7)[5] + (mu1Grad)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer [tenGageInvarKGrads] + 0*3)[2] = (( (mu1Grad)[1]*(gradDdXYZ + 2*7)[1] + 2*(mu1Grad)[2]*(gradDdXYZ + 2*7)[2] + 2*(mu1Grad)[ 3]*(gradDdXYZ + 2*7)[3] + (mu1Grad)[4]*(gradDdXYZ + 2*7)[4] + 2*(mu1Grad)[5]*(gradDdXYZ + 2*7)[5] + (mu1Grad)[6]*(gradDdXYZ + 2*7)[6] ))) |
| 766 | TEN_T_DOT(mu1Grad, gradDdXYZ + 2*7))((pvl->directAnswer[tenGageInvarKGrads] + 0*3)[0] = (( (mu1Grad )[1]*(gradDdXYZ + 0*7)[1] + 2*(mu1Grad)[2]*(gradDdXYZ + 0*7)[ 2] + 2*(mu1Grad)[3]*(gradDdXYZ + 0*7)[3] + (mu1Grad)[4]*(gradDdXYZ + 0*7)[4] + 2*(mu1Grad)[5]*(gradDdXYZ + 0*7)[5] + (mu1Grad)[ 6]*(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageInvarKGrads ] + 0*3)[1] = (( (mu1Grad)[1]*(gradDdXYZ + 1*7)[1] + 2*(mu1Grad )[2]*(gradDdXYZ + 1*7)[2] + 2*(mu1Grad)[3]*(gradDdXYZ + 1*7)[ 3] + (mu1Grad)[4]*(gradDdXYZ + 1*7)[4] + 2*(mu1Grad)[5]*(gradDdXYZ + 1*7)[5] + (mu1Grad)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer [tenGageInvarKGrads] + 0*3)[2] = (( (mu1Grad)[1]*(gradDdXYZ + 2*7)[1] + 2*(mu1Grad)[2]*(gradDdXYZ + 2*7)[2] + 2*(mu1Grad)[ 3]*(gradDdXYZ + 2*7)[3] + (mu1Grad)[4]*(gradDdXYZ + 2*7)[4] + 2*(mu1Grad)[5]*(gradDdXYZ + 2*7)[5] + (mu1Grad)[6]*(gradDdXYZ + 2*7)[6] ))); |
| 767 | ELL_3V_SET(pvl->directAnswer[tenGageInvarKGrads] + 1*3,((pvl->directAnswer[tenGageInvarKGrads] + 1*3)[0] = (( (mu2Grad )[1]*(gradDdXYZ + 0*7)[1] + 2*(mu2Grad)[2]*(gradDdXYZ + 0*7)[ 2] + 2*(mu2Grad)[3]*(gradDdXYZ + 0*7)[3] + (mu2Grad)[4]*(gradDdXYZ + 0*7)[4] + 2*(mu2Grad)[5]*(gradDdXYZ + 0*7)[5] + (mu2Grad)[ 6]*(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageInvarKGrads ] + 1*3)[1] = (( (mu2Grad)[1]*(gradDdXYZ + 1*7)[1] + 2*(mu2Grad )[2]*(gradDdXYZ + 1*7)[2] + 2*(mu2Grad)[3]*(gradDdXYZ + 1*7)[ 3] + (mu2Grad)[4]*(gradDdXYZ + 1*7)[4] + 2*(mu2Grad)[5]*(gradDdXYZ + 1*7)[5] + (mu2Grad)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer [tenGageInvarKGrads] + 1*3)[2] = (( (mu2Grad)[1]*(gradDdXYZ + 2*7)[1] + 2*(mu2Grad)[2]*(gradDdXYZ + 2*7)[2] + 2*(mu2Grad)[ 3]*(gradDdXYZ + 2*7)[3] + (mu2Grad)[4]*(gradDdXYZ + 2*7)[4] + 2*(mu2Grad)[5]*(gradDdXYZ + 2*7)[5] + (mu2Grad)[6]*(gradDdXYZ + 2*7)[6] ))) |
| 768 | TEN_T_DOT(mu2Grad, gradDdXYZ + 0*7),((pvl->directAnswer[tenGageInvarKGrads] + 1*3)[0] = (( (mu2Grad )[1]*(gradDdXYZ + 0*7)[1] + 2*(mu2Grad)[2]*(gradDdXYZ + 0*7)[ 2] + 2*(mu2Grad)[3]*(gradDdXYZ + 0*7)[3] + (mu2Grad)[4]*(gradDdXYZ + 0*7)[4] + 2*(mu2Grad)[5]*(gradDdXYZ + 0*7)[5] + (mu2Grad)[ 6]*(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageInvarKGrads ] + 1*3)[1] = (( (mu2Grad)[1]*(gradDdXYZ + 1*7)[1] + 2*(mu2Grad )[2]*(gradDdXYZ + 1*7)[2] + 2*(mu2Grad)[3]*(gradDdXYZ + 1*7)[ 3] + (mu2Grad)[4]*(gradDdXYZ + 1*7)[4] + 2*(mu2Grad)[5]*(gradDdXYZ + 1*7)[5] + (mu2Grad)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer [tenGageInvarKGrads] + 1*3)[2] = (( (mu2Grad)[1]*(gradDdXYZ + 2*7)[1] + 2*(mu2Grad)[2]*(gradDdXYZ + 2*7)[2] + 2*(mu2Grad)[ 3]*(gradDdXYZ + 2*7)[3] + (mu2Grad)[4]*(gradDdXYZ + 2*7)[4] + 2*(mu2Grad)[5]*(gradDdXYZ + 2*7)[5] + (mu2Grad)[6]*(gradDdXYZ + 2*7)[6] ))) |
| 769 | TEN_T_DOT(mu2Grad, gradDdXYZ + 1*7),((pvl->directAnswer[tenGageInvarKGrads] + 1*3)[0] = (( (mu2Grad )[1]*(gradDdXYZ + 0*7)[1] + 2*(mu2Grad)[2]*(gradDdXYZ + 0*7)[ 2] + 2*(mu2Grad)[3]*(gradDdXYZ + 0*7)[3] + (mu2Grad)[4]*(gradDdXYZ + 0*7)[4] + 2*(mu2Grad)[5]*(gradDdXYZ + 0*7)[5] + (mu2Grad)[ 6]*(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageInvarKGrads ] + 1*3)[1] = (( (mu2Grad)[1]*(gradDdXYZ + 1*7)[1] + 2*(mu2Grad )[2]*(gradDdXYZ + 1*7)[2] + 2*(mu2Grad)[3]*(gradDdXYZ + 1*7)[ 3] + (mu2Grad)[4]*(gradDdXYZ + 1*7)[4] + 2*(mu2Grad)[5]*(gradDdXYZ + 1*7)[5] + (mu2Grad)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer [tenGageInvarKGrads] + 1*3)[2] = (( (mu2Grad)[1]*(gradDdXYZ + 2*7)[1] + 2*(mu2Grad)[2]*(gradDdXYZ + 2*7)[2] + 2*(mu2Grad)[ 3]*(gradDdXYZ + 2*7)[3] + (mu2Grad)[4]*(gradDdXYZ + 2*7)[4] + 2*(mu2Grad)[5]*(gradDdXYZ + 2*7)[5] + (mu2Grad)[6]*(gradDdXYZ + 2*7)[6] ))) |
| 770 | TEN_T_DOT(mu2Grad, gradDdXYZ + 2*7))((pvl->directAnswer[tenGageInvarKGrads] + 1*3)[0] = (( (mu2Grad )[1]*(gradDdXYZ + 0*7)[1] + 2*(mu2Grad)[2]*(gradDdXYZ + 0*7)[ 2] + 2*(mu2Grad)[3]*(gradDdXYZ + 0*7)[3] + (mu2Grad)[4]*(gradDdXYZ + 0*7)[4] + 2*(mu2Grad)[5]*(gradDdXYZ + 0*7)[5] + (mu2Grad)[ 6]*(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageInvarKGrads ] + 1*3)[1] = (( (mu2Grad)[1]*(gradDdXYZ + 1*7)[1] + 2*(mu2Grad )[2]*(gradDdXYZ + 1*7)[2] + 2*(mu2Grad)[3]*(gradDdXYZ + 1*7)[ 3] + (mu2Grad)[4]*(gradDdXYZ + 1*7)[4] + 2*(mu2Grad)[5]*(gradDdXYZ + 1*7)[5] + (mu2Grad)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer [tenGageInvarKGrads] + 1*3)[2] = (( (mu2Grad)[1]*(gradDdXYZ + 2*7)[1] + 2*(mu2Grad)[2]*(gradDdXYZ + 2*7)[2] + 2*(mu2Grad)[ 3]*(gradDdXYZ + 2*7)[3] + (mu2Grad)[4]*(gradDdXYZ + 2*7)[4] + 2*(mu2Grad)[5]*(gradDdXYZ + 2*7)[5] + (mu2Grad)[6]*(gradDdXYZ + 2*7)[6] ))); |
| 771 | ELL_3V_SET(pvl->directAnswer[tenGageInvarKGrads] + 2*3,((pvl->directAnswer[tenGageInvarKGrads] + 2*3)[0] = (( (skwGrad )[1]*(gradDdXYZ + 0*7)[1] + 2*(skwGrad)[2]*(gradDdXYZ + 0*7)[ 2] + 2*(skwGrad)[3]*(gradDdXYZ + 0*7)[3] + (skwGrad)[4]*(gradDdXYZ + 0*7)[4] + 2*(skwGrad)[5]*(gradDdXYZ + 0*7)[5] + (skwGrad)[ 6]*(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageInvarKGrads ] + 2*3)[1] = (( (skwGrad)[1]*(gradDdXYZ + 1*7)[1] + 2*(skwGrad )[2]*(gradDdXYZ + 1*7)[2] + 2*(skwGrad)[3]*(gradDdXYZ + 1*7)[ 3] + (skwGrad)[4]*(gradDdXYZ + 1*7)[4] + 2*(skwGrad)[5]*(gradDdXYZ + 1*7)[5] + (skwGrad)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer [tenGageInvarKGrads] + 2*3)[2] = (( (skwGrad)[1]*(gradDdXYZ + 2*7)[1] + 2*(skwGrad)[2]*(gradDdXYZ + 2*7)[2] + 2*(skwGrad)[ 3]*(gradDdXYZ + 2*7)[3] + (skwGrad)[4]*(gradDdXYZ + 2*7)[4] + 2*(skwGrad)[5]*(gradDdXYZ + 2*7)[5] + (skwGrad)[6]*(gradDdXYZ + 2*7)[6] ))) |
| 772 | TEN_T_DOT(skwGrad, gradDdXYZ + 0*7),((pvl->directAnswer[tenGageInvarKGrads] + 2*3)[0] = (( (skwGrad )[1]*(gradDdXYZ + 0*7)[1] + 2*(skwGrad)[2]*(gradDdXYZ + 0*7)[ 2] + 2*(skwGrad)[3]*(gradDdXYZ + 0*7)[3] + (skwGrad)[4]*(gradDdXYZ + 0*7)[4] + 2*(skwGrad)[5]*(gradDdXYZ + 0*7)[5] + (skwGrad)[ 6]*(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageInvarKGrads ] + 2*3)[1] = (( (skwGrad)[1]*(gradDdXYZ + 1*7)[1] + 2*(skwGrad )[2]*(gradDdXYZ + 1*7)[2] + 2*(skwGrad)[3]*(gradDdXYZ + 1*7)[ 3] + (skwGrad)[4]*(gradDdXYZ + 1*7)[4] + 2*(skwGrad)[5]*(gradDdXYZ + 1*7)[5] + (skwGrad)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer [tenGageInvarKGrads] + 2*3)[2] = (( (skwGrad)[1]*(gradDdXYZ + 2*7)[1] + 2*(skwGrad)[2]*(gradDdXYZ + 2*7)[2] + 2*(skwGrad)[ 3]*(gradDdXYZ + 2*7)[3] + (skwGrad)[4]*(gradDdXYZ + 2*7)[4] + 2*(skwGrad)[5]*(gradDdXYZ + 2*7)[5] + (skwGrad)[6]*(gradDdXYZ + 2*7)[6] ))) |
| 773 | TEN_T_DOT(skwGrad, gradDdXYZ + 1*7),((pvl->directAnswer[tenGageInvarKGrads] + 2*3)[0] = (( (skwGrad )[1]*(gradDdXYZ + 0*7)[1] + 2*(skwGrad)[2]*(gradDdXYZ + 0*7)[ 2] + 2*(skwGrad)[3]*(gradDdXYZ + 0*7)[3] + (skwGrad)[4]*(gradDdXYZ + 0*7)[4] + 2*(skwGrad)[5]*(gradDdXYZ + 0*7)[5] + (skwGrad)[ 6]*(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageInvarKGrads ] + 2*3)[1] = (( (skwGrad)[1]*(gradDdXYZ + 1*7)[1] + 2*(skwGrad )[2]*(gradDdXYZ + 1*7)[2] + 2*(skwGrad)[3]*(gradDdXYZ + 1*7)[ 3] + (skwGrad)[4]*(gradDdXYZ + 1*7)[4] + 2*(skwGrad)[5]*(gradDdXYZ + 1*7)[5] + (skwGrad)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer [tenGageInvarKGrads] + 2*3)[2] = (( (skwGrad)[1]*(gradDdXYZ + 2*7)[1] + 2*(skwGrad)[2]*(gradDdXYZ + 2*7)[2] + 2*(skwGrad)[ 3]*(gradDdXYZ + 2*7)[3] + (skwGrad)[4]*(gradDdXYZ + 2*7)[4] + 2*(skwGrad)[5]*(gradDdXYZ + 2*7)[5] + (skwGrad)[6]*(gradDdXYZ + 2*7)[6] ))) |
| 774 | TEN_T_DOT(skwGrad, gradDdXYZ + 2*7))((pvl->directAnswer[tenGageInvarKGrads] + 2*3)[0] = (( (skwGrad )[1]*(gradDdXYZ + 0*7)[1] + 2*(skwGrad)[2]*(gradDdXYZ + 0*7)[ 2] + 2*(skwGrad)[3]*(gradDdXYZ + 0*7)[3] + (skwGrad)[4]*(gradDdXYZ + 0*7)[4] + 2*(skwGrad)[5]*(gradDdXYZ + 0*7)[5] + (skwGrad)[ 6]*(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageInvarKGrads ] + 2*3)[1] = (( (skwGrad)[1]*(gradDdXYZ + 1*7)[1] + 2*(skwGrad )[2]*(gradDdXYZ + 1*7)[2] + 2*(skwGrad)[3]*(gradDdXYZ + 1*7)[ 3] + (skwGrad)[4]*(gradDdXYZ + 1*7)[4] + 2*(skwGrad)[5]*(gradDdXYZ + 1*7)[5] + (skwGrad)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer [tenGageInvarKGrads] + 2*3)[2] = (( (skwGrad)[1]*(gradDdXYZ + 2*7)[1] + 2*(skwGrad)[2]*(gradDdXYZ + 2*7)[2] + 2*(skwGrad)[ 3]*(gradDdXYZ + 2*7)[3] + (skwGrad)[4]*(gradDdXYZ + 2*7)[4] + 2*(skwGrad)[5]*(gradDdXYZ + 2*7)[5] + (skwGrad)[6]*(gradDdXYZ + 2*7)[6] ))); |
| 775 | } |
| 776 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageInvarKGradMags)(pvl->query[tenGageInvarKGradMags/8] & (1 << (tenGageInvarKGradMags % 8)))) { |
| 777 | ELL_3V_SET(pvl->directAnswer[tenGageInvarKGradMags],((pvl->directAnswer[tenGageInvarKGradMags])[0] = ((sqrt((( (pvl->directAnswer[tenGageInvarKGrads] + 0*3))[0]*((pvl-> directAnswer[tenGageInvarKGrads] + 0*3))[0] + ((pvl->directAnswer [tenGageInvarKGrads] + 0*3))[1]*((pvl->directAnswer[tenGageInvarKGrads ] + 0*3))[1] + ((pvl->directAnswer[tenGageInvarKGrads] + 0 *3))[2]*((pvl->directAnswer[tenGageInvarKGrads] + 0*3))[2] )))), (pvl->directAnswer[tenGageInvarKGradMags])[1] = ((sqrt ((((pvl->directAnswer[tenGageInvarKGrads] + 1*3))[0]*((pvl ->directAnswer[tenGageInvarKGrads] + 1*3))[0] + ((pvl-> directAnswer[tenGageInvarKGrads] + 1*3))[1]*((pvl->directAnswer [tenGageInvarKGrads] + 1*3))[1] + ((pvl->directAnswer[tenGageInvarKGrads ] + 1*3))[2]*((pvl->directAnswer[tenGageInvarKGrads] + 1*3 ))[2])))), (pvl->directAnswer[tenGageInvarKGradMags])[2] = ((sqrt((((pvl->directAnswer[tenGageInvarKGrads] + 2*3))[0 ]*((pvl->directAnswer[tenGageInvarKGrads] + 2*3))[0] + ((pvl ->directAnswer[tenGageInvarKGrads] + 2*3))[1]*((pvl->directAnswer [tenGageInvarKGrads] + 2*3))[1] + ((pvl->directAnswer[tenGageInvarKGrads ] + 2*3))[2]*((pvl->directAnswer[tenGageInvarKGrads] + 2*3 ))[2]))))) |
| 778 | ELL_3V_LEN(pvl->directAnswer[tenGageInvarKGrads] + 0*3),((pvl->directAnswer[tenGageInvarKGradMags])[0] = ((sqrt((( (pvl->directAnswer[tenGageInvarKGrads] + 0*3))[0]*((pvl-> directAnswer[tenGageInvarKGrads] + 0*3))[0] + ((pvl->directAnswer [tenGageInvarKGrads] + 0*3))[1]*((pvl->directAnswer[tenGageInvarKGrads ] + 0*3))[1] + ((pvl->directAnswer[tenGageInvarKGrads] + 0 *3))[2]*((pvl->directAnswer[tenGageInvarKGrads] + 0*3))[2] )))), (pvl->directAnswer[tenGageInvarKGradMags])[1] = ((sqrt ((((pvl->directAnswer[tenGageInvarKGrads] + 1*3))[0]*((pvl ->directAnswer[tenGageInvarKGrads] + 1*3))[0] + ((pvl-> directAnswer[tenGageInvarKGrads] + 1*3))[1]*((pvl->directAnswer [tenGageInvarKGrads] + 1*3))[1] + ((pvl->directAnswer[tenGageInvarKGrads ] + 1*3))[2]*((pvl->directAnswer[tenGageInvarKGrads] + 1*3 ))[2])))), (pvl->directAnswer[tenGageInvarKGradMags])[2] = ((sqrt((((pvl->directAnswer[tenGageInvarKGrads] + 2*3))[0 ]*((pvl->directAnswer[tenGageInvarKGrads] + 2*3))[0] + ((pvl ->directAnswer[tenGageInvarKGrads] + 2*3))[1]*((pvl->directAnswer [tenGageInvarKGrads] + 2*3))[1] + ((pvl->directAnswer[tenGageInvarKGrads ] + 2*3))[2]*((pvl->directAnswer[tenGageInvarKGrads] + 2*3 ))[2]))))) |
| 779 | ELL_3V_LEN(pvl->directAnswer[tenGageInvarKGrads] + 1*3),((pvl->directAnswer[tenGageInvarKGradMags])[0] = ((sqrt((( (pvl->directAnswer[tenGageInvarKGrads] + 0*3))[0]*((pvl-> directAnswer[tenGageInvarKGrads] + 0*3))[0] + ((pvl->directAnswer [tenGageInvarKGrads] + 0*3))[1]*((pvl->directAnswer[tenGageInvarKGrads ] + 0*3))[1] + ((pvl->directAnswer[tenGageInvarKGrads] + 0 *3))[2]*((pvl->directAnswer[tenGageInvarKGrads] + 0*3))[2] )))), (pvl->directAnswer[tenGageInvarKGradMags])[1] = ((sqrt ((((pvl->directAnswer[tenGageInvarKGrads] + 1*3))[0]*((pvl ->directAnswer[tenGageInvarKGrads] + 1*3))[0] + ((pvl-> directAnswer[tenGageInvarKGrads] + 1*3))[1]*((pvl->directAnswer [tenGageInvarKGrads] + 1*3))[1] + ((pvl->directAnswer[tenGageInvarKGrads ] + 1*3))[2]*((pvl->directAnswer[tenGageInvarKGrads] + 1*3 ))[2])))), (pvl->directAnswer[tenGageInvarKGradMags])[2] = ((sqrt((((pvl->directAnswer[tenGageInvarKGrads] + 2*3))[0 ]*((pvl->directAnswer[tenGageInvarKGrads] + 2*3))[0] + ((pvl ->directAnswer[tenGageInvarKGrads] + 2*3))[1]*((pvl->directAnswer [tenGageInvarKGrads] + 2*3))[1] + ((pvl->directAnswer[tenGageInvarKGrads ] + 2*3))[2]*((pvl->directAnswer[tenGageInvarKGrads] + 2*3 ))[2]))))) |
| 780 | ELL_3V_LEN(pvl->directAnswer[tenGageInvarKGrads] + 2*3))((pvl->directAnswer[tenGageInvarKGradMags])[0] = ((sqrt((( (pvl->directAnswer[tenGageInvarKGrads] + 0*3))[0]*((pvl-> directAnswer[tenGageInvarKGrads] + 0*3))[0] + ((pvl->directAnswer [tenGageInvarKGrads] + 0*3))[1]*((pvl->directAnswer[tenGageInvarKGrads ] + 0*3))[1] + ((pvl->directAnswer[tenGageInvarKGrads] + 0 *3))[2]*((pvl->directAnswer[tenGageInvarKGrads] + 0*3))[2] )))), (pvl->directAnswer[tenGageInvarKGradMags])[1] = ((sqrt ((((pvl->directAnswer[tenGageInvarKGrads] + 1*3))[0]*((pvl ->directAnswer[tenGageInvarKGrads] + 1*3))[0] + ((pvl-> directAnswer[tenGageInvarKGrads] + 1*3))[1]*((pvl->directAnswer [tenGageInvarKGrads] + 1*3))[1] + ((pvl->directAnswer[tenGageInvarKGrads ] + 1*3))[2]*((pvl->directAnswer[tenGageInvarKGrads] + 1*3 ))[2])))), (pvl->directAnswer[tenGageInvarKGradMags])[2] = ((sqrt((((pvl->directAnswer[tenGageInvarKGrads] + 2*3))[0 ]*((pvl->directAnswer[tenGageInvarKGrads] + 2*3))[0] + ((pvl ->directAnswer[tenGageInvarKGrads] + 2*3))[1]*((pvl->directAnswer [tenGageInvarKGrads] + 2*3))[1] + ((pvl->directAnswer[tenGageInvarKGrads ] + 2*3))[2]*((pvl->directAnswer[tenGageInvarKGrads] + 2*3 ))[2]))))); |
| 781 | } |
| 782 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageInvarRGrads)(pvl->query[tenGageInvarRGrads/8] & (1 << (tenGageInvarRGrads % 8)))) { |
| 783 | double *R1Grad, *R2Grad, *R3Grad; |
| 784 | |
| 785 | R1Grad = pvl->directAnswer[tenGageDelNormR1]; |
| 786 | R2Grad = pvl->directAnswer[tenGageDelNormR2]; |
| 787 | R3Grad = pvl->directAnswer[tenGageDelNormK3]; |
| 788 | |
| 789 | ELL_3V_SET(pvl->directAnswer[tenGageInvarRGrads] + 0*3,((pvl->directAnswer[tenGageInvarRGrads] + 0*3)[0] = (( (R1Grad )[1]*(gradDdXYZ + 0*7)[1] + 2*(R1Grad)[2]*(gradDdXYZ + 0*7)[2 ] + 2*(R1Grad)[3]*(gradDdXYZ + 0*7)[3] + (R1Grad)[4]*(gradDdXYZ + 0*7)[4] + 2*(R1Grad)[5]*(gradDdXYZ + 0*7)[5] + (R1Grad)[6] *(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageInvarRGrads ] + 0*3)[1] = (( (R1Grad)[1]*(gradDdXYZ + 1*7)[1] + 2*(R1Grad )[2]*(gradDdXYZ + 1*7)[2] + 2*(R1Grad)[3]*(gradDdXYZ + 1*7)[3 ] + (R1Grad)[4]*(gradDdXYZ + 1*7)[4] + 2*(R1Grad)[5]*(gradDdXYZ + 1*7)[5] + (R1Grad)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer [tenGageInvarRGrads] + 0*3)[2] = (( (R1Grad)[1]*(gradDdXYZ + 2 *7)[1] + 2*(R1Grad)[2]*(gradDdXYZ + 2*7)[2] + 2*(R1Grad)[3]*( gradDdXYZ + 2*7)[3] + (R1Grad)[4]*(gradDdXYZ + 2*7)[4] + 2*(R1Grad )[5]*(gradDdXYZ + 2*7)[5] + (R1Grad)[6]*(gradDdXYZ + 2*7)[6] ) )) |
| 790 | TEN_T_DOT(R1Grad, gradDdXYZ + 0*7),((pvl->directAnswer[tenGageInvarRGrads] + 0*3)[0] = (( (R1Grad )[1]*(gradDdXYZ + 0*7)[1] + 2*(R1Grad)[2]*(gradDdXYZ + 0*7)[2 ] + 2*(R1Grad)[3]*(gradDdXYZ + 0*7)[3] + (R1Grad)[4]*(gradDdXYZ + 0*7)[4] + 2*(R1Grad)[5]*(gradDdXYZ + 0*7)[5] + (R1Grad)[6] *(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageInvarRGrads ] + 0*3)[1] = (( (R1Grad)[1]*(gradDdXYZ + 1*7)[1] + 2*(R1Grad )[2]*(gradDdXYZ + 1*7)[2] + 2*(R1Grad)[3]*(gradDdXYZ + 1*7)[3 ] + (R1Grad)[4]*(gradDdXYZ + 1*7)[4] + 2*(R1Grad)[5]*(gradDdXYZ + 1*7)[5] + (R1Grad)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer [tenGageInvarRGrads] + 0*3)[2] = (( (R1Grad)[1]*(gradDdXYZ + 2 *7)[1] + 2*(R1Grad)[2]*(gradDdXYZ + 2*7)[2] + 2*(R1Grad)[3]*( gradDdXYZ + 2*7)[3] + (R1Grad)[4]*(gradDdXYZ + 2*7)[4] + 2*(R1Grad )[5]*(gradDdXYZ + 2*7)[5] + (R1Grad)[6]*(gradDdXYZ + 2*7)[6] ) )) |
| 791 | TEN_T_DOT(R1Grad, gradDdXYZ + 1*7),((pvl->directAnswer[tenGageInvarRGrads] + 0*3)[0] = (( (R1Grad )[1]*(gradDdXYZ + 0*7)[1] + 2*(R1Grad)[2]*(gradDdXYZ + 0*7)[2 ] + 2*(R1Grad)[3]*(gradDdXYZ + 0*7)[3] + (R1Grad)[4]*(gradDdXYZ + 0*7)[4] + 2*(R1Grad)[5]*(gradDdXYZ + 0*7)[5] + (R1Grad)[6] *(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageInvarRGrads ] + 0*3)[1] = (( (R1Grad)[1]*(gradDdXYZ + 1*7)[1] + 2*(R1Grad )[2]*(gradDdXYZ + 1*7)[2] + 2*(R1Grad)[3]*(gradDdXYZ + 1*7)[3 ] + (R1Grad)[4]*(gradDdXYZ + 1*7)[4] + 2*(R1Grad)[5]*(gradDdXYZ + 1*7)[5] + (R1Grad)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer [tenGageInvarRGrads] + 0*3)[2] = (( (R1Grad)[1]*(gradDdXYZ + 2 *7)[1] + 2*(R1Grad)[2]*(gradDdXYZ + 2*7)[2] + 2*(R1Grad)[3]*( gradDdXYZ + 2*7)[3] + (R1Grad)[4]*(gradDdXYZ + 2*7)[4] + 2*(R1Grad )[5]*(gradDdXYZ + 2*7)[5] + (R1Grad)[6]*(gradDdXYZ + 2*7)[6] ) )) |
| 792 | TEN_T_DOT(R1Grad, gradDdXYZ + 2*7))((pvl->directAnswer[tenGageInvarRGrads] + 0*3)[0] = (( (R1Grad )[1]*(gradDdXYZ + 0*7)[1] + 2*(R1Grad)[2]*(gradDdXYZ + 0*7)[2 ] + 2*(R1Grad)[3]*(gradDdXYZ + 0*7)[3] + (R1Grad)[4]*(gradDdXYZ + 0*7)[4] + 2*(R1Grad)[5]*(gradDdXYZ + 0*7)[5] + (R1Grad)[6] *(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageInvarRGrads ] + 0*3)[1] = (( (R1Grad)[1]*(gradDdXYZ + 1*7)[1] + 2*(R1Grad )[2]*(gradDdXYZ + 1*7)[2] + 2*(R1Grad)[3]*(gradDdXYZ + 1*7)[3 ] + (R1Grad)[4]*(gradDdXYZ + 1*7)[4] + 2*(R1Grad)[5]*(gradDdXYZ + 1*7)[5] + (R1Grad)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer [tenGageInvarRGrads] + 0*3)[2] = (( (R1Grad)[1]*(gradDdXYZ + 2 *7)[1] + 2*(R1Grad)[2]*(gradDdXYZ + 2*7)[2] + 2*(R1Grad)[3]*( gradDdXYZ + 2*7)[3] + (R1Grad)[4]*(gradDdXYZ + 2*7)[4] + 2*(R1Grad )[5]*(gradDdXYZ + 2*7)[5] + (R1Grad)[6]*(gradDdXYZ + 2*7)[6] ) )); |
| 793 | ELL_3V_SET(pvl->directAnswer[tenGageInvarRGrads] + 1*3,((pvl->directAnswer[tenGageInvarRGrads] + 1*3)[0] = (( (R2Grad )[1]*(gradDdXYZ + 0*7)[1] + 2*(R2Grad)[2]*(gradDdXYZ + 0*7)[2 ] + 2*(R2Grad)[3]*(gradDdXYZ + 0*7)[3] + (R2Grad)[4]*(gradDdXYZ + 0*7)[4] + 2*(R2Grad)[5]*(gradDdXYZ + 0*7)[5] + (R2Grad)[6] *(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageInvarRGrads ] + 1*3)[1] = (( (R2Grad)[1]*(gradDdXYZ + 1*7)[1] + 2*(R2Grad )[2]*(gradDdXYZ + 1*7)[2] + 2*(R2Grad)[3]*(gradDdXYZ + 1*7)[3 ] + (R2Grad)[4]*(gradDdXYZ + 1*7)[4] + 2*(R2Grad)[5]*(gradDdXYZ + 1*7)[5] + (R2Grad)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer [tenGageInvarRGrads] + 1*3)[2] = (( (R2Grad)[1]*(gradDdXYZ + 2 *7)[1] + 2*(R2Grad)[2]*(gradDdXYZ + 2*7)[2] + 2*(R2Grad)[3]*( gradDdXYZ + 2*7)[3] + (R2Grad)[4]*(gradDdXYZ + 2*7)[4] + 2*(R2Grad )[5]*(gradDdXYZ + 2*7)[5] + (R2Grad)[6]*(gradDdXYZ + 2*7)[6] ) )) |
| 794 | TEN_T_DOT(R2Grad, gradDdXYZ + 0*7),((pvl->directAnswer[tenGageInvarRGrads] + 1*3)[0] = (( (R2Grad )[1]*(gradDdXYZ + 0*7)[1] + 2*(R2Grad)[2]*(gradDdXYZ + 0*7)[2 ] + 2*(R2Grad)[3]*(gradDdXYZ + 0*7)[3] + (R2Grad)[4]*(gradDdXYZ + 0*7)[4] + 2*(R2Grad)[5]*(gradDdXYZ + 0*7)[5] + (R2Grad)[6] *(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageInvarRGrads ] + 1*3)[1] = (( (R2Grad)[1]*(gradDdXYZ + 1*7)[1] + 2*(R2Grad )[2]*(gradDdXYZ + 1*7)[2] + 2*(R2Grad)[3]*(gradDdXYZ + 1*7)[3 ] + (R2Grad)[4]*(gradDdXYZ + 1*7)[4] + 2*(R2Grad)[5]*(gradDdXYZ + 1*7)[5] + (R2Grad)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer [tenGageInvarRGrads] + 1*3)[2] = (( (R2Grad)[1]*(gradDdXYZ + 2 *7)[1] + 2*(R2Grad)[2]*(gradDdXYZ + 2*7)[2] + 2*(R2Grad)[3]*( gradDdXYZ + 2*7)[3] + (R2Grad)[4]*(gradDdXYZ + 2*7)[4] + 2*(R2Grad )[5]*(gradDdXYZ + 2*7)[5] + (R2Grad)[6]*(gradDdXYZ + 2*7)[6] ) )) |
| 795 | TEN_T_DOT(R2Grad, gradDdXYZ + 1*7),((pvl->directAnswer[tenGageInvarRGrads] + 1*3)[0] = (( (R2Grad )[1]*(gradDdXYZ + 0*7)[1] + 2*(R2Grad)[2]*(gradDdXYZ + 0*7)[2 ] + 2*(R2Grad)[3]*(gradDdXYZ + 0*7)[3] + (R2Grad)[4]*(gradDdXYZ + 0*7)[4] + 2*(R2Grad)[5]*(gradDdXYZ + 0*7)[5] + (R2Grad)[6] *(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageInvarRGrads ] + 1*3)[1] = (( (R2Grad)[1]*(gradDdXYZ + 1*7)[1] + 2*(R2Grad )[2]*(gradDdXYZ + 1*7)[2] + 2*(R2Grad)[3]*(gradDdXYZ + 1*7)[3 ] + (R2Grad)[4]*(gradDdXYZ + 1*7)[4] + 2*(R2Grad)[5]*(gradDdXYZ + 1*7)[5] + (R2Grad)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer [tenGageInvarRGrads] + 1*3)[2] = (( (R2Grad)[1]*(gradDdXYZ + 2 *7)[1] + 2*(R2Grad)[2]*(gradDdXYZ + 2*7)[2] + 2*(R2Grad)[3]*( gradDdXYZ + 2*7)[3] + (R2Grad)[4]*(gradDdXYZ + 2*7)[4] + 2*(R2Grad )[5]*(gradDdXYZ + 2*7)[5] + (R2Grad)[6]*(gradDdXYZ + 2*7)[6] ) )) |
| 796 | TEN_T_DOT(R2Grad, gradDdXYZ + 2*7))((pvl->directAnswer[tenGageInvarRGrads] + 1*3)[0] = (( (R2Grad )[1]*(gradDdXYZ + 0*7)[1] + 2*(R2Grad)[2]*(gradDdXYZ + 0*7)[2 ] + 2*(R2Grad)[3]*(gradDdXYZ + 0*7)[3] + (R2Grad)[4]*(gradDdXYZ + 0*7)[4] + 2*(R2Grad)[5]*(gradDdXYZ + 0*7)[5] + (R2Grad)[6] *(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageInvarRGrads ] + 1*3)[1] = (( (R2Grad)[1]*(gradDdXYZ + 1*7)[1] + 2*(R2Grad )[2]*(gradDdXYZ + 1*7)[2] + 2*(R2Grad)[3]*(gradDdXYZ + 1*7)[3 ] + (R2Grad)[4]*(gradDdXYZ + 1*7)[4] + 2*(R2Grad)[5]*(gradDdXYZ + 1*7)[5] + (R2Grad)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer [tenGageInvarRGrads] + 1*3)[2] = (( (R2Grad)[1]*(gradDdXYZ + 2 *7)[1] + 2*(R2Grad)[2]*(gradDdXYZ + 2*7)[2] + 2*(R2Grad)[3]*( gradDdXYZ + 2*7)[3] + (R2Grad)[4]*(gradDdXYZ + 2*7)[4] + 2*(R2Grad )[5]*(gradDdXYZ + 2*7)[5] + (R2Grad)[6]*(gradDdXYZ + 2*7)[6] ) )); |
| 797 | ELL_3V_SET(pvl->directAnswer[tenGageInvarRGrads] + 2*3,((pvl->directAnswer[tenGageInvarRGrads] + 2*3)[0] = (( (R3Grad )[1]*(gradDdXYZ + 0*7)[1] + 2*(R3Grad)[2]*(gradDdXYZ + 0*7)[2 ] + 2*(R3Grad)[3]*(gradDdXYZ + 0*7)[3] + (R3Grad)[4]*(gradDdXYZ + 0*7)[4] + 2*(R3Grad)[5]*(gradDdXYZ + 0*7)[5] + (R3Grad)[6] *(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageInvarRGrads ] + 2*3)[1] = (( (R3Grad)[1]*(gradDdXYZ + 1*7)[1] + 2*(R3Grad )[2]*(gradDdXYZ + 1*7)[2] + 2*(R3Grad)[3]*(gradDdXYZ + 1*7)[3 ] + (R3Grad)[4]*(gradDdXYZ + 1*7)[4] + 2*(R3Grad)[5]*(gradDdXYZ + 1*7)[5] + (R3Grad)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer [tenGageInvarRGrads] + 2*3)[2] = (( (R3Grad)[1]*(gradDdXYZ + 2 *7)[1] + 2*(R3Grad)[2]*(gradDdXYZ + 2*7)[2] + 2*(R3Grad)[3]*( gradDdXYZ + 2*7)[3] + (R3Grad)[4]*(gradDdXYZ + 2*7)[4] + 2*(R3Grad )[5]*(gradDdXYZ + 2*7)[5] + (R3Grad)[6]*(gradDdXYZ + 2*7)[6] ) )) |
| 798 | TEN_T_DOT(R3Grad, gradDdXYZ + 0*7),((pvl->directAnswer[tenGageInvarRGrads] + 2*3)[0] = (( (R3Grad )[1]*(gradDdXYZ + 0*7)[1] + 2*(R3Grad)[2]*(gradDdXYZ + 0*7)[2 ] + 2*(R3Grad)[3]*(gradDdXYZ + 0*7)[3] + (R3Grad)[4]*(gradDdXYZ + 0*7)[4] + 2*(R3Grad)[5]*(gradDdXYZ + 0*7)[5] + (R3Grad)[6] *(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageInvarRGrads ] + 2*3)[1] = (( (R3Grad)[1]*(gradDdXYZ + 1*7)[1] + 2*(R3Grad )[2]*(gradDdXYZ + 1*7)[2] + 2*(R3Grad)[3]*(gradDdXYZ + 1*7)[3 ] + (R3Grad)[4]*(gradDdXYZ + 1*7)[4] + 2*(R3Grad)[5]*(gradDdXYZ + 1*7)[5] + (R3Grad)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer [tenGageInvarRGrads] + 2*3)[2] = (( (R3Grad)[1]*(gradDdXYZ + 2 *7)[1] + 2*(R3Grad)[2]*(gradDdXYZ + 2*7)[2] + 2*(R3Grad)[3]*( gradDdXYZ + 2*7)[3] + (R3Grad)[4]*(gradDdXYZ + 2*7)[4] + 2*(R3Grad )[5]*(gradDdXYZ + 2*7)[5] + (R3Grad)[6]*(gradDdXYZ + 2*7)[6] ) )) |
| 799 | TEN_T_DOT(R3Grad, gradDdXYZ + 1*7),((pvl->directAnswer[tenGageInvarRGrads] + 2*3)[0] = (( (R3Grad )[1]*(gradDdXYZ + 0*7)[1] + 2*(R3Grad)[2]*(gradDdXYZ + 0*7)[2 ] + 2*(R3Grad)[3]*(gradDdXYZ + 0*7)[3] + (R3Grad)[4]*(gradDdXYZ + 0*7)[4] + 2*(R3Grad)[5]*(gradDdXYZ + 0*7)[5] + (R3Grad)[6] *(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageInvarRGrads ] + 2*3)[1] = (( (R3Grad)[1]*(gradDdXYZ + 1*7)[1] + 2*(R3Grad )[2]*(gradDdXYZ + 1*7)[2] + 2*(R3Grad)[3]*(gradDdXYZ + 1*7)[3 ] + (R3Grad)[4]*(gradDdXYZ + 1*7)[4] + 2*(R3Grad)[5]*(gradDdXYZ + 1*7)[5] + (R3Grad)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer [tenGageInvarRGrads] + 2*3)[2] = (( (R3Grad)[1]*(gradDdXYZ + 2 *7)[1] + 2*(R3Grad)[2]*(gradDdXYZ + 2*7)[2] + 2*(R3Grad)[3]*( gradDdXYZ + 2*7)[3] + (R3Grad)[4]*(gradDdXYZ + 2*7)[4] + 2*(R3Grad )[5]*(gradDdXYZ + 2*7)[5] + (R3Grad)[6]*(gradDdXYZ + 2*7)[6] ) )) |
| 800 | TEN_T_DOT(R3Grad, gradDdXYZ + 2*7))((pvl->directAnswer[tenGageInvarRGrads] + 2*3)[0] = (( (R3Grad )[1]*(gradDdXYZ + 0*7)[1] + 2*(R3Grad)[2]*(gradDdXYZ + 0*7)[2 ] + 2*(R3Grad)[3]*(gradDdXYZ + 0*7)[3] + (R3Grad)[4]*(gradDdXYZ + 0*7)[4] + 2*(R3Grad)[5]*(gradDdXYZ + 0*7)[5] + (R3Grad)[6] *(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageInvarRGrads ] + 2*3)[1] = (( (R3Grad)[1]*(gradDdXYZ + 1*7)[1] + 2*(R3Grad )[2]*(gradDdXYZ + 1*7)[2] + 2*(R3Grad)[3]*(gradDdXYZ + 1*7)[3 ] + (R3Grad)[4]*(gradDdXYZ + 1*7)[4] + 2*(R3Grad)[5]*(gradDdXYZ + 1*7)[5] + (R3Grad)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer [tenGageInvarRGrads] + 2*3)[2] = (( (R3Grad)[1]*(gradDdXYZ + 2 *7)[1] + 2*(R3Grad)[2]*(gradDdXYZ + 2*7)[2] + 2*(R3Grad)[3]*( gradDdXYZ + 2*7)[3] + (R3Grad)[4]*(gradDdXYZ + 2*7)[4] + 2*(R3Grad )[5]*(gradDdXYZ + 2*7)[5] + (R3Grad)[6]*(gradDdXYZ + 2*7)[6] ) )); |
| 801 | } |
| 802 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageInvarRGradMags)(pvl->query[tenGageInvarRGradMags/8] & (1 << (tenGageInvarRGradMags % 8)))) { |
| 803 | ELL_3V_SET(pvl->directAnswer[tenGageInvarRGradMags],((pvl->directAnswer[tenGageInvarRGradMags])[0] = ((sqrt((( (pvl->directAnswer[tenGageInvarRGrads] + 0*3))[0]*((pvl-> directAnswer[tenGageInvarRGrads] + 0*3))[0] + ((pvl->directAnswer [tenGageInvarRGrads] + 0*3))[1]*((pvl->directAnswer[tenGageInvarRGrads ] + 0*3))[1] + ((pvl->directAnswer[tenGageInvarRGrads] + 0 *3))[2]*((pvl->directAnswer[tenGageInvarRGrads] + 0*3))[2] )))), (pvl->directAnswer[tenGageInvarRGradMags])[1] = ((sqrt ((((pvl->directAnswer[tenGageInvarRGrads] + 1*3))[0]*((pvl ->directAnswer[tenGageInvarRGrads] + 1*3))[0] + ((pvl-> directAnswer[tenGageInvarRGrads] + 1*3))[1]*((pvl->directAnswer [tenGageInvarRGrads] + 1*3))[1] + ((pvl->directAnswer[tenGageInvarRGrads ] + 1*3))[2]*((pvl->directAnswer[tenGageInvarRGrads] + 1*3 ))[2])))), (pvl->directAnswer[tenGageInvarRGradMags])[2] = ((sqrt((((pvl->directAnswer[tenGageInvarRGrads] + 2*3))[0 ]*((pvl->directAnswer[tenGageInvarRGrads] + 2*3))[0] + ((pvl ->directAnswer[tenGageInvarRGrads] + 2*3))[1]*((pvl->directAnswer [tenGageInvarRGrads] + 2*3))[1] + ((pvl->directAnswer[tenGageInvarRGrads ] + 2*3))[2]*((pvl->directAnswer[tenGageInvarRGrads] + 2*3 ))[2]))))) |
| 804 | ELL_3V_LEN(pvl->directAnswer[tenGageInvarRGrads] + 0*3),((pvl->directAnswer[tenGageInvarRGradMags])[0] = ((sqrt((( (pvl->directAnswer[tenGageInvarRGrads] + 0*3))[0]*((pvl-> directAnswer[tenGageInvarRGrads] + 0*3))[0] + ((pvl->directAnswer [tenGageInvarRGrads] + 0*3))[1]*((pvl->directAnswer[tenGageInvarRGrads ] + 0*3))[1] + ((pvl->directAnswer[tenGageInvarRGrads] + 0 *3))[2]*((pvl->directAnswer[tenGageInvarRGrads] + 0*3))[2] )))), (pvl->directAnswer[tenGageInvarRGradMags])[1] = ((sqrt ((((pvl->directAnswer[tenGageInvarRGrads] + 1*3))[0]*((pvl ->directAnswer[tenGageInvarRGrads] + 1*3))[0] + ((pvl-> directAnswer[tenGageInvarRGrads] + 1*3))[1]*((pvl->directAnswer [tenGageInvarRGrads] + 1*3))[1] + ((pvl->directAnswer[tenGageInvarRGrads ] + 1*3))[2]*((pvl->directAnswer[tenGageInvarRGrads] + 1*3 ))[2])))), (pvl->directAnswer[tenGageInvarRGradMags])[2] = ((sqrt((((pvl->directAnswer[tenGageInvarRGrads] + 2*3))[0 ]*((pvl->directAnswer[tenGageInvarRGrads] + 2*3))[0] + ((pvl ->directAnswer[tenGageInvarRGrads] + 2*3))[1]*((pvl->directAnswer [tenGageInvarRGrads] + 2*3))[1] + ((pvl->directAnswer[tenGageInvarRGrads ] + 2*3))[2]*((pvl->directAnswer[tenGageInvarRGrads] + 2*3 ))[2]))))) |
| 805 | ELL_3V_LEN(pvl->directAnswer[tenGageInvarRGrads] + 1*3),((pvl->directAnswer[tenGageInvarRGradMags])[0] = ((sqrt((( (pvl->directAnswer[tenGageInvarRGrads] + 0*3))[0]*((pvl-> directAnswer[tenGageInvarRGrads] + 0*3))[0] + ((pvl->directAnswer [tenGageInvarRGrads] + 0*3))[1]*((pvl->directAnswer[tenGageInvarRGrads ] + 0*3))[1] + ((pvl->directAnswer[tenGageInvarRGrads] + 0 *3))[2]*((pvl->directAnswer[tenGageInvarRGrads] + 0*3))[2] )))), (pvl->directAnswer[tenGageInvarRGradMags])[1] = ((sqrt ((((pvl->directAnswer[tenGageInvarRGrads] + 1*3))[0]*((pvl ->directAnswer[tenGageInvarRGrads] + 1*3))[0] + ((pvl-> directAnswer[tenGageInvarRGrads] + 1*3))[1]*((pvl->directAnswer [tenGageInvarRGrads] + 1*3))[1] + ((pvl->directAnswer[tenGageInvarRGrads ] + 1*3))[2]*((pvl->directAnswer[tenGageInvarRGrads] + 1*3 ))[2])))), (pvl->directAnswer[tenGageInvarRGradMags])[2] = ((sqrt((((pvl->directAnswer[tenGageInvarRGrads] + 2*3))[0 ]*((pvl->directAnswer[tenGageInvarRGrads] + 2*3))[0] + ((pvl ->directAnswer[tenGageInvarRGrads] + 2*3))[1]*((pvl->directAnswer [tenGageInvarRGrads] + 2*3))[1] + ((pvl->directAnswer[tenGageInvarRGrads ] + 2*3))[2]*((pvl->directAnswer[tenGageInvarRGrads] + 2*3 ))[2]))))) |
| 806 | ELL_3V_LEN(pvl->directAnswer[tenGageInvarRGrads] + 2*3))((pvl->directAnswer[tenGageInvarRGradMags])[0] = ((sqrt((( (pvl->directAnswer[tenGageInvarRGrads] + 0*3))[0]*((pvl-> directAnswer[tenGageInvarRGrads] + 0*3))[0] + ((pvl->directAnswer [tenGageInvarRGrads] + 0*3))[1]*((pvl->directAnswer[tenGageInvarRGrads ] + 0*3))[1] + ((pvl->directAnswer[tenGageInvarRGrads] + 0 *3))[2]*((pvl->directAnswer[tenGageInvarRGrads] + 0*3))[2] )))), (pvl->directAnswer[tenGageInvarRGradMags])[1] = ((sqrt ((((pvl->directAnswer[tenGageInvarRGrads] + 1*3))[0]*((pvl ->directAnswer[tenGageInvarRGrads] + 1*3))[0] + ((pvl-> directAnswer[tenGageInvarRGrads] + 1*3))[1]*((pvl->directAnswer [tenGageInvarRGrads] + 1*3))[1] + ((pvl->directAnswer[tenGageInvarRGrads ] + 1*3))[2]*((pvl->directAnswer[tenGageInvarRGrads] + 1*3 ))[2])))), (pvl->directAnswer[tenGageInvarRGradMags])[2] = ((sqrt((((pvl->directAnswer[tenGageInvarRGrads] + 2*3))[0 ]*((pvl->directAnswer[tenGageInvarRGrads] + 2*3))[0] + ((pvl ->directAnswer[tenGageInvarRGrads] + 2*3))[1]*((pvl->directAnswer [tenGageInvarRGrads] + 2*3))[1] + ((pvl->directAnswer[tenGageInvarRGrads ] + 2*3))[2]*((pvl->directAnswer[tenGageInvarRGrads] + 2*3 ))[2]))))); |
| 807 | } |
| 808 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageEvalGrads)(pvl->query[tenGageEvalGrads/8] & (1 << (tenGageEvalGrads % 8)))) { |
| 809 | double matOut[9], tenOut[9], tmpRes[9], |
| 810 | rel1, rel2, w1, w2, eps; |
| 811 | unsigned int evi; |
| 812 | for (evi=0; evi<=2; evi++) { |
| 813 | ELL_3MV_OUTER(matOut, evecAns + evi*3, evecAns + evi*3)((((matOut)+0)[0] = ((evecAns + evi*3)[0])*((evecAns + evi*3) )[0], ((matOut)+0)[1] = ((evecAns + evi*3)[0])*((evecAns + evi *3))[1], ((matOut)+0)[2] = ((evecAns + evi*3)[0])*((evecAns + evi*3))[2]), (((matOut)+3)[0] = ((evecAns + evi*3)[1])*((evecAns + evi*3))[0], ((matOut)+3)[1] = ((evecAns + evi*3)[1])*((evecAns + evi*3))[1], ((matOut)+3)[2] = ((evecAns + evi*3)[1])*((evecAns + evi*3))[2]), (((matOut)+6)[0] = ((evecAns + evi*3)[2])*((evecAns + evi*3))[0], ((matOut)+6)[1] = ((evecAns + evi*3)[2])*((evecAns + evi*3))[1], ((matOut)+6)[2] = ((evecAns + evi*3)[2])*((evecAns + evi*3))[2])); |
| 814 | TEN_M2T(tenOut, matOut)( (tenOut)[1] = (matOut)[0], (tenOut)[2] = ((matOut)[1]+(matOut )[3])/2.0, (tenOut)[3] = ((matOut)[2]+(matOut)[6])/2.0, (tenOut )[4] = (matOut)[4], (tenOut)[5] = ((matOut)[5]+(matOut)[7])/2.0 , (tenOut)[6] = (matOut)[8] ); |
| 815 | ELL_3V_SET(tmpRes + evi*3,((tmpRes + evi*3)[0] = (( (tenOut)[1]*(gradDdXYZ + 0*7)[1] + 2 *(tenOut)[2]*(gradDdXYZ + 0*7)[2] + 2*(tenOut)[3]*(gradDdXYZ + 0*7)[3] + (tenOut)[4]*(gradDdXYZ + 0*7)[4] + 2*(tenOut)[5]*( gradDdXYZ + 0*7)[5] + (tenOut)[6]*(gradDdXYZ + 0*7)[6] )), (tmpRes + evi*3)[1] = (( (tenOut)[1]*(gradDdXYZ + 1*7)[1] + 2*(tenOut )[2]*(gradDdXYZ + 1*7)[2] + 2*(tenOut)[3]*(gradDdXYZ + 1*7)[3 ] + (tenOut)[4]*(gradDdXYZ + 1*7)[4] + 2*(tenOut)[5]*(gradDdXYZ + 1*7)[5] + (tenOut)[6]*(gradDdXYZ + 1*7)[6] )), (tmpRes + evi *3)[2] = (( (tenOut)[1]*(gradDdXYZ + 2*7)[1] + 2*(tenOut)[2]* (gradDdXYZ + 2*7)[2] + 2*(tenOut)[3]*(gradDdXYZ + 2*7)[3] + ( tenOut)[4]*(gradDdXYZ + 2*7)[4] + 2*(tenOut)[5]*(gradDdXYZ + 2 *7)[5] + (tenOut)[6]*(gradDdXYZ + 2*7)[6] ))) |
| 816 | TEN_T_DOT(tenOut, gradDdXYZ + 0*7),((tmpRes + evi*3)[0] = (( (tenOut)[1]*(gradDdXYZ + 0*7)[1] + 2 *(tenOut)[2]*(gradDdXYZ + 0*7)[2] + 2*(tenOut)[3]*(gradDdXYZ + 0*7)[3] + (tenOut)[4]*(gradDdXYZ + 0*7)[4] + 2*(tenOut)[5]*( gradDdXYZ + 0*7)[5] + (tenOut)[6]*(gradDdXYZ + 0*7)[6] )), (tmpRes + evi*3)[1] = (( (tenOut)[1]*(gradDdXYZ + 1*7)[1] + 2*(tenOut )[2]*(gradDdXYZ + 1*7)[2] + 2*(tenOut)[3]*(gradDdXYZ + 1*7)[3 ] + (tenOut)[4]*(gradDdXYZ + 1*7)[4] + 2*(tenOut)[5]*(gradDdXYZ + 1*7)[5] + (tenOut)[6]*(gradDdXYZ + 1*7)[6] )), (tmpRes + evi *3)[2] = (( (tenOut)[1]*(gradDdXYZ + 2*7)[1] + 2*(tenOut)[2]* (gradDdXYZ + 2*7)[2] + 2*(tenOut)[3]*(gradDdXYZ + 2*7)[3] + ( tenOut)[4]*(gradDdXYZ + 2*7)[4] + 2*(tenOut)[5]*(gradDdXYZ + 2 *7)[5] + (tenOut)[6]*(gradDdXYZ + 2*7)[6] ))) |
| 817 | TEN_T_DOT(tenOut, gradDdXYZ + 1*7),((tmpRes + evi*3)[0] = (( (tenOut)[1]*(gradDdXYZ + 0*7)[1] + 2 *(tenOut)[2]*(gradDdXYZ + 0*7)[2] + 2*(tenOut)[3]*(gradDdXYZ + 0*7)[3] + (tenOut)[4]*(gradDdXYZ + 0*7)[4] + 2*(tenOut)[5]*( gradDdXYZ + 0*7)[5] + (tenOut)[6]*(gradDdXYZ + 0*7)[6] )), (tmpRes + evi*3)[1] = (( (tenOut)[1]*(gradDdXYZ + 1*7)[1] + 2*(tenOut )[2]*(gradDdXYZ + 1*7)[2] + 2*(tenOut)[3]*(gradDdXYZ + 1*7)[3 ] + (tenOut)[4]*(gradDdXYZ + 1*7)[4] + 2*(tenOut)[5]*(gradDdXYZ + 1*7)[5] + (tenOut)[6]*(gradDdXYZ + 1*7)[6] )), (tmpRes + evi *3)[2] = (( (tenOut)[1]*(gradDdXYZ + 2*7)[1] + 2*(tenOut)[2]* (gradDdXYZ + 2*7)[2] + 2*(tenOut)[3]*(gradDdXYZ + 2*7)[3] + ( tenOut)[4]*(gradDdXYZ + 2*7)[4] + 2*(tenOut)[5]*(gradDdXYZ + 2 *7)[5] + (tenOut)[6]*(gradDdXYZ + 2*7)[6] ))) |
| 818 | TEN_T_DOT(tenOut, gradDdXYZ + 2*7))((tmpRes + evi*3)[0] = (( (tenOut)[1]*(gradDdXYZ + 0*7)[1] + 2 *(tenOut)[2]*(gradDdXYZ + 0*7)[2] + 2*(tenOut)[3]*(gradDdXYZ + 0*7)[3] + (tenOut)[4]*(gradDdXYZ + 0*7)[4] + 2*(tenOut)[5]*( gradDdXYZ + 0*7)[5] + (tenOut)[6]*(gradDdXYZ + 0*7)[6] )), (tmpRes + evi*3)[1] = (( (tenOut)[1]*(gradDdXYZ + 1*7)[1] + 2*(tenOut )[2]*(gradDdXYZ + 1*7)[2] + 2*(tenOut)[3]*(gradDdXYZ + 1*7)[3 ] + (tenOut)[4]*(gradDdXYZ + 1*7)[4] + 2*(tenOut)[5]*(gradDdXYZ + 1*7)[5] + (tenOut)[6]*(gradDdXYZ + 1*7)[6] )), (tmpRes + evi *3)[2] = (( (tenOut)[1]*(gradDdXYZ + 2*7)[1] + 2*(tenOut)[2]* (gradDdXYZ + 2*7)[2] + 2*(tenOut)[3]*(gradDdXYZ + 2*7)[3] + ( tenOut)[4]*(gradDdXYZ + 2*7)[4] + 2*(tenOut)[5]*(gradDdXYZ + 2 *7)[5] + (tenOut)[6]*(gradDdXYZ + 2*7)[6] ))); |
| 819 | } |
| 820 | |
| 821 | /* Added 2008-06-27: In case there are duplicate eigenvalues, |
| 822 | * average their derivatives to avoid visible artifacs in edge |
| 823 | * maps. Provide a smooth transition to the ill-defined case */ |
| 824 | eps=0.05; /* threshold at which we start the transition */ |
| 825 | |
| 826 | /* interpolation weights from relative eigenvalue distance */ |
| 827 | rel1=(evalAns[0]-evalAns[1])/(fabs(evalAns[0])+fabs(evalAns[1])); |
| 828 | rel2=(evalAns[1]-evalAns[2])/(fabs(evalAns[1])+fabs(evalAns[2])); |
| 829 | w1=rel1/eps-1; |
| 830 | w1*=w1; |
| 831 | w2=rel2/eps-1; |
| 832 | w2*=w2; |
| 833 | |
| 834 | if (rel1>eps) { |
| 835 | ELL_3V_COPY(pvl->directAnswer[tenGageEvalGrads], tmpRes)((pvl->directAnswer[tenGageEvalGrads])[0] = (tmpRes)[0], ( pvl->directAnswer[tenGageEvalGrads])[1] = (tmpRes)[1], (pvl ->directAnswer[tenGageEvalGrads])[2] = (tmpRes)[2]); |
| 836 | } else { |
| 837 | if (rel2>eps) { |
| 838 | ELL_3V_SCALE_ADD2(pvl->directAnswer[tenGageEvalGrads],((pvl->directAnswer[tenGageEvalGrads])[0] = (1-0.5*w1)*(tmpRes )[0] + (0.5*w1)*(tmpRes+3)[0], (pvl->directAnswer[tenGageEvalGrads ])[1] = (1-0.5*w1)*(tmpRes)[1] + (0.5*w1)*(tmpRes+3)[1], (pvl ->directAnswer[tenGageEvalGrads])[2] = (1-0.5*w1)*(tmpRes) [2] + (0.5*w1)*(tmpRes+3)[2]) |
| 839 | 1-0.5*w1, tmpRes, 0.5*w1, tmpRes+3)((pvl->directAnswer[tenGageEvalGrads])[0] = (1-0.5*w1)*(tmpRes )[0] + (0.5*w1)*(tmpRes+3)[0], (pvl->directAnswer[tenGageEvalGrads ])[1] = (1-0.5*w1)*(tmpRes)[1] + (0.5*w1)*(tmpRes+3)[1], (pvl ->directAnswer[tenGageEvalGrads])[2] = (1-0.5*w1)*(tmpRes) [2] + (0.5*w1)*(tmpRes+3)[2]); |
| 840 | } else { |
| 841 | ELL_3V_SCALE_ADD3(pvl->directAnswer[tenGageEvalGrads],((pvl->directAnswer[tenGageEvalGrads])[0] = (1-0.5*w1-w1*w2 /6.0)*(tmpRes)[0] + (0.5*w1-w1*w2/6.0)*(tmpRes+3)[0] + (w1*w2 /3.0)*(tmpRes+6)[0], (pvl->directAnswer[tenGageEvalGrads]) [1] = (1-0.5*w1-w1*w2/6.0)*(tmpRes)[1] + (0.5*w1-w1*w2/6.0)*( tmpRes+3)[1] + (w1*w2/3.0)*(tmpRes+6)[1], (pvl->directAnswer [tenGageEvalGrads])[2] = (1-0.5*w1-w1*w2/6.0)*(tmpRes)[2] + ( 0.5*w1-w1*w2/6.0)*(tmpRes+3)[2] + (w1*w2/3.0)*(tmpRes+6)[2]) |
| 842 | 1-0.5*w1-w1*w2/6.0, tmpRes,((pvl->directAnswer[tenGageEvalGrads])[0] = (1-0.5*w1-w1*w2 /6.0)*(tmpRes)[0] + (0.5*w1-w1*w2/6.0)*(tmpRes+3)[0] + (w1*w2 /3.0)*(tmpRes+6)[0], (pvl->directAnswer[tenGageEvalGrads]) [1] = (1-0.5*w1-w1*w2/6.0)*(tmpRes)[1] + (0.5*w1-w1*w2/6.0)*( tmpRes+3)[1] + (w1*w2/3.0)*(tmpRes+6)[1], (pvl->directAnswer [tenGageEvalGrads])[2] = (1-0.5*w1-w1*w2/6.0)*(tmpRes)[2] + ( 0.5*w1-w1*w2/6.0)*(tmpRes+3)[2] + (w1*w2/3.0)*(tmpRes+6)[2]) |
| 843 | 0.5*w1-w1*w2/6.0, tmpRes+3,((pvl->directAnswer[tenGageEvalGrads])[0] = (1-0.5*w1-w1*w2 /6.0)*(tmpRes)[0] + (0.5*w1-w1*w2/6.0)*(tmpRes+3)[0] + (w1*w2 /3.0)*(tmpRes+6)[0], (pvl->directAnswer[tenGageEvalGrads]) [1] = (1-0.5*w1-w1*w2/6.0)*(tmpRes)[1] + (0.5*w1-w1*w2/6.0)*( tmpRes+3)[1] + (w1*w2/3.0)*(tmpRes+6)[1], (pvl->directAnswer [tenGageEvalGrads])[2] = (1-0.5*w1-w1*w2/6.0)*(tmpRes)[2] + ( 0.5*w1-w1*w2/6.0)*(tmpRes+3)[2] + (w1*w2/3.0)*(tmpRes+6)[2]) |
| 844 | w1*w2/3.0, tmpRes+6)((pvl->directAnswer[tenGageEvalGrads])[0] = (1-0.5*w1-w1*w2 /6.0)*(tmpRes)[0] + (0.5*w1-w1*w2/6.0)*(tmpRes+3)[0] + (w1*w2 /3.0)*(tmpRes+6)[0], (pvl->directAnswer[tenGageEvalGrads]) [1] = (1-0.5*w1-w1*w2/6.0)*(tmpRes)[1] + (0.5*w1-w1*w2/6.0)*( tmpRes+3)[1] + (w1*w2/3.0)*(tmpRes+6)[1], (pvl->directAnswer [tenGageEvalGrads])[2] = (1-0.5*w1-w1*w2/6.0)*(tmpRes)[2] + ( 0.5*w1-w1*w2/6.0)*(tmpRes+3)[2] + (w1*w2/3.0)*(tmpRes+6)[2]); |
| 845 | } |
| 846 | } |
| 847 | |
| 848 | if (rel2>eps) { |
| 849 | ELL_3V_COPY(pvl->directAnswer[tenGageEvalGrads]+6, tmpRes+6)((pvl->directAnswer[tenGageEvalGrads]+6)[0] = (tmpRes+6)[0 ], (pvl->directAnswer[tenGageEvalGrads]+6)[1] = (tmpRes+6) [1], (pvl->directAnswer[tenGageEvalGrads]+6)[2] = (tmpRes+ 6)[2]); |
| 850 | } else { |
| 851 | if (rel1>eps) { |
| 852 | ELL_3V_SCALE_ADD2(pvl->directAnswer[tenGageEvalGrads]+6,((pvl->directAnswer[tenGageEvalGrads]+6)[0] = (1-0.5*w2)*( tmpRes+6)[0] + (0.5*w2)*(tmpRes+3)[0], (pvl->directAnswer[ tenGageEvalGrads]+6)[1] = (1-0.5*w2)*(tmpRes+6)[1] + (0.5*w2) *(tmpRes+3)[1], (pvl->directAnswer[tenGageEvalGrads]+6)[2] = (1-0.5*w2)*(tmpRes+6)[2] + (0.5*w2)*(tmpRes+3)[2]) |
| 853 | 1-0.5*w2, tmpRes+6, 0.5*w2, tmpRes+3)((pvl->directAnswer[tenGageEvalGrads]+6)[0] = (1-0.5*w2)*( tmpRes+6)[0] + (0.5*w2)*(tmpRes+3)[0], (pvl->directAnswer[ tenGageEvalGrads]+6)[1] = (1-0.5*w2)*(tmpRes+6)[1] + (0.5*w2) *(tmpRes+3)[1], (pvl->directAnswer[tenGageEvalGrads]+6)[2] = (1-0.5*w2)*(tmpRes+6)[2] + (0.5*w2)*(tmpRes+3)[2]); |
| 854 | } else { |
| 855 | ELL_3V_SCALE_ADD3(pvl->directAnswer[tenGageEvalGrads]+6,((pvl->directAnswer[tenGageEvalGrads]+6)[0] = (1-0.5*w2-w1 *w2/6.0)*(tmpRes+6)[0] + (0.5*w2-w1*w2/6.0)*(tmpRes+3)[0] + ( w1*w2/3.0)*(tmpRes)[0], (pvl->directAnswer[tenGageEvalGrads ]+6)[1] = (1-0.5*w2-w1*w2/6.0)*(tmpRes+6)[1] + (0.5*w2-w1*w2/ 6.0)*(tmpRes+3)[1] + (w1*w2/3.0)*(tmpRes)[1], (pvl->directAnswer [tenGageEvalGrads]+6)[2] = (1-0.5*w2-w1*w2/6.0)*(tmpRes+6)[2] + (0.5*w2-w1*w2/6.0)*(tmpRes+3)[2] + (w1*w2/3.0)*(tmpRes)[2] ) |
| 856 | 1-0.5*w2-w1*w2/6.0, tmpRes+6,((pvl->directAnswer[tenGageEvalGrads]+6)[0] = (1-0.5*w2-w1 *w2/6.0)*(tmpRes+6)[0] + (0.5*w2-w1*w2/6.0)*(tmpRes+3)[0] + ( w1*w2/3.0)*(tmpRes)[0], (pvl->directAnswer[tenGageEvalGrads ]+6)[1] = (1-0.5*w2-w1*w2/6.0)*(tmpRes+6)[1] + (0.5*w2-w1*w2/ 6.0)*(tmpRes+3)[1] + (w1*w2/3.0)*(tmpRes)[1], (pvl->directAnswer [tenGageEvalGrads]+6)[2] = (1-0.5*w2-w1*w2/6.0)*(tmpRes+6)[2] + (0.5*w2-w1*w2/6.0)*(tmpRes+3)[2] + (w1*w2/3.0)*(tmpRes)[2] ) |
| 857 | 0.5*w2-w1*w2/6.0, tmpRes+3,((pvl->directAnswer[tenGageEvalGrads]+6)[0] = (1-0.5*w2-w1 *w2/6.0)*(tmpRes+6)[0] + (0.5*w2-w1*w2/6.0)*(tmpRes+3)[0] + ( w1*w2/3.0)*(tmpRes)[0], (pvl->directAnswer[tenGageEvalGrads ]+6)[1] = (1-0.5*w2-w1*w2/6.0)*(tmpRes+6)[1] + (0.5*w2-w1*w2/ 6.0)*(tmpRes+3)[1] + (w1*w2/3.0)*(tmpRes)[1], (pvl->directAnswer [tenGageEvalGrads]+6)[2] = (1-0.5*w2-w1*w2/6.0)*(tmpRes+6)[2] + (0.5*w2-w1*w2/6.0)*(tmpRes+3)[2] + (w1*w2/3.0)*(tmpRes)[2] ) |
| 858 | w1*w2/3.0, tmpRes)((pvl->directAnswer[tenGageEvalGrads]+6)[0] = (1-0.5*w2-w1 *w2/6.0)*(tmpRes+6)[0] + (0.5*w2-w1*w2/6.0)*(tmpRes+3)[0] + ( w1*w2/3.0)*(tmpRes)[0], (pvl->directAnswer[tenGageEvalGrads ]+6)[1] = (1-0.5*w2-w1*w2/6.0)*(tmpRes+6)[1] + (0.5*w2-w1*w2/ 6.0)*(tmpRes+3)[1] + (w1*w2/3.0)*(tmpRes)[1], (pvl->directAnswer [tenGageEvalGrads]+6)[2] = (1-0.5*w2-w1*w2/6.0)*(tmpRes+6)[2] + (0.5*w2-w1*w2/6.0)*(tmpRes+3)[2] + (w1*w2/3.0)*(tmpRes)[2] ); |
| 859 | } |
| 860 | } |
| 861 | |
| 862 | ELL_3V_ADD3(pvl->directAnswer[tenGageEvalGrads]+3,((pvl->directAnswer[tenGageEvalGrads]+3)[0] = (tmpRes)[0] + (tmpRes+3)[0] + (tmpRes+6)[0], (pvl->directAnswer[tenGageEvalGrads ]+3)[1] = (tmpRes)[1] + (tmpRes+3)[1] + (tmpRes+6)[1], (pvl-> directAnswer[tenGageEvalGrads]+3)[2] = (tmpRes)[2] + (tmpRes+ 3)[2] + (tmpRes+6)[2]) |
| 863 | tmpRes, tmpRes+3, tmpRes+6)((pvl->directAnswer[tenGageEvalGrads]+3)[0] = (tmpRes)[0] + (tmpRes+3)[0] + (tmpRes+6)[0], (pvl->directAnswer[tenGageEvalGrads ]+3)[1] = (tmpRes)[1] + (tmpRes+3)[1] + (tmpRes+6)[1], (pvl-> directAnswer[tenGageEvalGrads]+3)[2] = (tmpRes)[2] + (tmpRes+ 3)[2] + (tmpRes+6)[2]); |
| 864 | ELL_3V_ADD2(tmpRes, pvl->directAnswer[tenGageEvalGrads],((tmpRes)[0] = (pvl->directAnswer[tenGageEvalGrads])[0] + ( pvl->directAnswer[tenGageEvalGrads]+6)[0], (tmpRes)[1] = ( pvl->directAnswer[tenGageEvalGrads])[1] + (pvl->directAnswer [tenGageEvalGrads]+6)[1], (tmpRes)[2] = (pvl->directAnswer [tenGageEvalGrads])[2] + (pvl->directAnswer[tenGageEvalGrads ]+6)[2]) |
| 865 | pvl->directAnswer[tenGageEvalGrads]+6)((tmpRes)[0] = (pvl->directAnswer[tenGageEvalGrads])[0] + ( pvl->directAnswer[tenGageEvalGrads]+6)[0], (tmpRes)[1] = ( pvl->directAnswer[tenGageEvalGrads])[1] + (pvl->directAnswer [tenGageEvalGrads]+6)[1], (tmpRes)[2] = (pvl->directAnswer [tenGageEvalGrads])[2] + (pvl->directAnswer[tenGageEvalGrads ]+6)[2]); |
| 866 | ELL_3V_SUB(pvl->directAnswer[tenGageEvalGrads]+3,((pvl->directAnswer[tenGageEvalGrads]+3)[0] = (pvl->directAnswer [tenGageEvalGrads]+3)[0] - (tmpRes)[0], (pvl->directAnswer [tenGageEvalGrads]+3)[1] = (pvl->directAnswer[tenGageEvalGrads ]+3)[1] - (tmpRes)[1], (pvl->directAnswer[tenGageEvalGrads ]+3)[2] = (pvl->directAnswer[tenGageEvalGrads]+3)[2] - (tmpRes )[2]) |
| 867 | pvl->directAnswer[tenGageEvalGrads]+3,((pvl->directAnswer[tenGageEvalGrads]+3)[0] = (pvl->directAnswer [tenGageEvalGrads]+3)[0] - (tmpRes)[0], (pvl->directAnswer [tenGageEvalGrads]+3)[1] = (pvl->directAnswer[tenGageEvalGrads ]+3)[1] - (tmpRes)[1], (pvl->directAnswer[tenGageEvalGrads ]+3)[2] = (pvl->directAnswer[tenGageEvalGrads]+3)[2] - (tmpRes )[2]) |
| 868 | tmpRes)((pvl->directAnswer[tenGageEvalGrads]+3)[0] = (pvl->directAnswer [tenGageEvalGrads]+3)[0] - (tmpRes)[0], (pvl->directAnswer [tenGageEvalGrads]+3)[1] = (pvl->directAnswer[tenGageEvalGrads ]+3)[1] - (tmpRes)[1], (pvl->directAnswer[tenGageEvalGrads ]+3)[2] = (pvl->directAnswer[tenGageEvalGrads]+3)[2] - (tmpRes )[2]); /* l2 = trace - l1 - l3 */ |
| 869 | } |
| 870 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageRotTans)(pvl->query[tenGageRotTans/8] & (1 << (tenGageRotTans % 8)))) { |
| 871 | double phi1[7], phi2[7], phi3[7]; |
| 872 | |
| 873 | tenRotationTangents_d(phi1, phi2, phi3, evecAns); |
| 874 | ELL_3V_SET(pvl->directAnswer[tenGageRotTans] + 0*3,((pvl->directAnswer[tenGageRotTans] + 0*3)[0] = (( (phi1)[ 1]*(gradDdXYZ + 0*7)[1] + 2*(phi1)[2]*(gradDdXYZ + 0*7)[2] + 2 *(phi1)[3]*(gradDdXYZ + 0*7)[3] + (phi1)[4]*(gradDdXYZ + 0*7) [4] + 2*(phi1)[5]*(gradDdXYZ + 0*7)[5] + (phi1)[6]*(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageRotTans] + 0*3)[1 ] = (( (phi1)[1]*(gradDdXYZ + 1*7)[1] + 2*(phi1)[2]*(gradDdXYZ + 1*7)[2] + 2*(phi1)[3]*(gradDdXYZ + 1*7)[3] + (phi1)[4]*(gradDdXYZ + 1*7)[4] + 2*(phi1)[5]*(gradDdXYZ + 1*7)[5] + (phi1)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer[tenGageRotTans] + 0*3)[2 ] = (( (phi1)[1]*(gradDdXYZ + 2*7)[1] + 2*(phi1)[2]*(gradDdXYZ + 2*7)[2] + 2*(phi1)[3]*(gradDdXYZ + 2*7)[3] + (phi1)[4]*(gradDdXYZ + 2*7)[4] + 2*(phi1)[5]*(gradDdXYZ + 2*7)[5] + (phi1)[6]*(gradDdXYZ + 2*7)[6] ))) |
| 875 | TEN_T_DOT(phi1, gradDdXYZ + 0*7),((pvl->directAnswer[tenGageRotTans] + 0*3)[0] = (( (phi1)[ 1]*(gradDdXYZ + 0*7)[1] + 2*(phi1)[2]*(gradDdXYZ + 0*7)[2] + 2 *(phi1)[3]*(gradDdXYZ + 0*7)[3] + (phi1)[4]*(gradDdXYZ + 0*7) [4] + 2*(phi1)[5]*(gradDdXYZ + 0*7)[5] + (phi1)[6]*(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageRotTans] + 0*3)[1 ] = (( (phi1)[1]*(gradDdXYZ + 1*7)[1] + 2*(phi1)[2]*(gradDdXYZ + 1*7)[2] + 2*(phi1)[3]*(gradDdXYZ + 1*7)[3] + (phi1)[4]*(gradDdXYZ + 1*7)[4] + 2*(phi1)[5]*(gradDdXYZ + 1*7)[5] + (phi1)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer[tenGageRotTans] + 0*3)[2 ] = (( (phi1)[1]*(gradDdXYZ + 2*7)[1] + 2*(phi1)[2]*(gradDdXYZ + 2*7)[2] + 2*(phi1)[3]*(gradDdXYZ + 2*7)[3] + (phi1)[4]*(gradDdXYZ + 2*7)[4] + 2*(phi1)[5]*(gradDdXYZ + 2*7)[5] + (phi1)[6]*(gradDdXYZ + 2*7)[6] ))) |
| 876 | TEN_T_DOT(phi1, gradDdXYZ + 1*7),((pvl->directAnswer[tenGageRotTans] + 0*3)[0] = (( (phi1)[ 1]*(gradDdXYZ + 0*7)[1] + 2*(phi1)[2]*(gradDdXYZ + 0*7)[2] + 2 *(phi1)[3]*(gradDdXYZ + 0*7)[3] + (phi1)[4]*(gradDdXYZ + 0*7) [4] + 2*(phi1)[5]*(gradDdXYZ + 0*7)[5] + (phi1)[6]*(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageRotTans] + 0*3)[1 ] = (( (phi1)[1]*(gradDdXYZ + 1*7)[1] + 2*(phi1)[2]*(gradDdXYZ + 1*7)[2] + 2*(phi1)[3]*(gradDdXYZ + 1*7)[3] + (phi1)[4]*(gradDdXYZ + 1*7)[4] + 2*(phi1)[5]*(gradDdXYZ + 1*7)[5] + (phi1)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer[tenGageRotTans] + 0*3)[2 ] = (( (phi1)[1]*(gradDdXYZ + 2*7)[1] + 2*(phi1)[2]*(gradDdXYZ + 2*7)[2] + 2*(phi1)[3]*(gradDdXYZ + 2*7)[3] + (phi1)[4]*(gradDdXYZ + 2*7)[4] + 2*(phi1)[5]*(gradDdXYZ + 2*7)[5] + (phi1)[6]*(gradDdXYZ + 2*7)[6] ))) |
| 877 | TEN_T_DOT(phi1, gradDdXYZ + 2*7))((pvl->directAnswer[tenGageRotTans] + 0*3)[0] = (( (phi1)[ 1]*(gradDdXYZ + 0*7)[1] + 2*(phi1)[2]*(gradDdXYZ + 0*7)[2] + 2 *(phi1)[3]*(gradDdXYZ + 0*7)[3] + (phi1)[4]*(gradDdXYZ + 0*7) [4] + 2*(phi1)[5]*(gradDdXYZ + 0*7)[5] + (phi1)[6]*(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageRotTans] + 0*3)[1 ] = (( (phi1)[1]*(gradDdXYZ + 1*7)[1] + 2*(phi1)[2]*(gradDdXYZ + 1*7)[2] + 2*(phi1)[3]*(gradDdXYZ + 1*7)[3] + (phi1)[4]*(gradDdXYZ + 1*7)[4] + 2*(phi1)[5]*(gradDdXYZ + 1*7)[5] + (phi1)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer[tenGageRotTans] + 0*3)[2 ] = (( (phi1)[1]*(gradDdXYZ + 2*7)[1] + 2*(phi1)[2]*(gradDdXYZ + 2*7)[2] + 2*(phi1)[3]*(gradDdXYZ + 2*7)[3] + (phi1)[4]*(gradDdXYZ + 2*7)[4] + 2*(phi1)[5]*(gradDdXYZ + 2*7)[5] + (phi1)[6]*(gradDdXYZ + 2*7)[6] ))); |
| 878 | ELL_3V_SET(pvl->directAnswer[tenGageRotTans] + 1*3,((pvl->directAnswer[tenGageRotTans] + 1*3)[0] = (( (phi2)[ 1]*(gradDdXYZ + 0*7)[1] + 2*(phi2)[2]*(gradDdXYZ + 0*7)[2] + 2 *(phi2)[3]*(gradDdXYZ + 0*7)[3] + (phi2)[4]*(gradDdXYZ + 0*7) [4] + 2*(phi2)[5]*(gradDdXYZ + 0*7)[5] + (phi2)[6]*(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageRotTans] + 1*3)[1 ] = (( (phi2)[1]*(gradDdXYZ + 1*7)[1] + 2*(phi2)[2]*(gradDdXYZ + 1*7)[2] + 2*(phi2)[3]*(gradDdXYZ + 1*7)[3] + (phi2)[4]*(gradDdXYZ + 1*7)[4] + 2*(phi2)[5]*(gradDdXYZ + 1*7)[5] + (phi2)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer[tenGageRotTans] + 1*3)[2 ] = (( (phi2)[1]*(gradDdXYZ + 2*7)[1] + 2*(phi2)[2]*(gradDdXYZ + 2*7)[2] + 2*(phi2)[3]*(gradDdXYZ + 2*7)[3] + (phi2)[4]*(gradDdXYZ + 2*7)[4] + 2*(phi2)[5]*(gradDdXYZ + 2*7)[5] + (phi2)[6]*(gradDdXYZ + 2*7)[6] ))) |
| 879 | TEN_T_DOT(phi2, gradDdXYZ + 0*7),((pvl->directAnswer[tenGageRotTans] + 1*3)[0] = (( (phi2)[ 1]*(gradDdXYZ + 0*7)[1] + 2*(phi2)[2]*(gradDdXYZ + 0*7)[2] + 2 *(phi2)[3]*(gradDdXYZ + 0*7)[3] + (phi2)[4]*(gradDdXYZ + 0*7) [4] + 2*(phi2)[5]*(gradDdXYZ + 0*7)[5] + (phi2)[6]*(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageRotTans] + 1*3)[1 ] = (( (phi2)[1]*(gradDdXYZ + 1*7)[1] + 2*(phi2)[2]*(gradDdXYZ + 1*7)[2] + 2*(phi2)[3]*(gradDdXYZ + 1*7)[3] + (phi2)[4]*(gradDdXYZ + 1*7)[4] + 2*(phi2)[5]*(gradDdXYZ + 1*7)[5] + (phi2)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer[tenGageRotTans] + 1*3)[2 ] = (( (phi2)[1]*(gradDdXYZ + 2*7)[1] + 2*(phi2)[2]*(gradDdXYZ + 2*7)[2] + 2*(phi2)[3]*(gradDdXYZ + 2*7)[3] + (phi2)[4]*(gradDdXYZ + 2*7)[4] + 2*(phi2)[5]*(gradDdXYZ + 2*7)[5] + (phi2)[6]*(gradDdXYZ + 2*7)[6] ))) |
| 880 | TEN_T_DOT(phi2, gradDdXYZ + 1*7),((pvl->directAnswer[tenGageRotTans] + 1*3)[0] = (( (phi2)[ 1]*(gradDdXYZ + 0*7)[1] + 2*(phi2)[2]*(gradDdXYZ + 0*7)[2] + 2 *(phi2)[3]*(gradDdXYZ + 0*7)[3] + (phi2)[4]*(gradDdXYZ + 0*7) [4] + 2*(phi2)[5]*(gradDdXYZ + 0*7)[5] + (phi2)[6]*(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageRotTans] + 1*3)[1 ] = (( (phi2)[1]*(gradDdXYZ + 1*7)[1] + 2*(phi2)[2]*(gradDdXYZ + 1*7)[2] + 2*(phi2)[3]*(gradDdXYZ + 1*7)[3] + (phi2)[4]*(gradDdXYZ + 1*7)[4] + 2*(phi2)[5]*(gradDdXYZ + 1*7)[5] + (phi2)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer[tenGageRotTans] + 1*3)[2 ] = (( (phi2)[1]*(gradDdXYZ + 2*7)[1] + 2*(phi2)[2]*(gradDdXYZ + 2*7)[2] + 2*(phi2)[3]*(gradDdXYZ + 2*7)[3] + (phi2)[4]*(gradDdXYZ + 2*7)[4] + 2*(phi2)[5]*(gradDdXYZ + 2*7)[5] + (phi2)[6]*(gradDdXYZ + 2*7)[6] ))) |
| 881 | TEN_T_DOT(phi2, gradDdXYZ + 2*7))((pvl->directAnswer[tenGageRotTans] + 1*3)[0] = (( (phi2)[ 1]*(gradDdXYZ + 0*7)[1] + 2*(phi2)[2]*(gradDdXYZ + 0*7)[2] + 2 *(phi2)[3]*(gradDdXYZ + 0*7)[3] + (phi2)[4]*(gradDdXYZ + 0*7) [4] + 2*(phi2)[5]*(gradDdXYZ + 0*7)[5] + (phi2)[6]*(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageRotTans] + 1*3)[1 ] = (( (phi2)[1]*(gradDdXYZ + 1*7)[1] + 2*(phi2)[2]*(gradDdXYZ + 1*7)[2] + 2*(phi2)[3]*(gradDdXYZ + 1*7)[3] + (phi2)[4]*(gradDdXYZ + 1*7)[4] + 2*(phi2)[5]*(gradDdXYZ + 1*7)[5] + (phi2)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer[tenGageRotTans] + 1*3)[2 ] = (( (phi2)[1]*(gradDdXYZ + 2*7)[1] + 2*(phi2)[2]*(gradDdXYZ + 2*7)[2] + 2*(phi2)[3]*(gradDdXYZ + 2*7)[3] + (phi2)[4]*(gradDdXYZ + 2*7)[4] + 2*(phi2)[5]*(gradDdXYZ + 2*7)[5] + (phi2)[6]*(gradDdXYZ + 2*7)[6] ))); |
| 882 | ELL_3V_SET(pvl->directAnswer[tenGageRotTans] + 2*3,((pvl->directAnswer[tenGageRotTans] + 2*3)[0] = (( (phi3)[ 1]*(gradDdXYZ + 0*7)[1] + 2*(phi3)[2]*(gradDdXYZ + 0*7)[2] + 2 *(phi3)[3]*(gradDdXYZ + 0*7)[3] + (phi3)[4]*(gradDdXYZ + 0*7) [4] + 2*(phi3)[5]*(gradDdXYZ + 0*7)[5] + (phi3)[6]*(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageRotTans] + 2*3)[1 ] = (( (phi3)[1]*(gradDdXYZ + 1*7)[1] + 2*(phi3)[2]*(gradDdXYZ + 1*7)[2] + 2*(phi3)[3]*(gradDdXYZ + 1*7)[3] + (phi3)[4]*(gradDdXYZ + 1*7)[4] + 2*(phi3)[5]*(gradDdXYZ + 1*7)[5] + (phi3)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer[tenGageRotTans] + 2*3)[2 ] = (( (phi3)[1]*(gradDdXYZ + 2*7)[1] + 2*(phi3)[2]*(gradDdXYZ + 2*7)[2] + 2*(phi3)[3]*(gradDdXYZ + 2*7)[3] + (phi3)[4]*(gradDdXYZ + 2*7)[4] + 2*(phi3)[5]*(gradDdXYZ + 2*7)[5] + (phi3)[6]*(gradDdXYZ + 2*7)[6] ))) |
| 883 | TEN_T_DOT(phi3, gradDdXYZ + 0*7),((pvl->directAnswer[tenGageRotTans] + 2*3)[0] = (( (phi3)[ 1]*(gradDdXYZ + 0*7)[1] + 2*(phi3)[2]*(gradDdXYZ + 0*7)[2] + 2 *(phi3)[3]*(gradDdXYZ + 0*7)[3] + (phi3)[4]*(gradDdXYZ + 0*7) [4] + 2*(phi3)[5]*(gradDdXYZ + 0*7)[5] + (phi3)[6]*(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageRotTans] + 2*3)[1 ] = (( (phi3)[1]*(gradDdXYZ + 1*7)[1] + 2*(phi3)[2]*(gradDdXYZ + 1*7)[2] + 2*(phi3)[3]*(gradDdXYZ + 1*7)[3] + (phi3)[4]*(gradDdXYZ + 1*7)[4] + 2*(phi3)[5]*(gradDdXYZ + 1*7)[5] + (phi3)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer[tenGageRotTans] + 2*3)[2 ] = (( (phi3)[1]*(gradDdXYZ + 2*7)[1] + 2*(phi3)[2]*(gradDdXYZ + 2*7)[2] + 2*(phi3)[3]*(gradDdXYZ + 2*7)[3] + (phi3)[4]*(gradDdXYZ + 2*7)[4] + 2*(phi3)[5]*(gradDdXYZ + 2*7)[5] + (phi3)[6]*(gradDdXYZ + 2*7)[6] ))) |
| 884 | TEN_T_DOT(phi3, gradDdXYZ + 1*7),((pvl->directAnswer[tenGageRotTans] + 2*3)[0] = (( (phi3)[ 1]*(gradDdXYZ + 0*7)[1] + 2*(phi3)[2]*(gradDdXYZ + 0*7)[2] + 2 *(phi3)[3]*(gradDdXYZ + 0*7)[3] + (phi3)[4]*(gradDdXYZ + 0*7) [4] + 2*(phi3)[5]*(gradDdXYZ + 0*7)[5] + (phi3)[6]*(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageRotTans] + 2*3)[1 ] = (( (phi3)[1]*(gradDdXYZ + 1*7)[1] + 2*(phi3)[2]*(gradDdXYZ + 1*7)[2] + 2*(phi3)[3]*(gradDdXYZ + 1*7)[3] + (phi3)[4]*(gradDdXYZ + 1*7)[4] + 2*(phi3)[5]*(gradDdXYZ + 1*7)[5] + (phi3)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer[tenGageRotTans] + 2*3)[2 ] = (( (phi3)[1]*(gradDdXYZ + 2*7)[1] + 2*(phi3)[2]*(gradDdXYZ + 2*7)[2] + 2*(phi3)[3]*(gradDdXYZ + 2*7)[3] + (phi3)[4]*(gradDdXYZ + 2*7)[4] + 2*(phi3)[5]*(gradDdXYZ + 2*7)[5] + (phi3)[6]*(gradDdXYZ + 2*7)[6] ))) |
| 885 | TEN_T_DOT(phi3, gradDdXYZ + 2*7))((pvl->directAnswer[tenGageRotTans] + 2*3)[0] = (( (phi3)[ 1]*(gradDdXYZ + 0*7)[1] + 2*(phi3)[2]*(gradDdXYZ + 0*7)[2] + 2 *(phi3)[3]*(gradDdXYZ + 0*7)[3] + (phi3)[4]*(gradDdXYZ + 0*7) [4] + 2*(phi3)[5]*(gradDdXYZ + 0*7)[5] + (phi3)[6]*(gradDdXYZ + 0*7)[6] )), (pvl->directAnswer[tenGageRotTans] + 2*3)[1 ] = (( (phi3)[1]*(gradDdXYZ + 1*7)[1] + 2*(phi3)[2]*(gradDdXYZ + 1*7)[2] + 2*(phi3)[3]*(gradDdXYZ + 1*7)[3] + (phi3)[4]*(gradDdXYZ + 1*7)[4] + 2*(phi3)[5]*(gradDdXYZ + 1*7)[5] + (phi3)[6]*(gradDdXYZ + 1*7)[6] )), (pvl->directAnswer[tenGageRotTans] + 2*3)[2 ] = (( (phi3)[1]*(gradDdXYZ + 2*7)[1] + 2*(phi3)[2]*(gradDdXYZ + 2*7)[2] + 2*(phi3)[3]*(gradDdXYZ + 2*7)[3] + (phi3)[4]*(gradDdXYZ + 2*7)[4] + 2*(phi3)[5]*(gradDdXYZ + 2*7)[5] + (phi3)[6]*(gradDdXYZ + 2*7)[6] ))); |
| 886 | } |
| 887 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageRotTanMags)(pvl->query[tenGageRotTanMags/8] & (1 << (tenGageRotTanMags % 8)))) { |
| 888 | ELL_3V_SET(pvl->directAnswer[tenGageRotTanMags],((pvl->directAnswer[tenGageRotTanMags])[0] = ((sqrt((((pvl ->directAnswer[tenGageRotTans] + 0*3))[0]*((pvl->directAnswer [tenGageRotTans] + 0*3))[0] + ((pvl->directAnswer[tenGageRotTans ] + 0*3))[1]*((pvl->directAnswer[tenGageRotTans] + 0*3))[1 ] + ((pvl->directAnswer[tenGageRotTans] + 0*3))[2]*((pvl-> directAnswer[tenGageRotTans] + 0*3))[2])))), (pvl->directAnswer [tenGageRotTanMags])[1] = ((sqrt((((pvl->directAnswer[tenGageRotTans ] + 1*3))[0]*((pvl->directAnswer[tenGageRotTans] + 1*3))[0 ] + ((pvl->directAnswer[tenGageRotTans] + 1*3))[1]*((pvl-> directAnswer[tenGageRotTans] + 1*3))[1] + ((pvl->directAnswer [tenGageRotTans] + 1*3))[2]*((pvl->directAnswer[tenGageRotTans ] + 1*3))[2])))), (pvl->directAnswer[tenGageRotTanMags])[2 ] = ((sqrt((((pvl->directAnswer[tenGageRotTans] + 2*3))[0] *((pvl->directAnswer[tenGageRotTans] + 2*3))[0] + ((pvl-> directAnswer[tenGageRotTans] + 2*3))[1]*((pvl->directAnswer [tenGageRotTans] + 2*3))[1] + ((pvl->directAnswer[tenGageRotTans ] + 2*3))[2]*((pvl->directAnswer[tenGageRotTans] + 2*3))[2 ]))))) |
| 889 | ELL_3V_LEN(pvl->directAnswer[tenGageRotTans] + 0*3),((pvl->directAnswer[tenGageRotTanMags])[0] = ((sqrt((((pvl ->directAnswer[tenGageRotTans] + 0*3))[0]*((pvl->directAnswer [tenGageRotTans] + 0*3))[0] + ((pvl->directAnswer[tenGageRotTans ] + 0*3))[1]*((pvl->directAnswer[tenGageRotTans] + 0*3))[1 ] + ((pvl->directAnswer[tenGageRotTans] + 0*3))[2]*((pvl-> directAnswer[tenGageRotTans] + 0*3))[2])))), (pvl->directAnswer [tenGageRotTanMags])[1] = ((sqrt((((pvl->directAnswer[tenGageRotTans ] + 1*3))[0]*((pvl->directAnswer[tenGageRotTans] + 1*3))[0 ] + ((pvl->directAnswer[tenGageRotTans] + 1*3))[1]*((pvl-> directAnswer[tenGageRotTans] + 1*3))[1] + ((pvl->directAnswer [tenGageRotTans] + 1*3))[2]*((pvl->directAnswer[tenGageRotTans ] + 1*3))[2])))), (pvl->directAnswer[tenGageRotTanMags])[2 ] = ((sqrt((((pvl->directAnswer[tenGageRotTans] + 2*3))[0] *((pvl->directAnswer[tenGageRotTans] + 2*3))[0] + ((pvl-> directAnswer[tenGageRotTans] + 2*3))[1]*((pvl->directAnswer [tenGageRotTans] + 2*3))[1] + ((pvl->directAnswer[tenGageRotTans ] + 2*3))[2]*((pvl->directAnswer[tenGageRotTans] + 2*3))[2 ]))))) |
| 890 | ELL_3V_LEN(pvl->directAnswer[tenGageRotTans] + 1*3),((pvl->directAnswer[tenGageRotTanMags])[0] = ((sqrt((((pvl ->directAnswer[tenGageRotTans] + 0*3))[0]*((pvl->directAnswer [tenGageRotTans] + 0*3))[0] + ((pvl->directAnswer[tenGageRotTans ] + 0*3))[1]*((pvl->directAnswer[tenGageRotTans] + 0*3))[1 ] + ((pvl->directAnswer[tenGageRotTans] + 0*3))[2]*((pvl-> directAnswer[tenGageRotTans] + 0*3))[2])))), (pvl->directAnswer [tenGageRotTanMags])[1] = ((sqrt((((pvl->directAnswer[tenGageRotTans ] + 1*3))[0]*((pvl->directAnswer[tenGageRotTans] + 1*3))[0 ] + ((pvl->directAnswer[tenGageRotTans] + 1*3))[1]*((pvl-> directAnswer[tenGageRotTans] + 1*3))[1] + ((pvl->directAnswer [tenGageRotTans] + 1*3))[2]*((pvl->directAnswer[tenGageRotTans ] + 1*3))[2])))), (pvl->directAnswer[tenGageRotTanMags])[2 ] = ((sqrt((((pvl->directAnswer[tenGageRotTans] + 2*3))[0] *((pvl->directAnswer[tenGageRotTans] + 2*3))[0] + ((pvl-> directAnswer[tenGageRotTans] + 2*3))[1]*((pvl->directAnswer [tenGageRotTans] + 2*3))[1] + ((pvl->directAnswer[tenGageRotTans ] + 2*3))[2]*((pvl->directAnswer[tenGageRotTans] + 2*3))[2 ]))))) |
| 891 | ELL_3V_LEN(pvl->directAnswer[tenGageRotTans] + 2*3))((pvl->directAnswer[tenGageRotTanMags])[0] = ((sqrt((((pvl ->directAnswer[tenGageRotTans] + 0*3))[0]*((pvl->directAnswer [tenGageRotTans] + 0*3))[0] + ((pvl->directAnswer[tenGageRotTans ] + 0*3))[1]*((pvl->directAnswer[tenGageRotTans] + 0*3))[1 ] + ((pvl->directAnswer[tenGageRotTans] + 0*3))[2]*((pvl-> directAnswer[tenGageRotTans] + 0*3))[2])))), (pvl->directAnswer [tenGageRotTanMags])[1] = ((sqrt((((pvl->directAnswer[tenGageRotTans ] + 1*3))[0]*((pvl->directAnswer[tenGageRotTans] + 1*3))[0 ] + ((pvl->directAnswer[tenGageRotTans] + 1*3))[1]*((pvl-> directAnswer[tenGageRotTans] + 1*3))[1] + ((pvl->directAnswer [tenGageRotTans] + 1*3))[2]*((pvl->directAnswer[tenGageRotTans ] + 1*3))[2])))), (pvl->directAnswer[tenGageRotTanMags])[2 ] = ((sqrt((((pvl->directAnswer[tenGageRotTans] + 2*3))[0] *((pvl->directAnswer[tenGageRotTans] + 2*3))[0] + ((pvl-> directAnswer[tenGageRotTans] + 2*3))[1]*((pvl->directAnswer [tenGageRotTans] + 2*3))[1] + ((pvl->directAnswer[tenGageRotTans ] + 2*3))[2]*((pvl->directAnswer[tenGageRotTans] + 2*3))[2 ]))))); |
| 892 | } |
| 893 | /* --- C{l,p,a,lpmin}1 --- */ |
| 894 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageCl1)(pvl->query[tenGageCl1/8] & (1 << (tenGageCl1 % 8 )))) { |
| 895 | tmp0 = tenAnisoEval_d(evalAns, tenAniso_Cl1); |
| 896 | pvl->directAnswer[tenGageCl1][0] = AIR_CLAMP(0, tmp0, 1)((tmp0) < (0) ? (0) : ((tmp0) > (1) ? (1) : (tmp0))); |
| 897 | } |
| 898 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageCp1)(pvl->query[tenGageCp1/8] & (1 << (tenGageCp1 % 8 )))) { |
| 899 | tmp0 = tenAnisoEval_d(evalAns, tenAniso_Cp1); |
| 900 | pvl->directAnswer[tenGageCp1][0] = AIR_CLAMP(0, tmp0, 1)((tmp0) < (0) ? (0) : ((tmp0) > (1) ? (1) : (tmp0))); |
| 901 | } |
| 902 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageCa1)(pvl->query[tenGageCa1/8] & (1 << (tenGageCa1 % 8 )))) { |
| 903 | tmp0 = tenAnisoEval_d(evalAns, tenAniso_Ca1); |
| 904 | pvl->directAnswer[tenGageCa1][0] = AIR_CLAMP(0, tmp0, 1)((tmp0) < (0) ? (0) : ((tmp0) > (1) ? (1) : (tmp0))); |
| 905 | } |
| 906 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageClpmin1)(pvl->query[tenGageClpmin1/8] & (1 << (tenGageClpmin1 % 8)))) { |
| 907 | tmp0 = tenAnisoEval_d(evalAns, tenAniso_Clpmin1); |
| 908 | pvl->directAnswer[tenGageClpmin1][0] = AIR_CLAMP(0, tmp0, 1)((tmp0) < (0) ? (0) : ((tmp0) > (1) ? (1) : (tmp0))); |
| 909 | } |
| 910 | /* --- C{l,p,a,lpmin}2 --- */ |
| 911 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageCl2)(pvl->query[tenGageCl2/8] & (1 << (tenGageCl2 % 8 )))) { |
| 912 | tmp0 = tenAnisoEval_d(evalAns, tenAniso_Cl2); |
| 913 | pvl->directAnswer[tenGageCl2][0] = AIR_CLAMP(0, tmp0, 1)((tmp0) < (0) ? (0) : ((tmp0) > (1) ? (1) : (tmp0))); |
| 914 | } |
| 915 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageCp2)(pvl->query[tenGageCp2/8] & (1 << (tenGageCp2 % 8 )))) { |
| 916 | tmp0 = tenAnisoEval_d(evalAns, tenAniso_Cp2); |
| 917 | pvl->directAnswer[tenGageCp2][0] = AIR_CLAMP(0, tmp0, 1)((tmp0) < (0) ? (0) : ((tmp0) > (1) ? (1) : (tmp0))); |
| 918 | } |
| 919 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageCa2)(pvl->query[tenGageCa2/8] & (1 << (tenGageCa2 % 8 )))) { |
| 920 | tmp0 = tenAnisoEval_d(evalAns, tenAniso_Ca2); |
| 921 | pvl->directAnswer[tenGageCa2][0] = AIR_CLAMP(0, tmp0, 1)((tmp0) < (0) ? (0) : ((tmp0) > (1) ? (1) : (tmp0))); |
| 922 | } |
| 923 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageClpmin2)(pvl->query[tenGageClpmin2/8] & (1 << (tenGageClpmin2 % 8)))) { |
| 924 | tmp0 = tenAnisoEval_d(evalAns, tenAniso_Clpmin2); |
| 925 | pvl->directAnswer[tenGageClpmin2][0] = AIR_CLAMP(0, tmp0, 1)((tmp0) < (0) ? (0) : ((tmp0) > (1) ? (1) : (tmp0))); |
| 926 | } |
| 927 | /* --- Hessian madness (the derivative, not the soldier) --- */ |
| 928 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageHessian)(pvl->query[tenGageHessian/8] & (1 << (tenGageHessian % 8)))) { |
| 929 | /* done if doD2; still have to set up pointers */ |
| 930 | matTmp = pvl->directAnswer[tenGageHessian]; |
| 931 | hessDtA = matTmp + 1*9; |
| 932 | hessDtB = matTmp + 2*9; |
| 933 | hessDtC = matTmp + 3*9; |
| 934 | hessDtD = matTmp + 4*9; |
| 935 | hessDtE = matTmp + 5*9; |
| 936 | hessDtF = matTmp + 6*9; |
| 937 | } |
| 938 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTraceHessian)(pvl->query[tenGageTraceHessian/8] & (1 << (tenGageTraceHessian % 8)))) { |
| 939 | ELL_3M_SCALE_ADD3(pvl->directAnswer[tenGageTraceHessian],((((pvl->directAnswer[tenGageTraceHessian])+0)[0] = ((1.0) )*((hessDtA)+0)[0] + ((1.0))*((hessDtD)+0)[0] + ((1.0))*((hessDtF )+0)[0], ((pvl->directAnswer[tenGageTraceHessian])+0)[1] = ((1.0))*((hessDtA)+0)[1] + ((1.0))*((hessDtD)+0)[1] + ((1.0) )*((hessDtF)+0)[1], ((pvl->directAnswer[tenGageTraceHessian ])+0)[2] = ((1.0))*((hessDtA)+0)[2] + ((1.0))*((hessDtD)+0)[2 ] + ((1.0))*((hessDtF)+0)[2]), (((pvl->directAnswer[tenGageTraceHessian ])+3)[0] = ((1.0))*((hessDtA)+3)[0] + ((1.0))*((hessDtD)+3)[0 ] + ((1.0))*((hessDtF)+3)[0], ((pvl->directAnswer[tenGageTraceHessian ])+3)[1] = ((1.0))*((hessDtA)+3)[1] + ((1.0))*((hessDtD)+3)[1 ] + ((1.0))*((hessDtF)+3)[1], ((pvl->directAnswer[tenGageTraceHessian ])+3)[2] = ((1.0))*((hessDtA)+3)[2] + ((1.0))*((hessDtD)+3)[2 ] + ((1.0))*((hessDtF)+3)[2]), (((pvl->directAnswer[tenGageTraceHessian ])+6)[0] = ((1.0))*((hessDtA)+6)[0] + ((1.0))*((hessDtD)+6)[0 ] + ((1.0))*((hessDtF)+6)[0], ((pvl->directAnswer[tenGageTraceHessian ])+6)[1] = ((1.0))*((hessDtA)+6)[1] + ((1.0))*((hessDtD)+6)[1 ] + ((1.0))*((hessDtF)+6)[1], ((pvl->directAnswer[tenGageTraceHessian ])+6)[2] = ((1.0))*((hessDtA)+6)[2] + ((1.0))*((hessDtD)+6)[2 ] + ((1.0))*((hessDtF)+6)[2])) |
| 940 | 1.0, hessDtA,((((pvl->directAnswer[tenGageTraceHessian])+0)[0] = ((1.0) )*((hessDtA)+0)[0] + ((1.0))*((hessDtD)+0)[0] + ((1.0))*((hessDtF )+0)[0], ((pvl->directAnswer[tenGageTraceHessian])+0)[1] = ((1.0))*((hessDtA)+0)[1] + ((1.0))*((hessDtD)+0)[1] + ((1.0) )*((hessDtF)+0)[1], ((pvl->directAnswer[tenGageTraceHessian ])+0)[2] = ((1.0))*((hessDtA)+0)[2] + ((1.0))*((hessDtD)+0)[2 ] + ((1.0))*((hessDtF)+0)[2]), (((pvl->directAnswer[tenGageTraceHessian ])+3)[0] = ((1.0))*((hessDtA)+3)[0] + ((1.0))*((hessDtD)+3)[0 ] + ((1.0))*((hessDtF)+3)[0], ((pvl->directAnswer[tenGageTraceHessian ])+3)[1] = ((1.0))*((hessDtA)+3)[1] + ((1.0))*((hessDtD)+3)[1 ] + ((1.0))*((hessDtF)+3)[1], ((pvl->directAnswer[tenGageTraceHessian ])+3)[2] = ((1.0))*((hessDtA)+3)[2] + ((1.0))*((hessDtD)+3)[2 ] + ((1.0))*((hessDtF)+3)[2]), (((pvl->directAnswer[tenGageTraceHessian ])+6)[0] = ((1.0))*((hessDtA)+6)[0] + ((1.0))*((hessDtD)+6)[0 ] + ((1.0))*((hessDtF)+6)[0], ((pvl->directAnswer[tenGageTraceHessian ])+6)[1] = ((1.0))*((hessDtA)+6)[1] + ((1.0))*((hessDtD)+6)[1 ] + ((1.0))*((hessDtF)+6)[1], ((pvl->directAnswer[tenGageTraceHessian ])+6)[2] = ((1.0))*((hessDtA)+6)[2] + ((1.0))*((hessDtD)+6)[2 ] + ((1.0))*((hessDtF)+6)[2])) |
| 941 | 1.0, hessDtD,((((pvl->directAnswer[tenGageTraceHessian])+0)[0] = ((1.0) )*((hessDtA)+0)[0] + ((1.0))*((hessDtD)+0)[0] + ((1.0))*((hessDtF )+0)[0], ((pvl->directAnswer[tenGageTraceHessian])+0)[1] = ((1.0))*((hessDtA)+0)[1] + ((1.0))*((hessDtD)+0)[1] + ((1.0) )*((hessDtF)+0)[1], ((pvl->directAnswer[tenGageTraceHessian ])+0)[2] = ((1.0))*((hessDtA)+0)[2] + ((1.0))*((hessDtD)+0)[2 ] + ((1.0))*((hessDtF)+0)[2]), (((pvl->directAnswer[tenGageTraceHessian ])+3)[0] = ((1.0))*((hessDtA)+3)[0] + ((1.0))*((hessDtD)+3)[0 ] + ((1.0))*((hessDtF)+3)[0], ((pvl->directAnswer[tenGageTraceHessian ])+3)[1] = ((1.0))*((hessDtA)+3)[1] + ((1.0))*((hessDtD)+3)[1 ] + ((1.0))*((hessDtF)+3)[1], ((pvl->directAnswer[tenGageTraceHessian ])+3)[2] = ((1.0))*((hessDtA)+3)[2] + ((1.0))*((hessDtD)+3)[2 ] + ((1.0))*((hessDtF)+3)[2]), (((pvl->directAnswer[tenGageTraceHessian ])+6)[0] = ((1.0))*((hessDtA)+6)[0] + ((1.0))*((hessDtD)+6)[0 ] + ((1.0))*((hessDtF)+6)[0], ((pvl->directAnswer[tenGageTraceHessian ])+6)[1] = ((1.0))*((hessDtA)+6)[1] + ((1.0))*((hessDtD)+6)[1 ] + ((1.0))*((hessDtF)+6)[1], ((pvl->directAnswer[tenGageTraceHessian ])+6)[2] = ((1.0))*((hessDtA)+6)[2] + ((1.0))*((hessDtD)+6)[2 ] + ((1.0))*((hessDtF)+6)[2])) |
| 942 | 1.0, hessDtF)((((pvl->directAnswer[tenGageTraceHessian])+0)[0] = ((1.0) )*((hessDtA)+0)[0] + ((1.0))*((hessDtD)+0)[0] + ((1.0))*((hessDtF )+0)[0], ((pvl->directAnswer[tenGageTraceHessian])+0)[1] = ((1.0))*((hessDtA)+0)[1] + ((1.0))*((hessDtD)+0)[1] + ((1.0) )*((hessDtF)+0)[1], ((pvl->directAnswer[tenGageTraceHessian ])+0)[2] = ((1.0))*((hessDtA)+0)[2] + ((1.0))*((hessDtD)+0)[2 ] + ((1.0))*((hessDtF)+0)[2]), (((pvl->directAnswer[tenGageTraceHessian ])+3)[0] = ((1.0))*((hessDtA)+3)[0] + ((1.0))*((hessDtD)+3)[0 ] + ((1.0))*((hessDtF)+3)[0], ((pvl->directAnswer[tenGageTraceHessian ])+3)[1] = ((1.0))*((hessDtA)+3)[1] + ((1.0))*((hessDtD)+3)[1 ] + ((1.0))*((hessDtF)+3)[1], ((pvl->directAnswer[tenGageTraceHessian ])+3)[2] = ((1.0))*((hessDtA)+3)[2] + ((1.0))*((hessDtD)+3)[2 ] + ((1.0))*((hessDtF)+3)[2]), (((pvl->directAnswer[tenGageTraceHessian ])+6)[0] = ((1.0))*((hessDtA)+6)[0] + ((1.0))*((hessDtD)+6)[0 ] + ((1.0))*((hessDtF)+6)[0], ((pvl->directAnswer[tenGageTraceHessian ])+6)[1] = ((1.0))*((hessDtA)+6)[1] + ((1.0))*((hessDtD)+6)[1 ] + ((1.0))*((hessDtF)+6)[1], ((pvl->directAnswer[tenGageTraceHessian ])+6)[2] = ((1.0))*((hessDtA)+6)[2] + ((1.0))*((hessDtD)+6)[2 ] + ((1.0))*((hessDtF)+6)[2])); |
| 943 | ELL_3M_SCALE(hessCbA, -1, pvl->directAnswer[tenGageTraceHessian])((((hessCbA)+0)[0] = ((-1))*((pvl->directAnswer[tenGageTraceHessian ])+0)[0], ((hessCbA)+0)[1] = ((-1))*((pvl->directAnswer[tenGageTraceHessian ])+0)[1], ((hessCbA)+0)[2] = ((-1))*((pvl->directAnswer[tenGageTraceHessian ])+0)[2]), (((hessCbA)+3)[0] = ((-1))*((pvl->directAnswer[ tenGageTraceHessian])+3)[0], ((hessCbA)+3)[1] = ((-1))*((pvl-> directAnswer[tenGageTraceHessian])+3)[1], ((hessCbA)+3)[2] = ( (-1))*((pvl->directAnswer[tenGageTraceHessian])+3)[2]), (( (hessCbA)+6)[0] = ((-1))*((pvl->directAnswer[tenGageTraceHessian ])+6)[0], ((hessCbA)+6)[1] = ((-1))*((pvl->directAnswer[tenGageTraceHessian ])+6)[1], ((hessCbA)+6)[2] = ((-1))*((pvl->directAnswer[tenGageTraceHessian ])+6)[2])); |
| 944 | } |
| 945 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTraceHessianEvec)(pvl->query[tenGageTraceHessianEvec/8] & (1 << ( tenGageTraceHessianEvec % 8)))) { |
| 946 | ell_3m_eigensolve_d(pvl->directAnswer[tenGageTraceHessianEval], |
| 947 | pvl->directAnswer[tenGageTraceHessianEvec], |
| 948 | pvl->directAnswer[tenGageTraceHessian], AIR_TRUE1); |
| 949 | } else if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTraceHessianEval)(pvl->query[tenGageTraceHessianEval/8] & (1 << ( tenGageTraceHessianEval % 8)))) { |
| 950 | ell_3m_eigenvalues_d(pvl->directAnswer[tenGageTraceHessianEval], |
| 951 | pvl->directAnswer[tenGageTraceHessian], AIR_TRUE1); |
| 952 | } |
| 953 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTraceHessianFrob)(pvl->query[tenGageTraceHessianFrob/8] & (1 << ( tenGageTraceHessianFrob % 8)))) { |
| 954 | pvl->directAnswer[tenGageTraceHessianFrob][0] |
| 955 | = ELL_3M_FROB(pvl->directAnswer[tenGageTraceHessian])(sqrt((((pvl->directAnswer[tenGageTraceHessian])+0)[0]*((pvl ->directAnswer[tenGageTraceHessian])+0)[0] + ((pvl->directAnswer [tenGageTraceHessian])+0)[1]*((pvl->directAnswer[tenGageTraceHessian ])+0)[1] + ((pvl->directAnswer[tenGageTraceHessian])+0)[2] *((pvl->directAnswer[tenGageTraceHessian])+0)[2]) + (((pvl ->directAnswer[tenGageTraceHessian])+3)[0]*((pvl->directAnswer [tenGageTraceHessian])+3)[0] + ((pvl->directAnswer[tenGageTraceHessian ])+3)[1]*((pvl->directAnswer[tenGageTraceHessian])+3)[1] + ((pvl->directAnswer[tenGageTraceHessian])+3)[2]*((pvl-> directAnswer[tenGageTraceHessian])+3)[2]) + (((pvl->directAnswer [tenGageTraceHessian])+6)[0]*((pvl->directAnswer[tenGageTraceHessian ])+6)[0] + ((pvl->directAnswer[tenGageTraceHessian])+6)[1] *((pvl->directAnswer[tenGageTraceHessian])+6)[1] + ((pvl-> directAnswer[tenGageTraceHessian])+6)[2]*((pvl->directAnswer [tenGageTraceHessian])+6)[2]))); |
| 956 | } |
| 957 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageBHessian)(pvl->query[tenGageBHessian/8] & (1 << (tenGageBHessian % 8)))) { |
| 958 | hessCbB = matTmp = pvl->directAnswer[tenGageBHessian]; |
| 959 | ELL_3M_ZERO_SET(matTmp)((((matTmp)+0)[0] = (0), ((matTmp)+0)[1] = (0), ((matTmp)+0)[ 2] = (0)), (((matTmp)+3)[0] = (0), ((matTmp)+3)[1] = (0), ((matTmp )+3)[2] = (0)), (((matTmp)+6)[0] = (0), ((matTmp)+6)[1] = (0) , ((matTmp)+6)[2] = (0))); |
| 960 | ELL_3M_SCALE_INCR(matTmp, dtB, hessDtB)((((matTmp)+0)[0] += ((dtB))*((hessDtB)+0)[0], ((matTmp)+0)[1 ] += ((dtB))*((hessDtB)+0)[1], ((matTmp)+0)[2] += ((dtB))*((hessDtB )+0)[2]), (((matTmp)+3)[0] += ((dtB))*((hessDtB)+3)[0], ((matTmp )+3)[1] += ((dtB))*((hessDtB)+3)[1], ((matTmp)+3)[2] += ((dtB ))*((hessDtB)+3)[2]), (((matTmp)+6)[0] += ((dtB))*((hessDtB)+ 6)[0], ((matTmp)+6)[1] += ((dtB))*((hessDtB)+6)[1], ((matTmp) +6)[2] += ((dtB))*((hessDtB)+6)[2])); |
| 961 | ELL_3M_SCALE_INCR(matTmp, dtC, hessDtC)((((matTmp)+0)[0] += ((dtC))*((hessDtC)+0)[0], ((matTmp)+0)[1 ] += ((dtC))*((hessDtC)+0)[1], ((matTmp)+0)[2] += ((dtC))*((hessDtC )+0)[2]), (((matTmp)+3)[0] += ((dtC))*((hessDtC)+3)[0], ((matTmp )+3)[1] += ((dtC))*((hessDtC)+3)[1], ((matTmp)+3)[2] += ((dtC ))*((hessDtC)+3)[2]), (((matTmp)+6)[0] += ((dtC))*((hessDtC)+ 6)[0], ((matTmp)+6)[1] += ((dtC))*((hessDtC)+6)[1], ((matTmp) +6)[2] += ((dtC))*((hessDtC)+6)[2])); |
| 962 | ELL_3M_SCALE_INCR(matTmp, dtE, hessDtE)((((matTmp)+0)[0] += ((dtE))*((hessDtE)+0)[0], ((matTmp)+0)[1 ] += ((dtE))*((hessDtE)+0)[1], ((matTmp)+0)[2] += ((dtE))*((hessDtE )+0)[2]), (((matTmp)+3)[0] += ((dtE))*((hessDtE)+3)[0], ((matTmp )+3)[1] += ((dtE))*((hessDtE)+3)[1], ((matTmp)+3)[2] += ((dtE ))*((hessDtE)+3)[2]), (((matTmp)+6)[0] += ((dtE))*((hessDtE)+ 6)[0], ((matTmp)+6)[1] += ((dtE))*((hessDtE)+6)[1], ((matTmp) +6)[2] += ((dtE))*((hessDtE)+6)[2])); |
| 963 | ELL_3MV_OUTER_INCR(matTmp, gradDtB, gradDtB)((((matTmp)+0)[0] += ((gradDtB)[0])*((gradDtB))[0], ((matTmp) +0)[1] += ((gradDtB)[0])*((gradDtB))[1], ((matTmp)+0)[2] += ( (gradDtB)[0])*((gradDtB))[2]), (((matTmp)+3)[0] += ((gradDtB) [1])*((gradDtB))[0], ((matTmp)+3)[1] += ((gradDtB)[1])*((gradDtB ))[1], ((matTmp)+3)[2] += ((gradDtB)[1])*((gradDtB))[2]), ((( matTmp)+6)[0] += ((gradDtB)[2])*((gradDtB))[0], ((matTmp)+6)[ 1] += ((gradDtB)[2])*((gradDtB))[1], ((matTmp)+6)[2] += ((gradDtB )[2])*((gradDtB))[2])); |
| 964 | ELL_3MV_OUTER_INCR(matTmp, gradDtC, gradDtC)((((matTmp)+0)[0] += ((gradDtC)[0])*((gradDtC))[0], ((matTmp) +0)[1] += ((gradDtC)[0])*((gradDtC))[1], ((matTmp)+0)[2] += ( (gradDtC)[0])*((gradDtC))[2]), (((matTmp)+3)[0] += ((gradDtC) [1])*((gradDtC))[0], ((matTmp)+3)[1] += ((gradDtC)[1])*((gradDtC ))[1], ((matTmp)+3)[2] += ((gradDtC)[1])*((gradDtC))[2]), ((( matTmp)+6)[0] += ((gradDtC)[2])*((gradDtC))[0], ((matTmp)+6)[ 1] += ((gradDtC)[2])*((gradDtC))[1], ((matTmp)+6)[2] += ((gradDtC )[2])*((gradDtC))[2])); |
| 965 | ELL_3MV_OUTER_INCR(matTmp, gradDtE, gradDtE)((((matTmp)+0)[0] += ((gradDtE)[0])*((gradDtE))[0], ((matTmp) +0)[1] += ((gradDtE)[0])*((gradDtE))[1], ((matTmp)+0)[2] += ( (gradDtE)[0])*((gradDtE))[2]), (((matTmp)+3)[0] += ((gradDtE) [1])*((gradDtE))[0], ((matTmp)+3)[1] += ((gradDtE)[1])*((gradDtE ))[1], ((matTmp)+3)[2] += ((gradDtE)[1])*((gradDtE))[2]), ((( matTmp)+6)[0] += ((gradDtE)[2])*((gradDtE))[0], ((matTmp)+6)[ 1] += ((gradDtE)[2])*((gradDtE))[1], ((matTmp)+6)[2] += ((gradDtE )[2])*((gradDtE))[2])); |
| 966 | ELL_3M_SCALE(matTmp, -2, matTmp)((((matTmp)+0)[0] = ((-2))*((matTmp)+0)[0], ((matTmp)+0)[1] = ((-2))*((matTmp)+0)[1], ((matTmp)+0)[2] = ((-2))*((matTmp)+0 )[2]), (((matTmp)+3)[0] = ((-2))*((matTmp)+3)[0], ((matTmp)+3 )[1] = ((-2))*((matTmp)+3)[1], ((matTmp)+3)[2] = ((-2))*((matTmp )+3)[2]), (((matTmp)+6)[0] = ((-2))*((matTmp)+6)[0], ((matTmp )+6)[1] = ((-2))*((matTmp)+6)[1], ((matTmp)+6)[2] = ((-2))*(( matTmp)+6)[2])); |
| 967 | ELL_3MV_OUTER_INCR(matTmp, gradDtD, gradDtA)((((matTmp)+0)[0] += ((gradDtD)[0])*((gradDtA))[0], ((matTmp) +0)[1] += ((gradDtD)[0])*((gradDtA))[1], ((matTmp)+0)[2] += ( (gradDtD)[0])*((gradDtA))[2]), (((matTmp)+3)[0] += ((gradDtD) [1])*((gradDtA))[0], ((matTmp)+3)[1] += ((gradDtD)[1])*((gradDtA ))[1], ((matTmp)+3)[2] += ((gradDtD)[1])*((gradDtA))[2]), ((( matTmp)+6)[0] += ((gradDtD)[2])*((gradDtA))[0], ((matTmp)+6)[ 1] += ((gradDtD)[2])*((gradDtA))[1], ((matTmp)+6)[2] += ((gradDtD )[2])*((gradDtA))[2])); |
| 968 | ELL_3MV_OUTER_INCR(matTmp, gradDtF, gradDtA)((((matTmp)+0)[0] += ((gradDtF)[0])*((gradDtA))[0], ((matTmp) +0)[1] += ((gradDtF)[0])*((gradDtA))[1], ((matTmp)+0)[2] += ( (gradDtF)[0])*((gradDtA))[2]), (((matTmp)+3)[0] += ((gradDtF) [1])*((gradDtA))[0], ((matTmp)+3)[1] += ((gradDtF)[1])*((gradDtA ))[1], ((matTmp)+3)[2] += ((gradDtF)[1])*((gradDtA))[2]), ((( matTmp)+6)[0] += ((gradDtF)[2])*((gradDtA))[0], ((matTmp)+6)[ 1] += ((gradDtF)[2])*((gradDtA))[1], ((matTmp)+6)[2] += ((gradDtF )[2])*((gradDtA))[2])); |
| 969 | ELL_3MV_OUTER_INCR(matTmp, gradDtA, gradDtD)((((matTmp)+0)[0] += ((gradDtA)[0])*((gradDtD))[0], ((matTmp) +0)[1] += ((gradDtA)[0])*((gradDtD))[1], ((matTmp)+0)[2] += ( (gradDtA)[0])*((gradDtD))[2]), (((matTmp)+3)[0] += ((gradDtA) [1])*((gradDtD))[0], ((matTmp)+3)[1] += ((gradDtA)[1])*((gradDtD ))[1], ((matTmp)+3)[2] += ((gradDtA)[1])*((gradDtD))[2]), ((( matTmp)+6)[0] += ((gradDtA)[2])*((gradDtD))[0], ((matTmp)+6)[ 1] += ((gradDtA)[2])*((gradDtD))[1], ((matTmp)+6)[2] += ((gradDtA )[2])*((gradDtD))[2])); |
| 970 | ELL_3MV_OUTER_INCR(matTmp, gradDtF, gradDtD)((((matTmp)+0)[0] += ((gradDtF)[0])*((gradDtD))[0], ((matTmp) +0)[1] += ((gradDtF)[0])*((gradDtD))[1], ((matTmp)+0)[2] += ( (gradDtF)[0])*((gradDtD))[2]), (((matTmp)+3)[0] += ((gradDtF) [1])*((gradDtD))[0], ((matTmp)+3)[1] += ((gradDtF)[1])*((gradDtD ))[1], ((matTmp)+3)[2] += ((gradDtF)[1])*((gradDtD))[2]), ((( matTmp)+6)[0] += ((gradDtF)[2])*((gradDtD))[0], ((matTmp)+6)[ 1] += ((gradDtF)[2])*((gradDtD))[1], ((matTmp)+6)[2] += ((gradDtF )[2])*((gradDtD))[2])); |
| 971 | ELL_3MV_OUTER_INCR(matTmp, gradDtA, gradDtF)((((matTmp)+0)[0] += ((gradDtA)[0])*((gradDtF))[0], ((matTmp) +0)[1] += ((gradDtA)[0])*((gradDtF))[1], ((matTmp)+0)[2] += ( (gradDtA)[0])*((gradDtF))[2]), (((matTmp)+3)[0] += ((gradDtA) [1])*((gradDtF))[0], ((matTmp)+3)[1] += ((gradDtA)[1])*((gradDtF ))[1], ((matTmp)+3)[2] += ((gradDtA)[1])*((gradDtF))[2]), ((( matTmp)+6)[0] += ((gradDtA)[2])*((gradDtF))[0], ((matTmp)+6)[ 1] += ((gradDtA)[2])*((gradDtF))[1], ((matTmp)+6)[2] += ((gradDtA )[2])*((gradDtF))[2])); |
| 972 | ELL_3MV_OUTER_INCR(matTmp, gradDtD, gradDtF)((((matTmp)+0)[0] += ((gradDtD)[0])*((gradDtF))[0], ((matTmp) +0)[1] += ((gradDtD)[0])*((gradDtF))[1], ((matTmp)+0)[2] += ( (gradDtD)[0])*((gradDtF))[2]), (((matTmp)+3)[0] += ((gradDtD) [1])*((gradDtF))[0], ((matTmp)+3)[1] += ((gradDtD)[1])*((gradDtF ))[1], ((matTmp)+3)[2] += ((gradDtD)[1])*((gradDtF))[2]), ((( matTmp)+6)[0] += ((gradDtD)[2])*((gradDtF))[0], ((matTmp)+6)[ 1] += ((gradDtD)[2])*((gradDtF))[1], ((matTmp)+6)[2] += ((gradDtD )[2])*((gradDtF))[2])); |
| 973 | ELL_3M_SCALE_INCR(matTmp, dtD + dtF, hessDtA)((((matTmp)+0)[0] += ((dtD + dtF))*((hessDtA)+0)[0], ((matTmp )+0)[1] += ((dtD + dtF))*((hessDtA)+0)[1], ((matTmp)+0)[2] += ((dtD + dtF))*((hessDtA)+0)[2]), (((matTmp)+3)[0] += ((dtD + dtF))*((hessDtA)+3)[0], ((matTmp)+3)[1] += ((dtD + dtF))*((hessDtA )+3)[1], ((matTmp)+3)[2] += ((dtD + dtF))*((hessDtA)+3)[2]), ( ((matTmp)+6)[0] += ((dtD + dtF))*((hessDtA)+6)[0], ((matTmp)+ 6)[1] += ((dtD + dtF))*((hessDtA)+6)[1], ((matTmp)+6)[2] += ( (dtD + dtF))*((hessDtA)+6)[2])); |
| 974 | ELL_3M_SCALE_INCR(matTmp, dtA + dtF, hessDtD)((((matTmp)+0)[0] += ((dtA + dtF))*((hessDtD)+0)[0], ((matTmp )+0)[1] += ((dtA + dtF))*((hessDtD)+0)[1], ((matTmp)+0)[2] += ((dtA + dtF))*((hessDtD)+0)[2]), (((matTmp)+3)[0] += ((dtA + dtF))*((hessDtD)+3)[0], ((matTmp)+3)[1] += ((dtA + dtF))*((hessDtD )+3)[1], ((matTmp)+3)[2] += ((dtA + dtF))*((hessDtD)+3)[2]), ( ((matTmp)+6)[0] += ((dtA + dtF))*((hessDtD)+6)[0], ((matTmp)+ 6)[1] += ((dtA + dtF))*((hessDtD)+6)[1], ((matTmp)+6)[2] += ( (dtA + dtF))*((hessDtD)+6)[2])); |
| 975 | ELL_3M_SCALE_INCR(matTmp, dtA + dtD, hessDtF)((((matTmp)+0)[0] += ((dtA + dtD))*((hessDtF)+0)[0], ((matTmp )+0)[1] += ((dtA + dtD))*((hessDtF)+0)[1], ((matTmp)+0)[2] += ((dtA + dtD))*((hessDtF)+0)[2]), (((matTmp)+3)[0] += ((dtA + dtD))*((hessDtF)+3)[0], ((matTmp)+3)[1] += ((dtA + dtD))*((hessDtF )+3)[1], ((matTmp)+3)[2] += ((dtA + dtD))*((hessDtF)+3)[2]), ( ((matTmp)+6)[0] += ((dtA + dtD))*((hessDtF)+6)[0], ((matTmp)+ 6)[1] += ((dtA + dtD))*((hessDtF)+6)[1], ((matTmp)+6)[2] += ( (dtA + dtD))*((hessDtF)+6)[2])); |
| 976 | } |
| 977 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageDetHessian)(pvl->query[tenGageDetHessian/8] & (1 << (tenGageDetHessian % 8)))) { |
| 978 | double tmp[3]; |
| 979 | matTmp = pvl->directAnswer[tenGageDetHessian]; |
| 980 | ELL_3M_ZERO_SET(matTmp)((((matTmp)+0)[0] = (0), ((matTmp)+0)[1] = (0), ((matTmp)+0)[ 2] = (0)), (((matTmp)+3)[0] = (0), ((matTmp)+3)[1] = (0), ((matTmp )+3)[2] = (0)), (((matTmp)+6)[0] = (0), ((matTmp)+6)[1] = (0) , ((matTmp)+6)[2] = (0))); |
| 981 | ELL_3V_SCALE_ADD3(tmp, dtD, gradDtF,((tmp)[0] = (dtD)*(gradDtF)[0] + (dtF)*(gradDtD)[0] + (-2*dtE )*(gradDtE)[0], (tmp)[1] = (dtD)*(gradDtF)[1] + (dtF)*(gradDtD )[1] + (-2*dtE)*(gradDtE)[1], (tmp)[2] = (dtD)*(gradDtF)[2] + (dtF)*(gradDtD)[2] + (-2*dtE)*(gradDtE)[2]) |
| 982 | dtF, gradDtD,((tmp)[0] = (dtD)*(gradDtF)[0] + (dtF)*(gradDtD)[0] + (-2*dtE )*(gradDtE)[0], (tmp)[1] = (dtD)*(gradDtF)[1] + (dtF)*(gradDtD )[1] + (-2*dtE)*(gradDtE)[1], (tmp)[2] = (dtD)*(gradDtF)[2] + (dtF)*(gradDtD)[2] + (-2*dtE)*(gradDtE)[2]) |
| 983 | -2*dtE, gradDtE)((tmp)[0] = (dtD)*(gradDtF)[0] + (dtF)*(gradDtD)[0] + (-2*dtE )*(gradDtE)[0], (tmp)[1] = (dtD)*(gradDtF)[1] + (dtF)*(gradDtD )[1] + (-2*dtE)*(gradDtE)[1], (tmp)[2] = (dtD)*(gradDtF)[2] + (dtF)*(gradDtD)[2] + (-2*dtE)*(gradDtE)[2]); |
| 984 | ELL_3MV_OUTER_INCR(matTmp, tmp, gradDtA)((((matTmp)+0)[0] += ((tmp)[0])*((gradDtA))[0], ((matTmp)+0)[ 1] += ((tmp)[0])*((gradDtA))[1], ((matTmp)+0)[2] += ((tmp)[0] )*((gradDtA))[2]), (((matTmp)+3)[0] += ((tmp)[1])*((gradDtA)) [0], ((matTmp)+3)[1] += ((tmp)[1])*((gradDtA))[1], ((matTmp)+ 3)[2] += ((tmp)[1])*((gradDtA))[2]), (((matTmp)+6)[0] += ((tmp )[2])*((gradDtA))[0], ((matTmp)+6)[1] += ((tmp)[2])*((gradDtA ))[1], ((matTmp)+6)[2] += ((tmp)[2])*((gradDtA))[2])); |
| 985 | ELL_3M_SCALE_INCR(matTmp, dtD*dtF - dtE*dtE, hessDtA)((((matTmp)+0)[0] += ((dtD*dtF - dtE*dtE))*((hessDtA)+0)[0], ( (matTmp)+0)[1] += ((dtD*dtF - dtE*dtE))*((hessDtA)+0)[1], ((matTmp )+0)[2] += ((dtD*dtF - dtE*dtE))*((hessDtA)+0)[2]), (((matTmp )+3)[0] += ((dtD*dtF - dtE*dtE))*((hessDtA)+3)[0], ((matTmp)+ 3)[1] += ((dtD*dtF - dtE*dtE))*((hessDtA)+3)[1], ((matTmp)+3) [2] += ((dtD*dtF - dtE*dtE))*((hessDtA)+3)[2]), (((matTmp)+6) [0] += ((dtD*dtF - dtE*dtE))*((hessDtA)+6)[0], ((matTmp)+6)[1 ] += ((dtD*dtF - dtE*dtE))*((hessDtA)+6)[1], ((matTmp)+6)[2] += ((dtD*dtF - dtE*dtE))*((hessDtA)+6)[2])); |
| 986 | ELL_3V_SCALE_ADD4(tmp, 2*dtC, gradDtE,((tmp)[0] = (2*dtC)*(gradDtE)[0] + (2*dtE)*(gradDtC)[0] + (-2 *dtB)*(gradDtF)[0] + (-2*dtF)*(gradDtB)[0], (tmp)[1] = (2*dtC )*(gradDtE)[1] + (2*dtE)*(gradDtC)[1] + (-2*dtB)*(gradDtF)[1] + (-2*dtF)*(gradDtB)[1], (tmp)[2] = (2*dtC)*(gradDtE)[2] + ( 2*dtE)*(gradDtC)[2] + (-2*dtB)*(gradDtF)[2] + (-2*dtF)*(gradDtB )[2]) |
| 987 | 2*dtE, gradDtC,((tmp)[0] = (2*dtC)*(gradDtE)[0] + (2*dtE)*(gradDtC)[0] + (-2 *dtB)*(gradDtF)[0] + (-2*dtF)*(gradDtB)[0], (tmp)[1] = (2*dtC )*(gradDtE)[1] + (2*dtE)*(gradDtC)[1] + (-2*dtB)*(gradDtF)[1] + (-2*dtF)*(gradDtB)[1], (tmp)[2] = (2*dtC)*(gradDtE)[2] + ( 2*dtE)*(gradDtC)[2] + (-2*dtB)*(gradDtF)[2] + (-2*dtF)*(gradDtB )[2]) |
| 988 | -2*dtB, gradDtF,((tmp)[0] = (2*dtC)*(gradDtE)[0] + (2*dtE)*(gradDtC)[0] + (-2 *dtB)*(gradDtF)[0] + (-2*dtF)*(gradDtB)[0], (tmp)[1] = (2*dtC )*(gradDtE)[1] + (2*dtE)*(gradDtC)[1] + (-2*dtB)*(gradDtF)[1] + (-2*dtF)*(gradDtB)[1], (tmp)[2] = (2*dtC)*(gradDtE)[2] + ( 2*dtE)*(gradDtC)[2] + (-2*dtB)*(gradDtF)[2] + (-2*dtF)*(gradDtB )[2]) |
| 989 | -2*dtF, gradDtB)((tmp)[0] = (2*dtC)*(gradDtE)[0] + (2*dtE)*(gradDtC)[0] + (-2 *dtB)*(gradDtF)[0] + (-2*dtF)*(gradDtB)[0], (tmp)[1] = (2*dtC )*(gradDtE)[1] + (2*dtE)*(gradDtC)[1] + (-2*dtB)*(gradDtF)[1] + (-2*dtF)*(gradDtB)[1], (tmp)[2] = (2*dtC)*(gradDtE)[2] + ( 2*dtE)*(gradDtC)[2] + (-2*dtB)*(gradDtF)[2] + (-2*dtF)*(gradDtB )[2]); |
| 990 | ELL_3MV_OUTER_INCR(matTmp, tmp, gradDtB)((((matTmp)+0)[0] += ((tmp)[0])*((gradDtB))[0], ((matTmp)+0)[ 1] += ((tmp)[0])*((gradDtB))[1], ((matTmp)+0)[2] += ((tmp)[0] )*((gradDtB))[2]), (((matTmp)+3)[0] += ((tmp)[1])*((gradDtB)) [0], ((matTmp)+3)[1] += ((tmp)[1])*((gradDtB))[1], ((matTmp)+ 3)[2] += ((tmp)[1])*((gradDtB))[2]), (((matTmp)+6)[0] += ((tmp )[2])*((gradDtB))[0], ((matTmp)+6)[1] += ((tmp)[2])*((gradDtB ))[1], ((matTmp)+6)[2] += ((tmp)[2])*((gradDtB))[2])); |
| 991 | ELL_3M_SCALE_INCR(matTmp, 2*(dtC*dtE - dtB*dtF), hessDtB)((((matTmp)+0)[0] += ((2*(dtC*dtE - dtB*dtF)))*((hessDtB)+0)[ 0], ((matTmp)+0)[1] += ((2*(dtC*dtE - dtB*dtF)))*((hessDtB)+0 )[1], ((matTmp)+0)[2] += ((2*(dtC*dtE - dtB*dtF)))*((hessDtB) +0)[2]), (((matTmp)+3)[0] += ((2*(dtC*dtE - dtB*dtF)))*((hessDtB )+3)[0], ((matTmp)+3)[1] += ((2*(dtC*dtE - dtB*dtF)))*((hessDtB )+3)[1], ((matTmp)+3)[2] += ((2*(dtC*dtE - dtB*dtF)))*((hessDtB )+3)[2]), (((matTmp)+6)[0] += ((2*(dtC*dtE - dtB*dtF)))*((hessDtB )+6)[0], ((matTmp)+6)[1] += ((2*(dtC*dtE - dtB*dtF)))*((hessDtB )+6)[1], ((matTmp)+6)[2] += ((2*(dtC*dtE - dtB*dtF)))*((hessDtB )+6)[2])); |
| 992 | ELL_3V_SCALE_ADD4(tmp, 2*dtB, gradDtE,((tmp)[0] = (2*dtB)*(gradDtE)[0] + (2*dtE)*(gradDtB)[0] + (-2 *dtC)*(gradDtD)[0] + (-2*dtD)*(gradDtC)[0], (tmp)[1] = (2*dtB )*(gradDtE)[1] + (2*dtE)*(gradDtB)[1] + (-2*dtC)*(gradDtD)[1] + (-2*dtD)*(gradDtC)[1], (tmp)[2] = (2*dtB)*(gradDtE)[2] + ( 2*dtE)*(gradDtB)[2] + (-2*dtC)*(gradDtD)[2] + (-2*dtD)*(gradDtC )[2]) |
| 993 | 2*dtE, gradDtB,((tmp)[0] = (2*dtB)*(gradDtE)[0] + (2*dtE)*(gradDtB)[0] + (-2 *dtC)*(gradDtD)[0] + (-2*dtD)*(gradDtC)[0], (tmp)[1] = (2*dtB )*(gradDtE)[1] + (2*dtE)*(gradDtB)[1] + (-2*dtC)*(gradDtD)[1] + (-2*dtD)*(gradDtC)[1], (tmp)[2] = (2*dtB)*(gradDtE)[2] + ( 2*dtE)*(gradDtB)[2] + (-2*dtC)*(gradDtD)[2] + (-2*dtD)*(gradDtC )[2]) |
| 994 | -2*dtC, gradDtD,((tmp)[0] = (2*dtB)*(gradDtE)[0] + (2*dtE)*(gradDtB)[0] + (-2 *dtC)*(gradDtD)[0] + (-2*dtD)*(gradDtC)[0], (tmp)[1] = (2*dtB )*(gradDtE)[1] + (2*dtE)*(gradDtB)[1] + (-2*dtC)*(gradDtD)[1] + (-2*dtD)*(gradDtC)[1], (tmp)[2] = (2*dtB)*(gradDtE)[2] + ( 2*dtE)*(gradDtB)[2] + (-2*dtC)*(gradDtD)[2] + (-2*dtD)*(gradDtC )[2]) |
| 995 | -2*dtD, gradDtC)((tmp)[0] = (2*dtB)*(gradDtE)[0] + (2*dtE)*(gradDtB)[0] + (-2 *dtC)*(gradDtD)[0] + (-2*dtD)*(gradDtC)[0], (tmp)[1] = (2*dtB )*(gradDtE)[1] + (2*dtE)*(gradDtB)[1] + (-2*dtC)*(gradDtD)[1] + (-2*dtD)*(gradDtC)[1], (tmp)[2] = (2*dtB)*(gradDtE)[2] + ( 2*dtE)*(gradDtB)[2] + (-2*dtC)*(gradDtD)[2] + (-2*dtD)*(gradDtC )[2]); |
| 996 | ELL_3MV_OUTER_INCR(matTmp, tmp, gradDtC)((((matTmp)+0)[0] += ((tmp)[0])*((gradDtC))[0], ((matTmp)+0)[ 1] += ((tmp)[0])*((gradDtC))[1], ((matTmp)+0)[2] += ((tmp)[0] )*((gradDtC))[2]), (((matTmp)+3)[0] += ((tmp)[1])*((gradDtC)) [0], ((matTmp)+3)[1] += ((tmp)[1])*((gradDtC))[1], ((matTmp)+ 3)[2] += ((tmp)[1])*((gradDtC))[2]), (((matTmp)+6)[0] += ((tmp )[2])*((gradDtC))[0], ((matTmp)+6)[1] += ((tmp)[2])*((gradDtC ))[1], ((matTmp)+6)[2] += ((tmp)[2])*((gradDtC))[2])); |
| 997 | ELL_3M_SCALE_INCR(matTmp, 2*(dtB*dtE - dtC*dtD), hessDtC)((((matTmp)+0)[0] += ((2*(dtB*dtE - dtC*dtD)))*((hessDtC)+0)[ 0], ((matTmp)+0)[1] += ((2*(dtB*dtE - dtC*dtD)))*((hessDtC)+0 )[1], ((matTmp)+0)[2] += ((2*(dtB*dtE - dtC*dtD)))*((hessDtC) +0)[2]), (((matTmp)+3)[0] += ((2*(dtB*dtE - dtC*dtD)))*((hessDtC )+3)[0], ((matTmp)+3)[1] += ((2*(dtB*dtE - dtC*dtD)))*((hessDtC )+3)[1], ((matTmp)+3)[2] += ((2*(dtB*dtE - dtC*dtD)))*((hessDtC )+3)[2]), (((matTmp)+6)[0] += ((2*(dtB*dtE - dtC*dtD)))*((hessDtC )+6)[0], ((matTmp)+6)[1] += ((2*(dtB*dtE - dtC*dtD)))*((hessDtC )+6)[1], ((matTmp)+6)[2] += ((2*(dtB*dtE - dtC*dtD)))*((hessDtC )+6)[2])); |
| 998 | ELL_3V_SCALE_ADD3(tmp, dtA, gradDtF,((tmp)[0] = (dtA)*(gradDtF)[0] + (dtF)*(gradDtA)[0] + (-2*dtC )*(gradDtC)[0], (tmp)[1] = (dtA)*(gradDtF)[1] + (dtF)*(gradDtA )[1] + (-2*dtC)*(gradDtC)[1], (tmp)[2] = (dtA)*(gradDtF)[2] + (dtF)*(gradDtA)[2] + (-2*dtC)*(gradDtC)[2]) |
| 999 | dtF, gradDtA,((tmp)[0] = (dtA)*(gradDtF)[0] + (dtF)*(gradDtA)[0] + (-2*dtC )*(gradDtC)[0], (tmp)[1] = (dtA)*(gradDtF)[1] + (dtF)*(gradDtA )[1] + (-2*dtC)*(gradDtC)[1], (tmp)[2] = (dtA)*(gradDtF)[2] + (dtF)*(gradDtA)[2] + (-2*dtC)*(gradDtC)[2]) |
| 1000 | -2*dtC, gradDtC)((tmp)[0] = (dtA)*(gradDtF)[0] + (dtF)*(gradDtA)[0] + (-2*dtC )*(gradDtC)[0], (tmp)[1] = (dtA)*(gradDtF)[1] + (dtF)*(gradDtA )[1] + (-2*dtC)*(gradDtC)[1], (tmp)[2] = (dtA)*(gradDtF)[2] + (dtF)*(gradDtA)[2] + (-2*dtC)*(gradDtC)[2]); |
| 1001 | ELL_3MV_OUTER_INCR(matTmp, tmp, gradDtD)((((matTmp)+0)[0] += ((tmp)[0])*((gradDtD))[0], ((matTmp)+0)[ 1] += ((tmp)[0])*((gradDtD))[1], ((matTmp)+0)[2] += ((tmp)[0] )*((gradDtD))[2]), (((matTmp)+3)[0] += ((tmp)[1])*((gradDtD)) [0], ((matTmp)+3)[1] += ((tmp)[1])*((gradDtD))[1], ((matTmp)+ 3)[2] += ((tmp)[1])*((gradDtD))[2]), (((matTmp)+6)[0] += ((tmp )[2])*((gradDtD))[0], ((matTmp)+6)[1] += ((tmp)[2])*((gradDtD ))[1], ((matTmp)+6)[2] += ((tmp)[2])*((gradDtD))[2])); |
| 1002 | ELL_3M_SCALE_INCR(matTmp, dtA*dtF - dtC*dtC, hessDtD)((((matTmp)+0)[0] += ((dtA*dtF - dtC*dtC))*((hessDtD)+0)[0], ( (matTmp)+0)[1] += ((dtA*dtF - dtC*dtC))*((hessDtD)+0)[1], ((matTmp )+0)[2] += ((dtA*dtF - dtC*dtC))*((hessDtD)+0)[2]), (((matTmp )+3)[0] += ((dtA*dtF - dtC*dtC))*((hessDtD)+3)[0], ((matTmp)+ 3)[1] += ((dtA*dtF - dtC*dtC))*((hessDtD)+3)[1], ((matTmp)+3) [2] += ((dtA*dtF - dtC*dtC))*((hessDtD)+3)[2]), (((matTmp)+6) [0] += ((dtA*dtF - dtC*dtC))*((hessDtD)+6)[0], ((matTmp)+6)[1 ] += ((dtA*dtF - dtC*dtC))*((hessDtD)+6)[1], ((matTmp)+6)[2] += ((dtA*dtF - dtC*dtC))*((hessDtD)+6)[2])); |
| 1003 | ELL_3V_SCALE_ADD4(tmp, 2*dtB, gradDtC,((tmp)[0] = (2*dtB)*(gradDtC)[0] + (2*dtC)*(gradDtB)[0] + (-2 *dtA)*(gradDtE)[0] + (-2*dtE)*(gradDtA)[0], (tmp)[1] = (2*dtB )*(gradDtC)[1] + (2*dtC)*(gradDtB)[1] + (-2*dtA)*(gradDtE)[1] + (-2*dtE)*(gradDtA)[1], (tmp)[2] = (2*dtB)*(gradDtC)[2] + ( 2*dtC)*(gradDtB)[2] + (-2*dtA)*(gradDtE)[2] + (-2*dtE)*(gradDtA )[2]) |
| 1004 | 2*dtC, gradDtB,((tmp)[0] = (2*dtB)*(gradDtC)[0] + (2*dtC)*(gradDtB)[0] + (-2 *dtA)*(gradDtE)[0] + (-2*dtE)*(gradDtA)[0], (tmp)[1] = (2*dtB )*(gradDtC)[1] + (2*dtC)*(gradDtB)[1] + (-2*dtA)*(gradDtE)[1] + (-2*dtE)*(gradDtA)[1], (tmp)[2] = (2*dtB)*(gradDtC)[2] + ( 2*dtC)*(gradDtB)[2] + (-2*dtA)*(gradDtE)[2] + (-2*dtE)*(gradDtA )[2]) |
| 1005 | -2*dtA, gradDtE,((tmp)[0] = (2*dtB)*(gradDtC)[0] + (2*dtC)*(gradDtB)[0] + (-2 *dtA)*(gradDtE)[0] + (-2*dtE)*(gradDtA)[0], (tmp)[1] = (2*dtB )*(gradDtC)[1] + (2*dtC)*(gradDtB)[1] + (-2*dtA)*(gradDtE)[1] + (-2*dtE)*(gradDtA)[1], (tmp)[2] = (2*dtB)*(gradDtC)[2] + ( 2*dtC)*(gradDtB)[2] + (-2*dtA)*(gradDtE)[2] + (-2*dtE)*(gradDtA )[2]) |
| 1006 | -2*dtE, gradDtA)((tmp)[0] = (2*dtB)*(gradDtC)[0] + (2*dtC)*(gradDtB)[0] + (-2 *dtA)*(gradDtE)[0] + (-2*dtE)*(gradDtA)[0], (tmp)[1] = (2*dtB )*(gradDtC)[1] + (2*dtC)*(gradDtB)[1] + (-2*dtA)*(gradDtE)[1] + (-2*dtE)*(gradDtA)[1], (tmp)[2] = (2*dtB)*(gradDtC)[2] + ( 2*dtC)*(gradDtB)[2] + (-2*dtA)*(gradDtE)[2] + (-2*dtE)*(gradDtA )[2]); |
| 1007 | ELL_3MV_OUTER_INCR(matTmp, tmp, gradDtE)((((matTmp)+0)[0] += ((tmp)[0])*((gradDtE))[0], ((matTmp)+0)[ 1] += ((tmp)[0])*((gradDtE))[1], ((matTmp)+0)[2] += ((tmp)[0] )*((gradDtE))[2]), (((matTmp)+3)[0] += ((tmp)[1])*((gradDtE)) [0], ((matTmp)+3)[1] += ((tmp)[1])*((gradDtE))[1], ((matTmp)+ 3)[2] += ((tmp)[1])*((gradDtE))[2]), (((matTmp)+6)[0] += ((tmp )[2])*((gradDtE))[0], ((matTmp)+6)[1] += ((tmp)[2])*((gradDtE ))[1], ((matTmp)+6)[2] += ((tmp)[2])*((gradDtE))[2])); |
| 1008 | ELL_3M_SCALE_INCR(matTmp, 2*(dtB*dtC - dtA*dtE), hessDtE)((((matTmp)+0)[0] += ((2*(dtB*dtC - dtA*dtE)))*((hessDtE)+0)[ 0], ((matTmp)+0)[1] += ((2*(dtB*dtC - dtA*dtE)))*((hessDtE)+0 )[1], ((matTmp)+0)[2] += ((2*(dtB*dtC - dtA*dtE)))*((hessDtE) +0)[2]), (((matTmp)+3)[0] += ((2*(dtB*dtC - dtA*dtE)))*((hessDtE )+3)[0], ((matTmp)+3)[1] += ((2*(dtB*dtC - dtA*dtE)))*((hessDtE )+3)[1], ((matTmp)+3)[2] += ((2*(dtB*dtC - dtA*dtE)))*((hessDtE )+3)[2]), (((matTmp)+6)[0] += ((2*(dtB*dtC - dtA*dtE)))*((hessDtE )+6)[0], ((matTmp)+6)[1] += ((2*(dtB*dtC - dtA*dtE)))*((hessDtE )+6)[1], ((matTmp)+6)[2] += ((2*(dtB*dtC - dtA*dtE)))*((hessDtE )+6)[2])); |
| 1009 | ELL_3V_SCALE_ADD3(tmp, dtA, gradDtD,((tmp)[0] = (dtA)*(gradDtD)[0] + (dtD)*(gradDtA)[0] + (-2*dtB )*(gradDtB)[0], (tmp)[1] = (dtA)*(gradDtD)[1] + (dtD)*(gradDtA )[1] + (-2*dtB)*(gradDtB)[1], (tmp)[2] = (dtA)*(gradDtD)[2] + (dtD)*(gradDtA)[2] + (-2*dtB)*(gradDtB)[2]) |
| 1010 | dtD, gradDtA,((tmp)[0] = (dtA)*(gradDtD)[0] + (dtD)*(gradDtA)[0] + (-2*dtB )*(gradDtB)[0], (tmp)[1] = (dtA)*(gradDtD)[1] + (dtD)*(gradDtA )[1] + (-2*dtB)*(gradDtB)[1], (tmp)[2] = (dtA)*(gradDtD)[2] + (dtD)*(gradDtA)[2] + (-2*dtB)*(gradDtB)[2]) |
| 1011 | -2*dtB, gradDtB)((tmp)[0] = (dtA)*(gradDtD)[0] + (dtD)*(gradDtA)[0] + (-2*dtB )*(gradDtB)[0], (tmp)[1] = (dtA)*(gradDtD)[1] + (dtD)*(gradDtA )[1] + (-2*dtB)*(gradDtB)[1], (tmp)[2] = (dtA)*(gradDtD)[2] + (dtD)*(gradDtA)[2] + (-2*dtB)*(gradDtB)[2]); |
| 1012 | ELL_3MV_OUTER_INCR(matTmp, tmp, gradDtF)((((matTmp)+0)[0] += ((tmp)[0])*((gradDtF))[0], ((matTmp)+0)[ 1] += ((tmp)[0])*((gradDtF))[1], ((matTmp)+0)[2] += ((tmp)[0] )*((gradDtF))[2]), (((matTmp)+3)[0] += ((tmp)[1])*((gradDtF)) [0], ((matTmp)+3)[1] += ((tmp)[1])*((gradDtF))[1], ((matTmp)+ 3)[2] += ((tmp)[1])*((gradDtF))[2]), (((matTmp)+6)[0] += ((tmp )[2])*((gradDtF))[0], ((matTmp)+6)[1] += ((tmp)[2])*((gradDtF ))[1], ((matTmp)+6)[2] += ((tmp)[2])*((gradDtF))[2])); |
| 1013 | ELL_3M_SCALE_INCR(matTmp, dtA*dtD - dtB*dtB, hessDtF)((((matTmp)+0)[0] += ((dtA*dtD - dtB*dtB))*((hessDtF)+0)[0], ( (matTmp)+0)[1] += ((dtA*dtD - dtB*dtB))*((hessDtF)+0)[1], ((matTmp )+0)[2] += ((dtA*dtD - dtB*dtB))*((hessDtF)+0)[2]), (((matTmp )+3)[0] += ((dtA*dtD - dtB*dtB))*((hessDtF)+3)[0], ((matTmp)+ 3)[1] += ((dtA*dtD - dtB*dtB))*((hessDtF)+3)[1], ((matTmp)+3) [2] += ((dtA*dtD - dtB*dtB))*((hessDtF)+3)[2]), (((matTmp)+6) [0] += ((dtA*dtD - dtB*dtB))*((hessDtF)+6)[0], ((matTmp)+6)[1 ] += ((dtA*dtD - dtB*dtB))*((hessDtF)+6)[1], ((matTmp)+6)[2] += ((dtA*dtD - dtB*dtB))*((hessDtF)+6)[2])); |
| 1014 | ELL_3M_SCALE(hessCbC, -1, pvl->directAnswer[tenGageDetHessian])((((hessCbC)+0)[0] = ((-1))*((pvl->directAnswer[tenGageDetHessian ])+0)[0], ((hessCbC)+0)[1] = ((-1))*((pvl->directAnswer[tenGageDetHessian ])+0)[1], ((hessCbC)+0)[2] = ((-1))*((pvl->directAnswer[tenGageDetHessian ])+0)[2]), (((hessCbC)+3)[0] = ((-1))*((pvl->directAnswer[ tenGageDetHessian])+3)[0], ((hessCbC)+3)[1] = ((-1))*((pvl-> directAnswer[tenGageDetHessian])+3)[1], ((hessCbC)+3)[2] = (( -1))*((pvl->directAnswer[tenGageDetHessian])+3)[2]), (((hessCbC )+6)[0] = ((-1))*((pvl->directAnswer[tenGageDetHessian])+6 )[0], ((hessCbC)+6)[1] = ((-1))*((pvl->directAnswer[tenGageDetHessian ])+6)[1], ((hessCbC)+6)[2] = ((-1))*((pvl->directAnswer[tenGageDetHessian ])+6)[2])); |
| 1015 | } |
| 1016 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageSHessian)(pvl->query[tenGageSHessian/8] & (1 << (tenGageSHessian % 8)))) { |
| 1017 | hessCbS = matTmp = pvl->directAnswer[tenGageSHessian]; |
| 1018 | ELL_3M_ZERO_SET(matTmp)((((matTmp)+0)[0] = (0), ((matTmp)+0)[1] = (0), ((matTmp)+0)[ 2] = (0)), (((matTmp)+3)[0] = (0), ((matTmp)+3)[1] = (0), ((matTmp )+3)[2] = (0)), (((matTmp)+6)[0] = (0), ((matTmp)+6)[1] = (0) , ((matTmp)+6)[2] = (0))); |
| 1019 | ELL_3M_SCALE_INCR(matTmp, dtB, hessDtB)((((matTmp)+0)[0] += ((dtB))*((hessDtB)+0)[0], ((matTmp)+0)[1 ] += ((dtB))*((hessDtB)+0)[1], ((matTmp)+0)[2] += ((dtB))*((hessDtB )+0)[2]), (((matTmp)+3)[0] += ((dtB))*((hessDtB)+3)[0], ((matTmp )+3)[1] += ((dtB))*((hessDtB)+3)[1], ((matTmp)+3)[2] += ((dtB ))*((hessDtB)+3)[2]), (((matTmp)+6)[0] += ((dtB))*((hessDtB)+ 6)[0], ((matTmp)+6)[1] += ((dtB))*((hessDtB)+6)[1], ((matTmp) +6)[2] += ((dtB))*((hessDtB)+6)[2])); |
| 1020 | ELL_3MV_OUTER_INCR(matTmp, gradDtB, gradDtB)((((matTmp)+0)[0] += ((gradDtB)[0])*((gradDtB))[0], ((matTmp) +0)[1] += ((gradDtB)[0])*((gradDtB))[1], ((matTmp)+0)[2] += ( (gradDtB)[0])*((gradDtB))[2]), (((matTmp)+3)[0] += ((gradDtB) [1])*((gradDtB))[0], ((matTmp)+3)[1] += ((gradDtB)[1])*((gradDtB ))[1], ((matTmp)+3)[2] += ((gradDtB)[1])*((gradDtB))[2]), ((( matTmp)+6)[0] += ((gradDtB)[2])*((gradDtB))[0], ((matTmp)+6)[ 1] += ((gradDtB)[2])*((gradDtB))[1], ((matTmp)+6)[2] += ((gradDtB )[2])*((gradDtB))[2])); |
| 1021 | ELL_3M_SCALE_INCR(matTmp, dtC, hessDtC)((((matTmp)+0)[0] += ((dtC))*((hessDtC)+0)[0], ((matTmp)+0)[1 ] += ((dtC))*((hessDtC)+0)[1], ((matTmp)+0)[2] += ((dtC))*((hessDtC )+0)[2]), (((matTmp)+3)[0] += ((dtC))*((hessDtC)+3)[0], ((matTmp )+3)[1] += ((dtC))*((hessDtC)+3)[1], ((matTmp)+3)[2] += ((dtC ))*((hessDtC)+3)[2]), (((matTmp)+6)[0] += ((dtC))*((hessDtC)+ 6)[0], ((matTmp)+6)[1] += ((dtC))*((hessDtC)+6)[1], ((matTmp) +6)[2] += ((dtC))*((hessDtC)+6)[2])); |
| 1022 | ELL_3MV_OUTER_INCR(matTmp, gradDtC, gradDtC)((((matTmp)+0)[0] += ((gradDtC)[0])*((gradDtC))[0], ((matTmp) +0)[1] += ((gradDtC)[0])*((gradDtC))[1], ((matTmp)+0)[2] += ( (gradDtC)[0])*((gradDtC))[2]), (((matTmp)+3)[0] += ((gradDtC) [1])*((gradDtC))[0], ((matTmp)+3)[1] += ((gradDtC)[1])*((gradDtC ))[1], ((matTmp)+3)[2] += ((gradDtC)[1])*((gradDtC))[2]), ((( matTmp)+6)[0] += ((gradDtC)[2])*((gradDtC))[0], ((matTmp)+6)[ 1] += ((gradDtC)[2])*((gradDtC))[1], ((matTmp)+6)[2] += ((gradDtC )[2])*((gradDtC))[2])); |
| 1023 | ELL_3M_SCALE_INCR(matTmp, dtE, hessDtE)((((matTmp)+0)[0] += ((dtE))*((hessDtE)+0)[0], ((matTmp)+0)[1 ] += ((dtE))*((hessDtE)+0)[1], ((matTmp)+0)[2] += ((dtE))*((hessDtE )+0)[2]), (((matTmp)+3)[0] += ((dtE))*((hessDtE)+3)[0], ((matTmp )+3)[1] += ((dtE))*((hessDtE)+3)[1], ((matTmp)+3)[2] += ((dtE ))*((hessDtE)+3)[2]), (((matTmp)+6)[0] += ((dtE))*((hessDtE)+ 6)[0], ((matTmp)+6)[1] += ((dtE))*((hessDtE)+6)[1], ((matTmp) +6)[2] += ((dtE))*((hessDtE)+6)[2])); |
| 1024 | ELL_3MV_OUTER_INCR(matTmp, gradDtE, gradDtE)((((matTmp)+0)[0] += ((gradDtE)[0])*((gradDtE))[0], ((matTmp) +0)[1] += ((gradDtE)[0])*((gradDtE))[1], ((matTmp)+0)[2] += ( (gradDtE)[0])*((gradDtE))[2]), (((matTmp)+3)[0] += ((gradDtE) [1])*((gradDtE))[0], ((matTmp)+3)[1] += ((gradDtE)[1])*((gradDtE ))[1], ((matTmp)+3)[2] += ((gradDtE)[1])*((gradDtE))[2]), ((( matTmp)+6)[0] += ((gradDtE)[2])*((gradDtE))[0], ((matTmp)+6)[ 1] += ((gradDtE)[2])*((gradDtE))[1], ((matTmp)+6)[2] += ((gradDtE )[2])*((gradDtE))[2])); |
| 1025 | ELL_3M_SCALE(matTmp, 2, matTmp)((((matTmp)+0)[0] = ((2))*((matTmp)+0)[0], ((matTmp)+0)[1] = ( (2))*((matTmp)+0)[1], ((matTmp)+0)[2] = ((2))*((matTmp)+0)[2] ), (((matTmp)+3)[0] = ((2))*((matTmp)+3)[0], ((matTmp)+3)[1] = ((2))*((matTmp)+3)[1], ((matTmp)+3)[2] = ((2))*((matTmp)+3)[ 2]), (((matTmp)+6)[0] = ((2))*((matTmp)+6)[0], ((matTmp)+6)[1 ] = ((2))*((matTmp)+6)[1], ((matTmp)+6)[2] = ((2))*((matTmp)+ 6)[2])); |
| 1026 | ELL_3M_SCALE_INCR(matTmp, dtA, hessDtA)((((matTmp)+0)[0] += ((dtA))*((hessDtA)+0)[0], ((matTmp)+0)[1 ] += ((dtA))*((hessDtA)+0)[1], ((matTmp)+0)[2] += ((dtA))*((hessDtA )+0)[2]), (((matTmp)+3)[0] += ((dtA))*((hessDtA)+3)[0], ((matTmp )+3)[1] += ((dtA))*((hessDtA)+3)[1], ((matTmp)+3)[2] += ((dtA ))*((hessDtA)+3)[2]), (((matTmp)+6)[0] += ((dtA))*((hessDtA)+ 6)[0], ((matTmp)+6)[1] += ((dtA))*((hessDtA)+6)[1], ((matTmp) +6)[2] += ((dtA))*((hessDtA)+6)[2])); |
| 1027 | ELL_3MV_OUTER_INCR(matTmp, gradDtA, gradDtA)((((matTmp)+0)[0] += ((gradDtA)[0])*((gradDtA))[0], ((matTmp) +0)[1] += ((gradDtA)[0])*((gradDtA))[1], ((matTmp)+0)[2] += ( (gradDtA)[0])*((gradDtA))[2]), (((matTmp)+3)[0] += ((gradDtA) [1])*((gradDtA))[0], ((matTmp)+3)[1] += ((gradDtA)[1])*((gradDtA ))[1], ((matTmp)+3)[2] += ((gradDtA)[1])*((gradDtA))[2]), ((( matTmp)+6)[0] += ((gradDtA)[2])*((gradDtA))[0], ((matTmp)+6)[ 1] += ((gradDtA)[2])*((gradDtA))[1], ((matTmp)+6)[2] += ((gradDtA )[2])*((gradDtA))[2])); |
| 1028 | ELL_3M_SCALE_INCR(matTmp, dtD, hessDtD)((((matTmp)+0)[0] += ((dtD))*((hessDtD)+0)[0], ((matTmp)+0)[1 ] += ((dtD))*((hessDtD)+0)[1], ((matTmp)+0)[2] += ((dtD))*((hessDtD )+0)[2]), (((matTmp)+3)[0] += ((dtD))*((hessDtD)+3)[0], ((matTmp )+3)[1] += ((dtD))*((hessDtD)+3)[1], ((matTmp)+3)[2] += ((dtD ))*((hessDtD)+3)[2]), (((matTmp)+6)[0] += ((dtD))*((hessDtD)+ 6)[0], ((matTmp)+6)[1] += ((dtD))*((hessDtD)+6)[1], ((matTmp) +6)[2] += ((dtD))*((hessDtD)+6)[2])); |
| 1029 | ELL_3MV_OUTER_INCR(matTmp, gradDtD, gradDtD)((((matTmp)+0)[0] += ((gradDtD)[0])*((gradDtD))[0], ((matTmp) +0)[1] += ((gradDtD)[0])*((gradDtD))[1], ((matTmp)+0)[2] += ( (gradDtD)[0])*((gradDtD))[2]), (((matTmp)+3)[0] += ((gradDtD) [1])*((gradDtD))[0], ((matTmp)+3)[1] += ((gradDtD)[1])*((gradDtD ))[1], ((matTmp)+3)[2] += ((gradDtD)[1])*((gradDtD))[2]), ((( matTmp)+6)[0] += ((gradDtD)[2])*((gradDtD))[0], ((matTmp)+6)[ 1] += ((gradDtD)[2])*((gradDtD))[1], ((matTmp)+6)[2] += ((gradDtD )[2])*((gradDtD))[2])); |
| 1030 | ELL_3M_SCALE_INCR(matTmp, dtF, hessDtF)((((matTmp)+0)[0] += ((dtF))*((hessDtF)+0)[0], ((matTmp)+0)[1 ] += ((dtF))*((hessDtF)+0)[1], ((matTmp)+0)[2] += ((dtF))*((hessDtF )+0)[2]), (((matTmp)+3)[0] += ((dtF))*((hessDtF)+3)[0], ((matTmp )+3)[1] += ((dtF))*((hessDtF)+3)[1], ((matTmp)+3)[2] += ((dtF ))*((hessDtF)+3)[2]), (((matTmp)+6)[0] += ((dtF))*((hessDtF)+ 6)[0], ((matTmp)+6)[1] += ((dtF))*((hessDtF)+6)[1], ((matTmp) +6)[2] += ((dtF))*((hessDtF)+6)[2])); |
| 1031 | ELL_3MV_OUTER_INCR(matTmp, gradDtF, gradDtF)((((matTmp)+0)[0] += ((gradDtF)[0])*((gradDtF))[0], ((matTmp) +0)[1] += ((gradDtF)[0])*((gradDtF))[1], ((matTmp)+0)[2] += ( (gradDtF)[0])*((gradDtF))[2]), (((matTmp)+3)[0] += ((gradDtF) [1])*((gradDtF))[0], ((matTmp)+3)[1] += ((gradDtF)[1])*((gradDtF ))[1], ((matTmp)+3)[2] += ((gradDtF)[1])*((gradDtF))[2]), ((( matTmp)+6)[0] += ((gradDtF)[2])*((gradDtF))[0], ((matTmp)+6)[ 1] += ((gradDtF)[2])*((gradDtF))[1], ((matTmp)+6)[2] += ((gradDtF )[2])*((gradDtF))[2])); |
| 1032 | ELL_3M_SCALE(matTmp, 2, matTmp)((((matTmp)+0)[0] = ((2))*((matTmp)+0)[0], ((matTmp)+0)[1] = ( (2))*((matTmp)+0)[1], ((matTmp)+0)[2] = ((2))*((matTmp)+0)[2] ), (((matTmp)+3)[0] = ((2))*((matTmp)+3)[0], ((matTmp)+3)[1] = ((2))*((matTmp)+3)[1], ((matTmp)+3)[2] = ((2))*((matTmp)+3)[ 2]), (((matTmp)+6)[0] = ((2))*((matTmp)+6)[0], ((matTmp)+6)[1 ] = ((2))*((matTmp)+6)[1], ((matTmp)+6)[2] = ((2))*((matTmp)+ 6)[2])); |
| 1033 | } |
| 1034 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageQHessian)(pvl->query[tenGageQHessian/8] & (1 << (tenGageQHessian % 8)))) { |
| 1035 | hessCbQ = pvl->directAnswer[tenGageQHessian]; |
| 1036 | ELL_3M_SCALE_ADD2(hessCbQ,((((hessCbQ)+0)[0] = ((1.0/9))*((hessCbS)+0)[0] + ((-1.0/9))* ((hessCbB)+0)[0], ((hessCbQ)+0)[1] = ((1.0/9))*((hessCbS)+0)[ 1] + ((-1.0/9))*((hessCbB)+0)[1], ((hessCbQ)+0)[2] = ((1.0/9) )*((hessCbS)+0)[2] + ((-1.0/9))*((hessCbB)+0)[2]), (((hessCbQ )+3)[0] = ((1.0/9))*((hessCbS)+3)[0] + ((-1.0/9))*((hessCbB)+ 3)[0], ((hessCbQ)+3)[1] = ((1.0/9))*((hessCbS)+3)[1] + ((-1.0 /9))*((hessCbB)+3)[1], ((hessCbQ)+3)[2] = ((1.0/9))*((hessCbS )+3)[2] + ((-1.0/9))*((hessCbB)+3)[2]), (((hessCbQ)+6)[0] = ( (1.0/9))*((hessCbS)+6)[0] + ((-1.0/9))*((hessCbB)+6)[0], ((hessCbQ )+6)[1] = ((1.0/9))*((hessCbS)+6)[1] + ((-1.0/9))*((hessCbB)+ 6)[1], ((hessCbQ)+6)[2] = ((1.0/9))*((hessCbS)+6)[2] + ((-1.0 /9))*((hessCbB)+6)[2])) |
| 1037 | 1.0/9, hessCbS,((((hessCbQ)+0)[0] = ((1.0/9))*((hessCbS)+0)[0] + ((-1.0/9))* ((hessCbB)+0)[0], ((hessCbQ)+0)[1] = ((1.0/9))*((hessCbS)+0)[ 1] + ((-1.0/9))*((hessCbB)+0)[1], ((hessCbQ)+0)[2] = ((1.0/9) )*((hessCbS)+0)[2] + ((-1.0/9))*((hessCbB)+0)[2]), (((hessCbQ )+3)[0] = ((1.0/9))*((hessCbS)+3)[0] + ((-1.0/9))*((hessCbB)+ 3)[0], ((hessCbQ)+3)[1] = ((1.0/9))*((hessCbS)+3)[1] + ((-1.0 /9))*((hessCbB)+3)[1], ((hessCbQ)+3)[2] = ((1.0/9))*((hessCbS )+3)[2] + ((-1.0/9))*((hessCbB)+3)[2]), (((hessCbQ)+6)[0] = ( (1.0/9))*((hessCbS)+6)[0] + ((-1.0/9))*((hessCbB)+6)[0], ((hessCbQ )+6)[1] = ((1.0/9))*((hessCbS)+6)[1] + ((-1.0/9))*((hessCbB)+ 6)[1], ((hessCbQ)+6)[2] = ((1.0/9))*((hessCbS)+6)[2] + ((-1.0 /9))*((hessCbB)+6)[2])) |
| 1038 | -1.0/9, hessCbB)((((hessCbQ)+0)[0] = ((1.0/9))*((hessCbS)+0)[0] + ((-1.0/9))* ((hessCbB)+0)[0], ((hessCbQ)+0)[1] = ((1.0/9))*((hessCbS)+0)[ 1] + ((-1.0/9))*((hessCbB)+0)[1], ((hessCbQ)+0)[2] = ((1.0/9) )*((hessCbS)+0)[2] + ((-1.0/9))*((hessCbB)+0)[2]), (((hessCbQ )+3)[0] = ((1.0/9))*((hessCbS)+3)[0] + ((-1.0/9))*((hessCbB)+ 3)[0], ((hessCbQ)+3)[1] = ((1.0/9))*((hessCbS)+3)[1] + ((-1.0 /9))*((hessCbB)+3)[1], ((hessCbQ)+3)[2] = ((1.0/9))*((hessCbS )+3)[2] + ((-1.0/9))*((hessCbB)+3)[2]), (((hessCbQ)+6)[0] = ( (1.0/9))*((hessCbS)+6)[0] + ((-1.0/9))*((hessCbB)+6)[0], ((hessCbQ )+6)[1] = ((1.0/9))*((hessCbS)+6)[1] + ((-1.0/9))*((hessCbB)+ 6)[1], ((hessCbQ)+6)[2] = ((1.0/9))*((hessCbS)+6)[2] + ((-1.0 /9))*((hessCbB)+6)[2])); |
| 1039 | } |
| 1040 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFAHessian)(pvl->query[tenGageFAHessian/8] & (1 << (tenGageFAHessian % 8)))) { |
| 1041 | double tmpQ, rQ, orQ, oQ, tmpS, rS, orS, oS; |
| 1042 | tmpQ = AIR_MAX(0, cbQ)((0) > (cbQ) ? (0) : (cbQ)); |
| 1043 | tmpS = AIR_MAX(0, cbS)((0) > (cbS) ? (0) : (cbS)); |
| 1044 | oQ = tmpQ ? 1/tmpQ : 0; |
| 1045 | oS = tmpS ? 1/tmpS : 0; |
| 1046 | rQ = sqrt(tmpQ); |
| 1047 | rS = sqrt(tmpS); |
| 1048 | orQ = rQ ? 1/rQ : 0; |
| 1049 | orS = rS ? 1/rS : 0; |
| 1050 | matTmp = pvl->directAnswer[tenGageFAHessian]; |
| 1051 | ELL_3M_ZERO_SET(matTmp)((((matTmp)+0)[0] = (0), ((matTmp)+0)[1] = (0), ((matTmp)+0)[ 2] = (0)), (((matTmp)+3)[0] = (0), ((matTmp)+3)[1] = (0), ((matTmp )+3)[2] = (0)), (((matTmp)+6)[0] = (0), ((matTmp)+6)[1] = (0) , ((matTmp)+6)[2] = (0))); |
| 1052 | ELL_3M_SCALE_INCR(matTmp, orS*orQ, hessCbQ)((((matTmp)+0)[0] += ((orS*orQ))*((hessCbQ)+0)[0], ((matTmp)+ 0)[1] += ((orS*orQ))*((hessCbQ)+0)[1], ((matTmp)+0)[2] += ((orS *orQ))*((hessCbQ)+0)[2]), (((matTmp)+3)[0] += ((orS*orQ))*((hessCbQ )+3)[0], ((matTmp)+3)[1] += ((orS*orQ))*((hessCbQ)+3)[1], ((matTmp )+3)[2] += ((orS*orQ))*((hessCbQ)+3)[2]), (((matTmp)+6)[0] += ((orS*orQ))*((hessCbQ)+6)[0], ((matTmp)+6)[1] += ((orS*orQ)) *((hessCbQ)+6)[1], ((matTmp)+6)[2] += ((orS*orQ))*((hessCbQ)+ 6)[2])); |
| 1053 | ELL_3M_SCALE_INCR(matTmp, -rQ*orS*oS, hessCbS)((((matTmp)+0)[0] += ((-rQ*orS*oS))*((hessCbS)+0)[0], ((matTmp )+0)[1] += ((-rQ*orS*oS))*((hessCbS)+0)[1], ((matTmp)+0)[2] += ((-rQ*orS*oS))*((hessCbS)+0)[2]), (((matTmp)+3)[0] += ((-rQ* orS*oS))*((hessCbS)+3)[0], ((matTmp)+3)[1] += ((-rQ*orS*oS))* ((hessCbS)+3)[1], ((matTmp)+3)[2] += ((-rQ*orS*oS))*((hessCbS )+3)[2]), (((matTmp)+6)[0] += ((-rQ*orS*oS))*((hessCbS)+6)[0] , ((matTmp)+6)[1] += ((-rQ*orS*oS))*((hessCbS)+6)[1], ((matTmp )+6)[2] += ((-rQ*orS*oS))*((hessCbS)+6)[2])); |
| 1054 | ELL_3MV_SCALE_OUTER_INCR(matTmp, -orS*orQ*oQ/2, gradCbQ, gradCbQ)((((matTmp)+0)[0] += ((-orS*orQ*oQ/2)*(gradCbQ)[0])*((gradCbQ ))[0], ((matTmp)+0)[1] += ((-orS*orQ*oQ/2)*(gradCbQ)[0])*((gradCbQ ))[1], ((matTmp)+0)[2] += ((-orS*orQ*oQ/2)*(gradCbQ)[0])*((gradCbQ ))[2]), (((matTmp)+3)[0] += ((-orS*orQ*oQ/2)*(gradCbQ)[1])*(( gradCbQ))[0], ((matTmp)+3)[1] += ((-orS*orQ*oQ/2)*(gradCbQ)[1 ])*((gradCbQ))[1], ((matTmp)+3)[2] += ((-orS*orQ*oQ/2)*(gradCbQ )[1])*((gradCbQ))[2]), (((matTmp)+6)[0] += ((-orS*orQ*oQ/2)*( gradCbQ)[2])*((gradCbQ))[0], ((matTmp)+6)[1] += ((-orS*orQ*oQ /2)*(gradCbQ)[2])*((gradCbQ))[1], ((matTmp)+6)[2] += ((-orS*orQ *oQ/2)*(gradCbQ)[2])*((gradCbQ))[2])); |
| 1055 | ELL_3MV_SCALE_OUTER_INCR(matTmp, 3*rQ*orS*oS*oS/2, gradCbS, gradCbS)((((matTmp)+0)[0] += ((3*rQ*orS*oS*oS/2)*(gradCbS)[0])*((gradCbS ))[0], ((matTmp)+0)[1] += ((3*rQ*orS*oS*oS/2)*(gradCbS)[0])*( (gradCbS))[1], ((matTmp)+0)[2] += ((3*rQ*orS*oS*oS/2)*(gradCbS )[0])*((gradCbS))[2]), (((matTmp)+3)[0] += ((3*rQ*orS*oS*oS/2 )*(gradCbS)[1])*((gradCbS))[0], ((matTmp)+3)[1] += ((3*rQ*orS *oS*oS/2)*(gradCbS)[1])*((gradCbS))[1], ((matTmp)+3)[2] += (( 3*rQ*orS*oS*oS/2)*(gradCbS)[1])*((gradCbS))[2]), (((matTmp)+6 )[0] += ((3*rQ*orS*oS*oS/2)*(gradCbS)[2])*((gradCbS))[0], ((matTmp )+6)[1] += ((3*rQ*orS*oS*oS/2)*(gradCbS)[2])*((gradCbS))[1], ( (matTmp)+6)[2] += ((3*rQ*orS*oS*oS/2)*(gradCbS)[2])*((gradCbS ))[2])); |
| 1056 | ELL_3MV_SCALE_OUTER_INCR(matTmp, -orS*oS*orQ/2, gradCbS, gradCbQ)((((matTmp)+0)[0] += ((-orS*oS*orQ/2)*(gradCbS)[0])*((gradCbQ ))[0], ((matTmp)+0)[1] += ((-orS*oS*orQ/2)*(gradCbS)[0])*((gradCbQ ))[1], ((matTmp)+0)[2] += ((-orS*oS*orQ/2)*(gradCbS)[0])*((gradCbQ ))[2]), (((matTmp)+3)[0] += ((-orS*oS*orQ/2)*(gradCbS)[1])*(( gradCbQ))[0], ((matTmp)+3)[1] += ((-orS*oS*orQ/2)*(gradCbS)[1 ])*((gradCbQ))[1], ((matTmp)+3)[2] += ((-orS*oS*orQ/2)*(gradCbS )[1])*((gradCbQ))[2]), (((matTmp)+6)[0] += ((-orS*oS*orQ/2)*( gradCbS)[2])*((gradCbQ))[0], ((matTmp)+6)[1] += ((-orS*oS*orQ /2)*(gradCbS)[2])*((gradCbQ))[1], ((matTmp)+6)[2] += ((-orS*oS *orQ/2)*(gradCbS)[2])*((gradCbQ))[2])); |
| 1057 | ELL_3MV_SCALE_OUTER_INCR(matTmp, -orQ*orS*oS/2, gradCbQ, gradCbS)((((matTmp)+0)[0] += ((-orQ*orS*oS/2)*(gradCbQ)[0])*((gradCbS ))[0], ((matTmp)+0)[1] += ((-orQ*orS*oS/2)*(gradCbQ)[0])*((gradCbS ))[1], ((matTmp)+0)[2] += ((-orQ*orS*oS/2)*(gradCbQ)[0])*((gradCbS ))[2]), (((matTmp)+3)[0] += ((-orQ*orS*oS/2)*(gradCbQ)[1])*(( gradCbS))[0], ((matTmp)+3)[1] += ((-orQ*orS*oS/2)*(gradCbQ)[1 ])*((gradCbS))[1], ((matTmp)+3)[2] += ((-orQ*orS*oS/2)*(gradCbQ )[1])*((gradCbS))[2]), (((matTmp)+6)[0] += ((-orQ*orS*oS/2)*( gradCbQ)[2])*((gradCbS))[0], ((matTmp)+6)[1] += ((-orQ*orS*oS /2)*(gradCbQ)[2])*((gradCbS))[1], ((matTmp)+6)[2] += ((-orQ*orS *oS/2)*(gradCbQ)[2])*((gradCbS))[2])); |
| 1058 | ELL_3M_SCALE(matTmp, 3.0/2, matTmp)((((matTmp)+0)[0] = ((3.0/2))*((matTmp)+0)[0], ((matTmp)+0)[1 ] = ((3.0/2))*((matTmp)+0)[1], ((matTmp)+0)[2] = ((3.0/2))*(( matTmp)+0)[2]), (((matTmp)+3)[0] = ((3.0/2))*((matTmp)+3)[0], ((matTmp)+3)[1] = ((3.0/2))*((matTmp)+3)[1], ((matTmp)+3)[2] = ((3.0/2))*((matTmp)+3)[2]), (((matTmp)+6)[0] = ((3.0/2))*( (matTmp)+6)[0], ((matTmp)+6)[1] = ((3.0/2))*((matTmp)+6)[1], ( (matTmp)+6)[2] = ((3.0/2))*((matTmp)+6)[2])); |
| 1059 | } |
| 1060 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFAHessianEvec)(pvl->query[tenGageFAHessianEvec/8] & (1 << (tenGageFAHessianEvec % 8)))) { |
| 1061 | ell_3m_eigensolve_d(pvl->directAnswer[tenGageFAHessianEval], |
| 1062 | pvl->directAnswer[tenGageFAHessianEvec], |
| 1063 | pvl->directAnswer[tenGageFAHessian], AIR_TRUE1); |
| 1064 | } else if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFAHessianEval)(pvl->query[tenGageFAHessianEval/8] & (1 << (tenGageFAHessianEval % 8)))) { |
| 1065 | ell_3m_eigenvalues_d(pvl->directAnswer[tenGageFAHessianEval], |
| 1066 | pvl->directAnswer[tenGageFAHessian], AIR_TRUE1); |
| 1067 | } |
| 1068 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFAHessianFrob)(pvl->query[tenGageFAHessianFrob/8] & (1 << (tenGageFAHessianFrob % 8)))) { |
| 1069 | pvl->directAnswer[tenGageFAHessianFrob][0] |
| 1070 | = ELL_3M_FROB(pvl->directAnswer[tenGageFAHessian])(sqrt((((pvl->directAnswer[tenGageFAHessian])+0)[0]*((pvl-> directAnswer[tenGageFAHessian])+0)[0] + ((pvl->directAnswer [tenGageFAHessian])+0)[1]*((pvl->directAnswer[tenGageFAHessian ])+0)[1] + ((pvl->directAnswer[tenGageFAHessian])+0)[2]*(( pvl->directAnswer[tenGageFAHessian])+0)[2]) + (((pvl->directAnswer [tenGageFAHessian])+3)[0]*((pvl->directAnswer[tenGageFAHessian ])+3)[0] + ((pvl->directAnswer[tenGageFAHessian])+3)[1]*(( pvl->directAnswer[tenGageFAHessian])+3)[1] + ((pvl->directAnswer [tenGageFAHessian])+3)[2]*((pvl->directAnswer[tenGageFAHessian ])+3)[2]) + (((pvl->directAnswer[tenGageFAHessian])+6)[0]* ((pvl->directAnswer[tenGageFAHessian])+6)[0] + ((pvl->directAnswer [tenGageFAHessian])+6)[1]*((pvl->directAnswer[tenGageFAHessian ])+6)[1] + ((pvl->directAnswer[tenGageFAHessian])+6)[2]*(( pvl->directAnswer[tenGageFAHessian])+6)[2]))); |
| 1071 | } |
| 1072 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFARidgeSurfaceStrength)(pvl->query[tenGageFARidgeSurfaceStrength/8] & (1 << (tenGageFARidgeSurfaceStrength % 8)))) { |
| 1073 | double ev; |
| 1074 | ev = -pvl->directAnswer[tenGageFAHessianEval][2]; |
| 1075 | ev = AIR_MAX(0, ev)((0) > (ev) ? (0) : (ev)); |
| 1076 | pvl->directAnswer[tenGageFARidgeSurfaceStrength][0] = tenAns[0]*ev; |
| 1077 | } |
| 1078 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFAValleySurfaceStrength)(pvl->query[tenGageFAValleySurfaceStrength/8] & (1 << (tenGageFAValleySurfaceStrength % 8)))) { |
| 1079 | double ev; |
| 1080 | ev = pvl->directAnswer[tenGageFAHessianEval][0]; |
| 1081 | ev = AIR_MAX(0, ev)((0) > (ev) ? (0) : (ev)); |
| 1082 | pvl->directAnswer[tenGageFAValleySurfaceStrength][0] = tenAns[0]*ev; |
| 1083 | } |
| 1084 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFALaplacian)(pvl->query[tenGageFALaplacian/8] & (1 << (tenGageFALaplacian % 8)))) { |
| 1085 | double *hess; |
| 1086 | hess = pvl->directAnswer[tenGageFAHessian]; |
| 1087 | pvl->directAnswer[tenGageFALaplacian][0] = hess[0] + hess[4] + hess[8]; |
| 1088 | } |
| 1089 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFAHessianEvalMode)(pvl->query[tenGageFAHessianEvalMode/8] & (1 << ( tenGageFAHessianEvalMode % 8)))) { |
| 1090 | double *heval; |
| 1091 | heval = pvl->directAnswer[tenGageFAHessianEval]; |
| 1092 | pvl->directAnswer[tenGageFAHessianEvalMode][0] = airMode3_d(heval); |
| 1093 | } |
| 1094 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFARidgeLineAlignment)(pvl->query[tenGageFARidgeLineAlignment/8] & (1 << (tenGageFARidgeLineAlignment % 8)))) { |
| 1095 | double *hev0, *dev0, dot, mde; |
| 1096 | hev0 = pvl->directAnswer[tenGageFAHessianEvec0]; |
| 1097 | dev0 = pvl->directAnswer[tenGageEvec0]; |
| 1098 | dot = ELL_3V_DOT(hev0, dev0)((hev0)[0]*(dev0)[0] + (hev0)[1]*(dev0)[1] + (hev0)[2]*(dev0) [2]); |
| 1099 | mde = pvl->directAnswer[tenGageFAHessianEvalMode][0]; |
| 1100 | mde = AIR_AFFINE(-1, mde, 1, 0, 1)( ((double)(1)-(0))*((double)(mde)-(-1)) / ((double)(1)-(-1)) + (0)); |
| 1101 | pvl->directAnswer[tenGageFARidgeLineAlignment][0] = mde*dot*dot; |
| 1102 | } |
| 1103 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFARidgeSurfaceAlignment)(pvl->query[tenGageFARidgeSurfaceAlignment/8] & (1 << (tenGageFARidgeSurfaceAlignment % 8)))) { |
| 1104 | double *hev2, *dev0, dot, mde; |
| 1105 | hev2 = pvl->directAnswer[tenGageFAHessianEvec2]; |
| 1106 | dev0 = pvl->directAnswer[tenGageEvec0]; |
| 1107 | dot = ELL_3V_DOT(hev2, dev0)((hev2)[0]*(dev0)[0] + (hev2)[1]*(dev0)[1] + (hev2)[2]*(dev0) [2]); |
| 1108 | mde = pvl->directAnswer[tenGageFAHessianEvalMode][0]; |
| 1109 | mde = AIR_AFFINE(-1, mde, 1, 1, 0)( ((double)(0)-(1))*((double)(mde)-(-1)) / ((double)(1)-(-1)) + (1)); |
| 1110 | pvl->directAnswer[tenGageFARidgeSurfaceAlignment][0]= mde*(1-dot*dot); |
| 1111 | } |
| 1112 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFA2ndDD)(pvl->query[tenGageFA2ndDD/8] & (1 << (tenGageFA2ndDD % 8)))) { |
| 1113 | double *hess, *norm, tmpv[3]; |
| 1114 | hess = pvl->directAnswer[tenGageFAHessian]; |
| 1115 | norm = pvl->directAnswer[tenGageFANormal]; |
| 1116 | ELL_3MV_MUL(tmpv, hess, norm)((tmpv)[0] = (hess)[0]*(norm)[0] + (hess)[1]*(norm)[1] + (hess )[2]*(norm)[2], (tmpv)[1] = (hess)[3]*(norm)[0] + (hess)[4]*( norm)[1] + (hess)[5]*(norm)[2], (tmpv)[2] = (hess)[6]*(norm)[ 0] + (hess)[7]*(norm)[1] + (hess)[8]*(norm)[2]); |
| 1117 | pvl->directAnswer[tenGageFA2ndDD][0] = ELL_3V_DOT(norm, tmpv)((norm)[0]*(tmpv)[0] + (norm)[1]*(tmpv)[1] + (norm)[2]*(tmpv) [2]); |
| 1118 | } |
| 1119 | |
| 1120 | /* HEY: lots of this is copy/paste from gage/sclanswer.c */ |
| 1121 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFAGeomTens)(pvl->query[tenGageFAGeomTens/8] & (1 << (tenGageFAGeomTens % 8)))) { |
| 1122 | double denom, *fahess, *fagmag, tmpMat[9], *fnorm, nPerp[9], sHess[9]; |
| 1123 | |
| 1124 | fahess = pvl->directAnswer[tenGageFAHessian]; |
| 1125 | fagmag = pvl->directAnswer[tenGageFAGradMag]; |
| 1126 | fnorm = pvl->directAnswer[tenGageFANormal]; |
| 1127 | denom = (*fagmag) ? 1.0/(*fagmag) : 0.0; |
| 1128 | ELL_3M_SCALE(sHess, denom, fahess)((((sHess)+0)[0] = ((denom))*((fahess)+0)[0], ((sHess)+0)[1] = ((denom))*((fahess)+0)[1], ((sHess)+0)[2] = ((denom))*((fahess )+0)[2]), (((sHess)+3)[0] = ((denom))*((fahess)+3)[0], ((sHess )+3)[1] = ((denom))*((fahess)+3)[1], ((sHess)+3)[2] = ((denom ))*((fahess)+3)[2]), (((sHess)+6)[0] = ((denom))*((fahess)+6) [0], ((sHess)+6)[1] = ((denom))*((fahess)+6)[1], ((sHess)+6)[ 2] = ((denom))*((fahess)+6)[2])); |
| 1129 | ELL_3M_IDENTITY_SET(nPerp)((((nPerp)+0)[0] = (1), ((nPerp)+0)[1] = (0), ((nPerp)+0)[2] = (0)), (((nPerp)+3)[0] = (0), ((nPerp)+3)[1] = (1), ((nPerp)+ 3)[2] = (0)), (((nPerp)+6)[0] = (0), ((nPerp)+6)[1] = (0), (( nPerp)+6)[2] = (1))); |
| 1130 | ELL_3MV_SCALE_OUTER_INCR(nPerp, -1, fnorm, fnorm)((((nPerp)+0)[0] += ((-1)*(fnorm)[0])*((fnorm))[0], ((nPerp)+ 0)[1] += ((-1)*(fnorm)[0])*((fnorm))[1], ((nPerp)+0)[2] += (( -1)*(fnorm)[0])*((fnorm))[2]), (((nPerp)+3)[0] += ((-1)*(fnorm )[1])*((fnorm))[0], ((nPerp)+3)[1] += ((-1)*(fnorm)[1])*((fnorm ))[1], ((nPerp)+3)[2] += ((-1)*(fnorm)[1])*((fnorm))[2]), ((( nPerp)+6)[0] += ((-1)*(fnorm)[2])*((fnorm))[0], ((nPerp)+6)[1 ] += ((-1)*(fnorm)[2])*((fnorm))[1], ((nPerp)+6)[2] += ((-1)* (fnorm)[2])*((fnorm))[2])); |
| 1131 | /* gten = nPerp * sHess * nPerp */ |
| 1132 | ELL_3M_MUL(tmpMat, sHess, nPerp)((tmpMat)[0] = (sHess)[0]*(nPerp)[0] + (sHess)[1]*(nPerp)[3] + (sHess)[2]*(nPerp)[6], (tmpMat)[1] = (sHess)[0]*(nPerp)[1] + (sHess)[1]*(nPerp)[4] + (sHess)[2]*(nPerp)[7], (tmpMat)[2] = (sHess)[0]*(nPerp)[2] + (sHess)[1]*(nPerp)[5] + (sHess)[2]*( nPerp)[8], (tmpMat)[3] = (sHess)[3]*(nPerp)[0] + (sHess)[4]*( nPerp)[3] + (sHess)[5]*(nPerp)[6], (tmpMat)[4] = (sHess)[3]*( nPerp)[1] + (sHess)[4]*(nPerp)[4] + (sHess)[5]*(nPerp)[7], (tmpMat )[5] = (sHess)[3]*(nPerp)[2] + (sHess)[4]*(nPerp)[5] + (sHess )[5]*(nPerp)[8], (tmpMat)[6] = (sHess)[6]*(nPerp)[0] + (sHess )[7]*(nPerp)[3] + (sHess)[8]*(nPerp)[6], (tmpMat)[7] = (sHess )[6]*(nPerp)[1] + (sHess)[7]*(nPerp)[4] + (sHess)[8]*(nPerp)[ 7], (tmpMat)[8] = (sHess)[6]*(nPerp)[2] + (sHess)[7]*(nPerp)[ 5] + (sHess)[8]*(nPerp)[8]); |
| 1133 | ELL_3M_MUL(pvl->directAnswer[tenGageFAGeomTens], nPerp, tmpMat)((pvl->directAnswer[tenGageFAGeomTens])[0] = (nPerp)[0]*(tmpMat )[0] + (nPerp)[1]*(tmpMat)[3] + (nPerp)[2]*(tmpMat)[6], (pvl-> directAnswer[tenGageFAGeomTens])[1] = (nPerp)[0]*(tmpMat)[1] + (nPerp)[1]*(tmpMat)[4] + (nPerp)[2]*(tmpMat)[7], (pvl->directAnswer [tenGageFAGeomTens])[2] = (nPerp)[0]*(tmpMat)[2] + (nPerp)[1] *(tmpMat)[5] + (nPerp)[2]*(tmpMat)[8], (pvl->directAnswer[ tenGageFAGeomTens])[3] = (nPerp)[3]*(tmpMat)[0] + (nPerp)[4]* (tmpMat)[3] + (nPerp)[5]*(tmpMat)[6], (pvl->directAnswer[tenGageFAGeomTens ])[4] = (nPerp)[3]*(tmpMat)[1] + (nPerp)[4]*(tmpMat)[4] + (nPerp )[5]*(tmpMat)[7], (pvl->directAnswer[tenGageFAGeomTens])[5 ] = (nPerp)[3]*(tmpMat)[2] + (nPerp)[4]*(tmpMat)[5] + (nPerp) [5]*(tmpMat)[8], (pvl->directAnswer[tenGageFAGeomTens])[6] = (nPerp)[6]*(tmpMat)[0] + (nPerp)[7]*(tmpMat)[3] + (nPerp)[ 8]*(tmpMat)[6], (pvl->directAnswer[tenGageFAGeomTens])[7] = (nPerp)[6]*(tmpMat)[1] + (nPerp)[7]*(tmpMat)[4] + (nPerp)[8] *(tmpMat)[7], (pvl->directAnswer[tenGageFAGeomTens])[8] = ( nPerp)[6]*(tmpMat)[2] + (nPerp)[7]*(tmpMat)[5] + (nPerp)[8]*( tmpMat)[8]); |
| 1134 | } |
| 1135 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFATotalCurv)(pvl->query[tenGageFATotalCurv/8] & (1 << (tenGageFATotalCurv % 8)))) { |
| 1136 | pvl->directAnswer[tenGageFATotalCurv][0] = |
| 1137 | ELL_3M_FROB(pvl->directAnswer[tenGageFAGeomTens])(sqrt((((pvl->directAnswer[tenGageFAGeomTens])+0)[0]*((pvl ->directAnswer[tenGageFAGeomTens])+0)[0] + ((pvl->directAnswer [tenGageFAGeomTens])+0)[1]*((pvl->directAnswer[tenGageFAGeomTens ])+0)[1] + ((pvl->directAnswer[tenGageFAGeomTens])+0)[2]*( (pvl->directAnswer[tenGageFAGeomTens])+0)[2]) + (((pvl-> directAnswer[tenGageFAGeomTens])+3)[0]*((pvl->directAnswer [tenGageFAGeomTens])+3)[0] + ((pvl->directAnswer[tenGageFAGeomTens ])+3)[1]*((pvl->directAnswer[tenGageFAGeomTens])+3)[1] + ( (pvl->directAnswer[tenGageFAGeomTens])+3)[2]*((pvl->directAnswer [tenGageFAGeomTens])+3)[2]) + (((pvl->directAnswer[tenGageFAGeomTens ])+6)[0]*((pvl->directAnswer[tenGageFAGeomTens])+6)[0] + ( (pvl->directAnswer[tenGageFAGeomTens])+6)[1]*((pvl->directAnswer [tenGageFAGeomTens])+6)[1] + ((pvl->directAnswer[tenGageFAGeomTens ])+6)[2]*((pvl->directAnswer[tenGageFAGeomTens])+6)[2]))); |
| 1138 | } |
| 1139 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFAKappa1)(pvl->query[tenGageFAKappa1/8] & (1 << (tenGageFAKappa1 % 8))) || |
| 1140 | GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFAKappa2)(pvl->query[tenGageFAKappa2/8] & (1 << (tenGageFAKappa2 % 8)))) { |
| 1141 | double *k1, *k2, T, N, D; |
| 1142 | k1 = pvl->directAnswer[tenGageFAKappa1]; |
| 1143 | k2 = pvl->directAnswer[tenGageFAKappa2]; |
| 1144 | T = ELL_3M_TRACE(pvl->directAnswer[tenGageFAGeomTens])((pvl->directAnswer[tenGageFAGeomTens])[0] + (pvl->directAnswer [tenGageFAGeomTens])[4] + (pvl->directAnswer[tenGageFAGeomTens ])[8]); |
| 1145 | N = pvl->directAnswer[tenGageFATotalCurv][0]; |
| 1146 | D = 2*N*N - T*T; |
| 1147 | D = AIR_MAX(D, 0)((D) > (0) ? (D) : (0)); |
| 1148 | D = sqrt(D); |
| 1149 | k1[0] = 0.5*(T + D); |
| 1150 | k2[0] = 0.5*(T - D); |
| 1151 | } |
| 1152 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFAMeanCurv)(pvl->query[tenGageFAMeanCurv/8] & (1 << (tenGageFAMeanCurv % 8)))) { |
| 1153 | double k1, k2; |
| 1154 | k1 = pvl->directAnswer[tenGageFAKappa1][0]; |
| 1155 | k2 = pvl->directAnswer[tenGageFAKappa2][0]; |
| 1156 | pvl->directAnswer[tenGageFAMeanCurv][0] = (k1 + k2)/2; |
| 1157 | } |
| 1158 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFAShapeIndex)(pvl->query[tenGageFAShapeIndex/8] & (1 << (tenGageFAShapeIndex % 8)))) { |
| 1159 | double k1, k2; |
| 1160 | k1 = pvl->directAnswer[tenGageFAKappa1][0]; |
| 1161 | k2 = pvl->directAnswer[tenGageFAKappa2][0]; |
| 1162 | pvl->directAnswer[tenGageFAShapeIndex][0] = |
| 1163 | -(2/AIR_PI3.14159265358979323846)*atan2(k1 + k2, k1 - k2); |
| 1164 | } |
| 1165 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFAGaussCurv)(pvl->query[tenGageFAGaussCurv/8] & (1 << (tenGageFAGaussCurv % 8)))) { |
| 1166 | double k1, k2; |
| 1167 | k1 = pvl->directAnswer[tenGageFAKappa1][0]; |
| 1168 | k2 = pvl->directAnswer[tenGageFAKappa2][0]; |
| 1169 | pvl->directAnswer[tenGageFAGaussCurv][0] = k1*k2; |
| 1170 | } |
| 1171 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFACurvDir1)(pvl->query[tenGageFACurvDir1/8] & (1 << (tenGageFACurvDir1 % 8)))) { |
| 1172 | double kk, tmpMat[9], tmpVec[3]; |
| 1173 | kk = pvl->directAnswer[tenGageFAKappa2][0]; |
| 1174 | ELL_3M_COPY(tmpMat, pvl->directAnswer[tenGageFAGeomTens])((((tmpMat)+0)[0] = ((pvl->directAnswer[tenGageFAGeomTens] )+0)[0], ((tmpMat)+0)[1] = ((pvl->directAnswer[tenGageFAGeomTens ])+0)[1], ((tmpMat)+0)[2] = ((pvl->directAnswer[tenGageFAGeomTens ])+0)[2]), (((tmpMat)+3)[0] = ((pvl->directAnswer[tenGageFAGeomTens ])+3)[0], ((tmpMat)+3)[1] = ((pvl->directAnswer[tenGageFAGeomTens ])+3)[1], ((tmpMat)+3)[2] = ((pvl->directAnswer[tenGageFAGeomTens ])+3)[2]), (((tmpMat)+6)[0] = ((pvl->directAnswer[tenGageFAGeomTens ])+6)[0], ((tmpMat)+6)[1] = ((pvl->directAnswer[tenGageFAGeomTens ])+6)[1], ((tmpMat)+6)[2] = ((pvl->directAnswer[tenGageFAGeomTens ])+6)[2])); |
| 1175 | tmpMat[0] -= kk; tmpMat[4] -= kk; tmpMat[8] -= kk; |
| 1176 | ell_3m_1d_nullspace_d(tmpVec, tmpMat); |
| 1177 | ELL_3V_COPY(pvl->directAnswer[tenGageFACurvDir1], tmpVec)((pvl->directAnswer[tenGageFACurvDir1])[0] = (tmpVec)[0], ( pvl->directAnswer[tenGageFACurvDir1])[1] = (tmpVec)[1], (pvl ->directAnswer[tenGageFACurvDir1])[2] = (tmpVec)[2]); |
| 1178 | } |
| 1179 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFACurvDir2)(pvl->query[tenGageFACurvDir2/8] & (1 << (tenGageFACurvDir2 % 8)))) { |
| 1180 | double kk, tmpMat[9], tmpVec[3]; |
| 1181 | kk = pvl->directAnswer[tenGageFAKappa1][0]; |
| 1182 | ELL_3M_COPY(tmpMat, pvl->directAnswer[tenGageFAGeomTens])((((tmpMat)+0)[0] = ((pvl->directAnswer[tenGageFAGeomTens] )+0)[0], ((tmpMat)+0)[1] = ((pvl->directAnswer[tenGageFAGeomTens ])+0)[1], ((tmpMat)+0)[2] = ((pvl->directAnswer[tenGageFAGeomTens ])+0)[2]), (((tmpMat)+3)[0] = ((pvl->directAnswer[tenGageFAGeomTens ])+3)[0], ((tmpMat)+3)[1] = ((pvl->directAnswer[tenGageFAGeomTens ])+3)[1], ((tmpMat)+3)[2] = ((pvl->directAnswer[tenGageFAGeomTens ])+3)[2]), (((tmpMat)+6)[0] = ((pvl->directAnswer[tenGageFAGeomTens ])+6)[0], ((tmpMat)+6)[1] = ((pvl->directAnswer[tenGageFAGeomTens ])+6)[1], ((tmpMat)+6)[2] = ((pvl->directAnswer[tenGageFAGeomTens ])+6)[2])); |
| 1183 | tmpMat[0] -= kk; tmpMat[4] -= kk; tmpMat[8] -= kk; |
| 1184 | ell_3m_1d_nullspace_d(tmpVec, tmpMat); |
| 1185 | ELL_3V_COPY(pvl->directAnswer[tenGageFACurvDir1], tmpVec)((pvl->directAnswer[tenGageFACurvDir1])[0] = (tmpVec)[0], ( pvl->directAnswer[tenGageFACurvDir1])[1] = (tmpVec)[1], (pvl ->directAnswer[tenGageFACurvDir1])[2] = (tmpVec)[2]); |
| 1186 | } |
| 1187 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFAFlowlineCurv)(pvl->query[tenGageFAFlowlineCurv/8] & (1 << (tenGageFAFlowlineCurv % 8)))) { |
| 1188 | double *fahess, *fnorm, *fagmag, denom, nPerp[9], nProj[9], |
| 1189 | ncTen[9], sHess[9], tmpMat[9]; |
| 1190 | fnorm = pvl->directAnswer[tenGageFANormal]; |
| 1191 | fahess = pvl->directAnswer[tenGageFAHessian]; |
| 1192 | fagmag = pvl->directAnswer[tenGageFAGradMag]; |
| 1193 | ELL_3MV_OUTER(nProj, fnorm, fnorm)((((nProj)+0)[0] = ((fnorm)[0])*((fnorm))[0], ((nProj)+0)[1] = ((fnorm)[0])*((fnorm))[1], ((nProj)+0)[2] = ((fnorm)[0])*((fnorm ))[2]), (((nProj)+3)[0] = ((fnorm)[1])*((fnorm))[0], ((nProj) +3)[1] = ((fnorm)[1])*((fnorm))[1], ((nProj)+3)[2] = ((fnorm) [1])*((fnorm))[2]), (((nProj)+6)[0] = ((fnorm)[2])*((fnorm))[ 0], ((nProj)+6)[1] = ((fnorm)[2])*((fnorm))[1], ((nProj)+6)[2 ] = ((fnorm)[2])*((fnorm))[2])); |
| 1194 | ELL_3M_IDENTITY_SET(nPerp)((((nPerp)+0)[0] = (1), ((nPerp)+0)[1] = (0), ((nPerp)+0)[2] = (0)), (((nPerp)+3)[0] = (0), ((nPerp)+3)[1] = (1), ((nPerp)+ 3)[2] = (0)), (((nPerp)+6)[0] = (0), ((nPerp)+6)[1] = (0), (( nPerp)+6)[2] = (1))); |
| 1195 | ELL_3M_SCALE_INCR(nPerp, -1, nProj)((((nPerp)+0)[0] += ((-1))*((nProj)+0)[0], ((nPerp)+0)[1] += ( (-1))*((nProj)+0)[1], ((nPerp)+0)[2] += ((-1))*((nProj)+0)[2] ), (((nPerp)+3)[0] += ((-1))*((nProj)+3)[0], ((nPerp)+3)[1] += ((-1))*((nProj)+3)[1], ((nPerp)+3)[2] += ((-1))*((nProj)+3)[ 2]), (((nPerp)+6)[0] += ((-1))*((nProj)+6)[0], ((nPerp)+6)[1] += ((-1))*((nProj)+6)[1], ((nPerp)+6)[2] += ((-1))*((nProj)+ 6)[2])); |
| 1196 | denom = (*fagmag) ? 1.0/(*fagmag) : 0.0; |
| 1197 | ELL_3M_SCALE(sHess, denom, fahess)((((sHess)+0)[0] = ((denom))*((fahess)+0)[0], ((sHess)+0)[1] = ((denom))*((fahess)+0)[1], ((sHess)+0)[2] = ((denom))*((fahess )+0)[2]), (((sHess)+3)[0] = ((denom))*((fahess)+3)[0], ((sHess )+3)[1] = ((denom))*((fahess)+3)[1], ((sHess)+3)[2] = ((denom ))*((fahess)+3)[2]), (((sHess)+6)[0] = ((denom))*((fahess)+6) [0], ((sHess)+6)[1] = ((denom))*((fahess)+6)[1], ((sHess)+6)[ 2] = ((denom))*((fahess)+6)[2])); |
| 1198 | /* ncTen = nPerp * sHess * nProj */ |
| 1199 | ELL_3M_MUL(tmpMat, sHess, nProj)((tmpMat)[0] = (sHess)[0]*(nProj)[0] + (sHess)[1]*(nProj)[3] + (sHess)[2]*(nProj)[6], (tmpMat)[1] = (sHess)[0]*(nProj)[1] + (sHess)[1]*(nProj)[4] + (sHess)[2]*(nProj)[7], (tmpMat)[2] = (sHess)[0]*(nProj)[2] + (sHess)[1]*(nProj)[5] + (sHess)[2]*( nProj)[8], (tmpMat)[3] = (sHess)[3]*(nProj)[0] + (sHess)[4]*( nProj)[3] + (sHess)[5]*(nProj)[6], (tmpMat)[4] = (sHess)[3]*( nProj)[1] + (sHess)[4]*(nProj)[4] + (sHess)[5]*(nProj)[7], (tmpMat )[5] = (sHess)[3]*(nProj)[2] + (sHess)[4]*(nProj)[5] + (sHess )[5]*(nProj)[8], (tmpMat)[6] = (sHess)[6]*(nProj)[0] + (sHess )[7]*(nProj)[3] + (sHess)[8]*(nProj)[6], (tmpMat)[7] = (sHess )[6]*(nProj)[1] + (sHess)[7]*(nProj)[4] + (sHess)[8]*(nProj)[ 7], (tmpMat)[8] = (sHess)[6]*(nProj)[2] + (sHess)[7]*(nProj)[ 5] + (sHess)[8]*(nProj)[8]); |
| 1200 | ELL_3M_MUL(ncTen, nPerp, tmpMat)((ncTen)[0] = (nPerp)[0]*(tmpMat)[0] + (nPerp)[1]*(tmpMat)[3] + (nPerp)[2]*(tmpMat)[6], (ncTen)[1] = (nPerp)[0]*(tmpMat)[1 ] + (nPerp)[1]*(tmpMat)[4] + (nPerp)[2]*(tmpMat)[7], (ncTen)[ 2] = (nPerp)[0]*(tmpMat)[2] + (nPerp)[1]*(tmpMat)[5] + (nPerp )[2]*(tmpMat)[8], (ncTen)[3] = (nPerp)[3]*(tmpMat)[0] + (nPerp )[4]*(tmpMat)[3] + (nPerp)[5]*(tmpMat)[6], (ncTen)[4] = (nPerp )[3]*(tmpMat)[1] + (nPerp)[4]*(tmpMat)[4] + (nPerp)[5]*(tmpMat )[7], (ncTen)[5] = (nPerp)[3]*(tmpMat)[2] + (nPerp)[4]*(tmpMat )[5] + (nPerp)[5]*(tmpMat)[8], (ncTen)[6] = (nPerp)[6]*(tmpMat )[0] + (nPerp)[7]*(tmpMat)[3] + (nPerp)[8]*(tmpMat)[6], (ncTen )[7] = (nPerp)[6]*(tmpMat)[1] + (nPerp)[7]*(tmpMat)[4] + (nPerp )[8]*(tmpMat)[7], (ncTen)[8] = (nPerp)[6]*(tmpMat)[2] + (nPerp )[7]*(tmpMat)[5] + (nPerp)[8]*(tmpMat)[8]); |
| 1201 | pvl->directAnswer[gageSclFlowlineCurv][0] = ELL_3M_FROB(ncTen)(sqrt((((ncTen)+0)[0]*((ncTen)+0)[0] + ((ncTen)+0)[1]*((ncTen )+0)[1] + ((ncTen)+0)[2]*((ncTen)+0)[2]) + (((ncTen)+3)[0]*(( ncTen)+3)[0] + ((ncTen)+3)[1]*((ncTen)+3)[1] + ((ncTen)+3)[2] *((ncTen)+3)[2]) + (((ncTen)+6)[0]*((ncTen)+6)[0] + ((ncTen)+ 6)[1]*((ncTen)+6)[1] + ((ncTen)+6)[2]*((ncTen)+6)[2]))); |
| 1202 | } |
| 1203 | |
| 1204 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageRHessian)(pvl->query[tenGageRHessian/8] & (1 << (tenGageRHessian % 8)))) { |
| 1205 | hessCbR = matTmp = pvl->directAnswer[tenGageRHessian]; |
| 1206 | ELL_3M_ZERO_SET(matTmp)((((matTmp)+0)[0] = (0), ((matTmp)+0)[1] = (0), ((matTmp)+0)[ 2] = (0)), (((matTmp)+3)[0] = (0), ((matTmp)+3)[1] = (0), ((matTmp )+3)[2] = (0)), (((matTmp)+6)[0] = (0), ((matTmp)+6)[1] = (0) , ((matTmp)+6)[2] = (0))); |
| 1207 | ELL_3M_SCALE_INCR(matTmp, 5*cbB - 2*cbS, hessCbA)((((matTmp)+0)[0] += ((5*cbB - 2*cbS))*((hessCbA)+0)[0], ((matTmp )+0)[1] += ((5*cbB - 2*cbS))*((hessCbA)+0)[1], ((matTmp)+0)[2 ] += ((5*cbB - 2*cbS))*((hessCbA)+0)[2]), (((matTmp)+3)[0] += ((5*cbB - 2*cbS))*((hessCbA)+3)[0], ((matTmp)+3)[1] += ((5*cbB - 2*cbS))*((hessCbA)+3)[1], ((matTmp)+3)[2] += ((5*cbB - 2*cbS ))*((hessCbA)+3)[2]), (((matTmp)+6)[0] += ((5*cbB - 2*cbS))*( (hessCbA)+6)[0], ((matTmp)+6)[1] += ((5*cbB - 2*cbS))*((hessCbA )+6)[1], ((matTmp)+6)[2] += ((5*cbB - 2*cbS))*((hessCbA)+6)[2 ])); |
| 1208 | ELL_3MV_SCALE_OUTER_INCR(matTmp, 5, gradCbB, gradCbA)((((matTmp)+0)[0] += ((5)*(gradCbB)[0])*((gradCbA))[0], ((matTmp )+0)[1] += ((5)*(gradCbB)[0])*((gradCbA))[1], ((matTmp)+0)[2] += ((5)*(gradCbB)[0])*((gradCbA))[2]), (((matTmp)+3)[0] += ( (5)*(gradCbB)[1])*((gradCbA))[0], ((matTmp)+3)[1] += ((5)*(gradCbB )[1])*((gradCbA))[1], ((matTmp)+3)[2] += ((5)*(gradCbB)[1])*( (gradCbA))[2]), (((matTmp)+6)[0] += ((5)*(gradCbB)[2])*((gradCbA ))[0], ((matTmp)+6)[1] += ((5)*(gradCbB)[2])*((gradCbA))[1], ( (matTmp)+6)[2] += ((5)*(gradCbB)[2])*((gradCbA))[2])); |
| 1209 | ELL_3MV_SCALE_OUTER_INCR(matTmp, -2, gradCbS, gradCbA)((((matTmp)+0)[0] += ((-2)*(gradCbS)[0])*((gradCbA))[0], ((matTmp )+0)[1] += ((-2)*(gradCbS)[0])*((gradCbA))[1], ((matTmp)+0)[2 ] += ((-2)*(gradCbS)[0])*((gradCbA))[2]), (((matTmp)+3)[0] += ((-2)*(gradCbS)[1])*((gradCbA))[0], ((matTmp)+3)[1] += ((-2) *(gradCbS)[1])*((gradCbA))[1], ((matTmp)+3)[2] += ((-2)*(gradCbS )[1])*((gradCbA))[2]), (((matTmp)+6)[0] += ((-2)*(gradCbS)[2] )*((gradCbA))[0], ((matTmp)+6)[1] += ((-2)*(gradCbS)[2])*((gradCbA ))[1], ((matTmp)+6)[2] += ((-2)*(gradCbS)[2])*((gradCbA))[2]) ); |
| 1210 | ELL_3M_SCALE_INCR(matTmp, 5*cbA, hessCbB)((((matTmp)+0)[0] += ((5*cbA))*((hessCbB)+0)[0], ((matTmp)+0) [1] += ((5*cbA))*((hessCbB)+0)[1], ((matTmp)+0)[2] += ((5*cbA ))*((hessCbB)+0)[2]), (((matTmp)+3)[0] += ((5*cbA))*((hessCbB )+3)[0], ((matTmp)+3)[1] += ((5*cbA))*((hessCbB)+3)[1], ((matTmp )+3)[2] += ((5*cbA))*((hessCbB)+3)[2]), (((matTmp)+6)[0] += ( (5*cbA))*((hessCbB)+6)[0], ((matTmp)+6)[1] += ((5*cbA))*((hessCbB )+6)[1], ((matTmp)+6)[2] += ((5*cbA))*((hessCbB)+6)[2])); |
| 1211 | ELL_3MV_SCALE_OUTER_INCR(matTmp, 5, gradCbA, gradCbB)((((matTmp)+0)[0] += ((5)*(gradCbA)[0])*((gradCbB))[0], ((matTmp )+0)[1] += ((5)*(gradCbA)[0])*((gradCbB))[1], ((matTmp)+0)[2] += ((5)*(gradCbA)[0])*((gradCbB))[2]), (((matTmp)+3)[0] += ( (5)*(gradCbA)[1])*((gradCbB))[0], ((matTmp)+3)[1] += ((5)*(gradCbA )[1])*((gradCbB))[1], ((matTmp)+3)[2] += ((5)*(gradCbA)[1])*( (gradCbB))[2]), (((matTmp)+6)[0] += ((5)*(gradCbA)[2])*((gradCbB ))[0], ((matTmp)+6)[1] += ((5)*(gradCbA)[2])*((gradCbB))[1], ( (matTmp)+6)[2] += ((5)*(gradCbA)[2])*((gradCbB))[2])); |
| 1212 | ELL_3M_SCALE_INCR(matTmp, -27, hessCbC)((((matTmp)+0)[0] += ((-27))*((hessCbC)+0)[0], ((matTmp)+0)[1 ] += ((-27))*((hessCbC)+0)[1], ((matTmp)+0)[2] += ((-27))*((hessCbC )+0)[2]), (((matTmp)+3)[0] += ((-27))*((hessCbC)+3)[0], ((matTmp )+3)[1] += ((-27))*((hessCbC)+3)[1], ((matTmp)+3)[2] += ((-27 ))*((hessCbC)+3)[2]), (((matTmp)+6)[0] += ((-27))*((hessCbC)+ 6)[0], ((matTmp)+6)[1] += ((-27))*((hessCbC)+6)[1], ((matTmp) +6)[2] += ((-27))*((hessCbC)+6)[2])); |
| 1213 | ELL_3M_SCALE_INCR(matTmp, -2*cbA, hessCbS)((((matTmp)+0)[0] += ((-2*cbA))*((hessCbS)+0)[0], ((matTmp)+0 )[1] += ((-2*cbA))*((hessCbS)+0)[1], ((matTmp)+0)[2] += ((-2* cbA))*((hessCbS)+0)[2]), (((matTmp)+3)[0] += ((-2*cbA))*((hessCbS )+3)[0], ((matTmp)+3)[1] += ((-2*cbA))*((hessCbS)+3)[1], ((matTmp )+3)[2] += ((-2*cbA))*((hessCbS)+3)[2]), (((matTmp)+6)[0] += ( (-2*cbA))*((hessCbS)+6)[0], ((matTmp)+6)[1] += ((-2*cbA))*((hessCbS )+6)[1], ((matTmp)+6)[2] += ((-2*cbA))*((hessCbS)+6)[2])); |
| 1214 | ELL_3MV_SCALE_OUTER_INCR(matTmp, -2, gradCbA, gradCbS)((((matTmp)+0)[0] += ((-2)*(gradCbA)[0])*((gradCbS))[0], ((matTmp )+0)[1] += ((-2)*(gradCbA)[0])*((gradCbS))[1], ((matTmp)+0)[2 ] += ((-2)*(gradCbA)[0])*((gradCbS))[2]), (((matTmp)+3)[0] += ((-2)*(gradCbA)[1])*((gradCbS))[0], ((matTmp)+3)[1] += ((-2) *(gradCbA)[1])*((gradCbS))[1], ((matTmp)+3)[2] += ((-2)*(gradCbA )[1])*((gradCbS))[2]), (((matTmp)+6)[0] += ((-2)*(gradCbA)[2] )*((gradCbS))[0], ((matTmp)+6)[1] += ((-2)*(gradCbA)[2])*((gradCbS ))[1], ((matTmp)+6)[2] += ((-2)*(gradCbA)[2])*((gradCbS))[2]) ); |
| 1215 | ELL_3M_SCALE(matTmp, 1.0/54, matTmp)((((matTmp)+0)[0] = ((1.0/54))*((matTmp)+0)[0], ((matTmp)+0)[ 1] = ((1.0/54))*((matTmp)+0)[1], ((matTmp)+0)[2] = ((1.0/54)) *((matTmp)+0)[2]), (((matTmp)+3)[0] = ((1.0/54))*((matTmp)+3) [0], ((matTmp)+3)[1] = ((1.0/54))*((matTmp)+3)[1], ((matTmp)+ 3)[2] = ((1.0/54))*((matTmp)+3)[2]), (((matTmp)+6)[0] = ((1.0 /54))*((matTmp)+6)[0], ((matTmp)+6)[1] = ((1.0/54))*((matTmp) +6)[1], ((matTmp)+6)[2] = ((1.0/54))*((matTmp)+6)[2])); |
| 1216 | } |
| 1217 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageModeHessian)(pvl->query[tenGageModeHessian/8] & (1 << (tenGageModeHessian % 8)))) { |
| 1218 | double tmpQ, oQ, rQ; |
| 1219 | tmpQ = AIR_MAX(0, cbQ)((0) > (cbQ) ? (0) : (cbQ)); |
| 1220 | rQ = sqrt(tmpQ); |
| 1221 | oQ = tmpQ ? 1/tmpQ : 0; |
| 1222 | matTmp = pvl->directAnswer[tenGageModeHessian]; |
| 1223 | ELL_3M_ZERO_SET(matTmp)((((matTmp)+0)[0] = (0), ((matTmp)+0)[1] = (0), ((matTmp)+0)[ 2] = (0)), (((matTmp)+3)[0] = (0), ((matTmp)+3)[1] = (0), ((matTmp )+3)[2] = (0)), (((matTmp)+6)[0] = (0), ((matTmp)+6)[1] = (0) , ((matTmp)+6)[2] = (0))); |
| 1224 | ELL_3M_SCALE_INCR(matTmp, -(3.0/2)*cbR, hessCbQ)((((matTmp)+0)[0] += ((-(3.0/2)*cbR))*((hessCbQ)+0)[0], ((matTmp )+0)[1] += ((-(3.0/2)*cbR))*((hessCbQ)+0)[1], ((matTmp)+0)[2] += ((-(3.0/2)*cbR))*((hessCbQ)+0)[2]), (((matTmp)+3)[0] += ( (-(3.0/2)*cbR))*((hessCbQ)+3)[0], ((matTmp)+3)[1] += ((-(3.0/ 2)*cbR))*((hessCbQ)+3)[1], ((matTmp)+3)[2] += ((-(3.0/2)*cbR) )*((hessCbQ)+3)[2]), (((matTmp)+6)[0] += ((-(3.0/2)*cbR))*((hessCbQ )+6)[0], ((matTmp)+6)[1] += ((-(3.0/2)*cbR))*((hessCbQ)+6)[1] , ((matTmp)+6)[2] += ((-(3.0/2)*cbR))*((hessCbQ)+6)[2])); |
| 1225 | ELL_3MV_SCALE_OUTER_INCR(matTmp, (15.0/4)*cbR*oQ, gradCbQ, gradCbQ)((((matTmp)+0)[0] += (((15.0/4)*cbR*oQ)*(gradCbQ)[0])*((gradCbQ ))[0], ((matTmp)+0)[1] += (((15.0/4)*cbR*oQ)*(gradCbQ)[0])*(( gradCbQ))[1], ((matTmp)+0)[2] += (((15.0/4)*cbR*oQ)*(gradCbQ) [0])*((gradCbQ))[2]), (((matTmp)+3)[0] += (((15.0/4)*cbR*oQ)* (gradCbQ)[1])*((gradCbQ))[0], ((matTmp)+3)[1] += (((15.0/4)*cbR *oQ)*(gradCbQ)[1])*((gradCbQ))[1], ((matTmp)+3)[2] += (((15.0 /4)*cbR*oQ)*(gradCbQ)[1])*((gradCbQ))[2]), (((matTmp)+6)[0] += (((15.0/4)*cbR*oQ)*(gradCbQ)[2])*((gradCbQ))[0], ((matTmp)+6 )[1] += (((15.0/4)*cbR*oQ)*(gradCbQ)[2])*((gradCbQ))[1], ((matTmp )+6)[2] += (((15.0/4)*cbR*oQ)*(gradCbQ)[2])*((gradCbQ))[2])); |
| 1226 | ELL_3MV_SCALE_OUTER_INCR(matTmp, -(3.0/2), gradCbR, gradCbQ)((((matTmp)+0)[0] += ((-(3.0/2))*(gradCbR)[0])*((gradCbQ))[0] , ((matTmp)+0)[1] += ((-(3.0/2))*(gradCbR)[0])*((gradCbQ))[1] , ((matTmp)+0)[2] += ((-(3.0/2))*(gradCbR)[0])*((gradCbQ))[2] ), (((matTmp)+3)[0] += ((-(3.0/2))*(gradCbR)[1])*((gradCbQ))[ 0], ((matTmp)+3)[1] += ((-(3.0/2))*(gradCbR)[1])*((gradCbQ))[ 1], ((matTmp)+3)[2] += ((-(3.0/2))*(gradCbR)[1])*((gradCbQ))[ 2]), (((matTmp)+6)[0] += ((-(3.0/2))*(gradCbR)[2])*((gradCbQ) )[0], ((matTmp)+6)[1] += ((-(3.0/2))*(gradCbR)[2])*((gradCbQ) )[1], ((matTmp)+6)[2] += ((-(3.0/2))*(gradCbR)[2])*((gradCbQ) )[2])); |
| 1227 | ELL_3M_SCALE_INCR(matTmp, cbQ, hessCbR)((((matTmp)+0)[0] += ((cbQ))*((hessCbR)+0)[0], ((matTmp)+0)[1 ] += ((cbQ))*((hessCbR)+0)[1], ((matTmp)+0)[2] += ((cbQ))*((hessCbR )+0)[2]), (((matTmp)+3)[0] += ((cbQ))*((hessCbR)+3)[0], ((matTmp )+3)[1] += ((cbQ))*((hessCbR)+3)[1], ((matTmp)+3)[2] += ((cbQ ))*((hessCbR)+3)[2]), (((matTmp)+6)[0] += ((cbQ))*((hessCbR)+ 6)[0], ((matTmp)+6)[1] += ((cbQ))*((hessCbR)+6)[1], ((matTmp) +6)[2] += ((cbQ))*((hessCbR)+6)[2])); |
| 1228 | ELL_3MV_SCALE_OUTER_INCR(matTmp, -(3.0/2), gradCbQ, gradCbR)((((matTmp)+0)[0] += ((-(3.0/2))*(gradCbQ)[0])*((gradCbR))[0] , ((matTmp)+0)[1] += ((-(3.0/2))*(gradCbQ)[0])*((gradCbR))[1] , ((matTmp)+0)[2] += ((-(3.0/2))*(gradCbQ)[0])*((gradCbR))[2] ), (((matTmp)+3)[0] += ((-(3.0/2))*(gradCbQ)[1])*((gradCbR))[ 0], ((matTmp)+3)[1] += ((-(3.0/2))*(gradCbQ)[1])*((gradCbR))[ 1], ((matTmp)+3)[2] += ((-(3.0/2))*(gradCbQ)[1])*((gradCbR))[ 2]), (((matTmp)+6)[0] += ((-(3.0/2))*(gradCbQ)[2])*((gradCbR) )[0], ((matTmp)+6)[1] += ((-(3.0/2))*(gradCbQ)[2])*((gradCbR) )[1], ((matTmp)+6)[2] += ((-(3.0/2))*(gradCbQ)[2])*((gradCbR) )[2])); |
| 1229 | tmp0 = (tmpQ && rQ) ? 1/(tmpQ*tmpQ*rQ) : 0.0; |
| 1230 | ELL_3M_SCALE(matTmp, tmp0, matTmp)((((matTmp)+0)[0] = ((tmp0))*((matTmp)+0)[0], ((matTmp)+0)[1] = ((tmp0))*((matTmp)+0)[1], ((matTmp)+0)[2] = ((tmp0))*((matTmp )+0)[2]), (((matTmp)+3)[0] = ((tmp0))*((matTmp)+3)[0], ((matTmp )+3)[1] = ((tmp0))*((matTmp)+3)[1], ((matTmp)+3)[2] = ((tmp0) )*((matTmp)+3)[2]), (((matTmp)+6)[0] = ((tmp0))*((matTmp)+6)[ 0], ((matTmp)+6)[1] = ((tmp0))*((matTmp)+6)[1], ((matTmp)+6)[ 2] = ((tmp0))*((matTmp)+6)[2])); |
| 1231 | } |
| 1232 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageModeHessianEvec)(pvl->query[tenGageModeHessianEvec/8] & (1 << (tenGageModeHessianEvec % 8)))) { |
| 1233 | ell_3m_eigensolve_d(pvl->directAnswer[tenGageModeHessianEval], |
| 1234 | pvl->directAnswer[tenGageModeHessianEvec], |
| 1235 | pvl->directAnswer[tenGageModeHessian], AIR_TRUE1); |
| 1236 | } else if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageModeHessianEval)(pvl->query[tenGageModeHessianEval/8] & (1 << (tenGageModeHessianEval % 8)))) { |
| 1237 | ell_3m_eigenvalues_d(pvl->directAnswer[tenGageModeHessianEval], |
| 1238 | pvl->directAnswer[tenGageModeHessian], AIR_TRUE1); |
| 1239 | } |
| 1240 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageModeHessianFrob)(pvl->query[tenGageModeHessianFrob/8] & (1 << (tenGageModeHessianFrob % 8)))) { |
| 1241 | pvl->directAnswer[tenGageModeHessianFrob][0] |
| 1242 | = ELL_3M_FROB(pvl->directAnswer[tenGageModeHessian])(sqrt((((pvl->directAnswer[tenGageModeHessian])+0)[0]*((pvl ->directAnswer[tenGageModeHessian])+0)[0] + ((pvl->directAnswer [tenGageModeHessian])+0)[1]*((pvl->directAnswer[tenGageModeHessian ])+0)[1] + ((pvl->directAnswer[tenGageModeHessian])+0)[2]* ((pvl->directAnswer[tenGageModeHessian])+0)[2]) + (((pvl-> directAnswer[tenGageModeHessian])+3)[0]*((pvl->directAnswer [tenGageModeHessian])+3)[0] + ((pvl->directAnswer[tenGageModeHessian ])+3)[1]*((pvl->directAnswer[tenGageModeHessian])+3)[1] + ( (pvl->directAnswer[tenGageModeHessian])+3)[2]*((pvl->directAnswer [tenGageModeHessian])+3)[2]) + (((pvl->directAnswer[tenGageModeHessian ])+6)[0]*((pvl->directAnswer[tenGageModeHessian])+6)[0] + ( (pvl->directAnswer[tenGageModeHessian])+6)[1]*((pvl->directAnswer [tenGageModeHessian])+6)[1] + ((pvl->directAnswer[tenGageModeHessian ])+6)[2]*((pvl->directAnswer[tenGageModeHessian])+6)[2]))); |
| 1243 | } |
| 1244 | |
| 1245 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageOmegaHessian)(pvl->query[tenGageOmegaHessian/8] & (1 << (tenGageOmegaHessian % 8)))) { |
| 1246 | double fa, mode, *modeGrad, *faGrad, *modeHess, *faHess; |
| 1247 | fa = pvl->directAnswer[tenGageFA][0]; |
| 1248 | mode = pvl->directAnswer[tenGageMode][0]; |
| 1249 | faGrad = pvl->directAnswer[tenGageFAGradVec]; |
| 1250 | modeGrad = pvl->directAnswer[tenGageModeGradVec]; |
| 1251 | faHess = pvl->directAnswer[tenGageFAHessian]; |
| 1252 | modeHess = pvl->directAnswer[tenGageModeHessian]; |
| 1253 | matTmp = pvl->directAnswer[tenGageOmegaHessian]; |
| 1254 | ELL_3M_ZERO_SET(matTmp)((((matTmp)+0)[0] = (0), ((matTmp)+0)[1] = (0), ((matTmp)+0)[ 2] = (0)), (((matTmp)+3)[0] = (0), ((matTmp)+3)[1] = (0), ((matTmp )+3)[2] = (0)), (((matTmp)+6)[0] = (0), ((matTmp)+6)[1] = (0) , ((matTmp)+6)[2] = (0))); |
| 1255 | ELL_3M_SCALE_INCR(matTmp, (1+mode)/2, faHess)((((matTmp)+0)[0] += (((1+mode)/2))*((faHess)+0)[0], ((matTmp )+0)[1] += (((1+mode)/2))*((faHess)+0)[1], ((matTmp)+0)[2] += (((1+mode)/2))*((faHess)+0)[2]), (((matTmp)+3)[0] += (((1+mode )/2))*((faHess)+3)[0], ((matTmp)+3)[1] += (((1+mode)/2))*((faHess )+3)[1], ((matTmp)+3)[2] += (((1+mode)/2))*((faHess)+3)[2]), ( ((matTmp)+6)[0] += (((1+mode)/2))*((faHess)+6)[0], ((matTmp)+ 6)[1] += (((1+mode)/2))*((faHess)+6)[1], ((matTmp)+6)[2] += ( ((1+mode)/2))*((faHess)+6)[2])); |
| 1256 | ELL_3M_SCALE_INCR(matTmp, fa/2, modeHess)((((matTmp)+0)[0] += ((fa/2))*((modeHess)+0)[0], ((matTmp)+0) [1] += ((fa/2))*((modeHess)+0)[1], ((matTmp)+0)[2] += ((fa/2) )*((modeHess)+0)[2]), (((matTmp)+3)[0] += ((fa/2))*((modeHess )+3)[0], ((matTmp)+3)[1] += ((fa/2))*((modeHess)+3)[1], ((matTmp )+3)[2] += ((fa/2))*((modeHess)+3)[2]), (((matTmp)+6)[0] += ( (fa/2))*((modeHess)+6)[0], ((matTmp)+6)[1] += ((fa/2))*((modeHess )+6)[1], ((matTmp)+6)[2] += ((fa/2))*((modeHess)+6)[2])); |
| 1257 | ELL_3MV_SCALE_OUTER_INCR(matTmp, 0.5, modeGrad, faGrad)((((matTmp)+0)[0] += ((0.5)*(modeGrad)[0])*((faGrad))[0], ((matTmp )+0)[1] += ((0.5)*(modeGrad)[0])*((faGrad))[1], ((matTmp)+0)[ 2] += ((0.5)*(modeGrad)[0])*((faGrad))[2]), (((matTmp)+3)[0] += ((0.5)*(modeGrad)[1])*((faGrad))[0], ((matTmp)+3)[1] += ((0.5 )*(modeGrad)[1])*((faGrad))[1], ((matTmp)+3)[2] += ((0.5)*(modeGrad )[1])*((faGrad))[2]), (((matTmp)+6)[0] += ((0.5)*(modeGrad)[2 ])*((faGrad))[0], ((matTmp)+6)[1] += ((0.5)*(modeGrad)[2])*(( faGrad))[1], ((matTmp)+6)[2] += ((0.5)*(modeGrad)[2])*((faGrad ))[2])); |
| 1258 | ELL_3MV_SCALE_OUTER_INCR(matTmp, 0.5, faGrad, modeGrad)((((matTmp)+0)[0] += ((0.5)*(faGrad)[0])*((modeGrad))[0], ((matTmp )+0)[1] += ((0.5)*(faGrad)[0])*((modeGrad))[1], ((matTmp)+0)[ 2] += ((0.5)*(faGrad)[0])*((modeGrad))[2]), (((matTmp)+3)[0] += ((0.5)*(faGrad)[1])*((modeGrad))[0], ((matTmp)+3)[1] += ((0.5 )*(faGrad)[1])*((modeGrad))[1], ((matTmp)+3)[2] += ((0.5)*(faGrad )[1])*((modeGrad))[2]), (((matTmp)+6)[0] += ((0.5)*(faGrad)[2 ])*((modeGrad))[0], ((matTmp)+6)[1] += ((0.5)*(faGrad)[2])*(( modeGrad))[1], ((matTmp)+6)[2] += ((0.5)*(faGrad)[2])*((modeGrad ))[2])); |
| 1259 | } |
| 1260 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageOmegaHessianEvec)(pvl->query[tenGageOmegaHessianEvec/8] & (1 << ( tenGageOmegaHessianEvec % 8)))) { |
| 1261 | ell_3m_eigensolve_d(pvl->directAnswer[tenGageOmegaHessianEval], |
| 1262 | pvl->directAnswer[tenGageOmegaHessianEvec], |
| 1263 | pvl->directAnswer[tenGageOmegaHessian], AIR_TRUE1); |
| 1264 | } else if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageOmegaHessianEval)(pvl->query[tenGageOmegaHessianEval/8] & (1 << ( tenGageOmegaHessianEval % 8)))) { |
| 1265 | ell_3m_eigenvalues_d(pvl->directAnswer[tenGageOmegaHessianEval], |
| 1266 | pvl->directAnswer[tenGageOmegaHessian], AIR_TRUE1); |
| 1267 | } |
| 1268 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageOmegaLaplacian)(pvl->query[tenGageOmegaLaplacian/8] & (1 << (tenGageOmegaLaplacian % 8)))) { |
| 1269 | double *hess; |
| 1270 | hess = pvl->directAnswer[tenGageOmegaHessian]; |
| 1271 | pvl->directAnswer[tenGageOmegaLaplacian][0] = hess[0] + hess[4] + hess[8]; |
| 1272 | } |
| 1273 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageOmega2ndDD)(pvl->query[tenGageOmega2ndDD/8] & (1 << (tenGageOmega2ndDD % 8)))) { |
| 1274 | double *hess, *norm, tmpv[3]; |
| 1275 | hess = pvl->directAnswer[tenGageOmegaHessian]; |
| 1276 | norm = pvl->directAnswer[tenGageOmegaNormal]; |
| 1277 | ELL_3MV_MUL(tmpv, hess, norm)((tmpv)[0] = (hess)[0]*(norm)[0] + (hess)[1]*(norm)[1] + (hess )[2]*(norm)[2], (tmpv)[1] = (hess)[3]*(norm)[0] + (hess)[4]*( norm)[1] + (hess)[5]*(norm)[2], (tmpv)[2] = (hess)[6]*(norm)[ 0] + (hess)[7]*(norm)[1] + (hess)[8]*(norm)[2]); |
| 1278 | pvl->directAnswer[tenGageOmega2ndDD][0] = ELL_3V_DOT(norm, tmpv)((norm)[0]*(tmpv)[0] + (norm)[1]*(tmpv)[1] + (norm)[2]*(tmpv) [2]); |
| 1279 | } |
| 1280 | |
| 1281 | /* the copy-and-paste nature of this is really getting out of control ... */ |
| 1282 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageOmegaHessianContrTenEvec0)(pvl->query[tenGageOmegaHessianContrTenEvec0/8] & (1 << (tenGageOmegaHessianContrTenEvec0 % 8)))) { |
| 1283 | double *hess, *evec, tmpv[3]; |
| 1284 | hess = pvl->directAnswer[tenGageOmegaHessian]; |
| 1285 | evec = pvl->directAnswer[tenGageEvec0]; |
| 1286 | ELL_3MV_MUL(tmpv, hess, evec)((tmpv)[0] = (hess)[0]*(evec)[0] + (hess)[1]*(evec)[1] + (hess )[2]*(evec)[2], (tmpv)[1] = (hess)[3]*(evec)[0] + (hess)[4]*( evec)[1] + (hess)[5]*(evec)[2], (tmpv)[2] = (hess)[6]*(evec)[ 0] + (hess)[7]*(evec)[1] + (hess)[8]*(evec)[2]); |
| 1287 | pvl->directAnswer[tenGageOmegaHessianContrTenEvec0][0] = ELL_3V_DOT(evec, tmpv)((evec)[0]*(tmpv)[0] + (evec)[1]*(tmpv)[1] + (evec)[2]*(tmpv) [2]); |
| 1288 | } |
| 1289 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageOmegaHessianContrTenEvec1)(pvl->query[tenGageOmegaHessianContrTenEvec1/8] & (1 << (tenGageOmegaHessianContrTenEvec1 % 8)))) { |
| 1290 | double *hess, *evec, tmpv[3]; |
| 1291 | hess = pvl->directAnswer[tenGageOmegaHessian]; |
| 1292 | evec = pvl->directAnswer[tenGageEvec1]; |
| 1293 | ELL_3MV_MUL(tmpv, hess, evec)((tmpv)[0] = (hess)[0]*(evec)[0] + (hess)[1]*(evec)[1] + (hess )[2]*(evec)[2], (tmpv)[1] = (hess)[3]*(evec)[0] + (hess)[4]*( evec)[1] + (hess)[5]*(evec)[2], (tmpv)[2] = (hess)[6]*(evec)[ 0] + (hess)[7]*(evec)[1] + (hess)[8]*(evec)[2]); |
| 1294 | pvl->directAnswer[tenGageOmegaHessianContrTenEvec1][0] = ELL_3V_DOT(evec, tmpv)((evec)[0]*(tmpv)[0] + (evec)[1]*(tmpv)[1] + (evec)[2]*(tmpv) [2]); |
| 1295 | } |
| 1296 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageOmegaHessianContrTenEvec2)(pvl->query[tenGageOmegaHessianContrTenEvec2/8] & (1 << (tenGageOmegaHessianContrTenEvec2 % 8)))) { |
| 1297 | double *hess, *evec, tmpv[3]; |
| 1298 | hess = pvl->directAnswer[tenGageOmegaHessian]; |
| 1299 | evec = pvl->directAnswer[tenGageEvec2]; |
| 1300 | ELL_3MV_MUL(tmpv, hess, evec)((tmpv)[0] = (hess)[0]*(evec)[0] + (hess)[1]*(evec)[1] + (hess )[2]*(evec)[2], (tmpv)[1] = (hess)[3]*(evec)[0] + (hess)[4]*( evec)[1] + (hess)[5]*(evec)[2], (tmpv)[2] = (hess)[6]*(evec)[ 0] + (hess)[7]*(evec)[1] + (hess)[8]*(evec)[2]); |
| 1301 | pvl->directAnswer[tenGageOmegaHessianContrTenEvec2][0] = ELL_3V_DOT(evec, tmpv)((evec)[0]*(tmpv)[0] + (evec)[1]*(tmpv)[1] + (evec)[2]*(tmpv) [2]); |
| 1302 | } |
| 1303 | |
| 1304 | /* --- evec0 dot products */ |
| 1305 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTraceGradVecDotEvec0)(pvl->query[tenGageTraceGradVecDotEvec0/8] & (1 << (tenGageTraceGradVecDotEvec0 % 8)))) { |
| 1306 | tmp0 = ELL_3V_DOT(evecAns + 0*3, pvl->directAnswer[tenGageTraceGradVec])((evecAns + 0*3)[0]*(pvl->directAnswer[tenGageTraceGradVec ])[0] + (evecAns + 0*3)[1]*(pvl->directAnswer[tenGageTraceGradVec ])[1] + (evecAns + 0*3)[2]*(pvl->directAnswer[tenGageTraceGradVec ])[2]); |
| 1307 | pvl->directAnswer[tenGageTraceGradVecDotEvec0][0] = AIR_ABS(tmp0)((tmp0) > 0.0f ? (tmp0) : -(tmp0)); |
| 1308 | } |
| 1309 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTraceDiffusionAlign)(pvl->query[tenGageTraceDiffusionAlign/8] & (1 << (tenGageTraceDiffusionAlign % 8)))) { |
| 1310 | tmp0 = ELL_3V_DOT(evecAns + 0*3, pvl->directAnswer[tenGageTraceNormal])((evecAns + 0*3)[0]*(pvl->directAnswer[tenGageTraceNormal] )[0] + (evecAns + 0*3)[1]*(pvl->directAnswer[tenGageTraceNormal ])[1] + (evecAns + 0*3)[2]*(pvl->directAnswer[tenGageTraceNormal ])[2]); |
| 1311 | tmp0 = 1 - 2*acos(AIR_ABS(tmp0)((tmp0) > 0.0f ? (tmp0) : -(tmp0)))/AIR_PI3.14159265358979323846; |
| 1312 | pvl->directAnswer[tenGageTraceDiffusionAlign][0] = tmp0; |
| 1313 | } |
| 1314 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTraceDiffusionFraction)(pvl->query[tenGageTraceDiffusionFraction/8] & (1 << (tenGageTraceDiffusionFraction % 8)))) { |
| 1315 | double tmpv[3]; |
| 1316 | TEN_TV_MUL(tmpv, tenAns, pvl->directAnswer[tenGageTraceNormal])((tmpv)[0] = (tenAns)[1]*(pvl->directAnswer[tenGageTraceNormal ])[0] + (tenAns)[2]*(pvl->directAnswer[tenGageTraceNormal] )[1] + (tenAns)[3]*(pvl->directAnswer[tenGageTraceNormal]) [2], (tmpv)[1] = (tenAns)[2]*(pvl->directAnswer[tenGageTraceNormal ])[0] + (tenAns)[4]*(pvl->directAnswer[tenGageTraceNormal] )[1] + (tenAns)[5]*(pvl->directAnswer[tenGageTraceNormal]) [2], (tmpv)[2] = (tenAns)[3]*(pvl->directAnswer[tenGageTraceNormal ])[0] + (tenAns)[5]*(pvl->directAnswer[tenGageTraceNormal] )[1] + (tenAns)[6]*(pvl->directAnswer[tenGageTraceNormal]) [2]); |
| 1317 | tmp0 = ELL_3V_DOT(tmpv, pvl->directAnswer[tenGageTraceNormal])((tmpv)[0]*(pvl->directAnswer[tenGageTraceNormal])[0] + (tmpv )[1]*(pvl->directAnswer[tenGageTraceNormal])[1] + (tmpv)[2 ]*(pvl->directAnswer[tenGageTraceNormal])[2]); |
| 1318 | tmp0 /= TEN_T_TRACE(tenAns)((tenAns)[1] + (tenAns)[4] + (tenAns)[6]) ? TEN_T_TRACE(tenAns)((tenAns)[1] + (tenAns)[4] + (tenAns)[6]) : 1; |
| 1319 | pvl->directAnswer[tenGageTraceDiffusionFraction][0] = tmp0; |
| 1320 | } |
| 1321 | |
| 1322 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFAGradVecDotEvec0)(pvl->query[tenGageFAGradVecDotEvec0/8] & (1 << ( tenGageFAGradVecDotEvec0 % 8)))) { |
| 1323 | tmp0 = ELL_3V_DOT(evecAns + 0*3, pvl->directAnswer[tenGageFAGradVec])((evecAns + 0*3)[0]*(pvl->directAnswer[tenGageFAGradVec])[ 0] + (evecAns + 0*3)[1]*(pvl->directAnswer[tenGageFAGradVec ])[1] + (evecAns + 0*3)[2]*(pvl->directAnswer[tenGageFAGradVec ])[2]); |
| 1324 | pvl->directAnswer[tenGageFAGradVecDotEvec0][0] = AIR_ABS(tmp0)((tmp0) > 0.0f ? (tmp0) : -(tmp0)); |
| 1325 | } |
| 1326 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFADiffusionAlign)(pvl->query[tenGageFADiffusionAlign/8] & (1 << ( tenGageFADiffusionAlign % 8)))) { |
| 1327 | tmp0 = ELL_3V_DOT(evecAns + 0*3, pvl->directAnswer[tenGageFANormal])((evecAns + 0*3)[0]*(pvl->directAnswer[tenGageFANormal])[0 ] + (evecAns + 0*3)[1]*(pvl->directAnswer[tenGageFANormal] )[1] + (evecAns + 0*3)[2]*(pvl->directAnswer[tenGageFANormal ])[2]); |
| 1328 | tmp0 = 1 - 2*acos(AIR_ABS(tmp0)((tmp0) > 0.0f ? (tmp0) : -(tmp0)))/AIR_PI3.14159265358979323846; |
| 1329 | pvl->directAnswer[tenGageFADiffusionAlign][0] = tmp0; |
| 1330 | } |
| 1331 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFADiffusionFraction)(pvl->query[tenGageFADiffusionFraction/8] & (1 << (tenGageFADiffusionFraction % 8)))) { |
| 1332 | double tmpv[3]; |
| 1333 | TEN_TV_MUL(tmpv, tenAns, pvl->directAnswer[tenGageFANormal])((tmpv)[0] = (tenAns)[1]*(pvl->directAnswer[tenGageFANormal ])[0] + (tenAns)[2]*(pvl->directAnswer[tenGageFANormal])[1 ] + (tenAns)[3]*(pvl->directAnswer[tenGageFANormal])[2], ( tmpv)[1] = (tenAns)[2]*(pvl->directAnswer[tenGageFANormal] )[0] + (tenAns)[4]*(pvl->directAnswer[tenGageFANormal])[1] + (tenAns)[5]*(pvl->directAnswer[tenGageFANormal])[2], (tmpv )[2] = (tenAns)[3]*(pvl->directAnswer[tenGageFANormal])[0] + (tenAns)[5]*(pvl->directAnswer[tenGageFANormal])[1] + ( tenAns)[6]*(pvl->directAnswer[tenGageFANormal])[2]); |
| 1334 | tmp0 = ELL_3V_DOT(tmpv, pvl->directAnswer[tenGageFANormal])((tmpv)[0]*(pvl->directAnswer[tenGageFANormal])[0] + (tmpv )[1]*(pvl->directAnswer[tenGageFANormal])[1] + (tmpv)[2]*( pvl->directAnswer[tenGageFANormal])[2]); |
| 1335 | tmp0 /= TEN_T_TRACE(tenAns)((tenAns)[1] + (tenAns)[4] + (tenAns)[6]) ? TEN_T_TRACE(tenAns)((tenAns)[1] + (tenAns)[4] + (tenAns)[6]) : 1; |
| 1336 | pvl->directAnswer[tenGageFADiffusionFraction][0] = tmp0; |
| 1337 | } |
| 1338 | |
| 1339 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageOmegaGradVecDotEvec0)(pvl->query[tenGageOmegaGradVecDotEvec0/8] & (1 << (tenGageOmegaGradVecDotEvec0 % 8)))) { |
| 1340 | tmp0 = ELL_3V_DOT(evecAns + 0*3, pvl->directAnswer[tenGageOmegaGradVec])((evecAns + 0*3)[0]*(pvl->directAnswer[tenGageOmegaGradVec ])[0] + (evecAns + 0*3)[1]*(pvl->directAnswer[tenGageOmegaGradVec ])[1] + (evecAns + 0*3)[2]*(pvl->directAnswer[tenGageOmegaGradVec ])[2]); |
| 1341 | pvl->directAnswer[tenGageOmegaGradVecDotEvec0][0] = AIR_ABS(tmp0)((tmp0) > 0.0f ? (tmp0) : -(tmp0)); |
| 1342 | } |
| 1343 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageOmegaDiffusionAlign)(pvl->query[tenGageOmegaDiffusionAlign/8] & (1 << (tenGageOmegaDiffusionAlign % 8)))) { |
| 1344 | tmp0 = ELL_3V_DOT(evecAns + 0*3, pvl->directAnswer[tenGageOmegaNormal])((evecAns + 0*3)[0]*(pvl->directAnswer[tenGageOmegaNormal] )[0] + (evecAns + 0*3)[1]*(pvl->directAnswer[tenGageOmegaNormal ])[1] + (evecAns + 0*3)[2]*(pvl->directAnswer[tenGageOmegaNormal ])[2]); |
| 1345 | tmp0 = 1 - 2*acos(AIR_ABS(tmp0)((tmp0) > 0.0f ? (tmp0) : -(tmp0)))/AIR_PI3.14159265358979323846; |
| 1346 | pvl->directAnswer[tenGageOmegaDiffusionAlign][0] = tmp0; |
| 1347 | } |
| 1348 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageOmegaDiffusionFraction)(pvl->query[tenGageOmegaDiffusionFraction/8] & (1 << (tenGageOmegaDiffusionFraction % 8)))) { |
| 1349 | double tmpv[3]; |
| 1350 | TEN_TV_MUL(tmpv, tenAns, pvl->directAnswer[tenGageOmegaNormal])((tmpv)[0] = (tenAns)[1]*(pvl->directAnswer[tenGageOmegaNormal ])[0] + (tenAns)[2]*(pvl->directAnswer[tenGageOmegaNormal] )[1] + (tenAns)[3]*(pvl->directAnswer[tenGageOmegaNormal]) [2], (tmpv)[1] = (tenAns)[2]*(pvl->directAnswer[tenGageOmegaNormal ])[0] + (tenAns)[4]*(pvl->directAnswer[tenGageOmegaNormal] )[1] + (tenAns)[5]*(pvl->directAnswer[tenGageOmegaNormal]) [2], (tmpv)[2] = (tenAns)[3]*(pvl->directAnswer[tenGageOmegaNormal ])[0] + (tenAns)[5]*(pvl->directAnswer[tenGageOmegaNormal] )[1] + (tenAns)[6]*(pvl->directAnswer[tenGageOmegaNormal]) [2]); |
| 1351 | tmp0 = ELL_3V_DOT(tmpv, pvl->directAnswer[tenGageOmegaNormal])((tmpv)[0]*(pvl->directAnswer[tenGageOmegaNormal])[0] + (tmpv )[1]*(pvl->directAnswer[tenGageOmegaNormal])[1] + (tmpv)[2 ]*(pvl->directAnswer[tenGageOmegaNormal])[2]); |
| 1352 | tmp0 /= TEN_T_TRACE(tenAns)((tenAns)[1] + (tenAns)[4] + (tenAns)[6]) ? TEN_T_TRACE(tenAns)((tenAns)[1] + (tenAns)[4] + (tenAns)[6]) : 1; |
| 1353 | pvl->directAnswer[tenGageOmegaDiffusionFraction][0] = tmp0; |
| 1354 | } |
| 1355 | |
| 1356 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageConfGradVecDotEvec0)(pvl->query[tenGageConfGradVecDotEvec0/8] & (1 << (tenGageConfGradVecDotEvec0 % 8)))) { |
| 1357 | double *confGrad; |
| 1358 | confGrad = pvl->directAnswer[tenGageTensorGrad]; |
| 1359 | tmp0 = ELL_3V_DOT(evecAns + 0*3, confGrad)((evecAns + 0*3)[0]*(confGrad)[0] + (evecAns + 0*3)[1]*(confGrad )[1] + (evecAns + 0*3)[2]*(confGrad)[2]); |
| 1360 | pvl->directAnswer[tenGageConfGradVecDotEvec0][0] = AIR_ABS(tmp0)((tmp0) > 0.0f ? (tmp0) : -(tmp0)); |
| 1361 | } |
| 1362 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageConfDiffusionAlign)(pvl->query[tenGageConfDiffusionAlign/8] & (1 << (tenGageConfDiffusionAlign % 8)))) { |
| 1363 | double *confGrad, confNorm[3], tmp; |
| 1364 | confGrad = pvl->directAnswer[tenGageTensorGrad]; |
| 1365 | ELL_3V_NORM(confNorm, confGrad, tmp)(tmp = (sqrt((((confGrad))[0]*((confGrad))[0] + ((confGrad))[ 1]*((confGrad))[1] + ((confGrad))[2]*((confGrad))[2]))), ((confNorm )[0] = (1.0/tmp)*(confGrad)[0], (confNorm)[1] = (1.0/tmp)*(confGrad )[1], (confNorm)[2] = (1.0/tmp)*(confGrad)[2])); |
| 1366 | tmp0 = ELL_3V_DOT(evecAns + 0*3, confNorm)((evecAns + 0*3)[0]*(confNorm)[0] + (evecAns + 0*3)[1]*(confNorm )[1] + (evecAns + 0*3)[2]*(confNorm)[2]); |
| 1367 | tmp0 = 1 - 2*acos(AIR_ABS(tmp0)((tmp0) > 0.0f ? (tmp0) : -(tmp0)))/AIR_PI3.14159265358979323846; |
| 1368 | pvl->directAnswer[tenGageConfDiffusionAlign][0] = tmp0; |
| 1369 | } |
| 1370 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageConfDiffusionFraction)(pvl->query[tenGageConfDiffusionFraction/8] & (1 << (tenGageConfDiffusionFraction % 8)))) { |
| 1371 | double *confGrad, confNorm[3], tmp, tmpv[3]; |
| 1372 | confGrad = pvl->directAnswer[tenGageTensorGrad]; |
| 1373 | ELL_3V_NORM(confNorm, confGrad, tmp)(tmp = (sqrt((((confGrad))[0]*((confGrad))[0] + ((confGrad))[ 1]*((confGrad))[1] + ((confGrad))[2]*((confGrad))[2]))), ((confNorm )[0] = (1.0/tmp)*(confGrad)[0], (confNorm)[1] = (1.0/tmp)*(confGrad )[1], (confNorm)[2] = (1.0/tmp)*(confGrad)[2])); |
| 1374 | TEN_TV_MUL(tmpv, tenAns, confNorm)((tmpv)[0] = (tenAns)[1]*(confNorm)[0] + (tenAns)[2]*(confNorm )[1] + (tenAns)[3]*(confNorm)[2], (tmpv)[1] = (tenAns)[2]*(confNorm )[0] + (tenAns)[4]*(confNorm)[1] + (tenAns)[5]*(confNorm)[2], (tmpv)[2] = (tenAns)[3]*(confNorm)[0] + (tenAns)[5]*(confNorm )[1] + (tenAns)[6]*(confNorm)[2]); |
| 1375 | tmp0 = ELL_3V_DOT(tmpv, confNorm)((tmpv)[0]*(confNorm)[0] + (tmpv)[1]*(confNorm)[1] + (tmpv)[2 ]*(confNorm)[2]); |
| 1376 | tmp0 /= TEN_T_TRACE(tenAns)((tenAns)[1] + (tenAns)[4] + (tenAns)[6]) ? TEN_T_TRACE(tenAns)((tenAns)[1] + (tenAns)[4] + (tenAns)[6]) : 1; |
| 1377 | pvl->directAnswer[tenGageConfDiffusionFraction][0] = tmp0; |
| 1378 | } |
| 1379 | |
| 1380 | |
| 1381 | /* --- Covariance --- */ |
| 1382 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageCovariance)(pvl->query[tenGageCovariance/8] & (1 << (tenGageCovariance % 8)))) { |
| 1383 | unsigned int cc, tt, taa, tbb, |
| 1384 | vijk, vii, vjj, vkk, fd, fddd; |
| 1385 | double *cov, ww, wxx, wyy, wzz, ten[7]; |
| 1386 | |
| 1387 | cov = pvl->directAnswer[tenGageCovariance]; |
| 1388 | /* HEY: casting because radius signed (shouldn't be) */ |
| 1389 | fd = AIR_CAST(unsigned int, 2*ctx->radius)((unsigned int)(2*ctx->radius)); |
| 1390 | fddd = fd*fd*fd; |
| 1391 | |
| 1392 | /* reset answer */ |
| 1393 | for (cc=0; cc<21; cc++) { |
| 1394 | cov[cc] = 0; |
| 1395 | } |
| 1396 | |
| 1397 | ten[0] = 1; /* never used anyway */ |
| 1398 | for (vijk=0; vijk<fddd; vijk++) { |
| 1399 | vii = vijk % fd; |
| 1400 | vjj = (vijk/fd) % fd; |
| 1401 | vkk = vijk/fd/fd; |
| 1402 | wxx = ctx->fw[vii + fd*(0 + 3*gageKernel00)]; |
| 1403 | wyy = ctx->fw[vjj + fd*(1 + 3*gageKernel00)]; |
| 1404 | wzz = ctx->fw[vkk + fd*(2 + 3*gageKernel00)]; |
| 1405 | ww = wxx*wyy*wzz; |
| 1406 | for (tt=1; tt<7; tt++) { |
| 1407 | ten[tt] = ww*(pvl->iv3[vijk + fddd*tt] - tenAns[tt]); |
| 1408 | } |
| 1409 | |
| 1410 | cc = 0; |
| 1411 | for (taa=0; taa<6; taa++) { |
| 1412 | for (tbb=taa; tbb<6; tbb++) { |
| 1413 | /* HEY: do I really mean to have this factor in here? */ |
| 1414 | /* it probably meant that the units in the IGRT TMI paper were |
| 1415 | wrong by this factor ... */ |
| 1416 | cov[cc] += 100000*ten[taa+1]*ten[tbb+1]; |
| 1417 | cc++; |
| 1418 | } |
| 1419 | } |
| 1420 | } |
| 1421 | } |
| 1422 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageCovarianceRGRT)(pvl->query[tenGageCovarianceRGRT/8] & (1 << (tenGageCovarianceRGRT % 8)))) { |
| 1423 | double *cov, *covr, *igrt[6]; |
| 1424 | unsigned int taa, tbb, cc; |
| 1425 | |
| 1426 | cov = pvl->directAnswer[tenGageCovariance]; |
| 1427 | covr = pvl->directAnswer[tenGageCovarianceRGRT]; |
| 1428 | igrt[0] = pvl->directAnswer[tenGageDelNormR1]; |
| 1429 | igrt[1] = pvl->directAnswer[tenGageDelNormR2]; |
| 1430 | igrt[2] = pvl->directAnswer[tenGageDelNormK3]; |
| 1431 | igrt[3] = pvl->directAnswer[tenGageDelNormPhi1]; |
| 1432 | igrt[4] = pvl->directAnswer[tenGageDelNormPhi2]; |
| 1433 | igrt[5] = pvl->directAnswer[tenGageDelNormPhi3]; |
| 1434 | |
| 1435 | cc = 0; |
| 1436 | for (taa=0; taa<6; taa++) { |
| 1437 | for (tbb=taa; tbb<6; tbb++) { |
| 1438 | covr[cc] = tenDoubleContract_d(igrt[tbb], cov, igrt[taa]); |
| 1439 | cc++; |
| 1440 | } |
| 1441 | } |
| 1442 | } |
| 1443 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageCovarianceKGRT)(pvl->query[tenGageCovarianceKGRT/8] & (1 << (tenGageCovarianceKGRT % 8)))) { |
| 1444 | double *cov, *covk, *igrt[6], delnormk1[7]; |
| 1445 | unsigned int taa, tbb, cc; |
| 1446 | |
| 1447 | cov = pvl->directAnswer[tenGageCovariance]; |
| 1448 | covk = pvl->directAnswer[tenGageCovarianceKGRT]; |
| 1449 | TEN_T_SET(delnormk1, 1, 0.57735026, 0, 0, 0.57735026, 0, 0.57735026)( (delnormk1)[0] = (1), (delnormk1)[1] = (0.57735026), (delnormk1 )[2] = (0), (delnormk1)[3] = (0), (delnormk1)[4] = (0.57735026 ), (delnormk1)[5] = (0), (delnormk1)[6] = (0.57735026) ); |
| 1450 | igrt[0] = delnormk1; |
| 1451 | igrt[1] = pvl->directAnswer[tenGageDelNormK2]; |
| 1452 | igrt[2] = pvl->directAnswer[tenGageDelNormK3]; |
| 1453 | igrt[3] = pvl->directAnswer[tenGageDelNormPhi1]; |
| 1454 | igrt[4] = pvl->directAnswer[tenGageDelNormPhi2]; |
| 1455 | igrt[5] = pvl->directAnswer[tenGageDelNormPhi3]; |
| 1456 | |
| 1457 | cc = 0; |
| 1458 | for (taa=0; taa<6; taa++) { |
| 1459 | for (tbb=taa; tbb<6; tbb++) { |
| 1460 | covk[cc] = tenDoubleContract_d(igrt[tbb], cov, igrt[taa]); |
| 1461 | cc++; |
| 1462 | } |
| 1463 | } |
| 1464 | } |
| 1465 | |
| 1466 | /* these are items that somewhat bypass the convolution result |
| 1467 | (in tenGageTensor) because it has to do something else fancy |
| 1468 | with the constituent tensors. This is young and hacky code; |
| 1469 | and it may be that facilitating this kind of processing should |
| 1470 | be better supported by the gage API ... */ |
| 1471 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTensorLogEuclidean)(pvl->query[tenGageTensorLogEuclidean/8] & (1 << (tenGageTensorLogEuclidean % 8))) || |
| 1472 | GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTensorQuatGeoLoxK)(pvl->query[tenGageTensorQuatGeoLoxK/8] & (1 << ( tenGageTensorQuatGeoLoxK % 8))) || |
| 1473 | GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTensorQuatGeoLoxR)(pvl->query[tenGageTensorQuatGeoLoxR/8] & (1 << ( tenGageTensorQuatGeoLoxR % 8))) || |
| 1474 | GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTensorRThetaPhiLinear)(pvl->query[tenGageTensorRThetaPhiLinear/8] & (1 << (tenGageTensorRThetaPhiLinear % 8)))) { |
| 1475 | unsigned int vijk, vii, vjj, vkk, fd, fddd; |
| 1476 | _tenGagePvlData *pvlData; |
| 1477 | double *ans; |
| 1478 | int qret; |
| 1479 | |
| 1480 | pvlData = AIR_CAST(_tenGagePvlData *, pvl->data)((_tenGagePvlData *)(pvl->data)); |
| 1481 | /* HEY: casting because radius is signed (shouldn't be) */ |
| 1482 | fd = AIR_CAST(unsigned int, 2*ctx->radius)((unsigned int)(2*ctx->radius)); |
| 1483 | fddd = fd*fd*fd; |
| 1484 | for (vijk=0; vijk<fddd; vijk++) { |
| 1485 | double wxx, wyy, wzz; |
| 1486 | unsigned int tt; |
| 1487 | vii = vijk % fd; |
| 1488 | vjj = (vijk/fd) % fd; |
| 1489 | vkk = vijk/fd/fd; |
| 1490 | wxx = ctx->fw[vii + fd*(0 + 3*gageKernel00)]; |
| 1491 | wyy = ctx->fw[vjj + fd*(1 + 3*gageKernel00)]; |
| 1492 | wzz = ctx->fw[vkk + fd*(2 + 3*gageKernel00)]; |
| 1493 | pvlData->buffWght[vijk] = wxx*wyy*wzz; |
| 1494 | for (tt=0; tt<7; tt++) { |
| 1495 | pvlData->buffTen[tt + 7*vijk] = pvl->iv3[vijk + fddd*tt]; |
| 1496 | } |
| 1497 | } |
| 1498 | |
| 1499 | qret = 0; |
| 1500 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTensorLogEuclidean)(pvl->query[tenGageTensorLogEuclidean/8] & (1 << (tenGageTensorLogEuclidean % 8)))) { |
| 1501 | ans = pvl->directAnswer[tenGageTensorLogEuclidean]; |
| 1502 | qret = tenInterpN_d(ans, pvlData->buffTen, pvlData->buffWght, fddd, |
| 1503 | tenInterpTypeLogLinear, pvlData->tip); |
| 1504 | } |
| 1505 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTensorQuatGeoLoxK)(pvl->query[tenGageTensorQuatGeoLoxK/8] & (1 << ( tenGageTensorQuatGeoLoxK % 8)))) { |
| 1506 | ans = pvl->directAnswer[tenGageTensorQuatGeoLoxK]; |
| 1507 | qret = tenInterpN_d(ans, pvlData->buffTen, pvlData->buffWght, fddd, |
| 1508 | tenInterpTypeQuatGeoLoxK, pvlData->tip); |
| 1509 | } |
| 1510 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTensorQuatGeoLoxR)(pvl->query[tenGageTensorQuatGeoLoxR/8] & (1 << ( tenGageTensorQuatGeoLoxR % 8)))) { |
| 1511 | ans = pvl->directAnswer[tenGageTensorQuatGeoLoxR]; |
| 1512 | qret= tenInterpN_d(ans, pvlData->buffTen, pvlData->buffWght, fddd, |
| 1513 | tenInterpTypeQuatGeoLoxR, pvlData->tip); |
| 1514 | } |
| 1515 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTensorRThetaPhiLinear)(pvl->query[tenGageTensorRThetaPhiLinear/8] & (1 << (tenGageTensorRThetaPhiLinear % 8)))) { |
| 1516 | ans = pvl->directAnswer[tenGageTensorRThetaPhiLinear]; |
| 1517 | qret= tenInterpN_d(ans, pvlData->buffTen, pvlData->buffWght, fddd, |
| 1518 | tenInterpTypeRThetaPhiLinear, pvlData->tip); |
| 1519 | } |
| 1520 | if (qret) { |
| 1521 | char *lerr; |
| 1522 | fprintf(stderr__stderrp, "!%s: problem!!!\n %s", me, lerr = biffGet(TENtenBiffKey)); |
| 1523 | free(lerr); |
| 1524 | } |
| 1525 | } |
| 1526 | |
| 1527 | /* --- cl/cp/ca gradients --- */ |
| 1528 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageCl1GradVec)(pvl->query[tenGageCl1GradVec/8] & (1 << (tenGageCl1GradVec % 8)))) { |
| 1529 | vecTmp = pvl->directAnswer[tenGageCl1GradVec]; |
| 1530 | |
| 1531 | ELL_3V_SET(vecTmp,((vecTmp)[0] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][3]-pvl->directAnswer[tenGageEvalGrads][6]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][0]+pvl->directAnswer [tenGageEvalGrads][6]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]-pvl->directAnswer[tenGageEvalGrads][3])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[1] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][4]-pvl->directAnswer[tenGageEvalGrads][7]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][1]+pvl->directAnswer [tenGageEvalGrads][7]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][1]-pvl->directAnswer[tenGageEvalGrads][4])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[2] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][5]-pvl->directAnswer[tenGageEvalGrads][8]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][2]+pvl->directAnswer [tenGageEvalGrads][8]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][2]-pvl->directAnswer[tenGageEvalGrads][5])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0]))) |
| 1532 | (evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads][3]-pvl->directAnswer[tenGageEvalGrads][6])((vecTmp)[0] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][3]-pvl->directAnswer[tenGageEvalGrads][6]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][0]+pvl->directAnswer [tenGageEvalGrads][6]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]-pvl->directAnswer[tenGageEvalGrads][3])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[1] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][4]-pvl->directAnswer[tenGageEvalGrads][7]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][1]+pvl->directAnswer [tenGageEvalGrads][7]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][1]-pvl->directAnswer[tenGageEvalGrads][4])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[2] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][5]-pvl->directAnswer[tenGageEvalGrads][8]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][2]+pvl->directAnswer [tenGageEvalGrads][8]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][2]-pvl->directAnswer[tenGageEvalGrads][5])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0]))) |
| 1533 | +evalAns[1]*(2*pvl->directAnswer[tenGageEvalGrads][0]+pvl->directAnswer[tenGageEvalGrads][6])((vecTmp)[0] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][3]-pvl->directAnswer[tenGageEvalGrads][6]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][0]+pvl->directAnswer [tenGageEvalGrads][6]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]-pvl->directAnswer[tenGageEvalGrads][3])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[1] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][4]-pvl->directAnswer[tenGageEvalGrads][7]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][1]+pvl->directAnswer [tenGageEvalGrads][7]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][1]-pvl->directAnswer[tenGageEvalGrads][4])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[2] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][5]-pvl->directAnswer[tenGageEvalGrads][8]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][2]+pvl->directAnswer [tenGageEvalGrads][8]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][2]-pvl->directAnswer[tenGageEvalGrads][5])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0]))) |
| 1534 | +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads][0]-pvl->directAnswer[tenGageEvalGrads][3]))((vecTmp)[0] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][3]-pvl->directAnswer[tenGageEvalGrads][6]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][0]+pvl->directAnswer [tenGageEvalGrads][6]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]-pvl->directAnswer[tenGageEvalGrads][3])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[1] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][4]-pvl->directAnswer[tenGageEvalGrads][7]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][1]+pvl->directAnswer [tenGageEvalGrads][7]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][1]-pvl->directAnswer[tenGageEvalGrads][4])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[2] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][5]-pvl->directAnswer[tenGageEvalGrads][8]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][2]+pvl->directAnswer [tenGageEvalGrads][8]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][2]-pvl->directAnswer[tenGageEvalGrads][5])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0]))) |
| 1535 | /(pvl->directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0]),((vecTmp)[0] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][3]-pvl->directAnswer[tenGageEvalGrads][6]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][0]+pvl->directAnswer [tenGageEvalGrads][6]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]-pvl->directAnswer[tenGageEvalGrads][3])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[1] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][4]-pvl->directAnswer[tenGageEvalGrads][7]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][1]+pvl->directAnswer [tenGageEvalGrads][7]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][1]-pvl->directAnswer[tenGageEvalGrads][4])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[2] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][5]-pvl->directAnswer[tenGageEvalGrads][8]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][2]+pvl->directAnswer [tenGageEvalGrads][8]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][2]-pvl->directAnswer[tenGageEvalGrads][5])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0]))) |
| 1536 | (evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads][4]-pvl->directAnswer[tenGageEvalGrads][7])((vecTmp)[0] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][3]-pvl->directAnswer[tenGageEvalGrads][6]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][0]+pvl->directAnswer [tenGageEvalGrads][6]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]-pvl->directAnswer[tenGageEvalGrads][3])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[1] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][4]-pvl->directAnswer[tenGageEvalGrads][7]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][1]+pvl->directAnswer [tenGageEvalGrads][7]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][1]-pvl->directAnswer[tenGageEvalGrads][4])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[2] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][5]-pvl->directAnswer[tenGageEvalGrads][8]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][2]+pvl->directAnswer [tenGageEvalGrads][8]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][2]-pvl->directAnswer[tenGageEvalGrads][5])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0]))) |
| 1537 | +evalAns[1]*(2*pvl->directAnswer[tenGageEvalGrads][1]+pvl->directAnswer[tenGageEvalGrads][7])((vecTmp)[0] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][3]-pvl->directAnswer[tenGageEvalGrads][6]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][0]+pvl->directAnswer [tenGageEvalGrads][6]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]-pvl->directAnswer[tenGageEvalGrads][3])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[1] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][4]-pvl->directAnswer[tenGageEvalGrads][7]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][1]+pvl->directAnswer [tenGageEvalGrads][7]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][1]-pvl->directAnswer[tenGageEvalGrads][4])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[2] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][5]-pvl->directAnswer[tenGageEvalGrads][8]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][2]+pvl->directAnswer [tenGageEvalGrads][8]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][2]-pvl->directAnswer[tenGageEvalGrads][5])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0]))) |
| 1538 | +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads][1]-pvl->directAnswer[tenGageEvalGrads][4]))((vecTmp)[0] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][3]-pvl->directAnswer[tenGageEvalGrads][6]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][0]+pvl->directAnswer [tenGageEvalGrads][6]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]-pvl->directAnswer[tenGageEvalGrads][3])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[1] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][4]-pvl->directAnswer[tenGageEvalGrads][7]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][1]+pvl->directAnswer [tenGageEvalGrads][7]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][1]-pvl->directAnswer[tenGageEvalGrads][4])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[2] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][5]-pvl->directAnswer[tenGageEvalGrads][8]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][2]+pvl->directAnswer [tenGageEvalGrads][8]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][2]-pvl->directAnswer[tenGageEvalGrads][5])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0]))) |
| 1539 | /(pvl->directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0]),((vecTmp)[0] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][3]-pvl->directAnswer[tenGageEvalGrads][6]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][0]+pvl->directAnswer [tenGageEvalGrads][6]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]-pvl->directAnswer[tenGageEvalGrads][3])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[1] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][4]-pvl->directAnswer[tenGageEvalGrads][7]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][1]+pvl->directAnswer [tenGageEvalGrads][7]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][1]-pvl->directAnswer[tenGageEvalGrads][4])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[2] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][5]-pvl->directAnswer[tenGageEvalGrads][8]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][2]+pvl->directAnswer [tenGageEvalGrads][8]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][2]-pvl->directAnswer[tenGageEvalGrads][5])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0]))) |
| 1540 | (evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads][5]-pvl->directAnswer[tenGageEvalGrads][8])((vecTmp)[0] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][3]-pvl->directAnswer[tenGageEvalGrads][6]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][0]+pvl->directAnswer [tenGageEvalGrads][6]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]-pvl->directAnswer[tenGageEvalGrads][3])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[1] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][4]-pvl->directAnswer[tenGageEvalGrads][7]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][1]+pvl->directAnswer [tenGageEvalGrads][7]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][1]-pvl->directAnswer[tenGageEvalGrads][4])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[2] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][5]-pvl->directAnswer[tenGageEvalGrads][8]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][2]+pvl->directAnswer [tenGageEvalGrads][8]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][2]-pvl->directAnswer[tenGageEvalGrads][5])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0]))) |
| 1541 | +evalAns[1]*(2*pvl->directAnswer[tenGageEvalGrads][2]+pvl->directAnswer[tenGageEvalGrads][8])((vecTmp)[0] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][3]-pvl->directAnswer[tenGageEvalGrads][6]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][0]+pvl->directAnswer [tenGageEvalGrads][6]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]-pvl->directAnswer[tenGageEvalGrads][3])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[1] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][4]-pvl->directAnswer[tenGageEvalGrads][7]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][1]+pvl->directAnswer [tenGageEvalGrads][7]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][1]-pvl->directAnswer[tenGageEvalGrads][4])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[2] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][5]-pvl->directAnswer[tenGageEvalGrads][8]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][2]+pvl->directAnswer [tenGageEvalGrads][8]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][2]-pvl->directAnswer[tenGageEvalGrads][5])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0]))) |
| 1542 | +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads][2]-pvl->directAnswer[tenGageEvalGrads][5]))((vecTmp)[0] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][3]-pvl->directAnswer[tenGageEvalGrads][6]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][0]+pvl->directAnswer [tenGageEvalGrads][6]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]-pvl->directAnswer[tenGageEvalGrads][3])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[1] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][4]-pvl->directAnswer[tenGageEvalGrads][7]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][1]+pvl->directAnswer [tenGageEvalGrads][7]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][1]-pvl->directAnswer[tenGageEvalGrads][4])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[2] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][5]-pvl->directAnswer[tenGageEvalGrads][8]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][2]+pvl->directAnswer [tenGageEvalGrads][8]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][2]-pvl->directAnswer[tenGageEvalGrads][5])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0]))) |
| 1543 | /(pvl->directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0]))((vecTmp)[0] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][3]-pvl->directAnswer[tenGageEvalGrads][6]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][0]+pvl->directAnswer [tenGageEvalGrads][6]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]-pvl->directAnswer[tenGageEvalGrads][3])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[1] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][4]-pvl->directAnswer[tenGageEvalGrads][7]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][1]+pvl->directAnswer [tenGageEvalGrads][7]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][1]-pvl->directAnswer[tenGageEvalGrads][4])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[2] = ((evalAns[0]*(-2*pvl->directAnswer[tenGageEvalGrads ][5]-pvl->directAnswer[tenGageEvalGrads][8]) +evalAns[1]*( 2*pvl->directAnswer[tenGageEvalGrads][2]+pvl->directAnswer [tenGageEvalGrads][8]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][2]-pvl->directAnswer[tenGageEvalGrads][5])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0]))); |
| 1544 | } |
| 1545 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageCl1GradMag)(pvl->query[tenGageCl1GradMag/8] & (1 << (tenGageCl1GradMag % 8)))) { |
| 1546 | magTmp = pvl->directAnswer[tenGageCl1GradMag][0] = ELL_3V_LEN(vecTmp)(sqrt((((vecTmp))[0]*((vecTmp))[0] + ((vecTmp))[1]*((vecTmp)) [1] + ((vecTmp))[2]*((vecTmp))[2]))); |
| 1547 | } |
| 1548 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageCl1Normal)(pvl->query[tenGageCl1Normal/8] & (1 << (tenGageCl1Normal % 8)))) { |
| 1549 | ELL_3V_SCALE(pvl->directAnswer[tenGageCl1Normal],((pvl->directAnswer[tenGageCl1Normal])[0] = (magTmp ? 1/magTmp : 0)*(vecTmp)[0], (pvl->directAnswer[tenGageCl1Normal])[1 ] = (magTmp ? 1/magTmp : 0)*(vecTmp)[1], (pvl->directAnswer [tenGageCl1Normal])[2] = (magTmp ? 1/magTmp : 0)*(vecTmp)[2]) |
| 1550 | magTmp ? 1/magTmp : 0, vecTmp)((pvl->directAnswer[tenGageCl1Normal])[0] = (magTmp ? 1/magTmp : 0)*(vecTmp)[0], (pvl->directAnswer[tenGageCl1Normal])[1 ] = (magTmp ? 1/magTmp : 0)*(vecTmp)[1], (pvl->directAnswer [tenGageCl1Normal])[2] = (magTmp ? 1/magTmp : 0)*(vecTmp)[2]); |
| 1551 | } |
| 1552 | |
| 1553 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageCp1GradVec)(pvl->query[tenGageCp1GradVec/8] & (1 << (tenGageCp1GradVec % 8)))) { |
| 1554 | vecTmp = pvl->directAnswer[tenGageCp1GradVec]; |
| 1555 | |
| 1556 | ELL_3V_SET(vecTmp,((vecTmp)[0] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][3]-pvl->directAnswer[tenGageEvalGrads][6]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][0]-2*pvl->directAnswer [tenGageEvalGrads][6]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]+2*pvl->directAnswer[tenGageEvalGrads][3])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0])), (vecTmp)[1] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][4]-pvl->directAnswer[tenGageEvalGrads][7]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][1]-2*pvl->directAnswer [tenGageEvalGrads][7]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][1]+2*pvl->directAnswer[tenGageEvalGrads][4])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0])), (vecTmp)[2] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][5]-pvl->directAnswer[tenGageEvalGrads][8]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][2]-2*pvl->directAnswer [tenGageEvalGrads][8]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][2]+2*pvl->directAnswer[tenGageEvalGrads][5])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0]))) |
| 1557 | 2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads][3]-pvl->directAnswer[tenGageEvalGrads][6])((vecTmp)[0] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][3]-pvl->directAnswer[tenGageEvalGrads][6]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][0]-2*pvl->directAnswer [tenGageEvalGrads][6]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]+2*pvl->directAnswer[tenGageEvalGrads][3])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0])), (vecTmp)[1] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][4]-pvl->directAnswer[tenGageEvalGrads][7]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][1]-2*pvl->directAnswer [tenGageEvalGrads][7]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][1]+2*pvl->directAnswer[tenGageEvalGrads][4])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0])), (vecTmp)[2] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][5]-pvl->directAnswer[tenGageEvalGrads][8]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][2]-2*pvl->directAnswer [tenGageEvalGrads][8]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][2]+2*pvl->directAnswer[tenGageEvalGrads][5])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0]))) |
| 1558 | +evalAns[1]*(-pvl->directAnswer[tenGageEvalGrads][0]-2*pvl->directAnswer[tenGageEvalGrads][6])((vecTmp)[0] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][3]-pvl->directAnswer[tenGageEvalGrads][6]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][0]-2*pvl->directAnswer [tenGageEvalGrads][6]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]+2*pvl->directAnswer[tenGageEvalGrads][3])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0])), (vecTmp)[1] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][4]-pvl->directAnswer[tenGageEvalGrads][7]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][1]-2*pvl->directAnswer [tenGageEvalGrads][7]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][1]+2*pvl->directAnswer[tenGageEvalGrads][4])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0])), (vecTmp)[2] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][5]-pvl->directAnswer[tenGageEvalGrads][8]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][2]-2*pvl->directAnswer [tenGageEvalGrads][8]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][2]+2*pvl->directAnswer[tenGageEvalGrads][5])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0]))) |
| 1559 | +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads][0]+2*pvl->directAnswer[tenGageEvalGrads][3]))((vecTmp)[0] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][3]-pvl->directAnswer[tenGageEvalGrads][6]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][0]-2*pvl->directAnswer [tenGageEvalGrads][6]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]+2*pvl->directAnswer[tenGageEvalGrads][3])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0])), (vecTmp)[1] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][4]-pvl->directAnswer[tenGageEvalGrads][7]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][1]-2*pvl->directAnswer [tenGageEvalGrads][7]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][1]+2*pvl->directAnswer[tenGageEvalGrads][4])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0])), (vecTmp)[2] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][5]-pvl->directAnswer[tenGageEvalGrads][8]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][2]-2*pvl->directAnswer [tenGageEvalGrads][8]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][2]+2*pvl->directAnswer[tenGageEvalGrads][5])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0]))) |
| 1560 | /(pvl->directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0]),((vecTmp)[0] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][3]-pvl->directAnswer[tenGageEvalGrads][6]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][0]-2*pvl->directAnswer [tenGageEvalGrads][6]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]+2*pvl->directAnswer[tenGageEvalGrads][3])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0])), (vecTmp)[1] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][4]-pvl->directAnswer[tenGageEvalGrads][7]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][1]-2*pvl->directAnswer [tenGageEvalGrads][7]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][1]+2*pvl->directAnswer[tenGageEvalGrads][4])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0])), (vecTmp)[2] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][5]-pvl->directAnswer[tenGageEvalGrads][8]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][2]-2*pvl->directAnswer [tenGageEvalGrads][8]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][2]+2*pvl->directAnswer[tenGageEvalGrads][5])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0]))) |
| 1561 | 2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads][4]-pvl->directAnswer[tenGageEvalGrads][7])((vecTmp)[0] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][3]-pvl->directAnswer[tenGageEvalGrads][6]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][0]-2*pvl->directAnswer [tenGageEvalGrads][6]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]+2*pvl->directAnswer[tenGageEvalGrads][3])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0])), (vecTmp)[1] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][4]-pvl->directAnswer[tenGageEvalGrads][7]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][1]-2*pvl->directAnswer [tenGageEvalGrads][7]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][1]+2*pvl->directAnswer[tenGageEvalGrads][4])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0])), (vecTmp)[2] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][5]-pvl->directAnswer[tenGageEvalGrads][8]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][2]-2*pvl->directAnswer [tenGageEvalGrads][8]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][2]+2*pvl->directAnswer[tenGageEvalGrads][5])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0]))) |
| 1562 | +evalAns[1]*(-pvl->directAnswer[tenGageEvalGrads][1]-2*pvl->directAnswer[tenGageEvalGrads][7])((vecTmp)[0] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][3]-pvl->directAnswer[tenGageEvalGrads][6]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][0]-2*pvl->directAnswer [tenGageEvalGrads][6]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]+2*pvl->directAnswer[tenGageEvalGrads][3])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0])), (vecTmp)[1] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][4]-pvl->directAnswer[tenGageEvalGrads][7]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][1]-2*pvl->directAnswer [tenGageEvalGrads][7]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][1]+2*pvl->directAnswer[tenGageEvalGrads][4])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0])), (vecTmp)[2] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][5]-pvl->directAnswer[tenGageEvalGrads][8]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][2]-2*pvl->directAnswer [tenGageEvalGrads][8]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][2]+2*pvl->directAnswer[tenGageEvalGrads][5])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0]))) |
| 1563 | +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads][1]+2*pvl->directAnswer[tenGageEvalGrads][4]))((vecTmp)[0] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][3]-pvl->directAnswer[tenGageEvalGrads][6]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][0]-2*pvl->directAnswer [tenGageEvalGrads][6]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]+2*pvl->directAnswer[tenGageEvalGrads][3])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0])), (vecTmp)[1] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][4]-pvl->directAnswer[tenGageEvalGrads][7]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][1]-2*pvl->directAnswer [tenGageEvalGrads][7]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][1]+2*pvl->directAnswer[tenGageEvalGrads][4])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0])), (vecTmp)[2] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][5]-pvl->directAnswer[tenGageEvalGrads][8]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][2]-2*pvl->directAnswer [tenGageEvalGrads][8]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][2]+2*pvl->directAnswer[tenGageEvalGrads][5])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0]))) |
| 1564 | /(pvl->directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0]),((vecTmp)[0] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][3]-pvl->directAnswer[tenGageEvalGrads][6]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][0]-2*pvl->directAnswer [tenGageEvalGrads][6]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]+2*pvl->directAnswer[tenGageEvalGrads][3])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0])), (vecTmp)[1] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][4]-pvl->directAnswer[tenGageEvalGrads][7]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][1]-2*pvl->directAnswer [tenGageEvalGrads][7]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][1]+2*pvl->directAnswer[tenGageEvalGrads][4])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0])), (vecTmp)[2] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][5]-pvl->directAnswer[tenGageEvalGrads][8]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][2]-2*pvl->directAnswer [tenGageEvalGrads][8]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][2]+2*pvl->directAnswer[tenGageEvalGrads][5])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0]))) |
| 1565 | 2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads][5]-pvl->directAnswer[tenGageEvalGrads][8])((vecTmp)[0] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][3]-pvl->directAnswer[tenGageEvalGrads][6]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][0]-2*pvl->directAnswer [tenGageEvalGrads][6]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]+2*pvl->directAnswer[tenGageEvalGrads][3])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0])), (vecTmp)[1] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][4]-pvl->directAnswer[tenGageEvalGrads][7]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][1]-2*pvl->directAnswer [tenGageEvalGrads][7]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][1]+2*pvl->directAnswer[tenGageEvalGrads][4])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0])), (vecTmp)[2] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][5]-pvl->directAnswer[tenGageEvalGrads][8]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][2]-2*pvl->directAnswer [tenGageEvalGrads][8]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][2]+2*pvl->directAnswer[tenGageEvalGrads][5])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0]))) |
| 1566 | +evalAns[1]*(-pvl->directAnswer[tenGageEvalGrads][2]-2*pvl->directAnswer[tenGageEvalGrads][8])((vecTmp)[0] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][3]-pvl->directAnswer[tenGageEvalGrads][6]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][0]-2*pvl->directAnswer [tenGageEvalGrads][6]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]+2*pvl->directAnswer[tenGageEvalGrads][3])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0])), (vecTmp)[1] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][4]-pvl->directAnswer[tenGageEvalGrads][7]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][1]-2*pvl->directAnswer [tenGageEvalGrads][7]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][1]+2*pvl->directAnswer[tenGageEvalGrads][4])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0])), (vecTmp)[2] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][5]-pvl->directAnswer[tenGageEvalGrads][8]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][2]-2*pvl->directAnswer [tenGageEvalGrads][8]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][2]+2*pvl->directAnswer[tenGageEvalGrads][5])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0]))) |
| 1567 | +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads][2]+2*pvl->directAnswer[tenGageEvalGrads][5]))((vecTmp)[0] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][3]-pvl->directAnswer[tenGageEvalGrads][6]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][0]-2*pvl->directAnswer [tenGageEvalGrads][6]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]+2*pvl->directAnswer[tenGageEvalGrads][3])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0])), (vecTmp)[1] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][4]-pvl->directAnswer[tenGageEvalGrads][7]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][1]-2*pvl->directAnswer [tenGageEvalGrads][7]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][1]+2*pvl->directAnswer[tenGageEvalGrads][4])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0])), (vecTmp)[2] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][5]-pvl->directAnswer[tenGageEvalGrads][8]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][2]-2*pvl->directAnswer [tenGageEvalGrads][8]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][2]+2*pvl->directAnswer[tenGageEvalGrads][5])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0]))) |
| 1568 | /(pvl->directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0]))((vecTmp)[0] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][3]-pvl->directAnswer[tenGageEvalGrads][6]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][0]-2*pvl->directAnswer [tenGageEvalGrads][6]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]+2*pvl->directAnswer[tenGageEvalGrads][3])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0])), (vecTmp)[1] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][4]-pvl->directAnswer[tenGageEvalGrads][7]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][1]-2*pvl->directAnswer [tenGageEvalGrads][7]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][1]+2*pvl->directAnswer[tenGageEvalGrads][4])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0])), (vecTmp)[2] = (2*(evalAns[0]*(pvl->directAnswer[tenGageEvalGrads ][5]-pvl->directAnswer[tenGageEvalGrads][8]) +evalAns[1]*( -pvl->directAnswer[tenGageEvalGrads][2]-2*pvl->directAnswer [tenGageEvalGrads][8]) +evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][2]+2*pvl->directAnswer[tenGageEvalGrads][5])) /(pvl-> directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace ][0]))); |
| 1569 | } |
| 1570 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageCp1GradMag)(pvl->query[tenGageCp1GradMag/8] & (1 << (tenGageCp1GradMag % 8)))) { |
| 1571 | magTmp = pvl->directAnswer[tenGageCp1GradMag][0] = ELL_3V_LEN(vecTmp)(sqrt((((vecTmp))[0]*((vecTmp))[0] + ((vecTmp))[1]*((vecTmp)) [1] + ((vecTmp))[2]*((vecTmp))[2]))); |
| 1572 | } |
| 1573 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageCp1Normal)(pvl->query[tenGageCp1Normal/8] & (1 << (tenGageCp1Normal % 8)))) { |
| 1574 | ELL_3V_SCALE(pvl->directAnswer[tenGageCp1Normal],((pvl->directAnswer[tenGageCp1Normal])[0] = (magTmp ? 1/magTmp : 0)*(vecTmp)[0], (pvl->directAnswer[tenGageCp1Normal])[1 ] = (magTmp ? 1/magTmp : 0)*(vecTmp)[1], (pvl->directAnswer [tenGageCp1Normal])[2] = (magTmp ? 1/magTmp : 0)*(vecTmp)[2]) |
| 1575 | magTmp ? 1/magTmp : 0, vecTmp)((pvl->directAnswer[tenGageCp1Normal])[0] = (magTmp ? 1/magTmp : 0)*(vecTmp)[0], (pvl->directAnswer[tenGageCp1Normal])[1 ] = (magTmp ? 1/magTmp : 0)*(vecTmp)[1], (pvl->directAnswer [tenGageCp1Normal])[2] = (magTmp ? 1/magTmp : 0)*(vecTmp)[2]); |
| 1576 | } |
| 1577 | |
| 1578 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageCa1GradVec)(pvl->query[tenGageCa1GradVec/8] & (1 << (tenGageCa1GradVec % 8)))) { |
| 1579 | vecTmp = pvl->directAnswer[tenGageCa1GradVec]; |
| 1580 | |
| 1581 | ELL_3V_SET(vecTmp,((vecTmp)[0] = (-3*((evalAns[0]+evalAns[1])*pvl->directAnswer [tenGageEvalGrads][6] -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]+pvl->directAnswer[tenGageEvalGrads][3])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[1] = (-3*((evalAns[0]+evalAns[1])*pvl->directAnswer[tenGageEvalGrads ][7] -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads][1]+pvl ->directAnswer[tenGageEvalGrads][4])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[2] = (-3*((evalAns[0]+evalAns[1])*pvl->directAnswer[tenGageEvalGrads ][8] -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads][2]+pvl ->directAnswer[tenGageEvalGrads][5])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0]))) |
| 1582 | -3*((evalAns[0]+evalAns[1])*pvl->directAnswer[tenGageEvalGrads][6]((vecTmp)[0] = (-3*((evalAns[0]+evalAns[1])*pvl->directAnswer [tenGageEvalGrads][6] -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]+pvl->directAnswer[tenGageEvalGrads][3])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[1] = (-3*((evalAns[0]+evalAns[1])*pvl->directAnswer[tenGageEvalGrads ][7] -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads][1]+pvl ->directAnswer[tenGageEvalGrads][4])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[2] = (-3*((evalAns[0]+evalAns[1])*pvl->directAnswer[tenGageEvalGrads ][8] -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads][2]+pvl ->directAnswer[tenGageEvalGrads][5])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0]))) |
| 1583 | -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads][0]+pvl->directAnswer[tenGageEvalGrads][3]))((vecTmp)[0] = (-3*((evalAns[0]+evalAns[1])*pvl->directAnswer [tenGageEvalGrads][6] -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]+pvl->directAnswer[tenGageEvalGrads][3])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[1] = (-3*((evalAns[0]+evalAns[1])*pvl->directAnswer[tenGageEvalGrads ][7] -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads][1]+pvl ->directAnswer[tenGageEvalGrads][4])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[2] = (-3*((evalAns[0]+evalAns[1])*pvl->directAnswer[tenGageEvalGrads ][8] -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads][2]+pvl ->directAnswer[tenGageEvalGrads][5])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0]))) |
| 1584 | /(pvl->directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0]),((vecTmp)[0] = (-3*((evalAns[0]+evalAns[1])*pvl->directAnswer [tenGageEvalGrads][6] -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]+pvl->directAnswer[tenGageEvalGrads][3])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[1] = (-3*((evalAns[0]+evalAns[1])*pvl->directAnswer[tenGageEvalGrads ][7] -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads][1]+pvl ->directAnswer[tenGageEvalGrads][4])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[2] = (-3*((evalAns[0]+evalAns[1])*pvl->directAnswer[tenGageEvalGrads ][8] -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads][2]+pvl ->directAnswer[tenGageEvalGrads][5])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0]))) |
| 1585 | -3*((evalAns[0]+evalAns[1])*pvl->directAnswer[tenGageEvalGrads][7]((vecTmp)[0] = (-3*((evalAns[0]+evalAns[1])*pvl->directAnswer [tenGageEvalGrads][6] -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]+pvl->directAnswer[tenGageEvalGrads][3])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[1] = (-3*((evalAns[0]+evalAns[1])*pvl->directAnswer[tenGageEvalGrads ][7] -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads][1]+pvl ->directAnswer[tenGageEvalGrads][4])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[2] = (-3*((evalAns[0]+evalAns[1])*pvl->directAnswer[tenGageEvalGrads ][8] -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads][2]+pvl ->directAnswer[tenGageEvalGrads][5])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0]))) |
| 1586 | -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads][1]+pvl->directAnswer[tenGageEvalGrads][4]))((vecTmp)[0] = (-3*((evalAns[0]+evalAns[1])*pvl->directAnswer [tenGageEvalGrads][6] -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]+pvl->directAnswer[tenGageEvalGrads][3])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[1] = (-3*((evalAns[0]+evalAns[1])*pvl->directAnswer[tenGageEvalGrads ][7] -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads][1]+pvl ->directAnswer[tenGageEvalGrads][4])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[2] = (-3*((evalAns[0]+evalAns[1])*pvl->directAnswer[tenGageEvalGrads ][8] -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads][2]+pvl ->directAnswer[tenGageEvalGrads][5])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0]))) |
| 1587 | /(pvl->directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0]),((vecTmp)[0] = (-3*((evalAns[0]+evalAns[1])*pvl->directAnswer [tenGageEvalGrads][6] -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]+pvl->directAnswer[tenGageEvalGrads][3])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[1] = (-3*((evalAns[0]+evalAns[1])*pvl->directAnswer[tenGageEvalGrads ][7] -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads][1]+pvl ->directAnswer[tenGageEvalGrads][4])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[2] = (-3*((evalAns[0]+evalAns[1])*pvl->directAnswer[tenGageEvalGrads ][8] -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads][2]+pvl ->directAnswer[tenGageEvalGrads][5])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0]))) |
| 1588 | -3*((evalAns[0]+evalAns[1])*pvl->directAnswer[tenGageEvalGrads][8]((vecTmp)[0] = (-3*((evalAns[0]+evalAns[1])*pvl->directAnswer [tenGageEvalGrads][6] -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]+pvl->directAnswer[tenGageEvalGrads][3])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[1] = (-3*((evalAns[0]+evalAns[1])*pvl->directAnswer[tenGageEvalGrads ][7] -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads][1]+pvl ->directAnswer[tenGageEvalGrads][4])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[2] = (-3*((evalAns[0]+evalAns[1])*pvl->directAnswer[tenGageEvalGrads ][8] -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads][2]+pvl ->directAnswer[tenGageEvalGrads][5])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0]))) |
| 1589 | -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads][2]+pvl->directAnswer[tenGageEvalGrads][5]))((vecTmp)[0] = (-3*((evalAns[0]+evalAns[1])*pvl->directAnswer [tenGageEvalGrads][6] -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]+pvl->directAnswer[tenGageEvalGrads][3])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[1] = (-3*((evalAns[0]+evalAns[1])*pvl->directAnswer[tenGageEvalGrads ][7] -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads][1]+pvl ->directAnswer[tenGageEvalGrads][4])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[2] = (-3*((evalAns[0]+evalAns[1])*pvl->directAnswer[tenGageEvalGrads ][8] -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads][2]+pvl ->directAnswer[tenGageEvalGrads][5])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0]))) |
| 1590 | /(pvl->directAnswer[tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0]))((vecTmp)[0] = (-3*((evalAns[0]+evalAns[1])*pvl->directAnswer [tenGageEvalGrads][6] -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads ][0]+pvl->directAnswer[tenGageEvalGrads][3])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[1] = (-3*((evalAns[0]+evalAns[1])*pvl->directAnswer[tenGageEvalGrads ][7] -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads][1]+pvl ->directAnswer[tenGageEvalGrads][4])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0])), (vecTmp )[2] = (-3*((evalAns[0]+evalAns[1])*pvl->directAnswer[tenGageEvalGrads ][8] -evalAns[2]*(pvl->directAnswer[tenGageEvalGrads][2]+pvl ->directAnswer[tenGageEvalGrads][5])) /(pvl->directAnswer [tenGageTrace][0]*pvl->directAnswer[tenGageTrace][0]))); |
| 1591 | } |
| 1592 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageCa1GradMag)(pvl->query[tenGageCa1GradMag/8] & (1 << (tenGageCa1GradMag % 8)))) { |
| 1593 | magTmp = pvl->directAnswer[tenGageCa1GradMag][0] = ELL_3V_LEN(vecTmp)(sqrt((((vecTmp))[0]*((vecTmp))[0] + ((vecTmp))[1]*((vecTmp)) [1] + ((vecTmp))[2]*((vecTmp))[2]))); |
| 1594 | } |
| 1595 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageCa1Normal)(pvl->query[tenGageCa1Normal/8] & (1 << (tenGageCa1Normal % 8)))) { |
| 1596 | ELL_3V_SCALE(pvl->directAnswer[tenGageCa1Normal],((pvl->directAnswer[tenGageCa1Normal])[0] = (magTmp ? 1/magTmp : 0)*(vecTmp)[0], (pvl->directAnswer[tenGageCa1Normal])[1 ] = (magTmp ? 1/magTmp : 0)*(vecTmp)[1], (pvl->directAnswer [tenGageCa1Normal])[2] = (magTmp ? 1/magTmp : 0)*(vecTmp)[2]) |
| 1597 | magTmp ? 1/magTmp : 0, vecTmp)((pvl->directAnswer[tenGageCa1Normal])[0] = (magTmp ? 1/magTmp : 0)*(vecTmp)[0], (pvl->directAnswer[tenGageCa1Normal])[1 ] = (magTmp ? 1/magTmp : 0)*(vecTmp)[1], (pvl->directAnswer [tenGageCa1Normal])[2] = (magTmp ? 1/magTmp : 0)*(vecTmp)[2]); |
| 1598 | } |
| 1599 | |
| 1600 | /* --- tensor gradient, rotated into eigenframe of the tensor itself --- */ |
| 1601 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageTensorGradRotE)(pvl->query[tenGageTensorGradRotE/8] & (1 << (tenGageTensorGradRotE % 8)))) { |
| 1602 | /* confidence not affected by rotation */ |
| 1603 | double evecsT[9], evecs[9], tmp[9], tmp2[9]; |
| 1604 | double diff0, diff1, diff2, diffthresh; |
| 1605 | double rdiff0, rdiff1, rdiff2; |
| 1606 | unsigned int evi, tci; |
| 1607 | |
| 1608 | ELL_3V_COPY(pvl->directAnswer[tenGageTensorGradRotE],((pvl->directAnswer[tenGageTensorGradRotE])[0] = (pvl-> directAnswer[tenGageTensorGrad])[0], (pvl->directAnswer[tenGageTensorGradRotE ])[1] = (pvl->directAnswer[tenGageTensorGrad])[1], (pvl-> directAnswer[tenGageTensorGradRotE])[2] = (pvl->directAnswer [tenGageTensorGrad])[2]) |
| 1609 | pvl->directAnswer[tenGageTensorGrad])((pvl->directAnswer[tenGageTensorGradRotE])[0] = (pvl-> directAnswer[tenGageTensorGrad])[0], (pvl->directAnswer[tenGageTensorGradRotE ])[1] = (pvl->directAnswer[tenGageTensorGrad])[1], (pvl-> directAnswer[tenGageTensorGradRotE])[2] = (pvl->directAnswer [tenGageTensorGrad])[2]); |
| 1610 | |
| 1611 | /* pre-compute relative eval diffs to detect ill-conditioned case */ |
| 1612 | diff0=(evalAns[0]-evalAns[1])/(fabs(evalAns[0])+fabs(evalAns[1])); |
| 1613 | diff1=(evalAns[1]-evalAns[2])/(fabs(evalAns[1])+fabs(evalAns[2])); |
| 1614 | diff2=(evalAns[0]-evalAns[2])/(fabs(evalAns[0])+fabs(evalAns[2])); |
| 1615 | diffthresh=0.05; |
| 1616 | |
| 1617 | if (diff2>diffthresh) rdiff2=1.0; else rdiff2=diff2/diffthresh; |
| 1618 | if (diff1>diffthresh) rdiff1=1.0; else rdiff1=diff1/diffthresh; |
| 1619 | if (diff0>diffthresh) rdiff0=1.0; else rdiff0=diff0/diffthresh; |
| 1620 | |
| 1621 | ELL_3M_COPY(evecs,evecAns)((((evecs)+0)[0] = ((evecAns)+0)[0], ((evecs)+0)[1] = ((evecAns )+0)[1], ((evecs)+0)[2] = ((evecAns)+0)[2]), (((evecs)+3)[0] = ((evecAns)+3)[0], ((evecs)+3)[1] = ((evecAns)+3)[1], ((evecs )+3)[2] = ((evecAns)+3)[2]), (((evecs)+6)[0] = ((evecAns)+6)[ 0], ((evecs)+6)[1] = ((evecAns)+6)[1], ((evecs)+6)[2] = ((evecAns )+6)[2])); |
| 1622 | ELL_3M_TRANSPOSE(evecsT,evecs)((evecsT)[0] = (evecs)[0], (evecsT)[1] = (evecs)[3], (evecsT) [2] = (evecs)[6], (evecsT)[3] = (evecs)[1], (evecsT)[4] = (evecs )[4], (evecsT)[5] = (evecs)[7], (evecsT)[6] = (evecs)[2], (evecsT )[7] = (evecs)[5], (evecsT)[8] = (evecs)[8]); |
| 1623 | for (evi=0; evi<3; evi++) { |
| 1624 | char sign; |
| 1625 | /* first, simply rotate derivatives into eigenframe of value */ |
| 1626 | TEN_T2M(tmp,gradDdXYZ + evi*7)( (tmp)[0] = (gradDdXYZ + evi*7)[1], (tmp)[1] = (gradDdXYZ + evi *7)[2], (tmp)[2] = (gradDdXYZ + evi*7)[3], (tmp)[3] = (gradDdXYZ + evi*7)[2], (tmp)[4] = (gradDdXYZ + evi*7)[4], (tmp)[5] = ( gradDdXYZ + evi*7)[5], (tmp)[6] = (gradDdXYZ + evi*7)[3], (tmp )[7] = (gradDdXYZ + evi*7)[5], (tmp)[8] = (gradDdXYZ + evi*7) [6] ); |
| 1627 | ell_3m_mul_d(tmp2,tmp,evecsT); |
| 1628 | ell_3m_mul_d(tmp,evecs,tmp2); |
| 1629 | |
| 1630 | /* If necessary, perform a number of additional rotations to |
| 1631 | * distribute eigenvalue derivatives equally in ill-defined |
| 1632 | * cases. Explanation in Schultz and Seidel, "Using Eigenvalue |
| 1633 | * Derivatives for Edge Detection in DT-MRI Data", DAGM 2008*/ |
| 1634 | if (rdiff0<1.0) { |
| 1635 | /* the goal is to find the smallest angle phi such that |
| 1636 | * rotation by phi around z will result in tmp[0]=tmp[4], i.e.: |
| 1637 | * |
| 1638 | * cos(phi)^2*tmp[0]-2*sin(phi)*cos(phi)*tmp[1]+sin(phi)^2*tmp[4] = |
| 1639 | * sin(phi)^2*tmp[0]+2*sin(phi)*cos(phi)*tmp[1]+cos(phi)^2*tmp[4] |
| 1640 | * => |
| 1641 | * tan(2*phi)=(tmp[0]-tmp[4])/(2*tmp[1]) |
| 1642 | * |
| 1643 | * we use atan2 to avoid potential problems with tmp[1]==0, |
| 1644 | * but manipulate the signs of the arguments s.t. the result |
| 1645 | * is always in [-pi/2,pi/2] (i.e., the smallest solution of |
| 1646 | * the above equality) |
| 1647 | */ |
| 1648 | |
| 1649 | /* rotate around z axis */ |
| 1650 | double phi, R[9], RT[9]; |
| 1651 | sign = (tmp[0]-tmp[4])*tmp[1]>0?1:-1; |
| 1652 | phi=0.5*atan2(sign*fabs(tmp[0]-tmp[4]),fabs(2*tmp[1])); |
| 1653 | ELL_3M_ROTATE_Z_SET(R, (1.0-rdiff0)*phi)((((R)+ 0)[0] = (cos((1.0-rdiff0)*phi)), ((R)+ 0)[1] = (-sin( (1.0-rdiff0)*phi)), ((R)+ 0)[2] = (0)), (((R)+ 3)[0] = (+sin( (1.0-rdiff0)*phi)), ((R)+ 3)[1] = (cos((1.0-rdiff0)*phi)), (( R)+ 3)[2] = (0)), (((R)+ 6)[0] = (0), ((R)+ 6)[1] = (0), ((R) + 6)[2] = (1))); |
| 1654 | ELL_3M_TRANSPOSE(RT,R)((RT)[0] = (R)[0], (RT)[1] = (R)[3], (RT)[2] = (R)[6], (RT)[3 ] = (R)[1], (RT)[4] = (R)[4], (RT)[5] = (R)[7], (RT)[6] = (R) [2], (RT)[7] = (R)[5], (RT)[8] = (R)[8]); |
| 1655 | ell_3m_mul_d(tmp2,tmp,RT); |
| 1656 | ell_3m_mul_d(tmp,R,tmp2); |
| 1657 | } |
| 1658 | if (rdiff1<1.0) { |
| 1659 | /* rotate around x axis */ |
| 1660 | double phi, R[9], RT[9]; |
| 1661 | sign = (tmp[4]-tmp[8])*tmp[5]>0?1:-1; |
| 1662 | phi=0.5*atan2(sign*fabs(tmp[4]-tmp[8]),fabs(2*tmp[5])); |
| 1663 | ELL_3M_ROTATE_X_SET(R, (1.0-rdiff1)*phi)((((R)+ 0)[0] = (1), ((R)+ 0)[1] = (0), ((R)+ 0)[2] = (0)), ( ((R)+ 3)[0] = (0), ((R)+ 3)[1] = (cos((1.0-rdiff1)*phi)), ((R )+ 3)[2] = (-sin((1.0-rdiff1)*phi))), (((R)+ 6)[0] = (0), ((R )+ 6)[1] = (+sin((1.0-rdiff1)*phi)), ((R)+ 6)[2] = (cos((1.0- rdiff1)*phi)))); |
| 1664 | ELL_3M_TRANSPOSE(RT,R)((RT)[0] = (R)[0], (RT)[1] = (R)[3], (RT)[2] = (R)[6], (RT)[3 ] = (R)[1], (RT)[4] = (R)[4], (RT)[5] = (R)[7], (RT)[6] = (R) [2], (RT)[7] = (R)[5], (RT)[8] = (R)[8]); |
| 1665 | ell_3m_mul_d(tmp2,tmp,RT); |
| 1666 | ell_3m_mul_d(tmp,R,tmp2); |
| 1667 | } |
| 1668 | if (rdiff2<1.0) { |
| 1669 | double mean, submatrix[3], isoPhi, _gamma, beta, A, C, R[9],RT[9]; |
| 1670 | int axis, midaxis, smallest; |
| 1671 | |
| 1672 | mean=(tmp[0]+tmp[4]+tmp[8])/3.0; |
| 1673 | /* what's the median? */ |
| 1674 | midaxis=0; |
| 1675 | if ((tmp[0]>tmp[4] && tmp[4]>tmp[8])|| |
| 1676 | (tmp[0]<tmp[4] && tmp[4]<tmp[8])) |
| 1677 | midaxis=1; |
| 1678 | else if ((tmp[4]>tmp[8] && tmp[8]>tmp[0])|| |
| 1679 | (tmp[4]<tmp[8] && tmp[8]<tmp[0])) |
| 1680 | midaxis=2; |
| 1681 | /* do we first rotate around smallest or largest? */ |
| 1682 | smallest = 0; |
| 1683 | if (mean>tmp[4*midaxis]) { |
| 1684 | smallest=1; |
| 1685 | } |
| 1686 | |
| 1687 | sign=1; |
| 1688 | if ((smallest && (tmp[0]<tmp[4] && tmp[0]<tmp[8])) || |
| 1689 | (!smallest && (tmp[0]>tmp[4] && tmp[0]>tmp[8]))) { |
| 1690 | axis=0; |
| 1691 | submatrix[0]=tmp[4]; |
| 1692 | submatrix[1]=tmp[5]; |
| 1693 | submatrix[2]=tmp[8]; |
| 1694 | if (midaxis!=1) sign=-1; |
| 1695 | } else if ((smallest && (tmp[4]<tmp[0] && tmp[4]<tmp[8])) || |
| 1696 | (!smallest && (tmp[4]>tmp[0] && tmp[4]>tmp[8]))) { |
| 1697 | axis=1; |
| 1698 | submatrix[0]=tmp[8]; |
| 1699 | submatrix[1]=tmp[2]; |
| 1700 | submatrix[2]=tmp[0]; |
| 1701 | if (midaxis!=2) sign=-1; |
| 1702 | } else { |
| 1703 | axis=2; |
| 1704 | submatrix[0]=tmp[0]; |
| 1705 | submatrix[1]=tmp[1]; |
| 1706 | submatrix[2]=tmp[4]; |
| 1707 | if (midaxis!=0) sign=-1; |
| 1708 | } |
| 1709 | isoPhi=0.0f; |
| 1710 | _gamma=sign*(submatrix[0]-submatrix[2]); |
| 1711 | beta=-sign*2*submatrix[1]; |
| 1712 | A=sqrt(_gamma*_gamma+beta*beta); |
| 1713 | C=atan2(_gamma,beta); |
| 1714 | isoPhi=0.5*(asin(2.0/A*(mean-0.5*(submatrix[0]+submatrix[2])))-C); |
| 1715 | /* make sure we use the minimal rotation */ |
| 1716 | isoPhi=asin(2.0/A*(mean-0.5*(submatrix[0]+submatrix[2]))); |
| 1717 | if (isoPhi>0) { |
| 1718 | if (fabs(AIR_PI3.14159265358979323846-isoPhi-C)<fabs(isoPhi-C)) |
| 1719 | isoPhi=0.5*(AIR_PI3.14159265358979323846-isoPhi-C); |
| 1720 | else |
| 1721 | isoPhi=0.5*(isoPhi-C); |
| 1722 | } else if (isoPhi<0) { |
| 1723 | if (fabs(-AIR_PI3.14159265358979323846-isoPhi-C)<fabs(isoPhi-C)) |
| 1724 | isoPhi=0.5*(-AIR_PI3.14159265358979323846-isoPhi-C); |
| 1725 | else |
| 1726 | isoPhi=0.5*(isoPhi-C); |
| 1727 | } |
| 1728 | |
| 1729 | /* perform the rotation */ |
| 1730 | switch (axis) { |
| 1731 | case 0: |
| 1732 | ELL_3M_ROTATE_X_SET(R, (1.0-rdiff2)*isoPhi)((((R)+ 0)[0] = (1), ((R)+ 0)[1] = (0), ((R)+ 0)[2] = (0)), ( ((R)+ 3)[0] = (0), ((R)+ 3)[1] = (cos((1.0-rdiff2)*isoPhi)), ( (R)+ 3)[2] = (-sin((1.0-rdiff2)*isoPhi))), (((R)+ 6)[0] = (0) , ((R)+ 6)[1] = (+sin((1.0-rdiff2)*isoPhi)), ((R)+ 6)[2] = (cos ((1.0-rdiff2)*isoPhi)))); |
| 1733 | break; |
| 1734 | case 1: |
| 1735 | ELL_3M_ROTATE_Y_SET(R, (1.0-rdiff2)*isoPhi)((((R)+ 0)[0] = (cos((1.0-rdiff2)*isoPhi)), ((R)+ 0)[1] = (0) , ((R)+ 0)[2] = (+sin((1.0-rdiff2)*isoPhi))), (((R)+ 3)[0] = ( 0), ((R)+ 3)[1] = (1), ((R)+ 3)[2] = (0)), (((R)+ 6)[0] = (-sin ((1.0-rdiff2)*isoPhi)), ((R)+ 6)[1] = (0), ((R)+ 6)[2] = (cos ((1.0-rdiff2)*isoPhi)))); |
| 1736 | break; |
| 1737 | default: |
| 1738 | ELL_3M_ROTATE_Z_SET(R, (1.0-rdiff2)*isoPhi)((((R)+ 0)[0] = (cos((1.0-rdiff2)*isoPhi)), ((R)+ 0)[1] = (-sin ((1.0-rdiff2)*isoPhi)), ((R)+ 0)[2] = (0)), (((R)+ 3)[0] = (+ sin((1.0-rdiff2)*isoPhi)), ((R)+ 3)[1] = (cos((1.0-rdiff2)*isoPhi )), ((R)+ 3)[2] = (0)), (((R)+ 6)[0] = (0), ((R)+ 6)[1] = (0) , ((R)+ 6)[2] = (1))); |
| 1739 | break; |
| 1740 | } |
| 1741 | ELL_3M_TRANSPOSE(RT,R)((RT)[0] = (R)[0], (RT)[1] = (R)[3], (RT)[2] = (R)[6], (RT)[3 ] = (R)[1], (RT)[4] = (R)[4], (RT)[5] = (R)[7], (RT)[6] = (R) [2], (RT)[7] = (R)[5], (RT)[8] = (R)[8]); |
| 1742 | ell_3m_mul_d(tmp2,tmp,RT); |
| 1743 | ell_3m_mul_d(tmp,R,tmp2); |
| 1744 | |
| 1745 | /* rotate around the now corrected evec */ |
| 1746 | axis=midaxis; |
Value stored to 'axis' is never read | |
| 1747 | switch (midaxis) { |
| 1748 | case 0: |
| 1749 | sign = (tmp[0]-tmp[4])*tmp[1]>0?1:-1; |
| 1750 | ELL_3M_ROTATE_X_SET(R, (1.0-rdiff2)*0.5*atan2(sign*fabs(tmp[0]-tmp[4]),fabs(2*tmp[1])))((((R)+ 0)[0] = (1), ((R)+ 0)[1] = (0), ((R)+ 0)[2] = (0)), ( ((R)+ 3)[0] = (0), ((R)+ 3)[1] = (cos((1.0-rdiff2)*0.5*atan2( sign*fabs(tmp[0]-tmp[4]),fabs(2*tmp[1])))), ((R)+ 3)[2] = (-sin ((1.0-rdiff2)*0.5*atan2(sign*fabs(tmp[0]-tmp[4]),fabs(2*tmp[1 ]))))), (((R)+ 6)[0] = (0), ((R)+ 6)[1] = (+sin((1.0-rdiff2)* 0.5*atan2(sign*fabs(tmp[0]-tmp[4]),fabs(2*tmp[1])))), ((R)+ 6 )[2] = (cos((1.0-rdiff2)*0.5*atan2(sign*fabs(tmp[0]-tmp[4]),fabs (2*tmp[1])))))); |
| 1751 | break; |
| 1752 | case 1: |
| 1753 | sign = (tmp[8]-tmp[0])*tmp[2]>0?1:-1; |
| 1754 | ELL_3M_ROTATE_Y_SET(R, (1.0-rdiff2)*0.5*atan2(sign*fabs(tmp[8]-tmp[0]),fabs(2*tmp[2])))((((R)+ 0)[0] = (cos((1.0-rdiff2)*0.5*atan2(sign*fabs(tmp[8]- tmp[0]),fabs(2*tmp[2])))), ((R)+ 0)[1] = (0), ((R)+ 0)[2] = ( +sin((1.0-rdiff2)*0.5*atan2(sign*fabs(tmp[8]-tmp[0]),fabs(2*tmp [2]))))), (((R)+ 3)[0] = (0), ((R)+ 3)[1] = (1), ((R)+ 3)[2] = (0)), (((R)+ 6)[0] = (-sin((1.0-rdiff2)*0.5*atan2(sign*fabs( tmp[8]-tmp[0]),fabs(2*tmp[2])))), ((R)+ 6)[1] = (0), ((R)+ 6) [2] = (cos((1.0-rdiff2)*0.5*atan2(sign*fabs(tmp[8]-tmp[0]),fabs (2*tmp[2])))))); |
| 1755 | break; |
| 1756 | case 2: |
| 1757 | sign = (tmp[4]-tmp[8])*tmp[5]>0?1:-1; |
| 1758 | ELL_3M_ROTATE_Z_SET(R, (1.0-rdiff2)*0.5*atan2(sign*fabs(tmp[4]-tmp[8]),fabs(2*tmp[5])))((((R)+ 0)[0] = (cos((1.0-rdiff2)*0.5*atan2(sign*fabs(tmp[4]- tmp[8]),fabs(2*tmp[5])))), ((R)+ 0)[1] = (-sin((1.0-rdiff2)*0.5 *atan2(sign*fabs(tmp[4]-tmp[8]),fabs(2*tmp[5])))), ((R)+ 0)[2 ] = (0)), (((R)+ 3)[0] = (+sin((1.0-rdiff2)*0.5*atan2(sign*fabs (tmp[4]-tmp[8]),fabs(2*tmp[5])))), ((R)+ 3)[1] = (cos((1.0-rdiff2 )*0.5*atan2(sign*fabs(tmp[4]-tmp[8]),fabs(2*tmp[5])))), ((R)+ 3)[2] = (0)), (((R)+ 6)[0] = (0), ((R)+ 6)[1] = (0), ((R)+ 6 )[2] = (1))); |
| 1759 | break; |
| 1760 | } |
| 1761 | ELL_3M_TRANSPOSE(RT,R)((RT)[0] = (R)[0], (RT)[1] = (R)[3], (RT)[2] = (R)[6], (RT)[3 ] = (R)[1], (RT)[4] = (R)[4], (RT)[5] = (R)[7], (RT)[6] = (R) [2], (RT)[7] = (R)[5], (RT)[8] = (R)[8]); |
| 1762 | ell_3m_mul_d(tmp2,tmp,RT); |
| 1763 | ell_3m_mul_d(tmp,R,tmp2); |
| 1764 | } |
| 1765 | /* Now, we can set the answer */ |
| 1766 | TEN_M2T(tmp2,tmp)( (tmp2)[1] = (tmp)[0], (tmp2)[2] = ((tmp)[1]+(tmp)[3])/2.0, ( tmp2)[3] = ((tmp)[2]+(tmp)[6])/2.0, (tmp2)[4] = (tmp)[4], (tmp2 )[5] = ((tmp)[5]+(tmp)[7])/2.0, (tmp2)[6] = (tmp)[8] ); |
| 1767 | for (tci=1; tci<7; tci++) { |
| 1768 | pvl->directAnswer[tenGageTensorGradRotE][3*tci+evi] = tmp2[tci]; |
| 1769 | } |
| 1770 | } |
| 1771 | } |
| 1772 | |
| 1773 | /* --- Eigenvalue Hessians: rotate partial second derivatives into |
| 1774 | * eigenframe and take into account correction factor based on |
| 1775 | * eigenvector derivatives --- */ |
| 1776 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageEvalHessian)(pvl->query[tenGageEvalHessian/8] & (1 << (tenGageEvalHessian % 8)))) { |
| 1777 | /* some aliases for convenience: */ |
| 1778 | double *thess = pvl->directAnswer[tenGageHessian]; |
| 1779 | double *evhess = pvl->directAnswer[tenGageEvalHessian]; |
| 1780 | double *tgradE = pvl->directAnswer[tenGageTensorGradRotE]; |
| 1781 | int dira, dirb; /* directions of first/second partial derivative */ |
| 1782 | int k; /* number of the eigenvalue */ |
| 1783 | double evecsT[9], tmp[9]; |
| 1784 | /* HEY: some copy-paste from tenGageEvalGrads */ |
| 1785 | double eps=0.05; /* treshold for handling degeneracies */ |
| 1786 | double rel1, rel2, rel3, w1, w2; |
| 1787 | /* interpolation weights from relative eigenvalue distance */ |
| 1788 | rel1=evalAns[0]*evalAns[0]+evalAns[1]*evalAns[1]; |
| 1789 | if (rel1>1e-10) |
| 1790 | rel1=(evalAns[0]-evalAns[1])*(evalAns[0]-evalAns[1])/rel1; |
| 1791 | rel2=evalAns[0]*evalAns[0]+evalAns[2]*evalAns[2]; |
| 1792 | if (rel2>1e-10) |
| 1793 | rel2=(evalAns[0]-evalAns[2])*(evalAns[0]-evalAns[2])/rel2; |
| 1794 | rel3=evalAns[1]*evalAns[1]+evalAns[2]*evalAns[2]; |
| 1795 | if (rel3>1e-10) |
| 1796 | rel3=(evalAns[1]-evalAns[2])*(evalAns[1]-evalAns[2])/rel3; |
| 1797 | w1=rel1/eps-1; |
| 1798 | w1*=w1; |
| 1799 | w2=rel2/eps-1; |
| 1800 | w2*=w2; |
| 1801 | |
| 1802 | ELL_3M_TRANSPOSE(evecsT,evecAns)((evecsT)[0] = (evecAns)[0], (evecsT)[1] = (evecAns)[3], (evecsT )[2] = (evecAns)[6], (evecsT)[3] = (evecAns)[1], (evecsT)[4] = (evecAns)[4], (evecsT)[5] = (evecAns)[7], (evecsT)[6] = (evecAns )[2], (evecsT)[7] = (evecAns)[5], (evecsT)[8] = (evecAns)[8]); |
| 1803 | for (dira=0; dira<3; dira++) { |
| 1804 | for (dirb=0; dirb<=dira; dirb++) { /* exploit symmetry of Hessian */ |
| 1805 | double rdiff1,rdiff2; |
| 1806 | double l1res, l2res, l3res; |
| 1807 | /* collect second partial derivatives in dira,dirb */ |
| 1808 | double H[9]; |
| 1809 | ELL_3V_SET(H, thess[9+3*dirb+dira], thess[18+3*dirb+dira],((H)[0] = (thess[9+3*dirb+dira]), (H)[1] = (thess[18+3*dirb+dira ]), (H)[2] = (thess[27+3*dirb+dira])) |
| 1810 | thess[27+3*dirb+dira])((H)[0] = (thess[9+3*dirb+dira]), (H)[1] = (thess[18+3*dirb+dira ]), (H)[2] = (thess[27+3*dirb+dira])); |
| 1811 | ELL_3V_SET(H+3, thess[18+3*dirb+dira], thess[36+3*dirb+dira],((H+3)[0] = (thess[18+3*dirb+dira]), (H+3)[1] = (thess[36+3*dirb +dira]), (H+3)[2] = (thess[45+3*dirb+dira])) |
| 1812 | thess[45+3*dirb+dira])((H+3)[0] = (thess[18+3*dirb+dira]), (H+3)[1] = (thess[36+3*dirb +dira]), (H+3)[2] = (thess[45+3*dirb+dira])); |
| 1813 | ELL_3V_SET(H+6, thess[27+3*dirb+dira], thess[45+3*dirb+dira],((H+6)[0] = (thess[27+3*dirb+dira]), (H+6)[1] = (thess[45+3*dirb +dira]), (H+6)[2] = (thess[54+3*dirb+dira])) |
| 1814 | thess[54+3*dirb+dira])((H+6)[0] = (thess[27+3*dirb+dira]), (H+6)[1] = (thess[45+3*dirb +dira]), (H+6)[2] = (thess[54+3*dirb+dira])); |
| 1815 | /* rotate into eigenframe of value */ |
| 1816 | ell_3m_mul_d(tmp,H,evecsT); |
| 1817 | ell_3m_mul_d(H,evecAns,tmp); |
| 1818 | |
| 1819 | /* we have to divide by rdiff=lambda_1-lambda_2; the following |
| 1820 | * is a heuristic to avoid numerical problems in case rdiff is |
| 1821 | * near zero */ |
| 1822 | if (rel1>eps) rdiff1=1.0/(evalAns[0]-evalAns[1]); |
| 1823 | else if (rel1>1e-10) rdiff1=(rel1/eps)/(evalAns[0]-evalAns[1]); |
| 1824 | else rdiff1=0; |
| 1825 | |
| 1826 | if (rel2>eps) rdiff2=1.0/(evalAns[0]-evalAns[2]); |
| 1827 | else if (rel2>1e-10) rdiff2=(rel2/eps)/(evalAns[0]-evalAns[2]); |
| 1828 | else rdiff2=0; |
| 1829 | |
| 1830 | l1res=H[0]+2*(tgradE[6+dira]*tgradE[6+dirb]*rdiff1+ |
| 1831 | tgradE[9+dira]*tgradE[9+dirb]*rdiff2); |
| 1832 | |
| 1833 | if (rel1>eps) rdiff1=1.0/(evalAns[1]-evalAns[0]); |
| 1834 | else if (rel1>1e-10) rdiff1=(rel1/eps)/(evalAns[1]-evalAns[0]); |
| 1835 | else rdiff1=0; |
| 1836 | |
| 1837 | if (rel3>eps) rdiff2=1.0/(evalAns[1]-evalAns[2]); |
| 1838 | else if (rel3>1e-10) rdiff2=(rel3/eps)/(evalAns[1]-evalAns[2]); |
| 1839 | else rdiff2=0; |
| 1840 | l2res=H[4]+2*(tgradE[6+dira]*tgradE[6+dirb]*rdiff1+ |
| 1841 | tgradE[15+dira]*tgradE[15+dirb]*rdiff2); |
| 1842 | |
| 1843 | if (rel2>eps) rdiff1=1.0/(evalAns[2]-evalAns[0]); |
| 1844 | else if (rel2>1e-10) rdiff1=(rel2/eps)/(evalAns[2]-evalAns[0]); |
| 1845 | else rdiff1=0; |
| 1846 | |
| 1847 | if (rel3>eps) rdiff2=1.0/(evalAns[2]-evalAns[1]); |
| 1848 | else if (rel3>1e-10) rdiff2=(rel3/eps)/(evalAns[2]-evalAns[1]); |
| 1849 | else rdiff2=0; |
| 1850 | |
| 1851 | l3res=H[8]+2*(tgradE[9+dira]*tgradE[9+dirb]*rdiff1+ |
| 1852 | tgradE[15+dira]*tgradE[15+dirb]*rdiff2); |
| 1853 | |
| 1854 | if (rel1>eps) |
| 1855 | evhess[3*dirb+dira]=l1res; |
| 1856 | else { |
| 1857 | if (rel2>eps) |
| 1858 | evhess[3*dirb+dira]=(1-0.5*w1)*l1res+0.5*w1*l2res; |
| 1859 | else |
| 1860 | evhess[3*dirb+dira]=(1-0.5*w1-w1*w2/6.0)*l1res+ |
| 1861 | (0.5*w1-w1*w2/6.0)*l2res+ |
| 1862 | w1*w2/3.0*l3res; |
| 1863 | } |
| 1864 | |
| 1865 | if (rel2>eps) |
| 1866 | evhess[18+3*dirb+dira]=l3res; |
| 1867 | else { |
| 1868 | if (rel1>eps) |
| 1869 | evhess[18+3*dirb+dira]=(1-0.5*w2)*l3res+0.5*w2*l2res; |
| 1870 | else |
| 1871 | evhess[18+3*dirb+dira]=(1-0.5*w2-w1*w2/6.0)*l3res+ |
| 1872 | (0.5*w2-w1*w2/6.0)*l2res+ |
| 1873 | w1*w2/3.0*l1res; |
| 1874 | } |
| 1875 | evhess[9+3*dirb+dira]=l1res+l2res+l3res - evhess[3*dirb+dira] - |
| 1876 | evhess[18+3*dirb+dira]; |
| 1877 | } |
| 1878 | } |
| 1879 | for (dira=0; dira<2; dira++) { |
| 1880 | for (dirb=dira+1; dirb<3; dirb++) { /* copy over symmetric values */ |
| 1881 | for (k=0; k<3; k++) { |
| 1882 | evhess[9*k+3*dirb+dira]=evhess[9*k+3*dira+dirb]; |
| 1883 | } |
| 1884 | } |
| 1885 | } |
| 1886 | } |
| 1887 | |
| 1888 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageCl1Hessian)(pvl->query[tenGageCl1Hessian/8] & (1 << (tenGageCl1Hessian % 8)))) { |
| 1889 | int dira, dirb; |
| 1890 | double *cl1hess = pvl->directAnswer[tenGageCl1Hessian]; |
| 1891 | double *tgradE = pvl->directAnswer[tenGageTensorGradRotE]; |
| 1892 | double *evhess = pvl->directAnswer[tenGageEvalHessian]; |
| 1893 | /* A and B come out of the quotient rule; cf. appendix of Schultz |
| 1894 | * et al., TVCG 2010 for more details */ |
| 1895 | double B = (evalAns[0]+evalAns[1]+evalAns[2])* |
| 1896 | (evalAns[0]+evalAns[1]+evalAns[2]); |
| 1897 | for (dira=0; dira<3; dira++) { |
| 1898 | for (dirb=0; dirb<=dira; dirb++) { /* again, exploit Hessian symmetry */ |
| 1899 | double A = evalAns[0]*(-2*tgradE[12+dira]-tgradE[18+dira])+ |
| 1900 | evalAns[1]*(2*tgradE[3+dira]+tgradE[18+dira])+ |
| 1901 | evalAns[2]*(tgradE[3+dira]-tgradE[12+dira]); |
| 1902 | double Ad = tgradE[3+dirb]*(-2*tgradE[12+dira]-tgradE[18+dira])+ |
| 1903 | evalAns[0]*(-2*evhess[9+3*dirb+dira]-evhess[18+3*dirb+dira])+ |
| 1904 | tgradE[12+dirb]*(2*tgradE[3+dira]+tgradE[18+dira])+ |
| 1905 | evalAns[1]*(2*evhess[3*dirb+dira]+evhess[18+3*dirb+dira])+ |
| 1906 | tgradE[18+dirb]*(tgradE[3+dira]-tgradE[12+dira])+ |
| 1907 | evalAns[2]*(evhess[3*dirb+dira]-evhess[9+3*dirb+dira]); |
| 1908 | double Bd = 2*(evalAns[0]+evalAns[1]+evalAns[2])* |
| 1909 | (tgradE[3+dirb]+tgradE[12+dirb]+tgradE[18+dirb]); |
| 1910 | cl1hess[3*dirb+dira]=Ad/B-A/B*Bd/B; |
| 1911 | } |
| 1912 | } |
| 1913 | for (dira=0; dira<2; dira++) { |
| 1914 | for (dirb=dira+1; dirb<3; dirb++) { /* copy over symmetric values */ |
| 1915 | cl1hess[3*dirb+dira]=cl1hess[3*dira+dirb]; |
| 1916 | } |
| 1917 | } |
| 1918 | } |
| 1919 | |
| 1920 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageCl1HessianEvec)(pvl->query[tenGageCl1HessianEvec/8] & (1 << (tenGageCl1HessianEvec % 8)))) { |
| 1921 | ell_3m_eigensolve_d(pvl->directAnswer[tenGageCl1HessianEval], |
| 1922 | pvl->directAnswer[tenGageCl1HessianEvec], |
| 1923 | pvl->directAnswer[tenGageCl1Hessian], AIR_TRUE1); |
| 1924 | } else if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageCl1HessianEval)(pvl->query[tenGageCl1HessianEval/8] & (1 << (tenGageCl1HessianEval % 8)))) { |
| 1925 | ell_3m_eigenvalues_d(pvl->directAnswer[tenGageCl1HessianEval], |
| 1926 | pvl->directAnswer[tenGageCl1Hessian], AIR_TRUE1); |
| 1927 | } |
| 1928 | |
| 1929 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageCp1Hessian)(pvl->query[tenGageCp1Hessian/8] & (1 << (tenGageCp1Hessian % 8)))) { |
| 1930 | int dira, dirb; |
| 1931 | double *cp1hess = pvl->directAnswer[tenGageCp1Hessian]; |
| 1932 | double *tgradE = pvl->directAnswer[tenGageTensorGradRotE]; |
| 1933 | double *evhess = pvl->directAnswer[tenGageEvalHessian]; |
| 1934 | double B = (evalAns[0]+evalAns[1]+evalAns[2])* |
| 1935 | (evalAns[0]+evalAns[1]+evalAns[2]); |
| 1936 | for (dira=0; dira<3; dira++) { |
| 1937 | for (dirb=0; dirb<=dira; dirb++) { /* again, exploit Hessian symmetry */ |
| 1938 | double A = 2*(evalAns[0]*(tgradE[12+dira]-tgradE[18+dira])+ |
| 1939 | evalAns[1]*(-tgradE[3+dira]-2*tgradE[18+dira])+ |
| 1940 | evalAns[2]*(tgradE[3+dira]+2*tgradE[12+dira])); |
| 1941 | double Ad=2*(evalAns[0]*(evhess[9+3*dirb+dira]-evhess[18+3*dirb+dira])+ |
| 1942 | evalAns[1]*(-evhess[3*dirb+dira]-2*evhess[18+3*dirb+dira])+ |
| 1943 | evalAns[2]*(evhess[3*dirb+dira]+2*evhess[9+3*dirb+dira])+ |
| 1944 | tgradE[3+dirb]*(tgradE[12+dira]-tgradE[18+dira])+ |
| 1945 | tgradE[12+dirb]*(-tgradE[3+dira]-2*tgradE[18+dira])+ |
| 1946 | tgradE[18+dirb]*(tgradE[3+dira]+2*tgradE[12+dira])); |
| 1947 | double Bd = 2*(evalAns[0]+evalAns[1]+evalAns[2])* |
| 1948 | (tgradE[3+dirb]+tgradE[12+dirb]+tgradE[18+dirb]); |
| 1949 | cp1hess[3*dirb+dira]=Ad/B-A/B*Bd/B; |
| 1950 | } |
| 1951 | } |
| 1952 | for (dira=0; dira<2; dira++) { |
| 1953 | for (dirb=dira+1; dirb<3; dirb++) { /* copy over symmetric values */ |
| 1954 | cp1hess[3*dirb+dira]=cp1hess[3*dira+dirb]; |
| 1955 | } |
| 1956 | } |
| 1957 | } |
| 1958 | |
| 1959 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageCp1HessianEvec)(pvl->query[tenGageCp1HessianEvec/8] & (1 << (tenGageCp1HessianEvec % 8)))) { |
| 1960 | ell_3m_eigensolve_d(pvl->directAnswer[tenGageCp1HessianEval], |
| 1961 | pvl->directAnswer[tenGageCp1HessianEvec], |
| 1962 | pvl->directAnswer[tenGageCp1Hessian], AIR_TRUE1); |
| 1963 | } else if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageCp1HessianEval)(pvl->query[tenGageCp1HessianEval/8] & (1 << (tenGageCp1HessianEval % 8)))) { |
| 1964 | ell_3m_eigenvalues_d(pvl->directAnswer[tenGageCp1HessianEval], |
| 1965 | pvl->directAnswer[tenGageCp1Hessian], AIR_TRUE1); |
| 1966 | } |
| 1967 | |
| 1968 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageCa1Hessian)(pvl->query[tenGageCa1Hessian/8] & (1 << (tenGageCa1Hessian % 8)))) { |
| 1969 | int dira, dirb; |
| 1970 | double *ca1hess = pvl->directAnswer[tenGageCa1Hessian]; |
| 1971 | double *tgradE = pvl->directAnswer[tenGageTensorGradRotE]; |
| 1972 | double *evhess = pvl->directAnswer[tenGageEvalHessian]; |
| 1973 | double B = (evalAns[0]+evalAns[1]+evalAns[2])* |
| 1974 | (evalAns[0]+evalAns[1]+evalAns[2]); |
| 1975 | for (dira=0; dira<3; dira++) { |
| 1976 | for (dirb=0; dirb<=dira; dirb++) { /* again, exploit Hessian symmetry */ |
| 1977 | double A = 3*(evalAns[0]*tgradE[18+dira]+evalAns[1]*tgradE[18+dira]+ |
| 1978 | evalAns[2]*(-tgradE[3+dira]-tgradE[12+dira])); |
| 1979 | double Ad = 3*(tgradE[3+dirb]*tgradE[18+dira]+ |
| 1980 | tgradE[12+dirb]*tgradE[18+dira]+ |
| 1981 | tgradE[18+dirb]*(-tgradE[3+dira]-tgradE[12+dira])+ |
| 1982 | evalAns[0]*evhess[18+3*dirb+dira]+ |
| 1983 | evalAns[1]*evhess[18+3*dirb+dira]+ |
| 1984 | evalAns[2]*(-evhess[3*dirb+dira]-evhess[9+3*dirb+dira])); |
| 1985 | double Bd = 2*(evalAns[0]+evalAns[1]+evalAns[2])* |
| 1986 | (tgradE[3+dirb]+tgradE[12+dirb]+tgradE[18+dirb]); |
| 1987 | /* above formulas are true for cs, so flip sign here */ |
| 1988 | ca1hess[3*dirb+dira]=-Ad/B+A/B*Bd/B; |
| 1989 | } |
| 1990 | } |
| 1991 | for (dira=0; dira<2; dira++) { |
| 1992 | for (dirb=dira+1; dirb<3; dirb++) { /* copy over symmetric values */ |
| 1993 | ca1hess[3*dirb+dira]=ca1hess[3*dira+dirb]; |
| 1994 | } |
| 1995 | } |
| 1996 | } |
| 1997 | |
| 1998 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageCa1HessianEvec)(pvl->query[tenGageCa1HessianEvec/8] & (1 << (tenGageCa1HessianEvec % 8)))) { |
| 1999 | ell_3m_eigensolve_d(pvl->directAnswer[tenGageCa1HessianEval], |
| 2000 | pvl->directAnswer[tenGageCa1HessianEvec], |
| 2001 | pvl->directAnswer[tenGageCa1Hessian], AIR_TRUE1); |
| 2002 | } else if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageCa1HessianEval)(pvl->query[tenGageCa1HessianEval/8] & (1 << (tenGageCa1HessianEval % 8)))) { |
| 2003 | ell_3m_eigenvalues_d(pvl->directAnswer[tenGageCa1HessianEval], |
| 2004 | pvl->directAnswer[tenGageCa1Hessian], AIR_TRUE1); |
| 2005 | } |
| 2006 | |
| 2007 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFiberCurving)(pvl->query[tenGageFiberCurving/8] & (1 << (tenGageFiberCurving % 8))) |
| 2008 | || GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFiberDispersion)(pvl->query[tenGageFiberDispersion/8] & (1 << (tenGageFiberDispersion % 8)))) { |
| 2009 | double rtout[7], evout[7]; |
| 2010 | TEN_T3V_OUTER(rtout, pvl->directAnswer[tenGageRotTans] + 1*3)( (rtout)[0] = 1.0, (rtout)[1] = (pvl->directAnswer[tenGageRotTans ] + 1*3)[0]*(pvl->directAnswer[tenGageRotTans] + 1*3)[0], ( rtout)[2] = (pvl->directAnswer[tenGageRotTans] + 1*3)[0]*( pvl->directAnswer[tenGageRotTans] + 1*3)[1], (rtout)[3] = ( pvl->directAnswer[tenGageRotTans] + 1*3)[0]*(pvl->directAnswer [tenGageRotTans] + 1*3)[2], (rtout)[4] = (pvl->directAnswer [tenGageRotTans] + 1*3)[1]*(pvl->directAnswer[tenGageRotTans ] + 1*3)[1], (rtout)[5] = (pvl->directAnswer[tenGageRotTans ] + 1*3)[1]*(pvl->directAnswer[tenGageRotTans] + 1*3)[2], ( rtout)[6] = (pvl->directAnswer[tenGageRotTans] + 1*3)[2]*( pvl->directAnswer[tenGageRotTans] + 1*3)[2]); |
| 2011 | TEN_T3V_OUTER_INCR(rtout, pvl->directAnswer[tenGageRotTans] + 2*3)( (rtout)[1] += (pvl->directAnswer[tenGageRotTans] + 2*3)[ 0]*(pvl->directAnswer[tenGageRotTans] + 2*3)[0], (rtout)[2 ] += (pvl->directAnswer[tenGageRotTans] + 2*3)[0]*(pvl-> directAnswer[tenGageRotTans] + 2*3)[1], (rtout)[3] += (pvl-> directAnswer[tenGageRotTans] + 2*3)[0]*(pvl->directAnswer[ tenGageRotTans] + 2*3)[2], (rtout)[4] += (pvl->directAnswer [tenGageRotTans] + 2*3)[1]*(pvl->directAnswer[tenGageRotTans ] + 2*3)[1], (rtout)[5] += (pvl->directAnswer[tenGageRotTans ] + 2*3)[1]*(pvl->directAnswer[tenGageRotTans] + 2*3)[2], ( rtout)[6] += (pvl->directAnswer[tenGageRotTans] + 2*3)[2]* (pvl->directAnswer[tenGageRotTans] + 2*3)[2]); |
| 2012 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFiberCurving)(pvl->query[tenGageFiberCurving/8] & (1 << (tenGageFiberCurving % 8)))) { |
| 2013 | TEN_T3V_OUTER(evout, pvl->directAnswer[tenGageEvec0])( (evout)[0] = 1.0, (evout)[1] = (pvl->directAnswer[tenGageEvec0 ])[0]*(pvl->directAnswer[tenGageEvec0])[0], (evout)[2] = ( pvl->directAnswer[tenGageEvec0])[0]*(pvl->directAnswer[ tenGageEvec0])[1], (evout)[3] = (pvl->directAnswer[tenGageEvec0 ])[0]*(pvl->directAnswer[tenGageEvec0])[2], (evout)[4] = ( pvl->directAnswer[tenGageEvec0])[1]*(pvl->directAnswer[ tenGageEvec0])[1], (evout)[5] = (pvl->directAnswer[tenGageEvec0 ])[1]*(pvl->directAnswer[tenGageEvec0])[2], (evout)[6] = ( pvl->directAnswer[tenGageEvec0])[2]*(pvl->directAnswer[ tenGageEvec0])[2]); |
| 2014 | pvl->directAnswer[tenGageFiberCurving][0] = TEN_T_DOT(rtout, evout)( (rtout)[1]*(evout)[1] + 2*(rtout)[2]*(evout)[2] + 2*(rtout) [3]*(evout)[3] + (rtout)[4]*(evout)[4] + 2*(rtout)[5]*(evout) [5] + (rtout)[6]*(evout)[6] ); |
| 2015 | /* pvl->directAnswer[tenGageFiberCurving][0] *= 100000; */ |
| 2016 | } |
| 2017 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageFiberDispersion)(pvl->query[tenGageFiberDispersion/8] & (1 << (tenGageFiberDispersion % 8)))) { |
| 2018 | TEN_T3V_OUTER(evout, pvl->directAnswer[tenGageEvec1])( (evout)[0] = 1.0, (evout)[1] = (pvl->directAnswer[tenGageEvec1 ])[0]*(pvl->directAnswer[tenGageEvec1])[0], (evout)[2] = ( pvl->directAnswer[tenGageEvec1])[0]*(pvl->directAnswer[ tenGageEvec1])[1], (evout)[3] = (pvl->directAnswer[tenGageEvec1 ])[0]*(pvl->directAnswer[tenGageEvec1])[2], (evout)[4] = ( pvl->directAnswer[tenGageEvec1])[1]*(pvl->directAnswer[ tenGageEvec1])[1], (evout)[5] = (pvl->directAnswer[tenGageEvec1 ])[1]*(pvl->directAnswer[tenGageEvec1])[2], (evout)[6] = ( pvl->directAnswer[tenGageEvec1])[2]*(pvl->directAnswer[ tenGageEvec1])[2]); |
| 2019 | TEN_T3V_OUTER_INCR(evout, pvl->directAnswer[tenGageEvec2])( (evout)[1] += (pvl->directAnswer[tenGageEvec2])[0]*(pvl-> directAnswer[tenGageEvec2])[0], (evout)[2] += (pvl->directAnswer [tenGageEvec2])[0]*(pvl->directAnswer[tenGageEvec2])[1], ( evout)[3] += (pvl->directAnswer[tenGageEvec2])[0]*(pvl-> directAnswer[tenGageEvec2])[2], (evout)[4] += (pvl->directAnswer [tenGageEvec2])[1]*(pvl->directAnswer[tenGageEvec2])[1], ( evout)[5] += (pvl->directAnswer[tenGageEvec2])[1]*(pvl-> directAnswer[tenGageEvec2])[2], (evout)[6] += (pvl->directAnswer [tenGageEvec2])[2]*(pvl->directAnswer[tenGageEvec2])[2]); |
| 2020 | pvl->directAnswer[tenGageFiberDispersion][0] = TEN_T_DOT(rtout, evout)( (rtout)[1]*(evout)[1] + 2*(rtout)[2]*(evout)[2] + 2*(rtout) [3]*(evout)[3] + (rtout)[4]*(evout)[4] + 2*(rtout)[5]*(evout) [5] + (rtout)[6]*(evout)[6] ); |
| 2021 | /* pvl->directAnswer[tenGageFiberDispersion][0] *= 100000; */ |
| 2022 | } |
| 2023 | } |
| 2024 | |
| 2025 | /* --- Aniso --- */ |
| 2026 | if (GAGE_QUERY_ITEM_TEST(pvl->query, tenGageAniso)(pvl->query[tenGageAniso/8] & (1 << (tenGageAniso % 8)))) { |
| 2027 | for (ci=tenAnisoUnknown+1; ci<=TEN_ANISO_MAX29; ci++) { |
| 2028 | pvl->directAnswer[tenGageAniso][ci] = tenAnisoEval_d(evalAns, ci); |
| 2029 | } |
| 2030 | } |
| 2031 | |
| 2032 | return; |
| 2033 | } |
| 2034 | |
| 2035 | |
| 2036 | void * |
| 2037 | _tenGagePvlDataNew(const struct gageKind_t *kind) { |
| 2038 | _tenGagePvlData *pvlData; |
| 2039 | |
| 2040 | AIR_UNUSED(kind)(void)(kind); |
| 2041 | pvlData = AIR_CALLOC(1, _tenGagePvlData)(_tenGagePvlData*)(calloc((1), sizeof(_tenGagePvlData))); |
| 2042 | if (pvlData) { |
| 2043 | pvlData->buffTen = NULL((void*)0); |
| 2044 | pvlData->buffWght = NULL((void*)0); |
| 2045 | pvlData->tip = tenInterpParmNew(); |
| 2046 | } |
| 2047 | return pvlData; |
| 2048 | } |
| 2049 | |
| 2050 | void * |
| 2051 | _tenGagePvlDataCopy(const struct gageKind_t *kind, |
| 2052 | const void *_pvlDataOld) { |
| 2053 | _tenGagePvlData *pvlDataNew, *pvlDataOld; |
| 2054 | unsigned int num; |
| 2055 | |
| 2056 | AIR_UNUSED(kind)(void)(kind); |
| 2057 | pvlDataOld = AIR_CAST(_tenGagePvlData *, _pvlDataOld)((_tenGagePvlData *)(_pvlDataOld)); |
| 2058 | num = pvlDataOld->tip->allocLen; |
| 2059 | pvlDataNew = AIR_CALLOC(1, _tenGagePvlData)(_tenGagePvlData*)(calloc((1), sizeof(_tenGagePvlData))); |
| 2060 | if (pvlDataNew) { |
| 2061 | pvlDataNew->buffTen = AIR_CALLOC(7*num, double)(double*)(calloc((7*num), sizeof(double))); |
| 2062 | pvlDataNew->buffWght = AIR_CALLOC(num, double)(double*)(calloc((num), sizeof(double))); |
| 2063 | pvlDataNew->tip = tenInterpParmCopy(pvlDataOld->tip); |
| 2064 | } |
| 2065 | return pvlDataNew; |
| 2066 | } |
| 2067 | |
| 2068 | void * |
| 2069 | _tenGagePvlDataNix(const struct gageKind_t *kind, |
| 2070 | void *_pvlData) { |
| 2071 | _tenGagePvlData *pvlData; |
| 2072 | |
| 2073 | AIR_UNUSED(kind)(void)(kind); |
| 2074 | pvlData = AIR_CAST(_tenGagePvlData *, _pvlData)((_tenGagePvlData *)(_pvlData)); |
| 2075 | airFree(pvlData->buffTen); |
| 2076 | airFree(pvlData->buffWght); |
| 2077 | tenInterpParmNix(pvlData->tip); |
| 2078 | airFree(pvlData); |
| 2079 | return NULL((void*)0); |
| 2080 | } |
| 2081 | |
| 2082 | int |
| 2083 | _tenGagePvlDataUpdate(const struct gageKind_t *kind, |
| 2084 | const gageContext *ctx, const gagePerVolume *pvl, |
| 2085 | const void *_pvlData) { |
| 2086 | _tenGagePvlData *pvlData; |
| 2087 | unsigned int fd, num; |
| 2088 | |
| 2089 | AIR_UNUSED(kind)(void)(kind); |
| 2090 | AIR_UNUSED(pvl)(void)(pvl); |
| 2091 | pvlData = AIR_CAST(_tenGagePvlData *, _pvlData)((_tenGagePvlData *)(_pvlData)); |
| 2092 | fd = AIR_CAST(unsigned int, 2*ctx->radius)((unsigned int)(2*ctx->radius)); |
| 2093 | num = fd*fd*fd; |
| 2094 | if (num != pvlData->tip->allocLen) { |
| 2095 | /* HEY: no error checking */ |
| 2096 | airFree(pvlData->buffTen); |
| 2097 | pvlData->buffTen = NULL((void*)0); |
| 2098 | airFree(pvlData->buffWght); |
| 2099 | pvlData->buffWght = NULL((void*)0); |
| 2100 | pvlData->buffTen = AIR_CALLOC(7*num, double)(double*)(calloc((7*num), sizeof(double))); |
| 2101 | pvlData->buffWght = AIR_CALLOC(num, double)(double*)(calloc((num), sizeof(double))); |
| 2102 | tenInterpParmBufferAlloc(pvlData->tip, num); |
| 2103 | } |
| 2104 | return 0; |
| 2105 | } |
| 2106 | |
| 2107 | |
| 2108 | gageKind |
| 2109 | _tenGageKind = { |
| 2110 | AIR_FALSE0, /* statically allocated */ |
| 2111 | "tensor", |
| 2112 | &_tenGage, |
| 2113 | 1, |
| 2114 | 7, |
| 2115 | TEN_GAGE_ITEM_MAX207, |
| 2116 | _tenGageTable, |
| 2117 | _tenGageIv3Print, |
| 2118 | _tenGageFilter, |
| 2119 | _tenGageAnswer, |
| 2120 | _tenGagePvlDataNew, |
| 2121 | _tenGagePvlDataCopy, |
| 2122 | _tenGagePvlDataNix, |
| 2123 | _tenGagePvlDataUpdate, |
| 2124 | NULL((void*)0) |
| 2125 | }; |
| 2126 | gageKind * |
| 2127 | tenGageKind = &_tenGageKind; |