source: LMDZ6/branches/Amaury_dev/libf/dyn3d/dynredem_mod.F90 @ 5080

Last change on this file since 5080 was 5075, checked in by abarral, 2 months ago

[continued & end] replace netcdf by lmdz_netcdf.F90 wrapper
"use netcdf" is now only used in lmdz_netcdf.F90 (except ecrad and obsolete/)
<include "netcdf.inc"> is now likewise only used in lmdz_netcdf.F90.

systematically specify explicitely <USE lmdz_netcdf, ONLY:> (probably left some missing, to correct later on)

Further replacement of nf_put_* by nf90_put_* (same for _get_)

[minor] replace deprecated boolean operators along the way

File size: 7.5 KB
Line 
1MODULE dynredem_mod
2
3  USE lmdz_netcdf, ONLY: nf90_strerror,nf90_noerr,nf90_redef,nf90_put_var,nf90_enddef,nf90_put_att,&
4          nf90_inq_varid,nf90_get_var,nf90_format,nf90_def_var
5  IMPLICIT NONE; PRIVATE
6  PUBLIC :: dynredem_write_u, dynredem_write_v, dynredem_read_u, err
7  PUBLIC :: cre_var, put_var1, put_var2, fil, modname, msg
8  include "dimensions.h"
9  include "paramet.h"
10  CHARACTER(LEN=256), SAVE :: fil, modname
11  INTEGER,            SAVE :: nvarid
12
13
14CONTAINS
15
16
17!===============================================================================
18!
19SUBROUTINE dynredem_write_u(ncid,id,var,ll)
20!
21!===============================================================================
22! Arguments:
23  INTEGER,          INTENT(IN) :: ncid
24  CHARACTER(LEN=*), INTENT(IN) :: id
25  REAL,             INTENT(IN) :: var(iip1,jjp1,ll)
26  INTEGER,          INTENT(IN) :: ll
27!===============================================================================
28! Local variables:
29  INTEGER :: start(4), count(4)
30!===============================================================================
31  start(:)=[1,1,1,1]; count(:)=[iip1,jjp1,ll,1]
32  CALL err(NF90_INQ_VARID(ncid,id,nvarid),"inq",id)
33  CALL err(NF90_PUT_VAR(ncid,nvarid,var,start,count),"put",id)
34 
35END SUBROUTINE dynredem_write_u
36!
37!===============================================================================
38
39
40!===============================================================================
41!
42SUBROUTINE dynredem_write_v(ncid,id,var,ll)
43!
44!===============================================================================
45! Arguments:
46  INTEGER,          INTENT(IN) :: ncid
47  CHARACTER(LEN=*), INTENT(IN) :: id
48  REAL,             INTENT(IN) :: var(iip1,jjm,ll)
49  INTEGER,          INTENT(IN) :: ll
50!===============================================================================
51! Local variables:
52  INTEGER :: start(4), count(4)
53!===============================================================================
54  start(:)=[1,1,1,1]; count(:)=[iip1,jjm,ll,1]
55  CALL err(NF90_INQ_VARID(ncid,id,nvarid),"inq",id)
56  CALL err(NF90_PUT_VAR(ncid,nvarid,var,start,count),"put",id)
57 
58END SUBROUTINE dynredem_write_v
59!
60!===============================================================================
61
62
63!===============================================================================
64!
65SUBROUTINE dynredem_read_u(ncid,id,var,ll)
66!
67!===============================================================================
68! Arguments:
69  INTEGER,          INTENT(IN)  :: ncid
70  CHARACTER(LEN=*), INTENT(IN)  :: id
71  REAL,             INTENT(OUT) :: var(iip1,jjp1,ll)
72  INTEGER,          INTENT(IN)  :: ll
73!===============================================================================
74! Local variables:
75  INTEGER :: start(4), count(4)
76!===============================================================================
77  start(:)=[1,1,1,1]; count(:)=[iip1,jjp1,ll,1]
78  CALL err(NF90_INQ_VARID(ncid,id,nvarid),"inq",id)
79  CALL err(NF90_GET_VAR(ncid,nvarid,var,start,count),"get",id)
80 
81END SUBROUTINE dynredem_read_u   
82!
83!===============================================================================
84
85
86!===============================================================================
87!
88SUBROUTINE cre_var(ncid,var,title,did,units)
89!
90!===============================================================================
91! Arguments:
92  INTEGER,                    INTENT(IN) :: ncid
93  CHARACTER(LEN=*),           INTENT(IN) :: var, title
94  INTEGER,                    INTENT(IN) :: did(:)
95  CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: units
96!===============================================================================
97  CALL err(NF90_DEF_VAR(ncid,var,NF90_FORMAT,did,nvarid),"inq",var)
98  IF(title/="")      CALL err(NF90_PUT_ATT(ncid,nvarid,"title",title),var)
99  IF(PRESENT(units)) CALL err(NF90_PUT_ATT(ncid,nvarid,"units",units),var)
100
101END SUBROUTINE cre_var
102!
103!===============================================================================
104
105
106!===============================================================================
107!
108SUBROUTINE put_var1(ncid,var,title,did,v,units)
109!
110!===============================================================================
111! Arguments:
112  INTEGER,                    INTENT(IN) :: ncid
113  CHARACTER(LEN=*),           INTENT(IN) :: var, title
114  INTEGER,                    INTENT(IN) :: did(1)
115  REAL,                       INTENT(IN) :: v(:)
116  CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: units
117!===============================================================================
118  IF(     PRESENT(units)) CALL cre_var(ncid,var,title,did,units)
119  IF(.NOT.PRESENT(units)) CALL cre_var(ncid,var,title,did)
120  CALL err(NF90_ENDDEF(ncid))
121  CALL err(NF90_PUT_VAR(ncid,nvarid,v),"put",var)
122  CALL err(NF90_REDEF(ncid))
123
124END SUBROUTINE put_var1
125!
126!===============================================================================
127
128
129!===============================================================================
130!
131SUBROUTINE put_var2(ncid,var,title,did,v,units)
132!
133!===============================================================================
134! Arguments:
135  INTEGER,                    INTENT(IN) :: ncid
136  CHARACTER(LEN=*),           INTENT(IN) :: var, title
137  INTEGER,                    INTENT(IN) :: did(2)
138  REAL,                       INTENT(IN) :: v(:,:)
139  CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: units
140!===============================================================================
141  IF(     PRESENT(units)) CALL cre_var(ncid,var,title,did,units)
142  IF(.NOT.PRESENT(units)) CALL cre_var(ncid,var,title,did)
143  CALL err(NF90_ENDDEF(ncid))
144  CALL err(NF90_PUT_VAR(ncid,nvarid,v),"put",var)
145  CALL err(NF90_REDEF(ncid))
146
147END SUBROUTINE put_var2
148!
149!===============================================================================
150
151
152!===============================================================================
153!
154FUNCTION msg(typ,nam)
155!
156!===============================================================================
157! Arguments:
158  CHARACTER(LEN=256)                     :: msg    !--- STANDARDIZED MESSAGE
159  CHARACTER(LEN=*),           INTENT(IN) :: typ    !--- TYPE OF OPERATION
160  CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: nam    !--- FIELD NAME
161!===============================================================================
162  SELECT CASE(typ)
163    CASE('open');  msg="Opening failed for <"//TRIM(fil)//">"
164    CASE('close'); msg="Closing failed for <"//TRIM(fil)//">"
165    CASE('get');   msg="Reading failed for <"//TRIM(nam)//">"
166    CASE('put');   msg="Writting failed for <"//TRIM(nam)//">"
167    CASE('inq');   msg="Missing field <"//TRIM(nam)//">"
168    CASE('fnd');   msg="Found field <"//TRIM(nam)//">"
169  END SELECT
170  msg=TRIM(msg)//" in file <"//TRIM(fil)//">"
171
172END FUNCTION msg
173!
174!===============================================================================
175
176
177!===============================================================================
178!
179SUBROUTINE err(ierr,typ,nam)
180!
181!===============================================================================
182! Arguments:
183  INTEGER,                    INTENT(IN) :: ierr   !--- NetCDF ERROR CODE
184  CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: typ    !--- TYPE OF OPERATION
185  CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: nam    !--- FIELD NAME
186!===============================================================================
187  IF(ierr==NF90_NoERR) RETURN
188  IF(.NOT.PRESENT(typ)) THEN
189    CALL ABORT_gcm(modname,NF90_STRERROR(ierr),ierr)
190  ELSE
191    CALL ABORT_gcm(modname,msg(typ,nam),ierr)
192  END IF
193
194END SUBROUTINE err
195!
196!===============================================================================
197
198END MODULE dynredem_mod   
199   
200   
Note: See TracBrowser for help on using the repository browser.