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

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

Put time variable : dt, itaumax, write_period, itau_out in the time module

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