56 USE modi_ocean_mercatorvergrid
59 USE yomhook
,ONLY : lhook, dr_hook
60 USE parkind1
,ONLY : jprb
62 USE modi_get_type_dim_n
71 TYPE(ocean_t),
INTENT(INOUT) :: o
75 CHARACTER(LEN=6),
INTENT(IN) :: hprogram
84 CHARACTER(LEN=4) :: ylvl
86 CHARACTER(LEN=12) :: yrecfm
87 CHARACTER(LEN=14) :: yform
88 REAL,
DIMENSION(:),
ALLOCATABLE :: zwork
94 REAL(KIND=JPRB) :: zhook_handle
97 IF (lhook) CALL dr_hook(
'READ_OCEAN_N',0,zhook_handle)
102 hprogram,yrecfm,iversion,iresp)
106 IF (iversion<=3)
THEN
111 hprogram,yrecfm,o%LMERCATOR,iresp)
114 IF (.NOT. o%LMERCATOR)
THEN
115 ALLOCATE(o%XSEAT(0,0))
116 ALLOCATE(or%XSEAT_REL(0,0))
117 ALLOCATE(o%XSEAS(0,0))
118 ALLOCATE(or%XSEAS_REL(0,0))
119 ALLOCATE(or%XSEAU_REL(0,0))
120 ALLOCATE(or%XSEAV_REL(0,0))
121 ALLOCATE(o%XSEAU(0,0))
122 ALLOCATE(o%XSEAV(0,0))
123 ALLOCATE(o%XSEAE(0,0))
124 ALLOCATE(o%XSEABATH(0,0))
125 ALLOCATE(o%XSEAHMO(0))
126 ALLOCATE(o%XLE (0,0))
127 ALLOCATE(o%XLK (0,0))
128 ALLOCATE(o%XKMEL (0,0))
129 ALLOCATE(o%XKMELM (0,0))
130 ALLOCATE(o%XSEATEND (0))
131 ALLOCATE(o%XDTFSOL(0,0))
132 ALLOCATE(o%XDTFNSOL(0))
133 IF (lhook) CALL dr_hook(
'READ_OCEAN_N',1,zhook_handle)
141 CALL
read_surf(hprogram,yrecfm,nockmax,iresp)
143 ALLOCATE(xzhoc(nockmin:nockmax))
146 DO jlevel = nockmin+1,nockmax
147 WRITE(ylvl,
'(I4)') jlevel
148 yrecfm=
'LEVL_OC'//adjustl(ylvl(:len_trim(ylvl)))
149 CALL
read_surf(hprogram,yrecfm,xzhoc(jlevel),iresp)
157 hprogram,yrecfm,or%XTAU_REL,iresp)
161 hprogram,yrecfm,or%LREL_CUR,iresp)
165 hprogram,yrecfm,or%LREL_TS,iresp)
166 yrecfm=
'LFLX_NULL_OC'
168 hprogram,yrecfm,or%LFLUX_NULL,iresp)
169 yrecfm=
'LFLX_CORR_OC'
171 hprogram,yrecfm,or%LFLX_CORR,iresp)
174 hprogram,yrecfm,or%XQCORR,iresp)
177 hprogram,yrecfm,or%LDIAPYCNAL,iresp)
191 ALLOCATE(o%XSEAT(ilu,nockmin:nockmax))
193 DO jlevel=nockmin+1,nockmax
194 WRITE(ylvl,
'(I4)') jlevel
195 yrecfm=
'TEMP_OC'//adjustl(ylvl(:len_trim(ylvl)))
197 hprogram,yrecfm,zwork(:),iresp)
198 o%XSEAT(:,jlevel)=zwork(:)
200 o%XSEAT(:,nockmin)=o%XSEAT(:,nockmin+1)
204 ALLOCATE(or%XSEAT_REL(ilu,nockmin:nockmax))
206 DO jlevel=nockmin+1,nockmax
207 WRITE(ylvl,
'(I4)') jlevel
208 yrecfm=
'T_OC_REL'//adjustl(ylvl(:len_trim(ylvl)))
210 hprogram,yrecfm,zwork(:),iresp)
211 or%XSEAT_REL(:,jlevel)=zwork(:)
213 or%XSEAT_REL(:,nockmin)=or%XSEAT_REL(:,nockmin+1)
217 ALLOCATE(o%XSEAS(ilu,nockmin:nockmax))
219 DO jlevel=nockmin+1,nockmax
220 WRITE(ylvl,
'(I4)') jlevel
221 yrecfm=
'SALT_OC'//adjustl(ylvl(:len_trim(ylvl)))
223 hprogram,yrecfm,zwork(:),iresp)
224 o%XSEAS(:,jlevel)=zwork(:)
226 o%XSEAS(:,nockmin)=o%XSEAS(:,nockmin+1)
230 ALLOCATE(or%XSEAS_REL(ilu,nockmin:nockmax))
232 DO jlevel=nockmin+1,nockmax
233 WRITE(ylvl,
'(I4)') jlevel
234 yrecfm=
'S_OC_REL'//adjustl(ylvl(:len_trim(ylvl)))
236 hprogram,yrecfm,zwork(:),iresp)
237 or%XSEAS_REL(:,jlevel)=zwork(:)
239 or%XSEAS_REL(:,nockmin)=or%XSEAS_REL(:,nockmin+1)
243 ALLOCATE(or%XSEAU_REL(ilu,nockmin:nockmax))
244 ALLOCATE(or%XSEAV_REL(ilu,nockmin:nockmax))
246 DO jlevel=nockmin+1,nockmax
247 WRITE(ylvl,
'(I4)') jlevel
248 yrecfm=
'U_OC_REL'//adjustl(ylvl(:len_trim(ylvl)))
250 hprogram,yrecfm,zwork(:),iresp)
251 or%XSEAU_REL(:,jlevel)=zwork(:)
253 or%XSEAU_REL(:,nockmin)=or%XSEAU_REL(:,nockmin+1)
255 DO jlevel=nockmin+1,nockmax
256 WRITE(ylvl,
'(I4)') jlevel
257 yrecfm=
'V_OC_REL'//adjustl(ylvl(:len_trim(ylvl)))
259 hprogram,yrecfm,zwork(:),iresp)
260 or%XSEAV_REL(:,jlevel)=zwork(:)
262 or%XSEAV_REL(:,nockmin)=or%XSEAV_REL(:,nockmin+1)
264 ALLOCATE(o%XSEAU(ilu,nockmin:nockmax))
265 ALLOCATE(o%XSEAV(ilu,nockmin:nockmax))
267 DO jlevel=nockmin+1,nockmax
268 WRITE(ylvl,
'(I4)') jlevel
269 yrecfm=
'UCUR_OC'//adjustl(ylvl(:len_trim(ylvl)))
271 hprogram,yrecfm,zwork(:),iresp)
272 o%XSEAU(:,jlevel)=zwork(:)
274 DO jlevel=nockmin+1,nockmax
275 WRITE(ylvl,
'(I4)') jlevel
276 yrecfm=
'VCUR_OC'//adjustl(ylvl(:len_trim(ylvl)))
278 hprogram,yrecfm,zwork(:),iresp)
279 o%XSEAV(:,jlevel)=zwork(:)
281 o%XSEAU(:,nockmin)=o%XSEAU(:,nockmin+1)
282 o%XSEAV(:,nockmin)=o%XSEAV(:,nockmin+1)
286 ALLOCATE(o%XSEAE(ilu,nockmin:nockmax))
288 DO jlevel=nockmin+1,nockmax
289 WRITE(ylvl,
'(I4)') jlevel
290 yrecfm=
'TKE_OC'//adjustl(ylvl(:len_trim(ylvl)))
292 hprogram,yrecfm,zwork(:),iresp)
293 o%XSEAE(:,jlevel)=zwork(:)
295 o%XSEAE(:,nockmin)=o%XSEAE(:,nockmin+1)
305 ALLOCATE(o%XSEABATH(ilu,nockmin:nockmax))
307 DO jlevel=nockmin+1,nockmax
308 WRITE(ylvl,
'(I4)') jlevel
309 yrecfm=
'SEAINDBATH'//adjustl(ylvl(:len_trim(ylvl)))
311 hprogram,yrecfm,zwork(:),iresp)
312 o%XSEABATH(:,jlevel)=zwork(:)
314 o%XSEABATH(:,nockmin)=1.
319 DO jlevel=nockmin+2,nockmax
320 IF (o%XSEABATH(j,jlevel)==0.)
THEN
321 o%XSEAT(j,jlevel)=o%XSEAT(j,jlevel-1)
322 o%XSEAS(j,jlevel)=o%XSEAS(j,jlevel-1)
323 o%XSEAU(j,jlevel)=o%XSEAU(j,jlevel-1)
324 o%XSEAV(j,jlevel)=o%XSEAV(j,jlevel-1)
325 o%XSEAE(j,jlevel)=o%XSEAE(j,jlevel-1)
327 or%XSEAT_REL(j,jlevel)=or%XSEAT_REL(j,jlevel-1)
328 or%XSEAS_REL(j,jlevel)=or%XSEAS_REL(j,jlevel-1)
329 or%XSEAU_REL(j,jlevel)=or%XSEAU_REL(j,jlevel-1)
330 or%XSEAV_REL(j,jlevel)=or%XSEAV_REL(j,jlevel-1)
337 ALLOCATE(o%XSEAHMO(ilu))
340 hprogram,yrecfm,o%XSEAHMO(:),iresp)
343 ALLOCATE(o%XLE (
SIZE(o%XSEAT,1),nockmin:nockmax))
344 ALLOCATE(o%XLK (
SIZE(o%XSEAT,1),nockmin:nockmax))
345 ALLOCATE(o%XKMEL (
SIZE(o%XSEAT,1),nockmin:nockmax))
346 ALLOCATE(o%XKMELM (
SIZE(o%XSEAT,1),nockmin:nockmax))
350 o%XKMELM(:,:) =xundef
352 ALLOCATE(o%XSEATEND (
SIZE(o%XSEAT,1)))
353 o%XSEATEND(:) =xundef
355 ALLOCATE(o%XDTFSOL(ilu,nockmin:nockmax))
356 ALLOCATE(o%XDTFNSOL(ilu))
358 o%XDTFSOL(:,:) = xundef
359 o%XDTFNSOL(:) = xundef
361 IF (lhook) CALL dr_hook(
'READ_OCEAN_N',1,zhook_handle)
subroutine get_type_dim_n(DTCO, U, HTYPE, KDIM)
subroutine read_ocean_n(DTCO, O, OR, U, HPROGRAM)
subroutine ocean_mercatorvergrid