gimme-alpha 0.1

read_nextnano_8x8kp_output.c File Reference

#include <stdio.h>
#include <stdlib.h>
#include <libnextnano/read_nextnano_8x8kp_output.h>
#include <libnextnano/read_nextnano_inputfile.h>
#include <libcommon/textfile_common.h>
#include <libcommon/gimme_alpha_types.h>
Include dependency graph for read_nextnano_8x8kp_output.c:

Go to the source code of this file.

Functions

int read_nextnano_8x8kp_get_filename (char *buffer, int bufflen, int bands, int electron, int qcluster, int eignum, int kpar, int kz, int neumann, int wavefunc)
int read_nextnano_8x8kp_get_eigvals_filename (char *buffer, int bufflen, int bands, int electron, int qcluster, int kpar, int neumann)
GList * read_nextnano_8x8kp_get_eigfunc (GFile *base, GHashTable *input, int num, GList **titles)
GList * read_nextnano_8x8kp_get_eigvals (GFile *base, GHashTable *input)

Function Documentation

GList* read_nextnano_8x8kp_get_eigfunc ( GFile *  base,
GHashTable *  input,
int  num,
GList **  titles 
)

Definition at line 36 of file read_nextnano_8x8kp_output.c.

References DOUBLE_TYPE, read_nextnano_8x8kp_get_filename(), read_nextnano_extract_item(), and read_titled_whitespaced_data().

                                                                                                {
  int err;
  char *kpdir_s = read_nextnano_extract_item(input, "output-kp-data", 0, "destination-directory", &err);
  if(err != 0) {
    fprintf(stderr, "Error extracting item from nextnano input.\n");
    return NULL;
  }
  GFile *kpdir = g_file_get_child(base, kpdir_s);
  char eigfunc_file[1024] = {'\0'};
  read_nextnano_8x8kp_get_filename(eigfunc_file, 1024, 8, 1, 1, num, 1, 1, 1, 1);
  //fprintf(stderr, "got eigenfunction file of %s\n", eigfunc_file);
  GFile *eigfunc_f = g_file_get_child(kpdir, eigfunc_file);
  GError *err_func;
  GFileInputStream *eigfunc_stream = g_file_read(eigfunc_f, NULL, &err_func);
  if(eigfunc_stream == NULL) {
    fprintf(stderr, "failed top open the eigenfunction file (%s): eigfunc error was %s\n", eigfunc_file, err_func->message);
    g_object_unref(kpdir);
    g_object_unref(eigfunc_f);
    return NULL;
  }
  *titles = NULL;
  GList *eigfunc = read_titled_whitespaced_data(G_INPUT_STREAM(eigfunc_stream), &err_func, titles, '!', DOUBLE_TYPE);
  /*free the data structures*/
  g_object_unref(kpdir);
  g_object_unref(eigfunc_f);
  g_object_unref(eigfunc_stream);
  return eigfunc;
}

Here is the call graph for this function:

GList* read_nextnano_8x8kp_get_eigvals ( GFile *  base,
GHashTable *  input 
)

Definition at line 66 of file read_nextnano_8x8kp_output.c.

References DOUBLE_TYPE, read_nextnano_8x8kp_get_eigvals_filename(), read_nextnano_extract_item(), and read_titled_whitespaced_data().

                                                                       {
  int err;
  char *kpdir_s = read_nextnano_extract_item(input, "output-kp-data", 0, "destination-directory", &err);
  if(err != 0) {
    fprintf(stderr, "Error extracting item from nextnano input.\n");
    return NULL;
  }
  GFile *kpdir = g_file_get_child(base, kpdir_s);
  char eigval_file[1024] = {'\0'};
  read_nextnano_8x8kp_get_eigvals_filename(eigval_file, 1024, 8, 1, 1, 1, 1);
  GFile *eigval_f = g_file_get_child(kpdir, eigval_file);
  GError *err_val;
  GFileInputStream *eigval_stream = g_file_read(eigval_f, NULL, &err_val);
  if(eigval_stream==NULL) {
    fprintf(stderr, "failed to open the eigvalues stream (file %s): err was %s\n", eigval_file, err_val->message);
    return NULL;
  }
  GList *eigval_titles = g_list_append(NULL, "num");
  eigval_titles = g_list_append(eigval_titles, "value");
  GList *eigvals = read_titled_whitespaced_data(G_INPUT_STREAM(eigval_stream), &err_val, &eigval_titles, '!', DOUBLE_TYPE);
  /*Re-purpose the list so that it's a list of values.*/
  GList *l;
  GHashTable *t;
  double *v;
  for(l=g_list_first(eigvals); l != NULL; l = g_list_next(l)) {
    t = l->data;
    fprintf(stderr, " key=%g value=%g\n", *((double*)g_hash_table_lookup(t, "num")), *((double*)g_hash_table_lookup(t, "value")));
    v = g_hash_table_lookup(t, "value");
    l->data = malloc(sizeof(double));
    *(double*)(l->data) = *(double*)v;
    g_hash_table_unref(t);
  }
  /*Free our datastructures.*/
  g_list_free(eigval_titles);
  g_object_unref(kpdir);
  g_object_unref(eigval_f);
  g_object_unref(eigval_stream);
  return eigvals;
}

Here is the call graph for this function:

int read_nextnano_8x8kp_get_eigvals_filename ( char *  buffer,
int  bufflen,
int  bands,
int  electron,
int  qcluster,
int  kpar,
int  neumann 
)

Definition at line 32 of file read_nextnano_8x8kp_output.c.

Referenced by read_nextnano_8x8kp_get_eigvals().

                                                                                                                                      {
  return snprintf(buffer, bufflen, "kp_%dx%deigenvalues_qc%03d_%s_kpar%04d_1D_%s.dat", bands, bands, qcluster, (electron?"el":"hl"), kpar, (neumann?"neu":"dir"));
}

Here is the caller graph for this function:

int read_nextnano_8x8kp_get_filename ( char *  buffer,
int  bufflen,
int  bands,
int  electron,
int  qcluster,
int  eignum,
int  kpar,
int  kz,
int  neumann,
int  wavefunc 
)

Definition at line 28 of file read_nextnano_8x8kp_output.c.

Referenced by read_nextnano_8x8kp_get_eigfunc().

                                                                                                                                                                {
  return snprintf(buffer, bufflen, "kp_%dx%d_%s1D_qc%03d_%s%03d_kpar%04d_Kz%03d_%s.dat", bands, bands, (electron?"el":"hl"), qcluster, (wavefunc?"wv":"ev"), eignum, kpar, kz, (neumann?"neu":"dir"));
}

Here is the caller graph for this function:

 All Classes Files Functions Variables Enumerations Enumerator Defines