- Timestamp:
- 2018-02-28T17:23:20+01:00 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/IOM/restart.F90
r6140 r9367 28 28 USE iom ! I/O module 29 29 USE diurnal_bulk 30 30 31 31 IMPLICIT NONE 32 32 PRIVATE … … 61 61 CHARACTER(LEN=50) :: clname ! ocean output restart file name 62 62 CHARACTER(lc) :: clpath ! full path to ocean output restart file 63 CHARACTER(LEN=52) :: clpname ! ocean output restart file name including prefix for AGRIF 63 64 !!---------------------------------------------------------------------- 64 65 ! … … 94 95 IF(lwp) THEN 95 96 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 97 IF(.NOT.lwxios) THEN 98 SELECT CASE ( jprstlib ) 99 CASE DEFAULT ; WRITE(numout,*) & 100 ' open ocean restart NetCDF file: ',TRIM(clpath)//TRIM(clname) 101 END SELECT 102 IF ( snc4set%luse ) WRITE(numout,*) ' opened for NetCDF4 chunking and compression' 103 IF( kt == nitrst - 1 ) THEN ; WRITE(numout,*) ' kt = nitrst - 1 = ', kt 104 ELSE ; WRITE(numout,*) ' kt = ' , kt 105 ENDIF 103 106 ENDIF 104 107 ENDIF 105 108 ! 106 CALL iom_open( TRIM(clpath)//TRIM(clname), numrow, ldwrt = .TRUE., kiolib = jprstlib ) 109 IF(.NOT.lwxios) THEN 110 CALL iom_open( TRIM(clpath)//TRIM(clname), numrow, ldwrt = .TRUE., kiolib = jprstlib ) 111 ELSE 112 cwxios_context = "rstw_"//TRIM(ADJUSTL(clkt)) 113 IF( TRIM(Agrif_CFixed()) == '0' ) THEN 114 clpname = clname 115 ELSE 116 clpname = TRIM(Agrif_CFixed())//"_"//clname 117 ENDIF 118 CALL iom_init( cwxios_context, TRIM(clpath)//TRIM(clpname)) 119 CALL xios_update_calendar(nitrst) 120 CALL iom_swap( cxios_context ) 121 ENDIF 107 122 lrst_oce = .TRUE. 108 123 ENDIF … … 123 138 INTEGER, INTENT(in) :: kt ! ocean time-step 124 139 !!---------------------------------------------------------------------- 125 126 CALL iom_rstput( kt, nitrst, numrow, 'rdt' , rdt ) ! dynamics and tracertime step140 IF(lwxios) CALL iom_swap( cwxios_context ) 141 CALL iom_rstput( kt, nitrst, numrow, 'rdt' , rdt , ldxios = lwxios) ! dynamics time step 127 142 128 143 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 )144 CALL iom_rstput( kt, nitrst, numrow, 'ub' , ub, ldxios = lwxios ) ! before fields 145 CALL iom_rstput( kt, nitrst, numrow, 'vb' , vb, ldxios = lwxios ) 146 CALL iom_rstput( kt, nitrst, numrow, 'tb' , tsb(:,:,:,jp_tem), ldxios = lwxios ) 147 CALL iom_rstput( kt, nitrst, numrow, 'sb' , tsb(:,:,:,jp_sal), ldxios = lwxios ) 148 CALL iom_rstput( kt, nitrst, numrow, 'sshb' , sshb, ldxios = lwxios ) 134 149 ! 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 150 CALL iom_rstput( kt, nitrst, numrow, 'un' , un, ldxios = lwxios ) ! now fields 151 CALL iom_rstput( kt, nitrst, numrow, 'vn' , vn, ldxios = lwxios ) 152 CALL iom_rstput( kt, nitrst, numrow, 'tn' , tsn(:,:,:,jp_tem), ldxios = lwxios ) 153 CALL iom_rstput( kt, nitrst, numrow, 'sn' , tsn(:,:,:,jp_sal), ldxios = lwxios ) 154 CALL iom_rstput( kt, nitrst, numrow, 'sshn' , sshn, ldxios = lwxios ) 155 CALL iom_rstput( kt, nitrst, numrow, 'rhop' , rhop, ldxios = lwxios ) 142 156 ! extra variable needed for the ice sheet coupling 143 157 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 vvl158 CALL iom_rstput( kt, nitrst, numrow, 'tmask' , tmask, ldxios = lwxios ) ! need to extrapolate T/S 159 CALL iom_rstput( kt, nitrst, numrow, 'umask' , umask, ldxios = lwxios ) ! need to correct barotropic velocity 160 CALL iom_rstput( kt, nitrst, numrow, 'vmask' , vmask, ldxios = lwxios ) ! need to correct barotropic velocity 161 CALL iom_rstput( kt, nitrst, numrow, 'smask' , ssmask, ldxios = lwxios) ! need to correct barotropic velocity 162 CALL iom_rstput( kt, nitrst, numrow, 'e3t_n', e3t_n(:,:,:), ldxios = lwxios ) ! need to compute temperature correction 163 CALL iom_rstput( kt, nitrst, numrow, 'e3u_n', e3u_n(:,:,:), ldxios = lwxios ) ! need to compute bt conservation 164 CALL iom_rstput( kt, nitrst, numrow, 'e3v_n', e3v_n(:,:,:), ldxios = lwxios ) ! need to compute bt conservation 165 CALL iom_rstput( kt, nitrst, numrow, 'gdepw_n', gdepw_n(:,:,:), ldxios = lwxios ) ! need to compute extrapolation if vvl 152 166 END IF 153 167 ENDIF 154 168 155 IF (ln_diurnal) CALL iom_rstput( kt, nitrst, numrow, 'Dsst', x_dsst 156 169 IF (ln_diurnal) CALL iom_rstput( kt, nitrst, numrow, 'Dsst', x_dsst, ldxios = lwxios ) 170 IF(lwxios) CALL iom_swap( cxios_context ) 157 171 IF( kt == nitrst ) THEN 158 CALL iom_close( numrow ) ! close the restart file (only at last time step) 172 IF(.NOT.lwxios) THEN 173 CALL iom_close( numrow ) ! close the restart file (only at last time step) 174 ELSE 175 CALL iom_context_finalize( cwxios_context ) 176 ENDIF 159 177 !!gm IF( .NOT. lk_trdmld ) lrst_oce = .FALSE. 160 178 !!gm not sure what to do here ===>>> ask to Sebastian … … 164 182 nitrst = nstocklist( nrst_lst ) 165 183 ENDIF 166 lrst_oce = .FALSE.167 184 ENDIF 168 185 ! … … 193 210 WRITE(numout,*) '~~~~~~~~' 194 211 ENDIF 195 212 lxios_sini = .FALSE. 196 213 clpath = TRIM(cn_ocerst_indir) 197 214 IF( clpath(LEN_TRIM(clpath):) /= '/' ) clpath = TRIM(clpath) // '/' 198 215 CALL iom_open( TRIM(clpath)//cn_ocerst_in, numror, kiolib = jlibalt ) 199 ENDIF 216 ! are we using XIOS to read the data? Part above will have to modified once XIOS 217 ! can handle checking if variable is in the restart file (there will be no need to open 218 ! restart) 219 IF(.NOT.lxios_set) lrxios = lrxios.AND.lxios_sini 220 IF( lrxios) THEN 221 crxios_context = 'nemo_rst' 222 IF( .NOT.lxios_set ) THEN 223 IF(lwp) WRITE(numout,*) 'Enable restart reading by XIOS' 224 CALL iom_init( crxios_context ) 225 lxios_set = .TRUE. 226 ENDIF 227 ENDIF 228 IF( TRIM(Agrif_CFixed()) /= '0' .AND. lrxios) THEN 229 CALL iom_init( crxios_context ) 230 IF(lwp) WRITE(numout,*) 'Enable restart reading by XIOS for AGRIF' 231 lxios_set = .TRUE. 232 ENDIF 233 ENDIF 234 200 235 END SUBROUTINE rst_read_open 201 236 … … 211 246 REAL(wp) :: zrdt 212 247 INTEGER :: jk 248 REAL(wp), DIMENSION(jpi, jpj, jpk) :: w3d 213 249 !!---------------------------------------------------------------------- 214 250 … … 217 253 ! Check dynamics and tracer time-step consistency and force Euler restart if changed 218 254 IF( iom_varid( numror, 'rdt', ldstop = .FALSE. ) > 0 ) THEN 219 CALL iom_get( numror, 'rdt', zrdt )255 CALL iom_get( numror, 'rdt', zrdt, ldxios = lrxios ) 220 256 IF( zrdt /= rdt ) neuler = 0 221 257 ENDIF 222 258 223 259 ! Diurnal DSST 224 IF( ln_diurnal ) CALL iom_get( numror, jpdom_autoglo, 'Dsst' , x_dsst 260 IF( ln_diurnal ) CALL iom_get( numror, jpdom_autoglo, 'Dsst' , x_dsst, ldxios = lrxios ) 225 261 IF ( ln_diurnal_only ) THEN 226 262 IF(lwp) WRITE( numout, * ) & 227 263 & "rst_read:- ln_diurnal_only set, setting rhop=rau0" 228 264 rhop = rau0 229 CALL iom_get( numror, jpdom_autoglo, 'tn' , tsn(:,:,1,jp_tem) ) 265 CALL iom_get( numror, jpdom_autoglo, 'tn' , w3d, ldxios = lrxios ) 266 tsn(:,:,1,jp_tem) = w3d(:,:,1) 230 267 RETURN 231 268 ENDIF 232 269 233 270 IF( iom_varid( numror, 'ub', ldstop = .FALSE. ) > 0 ) THEN 234 CALL iom_get( numror, jpdom_autoglo, 'ub' , ub ) ! before fields235 CALL iom_get( numror, jpdom_autoglo, 'vb' , vb )236 CALL iom_get( numror, jpdom_autoglo, 'tb' , tsb(:,:,:,jp_tem) )237 CALL iom_get( numror, jpdom_autoglo, 'sb' , tsb(:,:,:,jp_sal) )238 CALL iom_get( numror, jpdom_autoglo, 'sshb' , sshb )271 CALL iom_get( numror, jpdom_autoglo, 'ub' , ub, ldxios = lrxios ) ! before fields 272 CALL iom_get( numror, jpdom_autoglo, 'vb' , vb, ldxios = lrxios ) 273 CALL iom_get( numror, jpdom_autoglo, 'tb' , tsb(:,:,:,jp_tem), ldxios = lrxios ) 274 CALL iom_get( numror, jpdom_autoglo, 'sb' , tsb(:,:,:,jp_sal), ldxios = lrxios ) 275 CALL iom_get( numror, jpdom_autoglo, 'sshb' , sshb, ldxios = lrxios ) 239 276 ELSE 240 277 neuler = 0 241 278 ENDIF 242 279 ! 243 CALL iom_get( numror, jpdom_autoglo, 'un' , un 244 CALL iom_get( numror, jpdom_autoglo, 'vn' , vn 245 CALL iom_get( numror, jpdom_autoglo, 'tn' , tsn(:,:,:,jp_tem) )246 CALL iom_get( numror, jpdom_autoglo, 'sn' , tsn(:,:,:,jp_sal) )247 CALL iom_get( numror, jpdom_autoglo, 'sshn' , sshn 280 CALL iom_get( numror, jpdom_autoglo, 'un' , un, ldxios = lrxios ) ! now fields 281 CALL iom_get( numror, jpdom_autoglo, 'vn' , vn, ldxios = lrxios ) 282 CALL iom_get( numror, jpdom_autoglo, 'tn' , tsn(:,:,:,jp_tem), ldxios = lrxios ) 283 CALL iom_get( numror, jpdom_autoglo, 'sn' , tsn(:,:,:,jp_sal), ldxios = lrxios ) 284 CALL iom_get( numror, jpdom_autoglo, 'sshn' , sshn, ldxios = lrxios ) 248 285 IF( iom_varid( numror, 'rhop', ldstop = .FALSE. ) > 0 ) THEN 249 CALL iom_get( numror, jpdom_autoglo, 'rhop' , rhop 286 CALL iom_get( numror, jpdom_autoglo, 'rhop' , rhop, ldxios = lrxios ) ! now potential density 250 287 ELSE 251 288 CALL eos( tsn, rhd, rhop, gdept_n(:,:,:) )
Note: See TracChangeset
for help on using the changeset viewer.