/*@@ @routine Write.c @date 18th September 1999 @author Gabrielle Allen @desc Writes scalar grid variable data. @enddesc @calls @calledby @history @hauthor @hdate @hdesc @hendhistory @@*/ #include #include #include "cctk.h" #include "cctk_Parameters.h" #include "iobasicGH.h" void IOBasic_Write (cGH *GH, int index, const char *alias) { DECLARE_CCTK_PARAMETERS char *openmode; FILE *file; CCTK_REAL *data_real; CCTK_INT *data_int; /* first, check if variable has storage assigned */ if (! CCTK_QueryGroupStorageI (GH, CCTK_GroupIndexFromVarI (index))) { char *msg, *fullname; fullname = CCTK_FullName (index); msg = (char *) malloc (200 * sizeof (char) + strlen (fullname)); sprintf (msg, "No scalar output for '%s' (no storage)", fullname); CCTK_WARN (2, msg); free (fullname); free (msg); return; } /* Open the file (we write only on proc0) */ if (CCTK_MyProc (GH) == 0) { char *fname; iobasicGH *myGH; myGH = (iobasicGH *) GH->extensions [CCTK_GHExtensionHandle ("IOBasic")]; fname = (char *) malloc (strlen (myGH->outdirScalar) + strlen (alias) + 5); sprintf (fname, "%s/%s.tl", myGH->outdirScalar, alias); /* see if output files for this alias name were already created */ if (GetNamedData (myGH->filenameListScalar, fname) == NULL) openmode = "w"; else openmode = "a"; file = fopen(fname,openmode); if (file == NULL) { char *msg = (char *) malloc (100 + strlen (fname)); sprintf (msg, "Could not open output file '%s'", fname); CCTK_WARN (3, msg); free (msg); free (fname); return; } if (*openmode == 'w') { char title_start_char; if (CCTK_Equals(outScalar_style,"gnuplot")) title_start_char = '#'; else title_start_char = 34; /* this is for xgraph */ fprintf (file,"%c%s v time\n",title_start_char,alias); /* just store a non-NULL pointer in database */ StoreNamedData (&myGH->filenameListScalar, fname, (void *) 1); } switch (CCTK_VarTypeI(index)) { case CCTK_VARIABLE_REAL: data_real = ((CCTK_REAL ***) GH->data) [index][0]; fprintf(file,"%f %25.13f\n",GH->cctk_time,*data_real); break; case CCTK_VARIABLE_INT: data_int = ((CCTK_INT ***) GH->data) [index][0]; fprintf(file,"%f %d\n",GH->cctk_time,*data_int); break; default: CCTK_WARN (3, "Unsupported data type"); break; } fclose(file); free (fname); } }