/* * Cooldt cool-down time calculator for multi-layers pipe * * Copyright 2010, 2013, 2014, Benjamin DEGLO DE BESSES. All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, this list * of conditions and the following disclaimer in the documentation and/or other materials * provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY Benjamin DEGLO DE BESSES "AS IS" AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Benjamin DEGLO DE BESSES OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ #include "cooldt.h" /* * Process one file */ int processOneFile(char * InputFileName) { /* * Test if input file exists */ if ( ! fileExists( InputFileName ) ) { fprintf(stderr, C_ERROR_FILE_NOT_EXISTS, InputFileName ) ; fprintf(stderr, "\n") ; return 1 ; } /* * Create the output file name and open this file */ char OutputFileName[CharBufferSize] ; FileNameDotTxt(InputFileName, OutputFileName) ; FILE *fp = fopen( OutputFileName, "w") ; char ErrorMessage[CharBufferSize] ; WriteShortLicense(fp) ; /* * Read the input data and allocate pointers * Write potentials errors messages to the output file */ PipeProblem* PP = (PipeProblem*)malloc(sizeof(PipeProblem)) ; int NumberOfErrors = ReadData(fp, PP, InputFileName) ; /* * The input file is NOT OK: free and exit */ if ( NumberOfErrors != 0 ) { fclose(fp) ; FreePipeProblem(PP) ; free(PP) ; fprintf(stderr, C_ERROR_INPUTFILE_INVALID_FILE, InputFileName, OutputFileName) ; fprintf(stderr, "\n") ; return 1 ; } WriteInputData(fp, PP) ; /* * Check if input data values are OK * Write potentials errors messages to the output file */ NumberOfErrors = CheckInputData(fp, ErrorMessage, PP) ; /* * The values in the input file are NOT OK */ if ( NumberOfErrors != 0 ) { fclose(fp) ; FreePipeProblem(PP) ; free(PP) ; fprintf(stderr, C_ERROR_INPUTFILE_INVALID_VALUES, InputFileName, OutputFileName) ; fprintf(stderr, "\n") ; return 1 ; } /* * Calculate the time step and cells number to reach the accuracy * write the accuracy control report to OutputStream */ aaControl(fp, PP) ; /* * Calculate the solution then write the results to OutputStream */ fprintf(stdout, "InputFile: %s, OutputFile: %s, CoolDownTime(h): %f\n", InputFileName, OutputFileName, SolutionFullOutput(fp, PP) / 3600.0 ) ; /* * Close the output file, free data structures and pointers */ fclose(fp) ; FreePipeProblem(PP) ; free(PP) ; return 0 ; } /* * main input of cooldt * The Return code of main is the number of errors */ int main(int argc, char *argv[]) { /* * Too few argument */ if ( argc < 2 ) { WriteLicense(stdout) ; WriteHelpMessage(stdout) ; fprintf(stderr, C_ERROR_TOO_FEW_ARGUMENTS) ; fprintf(stderr, "\n") ; return 1 ; } WriteShortLicense(stdout) ; int NumberOfErrors = 0 ; int i ; for ( i = 1 ; i < argc ; i++ ) { NumberOfErrors += processOneFile( argv[i] ) ; } if ( NumberOfErrors != 0 ) { fprintf(stdout, "ERROR %i files contain(s) error(s) or do(es) not exist.\n", NumberOfErrors) ; return 1 ; } return 0 ; } /* End of main.c */