mirror of
https://github.com/arcan1s/moldyn.git
synced 2025-07-06 02:25:47 +00:00
211 lines
6.4 KiB
C
211 lines
6.4 KiB
C
/**
|
|
* @file
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
|
|
#include "messages.h"
|
|
|
|
|
|
/**
|
|
* @fn error_checking
|
|
*/
|
|
int error_checking (const float *cell, const int from, const char *input,
|
|
const int num_needed_at, const int *needed_at,
|
|
const char *output, const int to)
|
|
/**
|
|
* @brief function that checks errors in input variables
|
|
* @code
|
|
* error_checking (cell, from, input, num_needed_at, needed_at, output, to);
|
|
* @endcode
|
|
*
|
|
* @param cell massive of cell size
|
|
* @param from first trajectory step
|
|
* @param input input file name
|
|
* @param num_needed_at number of needed atom types
|
|
* @param needed_at massive of number of needed atom types
|
|
* @param output output file name
|
|
* @param to last trajectory step
|
|
*
|
|
* @return 11 - error in 'cell'
|
|
* @return 12 - error in 'input'
|
|
* @return 13 - error in 'output'
|
|
* @return 14 - error in 'from' or 'to'
|
|
* @return 15 - error in 'num_needed_at'
|
|
* @return 16 - error in 'needed_at'
|
|
* @return 0 - exit without errors
|
|
*/
|
|
{
|
|
if ((cell[0] == 0.0) || (cell[1] == 0.0) || (cell[2] == 0.0))
|
|
return 11;
|
|
if (input[0] == '#')
|
|
return 12;
|
|
if (output[0] == '#')
|
|
return 13;
|
|
if ((from == -1) || (to == -1))
|
|
return 14;
|
|
if ((num_needed_at != 2) && (num_needed_at != 6))
|
|
return 15;
|
|
if (num_needed_at == 6)
|
|
if ((needed_at[0] == needed_at[1]) ||
|
|
(needed_at[0] == needed_at[2]) ||
|
|
(needed_at[1] == needed_at[2]) ||
|
|
(needed_at[3] == needed_at[4]) ||
|
|
(needed_at[3] == needed_at[5]) ||
|
|
(needed_at[4] == needed_at[5]))
|
|
return 16;
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
/**
|
|
* @fn print_message
|
|
*/
|
|
int print_message (const int quiet, FILE *std_output, const int log, FILE *f_log,
|
|
const int mode, const char *str)
|
|
/**
|
|
* @brief function that prints message in log and stdout
|
|
* @code
|
|
* print_message (quiet, stdout, log, f_log, 0, str);
|
|
* @endcode
|
|
*
|
|
* @param quiet status of quiet-mode
|
|
* @param std_output stdout
|
|
* @param log status of log-mode
|
|
* @param f_log log file
|
|
* @param mode number of message in "messages.c"
|
|
* @param str additional text in message
|
|
*
|
|
* @return 0 - exit without errors
|
|
*/
|
|
{
|
|
if ((quiet != 1) && (std_output != stderr))
|
|
message (0, mode, str, std_output);
|
|
if (log == 1)
|
|
message (1, mode, str, f_log);
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
/**
|
|
* @fn printing_head
|
|
*/
|
|
int printing_head (const char *output, const int log, const int quiet, const int matrix,
|
|
const char *input, const int from, const int to, const float *cell,
|
|
const int mode, const double r_min, const double r_max,
|
|
const double r_step, const double ang_min, const double ang_max,
|
|
const double ang_step, const int *needed_at)
|
|
/**
|
|
* @brief function that prints header in output file
|
|
* @code
|
|
* printing_head (output, log, quiet, matrix, input, from, to, cell, mode, r_min,
|
|
* r_max, r_step, ang_min, ang_max, ang_step, needed_at);
|
|
* @endcode
|
|
*
|
|
* @param output output file nams
|
|
* @param log status of log-mode
|
|
* @param quiet status of quiet-mode
|
|
* @param matrix status of matrix-mode
|
|
* @param input mask of trajectory files
|
|
* @param from first trajectory step
|
|
* @param to last trajectory step
|
|
* @param cell massive of cell size
|
|
* @param mode 0 - if RDF, 1 - if RDF for center mass, 2 - if RADF
|
|
* @param r_max maximal radius
|
|
* @param r_min minimal radius
|
|
* @param r_step radius step
|
|
* @param ang_max maximal angle for RADF
|
|
* @param ang_min minimal angle for RADF
|
|
* @param ang_step anlge step for RADF
|
|
* @param needed_at massive of number of needed atom types
|
|
*
|
|
* @return 0 - exit without errors
|
|
*/
|
|
{
|
|
FILE *f_out;
|
|
|
|
f_out = fopen (output, "w");
|
|
fprintf (f_out, "radf ::: V.1.0.1 ::: 2013-07-23\n\n");
|
|
fprintf (f_out, "CONFIGURATION\n");
|
|
|
|
fprintf (f_out, "LOG=%i\nQUIET=%i\nMATRIX=%i\n", log, quiet, matrix);
|
|
fprintf (f_out, "MASK=%s\nFIRST=%i\nLAST=%i\n", input, from, to);
|
|
fprintf (f_out, "CELL=%.4f,%.4f,%.4f\n", cell[0], cell[1], cell[2]);
|
|
fprintf (f_out, "MODE=%i\n", mode);
|
|
fprintf (f_out, "R_MIN=%.3f\nR_MAX=%.3f\nR_STEP=%.3f", r_min, r_max, r_step);
|
|
switch (mode)
|
|
{
|
|
case 0:
|
|
fprintf (f_out, "ATOM=%i-%i\n", needed_at[0], needed_at[1]);
|
|
break;
|
|
case 1:
|
|
fprintf (f_out, "ATOM=%i,%i,%i-%i,%i,%i\n", needed_at[0], needed_at[1],
|
|
needed_at[2], needed_at[3], needed_at[4], needed_at[5]);
|
|
break;
|
|
case 2:
|
|
fprintf (f_out, "ANG_MIN=%.2f\nANG_MAX=%.2f\nANG_STEP=%.2f\n\
|
|
ATOM=%i,%i,%i-%i,%i,%i\n",ang_min, ang_max, ang_step, needed_at[0], needed_at[1],
|
|
needed_at[2], needed_at[3], needed_at[4], needed_at[5]);
|
|
break;
|
|
}
|
|
|
|
fprintf (f_out, "END\n\n");
|
|
fclose (f_out);
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
/**
|
|
* @fn set_defaults
|
|
*/
|
|
int set_defaults (float *ang_max, float *ang_min, float *ang_step, float *cell,
|
|
int *from, char *input, int *log, int *matrix, float *r_max,
|
|
float *r_min, float *r_step, char *output, int *to, int *quiet)
|
|
/**
|
|
* @brief function that sets default values of variables
|
|
* @code
|
|
* set_defaults (&ang_max, &ang_min, &ang_step, cell, &from, input, &log, &r_max,
|
|
* &r_min, &r_step, output, &to, &quiet);
|
|
* @endcode
|
|
*
|
|
* @param ang_max maximal angle for RADF
|
|
* @param ang_min minimal angle for RADF
|
|
* @param ang_step angle step
|
|
* @param cell massive of cell size
|
|
* @param from first trajectory step
|
|
* @param input mask of trajectory files
|
|
* @param log status of log-mode
|
|
* @param matrix status of matrix-mode
|
|
* @param r_max maximal radius
|
|
* @param r_min minimal radius
|
|
* @param r_step radius step
|
|
* @param output output file name
|
|
* @param to last trajectory step
|
|
* @param quiet status of quiet-mode
|
|
*
|
|
* @return 0 - exit without errors
|
|
*/
|
|
{
|
|
int i;
|
|
|
|
*ang_max = 90.0;
|
|
*ang_min = 0.0;
|
|
*ang_step = 0.0;
|
|
for (i=0; i<3; i++)
|
|
cell[i] = 0.0;
|
|
*from = -1;
|
|
input[0] = '#';
|
|
*log = 0;
|
|
*matrix = 0;
|
|
*r_max = 15.0;
|
|
*r_min = 2.0;
|
|
*r_step = 0.2;
|
|
output[0] = '#';
|
|
*to = -1;
|
|
*quiet = 0;
|
|
|
|
return 0;
|
|
} |