MsSpec-DFM/New_libraries/DFM_library/INPUT_OUTPUT_LIBRARY/change_filenames.f90

307 lines
9.5 KiB
Fortran

!
!=======================================================================
!
MODULE CHANGE_FILENAMES
!
! This module changes all the output filenames by
! incorporating into them a string characteristic of
! the calculation performed
!
CONTAINS
!
!=======================================================================
!
SUBROUTINE LOGFILE_NAMES(N_IF,LOGFILE)
!
! This subroutine constructs the name of the logfiles when
! several input data file are read in
!
!
! Input parameters:
!
! * N_IF : number of input data file
!
!
! Uutput parameters:
!
! * LOGFILE : array containing the names of the log files
!
!
! Author : D. Sébilleau
!
! Last modified : 8 Sep 2020
!
!
IMPLICIT NONE
!
INTEGER :: N_IF,JF
!
CHARACTER (LEN = 100) :: LOGFILE(999)
CHARACTER (LEN = 7) :: BASENAME
CHARACTER (LEN = 4) :: EXTENSION
CHARACTER (LEN = 1) :: UNDSC
!
BASENAME = 'epsilon' !
EXTENSION = '.lis' !
UNDSC = '_' !
!
IF(N_IF == 1) THEN !
LOGFILE(1) = BASENAME//EXTENSION !
ELSE
DO JF = 1,N_IF !
LOGFILE(JF) = BASENAME//UNDSC//NUM2STRING(JF)//EXTENSION !
END DO !
END IF
!
END SUBROUTINE LOGFILE_NAMES
!
!=======================================================================
!
FUNCTION NUM2STRING(NUM)
!
! This function converts an integer into the corresponding
! character string, including the zeros (e. g. 3 --> 003)
!
! This version: limited to 999
!
!
! Input parameter:
!
! * NUM : number to be transformed into a string
!
!
!
! Author : D. Sébilleau
!
! Last modified : 8 Sep 2020
!
!
IMPLICIT NONE
!
INTEGER, PARAMETER :: N_LE = 3 ! max. number of digits
INTEGER, PARAMETER :: N_IF = 999 ! max. number of input files
!
CHARACTER (LEN = N_LE) :: NUM2STRING
!
INTEGER :: NUM
INTEGER :: JF
INTEGER :: I_D1,I_D2,I_D3
INTEGER :: NNUM
!
! Initialisation of the digits to 0
!
I_D1 = 48
I_D2 = 48
I_D3 = 48
!
DO JF = 1,N_IF ! start loop on files
!
I_D1 = I_D1 + 1 ! incrementation of 1st digit
IF(I_D1 == 58) THEN
I_D1 = 48
I_D2 = I_D2 + 1 ! incrementation of 2nd digit
IF(I_D2 == 58) THEN
I_D2 = 48
I_D3 = I_D3 + 1 ! incrementation of 3rd digit
END IF
END IF
!
NNUM = (I_D3 - 48) * 100 + (I_D2 - 48) * 10 + (I_D1 - 48) ! number generated
!
IF(NUM == NNUM) GO TO 10
!
END DO
!
10 NUM2STRING = CHAR(I_D3)//CHAR(I_D2)//CHAR(I_D1)
!
END FUNCTION NUM2STRING
!
!=======================================================================
!
SUBROUTINE NEW_FILENAMES(N_IF,JF,FLIST)
!
! This subroutine changes all the output filenames by
! incorporating into them a string characteristic of
! the calculation performed
!
!
! Input parameters:
!
! * N_IF : number of input data file
! * J F : current input data file
!
!
! Input/output parameters:
!
! * FLIST : array containing the names of the output files
!
!
! Author : D. Sébilleau
!
! Last modified : 9 Sep 2020
!
!
USE DIMENSION_CODE, ONLY : NOFFN
USE OUT_VALUES_10
USE OUTFILES
!
IMPLICIT NONE
!
INTEGER, INTENT(IN) :: N_IF
INTEGER, INTENT(IN) :: JF
!
INTEGER :: FILE
!
CHARACTER (LEN = 100), INTENT(INOUT) :: FLIST(NOFFN)
!
CHARACTER (LEN = 100) :: CLIST(NOFFN)
CHARACTER (LEN = 100) :: INFILE
CHARACTER (LEN = 100) :: OUTFILE
CHARACTER (LEN = 100) :: STRING
CHARACTER (LEN = 1) :: UNDSC
!
UNDSC = '_' !
!
IF(N_IF == 1) THEN !
!
! Only the type of calculation can be appended
!
IF(I_FN == 1) THEN !
!
CALL CALC_TYPE(CLIST) !
CALL OUT_FILES(FLIST) !
!
DO FILE = 7,NOFFN !
!
INFILE = FLIST(FILE) !
STRING = CLIST(FILE) !
!
CALL CHG_FILENAME(INFILE,STRING,OUTFILE) !
!
FLIST(FILE) = OUTFILE !
!
END DO !
!
ELSE !
!
CALL OUT_FILES(FLIST) !
!
END IF !
!
ELSE !
!
IF(I_FN == 1) THEN !
!
! Type of calculation appended + input data file number appended
!
CALL CALC_TYPE(CLIST) !
CALL OUT_FILES(FLIST) !
!
DO FILE = 7,NOFFN !
!
INFILE = FLIST(FILE) !
!
! Checking if input data file number must ne appended
!
IF(INDEX_FILE(FILE) == 0) THEN !
STRING = CLIST(FILE)//UNDSC//NUM2STRING(JF) !
ELSE !
STRING = CLIST(FILE) !
END IF !
!
CALL CHG_FILENAME(INFILE,STRING,OUTFILE) !
!
FLIST(FILE) = OUTFILE !
!
END DO !
!
ELSE
!
! Only input data file number appended
!
CALL OUT_FILES(FLIST) !
!
DO FILE = 7,NOFFN !
!
INFILE = FLIST(FILE) !
!
! Checking if input data file number must ne appended
!
IF(INDEX_FILE(FILE) == 0) THEN !
STRING = NUM2STRING(JF) !
CALL CHG_FILENAME(INFILE,STRING,OUTFILE) !
FLIST(FILE) = OUTFILE !
END IF !
!
END DO !
!
END IF !
!
END IF !
!
END SUBROUTINE NEW_FILENAMES
!
!=======================================================================
!
SUBROUTINE CHG_FILENAME(INFILE,STRING,OUTFILE)
!
! This subroutine incorporates a given string
! into a filename
!
!
! Input parameters:
!
! * INFILE : name of input file
! * STRING : string to be appended
!
!
! Input/output parameters:
!
! * OUTFILE : name of output file
!
!
! Author : D. Sébilleau
!
! Last modified : 7 Sep 2020
!
!
IMPLICIT NONE
!
INTEGER, PARAMETER :: N_LENGTH = 100
!
CHARACTER (LEN = 100), INTENT(IN) :: INFILE
CHARACTER (LEN = 100), INTENT(OUT) :: OUTFILE
!
CHARACTER (LEN = 100) :: STRING
!
INTEGER :: J_CHAR
INTEGER :: N_DOT,N_CHAR
!
! Finding the real size of the file name
! and the position of the dot
!
N_DOT = 1 !
DO J_CHAR = 1,N_LENGTH !
IF(INFILE(J_CHAR:J_CHAR).EQ.'.') GO TO 10 !
N_DOT = N_DOT + 1 !
END DO !
!
10 CONTINUE !
!
N_CHAR = 0 !
DO J_CHAR = 1,N_LENGTH !
IF(INFILE(J_CHAR:J_CHAR).EQ.' ') GO TO 20 !
N_CHAR = N_CHAR + 1 !
END DO !
!
20 CONTINUE !
!
! Incorporation of the string
!
OUTFILE = INFILE(1:N_DOT-1)//'_'//TRIM(STRING)// & !
INFILE(N_DOT:N_CHAR) !
!
END SUBROUTINE CHG_FILENAME
!
END MODULE CHANGE_FILENAMES