| File: | src/gage/vecGage.c |
| Location: | line 388, column 5 |
| Description: | Assigned value is garbage or undefined |
| 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 "gage.h" | |||||
| 25 | #include "privateGage.h" | |||||
| 26 | ||||||
| 27 | /* | |||||
| 28 | * highly inefficient computation of the imaginary part of complex | |||||
| 29 | * conjugate eigenvalues of a 3x3 non-symmetric matrix | |||||
| 30 | */ | |||||
| 31 | double | |||||
| 32 | gage_imaginary_part_eigenvalues(double *M ) { | |||||
| 33 | double A, B, C, scale, frob, m[9], _eval[3]; | |||||
| 34 | double beta, _gamma; | |||||
| 35 | int roots; | |||||
| 36 | ||||||
| 37 | frob = ELL_3M_FROB(M)(sqrt((((M)+0)[0]*((M)+0)[0] + ((M)+0)[1]*((M)+0)[1] + ((M)+0 )[2]*((M)+0)[2]) + (((M)+3)[0]*((M)+3)[0] + ((M)+3)[1]*((M)+3 )[1] + ((M)+3)[2]*((M)+3)[2]) + (((M)+6)[0]*((M)+6)[0] + ((M) +6)[1]*((M)+6)[1] + ((M)+6)[2]*((M)+6)[2]))); | |||||
| 38 | scale = frob > 10 ? 10.0/frob : 1.0; | |||||
| 39 | ELL_3M_SCALE(m, scale, M)((((m)+0)[0] = ((scale))*((M)+0)[0], ((m)+0)[1] = ((scale))*( (M)+0)[1], ((m)+0)[2] = ((scale))*((M)+0)[2]), (((m)+3)[0] = ( (scale))*((M)+3)[0], ((m)+3)[1] = ((scale))*((M)+3)[1], ((m)+ 3)[2] = ((scale))*((M)+3)[2]), (((m)+6)[0] = ((scale))*((M)+6 )[0], ((m)+6)[1] = ((scale))*((M)+6)[1], ((m)+6)[2] = ((scale ))*((M)+6)[2])); | |||||
| 40 | /* | |||||
| 41 | ** from gordon with mathematica; these are the coefficients of the | |||||
| 42 | ** cubic polynomial in x: det(x*I - M). The full cubic is | |||||
| 43 | ** x^3 + A*x^2 + B*x + C. | |||||
| 44 | */ | |||||
| 45 | A = -m[0] - m[4] - m[8]; | |||||
| 46 | B = m[0]*m[4] - m[3]*m[1] | |||||
| 47 | + m[0]*m[8] - m[6]*m[2] | |||||
| 48 | + m[4]*m[8] - m[7]*m[5]; | |||||
| 49 | C = (m[6]*m[4] - m[3]*m[7])*m[2] | |||||
| 50 | + (m[0]*m[7] - m[6]*m[1])*m[5] | |||||
| 51 | + (m[3]*m[1] - m[0]*m[4])*m[8]; | |||||
| 52 | roots = ell_cubic(_eval, A, B, C, AIR_TRUE1); | |||||
| 53 | if ( roots != ell_cubic_root_single ) | |||||
| 54 | return 0.; | |||||
| 55 | ||||||
| 56 | /* 2 complex conjuguate eigenvalues */ | |||||
| 57 | beta = A + _eval[0]; | |||||
| 58 | _gamma = -C/_eval[0]; | |||||
| 59 | return sqrt( 4.*_gamma - beta*beta ); | |||||
| 60 | } | |||||
| 61 | ||||||
| 62 | ||||||
| 63 | gageItemEntry | |||||
| 64 | _gageVecTable[GAGE_VEC_ITEM_MAX31+1] = { | |||||
| 65 | /* enum value len, deriv, prereqs, parent item, parent index, needData */ | |||||
| 66 | {gageVecUnknown, 0, 0, {0}, 0, 0, AIR_FALSE0}, | |||||
| 67 | {gageVecVector, 3, 0, {0}, 0, 0, AIR_FALSE0}, | |||||
| 68 | {gageVecVector0, 1, 0, {gageVecVector}, gageVecVector, 0, AIR_FALSE0}, | |||||
| 69 | {gageVecVector1, 1, 0, {gageVecVector}, gageVecVector, 1, AIR_FALSE0}, | |||||
| 70 | {gageVecVector2, 1, 0, {gageVecVector}, gageVecVector, 2, AIR_FALSE0}, | |||||
| 71 | {gageVecLength, 1, 0, {gageVecVector}, 0, 0, AIR_FALSE0}, | |||||
| 72 | {gageVecNormalized, 3, 0, {gageVecVector, gageVecLength}, 0, 0, AIR_FALSE0}, | |||||
| 73 | {gageVecJacobian, 9, 1, {0}, 0, 0, AIR_FALSE0}, | |||||
| 74 | {gageVecStrain, 9, 1, {gageVecJacobian}, 0, 0, AIR_FALSE0}, | |||||
| 75 | {gageVecDivergence, 1, 1, {gageVecJacobian}, 0, 0, AIR_FALSE0}, | |||||
| 76 | {gageVecCurl, 3, 1, {gageVecJacobian}, 0, 0, AIR_FALSE0}, | |||||
| 77 | {gageVecCurlNorm, 1, 1, {gageVecCurl}, 0, 0, AIR_FALSE0}, | |||||
| 78 | {gageVecHelicity, 1, 1, {gageVecVector, gageVecCurl}, 0, 0, AIR_FALSE0}, | |||||
| 79 | {gageVecNormHelicity, 1, 1, {gageVecNormalized, gageVecCurl}, 0, 0, AIR_FALSE0}, | |||||
| 80 | {gageVecSOmega, 9, 1, {gageVecJacobian,gageVecStrain}, 0, 0, AIR_FALSE0}, | |||||
| 81 | {gageVecLambda2, 1, 1, {gageVecSOmega}, 0, 0, AIR_FALSE0}, | |||||
| 82 | {gageVecImaginaryPart, 1, 1, {gageVecJacobian}, 0, 0, AIR_FALSE0}, | |||||
| 83 | {gageVecHessian, 27, 2, {0}, 0, 0, AIR_FALSE0}, | |||||
| 84 | {gageVecDivGradient, 3, 1, {gageVecHessian}, 0, 0, AIR_FALSE0}, | |||||
| 85 | {gageVecCurlGradient, 9, 2, {gageVecHessian}, 0, 0, AIR_FALSE0}, | |||||
| 86 | {gageVecCurlNormGrad, 3, 2, {gageVecHessian, gageVecCurl}, 0, 0, AIR_FALSE0}, | |||||
| 87 | {gageVecNCurlNormGrad, 3, 2, {gageVecCurlNormGrad}, 0, 0, AIR_FALSE0}, | |||||
| 88 | {gageVecHelGradient, 3, 2, {gageVecVector, gageVecJacobian, gageVecCurl, gageVecCurlGradient}, 0, 0, AIR_FALSE0}, | |||||
| 89 | {gageVecDirHelDeriv, 1, 2, {gageVecNormalized, gageVecHelGradient}, 0, 0, AIR_FALSE0}, | |||||
| 90 | {gageVecProjHelGradient, 3, 2, {gageVecNormalized, gageVecHelGradient, gageVecDirHelDeriv}, 0, 0, AIR_FALSE0}, | |||||
| 91 | /* HEY: these should change to sub-items!!! */ | |||||
| 92 | {gageVecGradient0, 3, 1, {gageVecJacobian}, 0, 0, AIR_FALSE0}, | |||||
| 93 | {gageVecGradient1, 3, 1, {gageVecJacobian}, 0, 0, AIR_FALSE0}, | |||||
| 94 | {gageVecGradient2, 3, 1, {gageVecJacobian}, 0, 0, AIR_FALSE0}, | |||||
| 95 | {gageVecMultiGrad, 9, 1, {gageVecGradient0, gageVecGradient1, gageVecGradient2}, 0, 0, AIR_FALSE0}, | |||||
| 96 | {gageVecMGFrob, 1, 1, {gageVecMultiGrad}, 0, 0, AIR_FALSE0}, | |||||
| 97 | {gageVecMGEval, 3, 1, {gageVecMultiGrad}, 0, 0, AIR_FALSE0}, | |||||
| 98 | {gageVecMGEvec, 9, 1, {gageVecMultiGrad, gageVecMGEval}, 0, 0, AIR_FALSE0} | |||||
| 99 | }; | |||||
| 100 | ||||||
| 101 | void | |||||
| 102 | _gageVecFilter(gageContext *ctx, gagePerVolume *pvl) { | |||||
| 103 | char me[]="_gageVecFilter"; | |||||
| 104 | double *fw00, *fw11, *fw22, *vec, *jac, *hes; | |||||
| 105 | int fd; | |||||
| 106 | gageScl3PFilter_t *filter[5] = {NULL((void*)0), gageScl3PFilter2, gageScl3PFilter4, | |||||
| 107 | gageScl3PFilter6, gageScl3PFilter8}; | |||||
| 108 | unsigned int valIdx; | |||||
| 109 | ||||||
| 110 | fd = 2*ctx->radius; | |||||
| 111 | vec = pvl->directAnswer[gageVecVector]; | |||||
| 112 | jac = pvl->directAnswer[gageVecJacobian]; | |||||
| 113 | hes = pvl->directAnswer[gageVecHessian]; | |||||
| 114 | if (!ctx->parm.k3pack) { | |||||
| 115 | fprintf(stderr__stderrp, "!%s: sorry, 6pack filtering not implemented\n", me); | |||||
| 116 | return; | |||||
| 117 | } | |||||
| 118 | fw00 = ctx->fw + fd*3*gageKernel00; | |||||
| 119 | fw11 = ctx->fw + fd*3*gageKernel11; | |||||
| 120 | fw22 = ctx->fw + fd*3*gageKernel22; | |||||
| 121 | /* perform the filtering */ | |||||
| 122 | if (fd <= 8) { | |||||
| 123 | for (valIdx=0; valIdx<3; valIdx++) { | |||||
| 124 | filter[ctx->radius](ctx->shape, | |||||
| 125 | pvl->iv3 + valIdx*fd*fd*fd, | |||||
| 126 | pvl->iv2 + valIdx*fd*fd, | |||||
| 127 | pvl->iv1 + valIdx*fd, | |||||
| 128 | fw00, fw11, fw22, | |||||
| 129 | vec + valIdx, jac + valIdx*3, hes + valIdx*9, | |||||
| 130 | pvl->needD); | |||||
| 131 | } | |||||
| 132 | } else { | |||||
| 133 | for (valIdx=0; valIdx<3; valIdx++) { | |||||
| 134 | gageScl3PFilterN(ctx->shape, fd, | |||||
| 135 | pvl->iv3 + valIdx*fd*fd*fd, | |||||
| 136 | pvl->iv2 + valIdx*fd*fd, | |||||
| 137 | pvl->iv1 + valIdx*fd, | |||||
| 138 | fw00, fw11, fw22, | |||||
| 139 | vec + valIdx, jac + valIdx*3, hes + valIdx*9, | |||||
| 140 | pvl->needD); | |||||
| 141 | } | |||||
| 142 | } | |||||
| 143 | ||||||
| 144 | return; | |||||
| 145 | } | |||||
| 146 | ||||||
| 147 | void | |||||
| 148 | _gageVecAnswer(gageContext *ctx, gagePerVolume *pvl) { | |||||
| 149 | char me[]="_gageVecAnswer"; | |||||
| 150 | double cmag, tmpMat[9], mgevec[9], mgeval[3]; | |||||
| 151 | double asym[9], tran[9], eval[3], tmpVec[3], norm; | |||||
| 152 | double *vecAns, *normAns, *jacAns, *strainAns, *somegaAns, | |||||
| 153 | *curlAns, *hesAns, *curlGradAns, | |||||
| 154 | *helGradAns, *dirHelDirAns, *curlnormgradAns; | |||||
| 155 | /* int asw; */ | |||||
| 156 | ||||||
| 157 | vecAns = pvl->directAnswer[gageVecVector]; | |||||
| 158 | normAns = pvl->directAnswer[gageVecNormalized]; | |||||
| 159 | jacAns = pvl->directAnswer[gageVecJacobian]; | |||||
| 160 | strainAns = pvl->directAnswer[gageVecStrain]; | |||||
| 161 | somegaAns = pvl->directAnswer[gageVecSOmega]; | |||||
| 162 | curlAns = pvl->directAnswer[gageVecCurl]; | |||||
| 163 | hesAns = pvl->directAnswer[gageVecHessian]; | |||||
| 164 | curlGradAns = pvl->directAnswer[gageVecCurlGradient]; | |||||
| 165 | curlnormgradAns = pvl->directAnswer[gageVecCurlNormGrad]; | |||||
| 166 | helGradAns = pvl->directAnswer[gageVecHelGradient]; | |||||
| 167 | dirHelDirAns = pvl->directAnswer[gageVecDirHelDeriv]; | |||||
| 168 | ||||||
| 169 | if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecVector)(pvl->query[gageVecVector/8] & (1 << (gageVecVector % 8)))) { | |||||
| ||||||
| 170 | /* done if doV */ | |||||
| 171 | if (ctx->verbose) { | |||||
| 172 | fprintf(stderr__stderrp, "vec = "); | |||||
| 173 | ell_3v_print_d(stderr__stderrp, vecAns); | |||||
| 174 | } | |||||
| 175 | } | |||||
| 176 | /* done if doV | |||||
| 177 | if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecVector{0,1,2})) { | |||||
| 178 | } | |||||
| 179 | */ | |||||
| 180 | if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecLength)(pvl->query[gageVecLength/8] & (1 << (gageVecLength % 8)))) { | |||||
| 181 | pvl->directAnswer[gageVecLength][0] = ELL_3V_LEN(vecAns)(sqrt((((vecAns))[0]*((vecAns))[0] + ((vecAns))[1]*((vecAns)) [1] + ((vecAns))[2]*((vecAns))[2]))); | |||||
| 182 | } | |||||
| 183 | if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecNormalized)(pvl->query[gageVecNormalized/8] & (1 << (gageVecNormalized % 8)))) { | |||||
| 184 | if (pvl->directAnswer[gageVecLength][0]) { | |||||
| 185 | ELL_3V_SCALE(normAns, 1.0/pvl->directAnswer[gageVecLength][0], vecAns)((normAns)[0] = (1.0/pvl->directAnswer[gageVecLength][0])* (vecAns)[0], (normAns)[1] = (1.0/pvl->directAnswer[gageVecLength ][0])*(vecAns)[1], (normAns)[2] = (1.0/pvl->directAnswer[gageVecLength ][0])*(vecAns)[2]); | |||||
| 186 | } else { | |||||
| 187 | ELL_3V_COPY(normAns, gageZeroNormal)((normAns)[0] = (gageZeroNormal)[0], (normAns)[1] = (gageZeroNormal )[1], (normAns)[2] = (gageZeroNormal)[2]); | |||||
| 188 | } | |||||
| 189 | } | |||||
| 190 | if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecJacobian)(pvl->query[gageVecJacobian/8] & (1 << (gageVecJacobian % 8)))) { | |||||
| 191 | /* done if doD1 */ | |||||
| 192 | /* | |||||
| 193 | 0:dv_x/dx 1:dv_x/dy 2:dv_x/dz | |||||
| 194 | 3:dv_y/dx 4:dv_y/dy 5:dv_y/dz | |||||
| 195 | 6:dv_z/dx 7:dv_z/dy 8:dv_z/dz | |||||
| 196 | */ | |||||
| 197 | if (ctx->verbose) { | |||||
| 198 | fprintf(stderr__stderrp, "%s: jac = \n", me); | |||||
| 199 | ell_3m_print_d(stderr__stderrp, jacAns); | |||||
| 200 | } | |||||
| 201 | } | |||||
| 202 | if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecDivergence)(pvl->query[gageVecDivergence/8] & (1 << (gageVecDivergence % 8)))) { | |||||
| 203 | pvl->directAnswer[gageVecDivergence][0] = jacAns[0] + jacAns[4] + jacAns[8]; | |||||
| 204 | if (ctx->verbose) { | |||||
| 205 | fprintf(stderr__stderrp, "%s: div = %g + %g + %g = %g\n", me, | |||||
| 206 | jacAns[0], jacAns[4], jacAns[8], | |||||
| 207 | pvl->directAnswer[gageVecDivergence][0]); | |||||
| 208 | } | |||||
| 209 | } | |||||
| 210 | if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecCurl)(pvl->query[gageVecCurl/8] & (1 << (gageVecCurl % 8)))) { | |||||
| 211 | ELL_3V_SET(curlAns,((curlAns)[0] = (jacAns[7] - jacAns[5]), (curlAns)[1] = (jacAns [2] - jacAns[6]), (curlAns)[2] = (jacAns[3] - jacAns[1])) | |||||
| 212 | jacAns[7] - jacAns[5],((curlAns)[0] = (jacAns[7] - jacAns[5]), (curlAns)[1] = (jacAns [2] - jacAns[6]), (curlAns)[2] = (jacAns[3] - jacAns[1])) | |||||
| 213 | jacAns[2] - jacAns[6],((curlAns)[0] = (jacAns[7] - jacAns[5]), (curlAns)[1] = (jacAns [2] - jacAns[6]), (curlAns)[2] = (jacAns[3] - jacAns[1])) | |||||
| 214 | jacAns[3] - jacAns[1])((curlAns)[0] = (jacAns[7] - jacAns[5]), (curlAns)[1] = (jacAns [2] - jacAns[6]), (curlAns)[2] = (jacAns[3] - jacAns[1])); | |||||
| 215 | } | |||||
| 216 | if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecCurlNorm)(pvl->query[gageVecCurlNorm/8] & (1 << (gageVecCurlNorm % 8)))) { | |||||
| 217 | pvl->directAnswer[gageVecCurlNorm][0] = ELL_3V_LEN(curlAns)(sqrt((((curlAns))[0]*((curlAns))[0] + ((curlAns))[1]*((curlAns ))[1] + ((curlAns))[2]*((curlAns))[2]))); | |||||
| 218 | } | |||||
| 219 | if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecHelicity)(pvl->query[gageVecHelicity/8] & (1 << (gageVecHelicity % 8)))) { | |||||
| 220 | pvl->directAnswer[gageVecHelicity][0] = | |||||
| 221 | ELL_3V_DOT(vecAns, curlAns)((vecAns)[0]*(curlAns)[0] + (vecAns)[1]*(curlAns)[1] + (vecAns )[2]*(curlAns)[2]); | |||||
| 222 | } | |||||
| 223 | if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecNormHelicity)(pvl->query[gageVecNormHelicity/8] & (1 << (gageVecNormHelicity % 8)))) { | |||||
| 224 | cmag = ELL_3V_LEN(curlAns)(sqrt((((curlAns))[0]*((curlAns))[0] + ((curlAns))[1]*((curlAns ))[1] + ((curlAns))[2]*((curlAns))[2]))); | |||||
| 225 | pvl->directAnswer[gageVecNormHelicity][0] = | |||||
| 226 | cmag ? ELL_3V_DOT(normAns, curlAns)((normAns)[0]*(curlAns)[0] + (normAns)[1]*(curlAns)[1] + (normAns )[2]*(curlAns)[2])/cmag : 0; | |||||
| 227 | } | |||||
| 228 | if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecStrain)(pvl->query[gageVecStrain/8] & (1 << (gageVecStrain % 8)))) { | |||||
| 229 | ELL_3M_TRANSPOSE(tran, jacAns)((tran)[0] = (jacAns)[0], (tran)[1] = (jacAns)[3], (tran)[2] = (jacAns)[6], (tran)[3] = (jacAns)[1], (tran)[4] = (jacAns)[4 ], (tran)[5] = (jacAns)[7], (tran)[6] = (jacAns)[2], (tran)[7 ] = (jacAns)[5], (tran)[8] = (jacAns)[8]); | |||||
| 230 | /* symmetric part */ | |||||
| 231 | ELL_3M_SCALE_ADD2(strainAns, 0.5, jacAns, 0.5, tran)((((strainAns)+0)[0] = ((0.5))*((jacAns)+0)[0] + ((0.5))*((tran )+0)[0], ((strainAns)+0)[1] = ((0.5))*((jacAns)+0)[1] + ((0.5 ))*((tran)+0)[1], ((strainAns)+0)[2] = ((0.5))*((jacAns)+0)[2 ] + ((0.5))*((tran)+0)[2]), (((strainAns)+3)[0] = ((0.5))*((jacAns )+3)[0] + ((0.5))*((tran)+3)[0], ((strainAns)+3)[1] = ((0.5)) *((jacAns)+3)[1] + ((0.5))*((tran)+3)[1], ((strainAns)+3)[2] = ((0.5))*((jacAns)+3)[2] + ((0.5))*((tran)+3)[2]), (((strainAns )+6)[0] = ((0.5))*((jacAns)+6)[0] + ((0.5))*((tran)+6)[0], (( strainAns)+6)[1] = ((0.5))*((jacAns)+6)[1] + ((0.5))*((tran)+ 6)[1], ((strainAns)+6)[2] = ((0.5))*((jacAns)+6)[2] + ((0.5)) *((tran)+6)[2])); | |||||
| 232 | /* nested these ifs to make dependency explicit to the compiler */ | |||||
| 233 | if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecSOmega)(pvl->query[gageVecSOmega/8] & (1 << (gageVecSOmega % 8)))) { | |||||
| 234 | /* antisymmetric part */ | |||||
| 235 | ELL_3M_SCALE_ADD2(asym, 0.5, jacAns, -0.5, tran)((((asym)+0)[0] = ((0.5))*((jacAns)+0)[0] + ((-0.5))*((tran)+ 0)[0], ((asym)+0)[1] = ((0.5))*((jacAns)+0)[1] + ((-0.5))*((tran )+0)[1], ((asym)+0)[2] = ((0.5))*((jacAns)+0)[2] + ((-0.5))*( (tran)+0)[2]), (((asym)+3)[0] = ((0.5))*((jacAns)+3)[0] + ((- 0.5))*((tran)+3)[0], ((asym)+3)[1] = ((0.5))*((jacAns)+3)[1] + ((-0.5))*((tran)+3)[1], ((asym)+3)[2] = ((0.5))*((jacAns)+3) [2] + ((-0.5))*((tran)+3)[2]), (((asym)+6)[0] = ((0.5))*((jacAns )+6)[0] + ((-0.5))*((tran)+6)[0], ((asym)+6)[1] = ((0.5))*((jacAns )+6)[1] + ((-0.5))*((tran)+6)[1], ((asym)+6)[2] = ((0.5))*((jacAns )+6)[2] + ((-0.5))*((tran)+6)[2])); | |||||
| 236 | /* square symmetric part */ | |||||
| 237 | ELL_3M_MUL(tmpMat, strainAns, strainAns)((tmpMat)[0] = (strainAns)[0]*(strainAns)[0] + (strainAns)[1] *(strainAns)[3] + (strainAns)[2]*(strainAns)[6], (tmpMat)[1] = (strainAns)[0]*(strainAns)[1] + (strainAns)[1]*(strainAns)[4 ] + (strainAns)[2]*(strainAns)[7], (tmpMat)[2] = (strainAns)[ 0]*(strainAns)[2] + (strainAns)[1]*(strainAns)[5] + (strainAns )[2]*(strainAns)[8], (tmpMat)[3] = (strainAns)[3]*(strainAns) [0] + (strainAns)[4]*(strainAns)[3] + (strainAns)[5]*(strainAns )[6], (tmpMat)[4] = (strainAns)[3]*(strainAns)[1] + (strainAns )[4]*(strainAns)[4] + (strainAns)[5]*(strainAns)[7], (tmpMat) [5] = (strainAns)[3]*(strainAns)[2] + (strainAns)[4]*(strainAns )[5] + (strainAns)[5]*(strainAns)[8], (tmpMat)[6] = (strainAns )[6]*(strainAns)[0] + (strainAns)[7]*(strainAns)[3] + (strainAns )[8]*(strainAns)[6], (tmpMat)[7] = (strainAns)[6]*(strainAns) [1] + (strainAns)[7]*(strainAns)[4] + (strainAns)[8]*(strainAns )[7], (tmpMat)[8] = (strainAns)[6]*(strainAns)[2] + (strainAns )[7]*(strainAns)[5] + (strainAns)[8]*(strainAns)[8]); | |||||
| 238 | ELL_3M_COPY(somegaAns, tmpMat)((((somegaAns)+0)[0] = ((tmpMat)+0)[0], ((somegaAns)+0)[1] = ( (tmpMat)+0)[1], ((somegaAns)+0)[2] = ((tmpMat)+0)[2]), (((somegaAns )+3)[0] = ((tmpMat)+3)[0], ((somegaAns)+3)[1] = ((tmpMat)+3)[ 1], ((somegaAns)+3)[2] = ((tmpMat)+3)[2]), (((somegaAns)+6)[0 ] = ((tmpMat)+6)[0], ((somegaAns)+6)[1] = ((tmpMat)+6)[1], (( somegaAns)+6)[2] = ((tmpMat)+6)[2])); | |||||
| 239 | /* square antisymmetric part */ | |||||
| 240 | ELL_3M_MUL(tmpMat, asym, asym)((tmpMat)[0] = (asym)[0]*(asym)[0] + (asym)[1]*(asym)[3] + (asym )[2]*(asym)[6], (tmpMat)[1] = (asym)[0]*(asym)[1] + (asym)[1] *(asym)[4] + (asym)[2]*(asym)[7], (tmpMat)[2] = (asym)[0]*(asym )[2] + (asym)[1]*(asym)[5] + (asym)[2]*(asym)[8], (tmpMat)[3] = (asym)[3]*(asym)[0] + (asym)[4]*(asym)[3] + (asym)[5]*(asym )[6], (tmpMat)[4] = (asym)[3]*(asym)[1] + (asym)[4]*(asym)[4] + (asym)[5]*(asym)[7], (tmpMat)[5] = (asym)[3]*(asym)[2] + ( asym)[4]*(asym)[5] + (asym)[5]*(asym)[8], (tmpMat)[6] = (asym )[6]*(asym)[0] + (asym)[7]*(asym)[3] + (asym)[8]*(asym)[6], ( tmpMat)[7] = (asym)[6]*(asym)[1] + (asym)[7]*(asym)[4] + (asym )[8]*(asym)[7], (tmpMat)[8] = (asym)[6]*(asym)[2] + (asym)[7] *(asym)[5] + (asym)[8]*(asym)[8]); | |||||
| 241 | /* sum of both */ | |||||
| 242 | ELL_3M_ADD2(somegaAns, somegaAns, tmpMat)((somegaAns)[0] = (somegaAns)[0] + (tmpMat)[0], (somegaAns)[1 ] = (somegaAns)[1] + (tmpMat)[1], (somegaAns)[2] = (somegaAns )[2] + (tmpMat)[2], (somegaAns)[3] = (somegaAns)[3] + (tmpMat )[3], (somegaAns)[4] = (somegaAns)[4] + (tmpMat)[4], (somegaAns )[5] = (somegaAns)[5] + (tmpMat)[5], (somegaAns)[6] = (somegaAns )[6] + (tmpMat)[6], (somegaAns)[7] = (somegaAns)[7] + (tmpMat )[7], (somegaAns)[8] = (somegaAns)[8] + (tmpMat)[8]); | |||||
| 243 | if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecLambda2)(pvl->query[gageVecLambda2/8] & (1 << (gageVecLambda2 % 8)))) { | |||||
| 244 | /* get eigenvalues in sorted order */ | |||||
| 245 | /* asw = */ ell_3m_eigenvalues_d(eval, somegaAns, AIR_TRUE1); | |||||
| 246 | pvl->directAnswer[gageVecLambda2][0] = eval[1]; | |||||
| 247 | } | |||||
| 248 | } | |||||
| 249 | } | |||||
| 250 | if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecImaginaryPart)(pvl->query[gageVecImaginaryPart/8] & (1 << (gageVecImaginaryPart % 8)))) { | |||||
| 251 | pvl->directAnswer[gageVecImaginaryPart][0] = | |||||
| 252 | gage_imaginary_part_eigenvalues(jacAns); | |||||
| 253 | } | |||||
| 254 | /* 2nd order vector derivative continued */ | |||||
| 255 | if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecHessian)(pvl->query[gageVecHessian/8] & (1 << (gageVecHessian % 8)))) { | |||||
| 256 | /* done if doD2 */ | |||||
| 257 | /* the ordering is induced by the scalar hessian computation : | |||||
| 258 | 0:d2v_x/dxdx 1:d2v_x/dxdy 2:d2v_x/dxdz | |||||
| 259 | 3:d2v_x/dydx 4:d2v_x/dydy 5:d2v_x/dydz | |||||
| 260 | 6:d2v_x/dzdx 7:d2v_x/dzdy 8:d2v_x/dzdz | |||||
| 261 | 9:d2v_y/dxdx [. . .] | |||||
| 262 | [. . .] | |||||
| 263 | 24:dv2_z/dzdx 25:d2v_z/dzdy 26:d2v_z/dzdz | |||||
| 264 | */ | |||||
| 265 | if (ctx->verbose) { | |||||
| 266 | fprintf(stderr__stderrp, "%s: hes = \n", me); | |||||
| 267 | ell_3m_print_d(stderr__stderrp, hesAns); /* ?? */ | |||||
| 268 | } | |||||
| 269 | } | |||||
| 270 | if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecDivGradient)(pvl->query[gageVecDivGradient/8] & (1 << (gageVecDivGradient % 8)))) { | |||||
| 271 | pvl->directAnswer[gageVecDivGradient][0] = hesAns[0] + hesAns[12] + hesAns[24]; | |||||
| 272 | pvl->directAnswer[gageVecDivGradient][1] = hesAns[1] + hesAns[13] + hesAns[25]; | |||||
| 273 | pvl->directAnswer[gageVecDivGradient][2] = hesAns[2] + hesAns[14] + hesAns[26]; | |||||
| 274 | } | |||||
| 275 | if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecCurlGradient)(pvl->query[gageVecCurlGradient/8] & (1 << (gageVecCurlGradient % 8)))) { | |||||
| 276 | pvl->directAnswer[gageVecCurlGradient][0] = hesAns[21]-hesAns[15]; | |||||
| 277 | pvl->directAnswer[gageVecCurlGradient][1] = hesAns[22]-hesAns[16]; | |||||
| 278 | pvl->directAnswer[gageVecCurlGradient][2] = hesAns[23]-hesAns[17]; | |||||
| 279 | pvl->directAnswer[gageVecCurlGradient][3] = hesAns[ 6]-hesAns[18]; | |||||
| 280 | pvl->directAnswer[gageVecCurlGradient][4] = hesAns[ 7]-hesAns[19]; | |||||
| 281 | pvl->directAnswer[gageVecCurlGradient][5] = hesAns[ 8]-hesAns[20]; | |||||
| 282 | pvl->directAnswer[gageVecCurlGradient][6] = hesAns[ 9]-hesAns[ 1]; | |||||
| 283 | pvl->directAnswer[gageVecCurlGradient][7] = hesAns[10]-hesAns[ 2]; | |||||
| 284 | pvl->directAnswer[gageVecCurlGradient][8] = hesAns[11]-hesAns[ 3]; | |||||
| 285 | } | |||||
| 286 | if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecCurlNormGrad)(pvl->query[gageVecCurlNormGrad/8] & (1 << (gageVecCurlNormGrad % 8)))) { | |||||
| 287 | norm = 1./ELL_3V_LEN(curlAns)(sqrt((((curlAns))[0]*((curlAns))[0] + ((curlAns))[1]*((curlAns ))[1] + ((curlAns))[2]*((curlAns))[2]))); | |||||
| 288 | ||||||
| 289 | tmpVec[0] = hesAns[21] - hesAns[15]; | |||||
| 290 | tmpVec[1] = hesAns[ 6] - hesAns[18]; | |||||
| 291 | tmpVec[2] = hesAns[ 9] - hesAns[ 3]; | |||||
| 292 | pvl->directAnswer[gageVecCurlNormGrad][0] = | |||||
| 293 | norm*ELL_3V_DOT(tmpVec, curlAns)((tmpVec)[0]*(curlAns)[0] + (tmpVec)[1]*(curlAns)[1] + (tmpVec )[2]*(curlAns)[2]); | |||||
| 294 | ||||||
| 295 | tmpVec[0] = hesAns[22] - hesAns[16]; | |||||
| 296 | tmpVec[1] = hesAns[ 7] - hesAns[19]; | |||||
| 297 | tmpVec[2] = hesAns[10] - hesAns[ 4]; | |||||
| 298 | pvl->directAnswer[gageVecCurlNormGrad][1]= | |||||
| 299 | norm*ELL_3V_DOT(tmpVec, curlAns)((tmpVec)[0]*(curlAns)[0] + (tmpVec)[1]*(curlAns)[1] + (tmpVec )[2]*(curlAns)[2]); | |||||
| 300 | ||||||
| 301 | tmpVec[0] = hesAns[23] - hesAns[17]; | |||||
| 302 | tmpVec[1] = hesAns[ 8] - hesAns[20]; | |||||
| 303 | tmpVec[2] = hesAns[11] - hesAns[ 5]; | |||||
| 304 | pvl->directAnswer[gageVecCurlNormGrad][2]= | |||||
| 305 | norm*ELL_3V_DOT(tmpVec, curlAns)((tmpVec)[0]*(curlAns)[0] + (tmpVec)[1]*(curlAns)[1] + (tmpVec )[2]*(curlAns)[2]); | |||||
| 306 | } | |||||
| 307 | if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecNCurlNormGrad)(pvl->query[gageVecNCurlNormGrad/8] & (1 << (gageVecNCurlNormGrad % 8)))) { | |||||
| 308 | norm = 1./ELL_3V_LEN(curlnormgradAns)(sqrt((((curlnormgradAns))[0]*((curlnormgradAns))[0] + ((curlnormgradAns ))[1]*((curlnormgradAns))[1] + ((curlnormgradAns))[2]*((curlnormgradAns ))[2]))); | |||||
| 309 | ELL_3V_SCALE(pvl->directAnswer[gageVecNCurlNormGrad],((pvl->directAnswer[gageVecNCurlNormGrad])[0] = (norm)*(pvl ->directAnswer[gageVecCurlNormGrad])[0], (pvl->directAnswer [gageVecNCurlNormGrad])[1] = (norm)*(pvl->directAnswer[gageVecCurlNormGrad ])[1], (pvl->directAnswer[gageVecNCurlNormGrad])[2] = (norm )*(pvl->directAnswer[gageVecCurlNormGrad])[2]) | |||||
| 310 | norm, pvl->directAnswer[gageVecCurlNormGrad])((pvl->directAnswer[gageVecNCurlNormGrad])[0] = (norm)*(pvl ->directAnswer[gageVecCurlNormGrad])[0], (pvl->directAnswer [gageVecNCurlNormGrad])[1] = (norm)*(pvl->directAnswer[gageVecCurlNormGrad ])[1], (pvl->directAnswer[gageVecNCurlNormGrad])[2] = (norm )*(pvl->directAnswer[gageVecCurlNormGrad])[2]); | |||||
| 311 | } | |||||
| 312 | if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecHelGradient)(pvl->query[gageVecHelGradient/8] & (1 << (gageVecHelGradient % 8)))) { | |||||
| 313 | pvl->directAnswer[gageVecHelGradient][0] = | |||||
| 314 | jacAns[0]*curlAns[0]+ | |||||
| 315 | jacAns[3]*curlAns[1]+ | |||||
| 316 | jacAns[6]*curlAns[2]+ | |||||
| 317 | curlGradAns[0]*vecAns[0]+ | |||||
| 318 | curlGradAns[3]*vecAns[1]+ | |||||
| 319 | curlGradAns[6]*vecAns[2]; | |||||
| 320 | pvl->directAnswer[gageVecHelGradient][1] = | |||||
| 321 | jacAns[1]*curlAns[0]+ | |||||
| 322 | jacAns[4]*curlAns[1]+ | |||||
| 323 | jacAns[7]*curlAns[2]+ | |||||
| 324 | curlGradAns[1]*vecAns[0]+ | |||||
| 325 | curlGradAns[4]*vecAns[1]+ | |||||
| 326 | curlGradAns[7]*vecAns[2]; | |||||
| 327 | pvl->directAnswer[gageVecHelGradient][0] = | |||||
| 328 | jacAns[2]*curlAns[0]+ | |||||
| 329 | jacAns[5]*curlAns[1]+ | |||||
| 330 | jacAns[8]*curlAns[2]+ | |||||
| 331 | curlGradAns[2]*vecAns[0]+ | |||||
| 332 | curlGradAns[5]*vecAns[1]+ | |||||
| 333 | curlGradAns[8]*vecAns[2]; | |||||
| 334 | } | |||||
| 335 | if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecDirHelDeriv)(pvl->query[gageVecDirHelDeriv/8] & (1 << (gageVecDirHelDeriv % 8)))) { | |||||
| 336 | pvl->directAnswer[gageVecDirHelDeriv][0] = | |||||
| 337 | ELL_3V_DOT(normAns, helGradAns)((normAns)[0]*(helGradAns)[0] + (normAns)[1]*(helGradAns)[1] + (normAns)[2]*(helGradAns)[2]); | |||||
| 338 | } | |||||
| 339 | if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecProjHelGradient)(pvl->query[gageVecProjHelGradient/8] & (1 << (gageVecProjHelGradient % 8)))) { | |||||
| 340 | pvl->directAnswer[gageVecDirHelDeriv][0] = | |||||
| 341 | helGradAns[0]-dirHelDirAns[0]*normAns[0]; | |||||
| 342 | pvl->directAnswer[gageVecDirHelDeriv][1] = | |||||
| 343 | helGradAns[1]-dirHelDirAns[0]*normAns[1]; | |||||
| 344 | pvl->directAnswer[gageVecDirHelDeriv][2] = | |||||
| 345 | helGradAns[2]-dirHelDirAns[0]*normAns[2]; | |||||
| 346 | } | |||||
| 347 | if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecGradient0)(pvl->query[gageVecGradient0/8] & (1 << (gageVecGradient0 % 8)))) { | |||||
| 348 | ELL_3V_SET(pvl->directAnswer[gageVecGradient0],((pvl->directAnswer[gageVecGradient0])[0] = (jacAns[0]), ( pvl->directAnswer[gageVecGradient0])[1] = (jacAns[1]), (pvl ->directAnswer[gageVecGradient0])[2] = (jacAns[2])) | |||||
| 349 | jacAns[0],((pvl->directAnswer[gageVecGradient0])[0] = (jacAns[0]), ( pvl->directAnswer[gageVecGradient0])[1] = (jacAns[1]), (pvl ->directAnswer[gageVecGradient0])[2] = (jacAns[2])) | |||||
| 350 | jacAns[1],((pvl->directAnswer[gageVecGradient0])[0] = (jacAns[0]), ( pvl->directAnswer[gageVecGradient0])[1] = (jacAns[1]), (pvl ->directAnswer[gageVecGradient0])[2] = (jacAns[2])) | |||||
| 351 | jacAns[2])((pvl->directAnswer[gageVecGradient0])[0] = (jacAns[0]), ( pvl->directAnswer[gageVecGradient0])[1] = (jacAns[1]), (pvl ->directAnswer[gageVecGradient0])[2] = (jacAns[2])); | |||||
| 352 | } | |||||
| 353 | if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecGradient1)(pvl->query[gageVecGradient1/8] & (1 << (gageVecGradient1 % 8)))) { | |||||
| 354 | ELL_3V_SET(pvl->directAnswer[gageVecGradient1],((pvl->directAnswer[gageVecGradient1])[0] = (jacAns[3]), ( pvl->directAnswer[gageVecGradient1])[1] = (jacAns[4]), (pvl ->directAnswer[gageVecGradient1])[2] = (jacAns[5])) | |||||
| 355 | jacAns[3],((pvl->directAnswer[gageVecGradient1])[0] = (jacAns[3]), ( pvl->directAnswer[gageVecGradient1])[1] = (jacAns[4]), (pvl ->directAnswer[gageVecGradient1])[2] = (jacAns[5])) | |||||
| 356 | jacAns[4],((pvl->directAnswer[gageVecGradient1])[0] = (jacAns[3]), ( pvl->directAnswer[gageVecGradient1])[1] = (jacAns[4]), (pvl ->directAnswer[gageVecGradient1])[2] = (jacAns[5])) | |||||
| 357 | jacAns[5])((pvl->directAnswer[gageVecGradient1])[0] = (jacAns[3]), ( pvl->directAnswer[gageVecGradient1])[1] = (jacAns[4]), (pvl ->directAnswer[gageVecGradient1])[2] = (jacAns[5])); | |||||
| 358 | } | |||||
| 359 | if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecGradient2)(pvl->query[gageVecGradient2/8] & (1 << (gageVecGradient2 % 8)))) { | |||||
| 360 | ELL_3V_SET(pvl->directAnswer[gageVecGradient2],((pvl->directAnswer[gageVecGradient2])[0] = (jacAns[6]), ( pvl->directAnswer[gageVecGradient2])[1] = (jacAns[7]), (pvl ->directAnswer[gageVecGradient2])[2] = (jacAns[8])) | |||||
| 361 | jacAns[6],((pvl->directAnswer[gageVecGradient2])[0] = (jacAns[6]), ( pvl->directAnswer[gageVecGradient2])[1] = (jacAns[7]), (pvl ->directAnswer[gageVecGradient2])[2] = (jacAns[8])) | |||||
| 362 | jacAns[7],((pvl->directAnswer[gageVecGradient2])[0] = (jacAns[6]), ( pvl->directAnswer[gageVecGradient2])[1] = (jacAns[7]), (pvl ->directAnswer[gageVecGradient2])[2] = (jacAns[8])) | |||||
| 363 | jacAns[8])((pvl->directAnswer[gageVecGradient2])[0] = (jacAns[6]), ( pvl->directAnswer[gageVecGradient2])[1] = (jacAns[7]), (pvl ->directAnswer[gageVecGradient2])[2] = (jacAns[8])); | |||||
| 364 | } | |||||
| 365 | if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecMultiGrad)(pvl->query[gageVecMultiGrad/8] & (1 << (gageVecMultiGrad % 8)))) { | |||||
| 366 | ELL_3M_IDENTITY_SET(pvl->directAnswer[gageVecMultiGrad])((((pvl->directAnswer[gageVecMultiGrad])+0)[0] = (1), ((pvl ->directAnswer[gageVecMultiGrad])+0)[1] = (0), ((pvl->directAnswer [gageVecMultiGrad])+0)[2] = (0)), (((pvl->directAnswer[gageVecMultiGrad ])+3)[0] = (0), ((pvl->directAnswer[gageVecMultiGrad])+3)[ 1] = (1), ((pvl->directAnswer[gageVecMultiGrad])+3)[2] = ( 0)), (((pvl->directAnswer[gageVecMultiGrad])+6)[0] = (0), ( (pvl->directAnswer[gageVecMultiGrad])+6)[1] = (0), ((pvl-> directAnswer[gageVecMultiGrad])+6)[2] = (1))); | |||||
| 367 | ELL_3MV_OUTER_INCR(pvl->directAnswer[gageVecMultiGrad],((((pvl->directAnswer[gageVecMultiGrad])+0)[0] += ((pvl-> directAnswer[gageVecGradient0])[0])*((pvl->directAnswer[gageVecGradient0 ]))[0], ((pvl->directAnswer[gageVecMultiGrad])+0)[1] += (( pvl->directAnswer[gageVecGradient0])[0])*((pvl->directAnswer [gageVecGradient0]))[1], ((pvl->directAnswer[gageVecMultiGrad ])+0)[2] += ((pvl->directAnswer[gageVecGradient0])[0])*((pvl ->directAnswer[gageVecGradient0]))[2]), (((pvl->directAnswer [gageVecMultiGrad])+3)[0] += ((pvl->directAnswer[gageVecGradient0 ])[1])*((pvl->directAnswer[gageVecGradient0]))[0], ((pvl-> directAnswer[gageVecMultiGrad])+3)[1] += ((pvl->directAnswer [gageVecGradient0])[1])*((pvl->directAnswer[gageVecGradient0 ]))[1], ((pvl->directAnswer[gageVecMultiGrad])+3)[2] += (( pvl->directAnswer[gageVecGradient0])[1])*((pvl->directAnswer [gageVecGradient0]))[2]), (((pvl->directAnswer[gageVecMultiGrad ])+6)[0] += ((pvl->directAnswer[gageVecGradient0])[2])*((pvl ->directAnswer[gageVecGradient0]))[0], ((pvl->directAnswer [gageVecMultiGrad])+6)[1] += ((pvl->directAnswer[gageVecGradient0 ])[2])*((pvl->directAnswer[gageVecGradient0]))[1], ((pvl-> directAnswer[gageVecMultiGrad])+6)[2] += ((pvl->directAnswer [gageVecGradient0])[2])*((pvl->directAnswer[gageVecGradient0 ]))[2])) | |||||
| 368 | pvl->directAnswer[gageVecGradient0],((((pvl->directAnswer[gageVecMultiGrad])+0)[0] += ((pvl-> directAnswer[gageVecGradient0])[0])*((pvl->directAnswer[gageVecGradient0 ]))[0], ((pvl->directAnswer[gageVecMultiGrad])+0)[1] += (( pvl->directAnswer[gageVecGradient0])[0])*((pvl->directAnswer [gageVecGradient0]))[1], ((pvl->directAnswer[gageVecMultiGrad ])+0)[2] += ((pvl->directAnswer[gageVecGradient0])[0])*((pvl ->directAnswer[gageVecGradient0]))[2]), (((pvl->directAnswer [gageVecMultiGrad])+3)[0] += ((pvl->directAnswer[gageVecGradient0 ])[1])*((pvl->directAnswer[gageVecGradient0]))[0], ((pvl-> directAnswer[gageVecMultiGrad])+3)[1] += ((pvl->directAnswer [gageVecGradient0])[1])*((pvl->directAnswer[gageVecGradient0 ]))[1], ((pvl->directAnswer[gageVecMultiGrad])+3)[2] += (( pvl->directAnswer[gageVecGradient0])[1])*((pvl->directAnswer [gageVecGradient0]))[2]), (((pvl->directAnswer[gageVecMultiGrad ])+6)[0] += ((pvl->directAnswer[gageVecGradient0])[2])*((pvl ->directAnswer[gageVecGradient0]))[0], ((pvl->directAnswer [gageVecMultiGrad])+6)[1] += ((pvl->directAnswer[gageVecGradient0 ])[2])*((pvl->directAnswer[gageVecGradient0]))[1], ((pvl-> directAnswer[gageVecMultiGrad])+6)[2] += ((pvl->directAnswer [gageVecGradient0])[2])*((pvl->directAnswer[gageVecGradient0 ]))[2])) | |||||
| 369 | pvl->directAnswer[gageVecGradient0])((((pvl->directAnswer[gageVecMultiGrad])+0)[0] += ((pvl-> directAnswer[gageVecGradient0])[0])*((pvl->directAnswer[gageVecGradient0 ]))[0], ((pvl->directAnswer[gageVecMultiGrad])+0)[1] += (( pvl->directAnswer[gageVecGradient0])[0])*((pvl->directAnswer [gageVecGradient0]))[1], ((pvl->directAnswer[gageVecMultiGrad ])+0)[2] += ((pvl->directAnswer[gageVecGradient0])[0])*((pvl ->directAnswer[gageVecGradient0]))[2]), (((pvl->directAnswer [gageVecMultiGrad])+3)[0] += ((pvl->directAnswer[gageVecGradient0 ])[1])*((pvl->directAnswer[gageVecGradient0]))[0], ((pvl-> directAnswer[gageVecMultiGrad])+3)[1] += ((pvl->directAnswer [gageVecGradient0])[1])*((pvl->directAnswer[gageVecGradient0 ]))[1], ((pvl->directAnswer[gageVecMultiGrad])+3)[2] += (( pvl->directAnswer[gageVecGradient0])[1])*((pvl->directAnswer [gageVecGradient0]))[2]), (((pvl->directAnswer[gageVecMultiGrad ])+6)[0] += ((pvl->directAnswer[gageVecGradient0])[2])*((pvl ->directAnswer[gageVecGradient0]))[0], ((pvl->directAnswer [gageVecMultiGrad])+6)[1] += ((pvl->directAnswer[gageVecGradient0 ])[2])*((pvl->directAnswer[gageVecGradient0]))[1], ((pvl-> directAnswer[gageVecMultiGrad])+6)[2] += ((pvl->directAnswer [gageVecGradient0])[2])*((pvl->directAnswer[gageVecGradient0 ]))[2])); | |||||
| 370 | ELL_3MV_OUTER_INCR(pvl->directAnswer[gageVecMultiGrad],((((pvl->directAnswer[gageVecMultiGrad])+0)[0] += ((pvl-> directAnswer[gageVecGradient1])[0])*((pvl->directAnswer[gageVecGradient1 ]))[0], ((pvl->directAnswer[gageVecMultiGrad])+0)[1] += (( pvl->directAnswer[gageVecGradient1])[0])*((pvl->directAnswer [gageVecGradient1]))[1], ((pvl->directAnswer[gageVecMultiGrad ])+0)[2] += ((pvl->directAnswer[gageVecGradient1])[0])*((pvl ->directAnswer[gageVecGradient1]))[2]), (((pvl->directAnswer [gageVecMultiGrad])+3)[0] += ((pvl->directAnswer[gageVecGradient1 ])[1])*((pvl->directAnswer[gageVecGradient1]))[0], ((pvl-> directAnswer[gageVecMultiGrad])+3)[1] += ((pvl->directAnswer [gageVecGradient1])[1])*((pvl->directAnswer[gageVecGradient1 ]))[1], ((pvl->directAnswer[gageVecMultiGrad])+3)[2] += (( pvl->directAnswer[gageVecGradient1])[1])*((pvl->directAnswer [gageVecGradient1]))[2]), (((pvl->directAnswer[gageVecMultiGrad ])+6)[0] += ((pvl->directAnswer[gageVecGradient1])[2])*((pvl ->directAnswer[gageVecGradient1]))[0], ((pvl->directAnswer [gageVecMultiGrad])+6)[1] += ((pvl->directAnswer[gageVecGradient1 ])[2])*((pvl->directAnswer[gageVecGradient1]))[1], ((pvl-> directAnswer[gageVecMultiGrad])+6)[2] += ((pvl->directAnswer [gageVecGradient1])[2])*((pvl->directAnswer[gageVecGradient1 ]))[2])) | |||||
| 371 | pvl->directAnswer[gageVecGradient1],((((pvl->directAnswer[gageVecMultiGrad])+0)[0] += ((pvl-> directAnswer[gageVecGradient1])[0])*((pvl->directAnswer[gageVecGradient1 ]))[0], ((pvl->directAnswer[gageVecMultiGrad])+0)[1] += (( pvl->directAnswer[gageVecGradient1])[0])*((pvl->directAnswer [gageVecGradient1]))[1], ((pvl->directAnswer[gageVecMultiGrad ])+0)[2] += ((pvl->directAnswer[gageVecGradient1])[0])*((pvl ->directAnswer[gageVecGradient1]))[2]), (((pvl->directAnswer [gageVecMultiGrad])+3)[0] += ((pvl->directAnswer[gageVecGradient1 ])[1])*((pvl->directAnswer[gageVecGradient1]))[0], ((pvl-> directAnswer[gageVecMultiGrad])+3)[1] += ((pvl->directAnswer [gageVecGradient1])[1])*((pvl->directAnswer[gageVecGradient1 ]))[1], ((pvl->directAnswer[gageVecMultiGrad])+3)[2] += (( pvl->directAnswer[gageVecGradient1])[1])*((pvl->directAnswer [gageVecGradient1]))[2]), (((pvl->directAnswer[gageVecMultiGrad ])+6)[0] += ((pvl->directAnswer[gageVecGradient1])[2])*((pvl ->directAnswer[gageVecGradient1]))[0], ((pvl->directAnswer [gageVecMultiGrad])+6)[1] += ((pvl->directAnswer[gageVecGradient1 ])[2])*((pvl->directAnswer[gageVecGradient1]))[1], ((pvl-> directAnswer[gageVecMultiGrad])+6)[2] += ((pvl->directAnswer [gageVecGradient1])[2])*((pvl->directAnswer[gageVecGradient1 ]))[2])) | |||||
| 372 | pvl->directAnswer[gageVecGradient1])((((pvl->directAnswer[gageVecMultiGrad])+0)[0] += ((pvl-> directAnswer[gageVecGradient1])[0])*((pvl->directAnswer[gageVecGradient1 ]))[0], ((pvl->directAnswer[gageVecMultiGrad])+0)[1] += (( pvl->directAnswer[gageVecGradient1])[0])*((pvl->directAnswer [gageVecGradient1]))[1], ((pvl->directAnswer[gageVecMultiGrad ])+0)[2] += ((pvl->directAnswer[gageVecGradient1])[0])*((pvl ->directAnswer[gageVecGradient1]))[2]), (((pvl->directAnswer [gageVecMultiGrad])+3)[0] += ((pvl->directAnswer[gageVecGradient1 ])[1])*((pvl->directAnswer[gageVecGradient1]))[0], ((pvl-> directAnswer[gageVecMultiGrad])+3)[1] += ((pvl->directAnswer [gageVecGradient1])[1])*((pvl->directAnswer[gageVecGradient1 ]))[1], ((pvl->directAnswer[gageVecMultiGrad])+3)[2] += (( pvl->directAnswer[gageVecGradient1])[1])*((pvl->directAnswer [gageVecGradient1]))[2]), (((pvl->directAnswer[gageVecMultiGrad ])+6)[0] += ((pvl->directAnswer[gageVecGradient1])[2])*((pvl ->directAnswer[gageVecGradient1]))[0], ((pvl->directAnswer [gageVecMultiGrad])+6)[1] += ((pvl->directAnswer[gageVecGradient1 ])[2])*((pvl->directAnswer[gageVecGradient1]))[1], ((pvl-> directAnswer[gageVecMultiGrad])+6)[2] += ((pvl->directAnswer [gageVecGradient1])[2])*((pvl->directAnswer[gageVecGradient1 ]))[2])); | |||||
| 373 | ELL_3MV_OUTER_INCR(pvl->directAnswer[gageVecMultiGrad],((((pvl->directAnswer[gageVecMultiGrad])+0)[0] += ((pvl-> directAnswer[gageVecGradient2])[0])*((pvl->directAnswer[gageVecGradient2 ]))[0], ((pvl->directAnswer[gageVecMultiGrad])+0)[1] += (( pvl->directAnswer[gageVecGradient2])[0])*((pvl->directAnswer [gageVecGradient2]))[1], ((pvl->directAnswer[gageVecMultiGrad ])+0)[2] += ((pvl->directAnswer[gageVecGradient2])[0])*((pvl ->directAnswer[gageVecGradient2]))[2]), (((pvl->directAnswer [gageVecMultiGrad])+3)[0] += ((pvl->directAnswer[gageVecGradient2 ])[1])*((pvl->directAnswer[gageVecGradient2]))[0], ((pvl-> directAnswer[gageVecMultiGrad])+3)[1] += ((pvl->directAnswer [gageVecGradient2])[1])*((pvl->directAnswer[gageVecGradient2 ]))[1], ((pvl->directAnswer[gageVecMultiGrad])+3)[2] += (( pvl->directAnswer[gageVecGradient2])[1])*((pvl->directAnswer [gageVecGradient2]))[2]), (((pvl->directAnswer[gageVecMultiGrad ])+6)[0] += ((pvl->directAnswer[gageVecGradient2])[2])*((pvl ->directAnswer[gageVecGradient2]))[0], ((pvl->directAnswer [gageVecMultiGrad])+6)[1] += ((pvl->directAnswer[gageVecGradient2 ])[2])*((pvl->directAnswer[gageVecGradient2]))[1], ((pvl-> directAnswer[gageVecMultiGrad])+6)[2] += ((pvl->directAnswer [gageVecGradient2])[2])*((pvl->directAnswer[gageVecGradient2 ]))[2])) | |||||
| 374 | pvl->directAnswer[gageVecGradient2],((((pvl->directAnswer[gageVecMultiGrad])+0)[0] += ((pvl-> directAnswer[gageVecGradient2])[0])*((pvl->directAnswer[gageVecGradient2 ]))[0], ((pvl->directAnswer[gageVecMultiGrad])+0)[1] += (( pvl->directAnswer[gageVecGradient2])[0])*((pvl->directAnswer [gageVecGradient2]))[1], ((pvl->directAnswer[gageVecMultiGrad ])+0)[2] += ((pvl->directAnswer[gageVecGradient2])[0])*((pvl ->directAnswer[gageVecGradient2]))[2]), (((pvl->directAnswer [gageVecMultiGrad])+3)[0] += ((pvl->directAnswer[gageVecGradient2 ])[1])*((pvl->directAnswer[gageVecGradient2]))[0], ((pvl-> directAnswer[gageVecMultiGrad])+3)[1] += ((pvl->directAnswer [gageVecGradient2])[1])*((pvl->directAnswer[gageVecGradient2 ]))[1], ((pvl->directAnswer[gageVecMultiGrad])+3)[2] += (( pvl->directAnswer[gageVecGradient2])[1])*((pvl->directAnswer [gageVecGradient2]))[2]), (((pvl->directAnswer[gageVecMultiGrad ])+6)[0] += ((pvl->directAnswer[gageVecGradient2])[2])*((pvl ->directAnswer[gageVecGradient2]))[0], ((pvl->directAnswer [gageVecMultiGrad])+6)[1] += ((pvl->directAnswer[gageVecGradient2 ])[2])*((pvl->directAnswer[gageVecGradient2]))[1], ((pvl-> directAnswer[gageVecMultiGrad])+6)[2] += ((pvl->directAnswer [gageVecGradient2])[2])*((pvl->directAnswer[gageVecGradient2 ]))[2])) | |||||
| 375 | pvl->directAnswer[gageVecGradient2])((((pvl->directAnswer[gageVecMultiGrad])+0)[0] += ((pvl-> directAnswer[gageVecGradient2])[0])*((pvl->directAnswer[gageVecGradient2 ]))[0], ((pvl->directAnswer[gageVecMultiGrad])+0)[1] += (( pvl->directAnswer[gageVecGradient2])[0])*((pvl->directAnswer [gageVecGradient2]))[1], ((pvl->directAnswer[gageVecMultiGrad ])+0)[2] += ((pvl->directAnswer[gageVecGradient2])[0])*((pvl ->directAnswer[gageVecGradient2]))[2]), (((pvl->directAnswer [gageVecMultiGrad])+3)[0] += ((pvl->directAnswer[gageVecGradient2 ])[1])*((pvl->directAnswer[gageVecGradient2]))[0], ((pvl-> directAnswer[gageVecMultiGrad])+3)[1] += ((pvl->directAnswer [gageVecGradient2])[1])*((pvl->directAnswer[gageVecGradient2 ]))[1], ((pvl->directAnswer[gageVecMultiGrad])+3)[2] += (( pvl->directAnswer[gageVecGradient2])[1])*((pvl->directAnswer [gageVecGradient2]))[2]), (((pvl->directAnswer[gageVecMultiGrad ])+6)[0] += ((pvl->directAnswer[gageVecGradient2])[2])*((pvl ->directAnswer[gageVecGradient2]))[0], ((pvl->directAnswer [gageVecMultiGrad])+6)[1] += ((pvl->directAnswer[gageVecGradient2 ])[2])*((pvl->directAnswer[gageVecGradient2]))[1], ((pvl-> directAnswer[gageVecMultiGrad])+6)[2] += ((pvl->directAnswer [gageVecGradient2])[2])*((pvl->directAnswer[gageVecGradient2 ]))[2])); | |||||
| 376 | } | |||||
| 377 | if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecMGFrob)(pvl->query[gageVecMGFrob/8] & (1 << (gageVecMGFrob % 8)))) { | |||||
| 378 | pvl->directAnswer[gageVecMGFrob][0] | |||||
| 379 | = ELL_3M_FROB(pvl->directAnswer[gageVecMultiGrad])(sqrt((((pvl->directAnswer[gageVecMultiGrad])+0)[0]*((pvl-> directAnswer[gageVecMultiGrad])+0)[0] + ((pvl->directAnswer [gageVecMultiGrad])+0)[1]*((pvl->directAnswer[gageVecMultiGrad ])+0)[1] + ((pvl->directAnswer[gageVecMultiGrad])+0)[2]*(( pvl->directAnswer[gageVecMultiGrad])+0)[2]) + (((pvl->directAnswer [gageVecMultiGrad])+3)[0]*((pvl->directAnswer[gageVecMultiGrad ])+3)[0] + ((pvl->directAnswer[gageVecMultiGrad])+3)[1]*(( pvl->directAnswer[gageVecMultiGrad])+3)[1] + ((pvl->directAnswer [gageVecMultiGrad])+3)[2]*((pvl->directAnswer[gageVecMultiGrad ])+3)[2]) + (((pvl->directAnswer[gageVecMultiGrad])+6)[0]* ((pvl->directAnswer[gageVecMultiGrad])+6)[0] + ((pvl->directAnswer [gageVecMultiGrad])+6)[1]*((pvl->directAnswer[gageVecMultiGrad ])+6)[1] + ((pvl->directAnswer[gageVecMultiGrad])+6)[2]*(( pvl->directAnswer[gageVecMultiGrad])+6)[2]))); | |||||
| 380 | } | |||||
| 381 | if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecMGEval)(pvl->query[gageVecMGEval/8] & (1 << (gageVecMGEval % 8)))) { | |||||
| 382 | ELL_3M_COPY(tmpMat, pvl->directAnswer[gageVecMultiGrad])((((tmpMat)+0)[0] = ((pvl->directAnswer[gageVecMultiGrad]) +0)[0], ((tmpMat)+0)[1] = ((pvl->directAnswer[gageVecMultiGrad ])+0)[1], ((tmpMat)+0)[2] = ((pvl->directAnswer[gageVecMultiGrad ])+0)[2]), (((tmpMat)+3)[0] = ((pvl->directAnswer[gageVecMultiGrad ])+3)[0], ((tmpMat)+3)[1] = ((pvl->directAnswer[gageVecMultiGrad ])+3)[1], ((tmpMat)+3)[2] = ((pvl->directAnswer[gageVecMultiGrad ])+3)[2]), (((tmpMat)+6)[0] = ((pvl->directAnswer[gageVecMultiGrad ])+6)[0], ((tmpMat)+6)[1] = ((pvl->directAnswer[gageVecMultiGrad ])+6)[1], ((tmpMat)+6)[2] = ((pvl->directAnswer[gageVecMultiGrad ])+6)[2])); | |||||
| 383 | /* HEY: look at the return value for root multiplicity? */ | |||||
| 384 | ell_3m_eigensolve_d(mgeval, mgevec, tmpMat, AIR_TRUE1); | |||||
| 385 | ELL_3V_COPY(pvl->directAnswer[gageVecMGEval], mgeval)((pvl->directAnswer[gageVecMGEval])[0] = (mgeval)[0], (pvl ->directAnswer[gageVecMGEval])[1] = (mgeval)[1], (pvl-> directAnswer[gageVecMGEval])[2] = (mgeval)[2]); | |||||
| 386 | } | |||||
| 387 | if (GAGE_QUERY_ITEM_TEST(pvl->query, gageVecMGEvec)(pvl->query[gageVecMGEvec/8] & (1 << (gageVecMGEvec % 8)))) { | |||||
| 388 | ELL_3M_COPY(pvl->directAnswer[gageVecMGEvec], mgevec)((((pvl->directAnswer[gageVecMGEvec])+0)[0] = ((mgevec)+0) [0], ((pvl->directAnswer[gageVecMGEvec])+0)[1] = ((mgevec) +0)[1], ((pvl->directAnswer[gageVecMGEvec])+0)[2] = ((mgevec )+0)[2]), (((pvl->directAnswer[gageVecMGEvec])+3)[0] = ((mgevec )+3)[0], ((pvl->directAnswer[gageVecMGEvec])+3)[1] = ((mgevec )+3)[1], ((pvl->directAnswer[gageVecMGEvec])+3)[2] = ((mgevec )+3)[2]), (((pvl->directAnswer[gageVecMGEvec])+6)[0] = ((mgevec )+6)[0], ((pvl->directAnswer[gageVecMGEvec])+6)[1] = ((mgevec )+6)[1], ((pvl->directAnswer[gageVecMGEvec])+6)[2] = ((mgevec )+6)[2])); | |||||
| ||||||
| 389 | } | |||||
| 390 | ||||||
| 391 | return; | |||||
| 392 | } | |||||
| 393 | ||||||
| 394 | const char * | |||||
| 395 | _gageVecStr[] = { | |||||
| 396 | "(unknown gageVec)", | |||||
| 397 | "vector", | |||||
| 398 | "vector0", | |||||
| 399 | "vector1", | |||||
| 400 | "vector2", | |||||
| 401 | "length", | |||||
| 402 | "normalized", | |||||
| 403 | "Jacobian", | |||||
| 404 | "strain", | |||||
| 405 | "divergence", | |||||
| 406 | "curl", | |||||
| 407 | "curl norm", | |||||
| 408 | "helicity", | |||||
| 409 | "normalized helicity", | |||||
| 410 | "SOmega", | |||||
| 411 | "lambda2", | |||||
| 412 | "imag", | |||||
| 413 | "vector hessian", | |||||
| 414 | "div gradient", | |||||
| 415 | "curl gradient", | |||||
| 416 | "curl norm gradient", | |||||
| 417 | "normalized curl norm gradient", | |||||
| 418 | "helicity gradient", | |||||
| 419 | "directional helicity derivative", | |||||
| 420 | "projected helicity gradient", | |||||
| 421 | "gradient0", | |||||
| 422 | "gradient1", | |||||
| 423 | "gradient2", | |||||
| 424 | "multigrad", | |||||
| 425 | "frob(multigrad)", | |||||
| 426 | "multigrad eigenvalues", | |||||
| 427 | "multigrad eigenvectors", | |||||
| 428 | }; | |||||
| 429 | ||||||
| 430 | const char * | |||||
| 431 | _gageVecDesc[] = { | |||||
| 432 | "unknown gageVec query", | |||||
| 433 | "component-wise-interpolated vector", | |||||
| 434 | "vector[0]", | |||||
| 435 | "vector[1]", | |||||
| 436 | "vector[2]", | |||||
| 437 | "length of vector", | |||||
| 438 | "normalized vector", | |||||
| 439 | "3x3 Jacobian", | |||||
| 440 | "rate-of-strain tensor", | |||||
| 441 | "divergence", | |||||
| 442 | "curl", | |||||
| 443 | "curl magnitude", | |||||
| 444 | "helicity: dot(vector,curl)", | |||||
| 445 | "normalized helicity", | |||||
| 446 | "S squared plus Omega squared for vortex characterization", | |||||
| 447 | "lambda2 value of SOmega", | |||||
| 448 | "imaginary part of complex-conjugate eigenvalues of Jacobian", | |||||
| 449 | "3x3x3 second-order vector derivative", | |||||
| 450 | "gradient of divergence", | |||||
| 451 | "3x3 derivative of curl", | |||||
| 452 | "gradient of curl norm", | |||||
| 453 | "normalized gradient of curl norm", | |||||
| 454 | "gradient of helicity", | |||||
| 455 | "directional derivative of helicity along flow", | |||||
| 456 | "projection of the helicity gradient onto plane orthogonal to flow", | |||||
| 457 | "gradient of 1st component of vector", | |||||
| 458 | "gradient of 2nd component of vector", | |||||
| 459 | "gradient of 3rd component of vector", | |||||
| 460 | "multi-gradient: sum of outer products of gradients", | |||||
| 461 | "frob norm of multi-gradient", | |||||
| 462 | "eigenvalues of multi-gradient", | |||||
| 463 | "eigenvectors of multi-gradient" | |||||
| 464 | }; | |||||
| 465 | ||||||
| 466 | const int | |||||
| 467 | _gageVecVal[] = { | |||||
| 468 | gageVecUnknown, | |||||
| 469 | gageVecVector, | |||||
| 470 | gageVecVector0, | |||||
| 471 | gageVecVector1, | |||||
| 472 | gageVecVector2, | |||||
| 473 | gageVecLength, | |||||
| 474 | gageVecNormalized, | |||||
| 475 | gageVecJacobian, | |||||
| 476 | gageVecStrain, | |||||
| 477 | gageVecDivergence, | |||||
| 478 | gageVecCurl, | |||||
| 479 | gageVecCurlNorm, | |||||
| 480 | gageVecHelicity, | |||||
| 481 | gageVecNormHelicity, | |||||
| 482 | gageVecSOmega, | |||||
| 483 | gageVecLambda2, | |||||
| 484 | gageVecImaginaryPart, | |||||
| 485 | gageVecHessian, | |||||
| 486 | gageVecDivGradient, | |||||
| 487 | gageVecCurlGradient, | |||||
| 488 | gageVecCurlNormGrad, | |||||
| 489 | gageVecNCurlNormGrad, | |||||
| 490 | gageVecHelGradient, | |||||
| 491 | gageVecDirHelDeriv, | |||||
| 492 | gageVecProjHelGradient, | |||||
| 493 | gageVecGradient0, | |||||
| 494 | gageVecGradient1, | |||||
| 495 | gageVecGradient2, | |||||
| 496 | gageVecMultiGrad, | |||||
| 497 | gageVecMGFrob, | |||||
| 498 | gageVecMGEval, | |||||
| 499 | gageVecMGEvec, | |||||
| 500 | }; | |||||
| 501 | ||||||
| 502 | #define GV_VgageVecVector gageVecVector | |||||
| 503 | #define GV_V0gageVecVector0 gageVecVector0 | |||||
| 504 | #define GV_V1gageVecVector1 gageVecVector1 | |||||
| 505 | #define GV_V2gageVecVector2 gageVecVector2 | |||||
| 506 | #define GV_LgageVecLength gageVecLength | |||||
| 507 | #define GV_NgageVecNormalized gageVecNormalized | |||||
| 508 | #define GV_JgageVecJacobian gageVecJacobian | |||||
| 509 | #define GV_SgageVecStrain gageVecStrain | |||||
| 510 | #define GV_DgageVecDivergence gageVecDivergence | |||||
| 511 | #define GV_CgageVecCurl gageVecCurl | |||||
| 512 | #define GV_CMgageVecCurlNorm gageVecCurlNorm | |||||
| 513 | #define GV_HgageVecHelicity gageVecHelicity | |||||
| 514 | #define GV_NHgageVecNormHelicity gageVecNormHelicity | |||||
| 515 | #define GV_SOgageVecSOmega gageVecSOmega | |||||
| 516 | #define GV_LBgageVecLambda2 gageVecLambda2 | |||||
| 517 | #define GV_IMgageVecImaginaryPart gageVecImaginaryPart | |||||
| 518 | #define GV_VHgageVecHessian gageVecHessian | |||||
| 519 | #define GV_DGgageVecDivGradient gageVecDivGradient | |||||
| 520 | #define GV_CGgageVecCurlGradient gageVecCurlGradient | |||||
| 521 | #define GV_CNGgageVecCurlNormGrad gageVecCurlNormGrad | |||||
| 522 | #define GV_NCGgageVecNCurlNormGrad gageVecNCurlNormGrad | |||||
| 523 | #define GV_HGgageVecHelGradient gageVecHelGradient | |||||
| 524 | #define GV_DHgageVecDirHelDeriv gageVecDirHelDeriv | |||||
| 525 | #define GV_PHgageVecProjHelGradient gageVecProjHelGradient | |||||
| 526 | #define GV_G0gageVecGradient0 gageVecGradient0 | |||||
| 527 | #define GV_G1gageVecGradient1 gageVecGradient1 | |||||
| 528 | #define GV_G2gageVecGradient2 gageVecGradient2 | |||||
| 529 | #define GV_MGgageVecMultiGrad gageVecMultiGrad | |||||
| 530 | #define GV_MFgageVecMGFrob gageVecMGFrob | |||||
| 531 | #define GV_MLgageVecMGEval gageVecMGEval | |||||
| 532 | #define GV_MCgageVecMGEvec gageVecMGEvec | |||||
| 533 | ||||||
| 534 | const char * | |||||
| 535 | _gageVecStrEqv[] = { | |||||
| 536 | "v", "vector", "vec", | |||||
| 537 | "v0", "vector0", "vec0", | |||||
| 538 | "v1", "vector1", "vec1", | |||||
| 539 | "v2", "vector2", "vec2", | |||||
| 540 | "l", "length", "len", | |||||
| 541 | "n", "normalized", "normalized vector", | |||||
| 542 | "jacobian", "jac", "j", | |||||
| 543 | "strain", "S", | |||||
| 544 | "divergence", "div", "d", | |||||
| 545 | "curl", "c", | |||||
| 546 | "curlnorm", "curl norm", "curl magnitude", "cm", | |||||
| 547 | "h", "hel", "hell", "helicity", | |||||
| 548 | "nh", "nhel", "normhel", "normhell", "normalized helicity", | |||||
| 549 | "SOmega", | |||||
| 550 | "lbda2", "lambda2", | |||||
| 551 | "imag", "imagpart", | |||||
| 552 | "vh", "vhes", "vhessian", "vector hessian", | |||||
| 553 | "dg", "divgrad", "div gradient", | |||||
| 554 | "cg", "curlgrad", "curlg", "curljac", "curl gradient", | |||||
| 555 | "cng", "curl norm gradient", | |||||
| 556 | "ncng", "norm curl norm gradient", "normalized curl norm gradient", | |||||
| 557 | "hg", "helg", "helgrad", "helicity gradient", | |||||
| 558 | "dirhelderiv", "dhd", "ddh", "directional helicity derivative", | |||||
| 559 | "phg", "projhel", "projhelgrad", "projected helicity gradient", | |||||
| 560 | "g0", "grad0", "gradient0", | |||||
| 561 | "g1", "grad1", "gradient1", | |||||
| 562 | "g2", "grad2", "gradient2", | |||||
| 563 | "mg", "multigrad", | |||||
| 564 | "mgfrob", "frob(multigrad)", | |||||
| 565 | "mgeval", "mg eval", "multigrad eigenvalues", | |||||
| 566 | "mgevec", "mg evec", "multigrad eigenvectors", | |||||
| 567 | "" | |||||
| 568 | }; | |||||
| 569 | ||||||
| 570 | const int | |||||
| 571 | _gageVecValEqv[] = { | |||||
| 572 | GV_VgageVecVector, GV_VgageVecVector, GV_VgageVecVector, | |||||
| 573 | GV_V0gageVecVector0, GV_V0gageVecVector0, GV_V0gageVecVector0, | |||||
| 574 | GV_V1gageVecVector1, GV_V1gageVecVector1, GV_V1gageVecVector1, | |||||
| 575 | GV_V2gageVecVector2, GV_V2gageVecVector2, GV_V2gageVecVector2, | |||||
| 576 | GV_LgageVecLength, GV_LgageVecLength, GV_LgageVecLength, | |||||
| 577 | GV_NgageVecNormalized, GV_NgageVecNormalized, GV_NgageVecNormalized, | |||||
| 578 | GV_JgageVecJacobian, GV_JgageVecJacobian, GV_JgageVecJacobian, | |||||
| 579 | GV_SgageVecStrain, GV_SgageVecStrain, | |||||
| 580 | GV_DgageVecDivergence, GV_DgageVecDivergence, GV_DgageVecDivergence, | |||||
| 581 | GV_CgageVecCurl, GV_CgageVecCurl, | |||||
| 582 | GV_CMgageVecCurlNorm, GV_CMgageVecCurlNorm, GV_CMgageVecCurlNorm, GV_CMgageVecCurlNorm, | |||||
| 583 | GV_HgageVecHelicity, GV_HgageVecHelicity, GV_HgageVecHelicity, GV_HgageVecHelicity, | |||||
| 584 | GV_NHgageVecNormHelicity, GV_NHgageVecNormHelicity, GV_NHgageVecNormHelicity, GV_NHgageVecNormHelicity, GV_NHgageVecNormHelicity, | |||||
| 585 | GV_SOgageVecSOmega, | |||||
| 586 | GV_LBgageVecLambda2, GV_LBgageVecLambda2, | |||||
| 587 | GV_IMgageVecImaginaryPart, GV_IMgageVecImaginaryPart, | |||||
| 588 | GV_VHgageVecHessian, GV_VHgageVecHessian, GV_VHgageVecHessian, GV_VHgageVecHessian, | |||||
| 589 | GV_DGgageVecDivGradient, GV_DGgageVecDivGradient, GV_DGgageVecDivGradient, | |||||
| 590 | GV_CGgageVecCurlGradient, GV_CGgageVecCurlGradient, GV_CGgageVecCurlGradient, GV_CGgageVecCurlGradient, GV_CGgageVecCurlGradient, | |||||
| 591 | GV_CNGgageVecCurlNormGrad, GV_CNGgageVecCurlNormGrad, | |||||
| 592 | GV_NCGgageVecNCurlNormGrad, GV_NCGgageVecNCurlNormGrad, GV_NCGgageVecNCurlNormGrad, | |||||
| 593 | GV_HGgageVecHelGradient, GV_HGgageVecHelGradient, GV_HGgageVecHelGradient, GV_HGgageVecHelGradient, | |||||
| 594 | GV_DHgageVecDirHelDeriv, GV_DHgageVecDirHelDeriv, GV_DHgageVecDirHelDeriv, GV_DHgageVecDirHelDeriv, | |||||
| 595 | GV_PHgageVecProjHelGradient, GV_PHgageVecProjHelGradient, GV_PHgageVecProjHelGradient, GV_PHgageVecProjHelGradient, | |||||
| 596 | GV_G0gageVecGradient0, GV_G0gageVecGradient0, GV_G0gageVecGradient0, | |||||
| 597 | GV_G1gageVecGradient1, GV_G1gageVecGradient1, GV_G1gageVecGradient1, | |||||
| 598 | GV_G2gageVecGradient2, GV_G2gageVecGradient2, GV_G2gageVecGradient2, | |||||
| 599 | GV_MGgageVecMultiGrad, GV_MGgageVecMultiGrad, | |||||
| 600 | GV_MFgageVecMGFrob, GV_MFgageVecMGFrob, | |||||
| 601 | GV_MLgageVecMGEval, GV_MLgageVecMGEval, GV_MLgageVecMGEval, | |||||
| 602 | GV_MCgageVecMGEvec, GV_MCgageVecMGEvec, GV_MCgageVecMGEvec | |||||
| 603 | }; | |||||
| 604 | ||||||
| 605 | const airEnum | |||||
| 606 | _gageVec = { | |||||
| 607 | "gageVec", | |||||
| 608 | GAGE_VEC_ITEM_MAX31, | |||||
| 609 | _gageVecStr, _gageVecVal, | |||||
| 610 | _gageVecDesc, | |||||
| 611 | _gageVecStrEqv, _gageVecValEqv, | |||||
| 612 | AIR_FALSE0 | |||||
| 613 | }; | |||||
| 614 | const airEnum *const | |||||
| 615 | gageVec = &_gageVec; | |||||
| 616 | ||||||
| 617 | gageKind | |||||
| 618 | _gageKindVec = { | |||||
| 619 | AIR_FALSE0, /* statically allocated */ | |||||
| 620 | "vector", | |||||
| 621 | &_gageVec, | |||||
| 622 | 1, /* baseDim */ | |||||
| 623 | 3, /* valLen */ | |||||
| 624 | GAGE_VEC_ITEM_MAX31, | |||||
| 625 | _gageVecTable, | |||||
| 626 | _gageVecIv3Print, | |||||
| 627 | _gageVecFilter, | |||||
| 628 | _gageVecAnswer, | |||||
| 629 | NULL((void*)0), NULL((void*)0), NULL((void*)0), NULL((void*)0), | |||||
| 630 | NULL((void*)0) | |||||
| 631 | }; | |||||
| 632 | gageKind *const | |||||
| 633 | gageKindVec = &_gageKindVec; | |||||
| 634 |