source: codes/icosagcm/trunk/src/time.f90 @ 97

Last change on this file since 97 was 97, checked in by ymipsl, 12 years ago

Put conforming IO for dcmip testcase

YM

File size: 2.5 KB
Line 
1MODULE time_mod
2  use prec
3  PRIVATE
4
5  INTEGER,SAVE :: ncid
6  INTEGER,SAVE :: time_counter_id
7  INTEGER,SAVE :: it
8
9  REAL(rstd),SAVE :: dt
10  REAL(rstd),SAVE :: write_period
11  INTEGER,SAVE :: itau_out
12  INTEGER,SAVE :: itaumax
13 
14  PUBLIC create_time_counter_header, update_time_counter, close_time_counter, init_time
15
16
17
18CONTAINS
19 
20  SUBROUTINE init_time
21  USE earth_const
22  USE ioipsl
23  IMPLICIT NONE
24  REAL(rstd) :: run_length
25 
26    dt=90.
27    CALL getin('dt',dt)
28
29    itaumax=100
30    CALL getin('itaumax',itaumax)
31
32    run_length=dt*itaumax
33    CALL getin('run_length',run_length)
34    itaumax=run_length/dt
35    PRINT *,'itaumax=',itaumax
36    dt=dt/scale_factor
37
38    write_period=0
39    CALL getin('write_period',write_period)
40    write_period=write_period/scale_factor
41    itau_out=FLOOR(.5+write_period/dt)
42    PRINT *, 'Output frequency (scaled) set to ',write_period, ' : itau_out = ',itau_out
43   
44    CALL create_time_counter_header
45   
46  END SUBROUTINE init_time
47
48  SUBROUTINE create_time_counter_header
49  USE netcdf_mod
50  USE prec
51  USE ioipsl
52  IMPLICIT NONE
53  INTEGER :: status
54  INTEGER :: timeid, dtid
55  REAL(rstd) :: dt
56  CHARACTER(LEN=255) :: time_frequency
57 
58    status = NF90_CREATE('time_counter.nc', NF90_CLOBBER, ncid)
59    status = NF90_DEF_DIM(ncid,'time_counter',NF90_UNLIMITED,timeid)
60    status = NF90_DEF_VAR(ncid,'time_counter',NF90_DOUBLE,(/ timeid /),time_counter_id)
61    status = NF90_PUT_ATT(ncid,time_counter_id,"long_name","time")
62    status = NF90_PUT_ATT(ncid,time_counter_id,"units","seconds since 2000-01-01 00:00:00")
63    status = NF90_PUT_ATT(ncid,time_counter_id,"calendar","noleap")
64    status = NF90_DEF_VAR(ncid,'mdt',NF90_DOUBLE,varid=dtid)
65
66    WRITE(time_frequency,*) write_period
67    PRINT*,TRIM(time_frequency)
68    status = NF90_PUT_ATT(ncid,NF90_GLOBAL,"time_frequency",TRIM(time_frequency)//"s")
69
70    status = NF90_ENDDEF(ncid) 
71
72    CALL getin("dt",dt)
73    status=NF90_PUT_VAR(ncid,dtid, dt)
74    it=0
75
76  END SUBROUTINE create_time_counter_header
77 
78  SUBROUTINE update_time_counter(time)
79  USE netcdf_mod
80  USE prec
81  IMPLICIT NONE
82  REAL(rstd),INTENT(IN) ::time
83  INTEGER :: status
84  REAL(rstd) ::time_array(1)
85    time_array(1)=time
86 
87    it=it+1
88    status=NF90_PUT_VAR(ncid,time_counter_id,time_array,start=(/ it /),count=(/ 1 /))
89    status=NF90_SYNC(ncid)
90  END SUBROUTINE update_time_counter   
91 
92  SUBROUTINE close_time_counter
93  USE netcdf_mod
94  IMPLICIT NONE
95    INTEGER :: status
96   
97    status=NF90_CLOSE(ncid)
98   
99  END SUBROUTINE  close_time_counter 
100
101END MODULE time_mod
Note: See TracBrowser for help on using the repository browser.