- Timestamp:
- 2017-11-23T16:52:17+01:00 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_r8600_xios_read_write_v2/NEMOGCM/NEMO/OPA_SRC/IOM/restart.F90
r8800 r8801 28 28 USE iom ! I/O module 29 29 USE diurnal_bulk 30 30 USE iom_def, ONLY : lwxios 31 31 32 IMPLICIT NONE 32 33 PRIVATE … … 61 62 CHARACTER(LEN=50) :: clname ! ocean output restart file name 62 63 CHARACTER(lc) :: clpath ! full path to ocean output restart file 64 CHARACTER(LEN=52) :: clpname ! ocean output restart file name including prefix for AGRIF 63 65 !!---------------------------------------------------------------------- 64 66 ! … … 94 96 IF(lwp) THEN 95 97 WRITE(numout,*) 96 SELECT CASE ( jprstlib ) 97 CASE DEFAULT ; WRITE(numout,*) & 98 ' open ocean restart NetCDF file: ',TRIM(clpath)//clname 99 END SELECT 100 IF ( snc4set%luse ) WRITE(numout,*) ' opened for NetCDF4 chunking and compression' 101 IF( kt == nitrst - 1 ) THEN ; WRITE(numout,*) ' kt = nitrst - 1 = ', kt 102 ELSE ; WRITE(numout,*) ' kt = ' , kt 98 IF(.NOT.lwxios) THEN 99 SELECT CASE ( jprstlib ) 100 CASE DEFAULT ; WRITE(numout,*) & 101 ' open ocean restart NetCDF file: ',TRIM(clpath)//TRIM(clname) 102 END SELECT 103 IF ( snc4set%luse ) WRITE(numout,*) ' opened for NetCDF4 chunking and compression' 104 IF( kt == nitrst - 1 ) THEN ; WRITE(numout,*) ' kt = nitrst - 1 = ', kt 105 ELSE ; WRITE(numout,*) ' kt = ' , kt 106 ENDIF 103 107 ENDIF 104 108 ENDIF 105 109 ! 106 CALL iom_open( TRIM(clpath)//TRIM(clname), numrow, ldwrt = .TRUE., kiolib = jprstlib ) 110 IF(.NOT.lwxios) THEN 111 CALL iom_open( TRIM(clpath)//TRIM(clname), numrow, ldwrt = .TRUE., kiolib = jprstlib ) 112 ELSE 113 cwxios_context = "rstw_"//TRIM(ADJUSTL(clkt)) 114 IF( TRIM(Agrif_CFixed()) == '0' ) THEN 115 clpname = clname 116 ELSE 117 clpname = TRIM(Agrif_CFixed())//"_"//clname 118 ENDIF 119 CALL iom_init( cwxios_context, TRIM(clpath)//TRIM(clpname)) 120 CALL xios_update_calendar(nitrst) 121 CALL iom_swap( cxios_context ) 122 ENDIF 107 123 lrst_oce = .TRUE. 108 124 ENDIF … … 123 139 INTEGER, INTENT(in) :: kt ! ocean time-step 124 140 !!---------------------------------------------------------------------- 125 126 CALL iom_rstput( kt, nitrst, numrow, 'rdt' , rdt ) ! dynamics and tracertime step141 IF(lwxios) CALL iom_swap( cwxios_context ) 142 CALL iom_rstput( kt, nitrst, numrow, 'rdt' , rdt , ldxios = lwxios) ! dynamics time step 127 143 128 144 IF ( .NOT. ln_diurnal_only ) THEN 129 CALL iom_rstput( kt, nitrst, numrow, 'ub' , ub ) ! before fields130 CALL iom_rstput( kt, nitrst, numrow, 'vb' , vb )131 CALL iom_rstput( kt, nitrst, numrow, 'tb' , tsb(:,:,:,jp_tem) )132 CALL iom_rstput( kt, nitrst, numrow, 'sb' , tsb(:,:,:,jp_sal) )133 CALL iom_rstput( kt, nitrst, numrow, 'sshb' , sshb )145 CALL iom_rstput( kt, nitrst, numrow, 'ub' , ub, ldxios = lwxios ) ! before fields 146 CALL iom_rstput( kt, nitrst, numrow, 'vb' , vb, ldxios = lwxios ) 147 CALL iom_rstput( kt, nitrst, numrow, 'tb' , tsb(:,:,:,jp_tem), ldxios = lwxios ) 148 CALL iom_rstput( kt, nitrst, numrow, 'sb' , tsb(:,:,:,jp_sal), ldxios = lwxios ) 149 CALL iom_rstput( kt, nitrst, numrow, 'sshb' , sshb, ldxios = lwxios ) 134 150 ! 135 CALL iom_rstput( kt, nitrst, numrow, 'un' , un ) ! now fields 136 CALL iom_rstput( kt, nitrst, numrow, 'vn' , vn ) 137 CALL iom_rstput( kt, nitrst, numrow, 'tn' , tsn(:,:,:,jp_tem) ) 138 CALL iom_rstput( kt, nitrst, numrow, 'sn' , tsn(:,:,:,jp_sal) ) 139 CALL iom_rstput( kt, nitrst, numrow, 'sshn' , sshn ) 140 CALL iom_rstput( kt, nitrst, numrow, 'rhop' , rhop ) 141 151 CALL iom_rstput( kt, nitrst, numrow, 'un' , un, ldxios = lwxios ) ! now fields 152 CALL iom_rstput( kt, nitrst, numrow, 'vn' , vn, ldxios = lwxios ) 153 CALL iom_rstput( kt, nitrst, numrow, 'tn' , tsn(:,:,:,jp_tem), ldxios = lwxios ) 154 CALL iom_rstput( kt, nitrst, numrow, 'sn' , tsn(:,:,:,jp_sal), ldxios = lwxios ) 155 CALL iom_rstput( kt, nitrst, numrow, 'sshn' , sshn, ldxios = lwxios ) 156 CALL iom_rstput( kt, nitrst, numrow, 'rhop' , rhop, ldxios = lwxios ) 142 157 ! extra variable needed for the ice sheet coupling 143 158 IF ( ln_iscpl ) THEN 144 CALL iom_rstput( kt, nitrst, numrow, 'tmask' , tmask 145 CALL iom_rstput( kt, nitrst, numrow, 'umask' , umask 146 CALL iom_rstput( kt, nitrst, numrow, 'vmask' , vmask 147 CALL iom_rstput( kt, nitrst, numrow, 'smask' , ssmask 148 CALL iom_rstput( kt, nitrst, numrow, 'e3t_n', e3t_n(:,:,:) ) ! need to compute temperature correction149 CALL iom_rstput( kt, nitrst, numrow, 'e3u_n', e3u_n(:,:,:) ) ! need to compute bt conservation150 CALL iom_rstput( kt, nitrst, numrow, 'e3v_n', e3v_n(:,:,:) ) ! need to compute bt conservation151 CALL iom_rstput( kt, nitrst, numrow, 'gdepw_n', gdepw_n(:,:,:) ) ! need to compute extrapolation if vvl159 CALL iom_rstput( kt, nitrst, numrow, 'tmask' , tmask, ldxios = lwxios ) ! need to extrapolate T/S 160 CALL iom_rstput( kt, nitrst, numrow, 'umask' , umask, ldxios = lwxios ) ! need to correct barotropic velocity 161 CALL iom_rstput( kt, nitrst, numrow, 'vmask' , vmask, ldxios = lwxios ) ! need to correct barotropic velocity 162 CALL iom_rstput( kt, nitrst, numrow, 'smask' , ssmask, ldxios = lwxios) ! need to correct barotropic velocity 163 CALL iom_rstput( kt, nitrst, numrow, 'e3t_n', e3t_n(:,:,:), ldxios = lwxios ) ! need to compute temperature correction 164 CALL iom_rstput( kt, nitrst, numrow, 'e3u_n', e3u_n(:,:,:), ldxios = lwxios ) ! need to compute bt conservation 165 CALL iom_rstput( kt, nitrst, numrow, 'e3v_n', e3v_n(:,:,:), ldxios = lwxios ) ! need to compute bt conservation 166 CALL iom_rstput( kt, nitrst, numrow, 'gdepw_n', gdepw_n(:,:,:), ldxios = lwxios ) ! need to compute extrapolation if vvl 152 167 END IF 153 168 ENDIF 154 169 155 IF (ln_diurnal) CALL iom_rstput( kt, nitrst, numrow, 'Dsst', x_dsst 156 170 IF (ln_diurnal) CALL iom_rstput( kt, nitrst, numrow, 'Dsst', x_dsst, ldxios = lwxios ) 171 IF(lwxios) CALL iom_swap( cxios_context ) 157 172 IF( kt == nitrst ) THEN 158 CALL iom_close( numrow ) ! close the restart file (only at last time step) 173 IF(.NOT.lwxios) THEN 174 CALL iom_close( numrow ) ! close the restart file (only at last time step) 175 ELSE 176 CALL iom_context_finalize( cwxios_context ) 177 ENDIF 159 178 !!gm IF( .NOT. lk_trdmld ) lrst_oce = .FALSE. 160 179 !!gm not sure what to do here ===>>> ask to Sebastian … … 164 183 nitrst = nstocklist( nrst_lst ) 165 184 ENDIF 166 lrst_oce = .FALSE.167 185 ENDIF 168 186 ! … … 200 218 ! can handle checking if variable is in the restart file (there will be no need to open 201 219 ! restart) 202 IF(.NOT.lxios_set) l xios_read = lxios_read.AND.lxios_sini203 IF( l xios_read) THEN220 IF(.NOT.lxios_set) lrxios = lrxios.AND.lxios_sini 221 IF( lrxios) THEN 204 222 crxios_context = 'nemo_rst' 205 223 if(.NOT.lxios_set) then … … 209 227 endif 210 228 ENDIF 211 IF( TRIM(Agrif_CFixed()) /= '0' .AND. l xios_read) THEN229 IF( TRIM(Agrif_CFixed()) /= '0' .AND. lrxios) THEN 212 230 CALL iom_init( crxios_context ) 213 231 IF(lwp) WRITE(numout,*) 'Enable restart reading by XIOS for AGRIF' … … 231 249 TYPE(xios_duration):: dtime 232 250 integer::ni,nj,nk 251 REAL(wp), DIMENSION(jpi, jpj, jpk) :: w3d 233 252 !!---------------------------------------------------------------------- 234 253 … … 237 256 ! Check dynamics and tracer time-step consistency and force Euler restart if changed 238 257 IF( iom_varid( numror, 'rdt', ldstop = .FALSE. ) > 0 ) THEN 239 CALL iom_get( numror, 'rdt', zrdt, ldxios = l xios_read)258 CALL iom_get( numror, 'rdt', zrdt, ldxios = lrxios ) 240 259 IF( zrdt /= rdt ) neuler = 0 241 260 ENDIF 242 261 243 262 ! Diurnal DSST 244 IF( ln_diurnal ) CALL iom_get( numror, jpdom_autoglo, 'Dsst' , x_dsst, ldxios = l xios_read)263 IF( ln_diurnal ) CALL iom_get( numror, jpdom_autoglo, 'Dsst' , x_dsst, ldxios = lrxios ) 245 264 IF ( ln_diurnal_only ) THEN 246 265 IF(lwp) WRITE( numout, * ) & 247 266 & "rst_read:- ln_diurnal_only set, setting rhop=rau0" 248 267 rhop = rau0 249 CALL iom_get( numror, jpdom_autoglo, 'tn' , tsn(:,:,1,jp_tem), ldxios = lxios_read ) 268 CALL iom_get( numror, jpdom_autoglo, 'tn' , w3d, ldxios = lrxios ) 269 tsn(:,:,1,jp_tem) = w3d(:,:,1) 250 270 RETURN 251 271 ENDIF 252 272 253 273 IF( iom_varid( numror, 'ub', ldstop = .FALSE. ) > 0 ) THEN 254 CALL iom_get( numror, jpdom_autoglo, 'ub' , ub, ldxios = l xios_read) ! before fields255 CALL iom_get( numror, jpdom_autoglo, 'vb' , vb, ldxios = l xios_read)256 CALL iom_get( numror, jpdom_autoglo, 'tb' , tsb(:,:,:,jp_tem), ldxios = l xios_read)257 CALL iom_get( numror, jpdom_autoglo, 'sb' , tsb(:,:,:,jp_sal), ldxios = l xios_read)258 CALL iom_get( numror, jpdom_autoglo, 'sshb' , sshb, ldxios = l xios_read)274 CALL iom_get( numror, jpdom_autoglo, 'ub' , ub, ldxios = lrxios ) ! before fields 275 CALL iom_get( numror, jpdom_autoglo, 'vb' , vb, ldxios = lrxios ) 276 CALL iom_get( numror, jpdom_autoglo, 'tb' , tsb(:,:,:,jp_tem), ldxios = lrxios ) 277 CALL iom_get( numror, jpdom_autoglo, 'sb' , tsb(:,:,:,jp_sal), ldxios = lrxios ) 278 CALL iom_get( numror, jpdom_autoglo, 'sshb' , sshb, ldxios = lrxios ) 259 279 ELSE 260 280 neuler = 0 261 281 ENDIF 262 282 ! 263 CALL iom_get( numror, jpdom_autoglo, 'un' , un, ldxios = l xios_read) ! now fields264 CALL iom_get( numror, jpdom_autoglo, 'vn' , vn, ldxios = l xios_read)265 CALL iom_get( numror, jpdom_autoglo, 'tn' , tsn(:,:,:,jp_tem), ldxios = l xios_read)266 CALL iom_get( numror, jpdom_autoglo, 'sn' , tsn(:,:,:,jp_sal), ldxios = l xios_read)267 CALL iom_get( numror, jpdom_autoglo, 'sshn' , sshn, ldxios = l xios_read)283 CALL iom_get( numror, jpdom_autoglo, 'un' , un, ldxios = lrxios ) ! now fields 284 CALL iom_get( numror, jpdom_autoglo, 'vn' , vn, ldxios = lrxios ) 285 CALL iom_get( numror, jpdom_autoglo, 'tn' , tsn(:,:,:,jp_tem), ldxios = lrxios ) 286 CALL iom_get( numror, jpdom_autoglo, 'sn' , tsn(:,:,:,jp_sal), ldxios = lrxios ) 287 CALL iom_get( numror, jpdom_autoglo, 'sshn' , sshn, ldxios = lrxios ) 268 288 IF( iom_varid( numror, 'rhop', ldstop = .FALSE. ) > 0 ) THEN 269 CALL iom_get( numror, jpdom_autoglo, 'rhop' , rhop, ldxios = l xios_read) ! now potential density289 CALL iom_get( numror, jpdom_autoglo, 'rhop' , rhop, ldxios = lrxios ) ! now potential density 270 290 ELSE 271 291 CALL eos( tsn, rhd, rhop, gdept_n(:,:,:) )
Note: See TracChangeset
for help on using the changeset viewer.