1 /* -*- mode: c; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; c-file-style: "stroustrup"; -*-
4 * This source code is part of
8 * GROningen MAchine for Chemical Simulations
11 * Written by David van der Spoel, Erik Lindahl, Berk Hess, and others.
12 * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
13 * Copyright (c) 2001-2004, The GROMACS development team,
14 * check out http://www.gromacs.org for more information.
16 * This program is free software; you can redistribute it and/or
17 * modify it under the terms of the GNU General Public License
18 * as published by the Free Software Foundation; either version 2
19 * of the License, or (at your option) any later version.
21 * If you want to redistribute modifications, please consider that
22 * scientific software is very special. Version control is crucial -
23 * bugs must be traceable. We will be happy to consider code for
24 * inclusion in the official distribution, but derived work must not
25 * be called official GROMACS. Details are found in the README & COPYING
26 * files - if they are missing, get the official version at www.gromacs.org.
28 * To help us fund GROMACS development, we humbly ask that you cite
29 * the papers on the package - you can find them in the top README file.
31 * For more info, check our website at http://www.gromacs.org
34 * GROningen Mixture of Alchemy and Childrens' Stories
54 #include "gmx_fatal.h"
57 #include "mtop_util.h"
62 #include "thread_mpi.h"
67 /* The source code in this file should be thread-safe.
68 Please keep it that way. */
70 /******************************************************************
72 * T R A J E C T O R Y S T U F F
74 ******************************************************************/
76 /* read only time names */
77 /* These must correspond to the time units type time_unit_t in statutil.h */
78 static const real timefactors
[] = { 0, 1e3
, 1, 1e-3, 1e-6, 1e-9, 1e-12, 0 };
79 static const real timeinvfactors
[] ={ 0, 1e-3, 1, 1e3
, 1e6
, 1e9
, 1e12
, 0 };
80 static const char *time_units_str
[] = { NULL
, "fs", "ps", "ns", "us",
82 static const char *time_units_xvgr
[] = { NULL
, "fs", "ps", "ns",
87 /***** OUTPUT_ENV MEMBER FUNCTIONS ******/
89 void output_env_init(output_env_t oenv
, int argc
, char *argv
[],
90 time_unit_t tmu
, gmx_bool view
, xvg_format_t xvg_format
,
91 int verbosity
, int debug_level
)
97 oenv
->time_unit
= tmu
;
99 oenv
->xvg_format
= xvg_format
;
100 oenv
->verbosity
=verbosity
;
101 oenv
->debug_level
=debug_level
;
102 oenv
->program_name
=NULL
;
109 /* set program name */
110 /* When you run a dynamically linked program before installing
111 * it, libtool uses wrapper scripts and prefixes the name with "lt-".
112 * Until libtool is fixed to set argv[0] right, rip away the prefix:
116 if(strlen(argvzero
)>3 && !strncmp(argvzero
,"lt-",3))
117 oenv
->program_name
=strdup(argvzero
+3);
119 oenv
->program_name
=strdup(argvzero
);
121 if (oenv
->program_name
== NULL
)
122 oenv
->program_name
= strdup("GROMACS");
124 /* copy command line */
127 cmdlength
= strlen(argvzero
);
128 for (i
=1; i
<argc
; i
++)
130 cmdlength
+= strlen(argv
[i
]);
134 /* Fill the cmdline string */
135 snew(oenv
->cmd_line
,cmdlength
+argc
+1);
138 for (i
=0; i
<argc
; i
++)
140 strcat(oenv
->cmd_line
,argv
[i
]);
141 strcat(oenv
->cmd_line
," ");
147 void output_env_init_default(output_env_t oenv
)
149 output_env_init(oenv
, 0, NULL
, time_ps
, FALSE
, exvgNONE
, 0, 0);
153 void output_env_done(output_env_t oenv
)
155 sfree(oenv
->program_name
);
156 sfree(oenv
->cmd_line
);
162 int output_env_get_verbosity(const output_env_t oenv
)
164 return oenv
->verbosity
;
167 int output_env_get_debug_level(const output_env_t oenv
)
169 return oenv
->debug_level
;
173 const char *output_env_get_time_unit(const output_env_t oenv
)
175 return time_units_str
[oenv
->time_unit
];
178 const char *output_env_get_time_label(const output_env_t oenv
)
183 sprintf(label
,"Time (%s)",time_units_str
[oenv
->time_unit
] ?
184 time_units_str
[oenv
->time_unit
]: "ps");
189 const char *output_env_get_xvgr_tlabel(const output_env_t oenv
)
194 sprintf(label
,"Time (%s)", time_units_xvgr
[oenv
->time_unit
] ?
195 time_units_xvgr
[oenv
->time_unit
] : "ps");
201 real
output_env_get_time_factor(const output_env_t oenv
)
203 return timefactors
[oenv
->time_unit
];
206 real
output_env_get_time_invfactor(const output_env_t oenv
)
208 return timeinvfactors
[oenv
->time_unit
];
211 real
output_env_conv_time(const output_env_t oenv
, real time
)
213 return time
*timefactors
[oenv
->time_unit
];
217 void output_env_conv_times(const output_env_t oenv
, int n
, real
*time
)
220 double fact
=timefactors
[oenv
->time_unit
];
227 gmx_bool
output_env_get_view(const output_env_t oenv
)
232 xvg_format_t
output_env_get_xvg_format(const output_env_t oenv
)
234 return oenv
->xvg_format
;
237 const char *output_env_get_program_name(const output_env_t oenv
)
239 return oenv
->program_name
;
242 const char *output_env_get_short_program_name(const output_env_t oenv
)
245 pr
=ret
=oenv
->program_name
;
246 if ((pr
=strrchr(ret
,DIR_SEPARATOR
)) != NULL
)
248 /* Strip away the libtool prefix if it's still there. */
249 if(strlen(ret
) > 3 && !strncmp(ret
, "lt-", 3))
256 const char *output_env_get_cmd_line(const output_env_t oenv
)
258 return oenv
->cmd_line
;