SUBROUTINE control ! Control the run use basic use prec_const IMPLICIT NONE CALL cpu_time(start) !________________________________________________________________________________ ! 1. Prologue ! 1.1 Initialize the parallel environment CALL ppinit IF (my_id .EQ. 0) WRITE(*,'(a/)') 'MPI initialized' CALL daytim('Start at ') ! 1.2 Define data specific to run IF (my_id .EQ. 0) WRITE(*,*) 'Load basic data...' CALL basic_data ! CALL mpi_barrier(MPI_COMM_WORLD, ierr) IF (my_id .EQ. 0) WRITE(*,'(a/)') '...basic data loaded.' ! 1.3 Read input parameters from input file IF (my_id .EQ. 0) WRITE(*,*) 'Read input parameters...' CALL readinputs ! CALL mpi_barrier(MPI_COMM_WORLD, ierr) IF (my_id .EQ. 0) WRITE(*,'(a/)') '...input parameters read' ! 1.4 Set auxiliary values (allocate arrays, set grid, ...) IF (my_id .EQ. 0) WRITE(*,*) 'Calculate auxval...' CALL auxval ! CALL mpi_barrier(MPI_COMM_WORLD, ierr) IF (my_id .EQ. 0) WRITE(*,'(a/)') '...auxval calculated' ! 1.5 Initial conditions IF (my_id .EQ. 0) WRITE(*,*) 'Create initial state...' CALL inital ! CALL mpi_barrier(MPI_COMM_WORLD, ierr) IF (my_id .EQ. 0) WRITE(*,'(a/)') '...initial state created' ! 1.6 Initial diagnostics IF (my_id .EQ. 0) WRITE(*,*) 'Initial diagnostics...' CALL diagnose(0) ! CALL mpi_barrier(MPI_COMM_WORLD, ierr) IF (my_id .EQ. 0) WRITE(*,'(a/)') '...initial diagnostics done' CALL FLUSH(stdout) CALL mpi_barrier(MPI_COMM_WORLD, ierr) !________________________________________________________________________________ IF (my_id .EQ. 0) WRITE(*,*) 'Time integration loop..' !________________________________________________________________________________ ! 2. Main loop DO CALL cpu_time(t0_step) ! Measuring time step = step + 1 cstep = cstep + 1 CALL stepon time = time + dt CALL tesend IF( nlend ) EXIT ! exit do loop CALL diagnose(step) CALL cpu_time(t1_step); tc_step = tc_step + (t1_step - t0_step) END DO IF (my_id .EQ. 0) WRITE(*,'(a/)') '...time integration done' !________________________________________________________________________________ ! 9. Epilogue CALL diagnose(-1) CALL endrun IF (my_id .EQ. 0) CALL daytim('Done at ') CALL ppexit END SUBROUTINE control