Skip to content

Commit

Permalink
Reading observables works.
Browse files Browse the repository at this point in the history
  • Loading branch information
fweik committed Apr 23, 2015
1 parent 7d66841 commit 094efa6
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 6 deletions.
6 changes: 4 additions & 2 deletions src/core/statistics_observable.cpp
Expand Up @@ -57,10 +57,12 @@ int observable_write(char *filename, observable *self, bool binary) {
FILE *f = fopen(filename, "w");
if(f) {
unsigned int un;
/* For stateless observables only the current value is meaningful. */
if(self->type == OBSERVABLE)
observable_calculate(self);
switch(self->type) {
case AVERAGE:
write_uint(f, &((observable_average_container*)self->container)->n_sweeps, 1, binary);
self = ((observable_average_container*)self->container)->reference_observable;
case OBSERVABLE:
un = self->n;
write_uint(f, &un, 1, binary);
Expand All @@ -82,13 +84,13 @@ int observable_read(char *filename, observable *self, bool binary) {
switch(self->type) {
case AVERAGE:
read_uint(f, &((observable_average_container*)self->container)->n_sweeps, 1, binary);
self = ((observable_average_container*)self->container)->reference_observable;
case OBSERVABLE:
read_uint(f, &un, 1, binary);
if(self->n != (int)(un))
return ES_ERROR;
read_double(f, (double *)self->last_value, self->n, binary);
fclose(f);
return ES_OK;
break;
default:
fclose(f);
Expand Down
19 changes: 15 additions & 4 deletions src/tcl/statistics_observable_tcl.cpp
Expand Up @@ -1307,7 +1307,7 @@ int tclcommand_observable(ClientData data, Tcl_Interp *interp, int argc, char **
//int no;

if (argc<2) {
Tcl_AppendResult(interp, "Usage!!!\n", (char *)NULL);
Tcl_AppendResult(interp, "Usage!\n", (char *)NULL);
return TCL_ERROR;
}

Expand Down Expand Up @@ -1384,10 +1384,16 @@ int tclcommand_observable(ClientData data, Tcl_Interp *interp, int argc, char **
bool binary = false;
if((argc > 4) && ARG_IS_S(4, "binary"))
binary = true;
puts("writing observable");
observable_write(argv[3], observables[n], binary);
return TCL_OK;
}
if (argc > 3 && ARG_IS_S(2, "read_checkpoint")) {
bool binary = false;
if((argc > 4) && ARG_IS_S(4, "binary"))
binary = true;
observable_read(argv[3], observables[n], binary);
return TCL_OK;
}
if (argc > 2 && ARG_IS_S(2,"autoupdate") ) {
if (argc > 3 && ARG_IS_D(3, observables[n]->autoupdate_dt) ) {
if (observables[n]->autoupdate_dt < 1e-5) {
Expand Down Expand Up @@ -1720,11 +1726,16 @@ int tclcommand_parse_radial_profile(Tcl_Interp* interp, int argc, char** argv, i

int tclcommand_observable_print(Tcl_Interp* interp, int argc, char** argv, int* change, observable * obs) {
char buffer[TCL_DOUBLE_SPACE];
if ( observable_calculate(obs) ) {
bool calculate = true;
if((argc > 0) && (ARG0_IS_S("no_calculation"))) {
calculate = false;
argv++;
argc--;
}
if ( calculate && observable_calculate(obs) ) {
Tcl_AppendResult(interp, "\nFailed to compute observable ", obs->obs_name, "\n", (char *)NULL );
return TCL_ERROR;
}
printf("observable type %d\n", obs->type);
if (argc==0) {
for (int i = 0; i<obs->n; i++) {
Tcl_PrintDouble(interp, obs->last_value[i], buffer);
Expand Down

0 comments on commit 094efa6

Please sign in to comment.