예제 #1
0
void function_grad2(const real_1d_array &x, double &func, real_1d_array &grad, void *ptr) 
{
  double SY=g_Y;
  double SX2=g_X2;
  double SY2=g_Y2;
  double SZ2=g_Z2;
  double SM=g_M;

  double L=0;

  for (int i=0;i<g_vInt.size();i++)
  {
    vector<int>& neighbors=g_NeightborMap[i];
    L+=neighbors.size()*x[i]*x[i];

    for (int j = 0; j < neighbors.size(); j++)
    {
      L-=x[i]*x[neighbors[j]];
    }
  }

  for (int i=0;i<g_vInt.size();i++)
  {
    SY-=g_vInt[i](1)*x[i];
    SX2-=g_vInt[i](4)*x[i];
    SY2-=g_vInt[i](5)*x[i];
    SZ2-=g_vInt[i](6)*x[i];
    SM-=g_vInt[i](3)*x[i];
  }

  double IX=SY2+SZ2-SY*SY/SM;
  double IZ=SX2+SY2-SY*SY/SM;
  double IY=SX2+SZ2;
  double A=IX/IY;
  double B=IZ/IY;

  func=SY*SY+SPINCOEF*(A*A+B*B)+LAPLACIAN2*L;

  for (int i=0;i<g_vInt.size();i++)
  {
    VectorXd vInt=g_vInt[i];
    grad[i]=-2*SY*vInt(1);

    double C=(-2*SY*vInt(1)*SM+SY*SY*g_vInt[i](3))/SM/SM;
    double GA=(-(vInt(5)+vInt(6)+C)*IY+(vInt(4)+vInt(6))*IX)/IY/IY;
    double GB=(-(vInt(4)+vInt(5)+C)*IY+(vInt(4)+vInt(6))*IZ)/IY/IY;

    grad[i]+=SPINCOEF*2*(A*GA+B*GB);

    vector<int>& neighbors=g_NeightborMap[i];
    double tmpL=neighbors.size()*x[i];
    for (int j = 0; j < neighbors.size(); j++)
    {
      tmpL-=x[neighbors[j]];
    }

    grad[i]+=LAPLACIAN2*2*tmpL;
  }
}
예제 #2
0
TEST_F(VectorTest, TestEquality) {
    EXPECT_FALSE(vDouble1 == vInt1);
    EXPECT_FALSE(vDouble2 == vInt2);

    Vector flippedDouble = vDouble1;
    flippedDouble[1] = -1*vDouble1[1];

    EXPECT_FALSE(flippedDouble == vDouble1);

    Vector vDouble(1.0, 2.0, 3.0);
    VectorInt vInt(1,2,3);

    EXPECT_TRUE(vDouble == vInt);
}
예제 #3
0
TEST(syntax, param_ordering) {
  CREATE_RUNTIME();
  CREATE_TEST_ARENA();

  value_t any_guard_ast = new_heap_guard_ast(runtime, gtAny, null());

  reusable_scratch_memory_t scratch;
  reusable_scratch_memory_init(&scratch);

  variant_t *sub = vValue(ROOT(runtime, subject_key));
  variant_t *sel = vValue(ROOT(runtime, selector_key));
  variant_t *just_sub = vArray(sub);
  variant_t *just_sel = vArray(sel);
  variant_t *just_0 = vArray(vInt(0));
  variant_t *just_1 = vArray(vInt(1));
  variant_t *just_2 = vArray(vInt(2));
  variant_t *just_3 = vArray(vInt(3));

  CHECK_ORDERING(4, vArray(just_0, just_1, just_2, just_3), 0 o 1 o 2 o 3);
  CHECK_ORDERING(4, vArray(just_3, just_2, just_1, just_0), 3 o 2 o 1 o 0);
  CHECK_ORDERING(4, vArray(just_2, just_0, just_3, just_1), 2 o 0 o 3 o 1);
  CHECK_ORDERING(3, vArray(just_2, just_0, just_3), 1 o 0 o 2);
  CHECK_ORDERING(2, vArray(just_2, just_3), 0 o 1);

  CHECK_ORDERING(3, vArray(just_2, vArray(vInt(0), vInt(1)), just_3), 1 o 0 o 2);
  CHECK_ORDERING(3, vArray(just_2, vArray(vInt(0), vInt(4)), just_3), 1 o 0 o 2);
  CHECK_ORDERING(3, vArray(just_2, vArray(vInt(5), vInt(4)), just_3), 0 o 2 o 1);

  CHECK_ORDERING(4, vArray(just_0, just_1, just_2, just_sel), 1 o 2 o 3 o 0);
  CHECK_ORDERING(4, vArray(just_0, just_sub, just_2, just_sel), 2 o 0 o 3 o 1);
  CHECK_ORDERING(3, vArray(just_0, vArray(sub, sel), just_3), 1 o 0 o 2);

  reusable_scratch_memory_dispose(&scratch);

  DISPOSE_TEST_ARENA();
  DISPOSE_RUNTIME();
}
예제 #4
0
TEST(syntax, parameter_order_index) {
  CREATE_RUNTIME();
  CREATE_TEST_ARENA();

  variant_t *subject_key = vValue(ROOT(runtime, subject_key));
  variant_t *selector_key = vValue(ROOT(runtime, selector_key));

  CHECK_ORDERING_INDEX(0, vArray(subject_key));
  CHECK_ORDERING_INDEX(1, vArray(selector_key));
  CHECK_ORDERING_INDEX(0, vArray(subject_key, selector_key));

  CHECK_ORDERING_INDEX(2, vArray(vInt(0)));
  CHECK_ORDERING_INDEX(3, vArray(vInt(1)));
  CHECK_ORDERING_INDEX(4, vArray(vInt(2)));
  CHECK_ORDERING_INDEX(2, vArray(vInt(0), vInt(2)));
  CHECK_ORDERING_INDEX(2, vArray(vInt(2), vInt(0)));
  CHECK_ORDERING_INDEX(1, vArray(vInt(2), selector_key));

  CHECK_ORDERING_INDEX(kMaxOrderIndex, vArray(vStr("foo")));
  CHECK_ORDERING_INDEX(102, vArray(vStr("foo"), vInt(100)));

  DISPOSE_TEST_ARENA();
  DISPOSE_RUNTIME();
}
예제 #5
0
void tryStdVectorConstructor()
{
	PRINTSTR("try std::vector< <> >::vector()");
	std::vector< int > vInt(5,1);
	PRINT( vInt );
}