1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv! 2 ! ! 3 ! Module name: WRITE_SPX0(L, unit_add) ! 4 ! Author: P. Nicoletti Date: 13-DEC-91 ! 5 ! ! 6 ! Purpose: Write out the initial single percision data files. ! 7 ! ! 8 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^! 9 SUBROUTINE WRITE_SPX0(L, UNIT_ADD) 10 11 ! Global Variables: 12 !---------------------------------------------------------------------// 13 ! User defined run_name 14 use run, only: RUN_NAME 15 ! Calendar information for start of run. 16 use run, only: ID_MONTH, ID_DAY, ID_YEAR 17 ! Time information for start of run. 18 use run, only: ID_HOUR, ID_MINUTE, ID_SECOND 19 ! Base file unit for SPx files. 20 use funits, only: UNIT_SPX 21 ! Flag: Use distributed I/O 22 USE cdist, only: bDIST_IO 23 ! Rank of current process. 24 use compar, only: myPE 25 ! Rank assigned to serial I/O 26 use compar, only: PE_IO 27 28 IMPLICIT NONE 29 30 ! Passed Variables: 31 !----------------------------------------------------------------------! 32 ! Index of SPx file. 33 INTEGER, INTENT(IN) :: L 34 ! Offset for use in post_mfix 35 INTEGER, INTENT(IN) :: UNIT_ADD 36 37 ! Local Variables: 38 !----------------------------------------------------------------------! 39 ! File version ID 40 CHARACTER(LEN=512) :: VERSION 41 ! UNIT_SPX + offset from post_mfix 42 INTEGER :: USPX 43 ! Generic SPx end characters. 44 CHARACTER(len=15), PARAMETER :: EXT_END = '123456789ABCDEF' 45 46 !......................................................................! 47 48 ! Serial I/O: only PE_IO writes to a single file [default] 49 ! Distributed I/O: all ranks write their own output file. 50 IF(myPE /= PE_IO .AND. .NOT.bDIST_IO) RETURN 51 52 ! Construct the file version string. 53 VERSION = 'SPx = 02.00' 54 WRITE(VERSION(3:3),"(A1)") EXT_END(L:L) 55 56 ! Calculate the SPx file unit 57 USPX = UNIT_SPX + UNIT_ADD + L 58 59 ! Write the SPx file header. 60 WRITE(USPX, REC=1) VERSION 61 WRITE(USPX, REC=2) RUN_NAME, ID_MONTH, ID_DAY, ID_YEAR, & 62 ID_HOUR, ID_MINUTE, ID_SECOND 63 64 ! The first field contains the pointer to the next record. 65 ! The second field contains the number of records written each time step 66 ! (The 4 and -1 are overwritten in WRITE_SPX1) 67 WRITE (USPX, REC=3) 4, -1 68 69 IF(UNIT_ADD == 0) FLUSH(USPX) 70 71 RETURN 72 END SUBROUTINE WRITE_SPX0 73