/*
* This file is part of the GROMACS molecular simulation package.
*
- * Copyright (c) 2013, by the GROMACS development team, led by
+ * Copyright (c) 2013,2014, by the GROMACS development team, led by
* Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
* and including many others, as listed in the AUTHORS file in the
* top-level source directory and at http://www.gromacs.org.
#ifndef GMX_FILEIO_MDOUTF_H
#define GMX_FILEIO_MDOUTF_H
-#include "filenm.h"
#include <stdio.h>
-#include "../legacyheaders/types/simple.h"
-#include "enxio.h"
-#include "gmxfio.h"
-
-typedef struct {
- t_fileio *fp_trn;
- t_fileio *fp_xtc;
- int xtc_prec;
- ener_file_t fp_ene;
- const char *fn_cpt;
- gmx_bool bKeepAndNumCPT;
- int eIntegrator;
- gmx_bool bExpanded;
- int elamstats;
- int simulation_part;
- FILE *fp_dhdl;
- FILE *fp_field;
-} gmx_mdoutf_t;
-
-gmx_mdoutf_t *init_mdoutf(int nfile, const t_filenm fnm[],
- int mdrun_flags,
- const t_commrec *cr, const t_inputrec *ir,
- const output_env_t oenv);
-/* Returns a pointer to a data structure with all output file pointers
+
+#include "gromacs/fileio/enxio.h"
+#include "gromacs/fileio/filenm.h"
+#include "gromacs/legacyheaders/network.h"
+#include "gromacs/legacyheaders/types/inputrec.h"
+#include "gromacs/legacyheaders/types/oenv.h"
+#include "gromacs/math/vectypes.h"
+#include "gromacs/timing/wallcycle.h"
+#include "gromacs/utility/basedefinitions.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct gmx_mtop_t;
+
+typedef struct gmx_mdoutf *gmx_mdoutf_t;
+
+/*! \brief Allocate and initialize object to manager trajectory writing output
+ *
+ * Returns a pointer to a data structure with all output file pointers
* and names required by mdrun.
*/
+gmx_mdoutf_t init_mdoutf(FILE *fplog,
+ int nfile,
+ const t_filenm fnm[],
+ int mdrun_flags,
+ const t_commrec *cr,
+ const t_inputrec *ir,
+ struct gmx_mtop_t *mtop,
+ const output_env_t oenv,
+ gmx_wallcycle_t wcycle);
+
+/*! \brief Getter for file pointer */
+FILE *mdoutf_get_fp_field(gmx_mdoutf_t of);
+
+/*! \brief Getter for file pointer */
+ener_file_t mdoutf_get_fp_ene(gmx_mdoutf_t of);
+
+/*! \brief Getter for file pointer */
+FILE *mdoutf_get_fp_dhdl(gmx_mdoutf_t of);
+
+/*! \brief Getter for wallcycle timer */
+gmx_wallcycle_t mdoutf_get_wcycle(gmx_mdoutf_t of);
+
+/*! \brief Close TNG files if they are open.
+ *
+ * This also measures the time it takes to close the TNG
+ * files.
+ */
+void mdoutf_tng_close(gmx_mdoutf_t of);
+
+/*! \brief Close all open output files and free the of pointer */
+void done_mdoutf(gmx_mdoutf_t of);
+
+/*! \brief Routine that writes trajectory-like frames.
+ *
+ * Writes data to trn, xtc and/or checkpoint. What is written is
+ * determined by the mdof_flags defined below. Data is collected to
+ * the master node only when necessary.
+ */
+void mdoutf_write_to_trajectory_files(FILE *fplog, t_commrec *cr,
+ gmx_mdoutf_t of,
+ int mdof_flags,
+ struct gmx_mtop_t *top_global,
+ gmx_int64_t step, double t,
+ t_state *state_local, t_state *state_global,
+ rvec *f_local, rvec *f_global);
-void done_mdoutf(gmx_mdoutf_t *of);
-/* Close all open output files and free the of pointer */
+#define MDOF_X (1<<0)
+#define MDOF_V (1<<1)
+#define MDOF_F (1<<2)
+#define MDOF_X_COMPRESSED (1<<3)
+#define MDOF_CPT (1<<4)
+#define MDOF_IMD (1<<5)
-#define MDOF_X (1<<0)
-#define MDOF_V (1<<1)
-#define MDOF_F (1<<2)
-#define MDOF_XTC (1<<3)
-#define MDOF_CPT (1<<4)
+#ifdef __cplusplus
+}
+#endif
#endif /* GMX_FILEIO_MDOUTF_H */