Line data Source code
1 : !=======================================================================
2 :
3 : ! Diagnostic information output during run
4 : !
5 : ! author: Tony Craig
6 :
7 : module icedrv_system
8 :
9 : use icedrv_kinds
10 : use icedrv_constants, only: nu_diag
11 : use icedrv_state, only: aice
12 : use icepack_intfc, only: icepack_warnings_flush, icepack_warnings_aborted
13 :
14 : implicit none
15 : private
16 : public :: icedrv_system_abort, &
17 : icedrv_system_flush
18 :
19 : !=======================================================================
20 :
21 : contains
22 :
23 : !=======================================================================
24 : ! prints error information prior to aborting
25 :
26 0 : subroutine icedrv_system_abort(icell, istep, string, file, line)
27 :
28 : integer (kind=int_kind), intent(in), optional :: &
29 : icell , & ! indices of grid cell where model aborts
30 : istep , & ! time step number
31 : line ! line number
32 :
33 : character (len=*), intent(in), optional :: string, file
34 :
35 : ! local variables
36 :
37 : character(len=*), parameter :: subname='(icedrv_system_abort)'
38 :
39 0 : write(nu_diag,*) ' '
40 :
41 0 : call icepack_warnings_flush(nu_diag)
42 :
43 0 : write(nu_diag,*) ' '
44 0 : write(nu_diag,*) subname,' ABORTED: '
45 0 : if (present(file)) write (nu_diag,*) subname,' called from ',trim(file)
46 0 : if (present(line)) write (nu_diag,*) subname,' line number ',line
47 0 : if (present(istep)) write (nu_diag,*) subname,' istep =', istep
48 0 : if (present(icell)) write (nu_diag,*) subname,' i, aice =', icell, aice(icell)
49 0 : if (present(string)) write (nu_diag,*) subname,' string = ',trim(string)
50 0 : call icedrv_system_flush(nu_diag)
51 0 : stop
52 :
53 0 : end subroutine icedrv_system_abort
54 :
55 : !=======================================================================
56 : ! flushes iunit IO buffer
57 :
58 994289 : subroutine icedrv_system_flush(iunit)
59 :
60 : integer (kind=int_kind), intent(in) :: &
61 : iunit ! unit number to flush
62 :
63 : ! local variables
64 :
65 : character(len=*), parameter :: subname='(icedrv_system_flush)'
66 :
67 : #ifndef NO_F2003
68 994289 : flush(iunit)
69 : #endif
70 :
71 994289 : end subroutine icedrv_system_flush
72 :
73 : !=======================================================================
74 :
75 : end module icedrv_system
76 :
77 : !=======================================================================
|