MFIX  2016-1
output_manager.f
Go to the documentation of this file.
1 MODULE output_man
2  CONTAINS
3 !----------------------------------------------------------------------!
4 ! !
5 ! Subroutine: OUTPUT_MANAGER !
6 ! Author: J.Musser Date: !
7 ! !
8 ! Purpose: Relocate calls to write output files (RES, SPx, VTP). This !
9 ! was done to simplify the time_march code. !
10 ! !
11 !----------------------------------------------------------------------!
12  SUBROUTINE output_manager(EXIT_SIGNAL, FINISHED)
13 
14 ! Global Variables:
15 !---------------------------------------------------------------------//
16 
17  use compar, only: mype, pe_io
18  use discretelement, only: discrete_element
19  use machine, only: wall_time
20  use output, only: disk, disk_tot
21  use output, only: out_time, out_dt
23  use output, only: res_time, res_dt
24  use output, only: spx_time, spx_dt
25  use output, only: usr_time, usr_dt
26  use param, only: dimension_usr
27  use param1, only: n_spx
28  use qmom_kinetic_equation, only: qmomk
29  use run, only: time, dt, tstop, steady_state
30  use time_cpu, only: cpu_io
31  use vtk, only: vtk_time, vtk_dt
32  use vtk, only: dimension_vtk
33  use vtk, only: write_vtk_files
34  use vtp, only: write_vtp_file
35 
36  IMPLICIT NONE
37 
38 ! Dummy Arguments:
39 !---------------------------------------------------------------------//
40 ! Flag that the the user specified batch time (plus buffer) is met.
41  LOGICAL, INTENT(IN) :: EXIT_SIGNAL
42 ! Flag that a steady state case is completed.
43  LOGICAL, INTENT(IN) :: FINISHED
44 
45 ! Local Variables:
46 !---------------------------------------------------------------------//
47 ! Loop counter and counter
48  INTEGER :: LC, IDX
49 ! Flag to write NetCDF output
50  LOGICAL :: bWRITE_NETCDF_FILES
51 ! Flag that the header (time) has not be written.
52  LOGICAL :: HDR_MSG
53 ! SPX file extensions.
54  CHARACTER(LEN=35) :: EXT_END
55 ! Wall time at the start of IO operations.
56  DOUBLE PRECISION :: WALL_START
57 
58 !......................................................................!
59 
60 ! Initialize the SPx file extension array.
61  ext_end = '123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
62 ! Initial the header flag.
63  hdr_msg = .true.
64 
65 ! Get the current time before any IO operations begin
66  wall_start = wall_time()
67 
68 ! Create a backup copy of the RES file.
69  IF(time+0.1d0*dt>=res_backup_time) THEN
70  res_backup_time = next_time(res_backup_dt)
71  CALL backup_res
72  ENDIF
73 
74 ! Write restart file, if needed
75  IF(check_time(res_time) .OR. exit_signal) THEN
76 
77  res_time = next_time(res_dt)
78  CALL write_res1
79  CALL notify_user('.RES;')
80 
81  IF(discrete_element) THEN
82  CALL write_res0_des
83  CALL notify_user('DES.RES;')
84  ENDIF
85 
86  IF(qmomk) THEN
88  CALL notify_user('QMOMK.RES;')
89  ENDIF
90 
91  ENDIF
92 
93 ! Write SPx files, if needed
94  idx = 0
95  bwrite_netcdf_files = .false.
96 
97  DO lc=1, n_spx
98  IF(check_time(spx_time(lc))) THEN
99  spx_time(lc) = next_time(spx_dt(lc))
100 
101  CALL write_spx1(lc, 0)
102  CALL notify_user('SPx:',ext_end(lc:lc))
103 
104  disk_tot = disk_tot + disk(lc)
105  idx = idx + 1
106 
107  bwrite_netcdf_files = .true.
108  ENDIF
109  ENDDO
110  IF(idx /=0) CALL flush_list
111 
112 
113 ! Write standard output, if needed
114  IF(check_time(out_time)) THEN
115  out_time = next_time(out_dt)
116  CALL write_out1
117  CALL notify_user('.OUT;')
118  ENDIF
119 
120 ! Write special output, if needed
121  idx = 0
122  DO lc = 1, dimension_usr
123  IF(check_time(usr_time(lc))) THEN
124  usr_time(lc) = next_time(usr_dt(lc))
125  CALL write_usr1 (lc)
126  CALL notify_user('.USR:',ext_end(lc:lc))
127  idx = idx + 1
128  ENDIF
129  ENDDO
130  IF(idx /=0) CALL flush_list
131 
132  CALL flush_notify_user
133 
134 ! Write vtk file, if needed
135 ! Only regular (not debug) files are written (second argument is zero)
136  IF(write_vtk_files) THEN
137  DO lc = 1, dimension_vtk
138  IF(check_time(vtk_time(lc))) THEN
139  vtk_time(lc) = next_time(vtk_dt(lc))
140  CALL write_vtu_file(lc,0)
141  IF(discrete_element) CALL write_vtp_file(lc,0)
142  ENDIF
143  ENDDO
144  ENDIF
145 
146 ! Write NetCDF files.
147  IF(bwrite_netcdf_files) CALL write_netcdf(0,0,time)
148 
149 ! Add the amount of time needed for all IO operations to total.
150  cpu_io = cpu_io + (wall_time() - wall_start)
151 
152  RETURN
153 
154  contains
155 
156 !----------------------------------------------------------------------!
157 ! !
158 !----------------------------------------------------------------------!
159  LOGICAL FUNCTION check_time(lTIME)
161  DOUBLE PRECISION, INTENT(IN) :: lTIME
162 
163  IF(steady_state) THEN
164  check_time = finished
165  ELSE
166  check_time = (time+0.1d0*dt>=ltime).OR.(time+0.1d0*dt>=tstop)
167  ENDIF
168 
169  RETURN
170  END FUNCTION check_time
171 
172 !----------------------------------------------------------------------!
173 ! !
174 !----------------------------------------------------------------------!
175  DOUBLE PRECISION FUNCTION next_time(lWRITE_DT)
177  DOUBLE PRECISION, INTENT(IN) :: lWRITE_DT
178 
179  IF (.NOT.steady_state) THEN
180  next_time = (int((time + 0.1d0*dt)/lwrite_dt)+1)*lwrite_dt
181  ELSE
182  next_time = lwrite_dt
183  ENDIF
184 
185  RETURN
186  END FUNCTION next_time
187 
188 !----------------------------------------------------------------------!
189 ! !
190 !----------------------------------------------------------------------!
191  SUBROUTINE notify_user(MSG, EXT)
193  use output, only: full_log
194  use funits, only: dmp_log
195  use funits, only: unit_log
196 
197  CHARACTER(len=*), INTENT(IN) :: MSG
198  CHARACTER(len=*), INTENT(IN), OPTIONAL :: EXT
199 
200 
201  LOGICAL :: SCR_LOG
202 
203  scr_log = (full_log .and. mype.eq.pe_io)
204 
205  IF(hdr_msg) THEN
206  IF(dmp_log) WRITE(unit_log, 1000, advance='NO') time
207  IF(scr_log) WRITE(*, 1000, advance='NO') time
208  hdr_msg = .false.
209  ENDIF
210 
211  1000 FORMAT(' ',/' t=',f12.6,' Wrote')
212 
213  IF(.NOT.present(ext)) THEN
214  IF(dmp_log) WRITE(unit_log, 1100, advance='NO') msg
215  IF(scr_log) WRITE(*, 1100, advance='NO') msg
216  ELSE
217  IF(idx == 0) THEN
218  IF(dmp_log) WRITE(unit_log, 1110, advance='NO') msg, ext
219  IF(scr_log) WRITE(*, 1110, advance='NO') msg, ext
220  ELSE
221  IF(dmp_log) WRITE(unit_log, 1120, advance='NO') ext
222  IF(scr_log) WRITE(*, 1120, advance='NO') ext
223  ENDIF
224  ENDIF
225 
226  1100 FORMAT(1x,a)
227  1110 FORMAT(1x,a,1x,a)
228  1120 FORMAT(',',a)
229 
230  RETURN
231  END SUBROUTINE notify_user
232 
233 !----------------------------------------------------------------------!
234 ! !
235 !----------------------------------------------------------------------!
236  SUBROUTINE flush_list
238  use output, only: full_log
239  use funits, only: dmp_log
240  use funits, only: unit_log
241 
242  LOGICAL :: SCR_LOG
243 
244  scr_log = (full_log .and. mype.eq.pe_io)
245 
246  IF(dmp_log) WRITE(unit_log,1000, advance='NO')
247  IF(scr_log) WRITE(*,1000, advance='NO')
248 
249  1000 FORMAT(';')
250 
251  RETURN
252  END SUBROUTINE flush_list
253 
254 
255 !----------------------------------------------------------------------!
256 ! !
257 !----------------------------------------------------------------------!
258  SUBROUTINE flush_notify_user
260  use discretelement, only: discrete_element, des_continuum_coupled
261  use discretelement, only: dtsolid
262  use error_manager
263  use funits, only: dmp_log
264  use funits, only: unit_log
265  use machine, only: wall_time
266  use run, only: get_tunit
267  use output, only: full_log
268  use output, only: nlog
269  use run, only: time, nstep, steady_state
270  use time_cpu, only: time_start
271  use time_cpu, only: wall_start
272 
273  DOUBLE PRECISION :: WALL_ELAP, WALL_LEFT, WALL_NOW
274  CHARACTER(LEN=9) :: CHAR_ELAP, CHAR_LEFT
275  CHARACTER(LEN=4) :: UNIT_ELAP, UNIT_LEFT
276 
277  INTEGER :: TNITS
278  LOGICAL :: SCR_LOG
279 
280  scr_log = (full_log .and. mype.eq.pe_io)
281 
282  IF(.NOT.hdr_msg) THEN
283  IF(dmp_log) WRITE(unit_log,1000)
284  IF(scr_log) WRITE(*,1000)
285  ENDIF
286 
287  1000 FORMAT(' ',/' ')
288 
289 ! Write the elapsed time and estimated remaining time
290  IF(mod(nstep,nlog) == 0) THEN
291 
292  IF(discrete_element .AND. .NOT.des_continuum_coupled) THEN
293  tnits = ceiling(real((tstop-time)/dtsolid))
294  WRITE(err_msg, 1100) time, dtsolid, trim(ival(tnits))
295  CALL flush_err_msg(header=.false., footer=.false., log=.false.)
296  ENDIF
297  1100 FORMAT(/'Time: ',g12.5,3x,'DT: ',g12.5,3x,'Remaining DEM NITs: ',a)
298 
299  wall_now = wall_time()
300 ! Calculate the elapsed wall time.
301  wall_elap = wall_now - wall_start
302  CALL get_tunit(wall_elap, unit_elap)
303  char_elap=''; WRITE(char_elap,"(F9.2)") wall_elap
304  char_elap = trim(adjustl(char_elap))
305 ! Estimate the remaining wall time.
306  wall_left = (wall_now-wall_start)*(tstop-time)/ &
307  max(time-time_start,1.0d-6)
308  CALL get_tunit(wall_left, unit_left)
309 
310  IF (.NOT.steady_state) THEN
311  char_left=''; WRITE(char_left,"(F9.2)") wall_left
312  char_left = trim(adjustl(char_left))
313  ELSE
314  char_left = '0.0'
315  unit_left = 's'
316  ENDIF
317 
318 ! Notify the user of usage/remaining wall times.
319  WRITE(err_msg,2000) &
320  'Elapsed:', trim(char_elap), trim(unit_elap), &
321  'Est. Remaining:',trim(char_left), trim(unit_left)
322  CALL flush_err_msg(header=.false., footer=.false.)
323  ENDIF
324 
325  2000 FORMAT('Wall Time - ',2(a,1x,a,a,4x))
326 
327  RETURN
328  END SUBROUTINE flush_notify_user
329 
330  END SUBROUTINE output_manager
331 
332 !----------------------------------------------------------------------!
333 ! Subroutine: INIT_OUTPUT_VARS !
334 ! Purpose: Initialize variables used for controling ouputs of the !
335 ! various files. !
336 !----------------------------------------------------------------------!
337  SUBROUTINE init_output_vars
339  use geometry, only: ijkmax2
340  use machine, only: wall_time
341  use output, only: disk, disk_tot
342  use output, only: onemeg
343  use output, only: out_time, out_dt
344  use output, only: res_time, res_dt
345  use output, only: spx_time, spx_dt
346  use output, only: usr_time, usr_dt
348  use output, only: res_backups
349  use param, only: dimension_usr
350  use param1, only: n_spx
351  use param1, only: undefined
352  use param1, only: zero
353  use physprop, only: mmax, nmax
354  use run, only: k_epsilon
355  use run, only: run_type
356  use run, only: time, dt, steady_state
357  use rxns, only: nrr
358  use scalars, only: nscalar
359  use time_cpu, only: cpu_io
360  use time_cpu, only: time_start
361  use time_cpu, only: wall_start
362  use vtk, only: vtk_time, vtk_dt
363  use vtk, only: dimension_vtk
364  use vtk, only: dimension_vtk
365  use vtk, only: vtk_time, vtk_dt
366  use vtk, only: write_vtk_files
367 
368  use param1, only: undefined_i
369 
370  use funits, only: create_dir
371 
372  IMPLICIT NONE
373 
374 ! Disk space needed for one variable and each SPX file
375  DOUBLE PRECISION :: DISK_ONE
376 
377 ! Loop counter
378  INTEGER :: LC
379 
380 ! Initialize times for writing outputs
381  out_time = merge(time, undefined, out_dt /= undefined)
382 
383 ! Initialize the amount of time spent on IO
384  cpu_io = 0.0d0
385 
386 ! Initialize disk space calculations
387  disk_tot = zero
388  disk_one = 4.0*ijkmax2/onemeg
389 
390  disk(1) = 1.0*disk_one ! EPg
391  disk(2) = 2.0*disk_one ! Pg, Ps
392  disk(3) = 3.0*disk_one ! Ug, Vg, Wg
393  disk(4) = 3.0*disk_one*mmax ! Us, Vs, Ws
394  disk(5) = 1.0*disk_one*mmax ! ROPs
395  disk(6) = 1.0*disk_one*(mmax+1) ! Tg, Ts
396  disk(7) = 1.0*disk_one*(sum(nmax(0:mmax))) ! Xg, Xs
397  disk(8) = 1.0*disk_one*mmax ! Theta
398  disk(9) = 1.0*disk_one*nscalar ! User Scalars
399  disk(10) = nrr*disk_one ! ReactionRates
400  disk(11) = merge(2.0*disk_one, zero, k_epsilon) ! K-Epsilon
401 
402 
403 ! Initizle RES and SPX_TIME
404  IF (run_type == 'NEW') THEN
405  res_time = time
406  spx_time(:n_spx) = time
407  ELSE
408  IF (.NOT. steady_state) THEN
409  res_time = res_dt * &
410  (int((time + 0.1d0*dt)/res_dt) + 1)
411  spx_time(:n_spx) = spx_dt(:n_spx) * &
412  (int((time + 0.1d0*dt)/spx_dt(:n_spx)) + 1)
413  ENDIF
414  ENDIF
415 
416 ! Initizle RES_BACKUP_TIME
417  res_backup_time = undefined
418  IF(res_backup_dt /= undefined) res_backup_time = &
419  res_backup_dt * (int((time+0.1d0*dt)/res_backup_dt)+1)
420 
421 ! Initialize USR_TIME
422  DO lc = 1, dimension_usr
423  usr_time(lc) = undefined
424  IF (usr_dt(lc) /= undefined) THEN
425  IF (run_type == 'NEW') THEN
426  usr_time(lc) = time
427  ELSE
428  usr_time(lc) = usr_dt(lc) * &
429  (int((time+0.1d0*dt)/usr_dt(lc))+1)
430  ENDIF
431  ENDIF
432  ENDDO
433 
434 ! Initialize VTK_TIME
435 
436  IF(write_vtk_files) THEN
437  DO lc = 1, dimension_vtk
438  vtk_time(lc) = undefined
439  IF (vtk_dt(lc) /= undefined) THEN
440  IF (run_type == 'NEW'.OR.run_type=='RESTART_2') THEN
441  vtk_time(lc) = time
442  ELSE
443  vtk_time(lc) = vtk_dt(lc) * &
444  (int((time + 0.1d0*dt)/vtk_dt(lc))+1)
445  ENDIF
446  ENDIF
447  ENDDO
448  ENDIF
449 
450 ! Create a subdir for RES backup files.
451  IF(res_backups /= undefined_i) CALL create_dir('BACKUP_RES')
452 
454  time_start = time
455 
456  RETURN
457  END SUBROUTINE init_output_vars
458 
459 !----------------------------------------------------------------------!
460 ! Subroutine: BACKUP_RES !
461 ! Purpose: Shift existing RES file backup files by one index, then !
462 ! create a copy of the current RES file. !
463 !----------------------------------------------------------------------!
464  SUBROUTINE backup_res
466  use compar, only: mype, pe_io
467  use output, only: res_backups
468  use discretelement, only: discrete_element
469  use param1, only: undefined_i
470 
471  IMPLICIT NONE
472 
473  CHARACTER(len=256) :: FNAME0, FNAME1
474 
475  INTEGER :: LC
476 
477  IF(mype /= pe_io) RETURN
478  IF(res_backups == undefined_i) RETURN
479 
480 ! Shift all the existing backups by one.
481  DO lc=res_backups,2,-1
482  CALL set_fname(fname0,'.RES', lc-1)
483  CALL set_fname(fname1,'.RES', lc)
484  CALL shift_res(fname0, fname1, 'mv')
485 
486  IF(discrete_element) THEN
487  CALL set_fname(fname0,'_DES.RES', lc-1)
488  CALL set_fname(fname1,'_DES.RES', lc)
489  CALL shift_res(fname0, fname1, 'mv')
490  ENDIF
491  ENDDO
492 
493 ! Copy RES to RES1
494  CALL set_fname(fname0, '.RES')
495  CALL set_fname(fname1, '.RES' ,1)
496  CALL shift_res(fname0, fname1, 'cp')
497 
498  IF(discrete_element) THEN
499  CALL set_fname(fname0, '_DES.RES')
500  CALL set_fname(fname1, '_DES.RES' ,1)
501  CALL shift_res(fname0, fname1, 'cp')
502  ENDIF
503 
504  RETURN
505 
506  contains
507 
508 !----------------------------------------------------------------------!
509 ! Subroutine: SHIFT_RES !
510 ! Purpose: Shift RES(LC-1) to RES(LC) !
511 !----------------------------------------------------------------------!
512  SUBROUTINE shift_res(pFN0, pFN1, ACT)
514  implicit none
515 
516  CHARACTER(LEN=*), INTENT(IN) :: pFN0, pFN1, ACT
517  CHARACTER(len=1024) :: CMD
518  LOGICAL :: EXISTS
519 
520  INQUIRE(file=trim(pfn0),exist=exists)
521  IF(exists) THEN
522  cmd=''; WRITE(cmd,1000)trim(act), trim(pfn0),trim(pfn1)
523  CALL system(trim(cmd))
524  ENDIF
525 
526  1000 FORMAT(a,1x,a,1x,a)
527 
528  RETURN
529  END SUBROUTINE shift_res
530 
531 !----------------------------------------------------------------------!
532 ! Subroutine: SET_FNAME !
533 ! Purpose: Set the backup RES file name based on pINDX. !
534 !----------------------------------------------------------------------!
535  SUBROUTINE set_fname(pFNAME, pEXT, pINDX)
537  use run, only: run_name
538 
539  implicit none
540 
541  CHARACTER(LEN=*), INTENT(OUT) :: pFNAME
542  CHARACTER(LEN=*), INTENT(IN) :: pEXT
543  INTEGER, INTENT(IN), OPTIONAL :: pINDX
544 
545 ! Set the file format for backup copies
546  pfname=''
547  IF(.NOT.PRESENT(pindx)) THEN
548  WRITE(pfname,1000) trim(run_name),pext
549  ELSE
550  IF(res_backups < 10) THEN
551  WRITE(pfname,1001) trim(run_name), pext, pindx
552  ELSEIF(res_backups < 100) THEN
553  WRITE(pfname,1002) trim(run_name), pext, pindx
554  ELSEIF(res_backups < 1000) THEN
555  WRITE(pfname,1003) trim(run_name), pext, pindx
556  ELSEIF(res_backups < 10000) THEN
557  WRITE(pfname,1004) trim(run_name), pext, pindx
558  ELSEIF(res_backups < 10000) THEN
559  WRITE(pfname,1005) trim(run_name), pext, pindx
560  ELSE
561  WRITE(pfname,1006) trim(run_name), pext, pindx
562  ENDIF
563  ENDIF
564 
565  1000 FORMAT(2a)
566  1001 FORMAT('BACKUP_RES/',2a,i1.1)
567  1002 FORMAT('BACKUP_RES/',2a,i2.2)
568  1003 FORMAT('BACKUP_RES/',2a,i3.3)
569  1004 FORMAT('BACKUP_RES/',2a,i4.4)
570  1005 FORMAT('BACKUP_RES/',2a,i5.5)
571  1006 FORMAT('BACKUP_RES/',2a,i6.6)
572 
573  RETURN
574  END SUBROUTINE set_fname
575 
576  END SUBROUTINE backup_res
577 END MODULE output_man
double precision out_dt
Definition: output_mod.f:23
double precision out_time
Definition: output_mod.f:51
logical dmp_log
Definition: funits_mod.f:6
logical steady_state
Definition: run_mod.f:57
subroutine init_output_vars
double precision cpu_io
Definition: time_cpu_mod.f:10
subroutine write_out1
Definition: write_out1.f:25
subroutine output_manager(EXIT_SIGNAL, FINISHED)
subroutine flush_notify_user
subroutine write_spx1(L, unit_add)
Definition: write_spx1.f:26
integer ijkmax2
Definition: geometry_mod.f:80
logical write_vtk_files
Definition: vtk_mod.f:24
logical function check_time(lTIME)
subroutine write_vtp_file(LCV, MODE)
Definition: vtp_mod.f:573
double precision function wall_time()
Definition: machine_mod.f:135
subroutine shift_res(pFN0, pFN1, ACT)
subroutine set_fname(pFNAME, pEXT, pINDX)
Definition: rxns_mod.f:1
character(len=60) run_name
Definition: run_mod.f:24
subroutine write_netcdf(L, unit_add, the_time)
Definition: write_spx1.f:839
double precision dt
Definition: run_mod.f:51
Definition: vtk_mod.f:1
double precision wall_start
Definition: time_cpu_mod.f:19
integer, parameter n_spx
Definition: param1_mod.f:5
logical full_log
Definition: output_mod.f:31
double precision, parameter undefined
Definition: param1_mod.f:18
integer nlog
Definition: output_mod.f:29
double precision, dimension(n_spx) spx_dt
Definition: output_mod.f:21
double precision res_dt
Definition: output_mod.f:15
integer, parameter dimension_usr
Definition: param_mod.f:83
double precision function next_time(lWRITE_DT)
integer pe_io
Definition: compar_mod.f:30
double precision res_time
Definition: output_mod.f:45
double precision res_backup_time
Definition: output_mod.f:47
double precision, parameter onemeg
Definition: output_mod.f:59
integer mmax
Definition: physprop_mod.f:19
double precision, dimension(dimension_vtk) vtk_dt
Definition: vtk_mod.f:89
subroutine write_res1
Definition: write_res1.f:26
subroutine write_usr1(L)
Definition: write_usr1.f:24
subroutine create_dir(PDIR)
Definition: funits_mod.f:81
subroutine notify_user(MSG, EXT)
integer res_backups
Definition: output_mod.f:19
subroutine write_vtu_file(LCV, MODE)
Definition: vtk_out.f:46
double precision tstop
Definition: run_mod.f:48
character(len=16) run_type
Definition: run_mod.f:33
double precision, dimension(n_spx) disk
Definition: output_mod.f:55
subroutine write_res0_des
integer, parameter unit_log
Definition: funits_mod.f:21
Definition: run_mod.f:13
integer nrr
Definition: rxns_mod.f:10
Definition: vtp_mod.f:1
Definition: param_mod.f:2
double precision, dimension(dimension_usr) usr_dt
Definition: output_mod.f:25
integer, dimension(0:dim_m) nmax
Definition: physprop_mod.f:119
logical k_epsilon
Definition: run_mod.f:97
integer mype
Definition: compar_mod.f:24
integer nstep
Definition: run_mod.f:60
double precision, dimension(dimension_usr) usr_time
Definition: output_mod.f:43
double precision, dimension(dimension_vtk) vtk_time
Definition: vtk_mod.f:96
subroutine backup_res
integer, parameter undefined_i
Definition: param1_mod.f:19
character(len=line_length), dimension(line_count) err_msg
integer nscalar
Definition: scalars_mod.f:7
double precision res_backup_dt
Definition: output_mod.f:17
subroutine qmomk_write_restart
integer, parameter dimension_vtk
Definition: vtk_mod.f:81
double precision, dimension(n_spx) spx_time
Definition: output_mod.f:49
double precision time
Definition: run_mod.f:45
double precision time_start
Definition: time_cpu_mod.f:17
double precision disk_tot
Definition: output_mod.f:57
subroutine get_tunit(TLEFT, TUNIT)
Definition: run_mod.f:277
double precision, parameter zero
Definition: param1_mod.f:27
subroutine flush_err_msg(DEBUG, HEADER, FOOTER, ABORT, LOG, CALL_TREE)
subroutine flush_list