Changeset 5518 for trunk/NEMOGCM
- Timestamp:
- 2015-06-30T15:11:42+02:00 (9 years ago)
- Location:
- trunk/NEMOGCM/NEMO
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/OPA_SRC/IOM/in_out_manager.F90
r5407 r5518 90 90 INTEGER :: nitrst !: time step at which restart file should be written 91 91 LOGICAL :: lrst_oce !: logical to control the oce restart write 92 INTEGER :: numror, numrow !: logical unit for cean restart (read and write) 92 INTEGER :: numror = 0 !: logical unit for ocean restart (read). Init to 0 is needed for SAS (in daymod.F90) 93 INTEGER :: numrow !: logical unit for ocean restart (write) 93 94 INTEGER :: nrst_lst !: number of restart to output next 94 95 -
trunk/NEMOGCM/NEMO/SAS_SRC/daymod.F90
r5407 r5518 80 80 ndt05 = NINT(0.5 * rdttra(1)) 81 81 82 ! parameters corresponding to nit000 - 1 (as we start the step loop with a call to day) 83 ndastp = ndate0 - 1 ! ndate0 read in the namelist in dom_nam, we assume that we start run at 00:00 84 adatrj = ( REAL( nit000-1, wp ) * rdttra(1) ) / rday 85 IF( ABS(adatrj - REAL(NINT(adatrj),wp)) < 0.1 / rday ) adatrj = REAL(NINT(adatrj),wp) ! avoid truncation error 86 ! 87 IF(lwp) THEN 88 WRITE(numout,*) ' *** Info used values : ' 89 WRITE(numout,*) ' date ndastp : ', ndastp 90 WRITE(numout,*) ' number of elapsed days since the begining of run : ', adatrj 91 WRITE(numout,*) 92 ENDIF 82 ! ==> clem: here we read the ocean restart for the date (only if it exists) 83 ! It is not clean and another solution should be found 84 CALL day_rst( nit000, 'READ' ) 85 ! ==> 93 86 94 87 ! set the calendar from ndastp (read in restart file and namelist) … … 285 278 ! 286 279 END SUBROUTINE day 280 281 282 SUBROUTINE day_rst( kt, cdrw ) 283 !!--------------------------------------------------------------------- 284 !! *** ROUTINE ts_rst *** 285 !! 286 !! ** Purpose : Read or write calendar in restart file: 287 !! 288 !! WRITE(READ) mode: 289 !! kt : number of time step since the begining of the experiment at the 290 !! end of the current(previous) run 291 !! adatrj(0) : number of elapsed days since the begining of the experiment at the 292 !! end of the current(previous) run (REAL -> keep fractions of day) 293 !! ndastp : date at the end of the current(previous) run (coded as yyyymmdd integer) 294 !! 295 !! According to namelist parameter nrstdt, 296 !! nrstdt = 0 no control on the date (nit000 is arbitrary). 297 !! nrstdt = 1 we verify that nit000 is equal to the last 298 !! time step of previous run + 1. 299 !! In both those options, the exact duration of the experiment 300 !! since the beginning (cumulated duration of all previous restart runs) 301 !! is not stored in the restart and is assumed to be (nit000-1)*rdt. 302 !! This is valid is the time step has remained constant. 303 !! 304 !! nrstdt = 2 the duration of the experiment in days (adatrj) 305 !! has been stored in the restart file. 306 !!---------------------------------------------------------------------- 307 INTEGER , INTENT(in) :: kt ! ocean time-step 308 CHARACTER(len=*), INTENT(in) :: cdrw ! "READ"/"WRITE" flag 309 ! 310 REAL(wp) :: zkt, zndastp 311 !!---------------------------------------------------------------------- 312 313 IF( TRIM(cdrw) == 'READ' ) THEN 314 315 IF( iom_varid( numror, 'kt', ldstop = .FALSE. ) > 0 ) THEN 316 ! Get Calendar informations 317 CALL iom_get( numror, 'kt', zkt ) ! last time-step of previous run 318 IF(lwp) THEN 319 WRITE(numout,*) ' *** Info read in restart : ' 320 WRITE(numout,*) ' previous time-step : ', NINT( zkt ) 321 WRITE(numout,*) ' *** restart option' 322 SELECT CASE ( nrstdt ) 323 CASE ( 0 ) ; WRITE(numout,*) ' nrstdt = 0 : no control of nit000' 324 CASE ( 1 ) ; WRITE(numout,*) ' nrstdt = 1 : no control the date at nit000 (use ndate0 read in the namelist)' 325 CASE ( 2 ) ; WRITE(numout,*) ' nrstdt = 2 : calendar parameters read in restart' 326 END SELECT 327 WRITE(numout,*) 328 ENDIF 329 ! Control of date 330 IF( nit000 - NINT( zkt ) /= 1 .AND. nrstdt /= 0 ) & 331 & CALL ctl_stop( ' ===>>>> : problem with nit000 for the restart', & 332 & ' verify the restart file or rerun with nrstdt = 0 (namelist)' ) 333 ! define ndastp and adatrj 334 IF ( nrstdt == 2 ) THEN 335 ! read the parameters correspondting to nit000 - 1 (last time step of previous run) 336 CALL iom_get( numror, 'ndastp', zndastp ) 337 ndastp = NINT( zndastp ) 338 CALL iom_get( numror, 'adatrj', adatrj ) 339 ELSE 340 ! parameters correspondting to nit000 - 1 (as we start the step loop with a call to day) 341 ndastp = ndate0 - 1 ! ndate0 read in the namelist in dom_nam, we assume that we start run at 00:00 342 adatrj = ( REAL( nit000-1, wp ) * rdttra(1) ) / rday 343 ! note this is wrong if time step has changed during run 344 ENDIF 345 ELSE 346 ! parameters correspondting to nit000 - 1 (as we start the step loop with a call to day) 347 ndastp = ndate0 - 1 ! ndate0 read in the namelist in dom_nam, we assume that we start run at 00:00 348 adatrj = ( REAL( nit000-1, wp ) * rdttra(1) ) / rday 349 ENDIF 350 IF( ABS(adatrj - REAL(NINT(adatrj),wp)) < 0.1 / rday ) adatrj = REAL(NINT(adatrj),wp) ! avoid truncation error 351 ! 352 IF(lwp) THEN 353 WRITE(numout,*) ' *** Info used values : ' 354 WRITE(numout,*) ' date ndastp : ', ndastp 355 WRITE(numout,*) ' number of elapsed days since the begining of run : ', adatrj 356 WRITE(numout,*) 357 ENDIF 358 ! 359 ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN 360 ! 361 IF( kt == nitrst ) THEN 362 IF(lwp) WRITE(numout,*) 363 IF(lwp) WRITE(numout,*) 'rst_write : write oce restart file kt =', kt 364 IF(lwp) WRITE(numout,*) '~~~~~~~' 365 ENDIF 366 ! calendar control 367 CALL iom_rstput( kt, nitrst, numrow, 'kt' , REAL( kt , wp) ) ! time-step 368 CALL iom_rstput( kt, nitrst, numrow, 'ndastp' , REAL( ndastp, wp) ) ! date 369 CALL iom_rstput( kt, nitrst, numrow, 'adatrj' , adatrj ) ! number of elapsed days since 370 ! ! the begining of the run [s] 371 ENDIF 372 ! 373 END SUBROUTINE day_rst 287 374 !!====================================================================== 288 375 END MODULE daymod
Note: See TracChangeset
for help on using the changeset viewer.