- Timestamp:
- 2017-10-17T14:31:49+02:00 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_r8600_xios_write/NEMOGCM/NEMO/OPA_SRC/IOM/restart.F90
r6140 r8630 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 63 !!---------------------------------------------------------------------- 64 ! 64 CHARACTER(LEN=52) :: dlname ! ocean output restart file name including prefix for AGRIF 65 !!---------------------------------------------------------------------- 66 ! 67 65 68 IF( kt == nit000 ) THEN ! default definitions 66 69 lrst_oce = .FALSE. … … 82 85 ! we open and define the ocean restart file one time step before writing the data (-> at nitrst - 1) 83 86 ! except if we write ocean restart files every time step or if an ocean restart file was writen at nitend - 1 87 ! NO, because the data is written 2 times on nitrst - 1 and nitrst 84 88 IF( kt == nitrst - 1 .OR. nstock == 1 .OR. ( kt == nitend .AND. .NOT. lrst_oce ) ) THEN 85 89 IF( nitrst <= nitend .AND. nitrst > 0 ) THEN … … 94 98 IF(lwp) THEN 95 99 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 100 IF(.NOT.lwxios) THEN 101 SELECT CASE ( jprstlib ) 102 CASE ( jprstdimg ) ; WRITE(numout,*) & 103 ' open ocean restart binary file: ',TRIM(clpath)//TRIM(clname) 104 CASE DEFAULT ; WRITE(numout,*) & 105 ' open ocean restart NetCDF file: ',TRIM(clpath)//TRIM(clname) 106 END SELECT 107 IF ( snc4set%luse ) WRITE(numout,*) ' opened for NetCDF4 chunking and compression' 108 IF( kt == nitrst - 1 ) THEN ; WRITE(numout,*) ' kt = nitrst - 1 = ', kt 109 ELSE ; WRITE(numout,*) ' kt = ' , kt 110 ENDIF 103 111 ENDIF 104 112 ENDIF 105 113 ! 106 CALL iom_open( TRIM(clpath)//TRIM(clname), numrow, ldwrt = .TRUE., kiolib = jprstlib ) 114 IF(.NOT.lwxios) THEN 115 CALL iom_open( TRIM(clpath)//TRIM(clname), numrow, ldwrt = .TRUE., kiolib = jprstlib ) 116 ELSE 117 wxios_context = "rstw_"//TRIM(ADJUSTL(clkt)) 118 IF( TRIM(Agrif_CFixed()) == '0' ) THEN 119 dlname = clname 120 ELSE 121 dlname = TRIM(Agrif_CFixed())//"_"//clname 122 ENDIF 123 CALL iom_rstw_init( wxios_context, TRIM(clpath)//TRIM(dlname)) 124 CALL xios_update_calendar(nitrst) 125 CALL iom_swap( cxios_context ) 126 ENDIF 107 127 lrst_oce = .TRUE. 108 128 ENDIF 109 129 ENDIF 130 110 131 ! 111 132 END SUBROUTINE rst_opn … … 123 144 INTEGER, INTENT(in) :: kt ! ocean time-step 124 145 !!---------------------------------------------------------------------- 125 146 IF(lwxios) CALL iom_swap( wxios_context ) 147 CALL iom_rstput( kt, nitrst, numrow, 'rdt' , rdt , lxios = lwxios) ! dynamics time step 148 CALL iom_rstput( kt, nitrst, numrow, 'rdttra1', rdttra(1) , lxios = lwxios) ! surface tracer time step 126 149 CALL iom_rstput( kt, nitrst, numrow, 'rdt' , rdt ) ! dynamics and tracer time step 127 150 128 151 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 )152 CALL iom_rstput( kt, nitrst, numrow, 'ub' , ub, lxios = lwxios) ) ! before fields 153 CALL iom_rstput( kt, nitrst, numrow, 'vb' , vb, lxios = lwxios) ) 154 CALL iom_rstput( kt, nitrst, numrow, 'tb' , tsb(:,:,:,jp_tem), lxios = lwxios) ) 155 CALL iom_rstput( kt, nitrst, numrow, 'sb' , tsb(:,:,:,jp_sal), lxios = lwxios) ) 156 CALL iom_rstput( kt, nitrst, numrow, 'sshb' , sshb, lxios = lwxios) ) 134 157 ! 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 158 CALL iom_rstput( kt, nitrst, numrow, 'un' , un, lxios = lwxios ) ! now fields 159 CALL iom_rstput( kt, nitrst, numrow, 'vn' , vn, lxios = lwxios ) 160 CALL iom_rstput( kt, nitrst, numrow, 'tn' , tsn(:,:,:,jp_tem), lxios = lwxios ) 161 CALL iom_rstput( kt, nitrst, numrow, 'sn' , tsn(:,:,:,jp_sal), lxios = lwxios ) 162 CALL iom_rstput( kt, nitrst, numrow, 'sshn' , sshn, lxios = lwxios ) 163 CALL iom_rstput( kt, nitrst, numrow, 'rhop' , rhop, lxios = lwxios ) 142 164 ! extra variable needed for the ice sheet coupling 143 165 IF ( ln_iscpl ) THEN … … 156 178 157 179 IF( kt == nitrst ) THEN 158 CALL iom_close( numrow ) ! close the restart file (only at last time step) 180 IF(.NOT.lwxios) THEN 181 CALL iom_close( numrow ) ! close the restart file (only at last time step) 182 ELSE 183 CALL iom_context_finalize( wxios_context ) 184 ENDIF 159 185 !!gm IF( .NOT. lk_trdmld ) lrst_oce = .FALSE. 160 186 !!gm not sure what to do here ===>>> ask to Sebastian … … 164 190 nitrst = nstocklist( nrst_lst ) 165 191 ENDIF 166 lrst_oce = .FALSE.167 192 ENDIF 168 193 ! … … 267 292 ! 268 293 END SUBROUTINE rst_read 269 270 294 !!===================================================================== 271 295 END MODULE restart
Note: See TracChangeset
for help on using the changeset viewer.