MODULE Initialization_Termination USE Precision USE Error_Handling USE System_Monitors USE Random_Numbers,ONLY:UnpredictableSeeds,RandomSeeds IMPLICIT NONE PUBLIC::StartProgram,EndProgram PRIVATE INTEGER,PUBLIC,SAVE::random_seed=0 NAMELIST/ProgramOptions/max_usable_memory,print_file,log_file,append,log_level,print_level,warning_action,non_critical_actio& &n,random_seed CONTAINS SUBROUTINE StartProgram() IMPLICIT NONE INTEGER,DIMENSION(8)::date_time OPEN(UNIT=program_options_unit,FILE=TRIM(options_file),STATUS="OLD",& ACCESS="SEQUENTIAL",ACTION="READ",DELIM="APOSTROPHE",IOSTAT=error_status) IF(error_status/=0)& CALL CriticalError(message=" Options file "//TRIM(options_file)//& " could not be opened",caller="StartProgram") READ(UNIT=program_options_unit,NML=ProgramOptions,IOSTAT=error_status) IF(error_status/=0)& CALL Warning(message="NAMELIST ProgramOptions was not read successfully"//& " from file "//TRIM(options_file),action="PAUSE",caller="StartProgram") CALL InitializeErrorHandling() CALL CreateMonitors() IF(random_seed==0)THEN CALL UnpredictableSeeds() ELSE CALL RandomSeeds(random_seed) END IF WRITE(UNIT=message_log_unit,FMT="(A)")"________________________________________________" CALL DATE_AND_TIME(VALUES=date_time) WRITE(UNIT=message_log_unit,FMT="(5(A,I2),A,I4)")& "Started program at: ",date_time(5),":",date_time(6),":",date_time(7),& " on ",date_time(3),"/",date_time(2),"/",date_time(1) WRITE(UNIT=message_log_unit,NML=ProgramOptions) END SUBROUTINE StartProgram SUBROUTINE EndProgram() IMPLICIT NONE INTEGER,DIMENSION(8)::date_time CLOSE(UNIT=program_options_unit) CALL DestroyMonitors() CALL MemoryUsage() CALL DATE_AND_TIME(VALUES=date_time) WRITE(UNIT=message_log_unit,FMT="(5(A,I2),A,I4)")& "Ended program at: ",date_time(5),":",date_time(6),":",date_time(7),& " on ",date_time(3),"/",date_time(2),"/",date_time(1) WRITE(UNIT=message_log_unit,FMT="(A)")"________________________________________________" CALL TerminateErrorHandling() END SUBROUTINE EndProgram END MODULE Initialization_Termination