Beispiel #1
0
    inline mat4 inverse(mat4 const& m)
    {
        float coef00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
        float coef02 = m[1][2] * m[3][3] - m[3][2] * m[1][3];
        float coef03 = m[1][2] * m[2][3] - m[2][2] * m[1][3];

        float coef04 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
        float coef06 = m[1][1] * m[3][3] - m[3][1] * m[1][3];
        float coef07 = m[1][1] * m[2][3] - m[2][1] * m[1][3];

        float coef08 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
        float coef10 = m[1][1] * m[3][2] - m[3][1] * m[1][2];
        float coef11 = m[1][1] * m[2][2] - m[2][1] * m[1][2];

        float coef12 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
        float coef14 = m[1][0] * m[3][3] - m[3][0] * m[1][3];
        float coef15 = m[1][0] * m[2][3] - m[2][0] * m[1][3];

        float coef16 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
        float coef18 = m[1][0] * m[3][2] - m[3][0] * m[1][2];
        float coef19 = m[1][0] * m[2][2] - m[2][0] * m[1][2];

        float coef20 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
        float coef22 = m[1][0] * m[3][1] - m[3][0] * m[1][1];
        float coef23 = m[1][0] * m[2][1] - m[2][0] * m[1][1];

        vec4 fac0(coef00, coef00, coef02, coef03);
        vec4 fac1(coef04, coef04, coef06, coef07);
        vec4 fac2(coef08, coef08, coef10, coef11);
        vec4 fac3(coef12, coef12, coef14, coef15);
        vec4 fac4(coef16, coef16, coef18, coef19);
        vec4 fac5(coef20, coef20, coef22, coef23);

        vec4 v0(m[1][0], m[0][0], m[0][0], m[0][0]);
        vec4 v1(m[1][1], m[0][1], m[0][1], m[0][1]);
        vec4 v2(m[1][2], m[0][2], m[0][2], m[0][2]);
        vec4 v3(m[1][3], m[0][3], m[0][3], m[0][3]);

        vec4 inv0(v1 * fac0 - v2 * fac1 + v3 * fac2);
        vec4 inv1(v0 * fac0 - v2 * fac3 + v3 * fac4);
        vec4 inv2(v0 * fac1 - v1 * fac3 + v3 * fac5);
        vec4 inv3(v0 * fac2 - v1 * fac4 + v2 * fac5);

        vec4 signA(+1, -1, +1, -1);
        vec4 signB(-1, +1, -1, +1);
        mat4 inv(inv0 * signA, inv1 * signB, inv2 * signA, inv3 * signB);

        vec4 row0(inv[0][0], inv[1][0], inv[2][0], inv[3][0]);

        vec4 dot0(m[0] * row0);
        float dot1 = (dot0.x + dot0.y) + (dot0.z + dot0.w);

        float one_over_det = 1.f / dot1;

        return inv * one_over_det;
    }
Beispiel #2
0
int main() {
  std::cout.precision(10);

  // lattice structure
  int n = 16;
  int ibond = n;
  std::vector<int> ipair;
  for (int i = 0; i < ibond; ++i) {
    ipair.push_back(i);
    ipair.push_back((i + 1) % n);
  }

  // Hamiltonian parameters
  std::vector<double> bondwt(ibond, -1);
  std::vector<double> zrtio(ibond, 1);

  // table of configurations
  std::vector<int> list1;
  std::vector<std::pair<int, int> > list2;
  int idim = sz(n, 0, list1, list2);
  // You may alternatively use szdy or sztn for faster processing
  //   int idim = szdy(n, 0, list1, list2);
  // or
  //   int idim = sztn(n, 0, list1, list2);

  // Eigenvalues
  int nvec = 0;
  int iv = idim / 3 - 1;
  std::vector<double> E, alpha, beta;
  matrix_type coeff;
  matrix_type v;
  int itr = lnc1(n, ipair, bondwt, zrtio, nvec, iv, E, alpha, beta, coeff, v, list1, list2);
  
  std::cout << "[Eigenvalues]\n";
  for (int i = 0; i < 4; ++i) std::cout << '\t' << E[i];
  std::cout << std::endl;
  std::cout << "[Iteration number]\n\t" << itr << std::endl;

  // Ground-state eigenvector
  std::vector<double> x;
  inv1(n, ipair, bondwt, zrtio, E[2], iv, x, v, list1, list2);

  std::cout << "[Eigenvector components (selected)]";
  int count = 0;
  for (int i = 12; i < idim; i += idim/20, ++count) {
    if (count % 4 == 0) std::cout << std::endl;
    std::cout << '\t' << x[i];
  }
  std::cout << std::endl;

  // Precision check and correlation functions
  double Hexpec = check1(n, ipair, bondwt, zrtio, x, v, 0, list1, list2);
}
Beispiel #3
0
void gssinv(real_t **a, int n, real_t aux[])
{
	int *allocate_integer_vector(int, int);
	void free_integer_vector(int *, int);
	void gsselm(real_t **, int, real_t [], int [], int []);
	real_t inv1(real_t **, int, int [], int [], int);
	int *ri,*ci;

	ri=allocate_integer_vector(1,n);
	ci=allocate_integer_vector(1,n);
	gsselm(a,n,aux,ri,ci);
	if (aux[3] == n) aux[9]=inv1(a,n,ri,ci,1);
	free_integer_vector(ri,1);
	free_integer_vector(ci,1);
}
CreatureTypeDef::CreatureTypeDef(void)
{
	for(int i = 0; i<kMaxCreatureTypes; i++)
	{
		creatureTypes[i].setTypeID(i);
		std::unique_ptr<InventoryComponent> inv1(new InventoryComponent());
		std::unique_ptr<EquipSlotsComponent> equip1(new EquipSlotsComponent());
		for(int j = 0; j<EntityEquipSlotID::Count; j++)
		{
			equip1->addEquipSlot(EntityEquipSlotID::E(j));
		}
		creatureTypes[i].addComponent(std::move(inv1));
		creatureTypes[i].addComponent(std::move(equip1));
	}
	creatureTypes[0].setLName("insurgent");
	creatureTypes[0].setSName("Elliot Hatch");
	creatureTypes[0].setDName("insurgent");
	creatureTypes[0].setClassID(CreatureClassID::Insurgent01);
	creatureTypes[0].setSpeed(5);
	creatureTypes[0].setStrength(6);
}