示例#1
0
_TEN_PARM_ALLOC
_TEN_PARM_RAND
_TEN_PARM_STEP
_TEN_PARM_DIST
_TEN_PARM_COPY

static int
parmConvert(double *parmDst, const double *parmSrc,
            const tenModel *modelSrc) {
  int ret;

  if (modelSrc == tenModelBall) {
    TEN_T_SET(parmDst, parmSrc[0],
              parmSrc[1], 0, 0,
              parmSrc[1], 0,
              parmSrc[1]);
    ret = 0;
  } else if (modelSrc == tenModel1Stick) {
    double ten[7];
    TEN_T3V_OUTER(ten, parmSrc + 2);
    TEN_T_SCALE(parmDst, parmSrc[1], ten);
    parmDst[0] = parmSrc[0];
    ret = 0;
  } else if (modelSrc == tenModelBall1Stick) {
    double stick[7], ball[7], diff, frac;
    diff = parmSrc[1];
    frac = parmSrc[2];
    TEN_T3V_OUTER(stick, parmSrc + 3);
    TEN_T_SCALE(stick, diff, stick);
    TEN_T_SET(ball, 1, diff, 0, 0, diff, 0, diff);
    TEN_T_LERP(parmDst, frac, ball, stick);
    parmDst[0] = parmSrc[0];
    ret = 1;
  } else if (modelSrc == tenModel1Cylinder) {
    double stick[7], ball[7], len, rad;
    len = parmSrc[1];
    rad = parmSrc[2];
    TEN_T3V_OUTER(stick, parmSrc + 3);
    TEN_T_SCALE(stick, len-rad, stick);
    TEN_T_SET(ball, 1, rad, 0, 0, rad, 0, rad);
    TEN_T_ADD(parmDst, ball, stick);
    parmDst[0] = parmSrc[0];
    ret = 0;
  } else if (modelSrc == tenModel1Tensor2) {
    parmCopy(parmDst, parmSrc);
    ret = 0;
  } else {
    unsigned int ii;
    for (ii=0; ii<PARM_NUM; ii++) {
      parmDst[ii] = AIR_NAN;
    }
    ret = 2;
  }
  return ret;
}
示例#2
0
/*
** watch out for false advertising!
*/
void
_coilKind7TensorFilterSelf(coil_t *delta, coil_t **iv3, 
                           double spacing[3],
                           double parm[COIL_PARMS_NUM]) {
  coil_t hess[7], rspX, rspY, rspZ, parm0;
  float eval[3], evec[9], tens[7], lin;

  rspX = AIR_CAST(coil_t, 1.0/spacing[0]);
  rspY = AIR_CAST(coil_t, 1.0/spacing[1]);
  rspZ = AIR_CAST(coil_t, 1.0/spacing[2]);
  TENS(tens, iv3);
  tenEigensolve_f(eval, evec, tens);
  lin = (eval[0] - eval[1])/(eval[0] - eval[2] + 0.000001f);
  TEN_T3V_OUTER(tens, evec + 3*0);
  delta[0] = 0;
  parm0 = AIR_CAST(coil_t, parm[0]);
  HESS(hess, iv3, 1, rspX, rspY, rspZ); delta[1] = lin*parm0*tens[0]*TEN_T_DOT(hess, tens);
  HESS(hess, iv3, 2, rspX, rspY, rspZ); delta[2] = lin*parm0*tens[0]*TEN_T_DOT(hess, tens);
  HESS(hess, iv3, 3, rspX, rspY, rspZ); delta[3] = lin*parm0*tens[0]*TEN_T_DOT(hess, tens);
  HESS(hess, iv3, 4, rspX, rspY, rspZ); delta[4] = lin*parm0*tens[0]*TEN_T_DOT(hess, tens);
  HESS(hess, iv3, 5, rspX, rspY, rspZ); delta[5] = lin*parm0*tens[0]*TEN_T_DOT(hess, tens);
  HESS(hess, iv3, 6, rspX, rspY, rspZ); delta[6] = lin*parm0*tens[0]*TEN_T_DOT(hess, tens);
}