diff options
Diffstat (limited to 'src/basis.c')
-rw-r--r-- | src/basis.c | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/src/basis.c b/src/basis.c index 46335fa..8d94683 100644 --- a/src/basis.c +++ b/src/basis.c @@ -83,6 +83,21 @@ Basis basis_add(Basis u, Basis v) { } +static void basis_print(Basis *cell) { + + printf("%12.8f %12.8f %12.8f\n", cell->a.x, cell->a.y, cell->a.z); + printf("%12.8f %12.8f %12.8f\n", cell->b.x, cell->b.y, cell->b.z); + printf("%12.8f %12.8f %12.8f\n", cell->c.x, cell->c.y, cell->c.z); + +} + +static void cell_print(UnitCell *cell) { + + printf("%12.8f %12.8f %12.8f\n", cell->a, cell->b, cell->c); + printf("%12.8f %12.8f %12.8f\n", cell->alpha, cell->beta, cell->gamma); + +} + UnitCell basis_get_cell(Basis *basis) { UnitCell cell; @@ -92,13 +107,17 @@ UnitCell basis_get_cell(Basis *basis) { double ax, ay, az, bx, by, bz, cx, cy, cz; int s; + basis->a.x = 0.5; basis->a.y = 0.0; basis->a.z = 0.0; + basis->b.x = 0.0; basis->b.y = 0.2; basis->b.z = 0.0; + basis->c.x = 0.0; basis->c.y = 0.0; basis->c.z = 1.0; + printf("Reciprocal-space cell:\n"); + basis_print(basis); + m = gsl_matrix_alloc(3, 3); gsl_matrix_set(m, 0, 0, basis->a.x); gsl_matrix_set(m, 0, 1, basis->b.x); gsl_matrix_set(m, 0, 2, basis->c.x); gsl_matrix_set(m, 1, 0, basis->a.y); gsl_matrix_set(m, 1, 1, basis->b.y); gsl_matrix_set(m, 1, 2, basis->c.y); gsl_matrix_set(m, 2, 0, basis->a.z); gsl_matrix_set(m, 2, 1, basis->b.z); gsl_matrix_set(m, 2, 2, basis->c.z); - gsl_matrix_transpose(m); - perm = gsl_permutation_alloc(m->size1); inv = gsl_matrix_alloc(m->size1, m->size2); gsl_linalg_LU_decomp(m, perm, &s); @@ -106,10 +125,17 @@ UnitCell basis_get_cell(Basis *basis) { gsl_permutation_free(perm); gsl_matrix_free(m); + gsl_matrix_transpose(inv); + ax = gsl_matrix_get(inv, 0, 0); bx = gsl_matrix_get(inv, 0, 1); cx = gsl_matrix_get(inv, 0, 2); ay = gsl_matrix_get(inv, 1, 0); by = gsl_matrix_get(inv, 1, 1); cy = gsl_matrix_get(inv, 1, 2); az = gsl_matrix_get(inv, 2, 0); bz = gsl_matrix_get(inv, 2, 1); cz = gsl_matrix_get(inv, 2, 2); + printf("Real-space cell:\n"); + printf("%12.8f %12.8f %12.8f\n", ax, ay, az); + printf("%12.8f %12.8f %12.8f\n", bx, by, bz); + printf("%12.8f %12.8f %12.8f\n", cx, cy, cz); + cell.a = sqrt(ax*ax + ay*ay + az*az); cell.b = sqrt(bx*bx + by*by + bz*bz); cell.c = sqrt(cx*cx + cy*cy + cz*cz); @@ -119,6 +145,9 @@ UnitCell basis_get_cell(Basis *basis) { gsl_matrix_free(inv); + printf("Cell parameters:\n"); + cell_print(&cell); + return cell; } |